;**************************************************************************** ;* * ;* USYM * ;* USTAT 3.x Symbolic Definition File * ;* * ;**************************************************************************** ;Copyright (C) 1988, 1989 UltraSoft Corporation. All Rights Reserved. ; ;Written by: David Pallmann ; ;This file is required by USTAT,USTAT0,USTAT1,USTAT2,USTAT3,USTAT4, & USTAT5 ; ;Edit History: ;3.0(100) 01-Jan-88 created. /DFP ;3.0(101) 10-Mar-88 fix bug where we used TEMP but meant TEMP(A5). /DFP ;3.0(102) 14-Apr-88 add support in the header for 68030 systems. /DFP ;3.0(103) 16-Apr-88 fix bug where ersatz name was displayed with junk. /DFP ;3.0(104) 18-Apr-88 fix larvae (small bug) where checking for the user name ; capability forgot to take AMOS 2.0 into account. /DFP ;3.1(105) 20-Apr-88 add OPERATOR mode for users logged into [1,2]. /DFP ;3.2(106) 27-Apr-88 add PRINT QUEUE statistics to header. /DFP ;3.3(107) 28-Apr-88 add CACHE HIT RATE statistics to header. /DFP ;3.3(108) 02-May-88 fix terminal buffer display to 30 chars. /DFP ;3.3(109) 02-May-88 add command-line feature. /DFP ;3.4(110) 13-May-88 add AM72 graphics terminal support. /DFP ;3.4(111) 24-May-88 add support in Terminal Status screen for 38.4, 57.6K baud. /DFP ;3.4(112) 31-May-88 correct 68030/020/010 check. /DFP ;3.4(113) 20-Jul-88 correct bug which showed junk in Cache Hit Rate area. /DFP ;3.4(114) 20-Jul-88 change PP.NAM to PP.PNM because of 1.3D conflict. /DFP ;3.4(115) 02-Aug-88 fix problem with page forward and ^E. /DFP ;3.5(116) 10-May-89 make D)isk screen AMOS 2.0 compatible. /DFP ;3.6(117) 10-May-89 filter non-printable characters in T)erminal display. /DFP ;3.7(118) 13-May-89 fix ^T/^E in D)evice screen. /DFP ;3.8(119) 02-Jul-89 fix big bad bug where disk stats wrong under AMOS 1.x. /DFP ;3.9(120) 24-Aug-90 1. look at number of terminal rows via TRMCHR. /DFP ; 2. add X command to toggle 24 vs. 42 line mode. ;--- Version number of USTAT. Incorporated into program header when PHDR ; macro is encountered below. VMAJOR =3 VMINOR =9. VSUB =0 VEDIT =120. VWHO =0 ;--- Make sure we have the 2.0 assembler, by deliberately generating an ; assembly error if the 1.x assembler is being used. The 1.x assembler ; can't handle long symbol names, and would not assemble USTAT properly ; if allowed to. LONG.VAR.1=1 LONG.VAR.2=2 IF EQ,LONG.VAR.1-LONG.VAR.2,ASMERP "?The 2.0 assembler is required" ;--- Define the bit for the 68030 if the user's assembler system pre-dates it. IF NDF,SY$M30,SY$M30=100000 ;--- The following structure is header information used to update the ; optional statistics header .OFINI .OFDEF HD.DAT, 4 ; system date .OFDEF HD.TIM, 4 ; system time .OFDEF HD.UPT, 4 ; uptime .OFDEF HD.JOB, 2 ; job count .OFDEF HD.ALC, 2 ; number of allocated jobs .OFDEF HD.ACT, 2 ; active job count .OFDEF HD.CPB, 2 ; CPU-bound job count .OFDEF HD.IOB, 2 ; I/O-bound job count .OFDEF HD.QUE, 4 ; free queue blocks .OFDEF HD.DKQ, 4 ; disk queue (users waiting) .OFDEF HD.PRQ, 4 ; print queue (files printing) .OFDEF HD.CAD, 4 ; addr of disk cache .OFDEF HD.CAC, 6 ; cache performance percentage CACHE.TOTAL=24 ; total reads offset CACHE.READS=30 ; cache reads offset .OFSIZ HD.SIZ ;--- The following structure holds job information so that we know when ; something changed, and needs updating. One "job information block" ; is maintained for each job on the system. .OFINI .OFDEF JB.FLG, 4 ; flags: JB$NEW =1 ; new display line .OFDEF JB.NAM, 4 ; job name (RAD50) .OFDEF JB.TRM, 4 ; job attached terminal name (RAD50) .OFDEF JB.DEV, 2 ; log device .OFDEF JB.DRV, 2 ; log drive .OFDEF JB.PPN, 2 ; log account .OFDEF JB.PRG, 4 ; program name (RAD50) .OFDEF JB.STS, 2 ; run state .OFDEF JB.MEM, 4 ; job memory .OFDEF JB.CPU, 4 ; CPU time .OFDEF JB.DSR, 4 ; disk reads .OFDEF JB.DSW, 4 ; disk writes .OFDEF JB.USN, 20. ; user name .OFDEF JB.PRI, 2 ; priority .OFDEF JB.OWN, 4 ; name of owner job (RAD50) .OFDEF JB.TYP, 2 ; JOBTYP flags .OFDEF JB.BAS, 4 ; base of memory .OFDEF JB.JCB, 4 ; JCB address .OFDEF JB.TCB, 4 ; TCB address .OFSIZ JB.SIZ ; size of job information block ;--- Define terminal storage structure .OFINI .OFDEF TM.FLG, 4 ; flags: TM$NEW =1 ; new display line .OFDEF TM.NAM, 4 ; terminal name (RAD50) .OFDEF TM.JOB, 4 ; attached job (RAD50) .OFDEF TM.IDV, 4 ; IDV name (RAD50) .OFDEF TM.TDV, 4 ; TDV name (RAD50) .OFDEF TM.PRT, 4 ; port number .OFDEF TM.BAD, 2 ; baud rate code .OFDEF TM.ILB, 40. ; input line buffer .OFSIZ TM.SIZ ;--- Define device storage structure .OFINI .OFDEF DT.FLG, 4 ; flags: DT$NEW =1 ; new display line .OFDEF DT.DEV, 2 ; device code (RAD50) .OFDEF DT.DRV, 2 ; drive number .OFDEF DT.MAX, 4 ; device size .OFDEF DT.INU, 4 ; blocks in use .OFDEF DT.FRE, 4 ; blocks free .OFDEF DT.NOT, 2 ; notes .OFDEF DT.DVR, 4 ; address of driver .OFSIZ DT.SIZ ;--- Define printer storage structure [106] .OFINI .OFDEF PP.FLG, 4 ; flags: [106] PP$NEW =1 ; new display line [106] .OFDEF PP.NAM, 4 ; printer name (RAD50) [106] .OFDEF PP.CNT, 2 ; files queued [106] .OFDEF PP.DEV, 2 ; device of file being printed [106] .OFDEF PP.DRV, 2 ; drive of file being printed [106] .OFDEF PP.PNM, 4 ; name of file being printed [106][114] .OFDEF PP.EXT, 2 ; extension of file being printed [106] .OFDEF PP.PPN, 2 ; PPN of file being printed [106] .OFSIZ PP.SIZ ; [106] ;--- Define the maximum number of jobs, terminals & devices USTAT can handle MAX =300. ;--- Calculate size of array element large enough to hold a job, terminal, or ; device entry. ELEMENT =JB.SIZ IF LT,ELEMENT-TM.SIZ,ELEMENT=TM.SIZ IF LT,ELEMENT-DT.SIZ,ELEMENT=DT.SIZ ;--- Define variable storage - a memory partition is allocated in user ; memory containing these variables. .OFINI .OFDEF FLAGS, 4 ; flags: F$HIGH =1 ; current intensity is high F$ON =2 ; cursor is on F$GRAFIX=4 ; in graphics mode F$HEADER=10 ; header enabled F$UPDATE=20 ; full-screen update F$USER =40 ; show user name on job screen F$STATUS=100 ; status line has been displayed F$WIDE =200 ; wide display F$AM70 =400 ; color attributes (AM70 type) F$COLOR =1000 ; true color terminal (PC type) F$ERSATZ=2000 ; show ersatz names in job screen F$AUTO =4000 ; auto-scan F$LOG =10000 ; alert if PPN changes F$PROG =20000 ; alert if program changes F$32 =40000 ; os has AMOS/32 data structures F$OPR =100000 ; operator mode [105] .OFDEF TERM.FLAGS,TC.SIZ ; term. characteristic data .OFDEF HD.TBL, HD.SIZ ; header table .OFDEF JB.TBL, 0 ; (job table, .OFDEF TM.TBL, 0 ; terminal table, .OFDEF DT.TBL, 0 ; device table, .OFDEF PP.TBL, ELEMENT*MAX ; printer table) [106] .OFDEF TEMP, 100. ; work buffer .OFDEF JOB.ROW,1 ; row to start job display at .OFDEF ROW, 1 ; current display row .OFDEF JOB.ARROW,1 ; job arrow row (current) .OFDEF JOB.UPDATE,1 ; job arrow row (update) .OFDEF OPR.MARKER,1 ; operator marker row .OFDEF UNUSED, 1 ; unused (even up address) .OFDEF JOB.OFFSET,2 ; job offset .OFDEF DELAY, 4 ; delay time (1/4 seconds) .OFDEF MODE, 2 ; display mode: M$JOB =0 ; show job status M$TERM =2 ; show terminal status M$DEV =4 ; show device status M$PRINT =10 ; show printer status .OFDEF DISK, D.DDB ; disk DDB .OFDEF LAST.ROW,1 ; last row we can display on .OFDEF ARROW.COL,1 ; column to plot arrow at .OFDEF CMDADR, 4 ; address of command line .OFDEF INFO, DI.SIZ ; data returned by DSKINF call .OFDEF DEV.COUNT,2 ; device count .OFDEF TRM.COUNT,2 ; terminal count .OFSIZ MEMSIZ ;--- Define the format of the old spooler printer list .OFINI .OFDEF PR.LNK, 4 ; link to next printer .OFDEF PR.QUE, 4 ; link to print queue .OFDEF PR.NAM, 4 ; printer name RAD50 .OFDEF PR.FRM, 4 ; form name RAD50 .OFDEF PR.BLK, 2 ; blocks remaining .OFDEF PR.FLG, 2 ; flags--. PR$DEF =20 ; default printer .OFDEF PR.JCB, 4 ; controlling JCB addr .OFSIZ PR.SIZ ;--- Define the format of the old spooler printer queue .OFINI .OFDEF PQ.LNK, 4 ; link to next block .OFDEF PQ.NAM, 4 ; filename RAD50 .OFDEF PQ.EXT, 2 ; extension RAD50 .OFDEF PQ.DEV, 2 ; device code .OFDEF PQ.PPN, 2 ; PPN .OFDEF PQ.DRV, 2 ; drive number .OFDEF PQ.CPY, 2 ; copies .OFDEF PQ.FLG, 2 ; flags--. PQ$CUR =40000 ; currently being printed PQ$KIL =100000 ; flagged to be killed .OFDEF PQ.FRM, 4 ; form name RAD50 .OFDEF PQ.BLK, 2 ; blocks remaining .OFSIZ PQ.SIZ ;--- Register symbol names. Each register assigned a symbolic name here ; should not be used anywhere else in the program. MEM =A5 ; variable base register JCB =A4 ; pointer to true Job Control Block TCB =A4 ; Term Control Block DCB =A4 ; Device Control Block PCB =A4 ; Printer Control Block JIB =A3 ; pointer to our Job Info. Block TIB =A3 ; Terminal Info. Block DIB =A3 ; Device Info. Block PIB =A3 ; Printer Info. Block ;--- ASCII characters LF =12 CR =15 ESC =33 ;--- Terminal function macros DEFINE TCALL CODE MOVW #-1_8.+^D<CODE>,D1 TCRT ENDM DEFINE CLS=TCALL 0 DEFINE CLREOL=TCALL 9 DEFINE CLREOS=TCALL 10 DEFINE LO=TCALL 11 DEFINE HI=TCALL 12 DEFINE DELLIN=TCALL 15 DEFINE INSLIN=TCALL 16 DEFINE BLKON=TCALL 21 DEFINE BLKOFF=TCALL 22 DEFINE GMODE=TCALL 23 DEFINE TMODE=TCALL 24 DEFINE CON=TCALL 28 DEFINE COFF=TCALL 29 DEFINE UNDON=TCALL 30 DEFINE UNDOFF=TCALL 31 DEFINE REVON=TCALL 32 DEFINE REVOFF=TCALL 33 DEFINE STSLIN=TCALL 54 DEFINE WIDE=TCALL 80 DEFINE NARROW=TCALL 81 DEFINE ENDLIN=TCALL 129 DEFINE FBLACK CLR D1 CALL SET.COLOR ENDM DEFINE FWHITE MOV #1,D1 CALL SET.COLOR ENDM DEFINE FBLUE MOV #2,D1 CALL SET.COLOR ENDM DEFINE FMAGENTA MOV #3,D1 CALL SET.COLOR ENDM DEFINE FRED MOV #4,D1 CALL SET.COLOR ENDM DEFINE FYELLOW MOV #5,D1 CALL SET.COLOR ENDM DEFINE FGREEN MOV #6,D1 CALL SET.COLOR ENDM DEFINE FCYAN MOV #7,D1 CALL SET.COLOR ENDM DEFINE BLACK=TCALL 132 DEFINE WHITE=TCALL 133 DEFINE BLUE=TCALL 134 DEFINE MAGENTA=TCALL 135 DEFINE RED=TCALL 136 DEFINE YELLOW=TCALL 137 DEFINE GREEN=TCALL 138 DEFINE CYAN=TCALL 139 DEFINE RBLACK=TCALL 140 DEFINE RWHITE=TCALL 141 DEFINE RBLUE=TCALL 142 DEFINE RMAGENTA=TCALL 143 DEFINE RRED=TCALL 144 DEFINE RYELLOW=TCALL 145 DEFINE RGREEN=TCALL 146 DEFINE RCYAN=TCALL 147 DEFINE DING TTYI BYTE 7,0 EVEN ENDM ;--- Macro to address cursor DEFINE CURSOR ROW,COL MOVB ROW,D1 ROLW D1,#8. MOVB COL,D1 TCRT ENDM ;--- Macro to address cursor and output text DEFINE TYPEAT ROW,COL,TEXT CURSOR #^D<ROW>,#^D<COL> TYPE <TEXT> ENDM ;--- Macros to turn on and off cursor and high intensity, without performing ; any redundant escape sequences. A system of flags is used to determine ; current status of the cursor, intensity, and graphics mode DEFINE LOW=CALL SET.LOW DEFINE HIGH=CALL SET.HIGH DEFINE GRAFIX=CALL SET.GRAFIX DEFINE TEXT=CALL SET.TEXT DEFINE CURON=CALL SET.CURON DEFINE CUROFF=CALL SET.CUROFF ;--- macro to jump if a character was entered DEFINE KEY ADDR TCKI JEQ ADDR ENDM ;--- macros to output a RAD50 word as 3 ASCII chars, and to output a longword ; as 6 ASCII characters DEFINE OUTDEV ADDR LEA A1,ADDR LEA A2,TEMP(MEM) UNPACK CLRB @A2 TTYL TEMP(MEM) ENDM DEFINE OUTNAM ADDR LEA A1,ADDR LEA A2,TEMP(MEM) UNPACK UNPACK CLRB @A2 TTYL TEMP(MEM) ENDM DEFINE OUTNM2 ADDR LEA A1,ADDR LEA A2,TEMP(MEM) UNPACK UNPACK 1$$: CMMB -(A2),#40 BEQ 1$$ CLRB 1(A2) TTYL TEMP(MEM) ENDM ;--- Bit Test macros nostalgic of the AM100 DEFINE BIT SRC,DST MOV DST,D7 AND SRC,D7 ENDM DEFINE BITW SRC,DST MOVW DST,D7 ANDW SRC,D7 ENDM ;--- Macros to move data between different size data areas DEFINE MOVBL SRC,DST CLR D7 MOVB SRC,D7 MOV D7,DST ENDM DEFINE MOVWL SRC,DST CLR D7 MOVW SRC,D7 MOV D7,DST ENDM ;--- Macros to return from subroutines based on condition codes DEFINE REQ BNE 1$$ RTN 1$$: ENDM DEFINE RNE BEQ 1$$ RTN 1$$: ENDM ;--- Macros to copy and compare strings DEFINE MOVSTR SRC,DST SAVE A0,A1 LEA A0,SRC LEA A1,DST 1$$: MOVB (A0)+,(A1)+ BNE 1$$ REST A0,A1 ENDM DEFINE CMPSTR SRC,DST SAVE A0,A1 LEA A0,SRC LEA A1,DST CALL CMPSTR REST A0,A1 ENDM