;****************************************************************************
;* *
;* 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
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