mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-02 01:30:40 +00:00
6904 lines
204 KiB
Plaintext
6904 lines
204 KiB
Plaintext
TITLE TRACK A PROGRAM TO TRACK JOB EXECUTION AND SYSTEM PERFORMANCE
|
||
SUBTTL IRWIN L. GOVERMAN/ILG/EVS/ILG/RBP 12-JAN-77
|
||
|
||
MLON
|
||
IFNDEF BIGLST, <BIGLST==0> ;DEFAULT TO CLEAN LISTING
|
||
IFN BIGLST, <LALL>
|
||
IFE BIGLST, <SALL>
|
||
|
||
UNILOG==1
|
||
UNISYS==3
|
||
UNICHN==5
|
||
UNISTS==36
|
||
UNINAM==0
|
||
|
||
; SEARCH MACTEN,UUOSYM
|
||
SEARCH MACTEN,UUOSYM
|
||
|
||
; SHOW VERSION OR ERROR MESSAGE
|
||
|
||
IFNDEF %%MACT,<PRINTX ?NEEDS MACTEN.MAC OR MACTEN.UNV
|
||
PASS2
|
||
END>
|
||
SHOW.(%%MACT)
|
||
IFNDEF %%UUOS,<PRINTX ?NEEDS UUOSYM.MAC OR UUOSYM.UNV
|
||
PASS2
|
||
END>
|
||
SHOW.(%%UUOS)
|
||
|
||
|
||
|
||
; VERSION AND EDIT NUMBERS
|
||
|
||
TRKVER==5
|
||
TRKEDT==225
|
||
TRKMIN==1
|
||
TRKWHO==0
|
||
|
||
LOC 137
|
||
VRSN. (TRK) ;FORMAT VERSION NUMBER
|
||
|
||
; SET REENTRY POINT
|
||
LOC 124
|
||
RESTRT
|
||
RELOC
|
||
|
||
|
||
COMMENT @
|
||
|
||
Development by Pito Salas includes the following:
|
||
|
||
1) Adding a /DAILY switch to have the following function:
|
||
a: IF the output file specified in a command
|
||
does not already exist, THEN it is created.
|
||
ELSE,
|
||
the date of the existing one is checked.
|
||
IF it is equal to todays date, THEN the current data
|
||
is appended to that file.
|
||
ELSE,
|
||
that file is renamed to be MMDDYY.ext,
|
||
where MM=this month
|
||
DD=today's date
|
||
YY=this year
|
||
ext= TRK or TXT depending on /FORMAT
|
||
and a new file is started with the specified
|
||
name.
|
||
b: IF TRACK is running when daytime goes through midnite,
|
||
THEN the output file is renamed to MMDDYY.ext as above,
|
||
and a new file of the specified name is started.
|
||
|
||
2) The header of the TRACE files is slightly changed, so as
|
||
to conform with FACT files. This allows piping together of
|
||
TRACE files with FACT files for later analysis, without
|
||
confusing FACT analysis programs.
|
||
|
||
3) Adding a 'Real' response time measure.
|
||
@
|
||
SUBTTL REVISION HISTORY
|
||
;** EDIT HISTORY **
|
||
;225 Slight change in format of output for non-TRACE mode,
|
||
; so that mean and SD are on 1 line together
|
||
; Changed DEXTT to be TRC rather than TRK, to both make sense
|
||
; and to conform with documentation
|
||
;224 Removed the code to track %busy rather than queue lengths for
|
||
; disks/tapes. Too costly under post 7.01A monitors where the
|
||
; disk database is accessible only via PEEK UUOs, not SPY hiseg.
|
||
;223 ?
|
||
;222 Changed TRACEH to put out V4 TRACK format entries: first word
|
||
; is entry type, second is length, and data follows immediately.
|
||
; removed all of the snet hack for disk names
|
||
; reorganized entries in SYSDAT call to be by function, not
|
||
; cpu#
|
||
;221 added switches to control use of meter boards on a system-wide
|
||
; of per-cpu basis. use /METER for all cpus, or /METERn for
|
||
; cpu n.
|
||
|
||
;220 Hacked SNEBSY to not die if a non-RP disk is seen. Will fix
|
||
; this routine later, or turn of SNET ft switch that munges disk names.
|
||
|
||
;217 Add support for more than 2 processors. Use NCPU for multi-CPU
|
||
; tests instead of CPU.1 /rbp
|
||
;;** END OF 4(216). 5(217) HAS FULL SMP SUPPORT
|
||
;** TRACK-X VERSION STARTED HERE
|
||
|
||
;216 FIX BUG THAT CAUSED EXTRA DISK IO FOR SYSTEM TRACKS
|
||
;215 ALLOW SWAPPING DISK IO TO BE TRACKED WITHOUT USER DISK IO
|
||
;214 CALCULATE USER MEM AS TOTAL-(MONITOR HIGH+MONITOR LOW)
|
||
;213 REDO THE UNIT/CHANNEL STUFF SO NOT INTERDEPENDENT
|
||
;212 ADD SWAP SPACE LEFT TO SYSDAT,REMOVE SWAPPER DATA
|
||
;211 FLAG VIRTUAL JOBS WITH "V", ON PRINTOUT
|
||
;210 RE-DO UNITYP, INCLUDING NEWER DISK TYPES
|
||
;207 USE FILOP. FOR OUTPUT FILE SAVE FUNCTION, PRODUCES SMALLER FILE
|
||
;206 ADD EXIT COMMAND
|
||
;205 ADD /HELP:KEYWORD FOR GETTING VALUES OF COMPARE, INCLUDE/EXCLUDE
|
||
;204 BET YOU THOUGHT EDIT 203 WAS CORRECT, DIDN'T YOU?
|
||
;203 MAKE GETCOR A LITTLE BRIGHTER ON VM SYSTEMS
|
||
;202 ADD WILD CARD "*" TO PPN MATCH CODE
|
||
;201 MAKE PPN AND PROGRAM WATCHING ABLE TO DO MULTIPLE JOBS
|
||
;200 MAKE CHANNEL AND DISK STUFF NORMALLY EXCLUDED
|
||
;177 REMOVE RT/WANTED TO RT SINCE WAS NEVER RIGHT
|
||
;176 DON'T PRINT USERS PROLOG IF NO JOBS MATCH SPECS
|
||
;175 IMPLEMENT HELP:SWITCHES
|
||
|
||
;174 GIVE RIGHT TTY NUMBER IF JOB TRACKED VIA 'PROG'
|
||
;173 CORE SIZE COMPUTATION INCORRECT FOR VM SYSTEMS
|
||
;172 CORRECT THE BYTE POINTER USED FOR IMGIN IN ROUTINE VMSEG
|
||
;171 CLEAN UP "?TRKSVS SWITCH VALUE TOO SMALL" TYPEOUT
|
||
;170 CLEAR TAB.P ON RESTART OF TRACK
|
||
;167 ADD TRACKING OF A PROGRAM VIA 'PROGNM' TYPE CONSTRUCTION
|
||
;166 ADD TRACKING OF SCANNER SERVICE RECEIVE AND XMIT INTERUPTS
|
||
;165 REMOVE /CHANNEL AND /DISK:NONE
|
||
;164 ADD /INCLUDE AND /EXCLUDE SWITCHES
|
||
;163 INCREASE SIZE OF SEGTAB
|
||
;162 ADD ARGUMENTS FOR /COMPARE
|
||
;161 DONT PRINT RUNTIME IF DOING ALL USERS
|
||
;160 CHANGE DEFAULT VALUE OF GETUNI
|
||
;157 ADD ENQ TO LIST OF PRIVELEGES A JOB MIGHT HAVE
|
||
;156 B%RPT WORD OF %BSGO IN TRACE REPORT WAS MISSING
|
||
;155 ADD UUOS PER SECOND ON EACH CPU
|
||
;154 IDLE TIME WAS REALLY NULL TIME - CHANGE TO REAL IDLE TIME
|
||
;153 DON'T PRINT OUT POSTITION WAIT QUEUE FOR RS04 - REQUIRES
|
||
; .DCCFS DO BE DEFINED IN UUOSYM, WHICH IT WAS NOT IN TIME
|
||
; FOR 602 MONITOR
|
||
;152 CHANGE KL10 CACHE VARIABLES TO PER SECOND QUANTITIES
|
||
;151 CHANGE SYSGET AND SYSDIS TO CALL ITEM DEPENDENT ROUTINE
|
||
; ONLY IF AN ENTRY EXISTS IN TAB.P FOR THE ITEM.
|
||
;150 FIX EDIT 147
|
||
;147 ADD NEW 1088 KL10 CACHE RELATED VARIABLES TO SYSTEM DISPLAY
|
||
;146 ADD NUMBER OF UNWINDS, NUMBER OF TIMES JOB WAS RUN TO GIVE
|
||
; UP RESOURCE BECAUSE IT WAS SELECTED TO SWAP OUT, SWAPPER
|
||
; NULL AND LOST TIME TO SYSTEM DISPLAY
|
||
;145 ADD % OF TTY CHUNKS USED TO SYSTEM DISPLAY
|
||
;144 USE MAXMAX (%NSMXM) INSTEAD OF SUBTRACTING SYSSIZ FROM CORE SO
|
||
; TRACK WORKS WITH TWO SEGMENT MONITOR
|
||
;143 GET LENGTH OF DISK RELATED QUEUES FROM DSKCHR
|
||
;142 SEARCH MACTEN,UUOSYM INSTEAD OF C
|
||
;141 ADD MISSING CHECK FOR COMMA IN TPPN ROUTINE
|
||
;140 FIX UNITIALIZED BLT IN CHAN%I ROUTINE
|
||
;137 CHANGE LOOKUP AND ENTER ERROR PREFIXES
|
||
;136 ADD REPORT ON FREE CORE USAGE TO SYSTEM DATA
|
||
;135 MAKE "." WORK SAME AS SYSTAT, MAKE [,], [PROJ,],[,PROG] WORK
|
||
;134 ADD TRACE PACKAGE UNDER CONDITIONAL FTTRC
|
||
; ** END OF VERSION 3, VERSION 4 HAS TRACE CAPABILITY
|
||
;133 CLEAN GETCOR
|
||
;132 SPLIT DEFAULTS UP SO CAN HAVE DIFFERENT FOR USERS,SYS,JOB ETC.
|
||
;131 FIX MONDEP VALUES THAT WERE WRONG
|
||
;130 REMOVE INTERNAL HELP TEXT
|
||
;127 FIX SPACING PROBLEM IN CONFIG DATA PRINTOUT
|
||
;126 CLEAR CTRKJ BETWEEN USER PRINTOUTS
|
||
;125 FIX ^Z FROM INDIRECT DEVICE, MAKE IT FORCE A BREAK LIKE SCAN
|
||
;124 ADD INDIRECT FILE
|
||
;123 ADD MORE CONFIGURATION INFO
|
||
;122 ADD W TO RUNNING COMMANDS
|
||
;121 ADD FF TO SEPARATE APPENDED SYS REPORTS
|
||
;120 ADD MORE SYSINI CONFIGURATION DATA
|
||
;117 ADD DISK AND CHANNEL SWITCHES
|
||
;116 FIX BUG IN FILSPC THAT CHANGED FOO. TO FOO.TXT
|
||
;115 MORE OF EDIT 114
|
||
;114 MAKE A "USERS" COMMAND BE REPEATABLE
|
||
;113 MAKE [P,PN]/NOKILL WORK THE SAME AS FOR JOBS
|
||
;112 ADD /SUMMARY SWITCH FOR DELETION OF FREQ ON SYSDAT
|
||
;111 BEGIN RESTRUCTURING OF COMMAND SCANNER
|
||
;;** END OF VERSION 2, VERSION 3 HAS NEW COMMAND FORMAT
|
||
;110 ADD LOCK UUO SWITCH
|
||
;107 ADD HPQ SWITCH
|
||
;106 REDUCE CORE IF WE HAVE SWOLLEN
|
||
;105 STEAL SYSTAT'S SUPERIOR INTEGER SQUARE ROOT ROUTINE
|
||
;104 RE-DO REGISTER ALLOCATIONS, CHECK FOR ILLEGAL TTY AND JOB NRS
|
||
;103 RE-FORMAT THE STD. DEVIATION AND CLEAN CODE
|
||
;102 ADD BRANDEIS STUFF (FORMAX)
|
||
;101 ADD STD. DEVIATION TO DB PRINTOUT ROUTINE
|
||
;100 CLEAN UP OF SEVERAL CODE AREAS
|
||
;77 BETTER ERROR MESSAGES FOR SWITCH PROCESSOR
|
||
;76 FIX SOME ERRORS CAUSED BY EDIT 74
|
||
;75 ADD DDT COMMAND TO ENTER DEBUGGER , IF LOADED
|
||
;74 CHANGE ERROR MESSAGES SO ABLE TO DO LONG AND SHORT
|
||
;73 CHECK THAT CORE ASSIGNMENTS ARE REALLY MADE FOR VM SYSTEM
|
||
;72 UPDATE INTERNAL HELP TEXT
|
||
;71 ADD AVG. RESP. TIME TO SYSDAT TRACKING
|
||
;70 FIX OUTDBX ROUTINE SO IT CAN PRINT NUMBERS > 2 **18
|
||
;67 FIX BUG THAT WAS SHOWN UP BY PRINTING OF UNPRIVELEGED TRACKS
|
||
;66 MAKE /C MORE USEFUL BY NOT COMPARING QUITE SO MANY ITEMS
|
||
;65 CHANGE SOME DEFAULT PARAMETERS
|
||
;64 FIX SWITCH SECTION VALUE GETTER AND CLEAN CODE
|
||
;63 FIX BUG IN GETTAB SIMULATOR INTRODUCED BY EDIT 61
|
||
;62 ADD IPCF PRIVELEGE FUNCTION TO PUTPRV MODULE
|
||
;61 CHANGE TO USE C UNIVERSAL FILE
|
||
;60 MAKE /NOKILLWORK THE WAY HELP FILE SAYS IT DOES
|
||
;57 BE SUPER CAREFUL ABOUT DISK AND CHANNEL STUFF
|
||
;56 IMPLEMENT A WAY THAT SUB-VERSIONS OF MONITOR CAN BE IN MVTAB
|
||
;55 DONT TAB AFTER PPN (USERS) IF PPN > 11 CHARS
|
||
;54 EXIT ON ^Z INPUT
|
||
;53 MORE COMPLETE FILE ERROR MESSAGES
|
||
;52 ADD /NODISK SWITCH TO DELETE DISK & CHANNEL REPORT FOR SYSDAT
|
||
;51 RE-DO SWITCH MODULE
|
||
;50 TELL ABOUT KSYS TIMER (IF SET) WHEN DOING SYSTEM DATA
|
||
;47 ADD USERS COMMAND TO TAKE SINGLE SWEEP OF WHOLE SYSTEM
|
||
;46 INSERT .TEXT LOADING OF HELPER SO CAN JUST LOAD TRACK
|
||
;45 CHANGE CLRBFI UUO USAGE TO FLUSH ROUTINE SO PTY'S NOT A PROBLEM
|
||
;44 UPDATE THE INTERNAL HELP TEXT
|
||
;43 STOP TRACKING POSITION WAIT Q LENGTH FOR FIXED HEAD DEVICES
|
||
;42 MAKE MONITOR DEPENDENT THINGS MORE CHANGEABLE
|
||
;41 COMPUTE RT BEFORE WANTED TO RUN TIME SO DONT GET % > 100 IF BUSY
|
||
;40 ADD SYSTEM TRACKING OF RT/TIME WANTED TO RUN
|
||
;37 CLEANUP, 1 MORE WORD FOR SYS NAME AND ALLOW USER CORE >128 UNITS
|
||
;36 ADD TRACKING FOR SECOND CPU
|
||
;35 USE LESS STORAGE SPACE FOR EDIT 34
|
||
;34 IMPLEMENT CHANNEL WATCHING (NR OF REQUESTS PER CHN)
|
||
;33 IMPLEMENT DISK UNIT WATCHING (POSITION WAIT Q)
|
||
;32 IMPLEMENT JOB QUEUE INFORMATION WATCHING
|
||
;31 IMPLEMENT USER KCS/SECOND AND USER DISK IO/SECOND
|
||
;30 INCLUSION OF THE SYSTEM DATA WATCHING MODULE
|
||
;** END OF VERSION 1, START OF VERSION 2 FROM HERE ON UP
|
||
;27 ALLOW WATCHING OF NULL JOB (JOB 0)
|
||
;26 STOP DOING GETTABS WHEN INFO IS IN PROCESS DATA BLOCK
|
||
;25 STOP SPACING SO MUCH BEFORE RUNTIME PRINT
|
||
;24 SUBTRACT PROCESSING TIME FROM SLEEP TIME
|
||
;23 IMPLEMENT SPY UUO SO FASTER FOR PRIVELEGED USERS
|
||
;22 CHECK FOR NO RESPONSE TIME TABLE IN MONITOR
|
||
;21 IMPLEMENT /S (STATISTICS) SWITCH
|
||
;20 IMPLEMENT SHORT FORM OF JOB SPECIFICATIONS
|
||
;17 INCORPORATE STANDARD HELP MODULE
|
||
;16 TAKE ACCOUNT OF FACT USER MAY HAVE GONE VIRTUAL
|
||
;15 RE-WRITE GETCOR ROUTINE TO BE FASTER
|
||
;14 CLEAN UP PRINT-OUT A LITTLE
|
||
;13 IMPLEMENT STANDARD INPUT ROUTINES FOR CHARACTER CONVERSION
|
||
;12 IMPLEMENT /U SWITCH TO TELL USER NAME AND PPN
|
||
;11 IMPLEMENT /P SWITCH TO TELL PRIVELEGE BITS
|
||
;10 RE-DO DATA STRUCTURES TO USE NESTED MACROS
|
||
;7 FIX ZEROING OF JOB AREA SO /I WORKS BETTER
|
||
;6 IMPLEMENT PPN,MYPPN JOB SPECIFICATIONS
|
||
;5 FIX HIBER SO DONT GET SPURIOUS WAKES
|
||
;4 CHANGE TO DEC STANDARD ERROR MESSAGES
|
||
;3 IMPLEMENT /D FOR DISK I/O SWITCH
|
||
;2 IMPLEMENT CURSOR POSITIONING ROUTINE
|
||
;1 THE FIRST ATTEMPT
|
||
|
||
|
||
SUBTTL AC AND MISC. DECLARATIONS
|
||
; DEFINE THE ACS USED BY THE PROGRAM
|
||
|
||
DEFINE ACS.(AA)<
|
||
AA==ZZ
|
||
ZZ=ZZ+1>
|
||
|
||
ZZ==0
|
||
|
||
ACS.(SW) ;SWITCH REGISTER, USED TO HOLD FLAGS
|
||
ACS.(T1) ;TEMP, USED FOR ARGUMENT PASSING
|
||
ACS.(T2) ;TEMP
|
||
ACS.(T3) ;TEMP
|
||
ACS.(T4) ;TEMP
|
||
ACS.(N1) ;USED BY ROUTINES
|
||
ACS.(N2) ;USED BY ROUTINES
|
||
ACS.(N3) ;USED BY ROUTINES
|
||
ACS.(GT) ;USED FOR GETTAB AND SPY
|
||
ACS.(J) ;USUALLY INDEX FOR JOB TABLES
|
||
ACS.(FP) ;POINTER TO CURRENT OUTPUT FIELD
|
||
ACS.(CHRCNT) ;COUNTER OF CHARACTERS USED
|
||
ACS.(L) ;USED FOR INDIRECT PTR TO CURRENT SYSDAT PEEK NR.
|
||
ACS.(STR) ;POINTS TO OUTPUT ASCIZ STRING OR ERROR MESSAGE
|
||
ACS.(CHR) ;CURRENT INPUT/OUTPUT CHARACS.TER
|
||
ACS.(P) ;THE OMNIPRESENT PUSH DOWN POINTER
|
||
|
||
LUEB==T1 ;LOOKUP/ENTER BLOCK STARTING LOCATION
|
||
|
||
IFN P-17,<PRINTX %AC P IS NOT AC 17>
|
||
|
||
; OUTPUT CHANNEL INFORMATION
|
||
TY==1 ;OUTPUT CHANNEL
|
||
TYB==2 ;NUMBER OF OUTPUT BUFFERS
|
||
|
||
; CODE TO LOCK UUO
|
||
LOCCOD==LK.LLS!LK.LNE!LK.LNP ;LOCK ONLY
|
||
|
||
|
||
; EXTERNAL DECLARATIONS
|
||
|
||
EXTERNAL .JBREL, .JBFF,.JBOPS,.JBDDT
|
||
;
|
||
;
|
||
; OTHER STUFF
|
||
; JOBSTATUS BITS
|
||
JDC==100000
|
||
CMWB==200000
|
||
CLKR==1B18
|
||
JDCON==20000
|
||
JLOG==1B15
|
||
SWP==1B7
|
||
RUN==1B0
|
||
SHRSEG==1B1
|
||
|
||
|
||
SUBTTL DEFINE BITS IN FLAG REGISTER
|
||
; MACRO TO DEFINE SINGLE BIT SWITCHES
|
||
|
||
DEFINE SW.(NAME)<
|
||
IFE ZZ, <PRINTX ?TOO MANY SWITCHES DEFINED FOR FLAG REGISTER>
|
||
NAME==ZZ
|
||
ZZ=ZZ*2
|
||
>; END OF SW. MACRO DEFINITION
|
||
|
||
ZZ==1 ;INITIALIZE
|
||
|
||
SW.(OPT.S) ;/S, STATISTICS WANTED FOR TRACKED JOB
|
||
SW.(OPT.C) ;/C, OUTPUT ONLY WHEN CHANGE IN TRACKED JOB
|
||
SW.(OPT.I) ;/I, DO RUNTIME AND DISK IO INCREMENTAL
|
||
SW.(OPT.F) ;F, FORCED LOOK AND PRINTOUT
|
||
SW.(OPT.K) ;/K, DO NOT EXIT WHEN TRACKED JOB DISAPPEARS
|
||
SW.(OPT.U) ;/U, PRINT USER NAME AND PPN
|
||
SW.(OPT.P) ;/P, WATCH PRIVELEGE BITS THIS JOB
|
||
SW.(R.SUMM) ;WANT SUMMARY OF DB PRINTOUT
|
||
SW.(L.TTY) ;TRACKING A TTY
|
||
SW.(L.JOB) ;TRACKING A JOB
|
||
SW.(L.PPN) ;TRACKING A PPN
|
||
SW.(L.PROG) ;TRACKING A PROGRAM
|
||
SW.(L.USRS) ;TRACKING ALL USERS
|
||
SW.(REGET) ;REGET LAST CHARACTER SCANNED
|
||
SW.(BRK) ;SET BY INPUT, BREAK CHARACTER SEEN
|
||
SW.(KI.10) ;SET IF ON A KI 10 PROCESSOR
|
||
SW.(T.FLG) ;TEMPORARY FLAG USED BY VARIOUS ROUTINES
|
||
SW.(NO.RSP) ;RESPONSE TIME TABLES NOT IN THIS MONITOR
|
||
SW.(Y.SPY) ;CAN DO SPY
|
||
SW.(SYSD) ;DOING SYSTEM DATA GATHERING
|
||
SW.(SYSD.I) ;JUST INITIALIZED SYSTEM DATA
|
||
SW.(GT.OPT) ;CURRENT GETTAB IS FOR OPTIONAL TABLE
|
||
;AND ITS NOT FATAL IF GETTAB FAILS
|
||
SW.(F.TTY) ;FORCE OUTPUT TO TTY EVEN IF /SAVE OR /L IN EFFECT
|
||
SW.(F.SPEC) ;A FILE SPEC WAS GIVEN ("=" SEEN)
|
||
SW.(DEVTTY) ;OUTPUT DEVICE IS USER TTY
|
||
SW.(MRET) ;DO AN EXIT 1, JUST BEFORE STARTING MAIN LOOP
|
||
;SO AN UPRIVELEGED USER CAN DO "CCONT" "DET" SEQUENCE
|
||
SW.(R.LOCK) ;LOCKED JOB REQUESTED
|
||
;[rbp] SW.(CPU.1) ;SET IF SECOND PROCESSOR EXISTS
|
||
SW.(NO.PRF) ;OMIT PREFIX FROM ERROR MESSAGES (E=2)
|
||
SW.(NO.LIN) ;OMIT REST OF LINE FROM ERROR MESSAGES (E=1)
|
||
SW.(MD.TRC) ;MODE OF OUTPUT FILE IS TRACE (BINARY)
|
||
SW.(INDFLG) ;INDIRECT FILE "@" IS BEING READ
|
||
SW.(FT.VM) ;THIS SYSTEM SUPPORTS VM
|
||
SW.(UHP) ;ON MEANS USER HEADER PROLOG IS PRINTED
|
||
|
||
ZZ==ZZ ;SHOW NUMBER OF BITS IN USE
|
||
|
||
;BITS TO BE MEMORIZED AND NOT FORGOTTEN BETWEEN COMMANDS
|
||
|
||
STKDFL==KI.10!Y.SPY!F.TTY!FT.VM
|
||
|
||
SUBTTL TRACK TRACING FORMAT (BINARY FORMAT)
|
||
|
||
|
||
COMMENT @
|
||
TRACK USES A SPECIAL FORMAT FOR ITS BINARY OUTPUT. THIS MEANS
|
||
THAT THE FORMAT IS NOT FIXED BY POSITION.
|
||
EACH TYPE OF DATA THAT CAN
|
||
BE OUTPUT WHEN TRACK IS IN TRACE MODE IS OF THE FORM:
|
||
|
||
|
||
-----------------------------------------------------
|
||
! BLOCK TYPE !
|
||
-----------------------------------------------------
|
||
! LENGTH (including header) !
|
||
-----------------------------------------------------
|
||
! FIRST DATA WORD !
|
||
-----------------------------------------------------
|
||
! NEXT DATA WORD !
|
||
-----------------------------------------------------
|
||
....ETC
|
||
|
||
|
||
|
||
DEPENDING ON WHAT SWITCHES ARE GIVEN TRACK, AND WHAT TYPE OF TRACKING
|
||
IS BEING DONE, CERTAIN DATA BLOCKS WILL NOT APPEAR IN ALL RUNS.
|
||
THERE MAY ALSO BE ZERO WORDS BETWEEN DATA BLOCKS.
|
||
|
||
@
|
||
; 711 REPORT START BLOCK. ALWAYS PRESENT. ALWAYS FIRST.
|
||
; FORMAT:
|
||
;
|
||
%BTRK==711 ;FIRST WORD. FLAG WORD
|
||
%BTRKL==4 ;BLOCK LENGTH
|
||
B%VER==1 ;DATA WD 1. COPY OF .JBVER
|
||
B%TYP==2 ;DATA WD. 2. TYPE OF TRACKING
|
||
B%%S==0 ;(VALUE)SYSTEM TRACKING
|
||
B%%J==1 ;(VALUE)TRACKING A JOB NUMBER
|
||
B%%U==2 ;(VALUE)TRACKING USERS
|
||
B%%P==3 ;(VALUE)TRACKING A PPN
|
||
B%%T==4 ;(VALUE)TRACKING A TTY NUMBER
|
||
|
||
|
||
|
||
; 721 SYSTEM DATA INITIALIZATION BLOCK. IF TRACKING THE
|
||
; SYSTEM THEN THIS BLOCK WILL FOLLOW THE REPORT
|
||
; START BLOCK.
|
||
; ALWAYS PRESENT IN THIS CASE.
|
||
; FORMAT:
|
||
;
|
||
;
|
||
%BSI==721 ;FIRST WORD. FLAG WORD
|
||
%BSIL==13 ;BLOCK LENGTH
|
||
B%MVER==1 ;1ST DATA WORD. MONITOR VERSION
|
||
B%ASER==2 ;2ND D.W. APR SERIAL NUMBER
|
||
B%MXJB==3 ;3RD D.W. NR. OF JOBS MAXIMUM
|
||
B%MXTY==4 ;4TH D.W. " " TTYS "
|
||
B%UMEM==5 ;5TH D.W. USER MEMORY AVAILABLE (WORDS)
|
||
B%TMEM==6 ;6TH DW,TOTAL SYSTEM MEMORY (WORDS)
|
||
B%INT== 7 ;7TH DW,PEEK INTERVAL IN SECS
|
||
B%GRP==10 ;8TH DW,NUMBER OF INTERVALS/REPORT
|
||
B%TIME==11 ;9TH DW,TIME IN NBS UNIV DATE TIME FORMAT.
|
||
|
||
|
||
|
||
; 731 SYSTEM DATA DISPLAY BLOCK. EVERY TIME A REPORT IS
|
||
; PRODUCED BY THE SYSTEM DISPLAY MODULE, THIS
|
||
; BLOCK IS PRODUCED BEFORE ANY ITEM BLOCKS
|
||
; ARE OUTPUT. WILL APPEAR ONCE PER OUTPUT REPORT.
|
||
; FORMAT:
|
||
|
||
|
||
%BSGO==731 ;1ST WORD. FLAG WORD
|
||
%BSGOL==7 ;BLOCK LENGTH
|
||
B%RPT==1 ;NUMBER OF THIS REPORT
|
||
B%FRM==2 ;STARTING TIME OF REPORT
|
||
;IN UNIVERSAL DATE-TIME FORMAT
|
||
B%TO==03 ;ENDING TIME OF THIS REPORT IN
|
||
;UNIVERSAL DATE-TIME FORMAT
|
||
B%CMX==4 ;CURRENT CORMAX, IN WORDS
|
||
B%SCHD==5 ;SCHED BITS
|
||
|
||
;
|
||
; 732 SCHED PARMS BLOCK FOR SCHED LIR TO 6.03
|
||
%BSCD==732
|
||
%BSCDL==45 ;43 DATA ITEMS PLUS 2 OVRHD
|
||
; MODIFIED SEPT 79 TO TACK ON BACKGROUND BATCH CLASS AND SWAP TIME
|
||
; AT END OF RECORD
|
||
|
||
repeat 0,< FORMAT OF BLOCK TYPE 732:
|
||
|
||
+---------------------------------------------+
|
||
! micro scheduling interval !
|
||
+---------------------------------------------+
|
||
+ 5 (the # of words of class information): !
|
||
!---------------------------------------------!
|
||
!bit 0: fixed class !
|
||
!bits 1-27: class number !
|
||
!bits 18-35: class quota !
|
||
! !
|
||
! !
|
||
+---------------------------------------------+
|
||
! 2 (the # of words of quantum runtimes): !
|
||
+---------------------------------------------+
|
||
! quantum runtime: PQ1 !
|
||
! quantum runtime: PQ2 !
|
||
+---------------------------------------------+
|
||
! minimum core usage per job !
|
||
+---------------------------------------------+
|
||
! minimum core usage multiplier !
|
||
+---------------------------------------------+
|
||
! min core usage requeue constant !
|
||
+---------------------------------------------+
|
||
! minimum core usage maximum !
|
||
+---------------------------------------------+
|
||
! 3 (# words of quantum miltipliers): !
|
||
+---------------------------------------------+
|
||
!left half: queue number !
|
||
!right half: quantum multiplier !
|
||
! !
|
||
+---------------------------------------------!
|
||
! 2 (# words of quantum runtimes): !
|
||
+---------------------------------------------+
|
||
!left half: queue number !
|
||
!right half: maximum time slice !
|
||
+---------------------------------------------+
|
||
! 5 (# words of secondary class quotas): !
|
||
+---------------------------------------------+
|
||
!left half: class number !
|
||
!right half: quota !
|
||
! !
|
||
! !
|
||
! !
|
||
+---------------------------------------------+
|
||
!time % to scan queue swapped in before sub-q !
|
||
+---------------------------------------------+
|
||
! swap scan time !
|
||
+---------------------------------------------+
|
||
! scheduler fairness factor !
|
||
+---------------------------------------------+
|
||
! swapper fairness factor !
|
||
+---------------------------------------------+
|
||
! in-core fairness factor !
|
||
+---------------------------------------------+
|
||
! SCDCOR !
|
||
+---------------------------------------------+
|
||
! class number for batch background subq!
|
||
+---------------------------------------------+
|
||
! background batch swaptime interval !
|
||
+---------------------------------------------+
|
||
|
||
> ;end repeat 0
|
||
|
||
|
||
|
||
; 741 SYSTEM DATA ITEM REPORT. OCCURS ONCE FOR
|
||
; EACH ITEM DISPLAYED. THIS BLOCK GIVES INFORMATION
|
||
; ABOUT WHICH ITEM IS NEXT TO BE WRITTEN OUT. THERE ARE
|
||
; AS MANY BLOCKS OF THIS TYPE AS THERE CALLS TO THE
|
||
; DATA BLOCK (DB) OUTPUT ROUTINE.
|
||
; FORMAT:
|
||
;
|
||
;
|
||
%BITM==741 ;1ST WORD. FLAG WORD
|
||
%BITML==4 ;BLOCK LENGTH
|
||
B%CODE==1 ;1ST DW. THIS WORD CONTAINS A
|
||
;FOUR CHARACTER ASCII (7 BIT)
|
||
;CODE IDENTIFIEING THE ITEM
|
||
;TO FOLLOW. IT IS CREATED BY THE
|
||
;2ND ARGUMENT TO THE SYSDAT MACRO
|
||
B%AUX==2 ;AN AUXILLIARY WORD THAT IS USED
|
||
;WHEN THERE ARE MULTIPLE CALLS TO
|
||
;THE DB OUTPUT ROUTINE PER ENTRY
|
||
;IN THE SYSDAT MACRO. FOR INSTANCE
|
||
;THE DISK UNIT ROUTINE PUTS THE
|
||
;SIXBIT UNIT NAME HERE
|
||
|
||
|
||
|
||
; 751 SYSTEM DATA ITEM FREQUENCY BLOCK. THIS BLOCK APPEARS
|
||
; A VARIABLE NUMBER OF TIMES. IT GIVES THE
|
||
; FREQUENCY BREAKDOWN
|
||
; IF THIS TYPE BLOCK APPEARS, THE FIRST SUCH BLOCK
|
||
; APPEARS AFTER A %BITM TYPE BLOCK AND THE LAST SUCH BLOCK
|
||
; PRECEEDS A TYPE %BSUM TYPE BLOCK.
|
||
; NOTE: IF /SUMMARY SWITCH IS USED, THIS TYPE BLOCK
|
||
; DOES NOT APPEAR AT ALL, AND THE %BSUM BLOCK FOLLOWS
|
||
; THE %BITM IMMEDIATELY.
|
||
; FORMAT:
|
||
|
||
%BFRQ==751 ;1ST WORD, FLAG WORD
|
||
%BFRQL==5 ;BLOCK LENGTH
|
||
B%LOW==1 ;1ST DW,LOWER LIMIT OF VALUES
|
||
;IN THE RANGE
|
||
B%HIGH==2 ;2ND DW,UPPER LIMIT OF VALUES
|
||
;IN THE RANGE
|
||
B%PER==3 ;FLOATING POINT FORMAT
|
||
;WORD. THE PERCENT OF ALL VALUES
|
||
;SEEN IN THIS RANGE
|
||
|
||
|
||
|
||
|
||
; 761 TYPE SUMMARY BLOCK. THIS BLOCK APPEARS ONCE
|
||
; FOR EVERY CALL TO THE DB OUTPUT ROUTINE, THAT IS ONCE
|
||
; FOR EACH TYPE %BITM BLOCK. IT GIVES THE MEAN AND
|
||
; STAND. DEVIATION FOR ALL INTERVALS IN THE REPORT
|
||
|
||
; FORMAT:
|
||
;
|
||
%BSUM==761 ;THE HEADER FLAG WORD
|
||
%BSUML==5 ;BLOCK LENGTH
|
||
B%SAMP=1 ;1ST DW,THE NR. OF SAMPLES TAKEN
|
||
B%MEAN==2 ;FLT. PT. FORMAT MEAN OF ALL
|
||
;SAMPLES IN THIS REPORT.
|
||
B%STDD==3 ;FLT. PT. FORMAT STANDARD DEVIATION
|
||
;IN VALUES INCLUDED IN THIS REPORT
|
||
|
||
|
||
|
||
|
||
; 771 TYPE SYSTEM DATA END OF REPORT BLOCK
|
||
; THIS BLOCK CONVEYS NO USEFUL INFORMATION EXCEPT THAT THE
|
||
; SYSTEM DATA REPORT IS OVER. ESSENTIALLY, ALL WORDS, ZEROR
|
||
; OR NON-ZERO BETWEEN AND THE FIRST FLAG WORD
|
||
; FOR EITHER A %BTRK OR %BSGO TYPE BLOCK CAN BE IGNORED.
|
||
; ;FORMAT:
|
||
|
||
%BEND==771 ;FLAG WORD
|
||
%BENDL==2 ;LENGTH OF BLOCK DATA
|
||
;NOTE:NO DATA WORDS.
|
||
|
||
; NOTE: AT THIS TIME THE ONLY BINARY TRACE FILE FACILITIES
|
||
; INCLUDED IN TRACK ARE THOSE FOR SYSTEM TRACKING. A FUTURE
|
||
; VERSION MAY INCLUDE TRACE SUPPORT FOR
|
||
; OTHER TYPES.
|
||
|
||
SUBTTL DEFAULT DECLARATIONS
|
||
;
|
||
;************ DEFAULT VALUES AND SWITCH SETTINGS *************
|
||
|
||
ND PDSIZE,30 ;DEFAULT PDL SIZE
|
||
ND PURESW,0 ;1 FOR RE-ENTRANT, 0 IF NOT
|
||
ND SYS,1 ;1 TO INCLUDE SYSDAT MODULE
|
||
ND DFLTQJ,^D10 ;DEFAULT SLEEP INTERVAL JOBS
|
||
ND DFLTQU,^D60 ;DEFAULT FOR USERS
|
||
ND DFLTQS,^D10 ; " " SYSTEM
|
||
ND DEFLTR,^D30 ;DEFAULT LOOKS PER SYSDAT REPORT
|
||
ND CHNMAX,7 ;MAXIMUM NUMBER OF CHANNELS ON SYSTEM
|
||
ND GETUNI,^D8 ;NUMBER OF UNITS TO GRAB CORE FOR
|
||
;NEED MORE CORE
|
||
; FOR UNIT WATCHING TABLES
|
||
|
||
ND FTTRC,-1 ;INCLUDE /FORMAT:TRACE FACILITIES
|
||
ND MAXTOK,^D14 ;MAX. CHRS PER SWITCH
|
||
ND MAXSFD,7 ;MAXIMUM NR. OF SFDS
|
||
ND DFILE,'TRACK ' ;DEFAULT LISTING FILE
|
||
ND DEXT,'TXT ' ;AND EXT
|
||
ND DEXTT,'TRC ' ;EXT IF IN TRACE MODE
|
||
ND DDEV,'TTY ' ;DEFAULT OUTPUT DEVICE
|
||
ND DDEVF,'DSK ' ;DEFAULT OUTPUT DEVICE IS
|
||
;A FILE SPEC IS GIVEN
|
||
ND COMMAX,^D144 ;MAX COMMAND LINE
|
||
;*************************************************************
|
||
|
||
|
||
|
||
SUBTTL ERROR MESSAGE MACRO AND FLAGS
|
||
|
||
; FLAGS FOR ERROR MESSAGE PROCESSOR
|
||
; THESE FLAGS ARE OF THREE TYPES
|
||
; 1)WHAT TYPE OF MESSAGE
|
||
; 2)WHAT TO TYPE AFTER MESSAGE (IE T1 IS NULL,OCTAL,SIXBIT ETC.)
|
||
; 3)WHAT TO DO AFTER ERROR (EXIT,RESTART,CONTINUE)
|
||
|
||
ZZ==1 ;START
|
||
SW.(EF.FAT) ;FATAL ERROR
|
||
SW.(EF.CMT) ;COMMENT MESSAGE
|
||
SW.(EF.WRN) ;WARN MESSAGE
|
||
SW.(EF.RST) ;AFTER MESSAGE, RESTART
|
||
SW.(EF.EXT) ;AFTER MESSAGE, EXIT PROGRAM
|
||
SW.(EF.CON) ;AFTER MESSAGE, RETURN CPOPJ FOR SHORT
|
||
;AND CPOPJ1 FOR LONG MESSAGE
|
||
SW.(EF.DEC) ;AT END TYPE T1 IN DECIMAL
|
||
SW.(EF.OCT) ;AT END TYPE T1 IN OCTAL
|
||
SW.(EF.SIX) ;AT END TYPE T1 IN SIXBIT
|
||
SW.(EF.PPN) ;AT END TYPE T1 AS PPN
|
||
SW.(EF.MEM) ;AT END TYPE MEMORY UNITS
|
||
SW.(EF.STR) ;T1 POINTS TO STRING
|
||
|
||
; ERROR MESSAGE PROCESS DESTRYS T3,T4 AND RESPECTS
|
||
; ALL OTHER REGISTERS
|
||
;
|
||
; WHEN CALLING WITH FLAG "EF.CON" ; FINAL CRLF MUST BE LABELED "X$$'PREFIX"
|
||
;
|
||
DEFINE $ERROR($FLAGS,$PREFIX,$TEXT)<
|
||
E$$'$PREFIX:
|
||
MOVX T4,$FLAGS ;;PICK UP FLAGS
|
||
IFE BIGLST,<XLIST>
|
||
JSP T3,ERRMSG ;;GO PROCESS THE ERROR
|
||
IFNB <$TEXT>,<XWD ''$PREFIX'',[ASCIZ\$TEXT\]>
|
||
IFB <$TEXT>, <XWD ''$PREFIX'',[0]>
|
||
IFN $FLAGS&EF.CON, < JRST X$$'$PREFIX>
|
||
LIST
|
||
>
|
||
|
||
|
||
|
||
SUBTTL UTILITY MACROS
|
||
|
||
|
||
DEFINE HELPME <
|
||
MOVE 1,[SIXBIT/TRACK/] ;MUST BE AC 1
|
||
PUSHJ P,.HELPR## ;EXTERNAL ENTRY >
|
||
|
||
; LOAD HELPER WITH .TEXT IF WE CAN, AND LOAD INTO PROPER SEGMENT
|
||
|
||
IFN PURESW,<
|
||
IFDEF .TEXT,<.TEXT \,REL:HELPER\>>
|
||
IFE PURESW,<
|
||
IFDEF .TEXT,<.TEXT \,REL:HELPER/SEG:LOW\>>
|
||
|
||
;
|
||
; MACRO TO PACK SIXBIT CHARACTERS INTO WORDS
|
||
; AT END ZZ IS NUMBER OF CHARACTERS PACKED
|
||
|
||
DEFINE STASH(A)<
|
||
|
||
ZZ=0
|
||
.C==0
|
||
.D==-1
|
||
IRPC A,<
|
||
ZZ=ZZ+1
|
||
.D==.D+6
|
||
.C==<.C!<''A''B<.D>>>
|
||
IFE .D-^D35,<EXP .C
|
||
.D==-1
|
||
.C==0>>
|
||
IFG .D,<EXP .C>
|
||
PURGE .D,.C
|
||
>
|
||
; MACRO TO SEND ONE CHARACTER TO THE OUTPUT DEVICE
|
||
|
||
DEFINE TYPEC(AA)<
|
||
MOVEI CHR,"AA"
|
||
XLIST
|
||
PUSHJ P,PUTCHR
|
||
LIST
|
||
>;END OF TYPEC DEFINITION
|
||
|
||
; MACRO TO SEND ASCIZ TEXT TO THE OUTPUT DEVICE
|
||
|
||
DEFINE TYPES(AA)<
|
||
MOVEI STR,[ASCIZ\AA\]
|
||
XLIST
|
||
PUSHJ P,PUTSTR
|
||
LIST
|
||
> ; END OF TYPES DEFINITION
|
||
|
||
|
||
; MACRO TO SEND CONTENTS OF T1, IN BIANRY TO OUTPUT DEVICE
|
||
|
||
DEFINE TRACE <
|
||
IFN FTTRC, <
|
||
PUSHJ P,BINWRT
|
||
>
|
||
>
|
||
|
||
; MACRO TO SEND A CONSTANT TO TRACE DEVICE. USES T1
|
||
|
||
DEFINE TRACEI(CONS)<
|
||
IFN FTTRC, <
|
||
MOVX T1,CONS
|
||
XLIST
|
||
TRACE
|
||
LIST
|
||
>
|
||
>
|
||
|
||
|
||
; MACRO TO SEND CONTENTS OF MEMORY LOCATION TO TRACE. USES T1
|
||
|
||
DEFINE TRACEM(MEM)<
|
||
IFN FTTRC, <
|
||
MOVE T1,MEM
|
||
XLIST
|
||
TRACE
|
||
LIST
|
||
>
|
||
>
|
||
|
||
;MACRO TO SET UP THE FACT-STYLE HEADER
|
||
|
||
DEFINE TRACEH(TYPE),<
|
||
XLIST
|
||
TRACEI %B'TYPE ;;TYPE OF ENTRY
|
||
TRACEI %B'TYPE'L ;;LENGTH OF ENTRY
|
||
LIST
|
||
>
|
||
SUBTTL MACRO TO SET UP THE JOB TRACKING DATA AREA
|
||
; THIS MACRO SETS UP THE STUFF FOR THE JOB DATA ROUTINES.
|
||
; IT SETS UP DATA AREAS FOR JOB TRACKING.
|
||
; NEW ENTRIES SHOULD CONTAIN THE FOLLOWING:
|
||
; 1)UP TO FOUR CHARACTERS OF NAME FOR FIELD
|
||
; C.'NAME IS LOCATION OF CURRENT DATA FOR THAT FIELD
|
||
; O.'NAME IS OFFSET (RELOCATED BY CONTENTS OF AC J)
|
||
; OF THAT DATA ITEM FOR EACH JOB TRACKED
|
||
;
|
||
; 2)LENGTH OF THE FIELD FOR OUTPUT PURPOSES (OCTAL)
|
||
;
|
||
; 3)FOR /COMPARE SWITCH , VALUE "COMP" MEANS COMPARE THIS OLD VS
|
||
; CURRENT VALUE AND IF DIFFERENT PRINT, "NOCOMP" MEANS IGNORE
|
||
; ANY DIFFERENCES IN THIS FIELD
|
||
; THIS IS FOR DEFAULT /COMPARE AND CAN BE OVERIDDEN
|
||
; WITH ARGUMENTS.
|
||
|
||
COMP==1
|
||
NOCOMP==0
|
||
|
||
DEFINE DATUMS <
|
||
IFE BIGLST,<XLIST>
|
||
|
||
X FST,0,NOCOMP ;FIRST PRINT OF JOB FLAG
|
||
X DAY,10,NOCOMP ;TIME OF DAY OF PEEK
|
||
X JOB,4,COMP ;JOB NUMBER
|
||
X TTY,6,COMP ;TTY LINE NUMBER
|
||
X PROG,6,COMP ;PROGRAM NAME
|
||
X STAT,2,NOCOMP ;STATUS
|
||
X NSWP,2,NOCOMP ;NOT SWAPPED, IE IN CORE
|
||
X LOW,0,NOCOMP ;LOW SEG SIZE
|
||
X HIGH,6,NOCOMP ;HI-SEG SIZE
|
||
X RT,11,NOCOMP ;RUNTIME
|
||
X RD,7,NOCOMP ;DISK READS
|
||
X WR,7,NOCOMP ;DISK WRITES
|
||
X PRV,0,COMP ;PRIVELEGE BITS
|
||
X KCT,11,NOCOMP ;KILO-CORE-TICS FOR JOB
|
||
X GOD,^D22,COMP ;JACCT LIT (SPACING WIDTH USED FOR RT/ET)
|
||
X TLM,^D12,NOCOMP ;TIME LIMIT SET FOR JOB
|
||
X PPN,^D16,COMP ;PPN OF USER
|
||
X NAM1,0,COMP ;FIRST HALF OF USER NAME
|
||
X NAM2,^D17,COMP ;SECOND HALF
|
||
LIST
|
||
> ;END OF DATUMS DEFINITION
|
||
|
||
|
||
|
||
;SET UP DEFCMP (DEFINE COMPARE) WORD FOR USE BY COMPARE ROUTINE
|
||
;FOR EACH FIELD DEFINED IN DATUMS MACRO, A CORRESPONDING
|
||
;BIT = 1 MEANS COMPARE FOR /C , A BIT =0 MEANS
|
||
;DONT COMPARE
|
||
%CHKCM==0
|
||
ZZ==0
|
||
;
|
||
DEFINE X(A,Y,C)<
|
||
IFE ^D37-ZZ, <PRINTX ? TOO MANY FIELDS FOR COMPILING %CHKCM!>
|
||
%CHKCM==%CHKCM!<<C>B<ZZ>>
|
||
ZZ==ZZ+1
|
||
>
|
||
DATUMS ;DEFINE THE WORD
|
||
SHOW.(%CHKCM) ;AND THATS WHAT RESULTS
|
||
;THIS WILL BE USED LATER FOR /COMPARE
|
||
;DEFAULT VALUE
|
||
SUBTTL MACRO TO DEFINE THE SYSTEM TRACKING PARAMETERS
|
||
; THIS MACRO SETS UP THE STUFF FOR THE SYSTEM DATA ROUTINES
|
||
; FOR EACH ITEM YOU WISH TO HAVE 'TRACKED' FOR THE SYSTEM
|
||
; YOU MUST INCLUDE AN ENTRY HAVEING THE FORM:
|
||
;
|
||
; X OUTPUT LABEL,4 CHR NAME,ADDR OF INITIALIZATION ROUTINE,
|
||
; ADDR OF FETCH DATA ROUTINE,ADDR OF OUTPUT ROUTINE, RANGE FOR DATA
|
||
; POINTS TO BE GROUPED TOGETHER
|
||
|
||
; A) OUTPUT LABEL WILL BE PRINTED ON THE REPORT
|
||
; B) NAME WILL BE USED TO CREATE UNIQUE TABLE NAMES
|
||
; C) INITIALIZATION ROUTINE (IF NON-ZERO) WILL BE PUSHJ P'ED TO
|
||
; ONCE FOR EACH COMMAND STRING.
|
||
; D) FETCH ROUTINE (IF NON-ZERO) WILL PUSHJ P'ED TO EVERY LOOK
|
||
; E) OUTPUT ROUTINE (IF NON-ZERO) WILL BE PUSHJ P'D TO EVERY REPORT
|
||
;
|
||
; THE FOLLOWING TABLES ARE CREATED:
|
||
;
|
||
; XXXX.N TABLE OF POINTERS TO LABELS
|
||
; XXXX.I TABLE OF INITIA ROUTINE ADDRESSES
|
||
; XXXX.P TABLE OF POINTERS TO DATA AREA FOR EACH ITEM
|
||
; EACH ENTRY IN THIS TABLE SHOULD BE OF THE FORM: L,,ADDR
|
||
; THE INITIALIZATION ROUTINE HAS THE RESPONSIBILITY
|
||
; OF CORRECTLY SETTING UP THIS WORD
|
||
; L WILL ALWAYS CONTAIN THE LOOK NUMBER WE ARE DOING
|
||
; AND ADDR THE START OF THE BLOCK "# OF LOOKS/REPORT"
|
||
; LONG USED FOR HOLDING THE DATA SEEN FOR EACH LOOK
|
||
;
|
||
; XXXX.G TABLE OF ADDRESSES OF DATA GATHERING ROUTINES
|
||
; PUSHJ P'ED TO EACH LOOK (IF NON-ZERO)
|
||
; XXXX.D SAME AS ABOVE, PUSHJ P'ED TO EVERY TIME WE REPORT
|
||
; XXXX.V TABLE CONTAINING THE RANGE OVER WHICH TO
|
||
; GROUP DATA POINTS TOGETHER WHEN MAKING OUTPUT
|
||
; REPORTS
|
||
;
|
||
; XXXX.C A TABLE OF 4 LETTER,LEFT JUSTIFIED SIXBIT
|
||
; CODES IS CREATED FOR IDENTIFYING ITEMS IN THE TRACE
|
||
; FORMAT REPORT AND FOR ARGUMENTS TO /INCLUDE,EXCLUDE
|
||
; THIS TABLE IS MADE UP FROM THE 4 LETTER
|
||
; SECOND ARGUMENT TO THE SYSDAT MACRO
|
||
|
||
; EACH TABLE IS PRECEDED BY THE LABEL 'TAB.X' AND ITS LENGTH IS
|
||
; LEN.X
|
||
; ALSO, WHEN ROUTINES ARE BEING EXECUTED, INDEX REGISTER J
|
||
; WILL CONTAIN THE ITEM WE ARE WORKING, AND INDEX REGISTER L
|
||
; WILL CONTAIN THE NUMBER OF THE CURRENT LOOK
|
||
|
||
;
|
||
;
|
||
; SEE FOLLOWING CODE FOR DEFINITIONS OF AVAILABLE ROUTINES AND
|
||
; FOR VARIABLES ALWAYS AVAILABLE FOR ROUTINES TO USE
|
||
;
|
||
|
||
|
||
DEFINE SYSDAT <
|
||
IFE BIGLST,< XLIST>
|
||
|
||
X USER CPU JIFFIES/SECOND,CPUT,CPUT%I,CPUT%G,OUTDBI,^D10
|
||
|
||
X PERCENT IDLE TIME ON CPU0,CP0I,DBCORE,CP0I%G,OUTDBI,5
|
||
X PERCENT IDLE TIME ON CPU1,CP1I,CP1INI,CP1I%G,OUTDBI,5
|
||
X PERCENT IDLE TIME ON CPU2,CP2I,CP2INI,CP2I%G,OUTDBI,5
|
||
X PERCENT IDLE TIME ON CPU3,CP3I,CP3INI,CP3I%G,OUTDBI,5
|
||
X PERCENT IDLE TIME ON CPU4,CP4I,CP4INI,CP4I%G,OUTDBI,5
|
||
X PERCENT IDLE TIME ON CPU5,CP5I,CP5INI,CP5I%G,OUTDBI,5
|
||
|
||
X PERCENT LOST TIME ON CPU0,CP0L,DBCORE,CP0L%G,OUTDBI,5
|
||
X PERCENT LOST TIME ON CPU1,CP1L,CP1INI,CP1L%G,OUTDBI,5
|
||
X PERCENT LOST TIME ON CPU2,CP2L,CP2INI,CP2L%G,OUTDBI,5
|
||
X PERCENT LOST TIME ON CPU3,CP3L,CP3INI,CP3L%G,OUTDBI,5
|
||
X PERCENT LOST TIME ON CPU4,CP4L,CP4INI,CP4L%G,OUTDBI,5
|
||
X PERCENT LOST TIME ON CPU5,CP5L,CP5INI,CP5L%G,OUTDBI,5
|
||
|
||
X CPU0 EXEC TIME(%),EXEC,EXEC%I,EXEC%G,OUTDBF,^D10
|
||
X CPU1 EXEC TIME(%),EXE1,EXE1%I,EXE1%G,OUTDBF,^D10
|
||
X CPU2 EXEC TIME(%),EXE2,EXE2%I,EXE2%G,OUTDBF,^D10
|
||
X CPU3 EXEC TIME(%),EXE3,EXE3%I,EXE3%G,OUTDBF,^D10
|
||
X CPU4 EXEC TIME(%),EXE4,EXE4%I,EXE4%G,OUTDBF,^D10
|
||
X CPU5 EXEC TIME(%),EXE5,EXE5%I,EXE5%G,OUTDBF,^D10
|
||
|
||
X CPU0 MBOX REFS(K/SEC),MBXR,MBXR%I,MBXR%G,OUTDBF,^D10
|
||
X CPU1 MBOX REFS(K/SEC),MBX1,MBX1%I,MBX1%G,OUTDBF,^D10
|
||
X CPU2 MBOX REFS(K/SEC),MBX2,MBX2%I,MBX2%G,OUTDBF,^D10
|
||
X CPU3 MBOX REFS(K/SEC),MBX3,MBX3%I,MBX3%G,OUTDBF,^D10
|
||
X CPU4 MBOX REFS(K/SEC),MBX4,MBX4%I,MBX4%G,OUTDBF,^D10
|
||
X CPU5 MBOX REFS(K/SEC),MBX5,MBX5%I,MBX5%G,OUTDBF,^D10
|
||
|
||
X PERCENT OVERHEAD TIME ON CPU0,CP0O,DBCORE,CP0O%G,OUTDBI,5
|
||
X PERCENT OVERHEAD TIME ON CPU1,CP1O,CP1INI,CP1O%G,OUTDBI,5
|
||
X PERCENT OVERHEAD TIME ON CPU2,CP2O,CP2INI,CP2O%G,OUTDBI,5
|
||
X PERCENT OVERHEAD TIME ON CPU3,CP3O,CP3INI,CP3O%G,OUTDBI,5
|
||
X PERCENT OVERHEAD TIME ON CPU4,CP4O,CP4INI,CP4O%G,OUTDBI,5
|
||
X PERCENT OVERHEAD TIME ON CPU5,CP5O,CP5INI,CP5O%G,OUTDBI,5
|
||
|
||
X CONTEXT SWITCHES PER SECOND ON CPU0,CP0C,DBCORE,CP0C%G,OUTDBI,^D10
|
||
X CONTEXT SWITCHES PER SECOND ON CPU1,CP1C,CP1INI,CP1C%G,OUTDBI,^D10
|
||
X CONTEXT SWITCHES PER SECOND ON CPU2,CP2C,CP2INI,CP2C%G,OUTDBI,^D20
|
||
X CONTEXT SWITCHES PER SECOND ON CPU3,CP3C,CP3INI,CP3C%G,OUTDBI,^D30
|
||
X CONTEXT SWITCHES PER SECOND ON CPU4,CP4C,CP4INI,CP4C%G,OUTDBI,^D40
|
||
X CONTEXT SWITCHES PER SECOND ON CPU5,CP5C,CP5INI,CP5C%G,OUTDBI,^D50
|
||
|
||
X UUOS PER SECOND ON CPU0,CP0U,DBCORE,CP0U%G,OUTDBI,^D10
|
||
X UUOS PER SECOND ON CPU1,CP1U,CP1INI,CP1U%G,OUTDBI,^D10
|
||
X UUOS PER SECOND ON CPU2,CP2U,CP2INI,CP2U%G,OUTDBI,^D20
|
||
X UUOS PER SECOND ON CPU3,CP3U,CP3INI,CP3U%G,OUTDBI,^D30
|
||
X UUOS PER SECOND ON CPU4,CP4U,CP4INI,CP4U%G,OUTDBI,^D40
|
||
X UUOS PER SECOND ON CPU5,CP5U,CP5INI,CP5U%G,OUTDBI,^D50
|
||
|
||
X CACHE SWEEPS PER SECOND ON CPU0,L0SN,CL0INI,L0SN%G,OUTDBI,^D10
|
||
X CACHE SWEEPS PER SECOND ON CPU1,L1SN,CL1INI,L1SN%G,OUTDBI,^D10
|
||
X CACHE SWEEPS PER SECOND ON CPU2,L2SN,cl2ini,l2SN%G,OUTDBI,^D10
|
||
X CACHE SWEEPS PER SECOND ON CPU3,L3SN,cl3INI,l3SN%G,OUTDBI,^D10
|
||
X CACHE SWEEPS PER SECOND ON CPU4,L4SN,cl4INI,l4SN%G,OUTDBI,^D10
|
||
X CACHE SWEEPS PER SECOND ON CPU5,L5SN,cl5INI,l5SN%G,OUTDBI,^D10
|
||
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU0 SCHEDULER,L0LN,CL1INI,L0LN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU1 SCHEDULER,L1LN,CL1INI,L1LN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU2 SCHEDULER,L2LN,CL2INI,L2LN%G,OUTDBI,^D20
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU3 SCHEDULER,L3LN,CL3INI,L3LN%G,OUTDBI,^D30
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU4 SCHEDULER,L4LN,CL4INI,L4LN%G,OUTDBI,^D40
|
||
X CACHE SWEEP REQUESTS PER SECOND BY CPU5 SCHEDULER,L5LN,CL5INI,L5LN%G,OUTDBI,^D50
|
||
|
||
X CACHE SWEEP REQUESTS CPU0 SWEPT FOR PER SECOND,L0RN,CL1INI,L0RN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS CPU1 SWEPT FOR PER SECOND,L1RN,CL1INI,L1RN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS CPU2 SWEPT FOR PER SECOND,L2RN,CL2INI,l2RN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS CPU3 SWEPT FOR PER SECOND,L3RN,CL3INI,l3RN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS CPU4 SWEPT FOR PER SECOND,L4RN,CL4INI,l4RN%G,OUTDBI,^D10
|
||
X CACHE SWEEP REQUESTS CPU5 SWEPT FOR PER SECOND,L5RN,CL5INI,l5RN%G,OUTDBI,^D10
|
||
|
||
X PERCENT CACHE LOST TIME ON CPU1,L1LT,CL1INI,L1LT%G,OUTDBI,5
|
||
X PERCENT CACHE LOST TIME ON CPU2,L2LT,CL2INI,L2LT%G,OUTDBI,5
|
||
X PERCENT CACHE LOST TIME ON CPU3,L3LT,CL3INI,L3LT%G,OUTDBI,5
|
||
X PERCENT CACHE LOST TIME ON CPU4,L4LT,CL4INI,L4LT%G,OUTDBI,5
|
||
X PERCENT CACHE LOST TIME ON CPU5,L5LT,CL5INI,L5LT%G,OUTDBI,5
|
||
|
||
X DECTAPE GENERATED SLEEPS(#),SDGS,SDGS%I,SDGS%G,OUTDBI,^D10
|
||
X MAGTAPE GENERATED SLEEPS(#),SMGS,SMGS%I,SMGS%G,OUTDBI,^D10
|
||
X EVENT WAIT SATISFIED(#),SEWS,SEWS%I,SEWS%G,OUTDBI,^D10
|
||
X TTY INPUT WAIT SATISFIED(#),STIS,STIS%I,STIS%G,OUTDBI,^D10
|
||
X TTY OUTPUT WAIT SATISFIED(#),STOS,STOS%I,STOS%G,OUTDBI,^D10
|
||
X PTY INPUT WAIT SATISFIED(#),SPIS,SPIS%I,SPIS%G,OUTDBI,^D10
|
||
X PTY OUTPUT WAIT SATISFIED(#),SPOS,SPOS%I,SPOS%G,OUTDBI,^D10
|
||
X SS REQUEUE TO PQ1(#),SRS1,SRS1%I,SRS1%G,OUTDBI,^D10
|
||
X WAKE REQUEUE TO PQ1(#),SRW1,SRW1%I,SRW1%G,OUTDBI,^D10
|
||
X DAEMON SATISFIED REQUEUE TO PQ1(#),SRD1,SRD1%I,SRD1%G,OUTDBI,^D10
|
||
X ALL OTHER REQUEUE TO PQ1(#),SRO1,SRO1%I,SRO1%G,OUTDBI,^D10
|
||
|
||
X PQ1 JOBS EXPIRING QUANTUM(#),SQR1,SQR1%I,SQR1%G,OUTDBI,^D10
|
||
X PQ2 JOBS EXPIRING QUANTUM(#),SQR2,SQR2%I,SQR2%G,OUTDBI,^D10
|
||
X HPQ JOBS EXPIRING QUANTUM(#),SQRH,SQRH%I,SQRH%G,OUTDBI,^D10
|
||
|
||
X PQ1 JOBS EXPIRING ICPT(#),SIP1,SIP1%I,SIP1%G,OUTDBI,^D10
|
||
X PQ2 JOBS EXPIRING ICPT(#),SIP2,SIP2%I,SIP2%G,OUTDBI,^D10
|
||
X HPQ JOBS EXPIRING ICPT(#),SIPH,SIPH%I,SIPH%G,OUTDBI,^D10
|
||
|
||
X PQ1 SWAP IN MEMORY(K)(#),SKS1,SKS1%I,SKS1%G,OUTDBI,^D10
|
||
X PQ2 SWAP IN MEMORY(K)(#),SKS2,SKS2%I,SKS2%G,OUTDBI,^D10
|
||
X HPQ SWAP IN MEMORY(K)(#),SKSH,SKSH%I,SKSH%G,OUTDBI,^D10
|
||
|
||
X PQ1 JOBS SWAPPED IN(#),SNJ1,SNJ1%I,SNJ1%G,OUTDBI,^D10
|
||
X PQ2 JOBS SWAPPED IN(#),SNJ2,SNJ2%I,SNJ2%G,OUTDBI,^D10
|
||
X HPQ JOBS SWAPPED IN(#),SNJH,SNJH%I,SNJH%G,OUTDBI,^D10
|
||
|
||
X PQ1 EBOX/MBOX TICKS CHARGED(#),STC1,STC1%I,STC1%G,OUTDBI,^D10
|
||
X PQ2 EBOX/MBOX TICKS CHARGED(#),STC2,STC2%I,STC2%G,OUTDBI,^D10
|
||
X HPQ EBOX/MBOX TICKS CHARGED(#),STCH,STCH%I,STCH%G,OUTDBI,^D10
|
||
|
||
X AVERAGE WASTED CORE(PAGES),WASK,WASK%I,WASK%G,OUTDBI,^D10
|
||
X AVERAGE PQ1/CMQ SWAP IN RESPONSE(TICKS),CPSI,CPSI%I,CPSI%G,OUTDBI,^D10
|
||
X SWAPPING SPACE LEFT (PAGES),SWPS,DBCORE,SWPS%G,OUTDBF,^D50
|
||
X CACHE SWEEP REQUESTS BY SWAPPER PER SECOND,L0SD,CL1INI,L0SD%G,OUTDBI,^D10
|
||
X SWAPPER NULL TIME,SWPN,SWPN%I,SWPN%G,OUTDBI,^D10
|
||
X SWAPPER LOST TIME,SWPL,SWPL%I,SWPL%G,OUTDBI,^D10
|
||
X UNWIND COUNT,UNWD,UNWD%I,UNWD%G,OUTDBI,1
|
||
X SWAPPER FORCE COUNT,SWPF,SWPF%I,SWPF%G,OUTDBI,1
|
||
X PERCENT OF FREE CORE IN USE,PFCU,PFCU%I,PFCU%G,OUTDBF,5
|
||
X PERCENT TTY CHUNKS IN USE,PTCU,PTCU%I,PTCU%G,OUTDBF,5
|
||
X SCANNER SERVICE XMT INTERUPTS/SEC,SXMT,DBCORE,SXMT%G,OUTDBI,^D50
|
||
X SCANNER SERVICE RCV INTERUPTS/SEC,SRCV,DBCORE,SRCV%G,OUTDBI,^D50
|
||
X USER DISK BLOCKS PER SECOND,UDIO,UDIO%I,UDIO%G,OUTDBI,^D25
|
||
X SWAPPING BLOCKS PER SECOND,SWIO,SWIO%I,SWIO%G,OUTDBI,^D25
|
||
X USER KCS PER SECOND,UKCS,UKCS%I,UKCS%G,OUTDBI,5
|
||
X TERMINAL RESPONSE TIME (MS),RESP,DBCORE,RESP%G,OUTDBI,^D100
|
||
X AVERAGE RESPONSE TIME (MILLISECONDS),AVRT,DBCORE,AVRT%G,OUTDBI,^D25
|
||
X NUMBER OF JOBS LOGGED IN,JLGN,DBCORE,JLGN%G,OUTDBF,1
|
||
X PERCENT OF PHYS. CORE IN USE BY ACTIVE JOBS,ACCR,DBCORE,ACCR%G,OUTDBF,^D20
|
||
X PERCENT OF PHYS. CORE IN USE BY ALL JOBS,PHCR,DBCORE,PHCR%G,OUTDBF,^D20
|
||
X AVERAGE JOB SIZE (TO NEAREST UNIT),AVJS,DBCORE,AVJS%G,OUTDBF,^D5
|
||
X NR OF JOBS IN RUN QUEUES,NRJR,DBCORE,NRJR%G,OUTDBF,1
|
||
X PERCENT OF RUNNABLE JOBS IN CORE,PRJC,DBCORE,PRJC%G,OUTDBF,^D5
|
||
X JOBS IN TTY IO WAIT,TIOW,DBCORE,TIOW%G,OUTDBF,^D1
|
||
X JOBS IN IO WAIT OTHER THAN TTY,IOW,DBCORE,IOW%G,OUTDBF,^D1
|
||
X JOBS IN SHAREABLE RESOURCE QUEUES,JSHQ,DBCORE,JSHQ%G,OUTDBF,^D1
|
||
X 0,DISK,DISK%I,DISK%G,DISK%D,1 ;% busy for each disk unit
|
||
X 0,CHAN,CHAN%I,CHAN%G,CHAN%D,1 ;% busy for each channel
|
||
|
||
|
||
|
||
LIST
|
||
> ;END OF SYSDAT MACRO
|
||
|
||
; POSSIBLE START OF HIGH SEGMENT CODE
|
||
IFN PURESW, <TWOSEG
|
||
RELOC 400000>
|
||
|
||
SUBTTL INITIALIZE AND GET COMMAND STRING
|
||
|
||
|
||
TRACK: JFCL ;IN CASE CCL ENTRY
|
||
RESET
|
||
MOVE T1,[XWD LOWBEG,LOWBEG+1];CLEAR IMPURE AREA
|
||
SETZB SW,LOWBEG ;IN CASE OF RESTART
|
||
BLT T1,LOWEND ;ZAP
|
||
MOVE T1,.JBFF ;PICK UP JOBFF
|
||
MOVEM T1,SAVFF ;AND REMEMBER IT
|
||
MOVEI T1,DEBBLK ;DEBUG VARIABLES
|
||
MOVEM T1,.JBOPS## ;FOR CATASTROPHES
|
||
JUMPPT (T1,K.CORE,K.CORE,P.CORE,P.CORE) ;EXAMINE PROCESSOR
|
||
P.CORE: TXOA SW,KI.10 ;SET IT DOWN , ITS PAGES
|
||
K.CORE: TROA CHR,"K" ;MEMORY UNIT FOR K OF CORE
|
||
MOVEI CHR,"P" ;FOR PAGES THE SYMBOL IS "P"
|
||
MOVEM CHR,MEMUNI ;FOR PRINTOUT ROUTINES
|
||
MOVE P,[IOWD PDSIZE,PDL] ;SET UP PUSHDOWN LIST
|
||
IFE PURESW,<
|
||
PUSHJ P,SETTAB ;SET UP GETTABS
|
||
>
|
||
MOVX GT,%CCTYP ;GET CPU TYPE
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,CPUTYP ;REMEMBER IT
|
||
MOVX GT,%CNST2 ;LOOKUP FT TABLE
|
||
PUSHJ P,FETTAB
|
||
TXNE GT,ST%VMS ;CONTAINS VMSER?
|
||
TXO SW,FT.VM ;YES, REMEMBER THAT
|
||
MOVX GT,%CNLNP ;LOOK UP NUMBER OF LINES
|
||
PUSHJ P,FETTAB ;FROM MONITOR
|
||
HLROS GT ;MAKE FULL WORD NEGATIVE
|
||
MOVMM GT,MAXTTY ;MAXTTY BECOMES LARGEST TTY NR
|
||
SOS MAXTTY ;AFTER ACCOUNTING FOR ZERO
|
||
MOVX GT,%CNSJN ;DO SAME FOR NUMBER OF JOBS
|
||
PUSHJ P,FETTAB ;I.E. GET MAXIMUM NUMBER
|
||
HRRM GT,MAXJOB ;STORE FOR LATER GOOD THINGS
|
||
SOS MAXJOB ;ACCOUNT FOR NULL JOB
|
||
PJOB T1, ;SAVE OUR JOB
|
||
MOVEM T1,MYJOB ;FOR LATER USE
|
||
GETPPN T1, ;SAVE PPN
|
||
JFCL
|
||
MOVEM T1,MYPPN ;ALSO
|
||
|
||
|
||
TRACK1: SETZM LOOKS ;CLEAR ALL
|
||
SETZM HPQREQ ;
|
||
SETZM AVAL ;CLEAR /SAVE SWITCH
|
||
SETZM SDISK ;DEFAULT IS SYSTEM DISKS
|
||
MOVEI T1,DFLTQJ ;PICK UP DEFAULT SLEEP TIME FOR A JOB
|
||
MOVEM T1,QTUM
|
||
MOVEI T1,DEFLTR ;PICK UP DEFAULT LOOKS/REPORT
|
||
MOVEM T1,RVAL ;FOR SYSDAT STUFF
|
||
SETZM DEFCMP ;NO COMPARISON BITS DEFINED
|
||
IFN SYS,<
|
||
MOVE T1,[TAB.P,,TAB.P+1] ;CLEAR POINTERS FOR CORE TABLES (DB'S)
|
||
SETZM TAB.P ;TO CLEAR EXCLUDE/INCLUDES
|
||
BLT T1,TAB.P+LEN.P-1 ;AND ALLOCATIONS
|
||
SETOM CHAN.P ;START OUT EXCLUDING CHANNEL
|
||
SETOM DISK.P ;AND DISK STUFF
|
||
> ; END OF SYS CONDITIONAL
|
||
AND SW,[STKDFL] ;CLEAR ALL BUT STICKY DEFAULTS
|
||
SETOM C.FST ;SET FIRST FLAG
|
||
TRACK2: PUSHJ P,GETLIN ;LOAD COMMAND LINE
|
||
PUSHJ P,PRESCAN ;PRESCAN FOR FILESPEC
|
||
TXO SW,F.SPEC ;MARK AS PRESENT
|
||
MOVE T1,[XWD [.IOASC
|
||
DDEV
|
||
Z
|
||
DFILE
|
||
DEXT
|
||
Z
|
||
Z],FILMOD] ;LOAD DEFAULT FILE SPECS
|
||
BLT T1,FILPPN ;INTO FILE BLOCK
|
||
TXNN SW,F.SPEC ;FILE SPEC GIVEN?
|
||
JRST NOSPEC ;NO
|
||
MOVX T1,DDEVF ;LOAD DEFAULT FILE DEVICE
|
||
MOVEM T1,FILDEV ;
|
||
PUSHJ P,FILSPC ;GET FILE SPECIFICATION
|
||
PUSHJ P,GETCHR ;GET NEXT CHARACTER
|
||
CAIE CHR,"=" ;IS IT DELIMITER "="
|
||
JRST [$ERROR(EF.FAT!EF.RST,FDM,FILE SPECIFICATION DELIMITER "=" MISSING)]
|
||
NOSPEC: MOVE N1,COMPTR ;SAVE THE COMMAND POINTER
|
||
PUSHJ P,GETCHR ;GET A CHARACTER
|
||
TXNE SW,BRK ;BREAK CHARACTER?
|
||
JRST RESTRT ;YES,RECYCLE
|
||
CAIL CHR,"0" ;COULD BE JUST A NUMBER
|
||
CAILE CHR,"9" ;FOR JOB NUMBER TO WATCH
|
||
SKIPA
|
||
JRST TJOBS ;AND IT IS
|
||
MOVEM N1,COMPTR ;RESTORE THE COMMAND POINTER
|
||
PUSHJ P,TOKEN ;GET FIRST TOKEN
|
||
JUMPE T1,[ MOVEI T1,-" "(CHR) ;IF NOT ALPHANUMERIC
|
||
LSH T1,^D30
|
||
JRST NOSPC1] ;USE TOKEN'S DELIMITER
|
||
TXO SW,REGET ;DELIMITER STILL VALID
|
||
NOSPC1: MOVE T2,[-CSDLEN,,CSNAME] ;GET READY FOR TABLE LOOKUP
|
||
PUSHJ P,TABLUK ;LOOK IT UP
|
||
JRST [ JUMPL T1,[$ERROR(EF.FAT!EF.RST,CNU,COMMAND NOT UNIQUE)]
|
||
JRST BADCOM]
|
||
JRST @CSDISP(T1) ;DISPATCH ON COMMAND
|
||
BADCOM: MOVEI T1,LASTOK ;PICK UP LAST TOKEN
|
||
$ERROR(EF.FAT!EF.RST!EF.STR,UCS,UNKNOWN COMMAND )
|
||
|
||
; DEFINE COMMANDS
|
||
DEFINE CSCREATE<
|
||
IFE BIGLST, <XLIST>
|
||
|
||
X (MYPPN,TMPPNS) ;; "MYPPN"
|
||
X (SYSTEM,TSYS) ;; "SYSTEM"
|
||
X (#,TTTYS) ;;#NN (TTYNN)
|
||
X (/,TRYHLP) ;;/SWITCH
|
||
X ([,TPPNS) ;;[P,PN]
|
||
X (<'>,TPROG) ;;'PROGRAM'
|
||
X (PPN,TPPNS) ;;PPN[P,N]
|
||
X (DEBUG,TDDT) ;;DDT
|
||
X (USERS,TUSERS) ;;USERS
|
||
X (<.>,TMYJOB) ;;TRACK YOURSELF
|
||
X (<@>,TIND) ;;INDIRECT FILE SPECIFICATION
|
||
X (EXIT,FINISH) ;;EXIT FROM TRACK
|
||
|
||
LIST
|
||
> ; END OF CSCREATE DEFINITION
|
||
|
||
|
||
; NOW MAKE THE TABLE
|
||
|
||
DEFINE X(AA,BB)< SIXBIT\AA\>
|
||
|
||
CSNAME: CSCREATE
|
||
CSDLEN==.-CSNAME
|
||
|
||
DEFINE X(AA,BB)< XWD 0,BB>
|
||
|
||
CSDISP: CSCREATE
|
||
|
||
TRYHLP: PUSHJ P,GETSW ;GET SWITCH
|
||
CAIE CHR,"/" ;ANOTHER SWITCH?
|
||
JRST RESTRT ;NO
|
||
JRST TRYHLP ;YES
|
||
|
||
|
||
TMYJOB: MOVE T1,MYJOB ;TRACK YOURSELF
|
||
MOVEM T1,SAVNUM ;STORE IT
|
||
TXO SW,L.JOB ;LOOKING AT JOB
|
||
PUSHJ P,GETCHR ;LOAD CHARACTER
|
||
JRST SWCHK ;PROCESS SWITCHES
|
||
|
||
TPROG: PUSHJ P,TOKEN ;GET THE PROGRAM NAME
|
||
JUMPE T1,[$ERROR(EF.FAT!EF.RST,IPN,ILLEGAL PROGRAM NAME)]
|
||
MOVEM T1,SAVPOP ;STORE IT AWAY
|
||
TXO SW,L.PROG ;WATCHING A PROGRAM
|
||
CAIN CHR,"'" ;DELIMITED BY MATCHING '?
|
||
PUSHJ P,GETCHR ;YES,EAT IT
|
||
JRST TUSE.1 ;JOIN COMMON MULTIPLE JOB CODE
|
||
|
||
|
||
TPPNS: PUSHJ P,OCTIN ;GET FIRST HALF (PROJ)
|
||
JUMPN T1,TPPNS1 ;IF NOT, BLANK CONTINUE
|
||
CAIN CHR,"*" ;BLANK DELIMITED BY STAR?
|
||
SOJA T1,[PUSHJ P,GETCHR ;GET DELIMITER
|
||
JRST TPPNS1 ] ;ALL FILLED IN WITH -1
|
||
HLR T1,MYPPN ;ELSE USE MY PPN
|
||
TPPNS1: CAIE CHR,"," ;DELIMITED BY COMMA
|
||
JRST BPPN ;NOPE
|
||
HRLZM T1,SAVPOP ;STASH IT
|
||
PUSHJ P,OCTIN ;GET PROGRAMMER NUMBER
|
||
JUMPN T1,TPPNS2 ;IF GIVEN, JUST CONTINUE
|
||
CAIN CHR,"*" ;DELIMITED BY STAR?
|
||
SOJA T1,[PUSHJ P,GETCHR ;EAT THE STAR
|
||
JRST TPPNS2] ;AND CONTINUE
|
||
HRR T1,MYPPN ;GET PROG NUMBER RUNNING UNDER
|
||
TPPNS2: TXNN SW,BRK ;BREAK SEEN ?, OR
|
||
CAIN CHR,"]" ;DELIMITED BY ]
|
||
CAIA
|
||
JRST BPPN
|
||
HRRM T1,SAVPOP ;AND DONE WITH PPN!
|
||
JRST TMPSET ;AND CONTINUE WITH INITITALIZATION
|
||
|
||
TMPPNS: MOVE T1,MYPPN ;USE OWN PPN
|
||
MOVEM T1,SAVPOP
|
||
TMPSET: TXO SW,L.PPN ;WATCHING PPN
|
||
TXNN SW,BRK ;BREAK?
|
||
PUSHJ P,GETCHR ;NO,LOAD CHAR
|
||
JRST TUSE.1 ;JOIN COMMON MULTI-JOB CODE
|
||
|
||
BPPN: $ERROR(EF.FAT!EF.RST,BPN,BAD FORMAT FOR PROJECT-PROGRAMMER NUMBER)
|
||
|
||
|
||
TSYS:
|
||
IFN SYS, <
|
||
TXO SW,SYSD ;DOING SYSTEM DATA
|
||
MOVEI T1,DFLTQS ;RESET DEFAULT SLEEP TIME
|
||
MOVEM T1,QTUM
|
||
PUSHJ P,GETCHR ;LOAD NEXT CHR
|
||
JRST SWCHK ;GO PICK UP SWITCHES >
|
||
IFE SYS, <
|
||
$ERROR(EF.FAT!EF.RST,SNI,SYSTEM TRACKING NOT INCLUDED IN THIS VERSION)
|
||
>; IF NOT INCLUDED (IE FT SYS=0)
|
||
|
||
TUSERS: TXO SW,L.USRS ;TURN ON USERS
|
||
MOVEI T1,DFLTQU ;LOAD INTERVER FOR USERS
|
||
MOVEM T1,QTUM ;BECAUSE ITS LONGER
|
||
PUSHJ P,GETCHR ;GET NEXT CHARACTER LOADED
|
||
TUSE.1: MOVEI T1,1 ;START WITH JOB 1
|
||
MOVEM T1,SAVNUM
|
||
JRST SWCHK ;START WITH SWITCHES
|
||
|
||
TDDT: PUSHJ P,EATLIN ;EAT REST OF LINE
|
||
SKIPN N1,.JBDDT## ;DEBUGGER LOADED?
|
||
JRST [$ERROR(EF.FAT!EF.RST,DNL,DEBUGGER NOT LOADED)] ;NO
|
||
$ERROR(EF.CMT,DEB,ENTERING DEBUGGER)
|
||
JRST (N1) ;ENTER DDT
|
||
XDDT: JRST TRACK1 ;SO " XCT XDDT$X" GOES BACK
|
||
;TO COMMAND LEVEL
|
||
|
||
|
||
TIND: MOVE T1,[XWD [.IOASC
|
||
SIXBIT/DSK /
|
||
0,,TYBUF
|
||
SIXBIT/TRACK/
|
||
SIXBIT/CCL/
|
||
0
|
||
0],FILMOD]
|
||
BLT T1,FILPPN
|
||
PUSHJ P,FILSPC ;LOAD DEFAULTS,GET USER SPEC
|
||
PUSHJ P,GETCHR ;SEE IF ENDS W/BREAK
|
||
TXNN SW,BRK ;
|
||
JRST BADCOM ;NO
|
||
PUSHJ P,REDUCE ;GET RID OF EXCESS CORE
|
||
TXO SW,INDFLG ;MARK INDIRECT FILE ACTIVE
|
||
JRST TRACK2 ;AND GET COMMANDS
|
||
|
||
TJOBS: TXO SW,REGET+L.JOB ;LOOKING FOR JOB,REGET THE FIRST DIGIT
|
||
JRST GETNUM ;GET JOB NUMBER
|
||
|
||
TTTYS: TXO SW,L.TTY ;SET SWITCH FOR TTY LOOKS
|
||
PUSHJ P,OCTIN ;TTY #S ARE OCTAL
|
||
SKIPA
|
||
GETNUM: PUSHJ P,DECIN ;GET DECIMAL JOB NO.
|
||
MOVEM T1,SAVNUM ;SAVE FOR GOOD THINGS
|
||
TXNE SW,L.TTY ;LOOKING AT TTY?
|
||
JRST VALTTY ;YES
|
||
SKIPL T1 ;NO, DOING JOB. IS THIS NR. TOO LOW?
|
||
CAMLE T1,MAXJOB ;OR TOO HIGH?
|
||
JRST [MOVE T1,MAXJOB ;SET UP AND DO ERROR MESSAGE
|
||
$ERROR(EF.FAT!EF.RST!EF.DEC,JMR,JOB NUMBER MUST BE IN RANGE 0-)]
|
||
JRST SWCHK ;NO,ITS OK
|
||
|
||
VALTTY: SKIPL T1 ;ALSO MUST BE IN RANGE 0-MAXTTY
|
||
CAMLE T1,MAXTTY ;
|
||
JRST [MOVE T1,MAXTTY
|
||
$ERROR(EF.FAT!EF.RST!EF.OCT,TMR,TTY NUMBER MUST BE IN RANGE 0-)]
|
||
SWCHK: TXNE SW,BRK ;BREAK CHR ENDS THINGS
|
||
JRST START ;BUT IT WASNT
|
||
CAIE CHR,"/" ;MIGHT BE SWITCH
|
||
JRST BADCOM ;BUT IT WASNT
|
||
PUSHJ P,GETSW ;PICK UP SWITCH
|
||
JRST SWCHK ;GET NEXT SWITCH OR END
|
||
|
||
SUBTTL INITIALIZE PRIOR TO COMMENCEING TRACK LOOP
|
||
|
||
START: RELEAS TY, ;CLOSE OUTPUT
|
||
PUSHJ P,REDUCE ;REDUCE CORE TO STARTING SIZE
|
||
TXNE SW,OPT.S ;DO STATISTICS?
|
||
TXNN SW,NO.RSP ;ARE RESPONSE TIMES OFF
|
||
JRST STATOK
|
||
$ERROR(EF.WRN,JRU,JOB RUN QUEUE TIME UNAVAILABLE)
|
||
STATOK: PUSHJ P,FILOPN ;OPEN FILE
|
||
TXZ SW,F.TTY ;DONT FORCE OUTPUT TO TTY
|
||
TXNN SW,L.USRS!L.JOB!L.TTY!L.PPN!L.PROG ;JOB TRACKING?
|
||
JRST STRT1 ;NO.SKIP THE OLD DATA AREA SETUP
|
||
MOVEI T1,SIZDAT ;SIZE OF BLOCK PER JOB
|
||
TXNE SW,L.USRS!L.PPN!L.PROG ;NEED FOR ALL JOBS?
|
||
IMUL T1,MAXJOB ;YES,MULTIPLY
|
||
PUSHJ P,ASSCOR ;GET THE CORE
|
||
MOVEM T1,OLDPTR ;SAVE THE POINTER
|
||
STRT1: TRACEH (TRK) ;[*]OUTPUT FILE START HEADER
|
||
TRACEM .JBVER## ;PUT OUT VERSION OF TRACK
|
||
TRACEI B%%S ;SAY ITS A SYSTEM TRACK
|
||
IFN SYS, <
|
||
TXNE SW,SYSD ;DOING SYSTEM DATA?
|
||
PUSHJ P,SYSINI ;YES,GO START UP >
|
||
TXNE SW,MRET ;[*]DOES THE USER WISH A MONRET. (EXIT 1,)?
|
||
SKIPE STRTED ;[*] YES-BUT IS THIS THE FIRST TIME?
|
||
JRST GODO ;START
|
||
$ERROR(EF.CMT,PTC,PLEASE TYPE CONTINUE TO COMMENCE TRACKING)
|
||
EXIT 1, ;HERE IS THE MONRET.
|
||
GODO: SETOM STRTED ;[*]INDICATE THAT WE ARE STARTED.
|
||
SKIPN T1,HPQREQ ;ASK FOR HPQ?
|
||
JRST NOHPQ ;NO
|
||
HPQ T1, ;TRY IT
|
||
JRST [ MOVE T1,HPQREQ ;GET HPQ REQUESTED
|
||
$ERROR(EF.WRN!EF.OCT,HPQ,CANNOT SET TO HPQ)
|
||
JRST NOHPQ] ;RETURN
|
||
NOHPQ: TXNN SW,R.LOCK ;LOCK REQUESTED?
|
||
JRST NOLOCK ;NO
|
||
IFN PURESW, <
|
||
MOVE T1,[XWD LOCCOD,LOCCOD] >;LOCK BOTH SEGMENTS
|
||
IFE PURESW, <
|
||
MOVEI T1,LOCCOD ;LOCK LOW SEGMENT
|
||
LOCK T1, ;LOCK HIM
|
||
JRST [$ERROR(EF.WRN!EF.OCT,CLJ,<CANNOT LOCK JOB, ERROR CODE=>)
|
||
JRST NOLOCK] ;AND RETURN
|
||
NOLOCK: TXNE SW,DEVTTY!MRET ;TO TTY OR DETACHED?
|
||
JRST STRT2 ;YES,SKIP BANNER
|
||
$ERROR(EF.CMT,TRK,TRACKING...)
|
||
STRT2: MSTIME T1,
|
||
MOVEM T1,SAVST ;SAVE START TIME
|
||
IFN FTTRC, <
|
||
TXNN SW,MD.TRC ;DOING TRACE?
|
||
JRST MAIN ;NO,SKIP EXTRA UUO
|
||
MOVX GT,%CNDTM ;FOR TRACE, USE UNIVERSAL DATE-TIME
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,SAVSTU ;SAVE UNIVERSAL START TIME
|
||
> ;END OF CONDITIONAL ON FTTRC
|
||
JRST MAIN ;START PROCESSING
|
||
SUBTTL RESTART,EXIT AND FILE ROUTINES
|
||
; HERE TO CLOSE OUTPUT, RELEASE DEVICE AND EXIT
|
||
|
||
FINISH: CLOSE TY, ;CLOSE FILE
|
||
RELEAS TY, ;RELEASE CHANNEL
|
||
EXIT
|
||
|
||
; HERE TO UNLOCK, CLEAN UP AND GO BACK TO COMMAND LEVEL
|
||
;
|
||
|
||
RESTRT: CLOSE TY, ;CLOSE FILES
|
||
RELEAS TY,
|
||
TXO SW,F.TTY ;FORCE OUTPUT TO TTY
|
||
TXNN SW,R.LOCK ;WAS I LOCKED?
|
||
SKIPE HPQREQ ;OR IN HPQ?
|
||
RESET ;YES, UNDO THE CONDITION
|
||
MOVE P,[IOWD PDSIZE,PDL] ;RE-SET UP PDP
|
||
PUSHJ P,REDUCE ;RESTORE SIZE
|
||
JRST TRACK1 ;AND READY FOR NEXT COMMAND
|
||
|
||
|
||
|
||
; ROUTINE TO OPEN,LOOKUP AND APPEND THE OUTPUT REPORT
|
||
|
||
FILOPN: MOVE T1,FILDEV ;LOAD T1 WITH DEVICE
|
||
MOVE N1,T1 ;GET COPY
|
||
DEVCHR N1, ;LOOK UP
|
||
JUMPE N1,[$ERROR(EF.FAT!EF.SIX!EF.RST,DDE,DEVICE DOES NOT EXIST: )]
|
||
TXNN N1,DV.OUT ;DOES OUTPUT?
|
||
JRST [$ERROR(EF.FAT!EF.SIX!EF.RST,CDO,DEVICE CANNOT DO OUTPUT: )]
|
||
MOVE T2,FILMOD ;CHECK MODE
|
||
MOVEI T3,1 ;FOR LEGALITY
|
||
LSH T3,(T2)
|
||
TRNN N1,(T3) ;
|
||
JRST [$ERROR(EF.FAT!EF.SIX!EF.RST,IDM,ILLEGAL DATA MODE FOR DEVICE )]
|
||
TXNE N1,DV.TTA ;USER TTY?
|
||
TXO SW,DEVTTY ;YES,SET FLAG
|
||
MOVE LUEB,FILMOD ;[*]GET MODE
|
||
MOVE LUEB+1,FILDEV ;[*]AND DEVICE
|
||
MOVSI LUEB+2,TYBUF ;[*]POINT TO BUFFER
|
||
OPEN TY,LUEB ;[*]OPEN THE FILE
|
||
JRST [MOVE T1,FILDEV
|
||
$ERROR(EF.FAT!EF.SIX!EF.RST,OPN,OPEN FAILED FOR DEVICE )]
|
||
OUTBUF TY,TYB ;[*]SET BUFFERS
|
||
SETOM FSTFLG ;[*]SET FIRST LOOKUP FLAG
|
||
PUSHJ P,FSAV1 ;[*]AND OPEN FILE
|
||
TXNN N1,DV.DIR ;[*]WILL LOOKUP NEVER FAIL?
|
||
POPJ P, ;[*]RIGHT-SKIP MS
|
||
SKIPN FSTFLG ;[*]DID WE APPEND?
|
||
POPJ P, ;[*]NO
|
||
$ERROR(EF.WRN,APP,APPENDING TO EXISTING OUTPUT FILE)
|
||
MOVEI CHR,14 ;[*]
|
||
PJRST PUTCHR ;[*]OUTPUT IT AND RETURN
|
||
|
||
; THIS ROUTINE CLOSES THE OUTPUT FILE, RE-OPENS IT IN APPEND MODE
|
||
|
||
FILSAV: SKIPGE AVAL ;-1 MEANS SAVE EVERY TIME
|
||
JRST FSAVA ;[*]ELSE SAVE EVERY TIME
|
||
SKIPG AVAL
|
||
POPJ P, ;SHOULDN'T REALLY HAPPEN
|
||
SOSE AVALC ;DECREMENT COUNTER AND IF NOT 0
|
||
POPJ P, ;RETURN IMMEDIATELY
|
||
MOVE T1,AVAL ;PICK UP MASTER COUNT
|
||
MOVEM T1,AVALC ;AND RESET COUNTER
|
||
FSAVA: MOVEI T1,1 ;[*]MAKE FSTFLG BE POS.
|
||
MOVEM T1,FSTFLG
|
||
FSAV1: PUSHJ P,GENNAM ;[*]MAKE UP A 'MMDDYY' NAME IF /DAILY
|
||
MOVE LUEB,FILNAM ;[*]RE-OPEN
|
||
MOVE LUEB+1,FILEXT ;[*]
|
||
MOVE LUEB+2,FILDAT ;[*]LOAD
|
||
MOVE LUEB+3,FILPPN ;[*]REST OF BLOCK
|
||
LOOKUP TY,LUEB ;[*]LOOKUP THEN ENTER
|
||
JRST NOTHR ;[*]IT AINT THERE...
|
||
FSAV2: MOVE LUEB+1,FILEXT ;[*]RELOAD
|
||
MOVE LUEB+2,FILDAT ;[*]
|
||
MOVE LUEB+3,FILPPN ;[*]
|
||
ENTER TY,LUEB ;[*]AND HERES THE ENTER
|
||
JRST E$$OPE ;[*]GIVES US UPDATE MODE
|
||
SKIPE FSTFLG ;[*]IF FIRST LOOKUP FAILED SKIP, ELSE
|
||
USETI TY,-1 ;[*] DO APPENDING
|
||
POPJ P, ;[*]AND RETURN TO CALLER
|
||
|
||
NOTHR: AOSN FSTFLG ;[*]FIRST LOOKUP?
|
||
JRST FSAV2 ;[*]YES-NO PROBLEM
|
||
HRRZ T1,LUEB+1 ;[*]GET ERROR CODE
|
||
JUMPN T1,LUPERR ;[*]OTHER THAN FILE NOT FOUND
|
||
POP P,(P) ;[*]WE AINT RETURNING...
|
||
JRST START ;[*]JUST RESTARTING
|
||
|
||
SUBTTL DAILY SWITCH ROUTINE FILE HANDLING
|
||
|
||
;[*]THIS ROUTINE WILL GENERATE A 'MMDDYY' TYPE FILENAME
|
||
GENNAM: SKIPL DAILYF ;[*]DID HE WANT /DAILY?
|
||
POPJ P, ;[*]NOPE
|
||
MOVX GT,%CNDAY ;[*]WHAT IS TODAY?
|
||
PUSHJ P,FETTAB ;[*]ASK MON
|
||
CAMN GT,TODAY ;[*]SAME AS LAST LOOP?
|
||
POPJ P, ;[*]THEN SKIP ALL THIS B/S
|
||
EXCH GT,TODAY ;[*]UPDATE TODAY, AND LOOK AT LAST
|
||
JUMPN GT,NOTFST ;[*]GT=0 IMPLIES FIRST LOOP...
|
||
MOVE LUEB,FILNAM ;[*]GET FILE NAME ASKED
|
||
MOVE LUEB+1,FILEXT ;[*]FOR BY USER TO SEE
|
||
MOVE LUEB+2,FILDAT ;[*]IF IT ALREADY
|
||
MOVE LUEB+3,FILPPN ;[*]EXISTS
|
||
LOOKUP TY,LUEB ;[*]CHECK...
|
||
JRST NOREN ;[*]ASSUME NO FILE W/ OLD NAME
|
||
PUSHJ P,DATCHK ;[*]ITS THERE-CHECK CREATION DATE...
|
||
JRST NOREN ;[*]ITS NOT THERE ANYMORE UNLESS IT
|
||
;[*]WAS CREATED TODAY...
|
||
;[*]HERE IF THIS IS NOT THE FIRST LOOP, AND THE DATE JUST CHANGED (MIDNITE)
|
||
;[*]IN THIS CASE RENAME CURRENT FILE TO 'NEWNAME'...
|
||
NOTFST: MOVE LUEB,NEWNAM ;[*]THE NAME
|
||
TXNE SW,MD.TRC ;[*]ARE WE TRACING OR TEXTING
|
||
SKIPA LUEB+1,[DEXTT] ;[*]TRACING
|
||
MOVE LUEB+1,[DEXT] ;[*]TEXTING
|
||
MOVE LUEB+2,FILDAT ;[*]
|
||
MOVE LUEB+3,FILPPN ;[*]MKE IT LOOK LIKE USER WANTS
|
||
RENAME TY,LUEB ;[*]RENAME IT
|
||
JRST RENERR ;[*]ERROR CONDITION
|
||
NOREN: MOVE T1,[POINT 6,NEWNAM] ;[*]TO BUILD THE NAME
|
||
MOVX GT,%CNMON ;[*]MONTH FIRST
|
||
PUSHJ P,FETTAB ;[*]ASK THE MON...
|
||
PUSHJ P,BLDNAM ;[*]ADD TO THE NAME
|
||
MOVE GT,TODAY ;[*]WE ALREADY HAVE TODAY
|
||
PUSHJ P,BLDNAM ;[*]ADD ON
|
||
MOVX GT,%CNYER ;[*]AND NOW FOR YEAR...
|
||
PUSHJ P,FETTAB ;[*]GET IT FROM THE MONITR.
|
||
SUBI GT,^D1900 ;[*]- 1900 TO MAKE JUST 2 DIGITS
|
||
PUSHJ P,BLDNAM ;[*]ADD ON
|
||
POPJ P,
|
||
|
||
BLDNAM: IDIVI GT,^D10 ;[*]GET EACH DIGIT...
|
||
ADDI GT,20 ;[*]ASCIZIZE FIRST ONE
|
||
IDPB GT,T1 ;[*]AND LOAD
|
||
ADDI GT+1,20 ;[*]TAKE THE REMAINDER=2ND DIG
|
||
IDPB GT+1,T1 ;[*]SAME
|
||
POPJ P,
|
||
|
||
;[*]THIS ROUTINE WILL CHECK THE CREATION DATE OF THE FILE, AND IF
|
||
;[*]IT IS NOT EQUAL TO TODAY, IT WILL RENAME THAT FILE TO A MMDDYY NAME
|
||
;[*]CORRESPONDING TO ITS CREATION...
|
||
DATCHK: LDB T2,[POINT 3,LUEB+1,20] ;[*]GET THE CREAT DATE FOR FIL
|
||
LSH T2,^D12
|
||
ANDI LUEB+2,007777 ;[*]MASK OUT ALL BUT LOW 12 BITS
|
||
IOR T2,LUEB+2 ;[*]AND OR IN THE FIRST 12 BITS
|
||
DATE T1, ;[*]GET TODAYS DATE
|
||
CAMN T1,T2 ;[*]DIFFERENT?
|
||
POPJ P, ;[*]NO=NOTHING
|
||
IDIVI T2,^D31*^D12 ;[*]TO GET YEARS
|
||
IDIVI T3,^D31 ;[*]AND DAYS
|
||
ADDI T2,^D64 ;[*]CORRECT FOR 1964 START
|
||
ADDI T3,1 ;[*]AND FOR 0 OFFSET MONTH
|
||
ADDI T4,1 ;[*]AND DAY
|
||
MOVE T1,[POINT 6,NEWNAM] ;[*]PREPARE TO BUILD NAME
|
||
MOVE GT,T3 ;[*]GET MONTH
|
||
PUSHJ P,BLDNAM
|
||
MOVE GT,T4 ;[*]AND DAY
|
||
PUSHJ P,BLDNAM
|
||
MOVE GT,T2 ;[*]AND YEAR
|
||
PUSHJ P,BLDNAM
|
||
MOVE LUEB,NEWNAM ;[*]PREP FOR RENAME
|
||
TXNE SW,MD.TRC ;[*]GET THE RIGHT EXT
|
||
SKIPA LUEB+1,[DEXTT]
|
||
MOVE LUEB+1,[DEXT]
|
||
MOVE LUEB+2,FILDAT ;[*]GET ALL THE LUEB
|
||
MOVE LUEB+3,FILPPN ;[*]STUFF...
|
||
RENAME TY,LUEB ;[*]RENAME THE BOOGER
|
||
JRST RENERR ;[*]ERROR ON RENAME
|
||
POPJ P, ;[*]VOILA
|
||
|
||
SUBTTL MAIN PROGRAM LOOP
|
||
|
||
|
||
MAIN: SKIPE AVAL ;[*]IS SAVING DONE?
|
||
SKIPG FSTFLG ;[*]IF SO: IS THIS FIRST TIME?
|
||
CAIA ;[*]YES...
|
||
PUSHJ P,FILSAV ;[*]SAVE FILES
|
||
|
||
IFN FTTRC, <
|
||
TXNN SW,MD.TRC ;DOING TRACE?
|
||
JRST NTRC1 ;NO
|
||
MOVX GT,%CNDTM ;FOR TRACE, GET UDT
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,SAVUPU ;AS SAVE IT
|
||
NTRC1:
|
||
> ;END OF CONDITIONAL ON FTTRC
|
||
SETZM CTRKJ ;NOT CURRENTLY TRACKING JOB
|
||
TXNE SW,L.USRS!L.PPN!L.PROG ;TRACKING ALL USERS?
|
||
TXO SW,UHP ;YES, REMEMBER WE NEED HEADER
|
||
MSTIME T1, ;GET TIME OF DAY
|
||
MOVEM T1,SAVUP ;TIME WE START LOOP
|
||
SKIPA ;SKIP A UUO, WE JUST DID MSTIME
|
||
MAIN1A: MSTIME T1, ;USER TYPE THINGS
|
||
MOVEM T1,C.DAY ;AND STORE
|
||
IFN SYS, <
|
||
TXNE SW,SYSD ;DOING SYSTEM DATA?
|
||
JRST SYSGET ;YES,DO IT NOTE ,WE RETURN
|
||
;AFTER GATHERING AT REJOIN
|
||
>; END OF SYS CONDITIONAL
|
||
MOVE T1,SAVNUM ;GET MAGIC NUMBER
|
||
PUSHJ P,SETJ ;SET UP AC J FOR RELOCATION
|
||
TXNE SW,L.JOB!L.USRS!L.PPN!L.PROG ;WATCHING JOB?
|
||
JRST WJOB ;YES
|
||
TXNE SW,L.TTY ;WATCHING TTY
|
||
JRST WTTY ;YES
|
||
WJOB: MOVEM T1,C.JOB ;STORE AS JOB NUMBER.
|
||
PUSHJ P,GETTY ;GET ASSOC. TTY #
|
||
JRST GONJOB ;??JOB IS GONE
|
||
JRST MAIN1 ;GOT IT
|
||
WTTY: MOVEM T1,C.TTY ;STORE AS TTY NUMBER
|
||
PUSHJ P,GETJOB ;GET ASSOC. JOB
|
||
JRST GONJOB ;??JOB IS GONE
|
||
MAIN1: SETOM CTRKJ ;TRACKING A JOB
|
||
PUSHJ P,GETCOR ;GET CORE SIZE OF JOB
|
||
PUSHJ P,GETSTA ;GET STATUS
|
||
PUSHJ P,GETRUN ;GET RUN-TIME
|
||
PUSHJ P,GETNAM ;GET PROGRAM NAME
|
||
PUSHJ P,GETSTC ;GET RUN STATISTICS
|
||
PUSHJ P,GETPRV ;GET THEM
|
||
PUSHJ P,GETDSK ;GET DSK STATS
|
||
PUSHJ P,GETU ;GET IT
|
||
PUSHJ P,CHK2 ;MAKE SURE SAME JOB
|
||
MOVE N1,SAVPOP ;GET SAVED PPN OR PROGRAM
|
||
TXNN SW,L.PROG ;WATCHING PROGRAM?
|
||
JRST MAIN0A ;NO
|
||
CAME N1,C.PROG ;PROGRAM MATCH?
|
||
JRST MCONT ;NO, DISCARD IT
|
||
MAIN0A: TXNN SW,L.PPN ;WATCHING PPN?
|
||
JRST MAIN0B ;NO, GO ON
|
||
SETCA N1, ;GET COMPLEMENT OF PPN
|
||
TLCN N1,-1 ;WAS PROJ NUMBER WILD?
|
||
HLL N1,C.PPN ;YES, INSURE MATCH
|
||
TRCN N1,-1 ;WAS PROG NUMBER WILD?
|
||
HRR N1,C.PPN ;YES, INSURE MATCH
|
||
CAME N1,C.PPN ;A MATCH ON PPN?
|
||
JRST MCONT ;NO, DISCARD THIS JOB
|
||
MAIN0B: TXNN SW,OPT.C ;IF COMPARE IS ON
|
||
JRST MAIN2 ;DONT JUMP YET
|
||
PUSHJ P,COMPR ;DO COMPARE
|
||
JRST MCONT ;SAME, SKIP PRINT-OUT
|
||
MAIN2: TXZE SW,UHP ;IS USER HEADER PROLOG NEEDED?
|
||
PUSHJ P,USRPRO ;YES, PRINT IT
|
||
PUSHJ P,PRNT ;PRINT JOB DATA
|
||
MCONT: SETZM C.FST ;SHUT OFF FIRST SWITCH
|
||
MOVSI N1,CURDAT ;PREPARE TO MAKE OLD=NEW
|
||
HRRI N1,OLDAT(J)
|
||
BLT N1,OLDAT+SIZDAT-1(J) ;DONE
|
||
REJOIN: TXZE SW,OPT.F ;[*]IF JUST DID A FORCED,
|
||
TXZ SW,F.TTY ;[*]FIX UP TO NORMAL OUTPUT
|
||
TXNN SW,L.USRS!L.PROG!L.PPN ;[*]DOING USERS?
|
||
JRST NOTUSR ;[*]NO
|
||
AOS T2,SAVNUM ;INCREMENT JOB NUMBER
|
||
CAMG T2,MAXJOB ;
|
||
JRST MAIN1A ;DO NEXT JOB
|
||
MOVEI T2,1 ;START OVER
|
||
MOVEM T2,SAVNUM ;AFTER SLEEP/EXIT CHECK
|
||
SETZM CTRKJ ;CLEAR CURRENT-JOB-ACTIVE FLAG
|
||
NOTUSR: SKIPN LOOKS ;[*]ZERO LOOKS = INFINITE
|
||
JRST SLEEPY ;[*]SO JUST CONTINUE
|
||
SOSG LOOKS ;[*]WHEN ZERO EXIT
|
||
JRST FINISH ;[*] GO AWAY
|
||
SLEEPY: SKIPE AVAL ;[*]IF WE ARE SAVING...
|
||
CLOSE TY, ;[*]RELEASE THE FILE WHILE SLEEPING
|
||
MOVEI N1,1 ;[*]A NON ZERO QUANTITY
|
||
MOVEM N1,FSTFLG ;[*]TO ALLOW FILSAV TO DO ITS STUFF
|
||
MOVE N1,QTUM ;[*]GET SLEEP TIME
|
||
JUMPE N1,SLP2 ;[*]IF NO SLEEP
|
||
MULI N1,^D1000 ;MAKE MSEC
|
||
MSTIME T1, ;GET DAYTIME
|
||
MOVEM T1,SLPTIM ;STORE AS TIME WE WENT TO SLEEP
|
||
SUB T1,SAVUP ;T1 NOW HAS TIME SPENT
|
||
;IN LOOKING AND PRINTING
|
||
JUMPGE T1,.+2 ;IF NEGATIVE
|
||
ADDX T1,^D1000*^D60*^D60*^D24 ;WE WENT AROUND MIDNITE
|
||
SUB N2,T1 ;CORRECT SLEEP TIME
|
||
JUMPLE N2,SLP2 ;CHECK FOR NEG OR ZERO SLEEP TIME
|
||
MOVEM N2,SLPQT ;SAVE
|
||
RSLEEP: CAILE N2,^D63000 ;IF LESS < 63K MS
|
||
JRST UDAEM ;THEN DONT USE DAEMON
|
||
SLP1: TXO N2,<HB.RTL!HB.RTC> ;WAKE ON TTY ACTIVITY
|
||
HIBER N2,
|
||
JRST USLP ;HIBER FAILED, USE SLEEP
|
||
SLP2: INCHRS CHR ;GET CHARACTER,SKIP IF ONE
|
||
JRST MAIN ;AND DO AGAIN
|
||
JRST NEWSPC ;WANT NEW SPECS
|
||
|
||
UDAEM: MOVEI T1,N1 ;SET UP FOR CLOCK REQUEST
|
||
MOVX N1,.CLOCK ;TIME FUNCTION
|
||
DAEMON T1,
|
||
JRST USLP ;IF FAILURE
|
||
SETZ N2, ;SET FOR INFINITE SLEEP
|
||
JRST SLP1 ;GO HIBERNATE
|
||
USLP: MOVE N1,QTUM ;GET SECS OF SLEEP
|
||
CAILE N1,77 ;IF NOT IN 63 SEC BRACKET
|
||
MOVEI N1,77 ;SET FOR MAX
|
||
SLEEP N1,
|
||
JRST SLP2 ;AND CONTINUE
|
||
|
||
|
||
SUBTTL SYSTEM TRACKING **DATA GATHERING MODULE **
|
||
; DO THE SYSTEM DATA GATHERING IF WE WANT TO
|
||
; AND THE RETURN TO REJOIN TO CHECK TIMEING,EXITS ETC.
|
||
; NOTE THAT NO ITEM DEPENDENT ROUTINE IS CALLED IF TAB.P IS ZERO
|
||
; FOR THAT ITEM; THIS WAY, IF AN ITEM IS NOT AVAILABLE WHEN
|
||
; TRACK IS RUNNING ON A CERTAIN SYSTEM, THE INITIALIZATION ROUTINE
|
||
; CAN SIMPLY NOT ALLOCATE CORE FOR THE ITEM AND THE ITEM WILL NOT
|
||
; BE GATHERED. THE SAME IS TRUE OF SYSDIS.
|
||
|
||
|
||
|
||
IFN SYS, <
|
||
SYSGET: MOVX GT, %NSHJB ;GET HIGHEST JOB NUMBER
|
||
PUSHJ P,FETTAB ;CAUSE MANY WANT TO KNOW
|
||
MOVEM GT,HIJOB ;THIS LOCATION AVAILABLE
|
||
MOVX GT, %CNLNM ;LOOKUP NUMBER OF JOBS TOO
|
||
PUSHJ P,FETTAB ;FOR ASR,SWR ETC
|
||
MOVEM GT,NUMJOB ;STORE THIS TOO
|
||
MOVE J,HIJOB ;SET UP J
|
||
LGNCHK: MOVX GT,.GTSTS ;LOOK UP STATUS
|
||
HRLI GT,(J)
|
||
PUSHJ P,FETTAB ;OF THIS JOB
|
||
TXNN GT,JLOG ;LOGGED IN?
|
||
JRST NOTLGN ;NO
|
||
PUSH P,GT ;SAVE STATUS WORD FOR LATER
|
||
MOVEM J,C.JOB ;ROUTINES EXPECT IT IN C.JOB
|
||
PUSHJ P,GETCOR ;GET HIS CORE ALLOCATION
|
||
MOVE T1,C.LOW ;AND STASH IT IN JOBTB1
|
||
HRLM T1,@JOBTB1 ;LEFT HALF
|
||
SKIPGE T2,C.HIGH ;PICK UP HI CORE
|
||
SETZ T2, ;DONT BOTHER WITH SPY
|
||
HRRM T2,@JOBTB1 ;HIGH CORE ALLOCATION
|
||
PUSHJ P,GETSTA ;GET HIS STATUS TOO
|
||
MOVE T1,C.STAT ;SO CAN DO ASR,Q INFO ETC
|
||
HRL T1,HISEGN ;HI-SEG # TO LH OF JOBTB2 ENTRY
|
||
SKIPN C.NSWP ;IF HES SWAPPED OUT
|
||
TLO T1,400000 ;SIGN BIT OF JOBTB2 ENTRY GOES ON
|
||
POP P,GT ;JOB STATUS WORD
|
||
TXNE GT,RUN ;IN RUN STATE?
|
||
TRO T1,400000 ;YES, BIT 18 OF JOBTB2 GOES ON
|
||
MOVEM T1,@JOBTB2 ;STORE IT
|
||
SKIPA ;SKIP SETTING NOT LOGGED IN BIT
|
||
|
||
NOTLGN: SETOM @JOBTB1 ;INDICATE NOT LOGGED IN
|
||
SOJG J,LGNCHK ;BACK FOR NEXT JOB
|
||
PUSHJ P,ANALYZ ;CALL COMMON JOB ANALYSIS ROUTINE
|
||
PUSHJ P,CELPST ;GET ELAPSED TIME
|
||
MOVSI J,-LEN.G ;LENGTH OF GET TABLE
|
||
SYSG1: SKIPLE TAB.P(J) ;WAS THERE CORE ALLOCATED?
|
||
SKIPN TAB.G(J) ;AND IS THERE A ROUTINE TO XCT?
|
||
JRST SYSG2 ;ONE OR THE OTHER IS NOT TRUE
|
||
PUSHJ P,@TAB.G(J) ;EXE2UTE PROPER ROUTINE
|
||
SYSG2: AOBJN J,SYSG1 ;SEE IF MORE
|
||
MOVEM L,T.LOOK ;TOTAL LOOKS DONE (START W/0)
|
||
MOVE N1,CU.TIC ;FIX UP TIMERS FOR NEXT LOOK
|
||
MOVEM N1,LS.TIC ;LAST = CURRENT
|
||
MOVE N1,CU.MS ;
|
||
MOVEM N1,LS.MS ;ALL DONE
|
||
SOSLE RVALC ;DECREMENT COUNTER
|
||
AOJA L,REJOIN ;MORE LOOKS LEFT
|
||
PUSHJ P,SYSDIS ;ELSE DO A DISPLAY
|
||
MOVE T1,RVAL ;RESET REPORT COUNTER
|
||
MOVEM T1,RVALC ;TO WANTED VALUE
|
||
SETZB L,T.LOOK ;RESET INDEX TO DATA AREA
|
||
MOVE T1,SAVUP ;RESET START TIME
|
||
MOVEM T1,SAVST ;SAVE IT
|
||
IFN FTTRC, <
|
||
MOVE T1,SAVUPU ;FOR TRACE, ROTATE TIMES
|
||
MOVEM T1,SAVSTU ;
|
||
> ;END OF IFN FTTRC
|
||
TXZ SW,SYSD.I ;HAVE DONE AT LEAST ONE LOOK
|
||
JRST REJOIN ;THEN CONTINUE
|
||
|
||
|
||
; SUBROUTINE TO CALCULATE ELAPSED TIME BETWEEN NOW AND LAST SEEN
|
||
; VALUES OF MS AND TICS
|
||
|
||
CELPST: MOVX GT, %CNTIM ;MANY THINGS LIKE TICS
|
||
PUSHJ P,FETTAB ;SO USE TICS
|
||
MOVEM GT,CU.TIC ;STASHED
|
||
SUB GT,LS.TIC ;MAKE INCREMENTAL
|
||
JUMPGE GT,.+2 ;IN CASE WENT PAST MIDNITE
|
||
ADDX GT,^D60*^D60*^D60*^D24 ;ADJUST IT
|
||
MOVEM GT,EL.TIC ;ELAPSED TICS
|
||
MSTIME N1, ;CURRENT MS TIMER
|
||
MOVEM N1,CU.MS ;SET IT
|
||
SUB N1,LS.MS ;LAST SEEN MS
|
||
JUMPGE N1,.+2 ;TAKE CARE OF NITE OWLS
|
||
ADDX N1,^D1000*^D60*^D60*^D24
|
||
MOVEM N1,EL.MS ;STASH IT
|
||
POPJ P,
|
||
|
||
|
||
;;STILL UNDER "IFN SYS" CONDITIONAL
|
||
SUBTTL SYSTEM TRACKING **DATA DISPLAY MODULE **
|
||
|
||
SYSDIS: TRACEH (SGO) ;[*]PUT ON A HEADER
|
||
MOVEI CHR,14 ;GIVE A FORM-FEED
|
||
PUSHJ P,PUTCHR ;TO SEPARATE REPORTS
|
||
TYPES (< STATUS FROM >);OUTPUT HEADER
|
||
MOVE T1,SAVST ;GET STARTING TIME
|
||
PUSHJ P,PUTDAY ;OUTPUT DAYTIME STARTED
|
||
TYPES (< TO >)
|
||
MOVE T1,SAVUP ;AND OUTPUT
|
||
PUSHJ P,PUTDAY ;DAYTIME STOPPED
|
||
PUSHJ P,CRLF
|
||
TYPES (<REPORT #>) ;GIVE SEQUENCE NUMBER
|
||
AOS T1,NLOOK ;PRINT NUMBER OF THIS REPORT
|
||
TRACE ;SEND IT TO THE TRACE FILE
|
||
PUSHJ P,DECOUT ;AND TO LISTING
|
||
TRACEM SAVSTU ;FOR TRACE, GIVE UNIVERSAL REPORT
|
||
TRACEM SAVUPU ;START TIME & END TIME
|
||
TXNE SW,OPT.F ;WAS THIS FORCED?
|
||
SOS NLOOK ;FIX UP LOOK NUMBER
|
||
TYPES (< UPTIME: >) ;PRINT UPTIME LABEL
|
||
MOVX GT, %NSUPT ;LOOKUP SYSTEM UPTIME
|
||
PUSHJ P,FETTAB ;
|
||
MOVE T1,GT ;CONVERT TICS TO MS
|
||
IMULI T1,^D100 ;
|
||
IDIVI T1,^D6 ;BY MULTIPLYING BY 16.666
|
||
PUSHJ P,PUTDAY ;PRINT IT HH:MM:SS
|
||
TYPES (< CORMAX:>) ;ALSO TELL CORMAX
|
||
MOVX GT, %NSCMX ;BECAUSE IT TOO CHANGES
|
||
PUSHJ P,FETTAB ;
|
||
MOVE T1,GT ;OUTPUT AS K OR P
|
||
TRACE ;CORMAX,IN WORDS, TO TRACE FILE
|
||
PUSHJ P,MEMPNT ;
|
||
TYPES (< SCHED:>) ;TELL IF OPR THERE, ETC.
|
||
MOVX GT, %CNSTS ;
|
||
PUSHJ P,FETTAB ;SEE IF THERE
|
||
ANDI GT,777 ;RIGHT MOST BITS OF WORD
|
||
MOVE T1,GT ;TO ARG REGISTER
|
||
TRACE ;SCHED TO TRACE FILE
|
||
PUSHJ P,OCTOUT ;AND PRINT IT
|
||
|
||
PUSHJ P,SCDWRT ;GO MAKE SCHED BLOCK
|
||
TYPES (<
|
||
STRUCTURES MOUNTED: >)
|
||
MOVEI CHRCNT,^D100
|
||
SETZ T1, ;START LIST
|
||
SMLOOP: SYSSTR T1, ;GET STRUCTURE NAME
|
||
JRST SMDONE ;UUO FAILURE , FAKE DONE
|
||
JUMPE T1,SMDONE ;OR IF EXHAUSETED
|
||
CAILE CHRCNT,^D41 ;ROOM LEFT?
|
||
JRST [TYPES (<
|
||
>) ; CRLF, 3<TAB>
|
||
SETZ CHRCNT, ; CLEAR COUNTER
|
||
JRST SMNOC]
|
||
TYPEC (<,>) ;COMMA
|
||
SMNOC: PUSHJ P,SIXPNT ;PRINT NAME
|
||
JRST SMLOOP ;BACK FOR MORE
|
||
|
||
SMDONE: MOVX GT, %NSKTM ;EXAMINE KSYS
|
||
PUSHJ P,FETTAB ;TIMER
|
||
JUMPLE GT,NOKSYS ;IF ZERO, NOT PENDING
|
||
TYPES (<
|
||
KSYS: >) ;TELL IF SYSTEM GOING DOWN
|
||
MOVE N1,GT ;SO THEY KNOW WHATS DOING
|
||
IDIVI N1,^D60 ;
|
||
PUSH P,N2 ;SAVE MINUTES
|
||
JUMPE N1,NOHRS ;
|
||
MOVE T1,N1 ;PRINT KSYS HRS
|
||
PUSHJ P,DECOUT
|
||
TYPES (< HRS. >)
|
||
NOHRS: POP P,T1 ;AND MINUTES
|
||
PUSHJ P,DECOUT ;
|
||
TYPES (< MINS.>) ;AND IN WHAT UNITS
|
||
NOKSYS: MOVEI J,5 ;GIVE 5 CRLFS
|
||
PUSHJ P,CRLF ;
|
||
SOJG J,.-1 ;
|
||
MOVSI J,-LEN.D ;GET LENGTH OF DISPLAY TABLE
|
||
|
||
SYSDS1: SKIPG TAB.P(J) ;WAS THERE CORE ALLOCATED?
|
||
JRST SYSDS2 ;NO, THERE IS NOTHING TO DISPLAY
|
||
SKIPE N1,TAB.D(J) ;GET AN ITEM AND IF NON-ZERO
|
||
PUSHJ P,(N1) ;DO IT
|
||
SYSDS2: AOBJN J,SYSDS1 ;IF MORE TO DO
|
||
TRACEH (END) ;[*]AND A REP END HEADER
|
||
POPJ P, ;RETURN TO CALLER
|
||
|
||
;scheduler data output
|
||
SCDWRT: MOVE T1,[XWD SCDLEN,SCDBLK]
|
||
SCHED. T1,
|
||
JRST SCDDON
|
||
TRACEH(SCD)
|
||
MOVNI T2,SCDL2
|
||
SCDMOR: AOJGE T2,SCDDON
|
||
MOVE T1,SCDEND(T2)
|
||
PUSHJ P,BINWRT
|
||
JRST SCDMOR
|
||
SCDDON: POPJ P,
|
||
;
|
||
|
||
;;STILL UNDER "IFN SYS" CONDITIONAL
|
||
SUBTTL SYSTEM TRACKING **DATA INITIALIZATION MODULE **
|
||
; ROUTINE TO DO INITIALIZATION OF DATA AREA
|
||
|
||
SYSINI:
|
||
TRACEH (SI) ;[*]SYSTEM INIT HEADER
|
||
PUSHJ P,JOBBLK ;GET A BLOCK FOR JOBTB1
|
||
MOVEM T1,JOBTB1 ;THIS BLOCK IS SET UP BEFORE GET ROUTINES
|
||
;ARE CALLED. SEE IMPURE SECTION
|
||
;FOR DEFINITION OF JOBTB1,JOBTB2
|
||
PUSHJ P,JOBBLK ;GET SECOND BLOCK
|
||
MOVEM T1,JOBTB2 ;STASH PTR WORD
|
||
MOVX GT,%CNCPU ;[217] GET NUMBER OF CPUS
|
||
PUSHJ P,FETTAB ;[217]
|
||
MOVEM GT,NCPU ;[217]
|
||
MOVX GT,%CNVER ;LOOK UP THE MONITOR VERSION
|
||
PUSHJ P,FETTAB ;FROM THE MONITOR
|
||
TRACEM GT ;PUT IT OUT TO THE TRACE FILE
|
||
ANDI GT,-1 ;CLEAR THE LH
|
||
MOVEM GT,SYSVER ;AND STORE SIGNIFICANT PART
|
||
MOVE T1,RVAL ;SET COUNTER FOR REPORTS
|
||
MOVEM T1,RVALC ;NUMBER OF LOOKS/REPORT
|
||
SETZB L,T.LOOK ;SET OTHER COUNTERS
|
||
SETZM LS.TIC ;SET UP TIMERS
|
||
SETZM LS.MS ;CLEAR
|
||
MOVSI J,-5 ;LOOK UP SYSTEM NAME
|
||
SINAMG: MOVX GT,%CNFG0 ;A WORD OF NAME
|
||
HRLZ T2,J ;ADD OFFSET
|
||
ADD GT,T2 ;FIN
|
||
PUSHJ P,FETTAB ;LOOK IT UP
|
||
MOVEM GT,SYSNAM(J) ;AND STORE IT
|
||
AOBJN J,SINAMG ;GO BACK TO SYSINI NAME GET
|
||
MOVX GT,%CNDT0 ;GET DATE TOO
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,SYSDTE ;
|
||
MOVX GT,%CNDT1 ;TWO WORDS
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,SYSDTE+1
|
||
MOVX GT, %CNSIZ ;ALSO LOOK UP SIZE
|
||
PUSHJ P,FETTAB ;LOOK UP
|
||
MOVEM GT,SYSSIZ ;AND STORE IT
|
||
TYPES <
|
||
REPORT ON SYSTEM PERFORMANCE AND UTILIZATION
|
||
BY TRACK %>
|
||
MOVEI T1,TRKVER ;GET VERSION NUMBER
|
||
PUSHJ P,OCTOUT ;AND PRINT IT
|
||
IFN TRKMIN, <
|
||
MOVEI T1,TRKMIN ;MINOR VERSION
|
||
IDIVI T1,^D27 ;SEPARATE THE LETTERS
|
||
JUMPE T1,MIN01 ;IF ZERO
|
||
MOVEI T1,'A'-1(T1) ;FOR OUTPUT
|
||
PUSHJ P,SIXPNT ;
|
||
AOS T2 ;ADJUST FOR ROUNDING
|
||
MIN01: SKIPN T1,T2 ;GET REST
|
||
JRST MIN02 ;IF ZERO
|
||
MOVEI T1,'A'-1(T1) ;AND DO IT
|
||
PUSHJ P,SIXPNT ;FINISHED
|
||
MIN02:
|
||
>; END OF IFN TRKMIN
|
||
TYPEC (<(>) ;PRINT EDIT NR. TOO
|
||
MOVEI T1,TRKEDT ;THE EDIT NUMBER
|
||
PUSHJ P,OCTOUT ;OUT IT GOES
|
||
TYPEC (<)>) ;
|
||
IFN TRKWHO,<
|
||
TYPEC (-) ;PRINT MINOR VERSION
|
||
MOVEI T1,TRKWHO
|
||
PUSHJ P,OCTOUT ;DO IT
|
||
> ;END OF IFN TRKWHO
|
||
TYPES (< ON >) ;DAY IT IS
|
||
MOVX GT, %CNDAY ;GET DAY
|
||
PUSHJ P,FETTAB ;FROM MONITOR
|
||
MOVEM GT,T1 ;AND OUTPUT AS DECIMAL
|
||
PUSHJ P,DECOUT ;DONE
|
||
MOVX GT, %CNMON ;AND MONTH
|
||
PUSHJ P,FETTAB ;OUR OWN GETTAB
|
||
MOVE T1,MONTAB-1(GT) ;PICK OUR MONTH
|
||
PUSHJ P,SIXPNT ;AND PRINT IT
|
||
MOVX GT, %CNYER ;GET YEAR
|
||
PUSHJ P,FETTAB ;DONE
|
||
MOVE T1,GT ;AND IT GETS PRINTED TOO
|
||
SUBI T1,^D1900 ;MAKE IT 2 DIGIT
|
||
PUSHJ P,DECOUT ;FINISH
|
||
TYPEC (< >) ;ONE SPACE
|
||
MOVX GT,%CNSER ;[*]GET OUR APR SER NUM
|
||
PUSHJ P,FETTAB ;[*]FROM THE SYSTEM
|
||
TRACEM GT ;[*]AND PUT INTO TRACE FILE
|
||
MOVX GT, %CNDTM ;LOOK UP THE DAY OF WEEK
|
||
PUSHJ P,FETTAB ;VIA 15 BIT UNIVERSAL DATE
|
||
HLRZ N1,GT ;THEN DATE IN LEFT HALF
|
||
IDIVI N1,7 ;THERE SHOULD BE 7 DAYS/WEEK
|
||
MOVE T1,DAYTAB(N2) ;FROM DAY TABLE
|
||
PUSHJ P,SIXPNT ;PRINT IT
|
||
TYPES (<
|
||
|
||
CONFIGURATION DATA FOR SYSTEM:>)
|
||
TYPES (<
|
||
|
||
SYSTEM RUNNING >)
|
||
MOVEI STR,SYSNAM ;POINT TO SYSTEM NAME
|
||
PUSHJ P,PUTSTR ;AND PRINT IT
|
||
TYPES (< (>)
|
||
MOVE T1,SYSVER
|
||
PUSHJ P,OCTOUT
|
||
TYPEC (<)>)
|
||
TYPES (< BUILT ON >)
|
||
MOVEI STR,SYSDTE ;GIVE BUILD DATE
|
||
PUSHJ P,PUTSTR ;
|
||
TYPES (<
|
||
MAX. NUMBER OF JOBS: >)
|
||
MOVE T1,MAXJOB ;GIVE CONFIGURATION MAX. JOB NR.
|
||
TRACE ;THIS GOES TO TRACE FILE
|
||
PUSHJ P,DECOUT ;
|
||
TYPES (< MAX. NUMBER OF TTY LINES: >)
|
||
MOVE T1,MAXTTY ;AND TTY LINES
|
||
TRACE ;THIS TOO GOES TO TRACE FILE
|
||
PUSHJ P,DECOUT ; OR TEXT FILE
|
||
MOVX GT, %NSMMS ;LOOK UP MEMORY SIZE
|
||
PUSHJ P,FETTAB ;
|
||
PUSH P,GT ;SAVE IT
|
||
SUB GT,SYSSIZ ;SUBTRACT MONITOR LOW SEG SIZE
|
||
MOVE N1,GT ;HANG ON TO THAT FIGURE
|
||
MOVX GT,%CNHSL ;MONITOR MAY BE TWO SEGMENT
|
||
PUSHJ P,FETOPT ;SO LOOK UP HIGH SEG LENGTH
|
||
SETZ GT, ;FAKE 0 LENGTH IF NOT THERE
|
||
SUB N1,GT ;SUBTRACT HI SIZE FROM TOTAL
|
||
MOVE T1,N1 ;GET USER MEMORY AVAILABLE
|
||
TYPES (<
|
||
USER MEMORY: >)
|
||
TRACE ;TRACE USER MEMORY SIZE
|
||
PUSHJ P,MEMPNT ;PRINT IT
|
||
MOVEM T1,USIZ ;AND STORE USER MEMORY SIZE
|
||
TYPES (< FROM TOTAL OF >)
|
||
POP P,T1 ;PRINT IN K OR P
|
||
TRACE ;AND TOTAL MEMORY SIZE IN WORDS
|
||
PUSHJ P,MEMPNT ;STD ROUTINE
|
||
TYPES (<
|
||
DISK UNITS:
|
||
NAME STR TYPE CONTROL CHAN# STATUS MOUNTED?
|
||
>)
|
||
SETZB GT,T1 ;GET NUMBER OF DISK UNITS ON SYSTEM
|
||
CNTUNI: SYSPHY GT, ;BY LOOPING THRU SYSPHY UUO
|
||
SETZ GT, ;FAKE DONE IF FAILS
|
||
SKIPE J,GT ;IF 0,WE ARE DONE
|
||
AOJA T1,CNTUNI ;OTHERWISE, RETURN NOW FOR NEXT ONE
|
||
HRLZM T1,UNIPTR ;STORE COUNT OF POINTER
|
||
MOVNS UNIPTR ;NEGATE IT
|
||
PUSH P,T1 ;SAVE SIZE
|
||
PUSHJ P,ASSCOR ;GET CORE FOR BLOCK
|
||
HRRM T1,UNIPTR ;STORE IT AWAY TOO
|
||
POP P,T1 ;RESTORE SIZE
|
||
PUSHJ P,ASSCOR ;ASSIGN CORE
|
||
MOVEM T1,UNIDB ;STORE DB ADDRESS
|
||
OUTUNI: SYSPHY GT, ;
|
||
JRST DUNUNI ;UUO ERROR FAKES DONE
|
||
JUMPE GT,DUNUNI ;AS DOES 0 RETURN
|
||
MOVEM GT,ARGS ;SET UP FOR DSKCHR
|
||
MOVE GT,[XWD ARGSLN,ARGS] ;GET CHARACTERISTICS
|
||
DSKCHR GT, ;
|
||
JRST DUNUNI ;IF UUO FAILS
|
||
PUSHJ P,TAB ;TAB OVER
|
||
MOVE T1,ARGS+.DCNAM ;GET UNIT NAME
|
||
SKIPN ARGS+.DCSNM ;IF STR, OK
|
||
MOVEM T1,ARGS+.DCSNM ;OTHERWISE, USE PHYS FOR STR[BOC]
|
||
PUSHJ P,SIXPNT ;OUTPUT IT
|
||
PUSHJ P,TAB ;TAB OVER
|
||
MOVE N1,UNIPTR
|
||
ADDI N1,0(J)
|
||
MOVE T1,ARGS+.DCULN ;WE WANT LOG UNIT NAME
|
||
MOVEM T1,0(N1)
|
||
MOVE T1,ARGS+.DCSNM ;WE WANT STR NAME
|
||
PUSHJ P,SIXPNT ;AND PRINT IT
|
||
PUSHJ P,TAB ;TAB OVER
|
||
LDB T4,[POINTR(GT,DC.CNT)] ;GET TYPE OF UNIT
|
||
CAXE T4,.DCCFS ;IS IT FIXED HEAD?
|
||
CAXN T4,.DCCFH ;OF SOME KIND
|
||
SETO T1, ;YES,FLAG WITH -1
|
||
MOVE N1,UNIDB ;GET BASE ADDRESS OF DBS
|
||
ADDI N1,0(J) ;GET THIS SLOT
|
||
MOVEM T1,0(N1) ;STORE FOR LATER USE
|
||
PUSHJ P,UNITYP ;TYPE OUT UNIT TYPE
|
||
MOVEI T1,'ON'
|
||
TXNE GT,DC.OFL ;OFF LINE?
|
||
MOVEI T1,'OFF'
|
||
PUSHJ P,SIXPNT
|
||
TYPES (<LINE>)
|
||
PUSHJ P,TAB ;TAB OVER
|
||
LDB T2,[POINTR(GT,DC.STS)] ;GET UNIT MOUNT STATUS
|
||
MOVE T1,[EXP 'YES','FUTURE','NO','DOWN'](T2)
|
||
PUSHJ P,SIXPNT
|
||
PUSHJ P,CRLF
|
||
MOVE GT,ARGS+.DCNAM ;FETCH LAST NAME TO GET NEXT
|
||
AOJA J,OUTUNI ;UPDATE COUNTER,LOOP FOR NEXT
|
||
|
||
DUNUNI: TYPES (<
|
||
DATA GATHERED EVERY >)
|
||
MOVE T1,QTUM ;
|
||
TRACE ;TELL TRACE LOOK INTERVAL
|
||
PUSHJ P, DECOUT ;TIME IN SECONDS
|
||
TYPES (< SECONDS AND REPORTED EVERY >)
|
||
MOVE T1,RVAL ;IN DECIMAL.NUMBER
|
||
TRACE ;TELL TRACE INTERVALS PER REPORT
|
||
PUSHJ P,DECOUT ;SO WE CAN SEE IT
|
||
TYPES (< LOOKS
|
||
>)
|
||
MOVX GT,%CNDTM ;[*]GET NBS TIME
|
||
PUSHJ P,FETTAB ;[*]FROM THE MON
|
||
TRACEM GT ;[*]AND STORE IN THE TRACE FILE
|
||
MOVSI J,-LEN.I ;LENGTH OF INITIALIZATION TABLE
|
||
|
||
SYSIN1: SKIPGE TAB.P(J) ;-1 IN TAB.P MEANS EXCLUDED
|
||
JRST SYSIN2 ;SO DONT SET IT UP
|
||
SKIPE N1,TAB.I(J) ;FETCH ITEM AND IF NOT ZERO
|
||
PUSHJ P,(N1) ;GO THERE TO DO WHAT THEY WANT
|
||
SYSIN2: AOBJN J,SYSIN1 ;IF MORE TO DO
|
||
SETZM NLOOK ;CLEAR REPORT COUNTER
|
||
TXO SW,SYSD.I ;MARK AS INITIALIZED
|
||
POPJ P, ;AND ON WITH THE SHOW
|
||
;END OF CONDITIONAL STARTS WITH "SYSGET" >
|
||
|
||
|
||
SUBTTL HANDLE DISSAPEARANCE OF A TRACKED JOB
|
||
|
||
GONJOB: SKIPGE O.FST(J) ;ALREADY BEEN GONE ONE PASS?
|
||
JRST GONJ1 ;YES,SKIP ZEROING
|
||
SETZM OLDAT(J) ;BLT ZEROES
|
||
MOVEI T1,OLDAT+1(J) ;
|
||
HRLI T1,-1(T1)
|
||
BLT T1,OLDAT+SIZDAT-1(J) ;DONE
|
||
SETOM O.FST(J) ;FLAG AS GONE
|
||
GONJ1: TXNN SW,L.USRS!L.PPN!L.PROG ;DOING MULTI-USERS?
|
||
JRST GONJ2 ;NO
|
||
SETZM C.FST ;CLEAR C.FST SO NEXXT JOB
|
||
;DOESNT FIND IT SET
|
||
JRST REJOIN ;YES,JUST GET NEXT JOB
|
||
|
||
GONJ2: TXNN SW,OPT.K ; WANTS FATAL (NO /NOKILL DONE)
|
||
JRST GNJFAT ;THEN GIVE IT TO HIM
|
||
$ERROR(EF.WRN,CFC,<CAN'T FIND JOB FITTING SPECIFICATIONS, CONTINUING...>)
|
||
SETOM C.FST ;SET FIRST TIME SWITCH
|
||
JRST MCONT ;AND GO ON
|
||
|
||
GNJFAT: MOVE T1,SAVNUM ;LOAD T1 WITH SPECIFICATION
|
||
TXNE SW,L.TTY ;WATCHING TTY?
|
||
JRST GOTTY ;YES
|
||
$ERROR(EF.FAT!EF.DEC!EF.RST,NJN,NO JOB NUMBER )
|
||
GOTTY: $ERROR(EF.FAT!EF.OCT!EF.RST,NJT,NO JOB ON TTY #)
|
||
|
||
CHK2: SKIPE C.FST ;ALREADY KNOW HE IS NEW?
|
||
POPJ P, ;YES,RETURN
|
||
MOVE T1,O.JOB(J) ;GET OLD JOB NUMBER
|
||
CAME T1,C.JOB ;SAME JOB?
|
||
JRST SETFST ;NO
|
||
MOVE T1,O.RT(J) ;RUNTIME DECREASED?
|
||
CAMLE T1,C.RT ;
|
||
SETFST: SETOM C.FST ;SET FLAG
|
||
POPJ P, ;RETURN
|
||
|
||
SUBTTL ROUTINE TO RELOCATE J TO POINT TO CURRENT OLD DATA BLOCK
|
||
|
||
SETJ: MOVE J,OLDPTR ;BASE ADDR
|
||
TXNN SW,L.USRS!L.PPN!L.PROG ;DOING MULTIPLE?
|
||
POPJ P, ;NO,ALL DONE
|
||
PUSH P,T1 ;SAVE T1
|
||
IMULI T1,SIZDAT ;
|
||
ADDI J,-SIZDAT(T1) ;UPDATE,BACKING OFF 1 BLOCK
|
||
SKIPGE O.FST(J) ;SEE IF C.FST NEEDS TO BE SET
|
||
SETOM C.FST ;
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
SUBTTL HANDLE RUNNING COMMANDS
|
||
|
||
NEWSPC: PUSHJ P,GETCH2 ;CHECK/PROCESS THE CHARACTER
|
||
CAILE CHR," " ;SKIP
|
||
TXNE SW,BRK ;SKIP BREAK CHARACTERS
|
||
JRST NEWBCK ;
|
||
PUSH P,CHR ;SAVE CHARACTER
|
||
TXO SW,F.TTY ;RUNNING COMMANDS GO TO TTY
|
||
PUSHJ P,CRLF ;[5]GIVE A CR-LF
|
||
PUSHJ P,CRLF ;[5]AND A BLANK LINE
|
||
POP P,CHR ;UNSAVE CHARACTER
|
||
MOVSI T2,-RNCLEN ;LENGTH OF RUN COM TABLE
|
||
|
||
RCLOOP: LDB T1,[POINT 7,RUNTAB(T2),6] ;GET CHARACTER
|
||
CAIN CHR,(T1) ;A MATCH?
|
||
JRST @RUNTAB(T2) ;YES
|
||
AOBJN T2,RCLOOP
|
||
$ERROR(EF.FAT,BRC,BAD RUNNING COMMAND-- TYPE "H" FOR HELP)
|
||
CLRBFI ;GET RID OF TYPE AHEAD
|
||
NEWBCK: TXZ SW,F.TTY ;BACK TO NORMAL OUTPUT
|
||
SKIPN QTUM ;IF NO SLEEP TIME
|
||
JRST MAIN ;CLEAR AND GO BACK TO MAIN LOOP
|
||
MSTIME N2, ;GET CURRENT DAYTIME
|
||
SUB N2,SLPTIM ;SUBTRACT TIME WE WENT TO SLEEP
|
||
JUMPLE N2,MAIN ;IF NEG. WE WENT PAST MIDNITE
|
||
CAML N2,SLPQT ;IF ELAPSED > WANTED
|
||
JRST MAIN ;GO PROCESS
|
||
SUB N2,SLPQT ;SUBTRACT ELAPSED-WANTED
|
||
MOVMS N2 ;CORRECT SIGN
|
||
MOVEI T1,1 ;[3]CLEAR WAKE CONDITION
|
||
HIBER T1, ;[3]
|
||
JFCL ;[3]
|
||
JRST RSLEEP ;GO BACK TO SLEEP
|
||
NEW8: PUSHJ P,CRLF ;RESTART
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,CRLF ;2 CR-LF PAIRS AS OUTPUT DEL.
|
||
MOVEI T1,1 ;[3]CLEAR WAKE CONDITION
|
||
HIBER T1, ;[3]
|
||
JFCL ;[3]
|
||
JRST RESTRT ;AND GO RESTART
|
||
NEW4: TXO SW,OPT.F ;SAY ITS FORCED
|
||
TXNN SW,SYSD ;DOING SYSTEM DATA?
|
||
JRST MAIN ;NO,GO DO A FORCED LOOK
|
||
IFN SYS, <
|
||
MOVE T1,T.LOOK ;SEE HOW MANY LOOKS TAKEN
|
||
CAIGE T1,2 ;0-2 MAKES FOR AT LEAST ON VALUE
|
||
JRST NOTYET ;ELSE TELL TO COME BACK LATER
|
||
PUSH P,SAVUP ;SAVE DAYTIME
|
||
MSTIME T1, ;AND MAKE A CURRENT ONE
|
||
MOVEM T1,SAVUP ;FOR THE FORCED LOOK
|
||
PUSHJ P,SYSDIS ;DO THE DISPLAY
|
||
POP P,SAVUP ;RESTORE TIME
|
||
JRST NEWBCK ;AND GO BACK TO SLEEP
|
||
|
||
NOTYET: $ERROR(EF.WRN,NED,NOT ENOUGH DATA FOR DISPLAY)
|
||
JRST NEWBCK ;AND RETURN >
|
||
|
||
H2: HELPME ;ASK FOR HELP
|
||
JRST NEWBCK ;CLEAN UP AND RETURN
|
||
|
||
NEW5: SKIPE CTRKJ ;TRACKING A JOB?
|
||
JRST NEW5A ;YES, PROCEED
|
||
|
||
NEW5B: $ERROR(EF.WRN,NTJ,NOT TRACKING A SINGLE JOB )
|
||
JRST NEWBCK ;[5]CONTINUE
|
||
|
||
NEW5A: PUSHJ P,GETU ;GET STUFF HE WANTS
|
||
PUSHJ P,PUTU ;[5]PUT OUT STUFF HE WANTS
|
||
PUSHJ P,CRLF ;AND A CR-LF PAIR
|
||
JRST NEWBCK ;[5]AND CONTINUE
|
||
|
||
|
||
NEW6: SKIPL CTRKJ ;JOB ACTIVE?
|
||
JRST NEW5B ;[11]NO, USER ERROR
|
||
PUSHJ P,GETPRV ;LOOKUP PRIVELEGES
|
||
PUSHJ P,PUTPRV ;PRINT STUFF
|
||
PUSHJ P,CRLF ;GIVE A CLEAR LINE
|
||
JRST NEWBCK ;AND GO BACK
|
||
|
||
NEW7: SKIPL CTRKJ ;JOB ACTIVE?
|
||
JRST NEW5B ;NO, ITS AN ERROR
|
||
MSTIME T1, ;NEED UPDATED ELAPSED TIME
|
||
MOVEM T1,C.DAY ;STASH IT
|
||
PUSHJ P,GETRUN ;ALSO NEW RUNTIME
|
||
PUSHJ P,GETSTC ;GET STATISTICS
|
||
PUSHJ P,PUTSTC ;AND PUT THEM OUT
|
||
PUSHJ P,CRLF ;AND PUT A CR-LF PAIR
|
||
PUSHJ P,CRLF ;AND A BLANK LINE
|
||
JRST NEWBCK ;AND CONTINUE
|
||
|
||
NEW11: TYPES (<PEEK INTERVAL IS: >)
|
||
MOVE T1,QTUM
|
||
PUSHJ P,DECOUT
|
||
TYPES (< SECONDS.
|
||
>)
|
||
TXNN SW,SYSD ;DOING SYSTEM?
|
||
JRST NEW11A ;NO
|
||
TYPES (<NUMBER OF INTERVALS PER REPORT IS: >)
|
||
MOVE T1,RVAL
|
||
PUSHJ P,DECOUT
|
||
TYPES (<
|
||
REPORTS WRITTEN: >)
|
||
MOVE T1,NLOOK
|
||
PUSHJ P,DECOUT
|
||
TYPES (<
|
||
INTERVALS TILL NEXT REPORT: >)
|
||
MOVE T1,RVALC
|
||
PUSHJ P,DECOUT
|
||
PUSHJ P,CRLF
|
||
NEW11A: SKIPN T1,LOOKS ;SEE IF EXIT COUNTER SET
|
||
JRST [ TYPES (<NO EXIT COUNTER SET>)
|
||
JRST NEW11B]
|
||
TYPES (<INTERVALS UNTIL EXIT: >)
|
||
PUSHJ P,DECOUT
|
||
NEW11B: PUSHJ P,CRLF
|
||
JRST NEWBCK
|
||
|
||
|
||
; TABLE FOR RUNNING COMMANDS
|
||
|
||
DEFINE RCCREATE <
|
||
IFE BIGLST,<XLIST>
|
||
|
||
X (H,H2) ;;H FOR HELP
|
||
X (F,NEW4) ;;F FOR FORCED LOOK
|
||
X (P,NEW6) ;;P FOR PRINT PRIVELIGE BITS
|
||
X (U,NEW5) ;;U FOR PRINT USER NAME
|
||
X (S,NEW7) ;;S FOR USER STATISTICS LINE
|
||
X (X,FINISH) ;;X FOR EXIT
|
||
X (N,NEW8) ;;N FOR NEW COMMAND
|
||
X (W,NEW11) ;;W FOR WHAT REPORT
|
||
|
||
LIST
|
||
> ;END OF RCCREATE DEFINITION
|
||
|
||
DEFINE X(AA,BB)<
|
||
XWD "AA"_^D11,BB>
|
||
>
|
||
|
||
|
||
RUNTAB: RCCREATE
|
||
RNCLEN==.-RUNTAB
|
||
SUBTTL ROUTINE TO GET SWITCH AND DATA
|
||
|
||
|
||
GETSW: TXZ SW,T.FLG ;CLEAR "VALID SW SEEN" FLAG
|
||
PUSHJ P,TOKEN ;GET SWITCH
|
||
JUMPE T1,[$ERROR(EF.FAT!EF.RST,NSS,NO SWITCH SPECIFIED)]
|
||
MOVEM T1,LASSW ;STORE SWITCH AWAY
|
||
MOVE T2,[-SWSLEN,,SWS] ;POINT TO SWITCH TABLE
|
||
TRZ T1,77 ;INSURE NO CHARACTER IN LAST PLACE
|
||
TRO T1,'*' ;CHECK FOR EXACT MATCH
|
||
ROT T1,-6 ;BY CHECKING FOR "*XXXXX"
|
||
PUSHJ P,TABLUK ;DO THE LOOKUP
|
||
SKIPA T1,LASSW ;NOT FOUND,CHECK OTHERS
|
||
JRST GETSW1 ;FOUND UNDER EXACT MATCH CODE
|
||
MOVE T2,[-SWSLEN,,SWS] ;INPUT TO TABLE LOOKUP
|
||
PUSHJ P,TABLUK ;LOOK IT UP
|
||
JRST [ JUMPL T1,[ MOVEI T1,LASTOK
|
||
$ERROR(EF.FAT!EF.RST!EF.STR,ABS,AMBIGUOUS SWITCH /)]
|
||
JUMPGE T1,[ MOVEI T1,LASTOK
|
||
$ERROR(EF.FAT!EF.RST!EF.STR,UKS,UNKNOWN SWITCH /)]]
|
||
GETSW1: MOVE T4,SWS(T1) ;REMEMBER SWITCH NAME
|
||
MOVEM T4,LASSW ;
|
||
XCT SWSTAB(T1) ;EXECUTE PROPER INSTRUCTION
|
||
POPJ P, ;THEN RETURN
|
||
|
||
;DEFINE SWITCHES AND THEIR INSTRUCTIONS
|
||
|
||
DEFINE SWCREAT <
|
||
IFE BIGLST,<XLIST>
|
||
X (<COMPAR>,< JRST CSW>) ;;ONLY IF CHANGE
|
||
X (<DAILY>,<SETOM DAILYF>) ;;DAILY FILE SAVING
|
||
X (<DISK>,<JRST DISKSW>) ;;/DISK
|
||
X (<EXCLUD>,<JRST EXCLSW>) ;;EXCLUDE
|
||
X (<*EXIT>,< JRST XSW>) ;;EXIT
|
||
X (<FORMAT>,<JRST FORMSW>) ;;FORMAT
|
||
X (<GROUP>,< JRST RSW>) ;;R
|
||
X (<*HELP>,< JRST HELPER>) ;;HELP
|
||
X (<HPQ>,<JRST HPQSW>) ;;HPQ
|
||
X (<INCLUD>,<JRST INCLSW>) ;;INCLUDE
|
||
X (<INCREM>,< TXO SW,OPT.I>) ;;DO INCREMENTAL DATA
|
||
X (<INTERV>,<JRST QSW>) ;;Q SWITCH
|
||
X (<*LIST>,<JRST LISSW>) ;;
|
||
X (<LOCK>,<TXO SW,R.LOCK>) ;;LOCK
|
||
X (<MESSAG>,<JRST ESW>) ;;
|
||
X (<NOKILL>,< TXO SW,OPT.K>) ;;DONT KILL IF JOB GOES AWAY
|
||
X (<PAUSE>,< TXO SW,MRET>) ;;DO MONRET AFTER INIT
|
||
x (<METER0>,<setom mbord0>) ;;METER board on cpu0
|
||
x (<METER1>,<setom mbord1>) ;;METER board on cpu1
|
||
x (<METER2>,<setom mbord2>) ;;METER board on cpu2
|
||
x (<METER3>,<setom mbord3>) ;;METER board on cpu3
|
||
x (<METER4>,<setom mbord4>) ;;METER board on cpu4
|
||
x (<METER5>,<setom mbord5>) ;;METER board on cpu5
|
||
x (<METER>,<jrst mtrsw>) ;;METER board on all cpus
|
||
X (<NOMETE>,<JRST NMTRSW>) ;;NO METER BOARD AT ALL
|
||
X (<PRIVEL>,<TXO SW,OPT.P>) ;;PRIVELEGE BITS
|
||
X (<SAVE>,< JRST ASW>) ;;SAVE OUTPUT FILE
|
||
X (<STATIS>,< JRST SSW>) ;;STATISTICS
|
||
X (<SUMMAR>,<TXO SW,R.SUMM>) ;;SUMMARY
|
||
X (<USER>,<TXO SW,OPT.U>) ;;USER NAME AND PPN
|
||
X (<X>,< JRST XSW>) ;; OLD FORM OF /EXIT
|
||
|
||
LIST
|
||
> ;END OF SWCREAT MACRO
|
||
|
||
|
||
DEFINE X(AA,BB)<
|
||
SIXBIT/AA/>
|
||
|
||
SWS: SWCREAT
|
||
SWSLEN==.-SWS
|
||
|
||
DEFINE X(AA,BB)<
|
||
BB>
|
||
|
||
SWSTAB: SWCREAT
|
||
|
||
|
||
HELPER: TXO SW,F.TTY ;FORCE ANY PRINTOUT TO TTY
|
||
CAIE CHR,":" ;FOLLOWED BY VALUE?
|
||
JRST HELP.5 ;NO, USER HELPER
|
||
PUSHJ P,TOKEN ;GET SIXBIT TOKEN
|
||
MOVE T2,[-2,,[SIXBIT /SWITCH/
|
||
SIXBIT /KEYWOR/]] ;SWITCHES OR KEYWORDS
|
||
PUSHJ P,TABLUK ;
|
||
JRST SAYUSV ;UNKNOWN SWITCH VALUE
|
||
JUMPN T1,HELP.K ;WANT KEYWORDS?
|
||
HELP.S: MOVE T2,[-SWSLEN,,SWS] ;NO, WANT SWITCHES
|
||
TYPES (<SWITCHES ARE:
|
||
>)
|
||
PUSHJ P,HELP.0 ;CALL COMMON ROUTINE
|
||
JRST HELP.6 ;AND EXIT
|
||
|
||
HELP.K: TYPES (</COMPARE KEYWORD VALUES ARE: "ALL"
|
||
>)
|
||
MOVE T2,[-JTNLEN,,JTNAM] ;POINTER TO LIT
|
||
PUSHJ P,HELP.0 ;CALL COMMON ROUTINE
|
||
TYPES (</INCLUDE/EXCLUDE KEYWORD VALUES ARE: "ALL"
|
||
>)
|
||
MOVE T2,[-LEN.C,,TAB.C] ;POINTER TO LIST
|
||
PUSHJ P,HELP.0 ;TYPE IT OUT
|
||
JRST HELP.6 ;END IT
|
||
HELP.0: MOVEI T4,7 ;ITEMS PER LINE
|
||
HELP.1: MOVE T1,0(T2) ;GET A NAME
|
||
PUSHJ P,SIXPNT ;PRINT IT
|
||
SOJLE T4,[PUSHJ P,CRLF
|
||
MOVEI T4,7
|
||
JRST HELP.2 ] ;OUTPUT CRLF AND GO
|
||
TYPES(< >) ;ELSE PRINT TAB
|
||
HELP.2: AOBJN T2,HELP.1 ;IF MORE TO DO
|
||
PJRST CRLF ;WHEN ALL DONE, ENDE W/CRLF
|
||
JRST HELP.6
|
||
HELP.5: HELPME
|
||
HELP.6: TXO SW,T.FLG ;IN CASE WE ARE ASKED
|
||
TXZ SW,F.TTY ;CLEAR FORCED TTY OUTPUT
|
||
POPJ P,
|
||
XSW: PUSHJ P,GETVAL ;GET VALUE OF SW
|
||
JUMPG T1,GOTVAL ;HAVE A VALUE FOR IT?
|
||
TXNN SW,SYSD!L.USRS!L.TTY!L.JOB!L.PPN!L.PROG ;SEEN A COMMAND?
|
||
EXIT ;NO, SO JUST LEAVE
|
||
MOVEI T1,1 ;FAKE AN X:1
|
||
GOTVAL: MOVEM T1,LOOKS ;SAVE NUMBER OF LOOKS
|
||
POPJ P, ;GO BACK
|
||
QSW: PUSHJ P,GETVAL
|
||
JUMPLE T1,SAYSVS ;IF NEG OR ZERO
|
||
MOVEM T1,QTUM ;STORE
|
||
POPJ P, ;GO BACK
|
||
ASW: PUSHJ P,GETVAL ;SEE IF VALUE THERE
|
||
SKIPG T1 ;NO VALUE SPECIFIED?
|
||
SETO T1, ;YES, MAKE IT SAVE ALWAYS (-1)
|
||
MOVEM T1,AVAL ;AND STORE IT
|
||
POPJ P, ;AND RETURN
|
||
|
||
SSW: MOVX GT, %FTDEB ;DEBUG WORD OF FEATURE TABLE
|
||
PUSHJ P,FETTAB ;LOOK IT UP
|
||
TXNN GT,RGHBT.(F%RSP) ;KEEPING RESPONSE TIME?
|
||
TXO SW,NO.RSP ;NO,REMEMBER THAT
|
||
TXO SW,OPT.S ;TURN ON STATISTICS WATCHING
|
||
POPJ P,
|
||
|
||
HPQSW: MOVX GT,.GTPRV ;GET PRIV WORD
|
||
HRL GT,MYJOB ;FOR THIS JOB
|
||
PUSHJ P,FETTAB ;
|
||
LDB GT,[POINTR(GT,JP.HPQ)] ;GET MAX HPQ
|
||
MOVE T1,GT ;
|
||
CAIN CHR,":" ;VALUE SUPPLIED?
|
||
PUSHJ P,OCTIN ;YES, GET IT
|
||
JUMPE GT,[$ERROR(EF.WRN,NHP,NO HPQ PRIVELEGES)
|
||
POPJ P,]
|
||
CAMLE T1,GT ;UNDER MAX?
|
||
JRST [MOVE T1,GT
|
||
$ERROR(EF.WRN!EF.OCT,HQV,HIGHEST HPQ YOU ARE PRIVELEGED FOR IS)
|
||
JRST .+1]
|
||
MOVEM T1,HPQREQ
|
||
POPJ P,
|
||
|
||
RSW: PUSHJ P,GETVAL ;GET VALUE OF RVAL
|
||
CAIGE T1,2 ;MUST BE AT LEAST TWO
|
||
JRST SAYSVS ;TELL ITS TOO SMALL
|
||
MOVEM T1,RVAL ;STORE IT
|
||
POPJ P, ;IT WAS, RETURN
|
||
|
||
ESW: TXZ SW,NO.LIN!NO.PRF ;WIPE OUT OLD VALUE
|
||
CAIE CHR,":" ;VALUE GIVEN?
|
||
SKIPA T1,[SIXBIT/C/] ;NO, FAKE CONTINUATION
|
||
PUSHJ P,TOKEN ;
|
||
MOVE T2,[-6,,[ SIXBIT/NOPREF/
|
||
SIXBIT/NOFIRS/
|
||
SIXBIT/FIRST /
|
||
SIXBIT/PREFIX/
|
||
SIXBIT/CONTIN/
|
||
SIXBIT/NOCONT/]]
|
||
PUSHJ P,TABLUK ;LOOK IT UPT
|
||
JRST [JUMPL T1,SAYASV
|
||
JRST SAYUSV]
|
||
XCT [ TXO SW,NO.PRF ;EXECUTE PROPER INSTRUCTION
|
||
TXO SW,NO.LIN
|
||
JFCL
|
||
JFCL
|
||
JFCL
|
||
JFCL] (T1)
|
||
TXO SW,T.FLG
|
||
POPJ P,
|
||
|
||
|
||
LISSW: MOVSI T1,'LPT' ;
|
||
MOVEM T1,FILDEV ;CHANGE DEVICE TO LPT
|
||
POPJ P, ;AND RETURN
|
||
|
||
DISKSW: SETZM SDISK ;START WITH SYSTEM
|
||
CAIE CHR,":" ;ARGUMENT SUPPLIED?
|
||
SKIPA T1,[SIXBIT/SYS/] ;NO,SO PRETEND ARG IS "SYSTEM"
|
||
PUSHJ P,TOKEN ;ELSE GET USER ARGUMENT
|
||
LSH T1,-^D30 ;SHIFT OUT DRECK
|
||
CAIN T1,'A' ;IS IT "ALL"?
|
||
SOSA SDISK ;YES, FLAG SDISK WITH -1,MEANS ALL
|
||
CAIN T1,'S' ;MAKE SURE ITS SYS
|
||
POPJ P, ;IT IS,RETURN
|
||
JRST SAYUSV ;UNKNOWN
|
||
|
||
FORMSW: TXZ SW,MD.TRC ;SET TO FORMAT:TEXT
|
||
CAIE CHR,":" ;ARG PROVIDED?
|
||
SKIPA T1,[SIXBIT/TEXT/] ;NO,DEFAULT TO TEXT
|
||
PUSHJ P,TOKEN ;GET TOKEN
|
||
LSH T1,-^D24 ;MAKE SMALL,UNIQUE
|
||
CAIN T1,'TE' ;TEXT?
|
||
JRST [MOVX T1,.IOASC ;DEFAULT TEXT MODE
|
||
MOVEM T1,FILMOD
|
||
POPJ P,]
|
||
CAIE T1,'TR' ;TRACE?
|
||
JRST SAYUSV ;NO,NOT KNOWN
|
||
IFE FTTRC,<
|
||
$ERROR(EF.FAT!EF.RST,TNI,TRACING NOT INCLUDED IN THIS VERSION)
|
||
>; END OF IFE FTTRC
|
||
TXNN SW,SYSD ;DOING SYSTEM?
|
||
JRST [$ERROR(EF.FAT!EF.RST,STI,SYSTEM DATA TRACING IMPLEMENTED ONLY)]
|
||
TXO SW,MD.TRC ;TRACE MODE MARK
|
||
MOVX T1,.IOIBN ;TRACE IO MODE
|
||
MOVEM T1,FILMOD
|
||
MOVX T1,DEXTT ;GET DEFAULT EXT FOR TRACE FILES
|
||
MOVE T2,FILEXT ;GET GIVEN EXT
|
||
CAXN T2,DEXT ;SET TO TEXT DEFAULT?
|
||
MOVEM T1,FILEXT ;YES,CHANGE TO TRACE DEFAULT
|
||
POPJ P, ;RETURN
|
||
|
||
CSW: TXO SW,OPT.C ;MARK COMPARISON WANTED
|
||
CAIE CHR,":" ;VALUE SPECIFIED?
|
||
JRST [MOVX T1,%CHKCM ;NO,SO LOAD DEFAULT
|
||
MOVEM T1,DEFCMP ;STORE IT
|
||
POPJ P,] ;AND RETURN
|
||
PUSHJ P,GETCHR ;GET NEXT CHARACTER
|
||
CAIE CHR,"(" ;MIGHT BE OPEN PARENS
|
||
TXO SW,REGET ;IF SO,EAT IT
|
||
CSW1: PUSHJ P,TOKEN ;GET TOKEN
|
||
CAMN T1,[SIXBIT /ALL/] ;WANT ALL?
|
||
JRST [ MOVX T2,^-<1B1> ;TURN ON ALL BUT DAYTIME
|
||
JRST CSW2]
|
||
MOVE T2,[-JTNLEN,,JTNAM] ;LOOK IT UP
|
||
PUSHJ P,TABLUK ;
|
||
JRST [ JUMPE T1,SAYUSV
|
||
JRST SAYASV]
|
||
MOVX T2,<1B0> ;GET MARKER
|
||
JUMPE T1,CSW2 ;SAVE TIME IF POS 0
|
||
MOVNS T1 ;MAKE IT NEGATIVE
|
||
LSH T2,0(T1) ;AND POSITION BIT
|
||
CSW2: IORM T2,DEFCMP ;MARK IT ON
|
||
CAIN CHR,"," ;DELIMITED BY COMMA?
|
||
JRST CSW1 ;YES,SO GO AGAIN
|
||
CSW3: CAIN CHR,")" ;MIGHT BE CLOSE PARENS
|
||
PUSHJ P,GETCHR ;IF IT IS,EAT IT
|
||
POPJ P, ; RETURN
|
||
; MAKE UP A LIST OF THE FOUR LETTER ABBREVIATIONS, IN SIXBIT
|
||
; LEFT JUSTIFIED. THERE IS ONE FOR EACH JOB TRACKING FIELD
|
||
;
|
||
DEFINE X(A,Y,C)< SIXBIT \A\>
|
||
|
||
JTNAM: DATUMS
|
||
JTNLEN==.-JTNAM
|
||
|
||
|
||
INCLSW: SETZM EXCFLG ;NOT EXCLUDE
|
||
SKIPA
|
||
EXCLSW: SETOM EXCFLG ;EXCLUDE,MARK IT
|
||
CAIE CHR,":" ;FOLLOWED BY ARGS?
|
||
POPJ P, ;NO,RETURN
|
||
PUSHJ P,GETCHR ;GET A CHARACTER
|
||
CAIE CHR,"(" ;IF OPEN PARENS
|
||
TXO SW,REGET ;EAT IT
|
||
EXCL1: PUSHJ P,TOKEN ;GET ARGUMENT
|
||
CAMN T1,[SIXBIT /ALL/] ;IS IT ALL?
|
||
JRST EXCALL ;YES,GO HANDLE IT
|
||
MOVE T2,[-LEN.C,,TAB.C] ;PREPARE TO LOOK IT UP
|
||
PUSHJ P,TABLUK ;DO SO
|
||
JRST [JUMPE T1,SAYUSV
|
||
JRST SAYASV] ;IF NOT FOUND,AMBIGUOUS
|
||
MOVE T2,EXCFLG ;PICK UP FLAG
|
||
MOVEM T2,TAB.P(T1) ;AND MARK ITEM AS SUCH
|
||
EXCL2: CAIN CHR,"," ;ANOTHER ARG FOLLOWS?
|
||
JRST EXCL1 ;YES
|
||
JRST CSW3 ;NO
|
||
|
||
EXCALL: ;HANDLE ALL
|
||
MOVE T1,EXCFLG ;GET FLAG
|
||
MOVEM T1,TAB.P ;STORE IN FIRST WORD
|
||
MOVE T1,[TAB.P,,TAB.P+1] ;BLT POINTER
|
||
BLT T1,TAB.P+LEN.P-1 ;STORE ACROSS WHOLE ARRAY
|
||
JRST EXCL2 ;REJOIN COMMON CODE
|
||
|
||
;here on /meter to flag all cpus meter boards as possiblities
|
||
mtrsw: setom mbord0
|
||
setom mbord1
|
||
setom mbord2
|
||
setom mbord3
|
||
setom mbord4
|
||
setom mbord5
|
||
popj p,
|
||
;here on /nometer to flag all cpus meter boards as non-possiblities
|
||
nmtrsw: setzm mbord0
|
||
setzm mbord1
|
||
setzm mbord2
|
||
setzm mbord3
|
||
setzm mbord4
|
||
setzm mbord5
|
||
popj p,
|
||
|
||
SUBTTL SWITCH ERRORS AND ROUTINES
|
||
|
||
SAYUSV: MOVE T1,LASSW ;PICK UP SWITCH NANE
|
||
$ERROR(EF.FAT!EF.CON!EF.SIX,USV,UNKNOWN VALUE FOR SWITCH )
|
||
TYPES (<: >)
|
||
MOVEI STR,LASTOK ;POINT TO VALUE GIVEN
|
||
PUSHJ P,PUTSTR
|
||
X$$USV:
|
||
X$$ASV:
|
||
X$$SVS: PUSHJ P,CRLF
|
||
JRST RESTRT
|
||
|
||
SAYASV: MOVE T1,LASSW ;PICK UP NAME
|
||
$ERROR(EF.FAT!EF.CON!EF.SIX,ASV,AMBIGUOUS VALUE FOR SWITCH )
|
||
SVL.1: TYPES (<: >)
|
||
POP P,T1
|
||
PUSHJ P,OCTOUT
|
||
JRST X$$USV
|
||
|
||
SAYSVS: PUSH P,T1
|
||
MOVE T1,LASSW ;GET SWITCH NAME
|
||
$ERROR(EF.FAT!EF.CON!EF.SIX,SVS,VALUE TO SMALL FOR SWITCH )
|
||
JRST SVL.1
|
||
|
||
GETVAL: SETZM T1 ;START WITH NO VALUE
|
||
TXNN SW,BRK ;BREAK NEXT
|
||
CAIN CHR,"/" ;OR ALREADY TO NEXT SWITCH?
|
||
POPJ P, ;YES, SO NO VALUE GIVEN
|
||
CAIN CHR,":" ;IF WE SEE COLON
|
||
PUSHJ P,DECIN ;GET VALUE
|
||
POPJ P, ;AND RETURN
|
||
|
||
SUBTTL COMPARE ROUTINE SKIPS IF DIFFERENCE IN OLDAT VS CURDAT
|
||
|
||
|
||
COMPR: SKIPE C.FST ;IF FIRST TIME
|
||
JRST CPOPJ1 ;THEN PRETEND THERES A DIFFERENCE
|
||
MOVEI T1,OLDAT(J) ;PICK UP PTR TO OLD
|
||
MOVSI N1,-SIZDAT ;AOBJN PTR TO DATA AREAS
|
||
SKIPA N3,DEFCMP ;GET COMPARE/NO COMPARE WORD
|
||
CMLOOP: LSH N3,1 ;SHIFT RIGHT BIT INTO SIGN POSITION
|
||
JUMPGE N3,BLOOP ;IF COMP BIT OFF, TRY NEXT
|
||
MOVE N2,CURDAT(N1) ;CURRENT DATA
|
||
CAME N2,(T1) ;SAME AS OLD?
|
||
JRST CPOPJ1 ;NO,TAKE SKIP RETURN
|
||
BLOOP: AOS T1 ;UPDATE OLD POINTER
|
||
AOBJN N1,CMLOOP ;MORE TO DO?
|
||
POPJ P, ;RETURN TO MAIN LOOP
|
||
|
||
SUBTTL ROUTINE TO GIVE PROLOGUE TO USERS REPORT
|
||
|
||
|
||
|
||
USRPRO: TXNN SW,L.USRS ;REAL "USERS" COMMAND?
|
||
PJRST CRLF ;NO, JUST GIVE BLANK LINE
|
||
MOVEI CHR,14 ;SEPARATE
|
||
PUSHJ P,PUTCHR
|
||
TYPES (<TIME: >)
|
||
MSTIME T1, ;USE TIME NOW
|
||
PUSHJ P,PUTDAY ;TELL DAYTIME
|
||
PUSHJ P,TAB
|
||
MOVX GT,%CNLNM ;SEE HOW MANY JOBS LOGGED IN
|
||
PUSHJ P,FETTAB
|
||
MOVE T1,GT
|
||
PUSHJ P,DECOUT
|
||
TYPES (< JOBS LOGGED IN OUT OF >)
|
||
MOVX GT,%CNLMX ;TELL MAX
|
||
PUSHJ P,FETTAB ;
|
||
MOVE T1,GT
|
||
PUSHJ P,DECOUT ;
|
||
TYPES (< MAXIMUM (LOGMAX)
|
||
|
||
>)
|
||
POPJ P, ;RETURN
|
||
|
||
SUBTTL ROUTINE TO PRINT OUT THE DATA IN BLOCK "CURDAT"
|
||
|
||
|
||
PRNT: TXNE SW,L.USRS ;SKIP CHECK FOR DIFF IF ALL USERS
|
||
JRST PUTALL
|
||
TXNN SW,OPT.U ;[5]NOT WANT USER NAME AND PPN
|
||
JRST PUTD1 ;IF SW NOT SET
|
||
MOVE T1,C.PPN ;CHECK FOR DIFFERENCE
|
||
MOVE T2,C.NAM1 ;IN PPN OR NAME, IF NON, SKIP
|
||
CAMN T1,O.PPN(J)
|
||
CAME T2,O.NAM1(J)
|
||
PUTALL: PUSHJ P,PUTU ;[5]ELSE PUT USER NAME,PPN
|
||
PUTD1: SETZB FP,CHRCNT ;CLEAR COUNTERS
|
||
TXNE SW,L.USRS!L.PPN!L.PROG ;SKIP TIME STAMP IF MULITIPLE USERS
|
||
AOJA FP,PUTD1A ;AND FIX UP FIELD POINTER
|
||
MOVE T1,C.DAY ;CURRENT TIME
|
||
TXNE SW,OPT.I ;DOING INCREMENTAL
|
||
SUB T1,O.DAY(J) ;SUBTRACT
|
||
PUSHJ P,PUTDAY ;OUTPUT DAYTIME
|
||
PUSHJ P,POSIT ;CHARACTER POSITION
|
||
PUTD1A: TYPEC (J) ;JOB NUMBER
|
||
MOVE T1,C.JOB ;GET #
|
||
PUSHJ P,DECOUT ;OUTPUT
|
||
PUSHJ P,POSIT ;CORRECT POSITION
|
||
SKIPGE C.TTY ;IF TTY <0 THEN DETACHED
|
||
JRST DETACH
|
||
TYPES (<TTY>) ;START IT
|
||
MOVE T1,C.TTY ;PRINT IT
|
||
PUSHJ P,OCTOUT ;DONE
|
||
JRST TCONT
|
||
|
||
DETACH: SKIPN C.JOB ;IF WATCHING NULL JOB
|
||
SKIPA STR,[[ASCIZ/[NULL /]] ;SAY SO
|
||
MOVEI STR,[ASCIZ/DET/] ;THATS IT
|
||
PUSHJ P,PUTSTR
|
||
TCONT: PUSHJ P,POSIT ;CORRECT POSITION
|
||
SKIPN C.JOB ;IF NULL JOB
|
||
SKIPA T1,[SIXBIT/JOB]/] ;SAY SO
|
||
MOVE T1,C.PROG ;OUTPUT PROGRAM NAME
|
||
PUSHJ P,SIXPNB
|
||
PUSHJ P,POSIT ;CORRECT POSITION
|
||
MOVE T1,C.STAT ;GET STATUS
|
||
PUSHJ P,SIXPNT ;FININSHED THAT UP
|
||
PUSHJ P,POSIT ;TAKE CARE OF INCORE/SW
|
||
MOVEI T1,'SW' ;SET UP FOR SWAPPED
|
||
SKIPLE C.NSWP ;SEE IF VIRTUAL
|
||
MOVEI T1,'V ' ;
|
||
SKIPL C.NSWP ;BUT IF IN CORE DONT
|
||
PUSHJ P,SIXPNT ;PRINT ANYTHING
|
||
PUSHJ P,POSIT
|
||
MOVE T1,C.LOW ;GET LOW CORE ASSIGNMENT
|
||
PUSHJ P,DECOUT ;ALWAYS PRINT
|
||
SKIPGE C.HIGH ;-1 HICOR IS SPY
|
||
JRST SPYER ;SO SAY SO
|
||
SKIPN C.HIGH ;MAYBE NO HI-SEG
|
||
JRST ORUN ;THER ISNT
|
||
TYPEC (+) ;THERE IS
|
||
MOVE T1,C.HIGH ;PRINT IT
|
||
PUSHJ P,DECOUT
|
||
JRST ORUN ;AND GO DO MORE
|
||
|
||
|
||
SPYER: TYPES (<+SPY>) ;FLAG MONITOR AS HI-SEG
|
||
ORUN: TXNE SW,L.USRS ;DOING ALL USERS?
|
||
JRST DONEO ;YES,SO WE ARE DONE
|
||
PUSHJ P,POSIT ;CORRECT CURSOR POSITION
|
||
MOVSI N1,-3 ;SET UP FOR RT,RD,WR SETUP
|
||
MOVEI N3,O.RT(J) ;SET UP SOURCE
|
||
ORUNL: MOVE N2,C.RT(N1) ;GET A WORD
|
||
TXNE SW,OPT.I ;IF /I THEN SUB OLD
|
||
SUB N2,(N3) ;DONE
|
||
MOVEM N2,OUTRUN(N1) ;PUT IT AWAY
|
||
AOJ N3,
|
||
AOBJN N1,ORUNL ;IF MORE TO DO
|
||
MOVE T1,OUTRUN ;GET RT
|
||
TXNE SW,L.PPN!L.PROG ;DOING MORE THAN ONE JOB?
|
||
SKIPA N1,[EXP MSOUTJ] ;YES, ALIGN OUTPUT
|
||
MOVEI N1,MSOUT ;ELSE DONT BOTHER
|
||
PUSHJ P,0(N1) ;CALL APPROPRIATE ROUTINE
|
||
PUSHJ P,POSIT
|
||
TYPES (<RD:>) ;DSK RDS
|
||
MOVE T1,OUTRD ;GET # READS AS ADJUSTED
|
||
PUSHJ P,DECOUT ;AND PRINT
|
||
PUSHJ P,POSIT ;POSITION
|
||
TYPES (<WR:>) ;
|
||
MOVE T1,OUTWR ;GET NUMBER OF WRITES
|
||
PUSHJ P,DECOUT ;PRINT
|
||
DONEO: TXNE SW,OPT.S ;WANT STATISTICS
|
||
PUSHJ P,PUTSTC ;YES
|
||
TXNN SW,OPT.P ;[11]DONT WANT PRIVELEGES
|
||
JRST RFINP ;SO GO HOME
|
||
SKIPGE C.FST ;DO ON FIRST TIME
|
||
JRST PUTAL1
|
||
MOVE T1,C.GOD ;CHECK FOR A CHANGE
|
||
MOVE T2,C.PRV ;IN EITHER WORD
|
||
CAMN T1,O.GOD(J)
|
||
CAME T2,O.PRV(J)
|
||
PUTAL1: PUSHJ P,PUTPRV ;[11]ELSE PRINT
|
||
RFINP: PUSHJ P,CRLF ;[14]REALLY FINISHED WITH PRINTING
|
||
TXNE SW,OPT.S ;IF DOING STATISTICS GIVE XTRA
|
||
PUSHJ P,CRLF ;CR-LF PAIR
|
||
POPJ P, ;END OF ROUTINE
|
||
|
||
SUBTTL ROUTINE TO GET STATE OF JOB
|
||
|
||
|
||
GETSTA: HRLZ GT,C.JOB ;GET JOB NUMBER
|
||
HRRI GT,.GTSTS ;GET STATUS WORD
|
||
PUSHJ P,FETTAB
|
||
MOVE T1,GT ;GET RESULT
|
||
LDB N1,[POINT 5,T1,14] ;GET Q #
|
||
IDIVI N1,3 ;NAMES PACKED 3 TO A WORD
|
||
MOVX GT,.GTWSN ;GET NAME
|
||
HRL GT,N1
|
||
PUSHJ P,FETTAB ;DO GETTAB
|
||
MOVE N3,GT
|
||
MOVE N1,[POINT 12,N3,11] ;PICK OUT TWO CHARS
|
||
JUMPE N2,.+3
|
||
IBP N1
|
||
SOJG N2,.-1 ;MORE INCREMENTING?
|
||
LDB N2,N1 ;NO, GET BYTE
|
||
MOVEI N1,'^W' ;COMMAND WAIT
|
||
TLNE T1,400000 ;TRY IT
|
||
MOVEI N1,'CW'
|
||
TLNE T1,CMWB
|
||
JRST GOTSIT ;WE HAVE IT
|
||
MOVEI N1,'OW' ;OPERATOR WAIT
|
||
TRNE T1,JDCON ;MAYBE
|
||
JRST GOTSIT ;YES
|
||
MOVEI N1,'^D' ;DEAMON WAIT
|
||
TRNE T1,JDC ;POSSIBLY
|
||
JRST GOTSIT ;YES
|
||
MOVEI N1,'^C' ;IN MONITOR MODE
|
||
JUMPGE T1,GOTSIT ;SIGN BIT ON?
|
||
MOVEI N1,'SL' ;JOB SLEEPING?
|
||
CAIE N2,'SL' ;IF IN THAT Q
|
||
JRST TIWAIT ;COULD BE TTY INPUT
|
||
TRNN T1,CLKR ;GOT A CLOCK REQUEST?
|
||
MOVEI N1,'HB' ;NO, HIBERNATING
|
||
JRST GOTSIT
|
||
TIWAIT: CAIE N2,'TI' ;COULD BE TI
|
||
JRST ISIT ;YUP
|
||
MOVEI N1,'TI' ;SET IT UP
|
||
MOVN N3,C.JOB ;MAKE NEG JOB #
|
||
JOBSTS N3, ;GET JOB STATUS
|
||
JFCL
|
||
TXNE N3,JB.UOA ;IF OUTPUT AVAILABLE
|
||
MOVEI N1,'TO' ;THEN MUST BE TO STATE
|
||
SKIPA
|
||
ISIT: MOVE N1,N2 ;A CORRECTED STATE
|
||
GOTSIT: MOVEM N1,C.STAT ;STORE IN CURDAT
|
||
POPJ P, ;AND GO HOME
|
||
SUBTTL ROUTINE TO GET THE HI AND LO CORE USED BY A JOB
|
||
|
||
|
||
GETCOR: SETOM C.NSWP ;MARK AS IN CORE
|
||
MOVE N1,C.JOB ;GET CURRENT JOB
|
||
SETOM C.HIGH ;MARK AS DOING LOW SEGMENT
|
||
PUSHJ P,GETSIZ ;GET SIZE OF LOW-SEG
|
||
MOVEM GT,C.LOW ;STORE IT
|
||
;** THIS CODE FOR FLAGGING VIRTUAL JOBS LIES, SO REMOVE IT FOR NOW
|
||
; MOVS GT,C.JOB ;GET JOB INTO LH
|
||
; HRRI GT,.GTVRT ;LOOK UP VIRTUAL STATS FOR JOB
|
||
; TXNE SW,FT.VM ;SKIP LOOKING IF NON-VM SYSTEM
|
||
; PUSHJ P,FETOPT ;MAY NOT BE VM SYSTEM
|
||
; SETZ GT, ;IF NOT VM, FORCE NON-VIRTUAL
|
||
; TLNE GT,-1 ;SEE IF FAULT INTERVAL SET
|
||
; HRRZS C.NSWP ;IF FAULT INTERVAL, SET AS "V"
|
||
|
||
IFN SYS,<
|
||
SETZM HISEGN ;
|
||
>
|
||
SETZM C.HIGH
|
||
MOVX GT,.GTSGN ;LOOKUP HI-SEG NUMBER
|
||
HRLI GT,(N1) ;OF THIS JOB
|
||
PUSHJ P,FETTAB ;
|
||
JUMPE GT,CPOPJ ;IF NONE, WE ARE DONE
|
||
JUMPL GT,[SETOM C.HIGH ;SPY SEGEMENT, MARK AS C.HIGH= -1
|
||
POPJ P,] ;AND RETURN
|
||
MOVE N1,GT ;MAKE HI-SEG BE OUR GOAL
|
||
|
||
IFN SYS,<
|
||
HRRZM N1,HISEGN ;FOR SYSTEM STASH HI-SEG NUMBER
|
||
>
|
||
PUSHJ P,GETSIZ ;GET SIZE OF SEGMENT
|
||
MOVEM GT,C.HIGH ;STORE SIZE
|
||
TXNE SW,FT.VM ;IS THIS A VM SYSTEM?
|
||
TXNE N1,SHRSEG ;WAS THIS A SHAREABLE HI-SEG?
|
||
POPJ P, ;NO TO ONE OF THEM, WE ARE DONE
|
||
SUBM GT,C.LOW ;VM AND NON-SHAREABLE HI SEG
|
||
MOVNS C.LOW ;MEANS UPDATED LOWSEG SIZE
|
||
POPJ P, ;WE ARE DONE
|
||
|
||
GETSIZ: TXNN SW,FT.VM ;IS ITHIS A VM SYSTEM?
|
||
JRST GTSIZ7 ;NO, USE OLD METHOD
|
||
MOVSI GT,(N1) ;LOOK UP IN SWAPPING TABLE
|
||
HRRI GT,.GTSWP ;FROM MONITOR
|
||
PUSHJ P,FETTAB ;
|
||
SKIPE C.HIGH ;IF THIS IS NOT HIGH SEGMENT
|
||
JRST GTSIZ6 ;THEN RETURN LAST 9 BITS
|
||
TXNE N1,SHRSEG ;IS THIS SEGMENT SHAREABLE?
|
||
JRST GTSIZ7 ;YES, SHAREABLE HI-SEG IS DONE OLD WAY
|
||
MOVSS GT ;IT IS NON-SHAREABLE, SO
|
||
JRST GTSIZ6 ;USE 9 BIT FIELD
|
||
GTSIZ7: MOVX GT,.GTSTS ;LOOK UP THE JOBS STATUS
|
||
HRLI GT,0(N1) ;FROM MONITOR TABLE
|
||
PUSHJ P,FETTAB ;
|
||
MOVE N2,GT ;REMEMBER IT
|
||
MOVX GT,.GTADR ;USE IN CORE SIZE
|
||
HRLI GT,0(N1) ;
|
||
PUSHJ P,FETTAB ;
|
||
MOVSS GT ;GET RID OF RELOCATION
|
||
JUMPE GT,GTSIZ1 ;NOT IN CORE IF 0 HERE
|
||
SKIPE C.HIGH ;IF HIGH SEGMENT
|
||
TXNN N2,SWP ;IF SWAPPED OUT
|
||
JRST GTSIZ2 ;JUMP FOR HI-SEG OR IN-CORE LOWSEG
|
||
GTSIZ1: PUSHJ P,SEGSWP ;FETCH SWAPPING DATA
|
||
TRNE GT,377 ;SEE IF OUT YET
|
||
JRST GTSIZ3 ; USE IN CORE SIZE
|
||
MOVX GT,.GTADR ;USE IN CORE SIZE
|
||
HRLI GT,0(N1)
|
||
PUSHJ P,FETTAB
|
||
MOVSS GT
|
||
GTSIZ2: TXNE SW,KI.10 ;IS THIS A KI OR KL?
|
||
JRST GTSIZ5 ;YES
|
||
ADDI GT,1777 ;ROUND UP
|
||
ASH GT,-^D10 ;DIVIDE TO K
|
||
GTSIZ3: ANDI GT,377 ;MASK TO 256 K
|
||
POPJ P, ;RETURN
|
||
GTSIZ5: ADDI GT,777 ;ROUND UP TO P BOUNDARY
|
||
LSH GT,-^D9 ;
|
||
GTSIZ6: ANDI GT,777 ;MASK TO 512P
|
||
POPJ P, ;RETURN
|
||
|
||
; ROUTINE TO CONVERT CONTENTS OF N2 TO K OR P
|
||
|
||
KIKA: ADDI N2,777 ;ROUND TO PAGE BOUND
|
||
TXNN SW,KI.10 ;IF KA, ROUND TO K
|
||
ADDI N2,1000 ;
|
||
LSH N2,-11 ;MAKE PAGES
|
||
TXNN SW,KI.10 ;AND IF KA, MAKE TO K
|
||
LSH N2,-1 ;DONE
|
||
POPJ P,
|
||
SEGSWP: SETZM C.NSWP ;MARK AS SWAPPED
|
||
MOVSI GT,(N1) ;PICK UP SEGMENT NUMBER
|
||
HRRI GT,.GTSWP ;SWAPPING STAT. TABLE
|
||
PJRST FETTAB ;GET IT AND RETURN
|
||
SUBTTL ROUTINE TO GET PROGRAM NAME
|
||
|
||
|
||
GETNAM: MOVE N1,C.JOB ;GET JOB NUMBER
|
||
;ALT ENTRY POINT FOR PPN,MYPPN LOOP
|
||
GETP2: MOVX GT,.GTPRG ;TABLE OF NAMES
|
||
HRL GT,N1 ;SETUP
|
||
PUSHJ P,FETTAB ;AND GET
|
||
MOVEM GT,C.PROG ;STORE
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
SUBTTL ROUTINE TO GET RUNTIME IN MS
|
||
GETRUN: HRLZ GT,C.JOB ;GET JOB NUMBER
|
||
HRRI GT,.GTTIM ;GET THE RUN TIME USED
|
||
PUSHJ P,FETTAB ;LOOK IT UP
|
||
MOVE T1,GT ;GET RESULT
|
||
IMULI T1,^D100 ;CONVERT TICS TO MS
|
||
IDIVI T1,6 ;FOR LATER USE
|
||
MOVEM T1,C.RT ;STORE IT
|
||
POPJ P, ;AND GO BACK
|
||
|
||
|
||
|
||
SUBTTL ROUTINE TO PICK UP STATISTICS FOR A JOB (/S STUFF)
|
||
|
||
GETSTC: MOVE N1,C.JOB ;GET JOB NUMBER
|
||
MOVX GT,.GTKCT ;PICK UP KCT
|
||
HRLI GT,(N1) ;PICK UP JOB #
|
||
PUSHJ P,FETTAB ;GETTAB
|
||
MOVEM GT,C.KCT ;STORE RESULT
|
||
|
||
MOVSI GT,(N1) ;JOB #
|
||
HRRI GT,.GTLIM ;TIME LIMIT
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,C.TLM
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL ROUTINE TO GET JACCT BIT AND PRIVELEGE WORD OF JOB
|
||
|
||
GETPRV: SETZM C.GOD ;TURN OFF HES GOT JACCT
|
||
MOVN T1,C.JOB ;GET JOB NUMBER
|
||
JOBSTS T1, ;DO A JOB STATUS UUO
|
||
JFCL ;DONT REALLY CARE
|
||
TXNE T1,JB.UJC ;IS JACCT ON?
|
||
SETOM C.GOD ;YES, FLIP SWITCH
|
||
MOVS GT,T1 ;FLIP FOR GETTAB
|
||
HRRI GT,.GTPRV ;SET FOR PRIV. GETTAB
|
||
PUSHJ P,FETTAB ;DO IT
|
||
MOVEM GT,C.PRV ;STORE
|
||
POPJ P, ;GO HOME
|
||
|
||
|
||
SUBTTL ROUTINE TO GET DSK IO STUFF
|
||
|
||
|
||
GETDSK: MOVX GT,.GTRCT ;GET DSK READS
|
||
HRL GT,C.JOB ;GET JOB #
|
||
PUSHJ P,FETTAB
|
||
LDB N1,DBP ;GET THE POINTER
|
||
MOVEM N1,C.RD ;STORED
|
||
MOVX GT,.GTWCT ;SAME FOR WRITES
|
||
HRL GT,C.JOB ;
|
||
PUSHJ P,FETTAB
|
||
LDB N1,DBP ;
|
||
MOVEM N1,C.WR ;STORED
|
||
POPJ P, ;AND GO HOME
|
||
DBP: POINT 23,GT,35 ;DISK BYTE POINTER
|
||
|
||
|
||
SUBTTL ROUTINE TO GET USER NAME AND PPN
|
||
|
||
GETU: MOVS GT,C.JOB ;GET USER NAME
|
||
HRRI GT,.GTNM1 ;FIRST HALF
|
||
PUSHJ P,FETTAB
|
||
MOVEM GT,C.NAM1 ;STORE FIRST HALF
|
||
MOVS GT,C.JOB ;DO AGAIN FOR SECOND HALF
|
||
HRRI GT,.GTNM2 ;
|
||
PUSHJ P,FETTAB ;SECOND HALF,USERNAME
|
||
MOVEM GT,C.NAM2 ;STASH SECOND HALF
|
||
MOVS GT,C.JOB ;GET JOB NUMBER
|
||
HRRI GT,.GTPPN ;PPN TABLE
|
||
PUSHJ P,FETTAB ;LOOK IT UP
|
||
MOVEM GT,C.PPN ;STORE PPN
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
SUBTTL OUTPUT ROUTINE PUTS OUT "USER:" USER-NAME, PPN
|
||
|
||
PUTU: TXNE SW,L.USRS ;NO TAB FOR USERS
|
||
JRST PUTU1 ;OR LABEL
|
||
TYPES (< USER:>) ;GIVE "TAB USER"
|
||
PUTU1: MOVE T1,C.NAM1 ;GET USER NAME
|
||
PUSHJ P,SIXPNB ;OUTPUT IT (WITH BLANKS)
|
||
MOVE T1,C.NAM2 ;SECOND HALF OF NAME
|
||
PUSHJ P,SIXPNB ;OUTPUT
|
||
MOVEI STR,[ASCIZ/ /];TWO TABS
|
||
TXNE SW,L.USRS ;UNLESS USERS, THEN ONLY ONE
|
||
MOVEI STR,[ASCIZ/ /] ;SPACE OR SO
|
||
PUSHJ P,PUTSTR
|
||
MOVE T1,C.PPN ;GET PPN
|
||
SETZ CHRCNT, ;CLEAR CHARACTER COUNTER
|
||
MOVEI STR,[ASCIZ/PPN:/] ;PREPARE FOR PPN
|
||
TXNN SW,L.USRS ;SHORT FOR USERS
|
||
PUSHJ P,PUTSTR ;AND OUTPUT 'PPN:['
|
||
MOVEI CHR,"[" ;BRACKET OPENS
|
||
TXNN SW,L.USRS ;EXCEPT FOR USERS
|
||
PUSHJ P,PUTCHR
|
||
PUSH P,T1 ;SAVE
|
||
HLRZS T1 ;MAKE PROJ BE IN R. HALF
|
||
PUSHJ P,OCTOUT ;OUTPUT IT
|
||
TYPEC (<,>) ;OUTPUT A COMMA
|
||
POP P,T1 ;RESTORE
|
||
ANDI T1,-1 ;AND MAKE IT CORRECT
|
||
PUSHJ P,OCTOUT ;OUTPUT IT
|
||
TXNE SW,L.USRS ;DOING USERS? IF YES THEN
|
||
JRST FPPNU ;FINISH PPN ALA USERS
|
||
TYPEC (]) ;RIGHT BRACKET
|
||
PJRST CRLF ;GIVE CRLF, WILL RETURN FROM THERE
|
||
FPPNU: CAIGE CHRCNT,^D11 ;NO TAB IF GONE TOO FAR
|
||
PJRST TAB ;TAB FOR USERS
|
||
POPJ P, ;OR MAYBE JUST RETURN
|
||
SUBTTL ROUTINE TO PRINT OUT THE PRIVELEGES FOR A JOB
|
||
|
||
PUTPRV: PUSHJ P,CRLF ;PUT OUT A CR-LF
|
||
SETOM CHRCNT ;USED FOR OUTPUT CHECK
|
||
MOVEI STR,[ASCIZ/JACCT /] ;SET FOR JACCT
|
||
SKIPE C.GOD ;WAS JACCT ON?
|
||
PUSHJ P,PUTSTR ;IT IS SO SAY SO
|
||
MOVE T1,C.PRV ;PICK UP PRIVS
|
||
TXNE T1,JP.HPQ ;SEE IF HPQ > 0
|
||
PUSHJ P,Y.HPQ ;YES, SO GIVE HPQXX
|
||
TXNE T1,JP.DPR ;SEE IF DISK PRIORITY
|
||
PUSHJ P,Y.DPR ;YES , SO GIVE DSKQX
|
||
MOVEI STR,[ASCIZ/MTR /] ;READY FOR METER
|
||
TXNE T1,JP.MET ;IS METER LIT?
|
||
PUSHJ P,PUTSTR ;YES
|
||
MOVEI STR,[ASCIZ/POK /] ;IS POKE LIT?
|
||
TXNE T1,JP.POK ;
|
||
PUSHJ P,PUTSTR ;YES
|
||
MOVEI STR,[ASCIZ/CPU /] ;IS CPU CHANGE LIT?
|
||
TXNE T1,JP.CCC ;
|
||
PUSHJ P,PUTSTR ;YES IT IS
|
||
MOVEI STR,[ASCIZ/UNSPL /] ;READY FOR UNSPOOL
|
||
TXNE T1,JP.NSP ;TEST THE BIT
|
||
PUSHJ P,PUTSTR ;IF ON
|
||
MOVEI STR,[ASCIZ/RTTRP /] ;SEE IF REAL TIME
|
||
TXNE T1,JP.RTT ;ETC
|
||
PUSHJ P,PUTSTR
|
||
MOVEI STR,[ASCIZ/LCK /] ;CHECK FOR LOCK ON
|
||
TXNE T1,JP.LCK ;TEST IT
|
||
PUSHJ P,PUTSTR ;AND PUT IT
|
||
MOVEI STR,[ASCIZ/TRPST /] ;TRAP SET UUO ENABLED?
|
||
TXNE T1,JP.TRP ;SET?
|
||
PUSHJ P,PUTSTR ;YES, SO PRINT IT
|
||
MOVEI STR,[ASCIZ/IPCF /] ;IPCF PRIVELEGED FUNCTIONS
|
||
TXNE T1,JP.IPC ;ARE THEY ON?
|
||
PUSHJ P,PUTSTR ;YES
|
||
MOVEI STR,[ASCIZ/ENQ /] ;ENQUE
|
||
TXNE T1,JP.ENQ ;SEE IF THEY HAVE IT
|
||
PUSHJ P,PUTSTR ;IF THEY DO,SAY SO
|
||
MOVEI STR,[ASCIZ/PEEK-ALL /] ;CAN PEEK ON ALL OF CORE
|
||
TXNE T1,JP.SPA ;WE SHALL SEE
|
||
PUSHJ P,PUTSTR
|
||
MOVEI STR,[ASCIZ/PEEK-MONITOR /] ;WHAT ABOUT ON MONITOR
|
||
TXNN T1,JP.SPA ;DONT SAY MON IF SAID ALL
|
||
TXNN T1,JP.SPM ;TEST
|
||
CAIA ;SKIP OVER
|
||
PUSHJ P,PUTSTR ;AND MAYBE PRINT
|
||
MOVEI STR,[ASCIZ/*UNPRIVELEGED*/]
|
||
SKIPGE CHRCNT ;HAVE WE SAID ANYTHING?
|
||
PUSHJ P,PUTSTR ;NO,NOW DO SO
|
||
PJRST CRLF ;AND GIVE CR-LF AND RETURN
|
||
|
||
|
||
Y.HPQ: PUSH P,T1 ;SAVE T1
|
||
TYPES (<HPQ>) ;SAY "HPQ"
|
||
LDB T1,[POINTR( T1,JP.HPQ)] ;GET Q NUMBER
|
||
PUSHJ P,OCTOUT ;AND PRINT
|
||
PJRST DUNQUE ;AND RESTORE, RETURN
|
||
|
||
|
||
Y.DPR: PUSH P,T1 ;SAVE T1
|
||
TYPES (<DSKQ>)
|
||
LDB T1,[POINTR (T1,JP.DPR)] ;GET Q
|
||
PUSHJ P,OCTOUT ;AND PRINT IT
|
||
DUNQUE: TYPEC ( ) ;PRINT A BLANK
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
SUBTTL ROUTINE TO OUTPUT KCS,RT/ET,RT/TRQ,TIME LIMIT
|
||
;
|
||
; EXPECTS TO FIND CURRENT DATA AREA LOADED
|
||
|
||
PUTSTC: PUSHJ P,CRLF ;GIVE LEADING CRLF
|
||
SETZ CHRCNT, ;FIX CURSOR AND CHAR COUNT
|
||
MOVEI FP,P.KCT-SPATAB ;POSITION IN SPATAB
|
||
TYPES (<KCS:>) ;LABEL
|
||
MOVE T1,C.KCT ;PICK UP KILO-CORE-TICKS
|
||
IDIVI T1,^D60 ;60 TIC/SEC
|
||
PUSHJ P,DECOUT ;AND PRINT IT
|
||
PUSHJ P,POSIT ;CORRECT CURSOR POSITION
|
||
|
||
SKIPE C.FST ;DONT DO IT THE FIRST TIME
|
||
JRST NOET ;CAUSE YOU GET GARBAGE
|
||
MOVEI STR,[ASCIZ!RT/ET:!] ;RUNTIME/ELAPSED TIME
|
||
MOVE T1,C.RT ;PICK UP RUNTIME
|
||
SUB T1,O.RT(J) ;MAKE INCREMENTAL
|
||
MOVEM T1,ARGS ;STORE IT IN ARG BLOCK
|
||
MOVE T1,C.DAY ;PICK UP DAYTIME
|
||
SUB T1,O.DAY(J) ;MAKE INCREMENTAL
|
||
JUMPGE T1,.+2 ;ADJUST IF WENT AROUND CLOCK
|
||
ADDX T1,^D1000*^D60*^D60*^D24
|
||
MOVEM T1,ARGS+1 ;STASH IT
|
||
PUSHJ P,PUTMES ;OUTPUT THE STUFF
|
||
PUSHJ P,POSIT
|
||
NOET: ;SKIPPED OVER ABOVE, THE FIRST TIME
|
||
LDB T1,[POINTR(C.TLM,JB.LTM)] ;PICK IT UP
|
||
IMULI T1,^D1000 ;CONVERT TO MS
|
||
IDIVI T1,^D60
|
||
JUMPE T1,CPOPJ ;IF ZERO TLM , SKIP THE PRINT
|
||
TYPES (<TLM:>) ;LABEL
|
||
PJRST MSOUT ;OUTPUT T1 AS MILLISECONDS
|
||
|
||
SUBTTL ROUTINE TO DO GETTABS OR SPYS DEPENDING ON PRIV.
|
||
|
||
; ROUTINE HAS TWO ENTRY POINTS:
|
||
; FETOPT: DOING GETTAB ON AN OPTIONAL TABLE, TAKE SKIP RETURN
|
||
; IF GOOD LOOKUP, NON-SKIP IF GETTAB FAILS
|
||
; FETTAB: TABLE BEING LOOKED AT IS NON-OPTIONAL, IF THE
|
||
; GETTAB OR GETTAB SIMULATION FAIL THEN GO TO GFAIL
|
||
; WHICH IS A FATAL ERROR. (USER MAY "CONTINUE")
|
||
; THE ONLY RETURN IS A NON-SKIP RETURN
|
||
|
||
|
||
FETOPT: TXOA SW,GT.OPT ;MARK AS OPTIONAL
|
||
FETTAB: TXZ SW,GT.OPT ;NON-OPTIONAL
|
||
MOVEM GT,SAVGT ;SAVE FOR EXAMINATION IF WE GET A FAILURE
|
||
TXNE SW,Y.SPY ;CAN WE SPY?
|
||
JRST USPY ;YES, GO DO IT
|
||
UGET: GETTAB GT, ;NO, DO A GETTAB
|
||
PJRST GFAIL ;IF A FAILURE
|
||
TXNE SW,GT.OPT ;IF DOING OPTIONAL TABLE THEN
|
||
AOS (P) ;SKIP FOR GOOD RETURN
|
||
POPJ P,
|
||
|
||
USPY: HRRE T3 ,GT ;T3 GETS TABLE NUMBER
|
||
HLRZ T4 ,GT ;AND T4 THE ITEM NUMBER
|
||
CAMLE T3 ,MAXGTB ;UNDER THE LIMIT?
|
||
PJRST GFAIL ;NO, GIVE ERROR RETURN
|
||
ADD T3 ,TABTAB ;GET ADDR OF ADDR OF TABLE
|
||
MOVE T3 ,400000(T3 ) ;AND FETCH ADDR OF WANTED TABLE
|
||
LDB GT,[POINT 9,T3 ,8] ;GET MAX LENGTH
|
||
CAMLE T4 ,GT ;THIS ITEM # <= MAX?
|
||
JRST UZERO ;NO, RETURN ZERO RESULT
|
||
TLNE T3 ,400 ;IF ITS PROCESS DATA
|
||
JRST UPROC ;USE PROCESS TABLES
|
||
SPYBCK: ADDI T3 ,(T4 ) ;NOW T3 HAS ADDR OF EXACT ITEM
|
||
MOVEM T3 ,SAVADR ; SAVE ADDRESS OF EXEC LOC THIS ITEM
|
||
SKIPA
|
||
UZERO: TDZA GT,GT ;FOR RETURNING ZERO RESULT
|
||
MOVE GT,400000(T3 ) ;PICK UP ITEM
|
||
TXNE SW,GT.OPT ;IF OPTIONAL TABLE, GOOD LOOKUP GETS
|
||
CPOPJ1: AOS (P) ;SKIP RETURN
|
||
CPOPJ: POPJ P, ;AND RETURN
|
||
|
||
|
||
UPROC: MOVE GT,SAVGT ;RESTORE GT INCASE GETTAB
|
||
SKIPN PDBPTR ;HAVE PTR TO PROCESS DATA?
|
||
JRST UGET ;NO,USE GETTAB
|
||
ADD T4 ,PDBPTR ;T4 GETS ADDRESS OF ADDRESS OF PDB
|
||
SKIPN T4 ,(T4 ) ;IF NOT ZERO
|
||
JRST UZERO ;UNLESS THERE IS NO PDB
|
||
JRST SPYBCK ;AND GO BACK TO SPY
|
||
|
||
|
||
; ROUTINE TO RETURN A VALUE IN THE MONITOR WITHOUT GOING THRU GETTAB/SPY
|
||
; EXPECTS EXEC ADDRESS IN GT, RETURNS VALUE IN GT
|
||
; RETURNS ZERO IF CANT DO A SPY OR PEEK
|
||
|
||
MONVAL:
|
||
IFE PURESW,<
|
||
TXNE SW,Y.SPY ;CAN HE SPY?
|
||
SKIPA GT,400000(GT) ;YES, SO DO SO >
|
||
PEEK GT, ;PEEK HAS NO ERROR RETURN
|
||
POPJ P, ;NOW GO HOME
|
||
|
||
SUBTTL ROUTINE TO SET UP THE GETTAB SIMULATOR
|
||
IFE PURESW,<
|
||
SETTAB: MOVX GT, %CNSIZ ;LOOKUP SIZE OF MONITOR
|
||
PUSHJ P,FETTAB
|
||
SOJ GT, ;BACK OFF BY 1
|
||
SPY GT, ;TRY TO SPY
|
||
JRST XSPY ;CANT, NO PRIV, ETC
|
||
MOVE GT,[XWD .GTSLF,.GTSLF] ;[63]GET ADDRESS OF SELF TABLE
|
||
PUSHJ P,FETOPT ;THIS IS NON FATAL IF NOT FOUND
|
||
JRST XSPY ;AND ITS NOT
|
||
JUMPE GT,XSPY ;IF NO IMMEDIATE TABLE,DONT SPY
|
||
HRRZM GT,TABTAB ;STORE IT
|
||
LDB N2,[POINT 9,GT,8] ;GET MAX SIZE
|
||
MOVEM N2,MAXGTB ;STASH THAT TOO
|
||
MOVX GT, %CNPDB ;GET PROCESS DATA BLOCK ADDRESS
|
||
PUSHJ P,FETTAB ;STORING FOR LATER STUFF
|
||
TRO GT,400000 ;MAKE A SPY POINTER
|
||
MOVEM GT,PDBPTR ;AND STASH IT
|
||
TXO SW,Y.SPY ;FINALLY,TURN SPYING ON
|
||
XSPY: POPJ P, ;RETURN
|
||
|
||
> ;END OF CONDITIONAL
|
||
|
||
|
||
SUBTTL ROUTINE TO ASSIGN CORE WHEN NEEDED FOR TABLE SPACE
|
||
;
|
||
;ROUTINE ASSCOR : EXPECTS T1 TO CONTAIN NUMBER OF WORDS WANTED,
|
||
; ON RETURN T1 CONTAINS ADDRESS OF START OF GIVEN BLOCK
|
||
|
||
ASSCOR: EXCH T1,.JBFF ;T1 CONTAINED WORDS WANTED
|
||
ADDM T1,.JBFF ;.JBFF NOW UPDATED
|
||
PUSH P,T1 ;SAVE T1 WHILE WE CLEAR OR GET CORE
|
||
MOVE T1,.JBFF ;DID WE GO OVER?
|
||
TLNE T1,-1 ;MAKE SURE ITS REASONABLE
|
||
JRST NOCORE ;IE <= 2**18.
|
||
SOS T1 ;LAST WORD USED IS FIRST FREE-1
|
||
CAMG T1,.JBREL ;COMPARE TO .JBREL
|
||
JRST CLRCOR ;NO, SO JUST CLEAR CORE GIVEN
|
||
CORE T1, ;AND REQUEST CORE
|
||
JRST NOCORE ;COULDNT GET IT
|
||
CLRCOR: MOVE T1,(P) ;GET START
|
||
SETZM 0(T1) ;
|
||
AOS T1 ;
|
||
HRLI T1,-1(T1) ;
|
||
BLT T1,@.JBREL ;CLEAR CORE
|
||
TPOPJ: POP P,T1 ;RESTORE T1
|
||
POPJ P, ;AND RETURN
|
||
|
||
NOCORE: MOVE T1,.JBFF##
|
||
MOVEI T1,-1(T1)
|
||
$ERROR(EF.FAT!EF.MEM!EF.RST,CEF,CORE EXPANSION FAILED WHEN TRYING TO GET )
|
||
|
||
|
||
SUBTTL ROUTINE TO REDUCE SIZE BACK TO ORIGINAL
|
||
|
||
REDUCE: PUSH P,T1 ;SAVE T1
|
||
MOVE T1,SAVFF ;GET ORIGINAL SIZE
|
||
MOVEM T1,.JBFF## ;RESTORE IT
|
||
SUBI T1,1 ;BACK OFF ONE FOR LAST USED
|
||
CORE T1, ;AND MAKE OURSELVES THE RIGHT SIZE
|
||
JFCL ;DONT CARE
|
||
JRST TPOPJ ;RETURN TO CALLER
|
||
SUBTTL ROUTINE TO GET THE TTY # ATTACHED TO JOB
|
||
|
||
|
||
GETTY: TXNE SW,SYSD ;DOING THE SYSTEM?
|
||
MOVEI T1,(J) ;YES, SO J HAS JOB NUMBER
|
||
SKIPN N1,T1 ;GET JOB
|
||
JRST YDET ;MARK NULL JOB AS DETACHED
|
||
TRMNO. N1, ;UUO
|
||
JRST DET ;MAY BE DETACHED
|
||
SUBI N1,.UXTRM ;SUBTRACT IO INDEX
|
||
MOVEM N1,C.TTY ;STORE
|
||
JRST CPOPJ1 ;TAKE A SKIP RETURN
|
||
DET: MOVN N1,T1 ;SETUP FOR JOB STATUS
|
||
JOBSTS N1,
|
||
JRST NOJOB ;NO JOB THIS NUMBER
|
||
JUMPL N1,YDET ;DETACHED
|
||
NOJOB: POPJ P,
|
||
YDET: SETOM C.TTY ;-1 TTY # MEANS DETACHED
|
||
JRST CPOPJ1 ;RETURN VIA SKIP
|
||
|
||
|
||
|
||
SUBTTL ROUTINE TO GET JOB ATTACHED TO A TTY
|
||
|
||
|
||
GETJOB: MOVE N1,T1 ;GET LINE #
|
||
MOVEI T2,3 ;3 TIMES
|
||
IDIVI N1,10 ;GET A DIGIT
|
||
LSHC N2,-6 ;SHIFT INTO N3 THE REMAINDER
|
||
SOJG T2,.-2 ;IF MORE
|
||
HLRZS N3 ;PUT INTO RIGHT HALF
|
||
ADD N3,[SIXBIT/TTY000/] ;ADD TTY HANDLE
|
||
SETZM C.JOB ;ZERO THE JOB #
|
||
DEVTYP N3,
|
||
JFCL ;DEVTYPE RETURNS JOB #
|
||
HRRZS N3 ;GET RID OF LEFT HALG
|
||
LSH N3,-11 ;AND SHIFT OVER JOB NUMBER
|
||
SKIPN N3 ;IF NOT 0 THEN THERE IS A JOB
|
||
POPJ P,
|
||
MOVEM N3,C.JOB ;STORE
|
||
JRST CPOPJ1 ;SKIP RETURN = FOUND A JOB #
|
||
SUBTTL OUTPUT ROUTINES AND INPUT ROUTINES
|
||
SUBTTL ROUTINE TO OUTPUT DAYTIME AS HH:MM:SS
|
||
; T1 MUST CONTAIN DAYTIME OR SOME TIME IN MS
|
||
|
||
PUTDAY: PUSH P,T1 ;SAVE T1
|
||
IDIVI T1,1750 ;GET AS SECS
|
||
IDIVI T1,74 ;SECS IN T2, MIN IN T1
|
||
PUSH P,T2 ;STORE ON STACK
|
||
IDIVI T1,74 ;GET AS HRS MINS
|
||
PUSH P,T2 ;SAVE MIN ON STACK
|
||
CAIGE T1,12 ;IF <10
|
||
PUSHJ P,ZEROUT ;OUTPUT LEADING 0
|
||
PUSHJ P,DECOUT
|
||
TYPEC (:) ;AND COLON
|
||
POP P,T1 ;SAME FOR MINUTES
|
||
CAIGE T1,12
|
||
PUSHJ P,ZEROUT
|
||
PUSHJ P,DECOUT
|
||
TYPEC (:)
|
||
POP P,T1 ;AND SECS
|
||
CAIGE T1,12
|
||
PUSHJ P,ZEROUT
|
||
PUSHJ P,DECOUT ;ALWAYS PRINT
|
||
MOVEI CHRCNT,10 ;UPDATE CHARACTER COUNTER
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
|
||
|
||
SUBTTL ROUTINE TO OUTPUT MILLISECONDS AS HH:MM:SS.SS
|
||
; EXPECTS MS IN T1
|
||
; MSOUTJ IS LIKE MSOUT EXCEPT THAT IT RIGHT-JUSTIFIES
|
||
; THE OUTPUT SO THAT THINGS LINE UP NICE
|
||
|
||
MSOUTJ: SOSA JSTFLG ;JUSTIFY
|
||
MSOUT: SETZM JSTFLG
|
||
MOVE N1,T1 ;NEED 3 CONTIG. REGISTERS
|
||
IDIVI N1,1750 ;OFF THE MS
|
||
IDIVI N2,12 ;MS
|
||
PUSH P,N2 ;STORE ARGS
|
||
IDIVI N1,74 ;GET SECS
|
||
PUSH P,N2 ;STORE SECS
|
||
IDIVI N1,74 ;SEPARATE MINS,HOURS
|
||
PUSH P,N2 ;STORE MINS
|
||
PUSH P,N1 ;STORE HOURS ON STACK
|
||
TXZ SW,T.FLG ;SET FLAG FOR NO LEADING ZERO
|
||
MOVEI T3 ,":" ;FIELD DELIMITER
|
||
SETZ T4 , ;INIT COUNTER
|
||
ORUN2: AOJ T4 , ;INCR CNT
|
||
CAIN T4 ,3 ;IF 3RD ONE
|
||
MOVEI T3 ,"." ;NEW FILED DEL.
|
||
POP P,T1 ;POP OFF A NUMBER
|
||
SKIPN T1 ;IF NON-ZERO
|
||
PUSHJ P,ZERUN ;DONT FAKE IT
|
||
CAIL T1,^D10 ;IF >=10 NO NEED FOR DIGIT FILL
|
||
JRST ORUN2A ;SO SKIP IT
|
||
MOVEI CHR,"0" ;ELSE FILL WITH BLANK OR ZERO
|
||
TXNN SW,T.FLG ;DEPENDING ON PREV. TYPEOUT
|
||
MOVEI CHR," " ;BLANK IF LEADING
|
||
PUSHJ P,PUTCHR ;AND PUT IT OUT
|
||
ORUN2A: PUSHJ P,DECOUT ;OUT IT
|
||
TXO SW,T.FLG ;SAY WE HAVE DONE OUTPUT
|
||
CAIN T4 ,4 ;NO FD FOR FRACTIONS
|
||
JRST ORUN3
|
||
MOVE CHR,T3
|
||
PUSHJ P,PUTCHR
|
||
ORUN3: CAIE T4 ,4
|
||
JRST ORUN2
|
||
POPJ P, ;GO HOME
|
||
ZERUN: TXNN SW,T.FLG ;IF NOT A LEADING TYPE ZERO
|
||
CAILE T4 ,2 ;OR IF NOT HRS OR MINS OF RT
|
||
POPJ P, ;GO BACK AND PRINT
|
||
POP P,(P) ;POP OFF CALL
|
||
MOVEI STR,[ASCIZ! !] ;UNLESS WANT JUSTIFICATION
|
||
SKIPE JSTFLG ;THEN SPACE OVER
|
||
PUSHJ P,PUTSTR ;TO LINE UP TIMES
|
||
JRST ORUN3 ;AND GO BACK TO END OF LOOP
|
||
|
||
|
||
SUBTTL ROUTINE TO PUT OUT "MESS"ARG1/ARG2=NN%
|
||
; EXPECTS MESSAGE ADDR IN REG. STR
|
||
; AND ARGS IN ARG: AND ARGS+1, ARG PRESERVED, ARG+1 DESTROYED
|
||
|
||
PUTMES: PUSHJ P,PUTSTR ;PUT OUT MESSAGE
|
||
MOVE T1,ARGS ;GET FIRST ARG
|
||
PUSHJ P,MSOUT ;OUTPUT IT
|
||
MOVE T1,ARGS ;FETCH FIRST ARG AGAIN
|
||
IMULI T1,^D1000 ;1ST ARG * 1000 (AVOID FL. PT)
|
||
IDIV T1,ARGS+1 ;DIVIDE BY 2ND ARG
|
||
ADDI T1,5 ;ROUND IT
|
||
IDIVI T1,^D10 ;AND MAKE 2 PLACE PERCENT
|
||
EXCH T1,ARGS+1 ;STASH IT FOR NOW
|
||
TYPEC (/) ;DIVIDE SIGN
|
||
PUSHJ P,MSOUT ;OUTPUT THE 2ND NUMBER
|
||
TYPEC (=) ;NOW THE =NN%
|
||
MOVE T1,ARGS+1 ;PICK UP PERCENT
|
||
CAILE T1,^D100 ;IF MORE THAN 100%, SET IT TO THAT
|
||
MOVEI T1,^D100 ;ERROR PROB. DUE TO SLOWNESS IN TRACK
|
||
PUSHJ P,DECOUT
|
||
MOVEI CHR,"%" ;THATS THE PERCENT SIGN
|
||
PJRST PUTCHR ;OUTPUT IT AND RETURN FROM THERE
|
||
|
||
|
||
|
||
SUBTTL OUTDBF, OUTDBI, OUTDBX - OUTPUT THE SYSDAT DATA BLOCK
|
||
|
||
; ROUTINE TO TAKE A DATA BLOCK AND OUTPUT IT AS
|
||
;
|
||
; "LABEL"
|
||
;
|
||
; R1 - R2 XX%
|
||
; .
|
||
; .
|
||
; ETC
|
||
;
|
||
; "AVERAGE VALUE : " NN
|
||
;
|
||
; ROUTINE EXPECTS SYSDAT TABLES TO BE SET UP, T.LOOK TO CONTAIN
|
||
; NUMBER OF LOOKS TAKEN AND EXPECTS J TO BE SET TO CURRENT DATA ITEM
|
||
|
||
; ROUTINE HAS THREE ENTRY POINTS:
|
||
; ENTRY POINT ONE: 'OUTDBF' OUT DATA BLOCK FLASH
|
||
; OUTPUTS RANGE USING ALL DATA POINTS IN THE BLOCK
|
||
; ENTRY POINT TWO: 'OUTDBI' OUT DATA BLOCK INCREMENTAL
|
||
; THIS ENTRY POINT IS USED IN CONJUNCTION WITH THE
|
||
; ROUTINES MEASURING SOMETHING AS A FUNCTION OF UNITS PER
|
||
; ELAPSED TIME. USER ROUTINES USING 'OUTDBI' SHOULD
|
||
; BE SET UP VIA DBCORE
|
||
; DBCORE SETS UP A DATA BLOCK OF SIZE '# OF LOOKS/REPORT'+1
|
||
; THE ACTION IS THAT STONXT, OR THE USER ROUTINE IS USED TO PLACE
|
||
; CURRENT CUMMALATIVE VALUE IN CURRENT DB CELL+1. WHEN
|
||
; OUTDBI IS CALLED THE FIRST TIME, IT IGNORES CELL ONE, FROM
|
||
; THEREAFTER, IT USES ALL CELLS. AFTER REPORTING, IT PLACES THE VALUE
|
||
; IN THE LAST DB CELL INTO THE FIRST DB CELL. THAT IS THE
|
||
; "EXTRA CELL" IS WRAPPED AROUND
|
||
; ENTRY POINT THREE: 'OUTDBX' OUT DATA BLOCK EXTRODINARY
|
||
; SAME AS OTHERS AS FAR AS OUTPUT GOES, DIFFERENCE
|
||
; IS THAT ADJPTR AND ADJLOK MUST BE SET UP BEFORE THE CALL
|
||
; THIS ALLOWS A USER ROUTINE TO MAKE THESE POINTERS REFERENCE
|
||
; ANY ARBITRARY DATA AREA AND CALL OUTDBX TO DO THE STANDARD
|
||
; OUTPUT.
|
||
|
||
|
||
;
|
||
|
||
|
||
IFN SYS, <
|
||
|
||
OUTDBF: HRRZ N1,TAB.P(J) ;PICK UP TABLE PTR TO DB
|
||
MOVE N2,T.LOOK ;ALSO GET # LOOKS
|
||
JRST OUTDBX ;DEPOSIT AND GO SORT
|
||
|
||
OUTDBI: HRRZ N1,TAB.P(J) ;GET DB PTR
|
||
MOVE N2,T.LOOK ;AND DATA BASE LENGTH -1
|
||
TXNE SW,SYSD.I ;
|
||
AOJ N1, ;INCREMENT BASE ADDRESS
|
||
;TO IGNORE 1ST VALUE
|
||
;IF FIRST REPORT
|
||
TXNE SW,SYSD.I ;IF FIRST REPORT, VALUE IN
|
||
SOJ N2, ;IF FIRST REPORT THEN LOOKS =LOOKS-1
|
||
SETOM ROTFLG ;TURN ON ROTATE VALUE FLAG
|
||
SKIPA ;AND SKIP TURNING IT OFF
|
||
OUTDBX: SETZM ROTFLG ;TURN OFF ROTATE VALUE FLAG
|
||
MOVEM N1,ADJPTR ;STORE ADJUSTED PTR
|
||
MOVEM N2,ADJLOK ;AND ADJUSTED LOOKS
|
||
TRACEH (ITM) ;[*]PUT THE HEADER
|
||
IFN FTTRC,<
|
||
PUSHJ P,ITMCOD ;PUT OUT ASCII CODE
|
||
> ; END OF FTTRC CONDITIONAL
|
||
TRACEM BAUXWD ;AND AUXILLIARY ID WORD
|
||
SETZM SUMSQ ;CLEAR SUM OF SQUARES
|
||
|
||
HRRZ N3,ADJPTR ;PICK UP POINTER TO DATA BLOCK
|
||
ADD N3,ADJLOK ;GIVES N3 LAST ADDR IN BLOCK
|
||
HRRZ N1,ADJPTR ;N1 GETS BEGINNING ADDRESS
|
||
CSRT1: MOVEI N2,1(N1) ;N2 CONTAINS ADDR 1 GREATER N1
|
||
|
||
CSRT2: MOVE T1,(N1) ;GET DATA IN BLOCK
|
||
CAMG T1,(N2) ;DATA IN ORDER?
|
||
JRST NOEXCH ;YES, SKIP EXCHANGE
|
||
EXCH T1,(N2) ;EXCHANGE TWO ITEMS
|
||
EXCH T1,(N1)
|
||
NOEXCH: CAIGE N2,(N3) ;DONE WITH INNER LOOP?
|
||
AOJA N2,CSRT2 ;NO,GO BACK
|
||
CAIGE N1,-1(N3) ;YES,DONE WITH OUTER LOOP?
|
||
AOJA N1,CSRT1 ;NO, GO BACK
|
||
|
||
;NOW DATA IS SORTED, OUTPUT LABEL THEN DATA
|
||
|
||
SKIPE STR,TAB.N(J) ;FETCH ADDR OF LABEL
|
||
PUSHJ P,PUTSTR ;OUTPUT IT IF NOT NULL
|
||
TXNE SW,R.SUMM ;SUMMARY ONLY?
|
||
JRST SKPLB1 ;YES
|
||
PUSHJ P,CRLF ;GIVE CR-LF
|
||
PUSHJ P,CRLF ;AND ANOTHER
|
||
TYPES (< VALUE FREQUENCY
|
||
|
||
>)
|
||
SKPLB1: SETZ GT, ;GT USED TO TOTAL ALL POINTS
|
||
SETZB T4,DONFLG ;ZERO INDEX AND DONE FLAG
|
||
SKIPA N1,ADJPTR ;MAKE N1 POINT TO START OF DB
|
||
COUT: MOVE N1,ARGS ;RESTORE N1 AFTER PRINTING
|
||
MOVE N2,(N1) ;GET A READING
|
||
MOVE T2,TAB.V(J) ;GET VARIANCE OF THIS ITEM
|
||
IDIV N2,T2 ;GET TO A BOUNDARY
|
||
IMUL N2,T2 ;IE INT*VARIANCE
|
||
MOVEM N2,LL ;STORE AS LOWER LIMIT
|
||
MOVE N3,TAB.V(J) ;VARIANCE
|
||
ADD N3,N2 ;[70]THATS THE UPPER LIMIT
|
||
SOJ N3, ;PLUS 1
|
||
MOVEM N3,UL ;AND STORE IT TOO
|
||
SETZ T3 , ;T3 USED AS TMP CNTER
|
||
|
||
COUT2: MOVE N2,(N1) ;GET A POINT
|
||
CAMLE N2,N3 ;[70]FALL BELOW LIMIT?
|
||
JRST CBRK ;NO,SO PRINT AND BREAK
|
||
MOVEI T3 ,1(T3 ) ;INCREMENT
|
||
MOVEI T4 ,1(T4 ) ;BOTH COUNTERS
|
||
ADD GT,N2 ;ADD INTO GRAND TOTAL
|
||
IMUL N2,N2 ;ADD IT
|
||
ADDM N2,SUMSQ ;AND SUM THE SQUARES
|
||
CAMLE T4 ,ADJLOK ;DONE?
|
||
SOSA DONFLG ;MARK AS DONE, AND SKIP
|
||
AOJA N1,COUT2 ;NO,GET ANOTHER POINT
|
||
CBRK: IMULI T3 ,^D1000 ;GET PERCENT OF TOTAL
|
||
MOVE N2,T3 ;DO IDIV UNCRAZY
|
||
MOVE N3,ADJLOK ;DIVIDE THIS COUNT/TOTAL LOOKS
|
||
IDIVI N2,1(N3) ;TO GET PERCENT OF TOTAL
|
||
MOVEM N1,ARGS ;SAVE DB PTR
|
||
MOVEM N2,VAL ;OUTPUT ROUTINES USE N1-N3
|
||
TXNE SW,R.SUMM ;ONLY SUMMARY?
|
||
JRST SKPLB2 ;YES
|
||
TRACEH (FRQ) ;[*]FREQ BLOCK HEADER
|
||
MOVE T1,LL ;OUTPUT LOWER LIMIT-UPPER LIMIT
|
||
TRACE ;GIVE TRACE THE LOWER LIMIT
|
||
PUSHJ P,DECOUT
|
||
PUSHJ P,TAB ;TAB
|
||
TYPEC (-) ;DASH
|
||
PUSHJ P,TAB
|
||
MOVE T1,UL ;UPPER LIMIT
|
||
TRACE ;GIVE TRACE THE UPPER LIMIT
|
||
CAME T1,LL ;DONT PRINT IF SAME AS LOWER
|
||
PUSHJ P,DECOUT ;OUT
|
||
PUSHJ P,TAB ;TAB
|
||
MOVE T1,VAL ;ACTUAL PERCENT
|
||
MOVEI CHR," " ;MAKE DECIMAL POINT LINE UP
|
||
CAIGE T1,^D1000 ;FOR PERCENT LESS THAN 100%
|
||
PUSHJ P,PUTCHR ;ONE LEADING SPACE
|
||
CAIGE T1,^D100 ;FOR PERCENT LESS THAN 10
|
||
PUSHJ P,PUTCHR ;USE ANOTHER LEADING SPACE
|
||
IFN FTTRC, <
|
||
PUSHJ P,BFP10 ;IF DOING TRACE,GIVE IT FP FORMAT
|
||
> ;END OF IFN FTTRC
|
||
PUSHJ P,SCD10 ;SCALED DECIMAL, DIVIDE BY 10.
|
||
TYPEC (%) ;ITS A PERCENT
|
||
PUSHJ P,CRLF ;FOLLOWED BY CRLF
|
||
SKPLB2: SKIPL DONFLG ;DONE?
|
||
JRST COUT ;NO
|
||
TRACEH (SUM) ;[*]AND PUT THE SUMMARY BL HEADER
|
||
TYPES (<
|
||
MEAN VALUE FOR >)
|
||
MOVE T1,T4 ;OUTPUT SAMPLES
|
||
TRACE ;PUT TO TRACE, THE NUMBER OF SAMPLES
|
||
PUSHJ P,DECOUT
|
||
TYPES (< SAMPLES= >)
|
||
MOVE N1,GT ;GRAND TOTAL
|
||
IMULI N1,^D100 ;DONT LOSE PRECISION
|
||
IDIVI N1,(T4 ) ;DIVIDE BY NR OF SAMPLES
|
||
MOVE T1,N1 ;T1 GETS NUMBER *100
|
||
IFN FTTRC, <
|
||
PUSHJ P,BFP100 ;GIVE TRACE GOOD FLT. PT. FORMAT
|
||
>; END OF IFN FTTRC
|
||
PUSHJ P,SCD100 ;SCALED DECIMAL OUT
|
||
MOVE N1,GT ;PICK UP SUM
|
||
MUL N1,N1 ;SQUARE IT
|
||
DIV N1,T4 ;DIVIDE BY NR. POINTS
|
||
MOVE N2,SUMSQ ;SUM OF POINT SQUARES
|
||
SUB N2,N1 ;N2 GETS NR. WE WANT ROOT OF
|
||
IMULI N2,^D100 ;DONT LOSE PRECISION
|
||
IDIV N2,T4
|
||
LSH N3,1
|
||
JUMPE N3,.+3 ;DONT ROUND UP ZERO
|
||
CAML N3,N2 ;ROUND UP
|
||
ADDI N2,1
|
||
MOVEM N2,N3 ;N3 GETS NUMBER WE WANT ROOT OF
|
||
PUSHJ P,ISQRT ;GET ROOT OF NR IN N3
|
||
TYPES (<; STD. DEVIATION= >)
|
||
|
||
IFN FTTRC, <
|
||
PUSHJ P,BFP10 ;GIVE TRACE FLOATING POINT FORMAT
|
||
SETZM BAUXWD ;ALSO,ZERO OUT BINARY AUX WORD
|
||
> ;END OF IFN FTTRC
|
||
PUSHJ P,SCD10 ;PRINT
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,CRLF ;GIVE A FEW CARRIAGE RETURN LINE-FEEDS
|
||
PUSHJ P,CRLF
|
||
TXZN SW,OPT.F ;NEVER ROLL FOR FORCED LOOK
|
||
SKIPN ROTFLG ;WANT "EXTRA CELL" TO CELL 1?
|
||
JRST OUTEND ;NO SO SKIP IT
|
||
HRRZ N1,ADJPTR ;GET DB PTR
|
||
ADD N1,ADJLOK ;AND LENGTH
|
||
MOVE N1,1(N1) ;GET EXTRA CELL CONTENTS
|
||
TXNE SW,SYSD.I ;IF WE DIDDLED BASE PTR UP ONE
|
||
SOS ADJPTR ;PUT IT BACK TO BASE OF CELL
|
||
MOVEM N1,@ADJPTR ;AND PUT IT AWAY
|
||
OUTEND: POPJ P, ;AND RETURN
|
||
;CALLED WITH POS ARG IN N3, RESULT RETURNED IN T1, USES N2
|
||
; THIS ROUTINE STOLEN FROM SYSTAT
|
||
|
||
ISQRT: SETZB T1,N2 ;ZERO ANSWER TO START
|
||
JUMPLE N3,CPOPJ ;IF ARG IS .LE. 0
|
||
TRO N3,1 ;FORCE SOME BITS ON TO TERMINATE
|
||
ISQ1: ASH T1,1 ;MOVE TO NEXT BIT
|
||
CAMG N2,T1 ;SEE IF REMAINDER IS BIG
|
||
JRST ISQ2 ;NO--LOOP ON
|
||
SUB N2,T1 ;DECREASE REMAINDER
|
||
SUBI N2,1 ; ..
|
||
TRO T1,2 ;INCREASE RESULT
|
||
ISQ2: LSHC N2,2 ;SHIFT REMAINDER TWO BITS
|
||
JUMPN N3,ISQ1 ;LOOP UNTIL DONE
|
||
ASH N2,-1 ;BACK OFF REMAINDER
|
||
JUMPE N2,CPOPJ
|
||
CAML N2,T1 ;SEE IF ROUNDING NEEDED
|
||
ADDI T1,1 ;YES--INCREASE RESULT
|
||
POPJ P, ;RETURN
|
||
|
||
; OUTPUT THE INDEXED ITEM IN TAB.C IN ASCII FORM TO TRACE FILE
|
||
|
||
ITMCOD: MOVE T2,TAB.C(J) ;GET IT
|
||
MOVEI T3,5 ;FIVE LETTERS
|
||
LSHC T1,6 ;GET 1 LETTER
|
||
LSH T1,1 ;MAKE ROOM FOR 7TH BIT
|
||
SOJG T3,.-2 ;REPEAT SIX TIMES
|
||
ADD T1,[BYTE (7)" "," "," "," "," "];CONVERT TO 7 BIT
|
||
TRACE ;OUTPUT IT TO TRACE FILE
|
||
POPJ P, ;AND RETURN
|
||
|
||
> ; END OF CONDITIONAL AROUND OUTDBI & ISQRT ROUTINE
|
||
|
||
|
||
SUBTTL ROUTINE TO TYPE OUT THE UNIT TYPES
|
||
;
|
||
; INPUT IS AC GT CONTAINING THE DSKCHR BITS
|
||
|
||
UNITYP: SETZ T1, ;ASSUME UNKNOWN TYPE OF CONTROLLER
|
||
LDB T2,[POINTR(GT,DC.CNT)] ;PICK OUT CONTROLLER INFO
|
||
CAIG T2,.DCCRP ;MAKE RANGE CHECK
|
||
MOVE T1,[ EXP 0 ;0=NOT USED
|
||
SIXBIT /RC10/ ;1=RC10
|
||
SIXBIT /RP10/ ;2=RP10
|
||
SIXBIT /RH10/ ;3=RH10 (FIXED HEAD)
|
||
SIXBIT /RH10/ ;4=RH10 (MULTIPLE HEAD)
|
||
SIXBIT /RH20/](T2) ;5=RH20 (MULTIPLE HEAD)
|
||
PUSHJ P,SIXPNT ;PRINT THE CONTROLLER TYPE
|
||
TYPES (< >) ;TAB OVER
|
||
SETZ T1, ;ASSUME UNKNOWN DISK TYPE
|
||
LDB T3,[POINTR(GT,DC.UNT)] ;GET UNIT INFO
|
||
CAIG T3,.DCUR6 ;MAKE RANGE CHECK
|
||
JRST @[EXP DU.0,DU.1,DU.2](T3);DISPATCH ON UNIT TYPE
|
||
UNIT.1: PUSHJ P,SIXPNT ;PRINT UNIT TYPE
|
||
TYPES (< >) ;TAB OVER
|
||
LDB T1,[POINTR(GT,DC.DCN)] ;GET CHANNEL NUMBER
|
||
PUSHJ P,DECOUT ;PRINT IT
|
||
PJRST TAB ;RETURN,TABBING OVER
|
||
|
||
DU.0: MOVE T1,[SIXBIT/RD10/] ;ASSUME DRUM
|
||
CAXN T2,.DCCFS ;IS THIS ON A FIXED HEAD RH10?
|
||
MOVE T1,[SIXBIT/RS04/] ;YES,ADJUST
|
||
CAXN T2,.DCCRP ;IS THIS ON A MULTI-HEAD RH10?
|
||
MOVE T1,[SIXBIT/RP04/] ;YES,MUST BE RP04
|
||
CAXN T2,.DCCRN ;RP20?
|
||
MOVE T1,[SIXBIT/RP20/] ;YES
|
||
JRST UNIT.1 ;PRINT,CONTINUE
|
||
|
||
DU.1: MOVE T1,[SIXBIT/RM10B/] ;DRUM?
|
||
CAXN T2,.DCCDP ;MAYBE, SO SEE IF THIS IS A PACK
|
||
MOVE T1,[SIXBIT/RP02/] ;COULD BE RP02
|
||
CAXN T2,.DCCRP ;CHECK FOR RP06,SINCE IT LOOKS
|
||
MOVE T1,[SIXBIT/RP06/] ;LIKE AN RP05
|
||
JRST UNIT.1 ;
|
||
|
||
DU.2: MOVE T1,[SIXBIT/RP03/] ;ASSUME RP03
|
||
CAXN T2,.DCCRP ;UNLESS THIS IS AN RH10 CONTROLLER
|
||
MOVE T1,[SIXBIT/RP06/] ;WHICH MEANS ITS AN RP06
|
||
JRST UNIT.1 ;CONTINUE
|
||
SUBTTL UTILITY INPUT/OUTPUT ROUTINES
|
||
|
||
; NUMERIC OUTPUT ROUTINES
|
||
|
||
DECOUT: SKIPA N3,[^D10] ;DECIMAL OUTPUT
|
||
OCTOUT: MOVEI N3,10 ;OCTAL OUTPUT ROUTINE
|
||
MOVE N1,T1 ;GET NUMBER TO BE OUTPUT
|
||
JUMPGE N1,ONL ;IF NEGATIVE, SAY SO
|
||
TYPEC (-) ;BY MINUS SIGN
|
||
MOVMS N1 ;AND MAKE IT THE MAGNITUDE
|
||
ONL: IDIV N1,N3 ;GET A DIGIT
|
||
HRLM N2,(P) ;STORE IT
|
||
SKIPE N1 ;END?
|
||
PUSHJ P,ONL ;NO
|
||
HLRZ CHR,(P) ;GET DIGIT BACK
|
||
ADDI CHR,"0" ;ASCIISIZE IT
|
||
PJRST PUTCHR ;PUT OUT DIGIT
|
||
|
||
|
||
; SCALED DECIMAL OUTPUT ROUTINES
|
||
|
||
SCD10: SKIPA N3,[^D10] ;SCALED DOWN BY 10
|
||
SCD100: MOVEI N3,^D100 ;SCALED DOWN BY 100
|
||
PUSH P,T1 ;SAVE T1 ACROSS CALL
|
||
MOVE N1,T1 ;READY FOR OUTPUT
|
||
IDIV N1,N3 ;DIVIDE
|
||
PUSH P,N2 ;SAVE REMAINDER
|
||
MOVE T1,N1 ;READY FOR PRINT
|
||
PUSHJ P,DECOUT ;PRINT IT
|
||
TYPEC (.) ;PRINT THE DOT
|
||
POP P,T1
|
||
PUSHJ P,DECOUT ;PRINT FRACTION TOO
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
|
||
|
||
; NUMERIC INPUT ROUTINES
|
||
|
||
DECIN: SKIPA N3,[12] ;DECIMAL INPUT ROUTINES
|
||
OCTIN: MOVEI N3,10 ;OCTAL INPUT
|
||
SETZ N2,
|
||
INL: PUSHJ P,GETCHR ;GET A CHARACTER
|
||
CAIL CHR,"0" ;IF LESS THAN ZERO
|
||
CAILE CHR,"0"-1(N3) ;OR MORE THAN BASE
|
||
JRST ENDNI ;THEN END
|
||
IMUL N2,N3 ;MULTIPLY WHAT WE HAVE
|
||
ADDI N2,-"0"(CHR) ;AND ADD NEW STUFF
|
||
JRST INL ;GO BACK FOR MORE
|
||
ENDNI: MOVE T1,N2 ;RETURN # IN T1
|
||
POPJ P,
|
||
SUBTTL TOKEN INPUT ROUTINE
|
||
; ROUTINE TO RETURN IN T1 A SIXBIT TOKEN
|
||
; AND IN THE LASTOK BLOCK THE UNNABREVIATED ASCIZ VERSION
|
||
; OF THE INPUT
|
||
; UPON RETURN THE CHARACTER THAT DELIMITED THE TOKEN IS IN CHR
|
||
; IE. WAS OUTSIDE ASCII 0-9,A-Z
|
||
;
|
||
|
||
TOKEN: PUSH P,T2 ;SAVE T2
|
||
MOVE STR,[POINT 7,LASTOK] ;POINT TO BLOCK
|
||
MOVE N3,[POINT 6,T1] ;POINT TO T1
|
||
SETZB T2,T1 ;CLEAR
|
||
MOVEI N1,6 ;NUMBER OF CHR TO T1
|
||
MOVEI N2,MAXTOK ;MAXIMUM TO TAKE INTO LASTOK
|
||
TOKE1: IDPB T2,STR ;ZERO TO DELIMIT STRING
|
||
PUSHJ P,GETCHR ;GET A CHARACTER
|
||
CAIL CHR,"0" ;CHECK FOR DELIMITED
|
||
CAILE CHR,"Z"
|
||
JRST TOKE2 ;.LT.0 OR .GT. Z
|
||
CAILE CHR,"9"
|
||
CAIL CHR,"A"
|
||
TXNE SW,BRK
|
||
JRST TOKE2 ;BREAK OR BETWEEN 9 AND A
|
||
SOSLE N2
|
||
DPB CHR,STR ;DEPOSIT IN LASTOK IF ROOM
|
||
SOJL N1,TOKE1 ;AND IN T1 IF ROOM
|
||
SUBI CHR,40 ;SIXBIT IT
|
||
IDPB CHR,N3 ;AND DEPOSIT
|
||
JRST TOKE1 ;GET NEXT CHARACTER
|
||
|
||
TOKE2: POP P,T2 ;RESTORE T2
|
||
POPJ P, ;AND RETURN
|
||
SUBTTL ROUTINE TO INPUT A FILESPEC
|
||
|
||
FILSPC: MOVE T1,[XWD PTHADR,PTHADR+1] ;CLEAR PATH
|
||
SETZM PTHADR
|
||
BLT T1,PTHADR+PTHLEN-1
|
||
PUSHJ P,TOKEN ;GET FIRST TOKEN
|
||
CAIE CHR,":" ;FIRST DEVICE COMES?
|
||
JRST NODEV ;NO
|
||
JUMPE T1,E$$NDI ;NULL DEVICE ILLEGAL
|
||
MOVEM T1,FILDEV ;SET IT
|
||
PUSHJ P,FENCHK ;SEE IF END
|
||
PUSHJ P,TOKEN ;GET NEXT TOKEN
|
||
NODEV: SKIPE T1 ;DONT DEPOSIT NULL FILENAME
|
||
MOVEM T1,FILNAM ;
|
||
CAIN CHR,"[" ;PPN?
|
||
JRST GPPN ;YES, GET IT
|
||
PUSHJ P,FENCHK ;CHECK FOR END
|
||
CAIE CHR,"." ;EXT NEXT?
|
||
JRST FILERR ;NO,ERROR
|
||
PUSHJ P,TOKEN ;GET NEXT TOKEN
|
||
MOVEM T1,FILEXT ;STORE
|
||
PUSHJ P,FENCHK ;SEE IF DONE
|
||
CAIE CHR,"[" ;PPN?
|
||
JRST FILERR ;NO
|
||
GPPN: PUSHJ P,OCTIN ;GET PRJ
|
||
JUMPE T1,[ CAIN CHR,"-"
|
||
JRST DEFPATH ;SET DEFAULT PATH
|
||
CAIE CHR,"," ;DEF. PPN?
|
||
JRST FILERR
|
||
HLRZ T1,MYPPN ;YES
|
||
JRST .+1] ;CONTINUE
|
||
HRLZM T1,FILPPN ;STORE
|
||
CAIE CHR,"," ;COMMA?
|
||
JRST FILERR ;NO
|
||
PUSHJ P,OCTIN ;GET PRG NR.
|
||
SKIPN T1 ;DEFAULT?
|
||
MOVE T1,MYPPN ;YES
|
||
HRRM T1,FILPPN ;STASH
|
||
CAIN CHR,"]" ;OK?
|
||
POPJ P, ;RETURN
|
||
CAIE CHR,"," ;SFDS FOLLOW
|
||
JRST E$$BPS ;NO, BAD PATH SPECIFIED
|
||
MOVE T1,FILPPN ;POINT TO PATH BLOCK
|
||
MOVEM T1,PTHADR+2 ;
|
||
MOVEI T1,PTHADR
|
||
MOVEM T1,FILPPN
|
||
MOVEI T2,1 ;1ST SFD
|
||
SFDLP: PUSHJ P,TOKEN ;GET SFD NAME
|
||
JUMPE T1,E$$NSI ;NULL SFD ILLEGAL
|
||
CAILE T2,MAXSFD ;ROOM?
|
||
JRST E$$TMS ;TOO MANY SFDS
|
||
MOVEM T1,PTHSFD-1(T2) ;PLACE
|
||
CAIN CHR,"]" ;DONE?
|
||
POPJ P, ;YES
|
||
CAIE CHR,"," ;COMMA?
|
||
JRST E$$BPS ;NO,BAD PATH
|
||
AOJA T2,SFDLP ;GET NEXT SFD
|
||
|
||
|
||
DEFPATH: MOVX T1,-1 ;GET DEFAULT PATH
|
||
MOVEM T1,PTHADR ;FROM MONITOR
|
||
MOVE T1,[XWD PTHLEN,PTHADR] ;SET UP FOR PATH. UUO
|
||
PATH. T1,
|
||
JRST E$$PUF ;PATH UUO FAILURE
|
||
PUSHJ P,GETCHR ;SHOULD END STRING WITH ]
|
||
CAIE CHR,"]" ;END CORRECTLY?
|
||
JRST E$$BPS ;NO
|
||
MOVEI T1,PTHADR ;MAKE FILPPN POINT TO PATH
|
||
HRRZM T1,FILPPN
|
||
|
||
|
||
|
||
|
||
FENCHK: CAIE CHR,"=" ;END IS "="?
|
||
TXNE SW,BRK ;OR BREAK?
|
||
TXOA SW,REGET ;YES,REGET IT FLAG ON AND
|
||
POPJ P, ;NOT END RETURN
|
||
PJRST TPOPJ ;BALANCE STACK AND RETURN
|
||
;; ERROR MESSAGES FOR FILSPC
|
||
|
||
|
||
$ERROR(EF.FAT!EF.RST,NDI,NULL DEVICE NAME IS ILLEGAL)
|
||
$ERROR(EF.FAT!EF.RST,BPS,BAD PATH SPECIFICATION)
|
||
$ERROR(EF.FAT!EF.RST,TMS,TOO MANY SFDS SPECIFIED)
|
||
$ERROR(EF.FAT!EF.RST,PUF,PATH UUO FAILED)
|
||
$ERROR(EF.FAT!EF.RST,NSI,NULL SFD ILLEGAL)
|
||
FILERR: $ERROR(EF.FAT!EF.RST,FSE,FILE SPECIFICATION SYNTAX ERROR)
|
||
SUBTTL LINE MANIPULATION ROUTINES
|
||
; ROUTINE TO EAT REST OF LINE
|
||
|
||
EATLIN: TXNE SW,BRK ;BREAK SEEN?
|
||
POPJ P, ;YES, SO RETURN
|
||
PUSHJ P,GETCHR ;GET NEXT CHARACTER
|
||
PJRST EATLIN ;AND TRY AGAIN
|
||
|
||
|
||
; ROUTINE TO GET A CHARACTER FROM THE TELETYPE
|
||
|
||
GETCHR: TXZN SW,REGET ;CHECK FOR REGET
|
||
ILDB CHR,COMPTR ;GET A CHARACTER
|
||
TXZA SW,T.FLG ;REGULAR ENTRY
|
||
GETCH2: TXO SW,T.FLG ;RUNNING COMMAND ENTRY PT.
|
||
TXZ SW,BRK ;SHUT OFF BREAK INDICATOR
|
||
CAIN CHR,32 ;IF IT IS ^Z
|
||
EXIT 1, ;TEMPORARILY EXIT
|
||
CAILE CHR,140 ;SEE IF ITS LOWER CASE
|
||
SUBI CHR,40 ;CONVERT TO UPPER CASE
|
||
CAIL CHR,12 ;IF NOT LF,VT OR FF
|
||
CAILE CHR,14 ;THEN SKIP BREAK SET
|
||
CAIN CHR,33 ;CHK FOR ALT. MODE
|
||
JRST BREAKX ;ELSE TAKE BREAK EXIT
|
||
CAIE CHR,";" ;ALLOW COMMENTS IN THE COMMAND
|
||
CAIN CHR,"!" ;STRINGS BY TURNING ON BREAK
|
||
JRST BREAKX ;HERE
|
||
CAIG CHR," " ;FINALLY , SKIP BLANKS AND
|
||
JRST SEECHK ;CONTROL CHARACTERS
|
||
POPJ P, ;RETURN
|
||
BREAKX: TXOA SW,BRK ;SET BREAK
|
||
SEECHK: TXZE SW,T.FLG ;CHECK FOR SPECIAL CASE
|
||
POPJ P, ;RETURN
|
||
JRST GETCHR ;NOT THIS TIME
|
||
|
||
|
||
; ROUTINE TO PRINT OUT VALUE IN T1 AS SO MANY K OR P
|
||
; DEPENDING ON PROCESSOR WE ARE RUNNING ON. OUTPUT IS "NNK" OR "NNP"
|
||
;
|
||
MEMPNT: MOVE N2,T1 ;CONVERT USING GETCOR'S ROUTINE
|
||
PUSHJ P,KIKA ;SINCE ITS HANDY
|
||
MOVE T1,N2 ;PRINT IT OUT
|
||
PUSHJ P,DECOUT ;PRINT IT OUT AS DECIMAL
|
||
MOVEI CHR,"K" ;PRETEND ITS A KA
|
||
TXNE SW,KI.10 ;UNLESS ITS A KI
|
||
MOVEI CHR,"P" ;THEN ITS PAGES
|
||
PJRST PUTCHR ;OUTPUT CHAR AND RETURN
|
||
|
||
|
||
; ROUTINE TO TYPE A PPN AS "[PROJ,PROG]"
|
||
|
||
PPNTYP: PUSH P,T1 ;SAVE T1
|
||
TYPEC ([) ;OPEN BRACKET
|
||
HLRZS T1 ;PROJECT NR.
|
||
PUSHJ P,OCTOUT
|
||
TYPEC (<,>) ;COMMA
|
||
HRRZ T1,0(P) ;GET PROGRAMMER NR.
|
||
PUSHJ P,OCTOUT
|
||
TYPEC (]) ;CLOSE BRACKET
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
|
||
; SIXBIT OUTPUT ROUTINES
|
||
SIXPNT: TXZA SW,T.FLG ;CLEAR T.FLG
|
||
SIXPNB: TXO SW,T.FLG ;SET SO PRINT BLANKS
|
||
|
||
MOVEI N1,6 ;NUMBER OF CHARS
|
||
MOVE N2,[POINT 6,T1] ;POINTER TO T1
|
||
SIXP2: ILDB CHR,N2 ;GET A BYTE
|
||
TXNN SW,T.FLG ;IF WANT BLANKS
|
||
JUMPE CHR,.+3 ;SKIP BLANKS
|
||
ADDI CHR,40 ;MAKE ASCII
|
||
PUSHJ P,PUTCHR ;AND PRINT
|
||
SOJG N1,SIXP2 ;MORE TO DO
|
||
POPJ P, ;NO
|
||
|
||
|
||
|
||
|
||
|
||
; ROUTINE TO PRINT AN ASCIZ STRING
|
||
|
||
PUTSTR: HRLI STR,(POINT 7,0) ;MAKE A BYTE POINTER
|
||
P1: ILDB CHR,STR ;GET A BYTE
|
||
JUMPE CHR,CPOPJ
|
||
PUSHJ P,PUTCHR ;OUTPUT THE CHARACTER
|
||
JRST P1 ;AND GO BACK FOR MORE
|
||
|
||
|
||
SUBTTL ROUTINE TO LOAD A COMMAND LINE FROM TTY OR TMPCOR
|
||
|
||
GETLIN: MOVEI T1,<COMMAX+4>/5 ;GET CORE FOR COMMAND
|
||
PUSHJ P,ASSCOR ;GET IT
|
||
GTLIA: HRLI T1,(POINT 7,0) ;MAKE IT A BYTE POINTER
|
||
MOVEM T1,COMPTR
|
||
SETZB T2,CHR ;CLEAR COUNT AND CHR
|
||
MOVEI T2,COMMAX ;MAX LINE LENGTH
|
||
TXNE SW,INDFLG ;INDIRECT FILE?
|
||
JRST INDIR ;YES,GET IT
|
||
TTCALL 3,[ASCIZ/
|
||
*/]
|
||
GTLI1: CAILE CHR," " ;IF NOT SPACE
|
||
MOVEM CHR,LASCHR ;SAVE LAST CHAR
|
||
TTCALL 4,CHR ;GET CHARACTER
|
||
CAIN CHR,32 ;^Z?
|
||
JRST [EXIT 1,
|
||
MOVE T1,COMPTR
|
||
JRST GTLIA] ;YES
|
||
SOJGE T2,GTLI2
|
||
$ERROR(EF.FAT!EF.RST,LTL,COMMAND LINE TOO LONG)
|
||
GTLI2: CAIN CHR,"-" ;SAVE BP TO LAST DASH
|
||
MOVE T4,T1 ;IN CASE CONTINUATION
|
||
IDPB CHR,T1 ;STORE CHAR
|
||
CAIL CHR,12 ;CHECK FOR BREAK
|
||
CAILE CHR,14
|
||
CAIN CHR,33
|
||
JRST [MOVE T3,LASCHR ;CHECK FOR CONT
|
||
CAIE T3,"-"
|
||
POPJ P, ;ITS NOT
|
||
SETZM LASCHR ;PREVENT LOOP
|
||
TTCALL 1,["#"] ;PROMPT
|
||
ADDI T2,2
|
||
MOVEM T4,T1
|
||
JRST GTLI1] ;AND CONTINUE
|
||
JRST GTLI1 ;BACK FOR NEXT CHARACTER
|
||
|
||
|
||
|
||
;** PROCESS INDIRECT FILE
|
||
|
||
INDIR: OPEN TY,FILMOD ;OPEN UP FILE
|
||
JRST [$ERROR(EF.FAT!EF.RST,CID,CANT OPEN INDIRECT DEVICE)]
|
||
LOOKUP TY,FILNAM ;FROM SPEC BLOCK
|
||
JRST [ MOVE LUEB+1,FILEXT
|
||
PJRST LUPERR] ;ON LOOKUP ERROR
|
||
INBUF TY,1 ;
|
||
INDIN: SOSGE TYBUF+2 ;STANDARD INPUT
|
||
JRST [IN TY,
|
||
JRST INDIN
|
||
STATZ TY,74B23
|
||
CAIA
|
||
JRST INDEND
|
||
$ERROR(EF.FAT!EF.RST,ERI,ERROR READING INDIRECT FILE)]
|
||
ILDB CHR,TYBUF+1
|
||
JUMPE CHR,INDIN
|
||
CAIN CHR,32 ;^Z FORCES AN END
|
||
JRST INDEND
|
||
SOJL T2,E$$LTL ;ROOM FOR CHARACTER?
|
||
IDPB CHR,T1 ;STASH THE NON-ZERO CHR
|
||
JRST INDIN ;AND GET THE NEXT ONE
|
||
|
||
INDEND: MOVEI CHR,12 ;INSURE A BREAK CHARACTER
|
||
IDPB CHR,T1 ;STORE
|
||
TXZ SW,INDFLG ;DONE
|
||
POPJ P, ;DONE
|
||
|
||
|
||
SUBTTL PRESCAN FOR FILE SPEC DELIMITER
|
||
|
||
PRESCA: MOVE T1,COMPTR ;GET POINTER
|
||
PRESC1: PUSHJ P,GETCHR ;LOAD
|
||
CAIN CHR,"=" ;SEE IT?
|
||
JRST PRESC2 ;YES
|
||
TXNN SW,BRK ;
|
||
JRST PRESC1 ;NOT BREAK,GET NEXT
|
||
AOS (P) ;SKIP RETURN,BREAK BEFORE
|
||
PRESC2: MOVEM T1,COMPTR ;RESTORE POINTER
|
||
POPJ P, ;RETURN
|
||
SUBTTL MAIN CHARACTER OUTPUT ROUTINE
|
||
; ROUTINE TO OUTPUT A SINGLE CHARACTER
|
||
|
||
|
||
PUTCHR: TXNE SW,F.TTY ;SHOULD DO TTCALL?
|
||
JRST TYOUTP ; YES
|
||
TXNE SW,MD.TRC ;TRACING?
|
||
DBLOC1: POPJ P, ;YES SKIP ASCII OUTPUT
|
||
;NOTE: CHANGE POPJ TO JRST TYOUTP
|
||
;TO DEBUG. GETS DUPLICATE TO TTY
|
||
SOSG TYBUF+2 ;IF BUFFER NOT FULL
|
||
PUSHJ P,PUTBUF ;OUTPUT BUFFER
|
||
IDPB CHR,TYBUF+1 ;DEPOSIT CHARACTER
|
||
TXNE SW,DEVTTY ;IF TTY IS OUTPUT DEVICE
|
||
CAIE CHR,12 ;A LINE-FEED
|
||
SKIPA
|
||
PUSHJ P,PUTBUF ;OUTPUT THE BUFFER
|
||
PUTINC: AOJ CHRCNT, ;UPDATE CHARACTER COUNTER
|
||
POPJ P, ;GO HOME
|
||
|
||
PUTBUF: OUT TY, ;OUTPUT BUFFER
|
||
POPJ P, ;AND GO BACK
|
||
$ERROR(EF.FAT!EF.CON,OUT,<OUTPUT UUO FAILED (>)
|
||
GETSTS TY,T1 ;GET STATUS
|
||
JFCL
|
||
TRZ T1,17 ;SHUT OFF MODE BITS
|
||
PUSHJ P,OCTOUT ;AND PRINT IT
|
||
TTCALL 3,[ASCIZ/) ON DEVICE /] ;TELL USER THE DEVICE NAME
|
||
MOVE T1,FILDEV ;THAT WE SAVED EARLIER
|
||
PUSHJ P,SIXPNT
|
||
X$$OUT: PUSHJ P,CRLF
|
||
JRST RESTRT
|
||
|
||
TYOUTP: TTCALL 1,CHR ;TTY OUTPUT
|
||
PJRST PUTINC ;INCREMENT CURSOR POS. AND RETURN
|
||
|
||
|
||
SUBTTL DO THE BINARY OUTPUT FOR TRACE MODE
|
||
|
||
IFN FTTRC, <
|
||
|
||
BINWRT: TXNN SW,F.TTY ;IN ERROR MODE?
|
||
TXNN SW,MD.TRC ;OR NOT IN TRACE MODE?
|
||
POPJ P, ;RETURN
|
||
SOSG TYBUF+2 ;ROM IN BUFFER?
|
||
PUSHJ P,PUTBUF ;OUTPUT IT
|
||
IDPB T1,TYBUF+1 ;DEPOSIT WORD
|
||
POPJ P, ;DONE
|
||
|
||
|
||
SUBTTL ROUTINE TO DO THE FLOATING FOR THE TRACE PACKAGE
|
||
|
||
|
||
BFP10: SKIPA T2,[10.0] ;DIVIDE BY 10
|
||
BFP100: MOVE T2,[100.0] ;DIVIDE BY 100
|
||
CAIA ;SKIP
|
||
BFP001: MOVE T2,[1.0] ;JUST OUTPUT
|
||
PUSH P,T1 ;SAVE T1
|
||
PUSHJ P,FLOAT ;FLOAT T1
|
||
FDVR T1,T2 ;DIVIDE BY DESIRED FIGURE
|
||
PUSHJ P,BINWRT ;WRITE OUT THE RESULT
|
||
PJRST TPOPJ ;RESTORE T1
|
||
|
||
|
||
FLOAT: TXNE SW,KI.10 ;ON A SMART MACHINE?
|
||
JRST [FLTR T1,T1 ;YES, USE HARDWARE
|
||
POPJ P,]
|
||
PUSH P,T2 ;SAVE T2
|
||
HLRE T2,T1 ;THIS IS STOLEN FROM FOROTS
|
||
HLL T1,T2 ;
|
||
FSC T1,233 ;FLOAT THE LOW HALF OF THE INT
|
||
SKIPGE T1 ;FOR NEGATIVE NUMBERS
|
||
AOJE T2,FLTXIT ;DONE?
|
||
FSC T2,255 ;FLOAT THE HIGH PART
|
||
FADR T1,T2 ;COMBINE THE TWO PARTS
|
||
FLTXIT: POP P,T2 ;RESTORE T2
|
||
POPJ P, ;RETURN W/ T1 FLOATED
|
||
|
||
>; END OF IFN FTTRC
|
||
|
||
|
||
SUBTTL FIXED CHARACTER OUTPUT ROUTINES
|
||
; ROUTINE TO OUTPUT A ZERO
|
||
|
||
ZEROUT: MOVEI CHR,"0" ;GET ZERO
|
||
PJRST PUTCHR ;AND PRINT IT
|
||
; CURSOR POSITIONING ROUTINE
|
||
|
||
|
||
POSIT: MOVE N1,SPATAB(FP) ;GET MAX # CHARS THIS FIELD
|
||
CAMG N1,CHRCNT ;IF GT THAN USED
|
||
TDZA N1,N1 ;
|
||
SUB N1,CHRCNT ;GET CHARACTTERS NEEDED
|
||
AOJ N1, ;INSURE 1 BLANK BETWEEN FIELDS
|
||
PUSHJ P,SPACES ;AND SPACE OVER
|
||
AOJ FP, ;CORRECT FIELD POSITION
|
||
SETZ CHRCNT, ;ZERO CHARACTER COUNT
|
||
POPJ P, ;AND GO BACK
|
||
;SPACES OUTPUT ROUTINE
|
||
|
||
SPACES: MOVEI CHR," " ;A SPACE
|
||
JUMPE N1,CPOPJ ;MAYBE NONE
|
||
PUSHJ P,PUTCHR ;PRINT A BLANK
|
||
SOJG N1,.-1 ;IF MORE THAN 1
|
||
POPJ P,
|
||
|
||
; OUTPUT A TAB
|
||
TAB: MOVEI CHR," " ;A TAB
|
||
PJRST PUTCHR ;PRINT IT
|
||
|
||
|
||
;OUTPUT A CR-LF PAIR
|
||
CRLF: MOVEI CHR,15 ;CARRIAGE RETURN
|
||
PUSHJ P,PUTCHR
|
||
MOVEI CHR,12 ;LINE-FEED
|
||
PJRST PUTCHR
|
||
|
||
|
||
|
||
SUBTTL TABLE LOOKUP ROUTINE
|
||
|
||
; /TABLUK/ - LOOKS UP TOKEN IN AN UNORDERED TABLE
|
||
; DOES THE USUAL UNIQUENESS CHECKING.
|
||
; INPUT - T1/ SIXBIT TOKEN TO BE MATCHED
|
||
; T2/ IOWD POINTING TO TABLE
|
||
; OUTPUT - T1 / INDEX INTO THE TABLE
|
||
; RETURNS - CPOPJ WITH T1/0 MEANS NOT FOUND
|
||
; CPOPJ WITH T1=-1 MEANS AMBIGUOUS
|
||
; CPOPJ1 MEANS ALL IS OK, T1 HAS INDEX
|
||
|
||
TABLUK: HRRZM T2,SWIDX ;SAVE INITIAL ADDRESS
|
||
MOVE T3,T1 ;COPY INPUT TOKEN
|
||
SETO T4, ;INITIAL MASK IS NO BITS
|
||
LSH T3,6 ;GET RID OF ONE CHARACTER
|
||
LSH T4,-6 ;ADJUST MASK
|
||
JUMPN T3,.-2 ;REPEAT FOR ALL PRESENT CHRS
|
||
SETZ GT, ;CLEAR INDEX FOUND
|
||
TABL.3: MOVE T3,0(T2) ;GET AN ITEM
|
||
TDZ T3,T4 ;MASK OUT UNWANTED PART
|
||
CAMN T1,T3 ;IS THIS A MATCH?
|
||
JRST [ JUMPN GT,[ SETO T1, ;YES,CHECK FOR MULTIPLE
|
||
POPJ P,] ;MATCHES.
|
||
MOVEM T2,GT ;STORE INDEX
|
||
JRST .+1] ;AND CONTINUE
|
||
AOBJN T2,TABL.3 ;SEE IF MORE TO DO
|
||
TABL.4: HRRZ T1,GT ;GET ADDRESS OF MATCH
|
||
JUMPE T1,CPOPJ ;IF NONE FOUND,RETURN
|
||
SUB T1,SWIDX ;CONVERT TO OFFSET
|
||
JRST CPOPJ1 ;AND TAKE GOOD RETURN
|
||
SUBTTL ERROR MESSAGES
|
||
|
||
|
||
;ERROR MESSAGE PROCESSOR
|
||
; CALL IS : (PRODUCED BY $ERROR MACRO)
|
||
; MOVE T1,<OPTIONAL VALUE TO BE TYPED> ;IF ANY
|
||
; MOVX T4,<FLAGS FOR TYPE OF ERROR,RETURN DISPOSITION & TYPEOUT>
|
||
; JSP T3,ERRMSG
|
||
; XWD SIXBIT CODE(3CHRS),ADDRESS OF ASCIZ STRING (OR 0)
|
||
; AND IF EF.CON (MESSAGE CONTINUES) IS SET, THERE IS AN EXTRA
|
||
; WORD "JRST AROUND.REST.OF.MESSAGE"(SKIPPED IF PREFIX-ONLY NOT SET)
|
||
;
|
||
ERRMSG: MOVEM 0,SAVAC ;SAVE THE ACS
|
||
MOVE 0,[XWD 1,SAVAC+1]
|
||
BLT 0,SAVAC+17
|
||
MOVE 0,SAVAC+0 ;RESTORE BASHED AC
|
||
MOVEM T3,ERRPC ;SAVE ERROR PC
|
||
TXO SW,F.TTY ;ERRORS GO TO TTY
|
||
PUSHJ P,CRLF ;GIVE A CRLF PAIR
|
||
MOVEI CHR,"?" ;SET FOR FATAL ERROR
|
||
TXNE T4,EF.CMT ;IS IT A COMMENT?
|
||
MOVEI CHR,"[" ;YES
|
||
TXNE T4,EF.WRN ;IS IT A WARNING
|
||
MOVEI CHR,"%" ;YES
|
||
PUSHJ P,PUTCHR ;TYPE IT
|
||
GTMSG. (CHR) ;GET OUR MESSAGE LEVEL
|
||
TXNN SW,NO.PRF ;/E VALUE SAYS NO PREFIX?
|
||
TXNN CHR,JW.WPR ;WANT PREFIX?
|
||
JRST NOPRFX ;NO
|
||
PUSH P,CHR ;SAVE MESSAGE LEVEL
|
||
MOVEI T1,'TRK' ;PUT OUT OUR PREFIX
|
||
PUSHJ P,SIXPNT ;
|
||
HLLZ T1,(T3) ;AND SPECIFIC CODE
|
||
PUSHJ P,SIXPNT ;
|
||
TYPEC (< >) ;AND A SPACE
|
||
POP P,CHR ;RESTORE MESSAGE LEVEL
|
||
NOPRFX: TXNN SW,NO.LIN ;/E VALUE SAYS NO REST OF LINE?
|
||
TXNN CHR,JW.WFL ;WANT SHORT ONLY ?
|
||
JRST ENDMSG ;ONLY PREFIX WANTED, SO GO BACK
|
||
MOVE STR,(T3) ;GET ADDRESS OF STRING
|
||
PUSHJ P,PUTSTR ;AND PRINT IT
|
||
TXNN T4,EF.DEC!EF.OCT!EF.SIX!EF.PPN!EF.MEM!EF.STR
|
||
JRST ENDMSG ;THATS ALL
|
||
MOVE T1,SAVAC+T1 ;RESTORE ARGUMENT REGISTER
|
||
TXNE T4,EF.DEC ;DECIMAL?
|
||
PUSHJ P,DECOUT ;
|
||
TXNE T4,EF.OCT ;OCTAL?
|
||
PUSHJ P,OCTOUT ;
|
||
TXNE T4,EF.SIX ;SIXBIT?
|
||
PUSHJ P,SIXPNT ;
|
||
TXNE T4,EF.PPN ;AS A PPN?
|
||
PUSHJ P,PPNTYP ;YES
|
||
TXNE T4,EF.MEM ;IN TERMS OF CURRENT MEMEORY
|
||
PUSHJ P,MEMPNT ;YES
|
||
TXNE T4,EF.STR ;WANT STRING
|
||
JRST [MOVE STR,T1 ;YES
|
||
PUSHJ P,PUTSTR;
|
||
JRST .+1] ;
|
||
ENDMSG: MOVE 0,[XWD SAVAC+1,1] ;RESTORE THE ACS
|
||
BLT 0,17
|
||
MOVE 0,SAVAC ;FROM SAVE BLOCK
|
||
TXNE T4,EF.CON ;WANT A CONTINUAI?
|
||
JRST [GTMSG. (T4)
|
||
TXNN SW,NO.LIN
|
||
TXNN T4,JW.WFL
|
||
JRST 1(T3) ;NO, RETURN+0 HAS JUMP AROUND REST
|
||
TXO SW,F.TTY ;WANTS REST, TURN ON F.TTY AGAIN
|
||
JRST 2(T3)] ;AND SKIP JUMP,FALLING INTO REST OF MS.
|
||
TXNE T4,EF.CMT ;FINISH COMMENT
|
||
TTCALL 1,["]"] ;IF DESIRED
|
||
TTCALL 3,[ASCIZ/
|
||
/] ;CLEAN UP
|
||
TXNE T4,EF.EXT ;WANT TO EXIT?
|
||
JRST FINISH ;YES, SO DO SO
|
||
TXNE T4,EF.RST ;WANT TO EAT LINE AND GO TO "*"?
|
||
JRST [PUSHJ P,EATLIN
|
||
JRST RESTRT] ;YES
|
||
JRST 1(T3) ;NORMAL OLD RETURN
|
||
|
||
SUBTTL NOTIFY OF GETTAB ERROR
|
||
; GETTAB FAILURE NOTIFICATION
|
||
; CALLED VIA PJRST FROM FETTAB.
|
||
; IF GT.OPT BIT IS SET, WE JUST DO A POPJ, GIVING
|
||
; USER A NON-SKIP (IE. BAD) RETURN
|
||
; IF GT.OPT NOT SET , WE TELL HIM LOC OF FAILING GETTAB
|
||
; AND EXIT. TYPING CONTINUE DOES A NON-SKIP RETURN
|
||
; NOTE: FOR DEBUGGING-- LOCATION SAVGT HAS OFFENDING GETTAB PARAMETER
|
||
|
||
|
||
GFAIL: TXZE SW,GT.OPT ;OPTIONAL ?
|
||
POPJ P, ;YES, JUST DO A NON-SKIP RETURN
|
||
PUSH P,T1 ;SAVE T1
|
||
HRRZ T1,-1(P) ;GET CALL ADDRESS
|
||
SOJ T1, ;MINUS ONE WAS CALL
|
||
$ERROR(EF.FAT!EF.OCT,GTF,GETTAB UUO FAILURE AT PC )
|
||
EXIT 1, ;EXIT
|
||
PJRST TPOPJ ;RESTORE T1 AND RETURN
|
||
|
||
|
||
;
|
||
;** LOOKUP , ENTER AND OPEN ERROR NOTIFICATION
|
||
|
||
RENERR: $ERROR(EF.FAT!EF.CON,RNE,RENAME FAILURE FOR )
|
||
JRST IOERR1
|
||
LUPERR: $ERROR(EF.FAT!EF.CON,LKE,LOOKUP FAILED FOR )
|
||
JRST IOERR1 ;ENTER CHAIN OF MESSAGES
|
||
|
||
$ERROR(EF.FAT!EF.CON,OPE,OUTPUT ENTER FAILED FOR )
|
||
IOERR1: PUSH P,LUEB+1 ;SAVE ERROR CODE
|
||
MOVE T1,FILDEV ;PRINT DEVICE
|
||
PUSHJ P,SIXPNT
|
||
TYPEC (:)
|
||
MOVE T1,FILNAM ;FILENAME
|
||
PUSHJ P,SIXPNT
|
||
TYPEC (.)
|
||
HLRZ T1,FILEXT ;AND EXTENSION
|
||
PUSHJ P,SIXPNT
|
||
SKIPN T1,FILPPN ;PPN OR PATH?
|
||
JRST IOERR2 ;NO
|
||
TLNE T1,-1 ;POINTER TO PATH?
|
||
JRST [PUSHJ P,PPNTYP ;NO,JUST TYPE PPN
|
||
JRST IOERR2]
|
||
TYPEC ([)
|
||
HLRZ T1,PTHPPN ;GET PPN
|
||
PUSHJ P,OCTOUT ;
|
||
TYPEC (<,>)
|
||
HRRZ T1,PTHPPN
|
||
PUSHJ P,OCTOUT
|
||
SETZ T2, ;SEE IF SFDS SPECIFIED
|
||
ERRSFD: SKIPN T1,PTHSFD(T2) ;
|
||
JRST [MOVEI CHR,"]" ;IF DONE GIVE "]" AND CONTINUE
|
||
PUSHJ P,PUTCHR
|
||
JRST IOERR2]
|
||
TYPEC (<,>)
|
||
PUSHJ P,SIXPNT ;TYPE SFD NAME
|
||
AOJA T2,ERRSFD ;BACK FOR MORE
|
||
IOERR2: POP P,T1 ;GET ERROR CODE
|
||
HRRZS T1 ;BLANK OUT GARBAGE
|
||
TYPES (< (>) ;ERROR CODE
|
||
PUSHJ P,OCTOUT ;IN OCTAL
|
||
TYPES (<) >) ;
|
||
CAIG T1,ERRLN. ;CODE GREATER THAN SIZE?
|
||
TTCALL 3,@ERRTAB(T1) ;NO, OUTPUT THE STRING
|
||
X$$RNE:
|
||
X$$LKE:
|
||
X$$OPE: PUSHJ P,CRLF ;AND CRLF
|
||
JRST RESTRT ;BACK FOR NEXT COMMAND
|
||
|
||
; TABLE OF LOOKUP/ENTER FAILURE MESSAGES
|
||
; NON-APPLICABLE MESSAGES HAVE ZERO
|
||
|
||
DEFINE LEER(AA)<
|
||
IFNB <AA>,<[ASCIZ\AA\]>
|
||
IFB <AA>,<[EXP 0]>
|
||
>
|
||
|
||
ERRTAB: LEER(FILE NOT FOUND)
|
||
LEER(NON-EXISTANT UFD)
|
||
LEER(PROTECTION FAILURE)
|
||
LEER(FILE BEING MODIFIED)
|
||
LEER(ALREADY EXISTING FILENAME)
|
||
LEER(ILLEGAL UUO SEQUENCE)
|
||
LEER(BAD RIB OR UFD)
|
||
LEER()
|
||
LEER()
|
||
LEER()
|
||
LEER()
|
||
LEER()
|
||
LEER(NO ROOM OR QUOTA EXCEEDED)
|
||
LEER(WRITE-LOCK ERROR)
|
||
LEER(NOT ENOUGH MONITOR FREE CORE)
|
||
LEER(PARTIAL ALLOCATION ONLY)
|
||
LEER(BLOCK NOT FREE ON ALLOCATED POSITION)
|
||
LEER(CANNOT SUPERSEDE DIRECTORY)
|
||
LEER(CANNOT DELETE NON-EMPTY DIRECTORY)
|
||
LEER(SFD NOT FOUND)
|
||
LEER(SEARCH LIST EMPTY)
|
||
LEER(SFD NESTING TOO DEEP)
|
||
LEER(NO STRUCTURES IN PATH BOTH CREATABLE AND WRITEABLE)
|
||
LEER()
|
||
ERRLN.==.-ERRTAB ;LENGTH OF TABLE
|
||
|
||
|
||
SUBTTL SHARED UTILITY MODULES THAT CAN BE USED BY INITIA,GATHER, ETC
|
||
;
|
||
; THE FOLLOWING ROUTINES ARE AVAILABLE FOR USE BY ANY SYSTEM DATA
|
||
; ROUTINE. IN GENERAL THEY EXPECT USES FOR REGISTERS TO CONFORM
|
||
; TO THE STANDARD SPECIFICALLY J,L,GT)
|
||
; REGISTER USAGE AND SIDE EFFECTS ARE AS DOCUMENTED
|
||
|
||
|
||
IFN SYS, <
|
||
|
||
|
||
|
||
; THIS ROUTINE TAKES CONTENTS OF GT AND PLACES THEM IN THE DB CELL
|
||
; IMMEDIATELY FOLLOWING THE CURRENT ONE.
|
||
;
|
||
; NOTE: ROUTINES USEING STONXT MUST ALLOCATE 1 MORE CELL PER DB THAN THERE
|
||
; ARE LOOKS PER REPORT
|
||
|
||
; EXPECTS VALUE IN GT, PRESERVES ALL REGISTERS.
|
||
|
||
STONXT: AOJ L, ;POINT TO NEXT CELL
|
||
MOVEM GT,@TAB.P(J) ;PUT VALUE AWAY
|
||
SOJ L, ;FIX UP INDEX
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; ROUTINE TO MAKE GT BE A PERCENT OF THE CONTENTS OF GT
|
||
; DIVIDED BY THE NUMBER OF ELAPSED TICS
|
||
; EXPECTS GT TO HAVE VALUE. ALL AC'S PRESERVED
|
||
;
|
||
|
||
PRETIC: IMULI GT,^D1000 ;DONT LOSE PRECISION
|
||
PUSH P,GT+1 ;GOING TO DO AN IDIV
|
||
IDIV GT,EL.TIC ;DO IT
|
||
ADDI GT,5 ;ROUND IT
|
||
IDIVI GT,^D10 ;DONE
|
||
POP P,GT+1 ;RESTORE THE AC
|
||
POPJ P, ;AND RETURN
|
||
|
||
; DIVSEC: DIVIDES BY NUMBER OF SECONDS THAT HAVE PASSED
|
||
; EXPECTS VALUE IN GT, RETURNS VALUE IN GT. USES EL.MS AS
|
||
; ELAPSED SECONDS
|
||
|
||
DIVSEC: IMULI GT,^D1000 ;MULTIPLY BY 1000
|
||
PUSH P,GT+1 ;READY TO DO IDIV
|
||
IDIV GT,EL.MS ;DONE
|
||
POP P,GT+1 ;RESTORE THE AC
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; ROUTINE TO TAKE A VALUE IN GT, LOOK IT UP AND CALL STONXT,
|
||
; GET CURRENT VALUE DIVIDED BY ELAPSED SECONDS AND DISMISS THE
|
||
; CALL.
|
||
|
||
INCSEC: PUSHJ P,FETTAB ;LOOK UP VALUE
|
||
PUSHJ P,STONXT ;STORE IN NEXT CELL
|
||
SUB GT,@TAB.P(J) ;SUBTRACT TO MAKE INCR.
|
||
PUSHJ P,DIVSEC ;DIVIDE BY ELAPSED SECS.
|
||
MOVEM GT,@TAB.P(J) ;STORE IT AWAY
|
||
POPJ P, ;AND RETURN
|
||
|
||
;CODE ADDED TO ALLOW FOR SIMPLE INCREMTAL VALUES
|
||
SIMINC: PUSHJ P,FETTAB ;LOOK UP VALUE
|
||
PUSHJ P,STONXT ;STORE IN NEXT CELL
|
||
SUB GT,@TAB.P(J) ;SUBTRACT TO MAKE INCR.
|
||
MOVEM GT,@TAB.P(J) ;STORE IT AWAY
|
||
POPJ P, ;AND RETURN
|
||
|
||
;ROUTINE TO SEE IF A GIVEN ITEM IS AVAILABLE, AND ALLOCATE CORE
|
||
; IF IT IS. CALL WITH THE GETTAB NUMBER IN GT.
|
||
|
||
DBOPTN: PUSHJ P,FETOPT ;IS THIS AVAILABLE?
|
||
POPJ P, ;NO, DON'T ALLOCATE CORE
|
||
; PJRST DBCORE ;FALL THROUGH TO DBCORE
|
||
|
||
|
||
; DBCORE : SETS UP T1 WITH VALUE OF NUMBER OF LOOKS PER REPORT
|
||
; AND THEN GOES TO ASSCOR. USED MAINLY TO SET UP
|
||
; STANDARD LENGTH DATA BLOCKS FOR SYSTEM TRACKING.
|
||
; ALSO SETS UP UP THE WORD POINTED TO BY REGISTER J
|
||
; IN THE STANDARD DB FORMAT OF L,,ADDR
|
||
; IE. SETS UP DB PTR UPON RETURN FROM ASSCOR
|
||
|
||
DBCORE: MOVE T1,RVAL ;GET LENGTH WANTED FOR DATA BLOCKS
|
||
AOJ T1, ;ADD ONE EXTRA CELL FOR INCR.
|
||
PUSHJ P,ASSCOR ;GO THERE, GET CORE
|
||
TLO T1,L ;MAKE INDEX REG. PTR
|
||
MOVEM T1,TAB.P(J) ;STASH IT AS WORD PTR
|
||
TLZ T1,L ;IN CASE A ROUTINE CHECKS
|
||
POPJ P, ;AND GO HOME
|
||
|
||
|
||
|
||
|
||
; JOBBLK : FINDS TOTAL NUMBER OF JOBS IN THE SYSTEM (POSSIBLE)
|
||
; AND SETS UP A BLOCK OF THAT MANY WORDS. IT THEN
|
||
; RETURNS IN T1 A WORD OF THE FORM J,,ADDR
|
||
; WHERE ADDR IS THE STARTING ADDRESS OF THE WORD
|
||
; NOTE: JOB 0 IS INCLUDED IN THE MAXIMUM
|
||
|
||
JOBBLK: MOVE T1,MAXJOB ;GET MAX NR OF JOBS
|
||
MOVEI T1,1(T1) ;PLUS ONE FOR NULL JOB
|
||
PUSHJ P,ASSCOR ;GET A BLOCK OF CORE
|
||
TLO T1,J ;MAKE AN INDEX REGISTER
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
;*** END OF UTILITY ROUTINES ***
|
||
|
||
> ; END OF SYS CONDITIONAL
|
||
|
||
SUBTTL INDIVIDUAL ROUTINES FOR GATHEREING,INITIA,AND DISPLAY
|
||
;
|
||
; ROUTINES OF A SPECIFIC NATURE FOR GATHERING INDIVIDUAL ITEMS
|
||
; AND FOR SPECIAL CASES WHERE UTILITY ROUTINES WONT WORK
|
||
;
|
||
; SEE SYSDAT MACRO FOR NAMES,CONVENTIONS
|
||
|
||
IFN SYS, <
|
||
|
||
|
||
;ROUTINE FOR GATHERING CPU0 LOST TIME
|
||
|
||
CP0L%G: MOVX GT, %CVLST ;LOOKUP LOST TIME
|
||
; PJRST CPCOMM ;FINISH UP
|
||
|
||
; OTHER CPU0 ROUTINES ENTER HERE FOR COMMON ACTIONS
|
||
CPCOMM: PUSHJ P,FETTAB ;DO IT
|
||
CPCOM2: PUSHJ P,STONXT ;STORE NEXT FOR INCREMENTAL
|
||
SUB GT,@TAB.P(J) ;MAKE THIS ONE INCREMENTAL
|
||
PUSHJ P,PRETIC ;MAKE IT A % OF ELAPSED TICS
|
||
MOVEM GT,@TAB.P(J) ;AND STASH IT
|
||
POPJ P, ;RETURN, WE ARE DONE
|
||
|
||
;ROUTINE FOR GATHERING CPU0 IDLE TIME
|
||
|
||
CP0I%G: MOVX GT,%CVNUL
|
||
PUSHJ P,FETTAB
|
||
MOVE T1,GT ;SAVE FOR SUBTRACT
|
||
MOVX GT,%CVLST ;NULL-LOST=IDLE
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT ;RESULT IN GT
|
||
PJRST CPCOM2 ;GO TO COMMON PLACE WITH ANSWER
|
||
|
||
|
||
|
||
;ROUTINE FOR GATHERING CPU0 OVERHEAD TIME
|
||
|
||
CP0O%G: MOVX GT, %CVOHT ;OVERHEAD TIME
|
||
PJRST CPCOMM ;DO COMMON CPU STUFF
|
||
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND
|
||
|
||
CP0U%G: MOVX GT,%CVTUC ;GET
|
||
PJRST INCSEC ;STORE INCREMENTAL BY SECS
|
||
|
||
; ROUTINE FOR GATHERING CONTEXT SWITCHES PER SECOND
|
||
|
||
CP0C%G: MOVX GT, %CVTJC ;LOOK UP CONTEXT SWITCHES
|
||
PJRST INCSEC ;STORE INCREM./SECS ELAPSED
|
||
|
||
|
||
; SECOND PROCESSOR STUFF
|
||
|
||
;
|
||
; INITIALIZE FOR LOST,IDLE,OVERHEAD AND CONTEXT ONLY IF CPU1 EXISTS
|
||
|
||
CP1INI: MOVE T1,NCPU ;[217] # CPUS BUILT FOR
|
||
CAIGE T1,2 ;CPU1 THERE?
|
||
POPJ P, ;NO , RETURN
|
||
PJRST DBCORE ;GET CORE AND RETURN
|
||
;
|
||
; COMMON STUFF FOR SECOND PROCESSOR
|
||
|
||
CP1I%G: MOVX GT, %CVNUL+2 ;NULL JOB TIME FOR CPU1
|
||
PUSHJ P,FETTAB ;GET
|
||
MOVE T1,GT ;SAVE FOR SUBTRACE
|
||
MOVX GT,%CVLST+2 ;SAME AS ON CPU0
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT
|
||
PJRST CPCOM2 ;GO TO COMMON ROUTINE, NO GETTAB.
|
||
; PRINT IN % ELAPSED TICKS.
|
||
|
||
CP1L%G: MOVX GT, %CVLST+2 ;LOST TIME FOR CPU1
|
||
PJRST CPCOMM
|
||
|
||
CP1O%G: MOVX GT, %CVOHT+2 ;OVERHEAD TIME FOR CPU1
|
||
PJRST CPCOMM
|
||
|
||
CP1C%G: MOVX GT, %CVTJC+2 ;CONTEXT SWITCHES
|
||
PJRST INCSEC ;SAME AS FOR CPU0
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND ON CPU1
|
||
|
||
CP1U%G: MOVX GT,%CVTUC+2 ;UUOS PER SECOND
|
||
PJRST INCSEC ;PRINT THIS-LAST/<ELAPSED SECS>
|
||
|
||
;[217] THIRD PROCESSOR STUFF
|
||
|
||
;
|
||
; INITIALIZE FOR LOST,IDLE,OVERHEAD AND CONTEXT ONLY IF CPU2 EXISTS
|
||
|
||
CP2INI: MOVE T1,NCPU ;[217] # CPUS BUILT FOR
|
||
CAIGE T1,3 ;CPU2 THERE?
|
||
POPJ P, ;NO , RETURN
|
||
PJRST DBCORE ;GET CORE AND RETURN
|
||
;
|
||
; COMMON STUFF FOR SECOND PROCESSOR
|
||
|
||
CP2I%G: MOVX GT, %CVNUL+4 ;NULL JOB TIME FOR CPU2
|
||
PUSHJ P,FETTAB ;GET
|
||
MOVE T1,GT ;SAVE FOR SUBTRACE
|
||
MOVX GT,%CVLST+4 ;SAME AS ON CPU0
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT
|
||
PJRST CPCOM2 ;GO TO COMMON ROUTINE, NO GETTAB.
|
||
; PRINT IN % ELAPSED TICKS.
|
||
|
||
CP2L%G: MOVX GT, %CVLST+4 ;LOST TIME FOR CPU2
|
||
PJRST CPCOMM
|
||
|
||
CP2O%G: MOVX GT, %CVOHT+4 ;OVERHEAD TIME FOR CPU2
|
||
PJRST CPCOMM
|
||
|
||
CP2C%G: MOVX GT, %CVTJC+4 ;CONTEXT SWITCHES
|
||
PJRST INCSEC ;SAME AS FOR CPU0
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND ON CPU2
|
||
|
||
CP2U%G: MOVX GT,%CVTUC+4 ;UUOS PER SECOND
|
||
PJRST INCSEC ;PRINT THIS-LAST/<ELAPSED SECS>
|
||
|
||
;[217] FOURTH PROCESSOR STUFF
|
||
|
||
;
|
||
; INITIALIZE FOR LOST,IDLE,OVERHEAD AND CONTEXT ONLY IF CPU3 EXISTS
|
||
|
||
CP3INI: MOVE T1,NCPU ;[217] # CPUS BUILT FOR
|
||
CAIGE T1,4 ;CPU3 THERE?
|
||
POPJ P, ;NO , RETURN
|
||
PJRST DBCORE ;GET CORE AND RETURN
|
||
;
|
||
; COMMON STUFF FOR SECOND PROCESSOR
|
||
|
||
CP3I%G: MOVX GT, %CVNUL+6 ;NULL JOB TIME FOR CPU3
|
||
PUSHJ P,FETTAB ;GET
|
||
MOVE T1,GT ;SAVE FOR SUBTRACE
|
||
MOVX GT,%CVLST+6 ;SAME AS ON CPU0
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT
|
||
PJRST CPCOM2 ;GO TO COMMON ROUTINE, NO GETTAB.
|
||
; PRINT IN % ELAPSED TICKS.
|
||
|
||
CP3L%G: MOVX GT, %CVLST+6 ;LOST TIME FOR CPU3
|
||
PJRST CPCOMM
|
||
|
||
CP3O%G: MOVX GT, %CVOHT+6 ;OVERHEAD TIME FOR CPU3
|
||
PJRST CPCOMM
|
||
|
||
CP3C%G: MOVX GT, %CVTJC+6 ;CONTEXT SWITCHES
|
||
PJRST INCSEC ;SAME AS FOR CPU0
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND ON CPU3
|
||
|
||
CP3U%G: MOVX GT,%CVTUC+6 ;UUOS PER SECOND
|
||
PJRST INCSEC ;PRINT THIS-LAST/<ELAPSED SECS>
|
||
|
||
;[217] FIFTH PROCESSOR STUFF
|
||
|
||
;
|
||
; INITIALIZE FOR LOST,IDLE,OVERHEAD AND CONTEXT ONLY IF CPU4 EXISTS
|
||
|
||
CP4INI: MOVE T1,NCPU ;[217] # CPUS BUILT FOR
|
||
CAIGE T1,5 ;CPU1 THERE?
|
||
POPJ P, ;NO , RETURN
|
||
PJRST DBCORE ;GET CORE AND RETURN
|
||
;
|
||
; COMMON STUFF FOR FIFTH PROCESSOR
|
||
|
||
CP4I%G: MOVX GT, %CVNUL+10 ;NULL JOB TIME FOR CPU4
|
||
PUSHJ P,FETTAB ;GET
|
||
MOVE T1,GT ;SAVE FOR SUBTRACE
|
||
MOVX GT,%CVLST+10 ;SAME AS ON CPU0
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT
|
||
PJRST CPCOM2 ;GO TO COMMON ROUTINE, NO GETTAB.
|
||
; PRINT IN % ELAPSED TICKS.
|
||
|
||
CP4L%G: MOVX GT, %CVLST+10 ;LOST TIME FOR CPU4
|
||
PJRST CPCOMM
|
||
|
||
CP4O%G: MOVX GT, %CVOHT+10 ;OVERHEAD TIME FOR CPU4
|
||
PJRST CPCOMM
|
||
|
||
CP4C%G: MOVX GT, %CVTJC+10 ;CONTEXT SWITCHES
|
||
PJRST INCSEC ;SAME AS FOR CPU0
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND ON CPU4
|
||
|
||
CP4U%G: MOVX GT,%CVTUC+10 ;UUOS PER SECOND
|
||
PJRST INCSEC ;PRINT THIS-LAST/<ELAPSED SECS>
|
||
|
||
|
||
;[217] SIXTH PROCESSOR STUFF
|
||
|
||
;
|
||
; INITIALIZE FOR LOST,IDLE,OVERHEAD AND CONTEXT ONLY IF CPU5 EXISTS
|
||
|
||
CP5INI: MOVE T1,NCPU ;[217] # CPUS BUILT FOR
|
||
CAIGE T1,6 ;CPU5 THERE?
|
||
POPJ P, ;NO , RETURN
|
||
PJRST DBCORE ;GET CORE AND RETURN
|
||
;
|
||
; COMMON STUFF FOR SIXTH PROCESSOR
|
||
|
||
CP5I%G: MOVX GT, %CVNUL+12 ;NULL JOB TIME FOR CPU5
|
||
PUSHJ P,FETTAB ;GET
|
||
MOVE T1,GT ;SAVE FOR SUBTRACE
|
||
MOVX GT,%CVLST+12 ;SAME AS ON CPU0
|
||
PUSHJ P,FETTAB
|
||
SUBM T1,GT
|
||
PJRST CPCOM2 ;GO TO COMMON ROUTINE, NO GETTAB.
|
||
; PRINT IN % ELAPSED TICKS.
|
||
|
||
CP5L%G: MOVX GT, %CVLST+12 ;LOST TIME FOR CPU5
|
||
PJRST CPCOMM
|
||
|
||
CP5O%G: MOVX GT, %CVOHT+12 ;OVERHEAD TIME FOR CPU5
|
||
PJRST CPCOMM
|
||
|
||
CP5C%G: MOVX GT, %CVTJC+12 ;CONTEXT SWITCHES
|
||
PJRST INCSEC ;SAME AS FOR CPU0
|
||
|
||
;ROUTINE FOR GATHERING UUOS PER SECOND ON CPU5
|
||
|
||
CP5U%G: MOVX GT,%CVTUC+12 ;UUOS PER SECOND
|
||
PJRST INCSEC ;PRINT THIS-LAST/<ELAPSED SECS>
|
||
|
||
|
||
|
||
|
||
;ROUTINES FOR SPECIAL KL10 ONLY VARIABLES
|
||
; MOST OF THESE ARE ONLY USEFUL ON 1088 SYSTEMS
|
||
|
||
;ROUTINES TO INITIALIZE, IF NECESSARY
|
||
|
||
CL0INI: PUSHJ P,ISCPKL ;IS CPU A KL10?
|
||
POPJ P, ;NO, DON'T ALLOCATE ANYTHING
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
;ROUTINE SAME AS CL0INI, EXCEPT CPU1 MUST EXIST TOO.
|
||
|
||
CL1INI: PUSHJ P,ISCPL1 ;IS THIS 1088 SYSTEM?
|
||
POPJ P, ;NO, RETURN
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
;ROUTINE SAME AS CL0INI, EXCEPT CPU2 MUST EXIST TOO.
|
||
|
||
CL2INI: PUSHJ P,ISCPL2 ;IS THIS SMP SYSTEM?
|
||
POPJ P, ;NO, RETURN
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
;ROUTINE SAME AS CL0INI, EXCEPT CPU3 MUST EXIST TOO.
|
||
|
||
CL3INI: PUSHJ P,ISCPL3 ;IS THIS SMP SYSTEM?
|
||
POPJ P, ;NO, RETURN
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
;ROUTINE SAME AS CL0INI, EXCEPT CPU4 MUST EXIST TOO.
|
||
|
||
CL4INI: PUSHJ P,ISCPL4 ;IS THIS SMP SYSTEM?
|
||
POPJ P, ;NO, RETURN
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
;ROUTINE SAME AS CL0INI, EXCEPT CPU5 MUST EXIST TOO.
|
||
|
||
CL5INI: PUSHJ P,ISCPL5 ;IS THIS SMP SYSTEM?
|
||
POPJ P, ;NO, RETURN
|
||
PJRST DBCORE ;YES, ALLOCATE DB AND RETURN
|
||
|
||
|
||
;ROUTINES TO GATHER KL10 CACHE RELATED INFO
|
||
|
||
L0SD%G: MOVX GT,%CVCSD ;NUMBER OF CACHE SWEEP REQ.
|
||
PJRST INCSEC ;PER SECOND
|
||
L1LN%G: SKIPA GT,[%CVCLN+2] ;FOR CPU1
|
||
L0LN%G: MOVX GT,%CVCLN ;SCHEDULER CACHE SWEEP REQ
|
||
PJRST INCSEC ;PER SECS ELASPED
|
||
L1RN%G: SKIPA GT,[%CVCRN+2]
|
||
L0RN%G: MOVX GT,%CVCRN ;REQ ACTUALLY SWEPT FOR
|
||
PJRST INCSEC ;PER SECOND
|
||
L1LT%G: SKIPA GT,[%CVCLT+2] ;FOR CPU1
|
||
L0LT%G: MOVX GT,%CVCLT
|
||
PJRST CPCOMM
|
||
|
||
L1SN%G: SKIPA GT,[%CVCSN+2] ;NUMBER OF CACHE SWEEPS
|
||
L0SN%G: MOVX GT,%CVCSN ;NUMBER OF CACHE SWEEPS
|
||
PJRST INCSEC ;PER SECOND
|
||
|
||
|
||
;CPU2 & CPU3
|
||
L3LN%G: SKIPA GT,[%CVCLN+6] ;FOR CPU3
|
||
L2LN%G: MOVX GT,%CVCLN+4 ;CPU2: SCHEDULER CACHE SWEEP REQ
|
||
PJRST INCSEC ;PER SECS ELASPED
|
||
L3RN%G: SKIPA GT,[%CVCRN+6]
|
||
L2RN%G: MOVX GT,%CVCRN+4 ;REQ ACTUALLY SWEPT FOR
|
||
PJRST INCSEC ;PER SECOND
|
||
L3LT%G: SKIPA GT,[%CVCLT+6] ;FOR CPU3
|
||
L2LT%G: MOVX GT,%CVCLT+4 ;FOR CPU2
|
||
PJRST CPCOMM
|
||
L3SN%G: SKIPA GT,[%CVCSN+6] ;NUMBER OF CACHE SWEEPS
|
||
L2SN%G: MOVX GT,%CVCSN+4 ;NUMBER OF CACHE SWEEPS
|
||
PJRST INCSEC ;PER SECOND
|
||
|
||
|
||
|
||
;CPU4 & CPU5
|
||
L5LN%G: SKIPA GT,[%CVCLN+12] ;FOR CPU5
|
||
L4LN%G: MOVX GT,%CVCLN+10 ;CPU4: SCHEDULER CACHE SWEEP REQ
|
||
PJRST INCSEC ;PER SECS ELASPED
|
||
L5RN%G: SKIPA GT,[%CVCRN+12]
|
||
L4RN%G: MOVX GT,%CVCRN+10 ;REQ ACTUALLY SWEPT FOR
|
||
PJRST INCSEC ;PER SECOND
|
||
L5LT%G: SKIPA GT,[%CVCLT+12] ;FOR CPU5
|
||
L4LT%G: MOVX GT,%CVCLT+10 ;FOR CPU4
|
||
PJRST CPCOMM
|
||
L5SN%G: SKIPA GT,[%CVCSN+12] ;NUMBER OF CACHE SWEEPS
|
||
L4SN%G: MOVX GT,%CVCSN+10 ;NUMBER OF CACHE SWEEPS
|
||
PJRST INCSEC ;PER SECOND
|
||
|
||
|
||
|
||
;ROUTINES TO CHECK ON WHETHER OR NOT THIS IS A SINGLE-CPU OR SMP SYSTEM.
|
||
; ISCPLn SKIPS IF RUNNING ON n+1 CPU SMP, ISCPKL SKIPS IF RUNNING ON KL10.
|
||
; USES T2
|
||
|
||
ISCPL1: MOVE T2,NCPU ;[217] GET #CPU
|
||
CAIGE T2,2 ;ANY CPU1 AT ALL?
|
||
POPJ P, ;NO, CANT BE 1088
|
||
;FALL INTO ISCPKL
|
||
ISCPKL: MOVE T2,CPUTYP ;GET CPU TYPE CODE
|
||
CAXN T2,.CCKLX ;IS THIS A KL10?
|
||
AOS (P) ;YES, SET SKIP RETURN
|
||
POPJ P, ;RETURN ONE WAY OR THE OTHER
|
||
|
||
;[217] SAME ROUTINES, FOR CPU2, CPU3, CPU4, CPU5
|
||
ISCPL2: MOVE T2,NCPU ;[217] GET #CPU
|
||
CAIGE T2,3 ;ANY CPU2 AT ALL?
|
||
POPJ P, ;NO, CANT BE 1088
|
||
JRST ISCPKL
|
||
|
||
ISCPL3: MOVE T2,NCPU ;[217] GET #CPU
|
||
CAIGE T2,4 ;ANY CPU3 AT ALL?
|
||
POPJ P, ;NO, CANT BE 1088
|
||
JRST ISCPKL
|
||
|
||
ISCPL4: MOVE T2,NCPU ;[217] GET #CPU
|
||
CAIGE T2,5 ;ANY CPU4 AT ALL?
|
||
POPJ P, ;NO, CANT BE 1088
|
||
JRST ISCPKL
|
||
|
||
ISCPL5: MOVE T2,NCPU ;[217] GET #CPU
|
||
CAIGE T2,6 ;ANY CPU5 AT ALL?
|
||
POPJ P, ;NO, CANT BE 1088
|
||
JRST ISCPKL
|
||
|
||
|
||
; ROUTINE FOR INITIALIZING USER DISK STUFF
|
||
|
||
UDIO%I: PUSHJ P,JOBBLK ;SET UP A JOB TABLE BLOCK
|
||
MOVEM T1,DIOTAB ;STORE THE J,,ADDR PTR
|
||
PJRST DBCORE ;SET UP A DATA BLOCK, RETURN
|
||
|
||
|
||
; ROUTINE TO GATHER INCREMENTAL DISK I/O
|
||
; FILLS TWO VALUES, INCDIO: GETS DISK BLOCKS SINCE LAST CALL
|
||
; INCSWP: GETS DISK BLOCKS SWAPPED
|
||
;
|
||
; EXPECTS DIOTAB TO POINT TO A BLOCK OF WORDS AS LONG AS # JOBS
|
||
; IN SYSTEM, DIOTAB WORD SHOULD HAVE FORM J,,ADDR
|
||
; NOTE: ALSO SETS UP INCSWP FOR SWAPPING STATISTICS SO MAKE
|
||
; SURE USER DISK IO APPEARS BEFORE SWAPPING IO IN SYSDAT MACRO
|
||
|
||
UDIO%G: PUSH P,J ;SAVE REGISTER J
|
||
SETZ N2, ;N2 GETS TALLY
|
||
MOVE J,HIJOB ;J GETS HIGHEST JOB NUMBER ASSIGNED
|
||
UDILOP: SKIPGE @JOBTB1 ;SEE IF JOB LOGGED IN
|
||
JRST NODIO ;HE IS NOT
|
||
MOVSI GT,(J) ;DO A DISK RD/WR GETTAB
|
||
HRRI GT,.GTRCT ;FIRST READS
|
||
PUSHJ P,FETTAB ;LOOKING UP
|
||
LDB T1,DBP ;GET JUST TOTAL
|
||
MOVSI GT,(J) ;LOOK UP WRITES TOO
|
||
HRRI GT,.GTWCT ;LOOK UP WRITES
|
||
PUSHJ P,FETTAB ;
|
||
LDB GT,DBP ;CLEAR INCREMENTAL
|
||
ADD GT,T1 ;GET THE TOTAL OF THE TWO
|
||
MOVE N1,@DIOTAB ;PICK UP LAST SEEN VALUE
|
||
MOVEM GT,@DIOTAB ;AND STORE NEW ONE
|
||
CAML GT,N1 ;IS CURRENT VALUE LESS?
|
||
SUB GT,N1 ;NO, SUBTRACT OLD FROM NEW
|
||
JUMPN J,DIO1A ;DOING JOB 0?
|
||
MOVEM GT,INCSWP ;YES, STORE SWAPPED BLOCKS
|
||
SKIPA ;AND DONT ADD TO USER TOTAL
|
||
DIO1A: ADD N2,GT ;ADD TO TOTAL
|
||
DIO1B: SOJGE J,UDILOP ;MORE TO DO?
|
||
MOVEM N2,INCDIO ;STORE THE NEW VALUE
|
||
POP P,J ;RESTORE J
|
||
MOVE GT,INCDIO ;GET USER DISK IO
|
||
PUSHJ P,DIVSEC ;DIVIDE BY NUMBER OF SECS PASSED
|
||
SKIPL TAB.P(J) ;MIGHT BE NO DB IF UDIO WAS EXCLUDED
|
||
MOVEM GT,@TAB.P(J) ;OTHERWISE STORE OBTAINED VALUE
|
||
POPJ P, ;AND RETURN
|
||
|
||
NODIO: SETZM @DIOTAB ;CLEAR THE LOCATION
|
||
JRST DIO1B ;AND RE-ENTER LOOP
|
||
|
||
|
||
; ROUTINE TO TAKE SWAPPING IO BLOCKS, DONE BY ABOVE
|
||
; AND STORE IN DB AS VALUE/SEC
|
||
; NOTE: THIS ROUTINE MUST BE CALLED AFTER UDIO%G
|
||
|
||
SWIO%G: SKIPGE UDIO.P ;WAS USER IO DONE?
|
||
PUSHJ P,UDIO%G ;NO,MUST CALL IT HERE THEN
|
||
MOVE GT,INCSWP ;GET SWAPPED VALUE
|
||
PUSHJ P,DIVSEC ;PER SECOND
|
||
MOVEM GT,@TAB.P(J) ;DONE
|
||
POPJ P,
|
||
|
||
|
||
SWIO%I: SKIPGE UDIO.P ;DID USER IO GET SET UP?
|
||
PJRST UDIO%I ;NO,DO IT HERE WHICH SETS UP OUR DB
|
||
PJRST DBCORE ;OTHERWISE JUST GET A DB
|
||
|
||
; ROUTINE TO FIND THE NUMBER OF PAGES OF SWAPPING SPACE LEFT
|
||
|
||
SWPS%G: MOVE GT,[%SWVRT] ;GET NUMBER OF PAGES LEFT
|
||
PUSHJ P,FETTAB ;LOOK IT UP
|
||
MOVEM GT,@TAB.P(J) ;STORE IT
|
||
POPJ P, ;RETURN
|
||
|
||
|
||
|
||
; ROUTINE TO INITIALIZE A JOB BLOCK AND DB FOR GETTING INCREMENTAL
|
||
; USER KCS/SECOND
|
||
|
||
UKCS%I: PUSHJ P,JOBBLK ;GET A JOB BLOCK
|
||
MOVEM T1,KCSTAB ;STORE IT
|
||
PJRST DBCORE ;GET DB AND RETURN FROM THERE
|
||
|
||
|
||
; ROUTINE TO GATHER DATA FOR INCREMENTAL KCS
|
||
|
||
UKCS%G: PUSH P,J ;SAVE J
|
||
MOVE J,HIJOB ;HIGHEST JOB NUMBER
|
||
SETZ N2, ;N2 IS THE ACCUM VALUE
|
||
UKLOP: SKIPGE @JOBTB1 ;IF JOB NOT LOGGED IN
|
||
JRST NOKCS ;SKIP HIM
|
||
MOVSI GT,(J) ;LOOK UP JOB
|
||
HRRI GT,.GTKCT ;IN PDB OR VIA GETTAB
|
||
PUSHJ P,FETTAB
|
||
MOVE N1,@KCSTAB ;PICK UP OLD VALUE
|
||
MOVEM GT,@KCSTAB ;STORE NEW VALUE
|
||
CAML GT,N1 ;NEW LESS THAN OLD?
|
||
SUB GT,N1 ;NO, SUBTRACT OLD
|
||
ADD N2,GT ;ADD TO TOTAL
|
||
UKCS1A: SOJG J,UKLOP ;MORE TO DO?
|
||
POP P,J ;RESTORE J
|
||
IDIVI N2,^D60 ;DIVIDE BY 60 TO MAKE KCS FROM KCT
|
||
MOVE GT,N2 ;GET A VALUE OVER ELAPSED SECONDS
|
||
PUSHJ P,DIVSEC ;
|
||
MOVEM GT,@TAB.P(J) ;STORED
|
||
POPJ P, ;AND RETURN
|
||
|
||
NOKCS: SETZM @KCSTAB ;CLEAR IT
|
||
JRST UKCS1A ;AND RE-ENTER LOOP
|
||
; ROUTINE TO INITIALIZE A JOB BLOCK AND DB FOR GETTING INCREMENTAL
|
||
; USER CPU TICKS/SECOND
|
||
|
||
CPUT%I: PUSHJ P,JOBBLK ;GET A JOB BLOCK
|
||
MOVEM T1,CPTTAB ;STORE IT
|
||
PJRST DBCORE ;GET DB AND RETURN FROM THERE
|
||
;
|
||
|
||
|
||
; ROUTINE TO GATHER DATA FOR INCREMENTAL CPU TICKS
|
||
|
||
CPUT%G: PUSH P,J ;SAVE J
|
||
MOVE J,HIJOB ;HIGHEST JOB NUMBER
|
||
SETZ N2, ;N2 IS THE ACCUM VALUE
|
||
CTLOP: SKIPGE @JOBTB1 ;IF JOB NOT LOGGED IN
|
||
JRST NOCPT ;SKIP HIM
|
||
MOVSI GT,(J) ;LOOK UP JOB
|
||
HRRI GT,.GTTIM ;IN PDB OR VIA GETTAB
|
||
PUSHJ P,FETTAB
|
||
MOVE N1,@CPTTAB ;PICK UP OLD VALUE
|
||
MOVEM GT,@CPTTAB ;STORE NEW VALUE
|
||
CAML GT,N1 ;NEW LESS THAN OLD?
|
||
SUB GT,N1 ;NO, SUBTRACT OLD
|
||
ADD N2,GT ;ADD TO TOTAL
|
||
CPUT1A: SOJG J,CTLOP ;MORE TO DO?
|
||
POP P,J ;RESTORE J
|
||
MOVE GT,N2 ;GET A VALUE OVER ELAPSED SECONDS
|
||
PUSHJ P,DIVSEC ;
|
||
MOVEM GT,@TAB.P(J) ;STORED
|
||
POPJ P, ;AND RETURN
|
||
|
||
NOCPT: SETZM @CPTTAB ;CLEAR IT
|
||
JRST CPUT1A ;AND RE-ENTER LOOP
|
||
>
|
||
;HERE TO COMPUTE THE 'REAL RESPONSE TIME'. APPLIES THE FOLLOWING
|
||
;RELATIONSHIP: (FROM QUEUEING THEORY)
|
||
; # OF JOBS IN 'READY TO RUN OR RUNNING' STATE
|
||
;RESP = ---------------------------------------------------
|
||
; # OF INTERACTIONS (CR'S) PER SECOND OVER INTERVAL
|
||
;
|
||
; WHICH REDUCES TO: RESP = (READY JOBS)*(PEEK INTERVAL)/(INTERACTIONS)
|
||
RESP%G: MOVX GT,%CCRSP ;GET OFFSET OF RESP SUB TAB
|
||
PUSHJ P,FETTAB ;FROM THE MON
|
||
ADDI GT,%CVRNX ;GET OFFSET INTO RESP TABLE
|
||
HRLS GT ;INTO LH
|
||
HRRI GT,.GTC0V ;GET THE VAR TABLE #
|
||
PUSHJ P,FETTAB ;FROM MON
|
||
MOVE T1,GT ;SAVE
|
||
MOVX GT,%SYNCP ;GET # RESP FROM COMMAND LEVEL
|
||
PUSHJ P,FETTAB ;..
|
||
ADD GT,T1 ;TOTAL # OF RESPONSES
|
||
PUSHJ P,STONXT ;SAVE FOR INCREMENTAL
|
||
SUB GT,@TAB.P(J) ;GET DIFFERENCE FROM LAST TIME
|
||
MOVE T1,JOBRN ;GET JOBS IN 'RN' STATE
|
||
ADD T1,JOBSHR ;ADD JOBS IN SHAR RES WAIT STATE
|
||
ADD T1,JOBIO ;AND JOBS IN IO WAIT (LESS TTY)
|
||
IMUL T1,QTUM ;TIMES PEEK INTERVAL
|
||
IMULI T1,^D1000 ;MAKE IT MILLESEC
|
||
IDIV T1,GT ;AND DIV BY RESPONSES
|
||
MOVEM T1,@TAB.P(J) ;STASH FOR REPORTER
|
||
POPJ P,
|
||
|
||
; ROUTINE TO GATHER THE AVERAGE RESPONSE TIME OVER EACH TRACK INTERVAL
|
||
; BY LOOKING AT THE NON-SWAPPING DATA TABLE AND DIVIDING THE INCREMENTAL
|
||
;TIME SPENT WAITING BY THE INCREMENTAL NUMBER OF RESPONSES.
|
||
; THE VALUE OBTAINED IS STORED IN MS. FORM IN THE DB ALLOCATED FOR THIS
|
||
; PARAMETER.
|
||
|
||
AVRT%G: MOVX GT,%NSNCR ;GET NUMBER OF RESPONSES (TOTAL)
|
||
PUSHJ P,FETTAB ;FROM THE MONITOR
|
||
PUSH P,GT ;SAVE IT
|
||
SUB GT,NSNCRL ;SUBTRACT LAST-SEEN VALUE
|
||
POP P,NSNCRL ;AND MAKE CURRENT THE LAST SEEN
|
||
MOVEM GT,T2 ;SAVE FOR THE DIVIDE
|
||
MOVX GT,%NSACR ;GET THE TOTAL NUMBER OF RESPONSES
|
||
PUSHJ P,FETTAB ;
|
||
PUSHJ P,STONXT ;SAVE TOTAL IN CURRENT DB CELL+1
|
||
SUB GT,@TAB.P(J) ;AND MAKE (GT) BE INCR. VALUE
|
||
MOVEM GT,T1 ;READY FOR THE DIVIDE
|
||
IDIV T1,T2 ;T1 GETS AVG # OF JIFFIES/RESPONSE
|
||
IMULI T1,^D100 ;CONVERT TO MS.
|
||
IDIVI T1,^D6 ;
|
||
MOVEM T1,@TAB.P(J) ;STORE IT
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
|
||
SUBTTL LOGGED IN JOB ANALYSIS ROUTINE
|
||
; DOES ALL THE ANALYSIS FOR ALL JOB RELATED DATA
|
||
; SUCH AS ASR , AVE JOB SIZE, WHAT QUEUES JOBS ARE IN
|
||
|
||
ANALYZ: PUSH P,J ;SAVE J
|
||
MOVE T1,[XWD SEGTAB,SEGTAB+1] ;PREPARE TO ZERO JOB RELATED DATA AREA
|
||
SETZM SEGTAB ;
|
||
BLT T1,ACTCOR ;DONE
|
||
MOVE J,HIJOB ;GET HIGHEST JOB NUMBER ASSIGNED
|
||
|
||
ANAL1:
|
||
SKIPGE @JOBTB1 ;-1 ENTRY IN JOBTB1 MEANS NOT LOGGED IN
|
||
JRST NOTACT ;SO SKIP HIM
|
||
HRRZ T2,@JOBTB1 ;GET HIGH CORE ALLOCATION
|
||
HLRZ T1,@JOBTB1 ;AND LOW CORE ALLOCATION
|
||
ADDM T1,TOTCOR ;AND UPDATE TOTAL VIRT CORE IN USE
|
||
ADDM T2,TOTCOR ;FOR AVERAGE JOB SIZE
|
||
ADDM T1,SHRCOR ;STORE SHARED CORE
|
||
PUSHJ P,SEESHR ;SKIPS IF HAVE SEEN THIS HI-SEG
|
||
;ALREADY IN DOING SHARED
|
||
ADDM T2,SHRCOR ;ADD HIGH SEGMENT TOO(MAYBE)
|
||
HRL T3,@JOBTB2 ;GET (RH) JOBTB2 ENTRY
|
||
JUMPGE T3,NOTACT ;IF RUN BIT OFF
|
||
HLRZS T3 ;SWAP HALVES
|
||
ANDI T3,7777 ;BLANK ALL BUT SIXBIT CODE
|
||
CAIN T3,'TI' ;IN TI STATE
|
||
JRST NOTRUN ;MEANS JOB NOT ACTIVE
|
||
CAIE T3,'SL' ;SLEEPING OR HIBERNATING
|
||
CAIN T3,'HB' ;MEANS
|
||
JRST NOTACT ;NOT ACTIVE
|
||
ADDM T1,ACTCOR ;UPDATE ACTIVE CORE
|
||
PUSHJ P,SEEACT ;DONT COUNT SHARED SEGMENTS TWICE
|
||
ADDM T2,ACTCOR ;
|
||
CAIE T3 ,'RN' ;RUN QUEUE?
|
||
JRST NOTRUN ;NO
|
||
AOS JOBRN ;A RUNNING JOB
|
||
SKIPL @JOBTB2 ;AND IN CORE?
|
||
AOS JOBRNC ;YES, COUNT HIM AS THAT
|
||
JRST NOTACT ;DONE WITH HIM
|
||
|
||
NOTRUN: CAIN T3 ,'PI' ;DOING PAGING I/O?
|
||
JRST YIO ;YES, COUNT HIM AS IN IO
|
||
CAIE T3 ,'TI' ;TI OR TO IS TTY IO
|
||
CAIN T3 ,'TO' ;SO COUNT HIM AS THAT
|
||
AOSA JOBTTY ;UPDATED COUNTER
|
||
JRST .+2
|
||
JRST NOTACT ;IF TTY PERSON, DONE WITH HIM
|
||
CAIE T3 ,'DI' ;OTHER IO
|
||
CAIN T3 ,'IO' ;DI OR IO
|
||
YIO: AOSA JOBIO ;JOBS DOING IO COUNTER
|
||
JRST .+2 ;STILL HAVE NOT FOUND HIS SLOT
|
||
JRST NOTACT ;FOUND HIM
|
||
MOVEI N1,SHRQLN ;NUMBER OF SHARE QUEUE NAMES PACKED
|
||
;THREE TO A WORD
|
||
MOVE N2,[POINT 12,SHRQ] ;BYTE POINTER TO SAME
|
||
SHRQL: ILDB N3,N2 ;GET A SHARE Q NAME
|
||
CAMN N3,T3 ;IS IT HIM?
|
||
AOSA JOBSHR ;YES, FINIS
|
||
SOJG N1,SHRQL ;NO, SEE IF MORE TO DO
|
||
NOTACT: SOJG J,ANAL1 ;IF MORE
|
||
POP P,J ;RESTORE J
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; THIS ROUTINE IS USED FOR ACCOUNTING FOR SHARED HISEGMENTS
|
||
; A BIT MAP IS USED , 1 BIT FOR EACH SEGMENT
|
||
; A 0 BIT INDICATES WE HAVE NOT SEEN THIS SEGMENT BEFORE
|
||
; A 1 BIT MEANS IT HAS BEEN COUNTED ALREADY. WORDS 0-7 OF SEGTAB
|
||
; A THE MAP FOR ALL USERS, WORDS 10-17 ARE FOR ACTIVE USERS
|
||
SEESHR: SKIPA N1,[XWD N1,SEGTAB] ;INDIRECT WORD TO SEGTAB INDEX BY N1
|
||
SEEACT: MOVE N1,[XWD N1,SEGTAB+10] ;INDIRECT WORD FOR ACTIVE USERS
|
||
MOVEM N1,SEGPTR ;STORE IT
|
||
JUMPE T2,NOHIC ;IF HAS NO HI-SEG, NO NEED TO ADJUST IT
|
||
HLRZ N1,@JOBTB2 ;GET HIGH SEGMENT NUMBER
|
||
TRZ N1,400000 ;CLEAR SWAPPED OUT BIT
|
||
IDIVI N1,^D36 ;FIND WORD IN SEGMENT BIT MAP
|
||
MOVE T4 ,@SEGPTR ;GET PROPER WORD
|
||
MOVEI N3,1 ;READY TO SET UP FOR PARTICULAR BIT
|
||
LSH N3,(N2) ;DO IT
|
||
TDOE T4 ,N3 ;READ AND UPDATE BIT MAP
|
||
AOS (P) ;ALREADY SEEN, TAKE SKIP RETURN
|
||
MOVEM T4 ,@SEGPTR ;STORE IT BACK
|
||
NOHIC: POPJ P, ;RETURN
|
||
|
||
|
||
SHRQ: STASH(AUMQDACBD1D2DCM1M2T1CAEVJD^D^W)
|
||
SHRQLN==ZZ/2 ;NUMBER OF QUEUES IN TABLE
|
||
|
||
|
||
|
||
SUBTTL HANDLE ANALYZED JOB DATA
|
||
|
||
; ROUTINE TO STORE NUMBER OF JOBS LOGGED IN
|
||
|
||
JLGN%G: MOVE T1,NUMJOB ;GET IT
|
||
MOVEM T1,@TAB.P(J) ;AND STORE IN APPROPRIATE PLACE
|
||
POPJ P, ;THEN RETURN
|
||
|
||
; ROUTINE TO STASH ACTIVE SWAPPING RATIO
|
||
|
||
ACCR%G: MOVE N1,ACTCOR ;GET ACTIVE CORE IN USE
|
||
; PHRC%G ENTERS HERE FOR COMMON STUFF
|
||
CORCOM: IMULI N1,^D1000 ;GET READY TO DIVIDE
|
||
IDIV N1,USIZ ;SIZE OF USER MEMORY
|
||
ADDI N1,5 ;ROUND IT
|
||
IDIVI N1,^D10 ;DONE
|
||
MOVEM N1,@TAB.P(J) ;DONE AND STASHED
|
||
POPJ P, ;RETURN
|
||
|
||
|
||
; ROUTINE TO GET SWAPPING RATIO FROM SHRCOR AND USIZ
|
||
|
||
PHCR%G: MOVE N1,SHRCOR ;GET TOTAL CORE IN USE
|
||
PJRST CORCOM ;DO SAME AS ABOVE
|
||
|
||
|
||
|
||
; ROUTINE TO GET AVERAGE JOB SIZE FROM TOTCOR AND NUMJOB
|
||
|
||
AVJS%G: MOVE N1,TOTCOR ;TOTAL CORE IN USE
|
||
IDIV N1,NUMJOB ;DIVIDE BY NUMBER OF JOBS
|
||
LSH N2,1 ;MULTIPLY REMAINDER BY 2
|
||
CAML N2,NUMJOB ;ROUND UP IF HAVE TO
|
||
ADDI N1,1
|
||
MOVEM N1,@TAB.P(J) ;STORE
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; ROUTINE TO STASH NUMBER OF JOBS IN RUN QUEUE
|
||
|
||
NRJR%G: MOVE N1,JOBRN ;GET IT
|
||
MOVEM N1,@TAB.P(J) ;STORE IT
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; ROUTINE TO GET PERCENT OF JOBS IN RUN QUEUE THAT ARE IN CORE
|
||
|
||
|
||
PRJC%G: MOVE N1,JOBRNC ;GET NUMBER OF JOBS IN RUN QUE IN COREUE
|
||
IMULI N1,^D1000 ;READY TO DIVIDE
|
||
IDIV N1,JOBRN ;DIVIDE
|
||
ADDI N1,5 ;ROUND
|
||
IDIVI N1,^D10 ;DO IT
|
||
MOVEM N1,@TAB.P(J) ;STORE IT
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
; ROUTINE TO STASH NR OF JOBS IN TTY IO QUEUES
|
||
|
||
TIOW%G: MOVE N1,JOBTTY ;GET NUMBER OF JOBS IN TTY QUEUES
|
||
MOVEM N1,@TAB.P(J) ;AND STORE IT
|
||
POPJ P, ;AND RETURN
|
||
|
||
; ROUTINE TO STASH NUMBER OF JOBS IN OTHER WAIT QUEUES
|
||
|
||
IOW%G: MOVE N1,JOBIO ;PICK UP COUNT AS SEEN BY OTHER ROUTINE
|
||
MOVEM N1,@TAB.P(J) ;STORE IT
|
||
POPJ P, ;AND THATS IT
|
||
|
||
|
||
; ROUTINE TO STORE NUMBER OF JOBS SEEN IN SHAREABLE RESOURCE QUEUES
|
||
|
||
JSHQ%G: MOVE N1,JOBSHR ;PICK UP
|
||
MOVEM N1,@TAB.P(J) ;AND STORE IT
|
||
POPJ P, ;AND THATS ALL
|
||
|
||
|
||
SUBTTL PHYSICAL DISK UNIT ANALYSIS/INITIALIZATION ROUTINES
|
||
|
||
; HERE WE GO OVER THE LIST POINTED TO BY THE POINTER "UNIPTR"
|
||
; AND DISCARD APPROPRIATE UNITS AND SET UP DBS FOR THE OTHERS
|
||
|
||
DISK%I: SKIPN N1,UNIPTR ;GET UNIT POINTER
|
||
POPJ P, ;IF NONE,NO NEED TO BOTHER
|
||
MOVSI T2,'DSK' ;MUST HAVE A DISK
|
||
MOVEM T2,ARGS+.DCNAM ;STORE AS FIRST ARGUMENT
|
||
MOVE T2,[ARGSLN,,ARGS] ;SET UP FOR DSKCHR
|
||
DSKCHR T2, ;DO IT
|
||
POPJ P, ;IF NOT AVAILABLE,SKIP IT
|
||
SKIPN ARGS+.DCBUM ;CHECK NUMBER OF CYLINDERS
|
||
POPJ P, ;EXTENDED INFO NOT AVAILABLE
|
||
MOVE N2,UNIDB ;GET BASE OF DBS
|
||
|
||
DISK.1: MOVE T2,0(N2) ;GET THE STR NAME
|
||
CAMN T2,[-1] ;IS IT -1 (FIXED HEAD)?
|
||
JRST DISK.3 ;YES,IGNORE THE DB SETUP
|
||
SKIPE SDISK ;WANT ONLY SYSTEM DISKS(SDISK=0)
|
||
JRST DISK.2 ;NO,USE ALL
|
||
MOVEM T2,ARGS+2 ;STORE AS GOBSTR ARG
|
||
SETZM ARGS+0
|
||
SETZM ARGS+1
|
||
MOVE T2,[3,,ARGS] ;SET IT UP
|
||
GOBSTR T2, ;SEE IF IN SYSTEM S.L.
|
||
TDZA T1,T1 ;FLAG WITH 0 DB SINCE NOT WANTED
|
||
DISK.2: PUSHJ P,DBCORE ;GET APPOPRIATE CORE
|
||
HRRZM T1,0(N2) ;STORE DB ADDRESS
|
||
DISK.3: AOJ N2, ;INCREMENT DB ADDRESS
|
||
AOBJN N1,DISK.1 ;LOOP FOR ALL
|
||
POPJ P, ;THEN RETURN
|
||
|
||
|
||
DISK%G: SKIPN N1,UNIPTR ;GET ADDRESS OF POINTERS
|
||
POPJ P, ;RETURN IF NONE
|
||
MOVE N2,UNIDB ;GET DB ADDRESS TOO
|
||
|
||
DISG.1: HRRZ N3,0(N2) ;GET DB ADDRESS
|
||
CAIE N3,0 ;IF 0 OR
|
||
CAIN N3,-1 ; -1 THEN WE DON'T DO THIS ONE
|
||
JRST DISG.2 ;ITS EITHER FH OR NON SYS
|
||
SKIPN (N1) ;IF UNIT IS NULL, SKIPIT
|
||
JRST DISG.2
|
||
ADDI N3,(L) ;UPDATE DB ADDRESS FOR CURRENT LOOK
|
||
MOVE T1,0(N1) ;GET NAME OF UNIT
|
||
MOVEM T1,ARGS ;STORE FOR DSKCHR
|
||
MOVE T1,[ARGSLN,,ARGS] ;SET FOR UUO
|
||
DSKCHR T1, ;DO IT
|
||
JRST E$$DUF ;DSCHR UUO FAILED
|
||
MOVE T1,ARGS+.DCLPQ ;GET LENGTH OF POSITION WAIT Q
|
||
MOVEM T1,0(N3) ;STORE IT FOR THIS LOOK
|
||
DISG.2: AOJ N2, ;UPDATE DB POINTER
|
||
AOBJN N1,DISG.1 ;REPEAT FOR ALL
|
||
POPJ P, ;THEN RETURN
|
||
|
||
$ERROR(EF.FAT!EF.EXT,DUF,DSKCHR UUO FAILED)
|
||
|
||
|
||
; HERE TO DISPLAY ALL SELECTED DISK UNITS
|
||
|
||
DISK%D: SKIPN N1,UNIPTR ;IF NO UNITS
|
||
POPJ P, ;RETURN
|
||
MOVE N2,UNIDB ;BASE OF DB LIST
|
||
UNIOL: HRRZ T2,0(N2) ;GET DB ADDRESS
|
||
CAIE T2,0 ;IF ITS 0 OR
|
||
CAIN T2,-1 ; -1,THEN SKIP THIS ONE
|
||
JRST UNIFHD ;SKIP STUFF IF FIXED HEAD OR NON-SYS
|
||
MOVEM T2,TAB.P(J) ;STORE IT AS ADRESS THIS ITEM
|
||
MOVE T1,0(N1) ;GET UNITS NAME
|
||
PUSH P,N1 ;SAVE N1 AND N2 ACROSS CALL
|
||
PUSH P,N2
|
||
TYPES (<LENGTH OF POSITION WAIT QUEUE FOR >)
|
||
PUSHJ P,SIXPNT ;AND PRINT IT
|
||
IFN FTTRC,<
|
||
MOVEM T1,BAUXWD ;STASH NAME FOR TRACE TOO.
|
||
>; END OF IFN FTTRC
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,OUTDBF ;AND PRINT
|
||
POP P,N2
|
||
POP P,N1 ;RESTORE THE ACS
|
||
UNIFHD: AOJ N2, ;UPDATE POINTER TO DBS
|
||
AOBJN N1,UNIOL ;LOOP FOR ALL IN LIST
|
||
POPJ P, ;ELSE RETURN
|
||
|
||
|
||
SUBTTL ANALYZE THE CHANNEL DATA
|
||
; ROUTINE TO INITIALIZE FOR WATCHING REQUESTS FOR EACH CHANNEL
|
||
|
||
CHAN%I: MOVE N1,UNIPTR ;GET POINTER TO STR NAMES
|
||
MOVE N2,UNIDB ;GET BASE OF DB LIST
|
||
SETO N3, ;INITIAL CHANNEL NUMBER
|
||
|
||
CHNI.1: MOVE T2,0(N1) ;GET UNIT NAME
|
||
JUMPE T2,CHNI.2 ;SKIP IF NULL
|
||
MOVEM T2,ARGS+.DCNAM ;STORE AS DSKCHR ARG
|
||
MOVE T2,[ARGSLN,,ARGS] ;GET LENGTH,ADDRESS OF ARG BLOCK
|
||
DSKCHR T2, ;ASK MONITOR FOR INFO
|
||
JRST E$$DUF ;IF UNAVAILABLE,COMPLAIN
|
||
LDB T2,[POINTR(T2,DC.DCN)] ;GET CHANNEL NUMBER
|
||
CAMN T2,N3 ;SAME AS LAST ONE QUERIED?
|
||
TDZA T1,T1 ;YES,DON'T SET UP A DB
|
||
PUSHJ P,DBCORE ;OTHERWISE ALLOCATE CORE
|
||
HRLM T1,0(N2) ;STORE IN LEFT HALF OF DB LIST
|
||
MOVEM T2,N3 ;INSURE THAT CHANNEL NR. IS UPDATED
|
||
CHNI.2: ADDI N2,1 ;UPDATE POINTER
|
||
AOBJN N1,CHNI.1 ;LOOP FOR ALL UNITS IN LIST
|
||
POPJ P, ;THEN RETURN
|
||
|
||
|
||
; HERE TO FIND OUT THE LENGTH OF THE XFER WAIT QUEUE FOR EACH CHANNEL
|
||
; ON THE SYSTEM.
|
||
|
||
CHAN%G: MOVE N1,UNIPTR ;GET UNIT NAME POINTER
|
||
MOVE N2,UNIDB ;GET BASE OF DB LIST
|
||
|
||
CHNG.1: HLRZ T1,0(N2) ;GET THIS DBS ADDRESS
|
||
JUMPE T1,CHNG.2 ;IF NONE SET UP,SKIP THIS ENTRY
|
||
HLLZ T2,0(N1) ;GET LH OF UNIT NAME (IE KONTROLLER NAME)
|
||
MOVEM T2,ARGS+.DCNAM ;STORE INTO ARG BLOCK
|
||
MOVE T2,[ARGSLN,,ARGS] ;L,,A OF ARG BLOCK
|
||
DSKCHR T2, ;ASK MONITOR FOR DATA
|
||
JRST E$$DUF ;SHOULDNT FAIL HERE
|
||
MOVE T2,ARGS+.DCLTQ ;GET LENGTH OF QUEUE
|
||
ADDI T1,0(L) ;UPDATE TO THIS LOOK
|
||
MOVEM T2,0(T1) ;AND STORE REPORT VALUE
|
||
CHNG.2: ADDI N2,1 ;UPDATE DB LIST ADDRESS
|
||
AOBJN N1,CHNG.1 ;AND LOOP FOR ALL UNITS
|
||
POPJ P, ;THEN RETURN
|
||
|
||
; ROUTINE TO PRINT NR OF REQUESTS PER CHANNEL
|
||
|
||
CHAN%D: MOVE N2,UNIPTR ;GET BASE POINTER OF LIST
|
||
HRR N2,UNIDB ;BUT MAKE IT POINT TO DB'S
|
||
SETZ N1, ;0 CHANNEL IS FIRST
|
||
CHND.1: HLRZ T1,0(N2) ;GET DB ENTRY
|
||
JUMPE T1,CHND.2 ;SKIP IF NULL
|
||
MOVEM T1,TAB.P(J) ;STORE AS THE ADDRESS
|
||
PUSH P,N1 ;STORE N1
|
||
PUSH P,N2 ;AND N2 ACROSS DBOUT CALL
|
||
TYPES (<LENGTH OF TRANSFER WAIT QUEUE ON DATA CHANNEL >)
|
||
MOVE T1,N1 ;GET CHANNEL NUMBER
|
||
PUSHJ P,OCTOUT ;PRINT IT
|
||
IFN FTTRC, <
|
||
MOVEM T1,BAUXWD ;STORE FOR TRACE
|
||
> ;END OF IFN FTTRC
|
||
PUSHJ P,CRLF ;PRINT A CR-LF PAIR
|
||
PUSHJ P,OUTDBF ;FLASH
|
||
POP P,N2 ;RESTORE N2
|
||
POP P,N1 ;RESTORE N1
|
||
ADDI N1,1 ;UPDATE THE CHANNEL COUNTER
|
||
CHND.2: AOBJN N2,CHND.1 ;REPEAT FOR ALL CHANNELS
|
||
POPJ P, ;THEN RETURN TO CALLER
|
||
|
||
SUBTTL ROUTINE TO DO FREE CORE ANALYSIS
|
||
|
||
PFCU%I: MOVX GT,%CNLOC ;GET FIRST EXEC ADDR USED FOR
|
||
PUSHJ P,FETTAB ;FREE CORE
|
||
MOVE T1,SYSSIZ ;TOTAL SYSTEM SIZE
|
||
SUB T1,GT ;GET SIZE OF FREE CORE
|
||
LSH T1,-2 ;NR. OF 4 WORD CHUNKS
|
||
MOVEM T1,TNFCC ;TOTAL NR. OF FREE CORE CHUNKS
|
||
PJRST DBCORE ;GET DB AND RETURN
|
||
|
||
PFCU%G: MOVX GT,%CNFRU ;GET NR. CHUNKS USED
|
||
PUSHJ P,FETTAB ;
|
||
MOVE T1,GT
|
||
IMULI T1,^D100 ;GET PERCENT OF TOTAL
|
||
IDIV T1,TNFCC
|
||
MOVEM T1,@TAB.P(J) ;STORE
|
||
POPJ P, ;AND RETURN
|
||
|
||
|
||
;ROUTINES TO DO TTY CHUNK USAGE ANALYSIS
|
||
|
||
PTCU%I: MOVX GT,%CNTTC ;NUMBER OF TTY CHUNKS
|
||
PUSHJ P,FETTAB
|
||
HLRZM GT,TNTCH ;STORE FOR LATER
|
||
; (# CHUNKS IS IN LH)
|
||
PJRST DBCORE ;GET DB AND RETURN
|
||
|
||
PTCU%G: MOVX GT,%CNTTN ;GET NUMBER OF FREE CHUNKS
|
||
PUSHJ P,FETTAB
|
||
MOVE T1,GT ;GET INTO BETTER AC
|
||
IMULI T1,^D100 ;TURN INTO % FREE
|
||
IDIV T1,TNTCH
|
||
MOVEI T2,^D100 ;AND NOW INTO % USED
|
||
SUB T2,T1
|
||
MOVEM T2,@TAB.P(J) ;STORE
|
||
POPJ P, ;RETURN
|
||
|
||
|
||
; ROUTINE TO GET FROM MONITOR THE NUMBER OF XMT/RCV INTERUPTS FROM SCNSER
|
||
|
||
SRCV%G: SKIPA GT,[%SCNRI] ;SCANNER SERVICE RCV INTERUPTS
|
||
SXMT%G: MOVX GT,%SCNXI ;SCANNER SERVICE XMT INTERUPTS
|
||
PJRST INCSEC ;STORE AS PER SECOND
|
||
|
||
SUBTTL SCHEDULER PARAMETERS AVAILABLE WITH 602 SCHEDULER
|
||
SWPN%I: SKIPA GT,[%SSNUL] ;SEE IF ITS THERE
|
||
SWPL%I: MOVX GT,%SSLOS ;DITTO
|
||
PJRST DBOPTN ;DO THE GETTAB, AND CALL DBCORE IF ITS THERE
|
||
SWPN%G: MOVX GT,%SSNUL ;GET SWAPPER NULL TIME, IN TICKS
|
||
PJRST CPCOMM ;IT WILL BE PRINTED AS TICKS
|
||
SWPL%G: MOVX GT,%SSLOS ;GET SWAPPER LOST TIME
|
||
PJRST CPCOMM ;GO JOIN COMMON % CODE
|
||
;REPORT NUMBER OF UNWINDS - TIMES A JOB WAS RUN OUT OF ORDER
|
||
SWPF%I: SKIPA GT,[%SSOSO] ;TEST FOR EXISTENCE OF NUMBER
|
||
UNWD%I: MOVX GT,%SSORJ ;DITTO
|
||
PJRST DBOPTN ;IF GETTAB EXISTS, CALL DBCORE
|
||
SWPF%G: SKIPA GT,[%SSOSO]
|
||
UNWD%G: MOVX GT,%SSORJ ;GET UNWIND COUNT
|
||
PUSHJ P,FETOPT ;GET THE COUNT
|
||
SETZ GT, ;IGNORE ERROR
|
||
PUSHJ P,STONXT ;STORE AS NEXT
|
||
SUBM GT,@TAB.P(J) ;AND MAKE THIS INCREMENTAL
|
||
POPJ P,
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU0
|
||
EXEC%I: MOVE T1,[XWD 2,PF0A1] ;TO GET METER
|
||
skipn mbord0 ;user want on this cpu?
|
||
jrst [setom tab.p(j)
|
||
setzm pf0a1b
|
||
POPJ P,
|
||
]
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU0
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF0A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXEC%G: MOVE T1,[XWD 1,PF0A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPEN IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF0A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF0A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF0A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF0A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB0ON ;MBOX ON???
|
||
JUMPN T1,N0MBX ;NOPE
|
||
DMOVE T3,PF0A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF0A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC (PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB0CT ;SAVE FOR MBXR%G
|
||
N0MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF0A3B,PF0A2B] ;BLT SETUP
|
||
BLT T1,PF0A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF0A1: 1,,PF0A1B ;SET
|
||
PF0A2: 2,,PF0A2B ;START
|
||
PF0A3: 3,,PF0A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF0A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 1B18!1B19 ;CPU0 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF0A2B: EXP 7 ;DATA RETURNED IF OK
|
||
BLOCK 7
|
||
;READ
|
||
PF0A3B: EXP 7 ;DATA RETURNED IF OK
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBXR%I: MOVE T1,PF0A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB0ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU0
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBXR%G: MOVE GT,MB0CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB0CT: 0
|
||
MB0ON: -1
|
||
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU1
|
||
EXE1%I: MOVE T1,NCPU ;[217] GET # CPUS
|
||
skipe mbord1 ;user want board on cpu1?
|
||
CAIGE T1,2 ;CPU1 EXIST??
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
setzm pf1a1b
|
||
POPJ P, ;AND RETURN
|
||
] ;END LITERAL..NO CPU1
|
||
MOVE T1,[XWD 2,PF1A1] ;TO GET METER
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU1
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF1A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXE1%G: MOVE T1,NCPU ;[217] # OF CPUS
|
||
CAIGE T1,2 ;[217] DOES CPU1 EXIST?
|
||
POPJ P, ;NO..RETURN
|
||
MOVE T1,[XWD 1,PF1A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPEN IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF1A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF1A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF1A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF1A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB1ON ;MBOX ON???
|
||
JUMPN T1,N1MBX ;NOPE
|
||
DMOVE T3,PF1A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF1A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC(PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB1CT ;SAVE FOR MBXR%G
|
||
N1MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF1A3B,PF1A2B] ;BLT SETUP
|
||
BLT T1,PF1A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF1A1: 1,,PF1A1B ;SET
|
||
PF1A2: 2,,PF1A2B ;START
|
||
PF1A3: 3,,PF1A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF1A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 1B17!1B18!1B19 ;CPU1 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF1A2B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 1 ;CPU1
|
||
BLOCK 7
|
||
;READ
|
||
PF1A3B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 1 ;CPU1
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBX1%I: MOVE T1,NCPU ;[217] # OF CPUS
|
||
CAIGE T1,2 ;217] CPU1 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
POPJ P, ;AND RETURN
|
||
]
|
||
MOVE T1,PF1A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB1ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU1
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBX1%G: MOVE GT,MB1CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB1CT: 0
|
||
MB1ON: -1
|
||
|
||
|
||
|
||
;[217] BEGINNING OF PERFORMANCE METER CODE FOR CPU2
|
||
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU2
|
||
EXE2%I: MOVE T1,NCPU ;GET # CPUS
|
||
skipe mbord2 ;user want board on cpu2?
|
||
CAIGE T1,3 ;CPU2 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
setzm pf2a1b
|
||
POPJ P, ;AND RETURN
|
||
] ;END LITERAL..NO CPU1
|
||
MOVE T1,[XWD 2,PF2A1] ;TO GET METER
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU2
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF2A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXE2%G: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+2 ;[217] CPU2 EXIST?
|
||
POPJ P, ;NO..RETURN
|
||
MOVE T1,[XWD 1,PF2A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPENT IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF2A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF2A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF2A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF2A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB2ON ;MBOX ON???
|
||
JUMPN T1,N2MBX ;NOPE
|
||
DMOVE T3,PF2A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF2A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC(PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB2CT ;SAVE FOR MBXR%G
|
||
N2MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF2A3B,PF2A2B] ;BLT SETUP
|
||
BLT T1,PF2A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF2A1: 1,,PF2A1B ;SET
|
||
PF2A2: 2,,PF2A2B ;START
|
||
PF2A3: 3,,PF2A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF2A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 2B17!1B18!1B19 ;CPU2 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF2A2B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 2 ;CPU2
|
||
BLOCK 7
|
||
;READ
|
||
PF2A3B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 2 ;CPU2
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBX2%I: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+2 ;[217] DOES CPU2 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
POPJ P, ;AND RETURN
|
||
]
|
||
MOVE T1,PF2A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB2ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU2
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBX2%G: MOVE GT,MB2CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB2CT: 0
|
||
MB2ON: -1
|
||
;[217] END OF PERF METER SUPPORT FOR CPU2
|
||
|
||
|
||
|
||
|
||
;[217] BEGINNING OF PERFORMANCE METER CODE FOR CPU3
|
||
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU3
|
||
EXE3%I: MOVE T1,NCPU ;GET # CPUS
|
||
skipe mbord3 ;user want board on cpu3?
|
||
CAIGE T1,4 ;CPU3 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
setzm pf3a1b
|
||
POPJ P, ;AND RETURN
|
||
] ;END LITERAL..NO CPU1
|
||
MOVE T1,[XWD 2,PF3A1] ;TO GET METER
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU3
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF3A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXE3%G: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+3 ;[217] CPU3 EXIST?
|
||
POPJ P, ;NO..RETURN
|
||
MOVE T1,[XWD 1,PF3A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPENT IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF3A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF3A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF3A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF3A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB3ON ;MBOX ON???
|
||
JUMPN T1,N3MBX ;NOPE
|
||
DMOVE T3,PF3A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF3A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC(PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB3CT ;SAVE FOR MBXR%G
|
||
N3MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF3A3B,PF3A2B] ;BLT SETUP
|
||
BLT T1,PF3A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF3A1: 1,,PF3A1B ;SET
|
||
PF3A2: 2,,PF3A2B ;START
|
||
PF3A3: 3,,PF3A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF3A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 3B17!1B18!1B19 ;CPU3 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF3A2B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 3 ;CPU3
|
||
BLOCK 7
|
||
;READ
|
||
PF3A3B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 3 ;CPU3
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBX3%I: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+3 ;[217] DOES CPU3 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
POPJ P, ;AND RETURN
|
||
]
|
||
MOVE T1,PF3A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB3ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU3
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBX3%G: MOVE GT,MB3CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB3CT: 0
|
||
MB3ON: -1
|
||
;[217] END OF PERF METER SUPPORT FOR CPU3
|
||
|
||
|
||
|
||
|
||
;[217] BEGINNING OF PERFORMANCE METER CODE FOR CPU4
|
||
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU4
|
||
EXE4%I: MOVE T1,NCPU ;GET # CPUS
|
||
skipe mbord4 ;user want board on cpu4?
|
||
CAIGE T1,5 ;CPU4 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
setzm pf4a1b
|
||
POPJ P, ;AND RETURN
|
||
] ;END LITERAL..NO CPU1
|
||
MOVE T1,[XWD 2,PF4A1] ;TO GET METER
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU4
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF4A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXE4%G: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+4 ;[217] CPU4 EXIST?
|
||
POPJ P, ;NO..RETURN
|
||
MOVE T1,[XWD 1,PF4A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPENT IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF4A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF4A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF4A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF4A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB4ON ;MBOX ON???
|
||
JUMPN T1,N4MBX ;NOPE
|
||
DMOVE T3,PF4A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF4A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC(PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB4CT ;SAVE FOR MBXR%G
|
||
N4MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF4A3B,PF4A2B] ;BLT SETUP
|
||
BLT T1,PF4A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF4A1: 1,,PF4A1B ;SET
|
||
PF4A2: 2,,PF4A2B ;START
|
||
PF4A3: 3,,PF4A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF4A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 4B17!1B18!1B19 ;CPU4 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF4A2B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 4 ;CPU4
|
||
BLOCK 7
|
||
;READ
|
||
PF4A3B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 4 ;CPU4
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBX4%I: MOVE T1,NCPU ;[217] GET # CPUS
|
||
CAIGE T1,1+4 ;[217] DOES CPU4 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
POPJ P, ;AND RETURN
|
||
]
|
||
MOVE T1,PF4A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB4ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU4
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBX4%G: MOVE GT,MB4CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB4CT: 0
|
||
MB4ON: -1
|
||
;[217] END OF PERF METER SUPPORT FOR CPU4
|
||
|
||
|
||
|
||
|
||
;[217] BEGINNING OF PERFORMANCE METER CODE FOR CPU5
|
||
|
||
;
|
||
; THIS RUN TO METER EXEC TIME-CPU5
|
||
EXE5%I: MOVE T1,NCPU ;GET # CPUS
|
||
skipe mbord5 ;user want board on cpu5?
|
||
CAIGE T1,6 ;CPU5 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
setzm pf5a1b
|
||
POPJ P, ;AND RETURN
|
||
] ;END LITERAL..NO CPU1
|
||
MOVE T1,[XWD 2,PF5A1] ;TO GET METER
|
||
PERF. T1, ;TRY IT
|
||
JRST [OUTSTR [ASCIZ/
|
||
NOT ABLE TO ALLOCATE PERFORMANCE METER-CPU5
|
||
/]
|
||
SETOM TAB.P(J) ;CLEAR IT
|
||
SETZM PF5A1B ;TELL MBXR NO GO
|
||
POPJ P, ;RETURN
|
||
]
|
||
PJRST DBCORE ;SET UP CORE
|
||
;
|
||
;
|
||
EXE5%G: MOVE T1,NCPU ; GET # CPUS
|
||
CAIGE T1,1+5 ; CPU5 EXIST?
|
||
POPJ P, ;NO..RETURN
|
||
MOVE T1,[XWD 1,PF5A3] ;READ METER
|
||
PERF. T1, ;DO IT
|
||
POPJ P, ;NOPE GO AWAY
|
||
;
|
||
;
|
||
PUSH P,N1 ;SAVE A FEW AC(S)
|
||
PUSH P,N2 ;DITTO
|
||
PUSH P,N3 ;DITTO
|
||
PUSH P,GT ;DITTO
|
||
;
|
||
; COMPUTE % OF TIME SPENT IN EXEC MODE BASED ON TIME
|
||
; BASE INCREMENT FROM PERF BOARD AND EXEC TIME BASE
|
||
; INCREMENT FROM PERF BOARD.
|
||
;
|
||
; NOTE THAT THE ELAPSED TIME ASSUMES A CLOCK RATE OF 1MHZ
|
||
; AND THAT THE EXEC TIME BASE ASSUMES A CLOCK RATE OF 1/2
|
||
; THE SYSTEM CLOCK RATE.
|
||
;
|
||
; FOR OUR SYSTEMS (KL1090-B) THE CLOCK RATE IS 30MHZ.
|
||
; THE HALF CLOCK RATE IS 15MHZ.
|
||
; SEE THE HARDWARE REF MANUAL ..PERFORMANCE AND ACCOUNTING
|
||
;
|
||
DMOVE T1,PF5A3B+2 ;GET TIME WE FINISHED
|
||
DSUB T1,PF5A2B+2 ;SUBTRACT ORIGINAL COUNT
|
||
ASHC T1 ,-^D12 ;ELIMINATE RESERVED
|
||
FLTR T2,T2 ;FLOAT...SINGLE PRESISION
|
||
FDVR T2,[EXP 1000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR TIME (SECONDS) SPENT IN EXEC MODE PC.
|
||
;
|
||
DMOVE N1,PF5A3B+4 ;GET DURATION IN EXEC
|
||
DSUB N1,PF5A2B+4 ;SUB FROM ORIG
|
||
ASHC N1,-^D12 ;ELIMINATE RESERVED BITS
|
||
FLTR N2,N2 ;FLOAT...SINGLE PRES.
|
||
FDVR N2,[EXP 15000000.] ;CONVERT TO SECONDS.
|
||
;
|
||
; NOW FOR THE PERCENTAGE CALULATION.
|
||
;
|
||
FDVR N2,T2 ;EXEC/ELAPSED
|
||
FMPR N2,[EXP 100.] ;TO %
|
||
FIXR N2,N2 ;TO INTEGER
|
||
MOVEM N2,@TAB.P(J) ;FOR TRACK
|
||
;
|
||
; ALL DONE...
|
||
;
|
||
;DO STUFF FOR MBOX REFS
|
||
MOVE T1,MB5ON ;MBOX ON???
|
||
JUMPN T1,N5MBX ;NOPE
|
||
DMOVE T3,PF5A3B+6 ;GET NEW COUNT
|
||
DSUB T3,PF5A2B+6 ;FROM ORIGINAL
|
||
ASHC T3,-^D12 ;GET RID OF 00000'S
|
||
FLTR T4,T4 ;MAKE ARITH EASY TO FOLLOW
|
||
FDVR T4,[EXP 1000.0] ;CONVERT TO K
|
||
FDVR T4,T2 ;CONVERT TO K/SEC(PERF TIME BASE)
|
||
FIXR T4,T4 ;SO TRACK WILL UNDERSTAND
|
||
MOVEM T4,MB5CT ;SAVE FOR MBXR%G
|
||
N5MBX:
|
||
POP P,GT ;RESTORE AC(S)
|
||
POP P,N3
|
||
POP P,N2
|
||
POP P,N1
|
||
;
|
||
MOVE T1,[XWD PF5A3B,PF5A2B] ;BLT SETUP
|
||
BLT T1,PF5A2B+10 ;MAKE RECENT OLD
|
||
;
|
||
POPJ P, ;RETURN
|
||
;
|
||
;FUNCTION BLOCKS
|
||
;
|
||
PF5A1: 1,,PF5A1B ;SET
|
||
PF5A2: 2,,PF5A2B ;START
|
||
PF5A3: 3,,PF5A3B ;READ
|
||
;
|
||
;SET FUNCTION ARG LIST
|
||
;
|
||
PF5A1B: 11 ;LENGTH OF BLOCK
|
||
EXP 1B3 ;YES WE ARE A KL(!)
|
||
EXP 5B17!1B18!1B19 ;CPU5 ,CLEAR AND DURATION MODE
|
||
0 ;NO CACHE STUFF
|
||
Z ;NO PI STUFF
|
||
EXP 1B0 ;EXEC MODE PC
|
||
0 ;NO MICROCODE ENA
|
||
0 ;NO PROBE ENABLES
|
||
0 ;NO JOB ENABLES
|
||
0 ;NO RH20 ENAABLE
|
||
;START
|
||
PF5A2B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 5 ;CPU5
|
||
BLOCK 7
|
||
;READ
|
||
PF5A3B: EXP 7 ;DATA RETURNED IF OK
|
||
OCT 5 ;CPU5
|
||
BLOCK 7
|
||
;
|
||
;HERE TO SET UP FOR MBOX REFERENCES COUNTS
|
||
MBX5%I: MOVE T1,NCPU ;GET # CPUS
|
||
CAIGE T1,1+5 ;DOES CPU5 EXIST?
|
||
JRST [ SETOM TAB.P(J);CLEAR TABLE
|
||
POPJ P, ;AND RETURN
|
||
]
|
||
MOVE T1,PF5A1B ;IS EXEC ON???
|
||
SKIPE T1 ;NOPE
|
||
JRST [SETZM MB5ON
|
||
PJRST DBCORE
|
||
]
|
||
OUTSTR [ASCIZ/
|
||
NEED PERF BOARD TO GET MBXR-CPU5
|
||
/]
|
||
SETOM TAB.P(J) ;TURN OFF MBXR
|
||
POPJ P,
|
||
;
|
||
MBX5%G: MOVE GT,MB5CT ;GET COUNT
|
||
MOVEM GT,@TAB.P(J) ;FOR TRACK
|
||
POPJ P,
|
||
MB5CT: 0
|
||
MB5ON: -1
|
||
; END OF PERF METER SUPPORT FOR CPU5
|
||
|
||
;SCDPER DATA
|
||
;SEE SCHED1.MAC SCDPER:
|
||
;FOR USE IN 603+SCHED LIR OR 603.A + MONITORS
|
||
;
|
||
SDGS%I: MOVE GT,[%SPDGS] ;DTA GEN SLEEPS
|
||
PJRST DBOPTN
|
||
SDGS%G: MOVE GT,[%SPDGS]
|
||
PJRST SIMINC
|
||
;
|
||
SMGS%I: MOVE GT,[%SPMGS] ;MTA GEN SLEEPS
|
||
PJRST DBOPTN
|
||
SMGS%G: MOVE GT,[%SPMGS]
|
||
PJRST SIMINC
|
||
;
|
||
SEWS%I: MOVE GT,[%SPEWS] ;EVENT WAIT SATIS.
|
||
PJRST DBOPTN
|
||
SEWS%G: MOVE GT,[%SPEWS]
|
||
PJRST SIMINC
|
||
;
|
||
STIS%I: MOVE GT,[%SPTIS] ;TTY INP WAIT SATIS.
|
||
PJRST DBOPTN
|
||
STIS%G: MOVE GT,[%SPTIS]
|
||
PJRST SIMINC
|
||
;
|
||
STOS%I: MOVE GT,[%SPTOS] ;TTY OUTPUT SATIS.
|
||
PJRST DBOPTN
|
||
STOS%G: MOVE GT,[%SPTOS]
|
||
PJRST SIMINC
|
||
;
|
||
SPIS%I: MOVE GT,[%SPPIS] ;PTY INPUT SATIS.
|
||
PJRST DBOPTN
|
||
SPIS%G: MOVE GT,[%SPPIS]
|
||
PJRST SIMINC
|
||
;
|
||
SPOS%I: MOVE GT,[%SPPOS] ;PTY OUTPUT SATIS.
|
||
PJRST DBOPTN
|
||
SPOS%G: MOVE GT,[%SPPOS]
|
||
PJRST SIMINC
|
||
;
|
||
SRS1%I: MOVE GT,[%SPRS1] ;SS TO PQ1 REQ
|
||
PJRST DBOPTN
|
||
SRS1%G: MOVE GT,[%SPRS1]
|
||
PJRST SIMINC
|
||
;
|
||
SRW1%I: MOVE GT,[%SPRW1] ;WAKE TO PQ1 REQ
|
||
PJRST DBOPTN
|
||
SRW1%G: MOVE GT,[%SPRW1]
|
||
PJRST SIMINC
|
||
;
|
||
SRD1%I: MOVE GT,[%SPRD1] ;JD WAIT SATIS TO PQ1 REQ
|
||
PJRST DBOPTN
|
||
SRD1%G: MOVE GT,[%SPRD1]
|
||
PJRST SIMINC
|
||
;
|
||
SRO1%I: MOVE GT,[%SPRO1] ;OTHER TO PQ1 REQ
|
||
PJRST DBOPTN
|
||
SRO1%G: MOVE GT,[%SPRO1]
|
||
PJRST SIMINC
|
||
;
|
||
SQR1%I: MOVE GT,[%SPQR1] ;PQ1 QUANTUM EXPIRE
|
||
PJRST DBOPTN
|
||
SQR1%G: MOVE GT,[%SPQR1]
|
||
PJRST SIMINC
|
||
;
|
||
SQR2%I: MOVE GT,[%SPQR2] ;PQ2 QUANTUM EXPIRE
|
||
PJRST DBOPTN
|
||
SQR2%G: MOVE GT,[%SPQR2]
|
||
PJRST SIMINC
|
||
;
|
||
SQRH%I: MOVE GT,[%SPQRH] ;HPQ QUANTUM EXPIRE
|
||
PJRST DBOPTN
|
||
SQRH%G: MOVE GT,[%SPQRH]
|
||
PJRST SIMINC
|
||
;
|
||
SIP1%I: MOVE GT,[%SPIP1] ;PQ1 ICPT EXPIRE
|
||
PJRST DBOPTN
|
||
SIP1%G: MOVE GT,[%SPIP1]
|
||
PJRST SIMINC
|
||
;
|
||
SIP2%I: MOVE GT,[%SPIP2] ;PQ2 ICPT EXPIRE
|
||
PJRST DBOPTN
|
||
SIP2%G: MOVE GT,[%SPIP2]
|
||
PJRST SIMINC
|
||
;
|
||
SIPH%I: MOVE GT,[%SPIPH] ;HPQ ICPT EXPIRE
|
||
PJRST DBOPTN
|
||
SIPH%G: MOVE GT,[%SPIPH]
|
||
PJRST SIMINC
|
||
;
|
||
SKS1%I: MOVE GT,[%SPKS1] ;SWAP IN K PQ1
|
||
PJRST DBOPTN
|
||
SKS1%G: MOVE GT,[%SPKS1]
|
||
PJRST SIMINC
|
||
;
|
||
SKS2%I: MOVE GT,[%SPKS2] ;SWAP IN K PQ2
|
||
PJRST DBOPTN
|
||
SKS2%G: MOVE GT,[%SPKS2]
|
||
PJRST SIMINC
|
||
;
|
||
SKSH%I: MOVE GT,[%SPKSH] ;SWAP IN K HPQ
|
||
PJRST DBOPTN
|
||
SKSH%G: MOVE GT,[%SPKSH]
|
||
PJRST SIMINC
|
||
;
|
||
SNJ1%I: MOVE GT,[%SPNJ1] ;PQ1 JOBS SWAPPED IN
|
||
PJRST DBOPTN
|
||
SNJ1%G: MOVE GT,[%SPNJ1]
|
||
PJRST SIMINC
|
||
;
|
||
SNJ2%I: MOVE GT,[%SPNJ2] ;PQ2 JOBS SWAPPED IN
|
||
PJRST DBOPTN
|
||
SNJ2%G: MOVE GT,[%SPNJ2]
|
||
PJRST SIMINC
|
||
;
|
||
SNJH%I: MOVE GT,[%SPNJH] ;HPQ JOBS SWAPPED IN
|
||
PJRST DBOPTN
|
||
SNJH%G: MOVE GT,[%SPNJH]
|
||
PJRST SIMINC
|
||
;
|
||
; EBOX/MBOX SINCE HI PRES ACCOUTING USED ...SEE CLOCK1.MAC
|
||
STC1%I: MOVE GT,[%SPTC1] ;PQ1 EBOX/MBOX TICKS
|
||
PJRST DBOPTN
|
||
STC1%G: MOVE GT,[%SPTC1]
|
||
PJRST SIMINC
|
||
STC2%I: MOVE GT,[%SPTC2] ;PQ2 EBOX/MBOX TICKS
|
||
PJRST DBOPTN
|
||
STC2%G: MOVE GT,[%SPTC2]
|
||
PJRST SIMINC
|
||
;
|
||
STCH%I: MOVE GT,[%SPTCH] ;HPQ EBOX/MBOX TICKS
|
||
PJRST DBOPTN
|
||
STCH%G: MOVE GT,[%SPTCH]
|
||
PJRST SIMINC
|
||
;
|
||
; NOW FOR THE WASTED CORE STUFF.
|
||
;
|
||
WASK%I: MOVE GT,[%SPMWC] ;# OF MEASUREMENTS
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,WASK%C ;# OF MEASUREMEMTS.
|
||
MOVE GT,[%SPSWC] ;SUM OF WASTED PAGES
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,WASK%P ;PAGES
|
||
PJRST DBCORE ;ALLOCATE CORE.
|
||
;
|
||
;INCREMETAL DATA COLLECTION
|
||
;
|
||
WASK%G: MOVE GT,[%SPMWC] ;# OF MEASUREMENTS
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,WASK%D ;NEW COUNT...SAVE IT
|
||
MOVE GT,[%SPSWC] ;SUM OF WASTED PAGES
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,WASK%Q ;NEW SUM OF PAGES
|
||
;
|
||
; SAVE A FEW AC(S)
|
||
;
|
||
PUSH P,N1
|
||
PUSH P,N2
|
||
;
|
||
MOVE N1,WASK%P ;PREVIOUS PAGES
|
||
MOVE N2,WASK%C ;PREVIOUS COUNT
|
||
SUBM GT,N1 ;INCREMENTAL PAGES .. N1
|
||
MOVE GT,WASK%D ;NEW COUNT
|
||
SUBM GT,N2 ;INCREMENTAL COUNT
|
||
FLTR N1,N1 ;MAKE THE ARITMETIC
|
||
FLTR N2,N2 ;EASY TO DO
|
||
FDVR N1,N2 ;INC PAGES/INC COUNT
|
||
FIXR N1,N1 ;SO TRACK WILL UNDERSTAND
|
||
MOVE GT,N1 ;FOR STONXT
|
||
;
|
||
; RESTORE N1 & N2
|
||
;
|
||
POP P,N1
|
||
POP P,N2
|
||
PUSHJ P,STONXT ;STORE IN NEXT CELL
|
||
;
|
||
MOVE GT,WASK%D ;MAKE RECENT OLD
|
||
MOVEM GT,WASK%C ;COUNT...
|
||
MOVE GT,WASK%Q ;MAKE RECENT OLD
|
||
MOVEM GT,WASK%P ;PAGES
|
||
POPJ P, ;EXIT/RETURN
|
||
;
|
||
;
|
||
;THE FUNNY LITTLE DATA BASE
|
||
;
|
||
WASK%C: Z
|
||
WASK%P: Z
|
||
WASK%D: Z
|
||
WASK%Q: Z
|
||
;
|
||
; NOW FOR CMQ/PQ1 SWAP IN RESPONSE TIME
|
||
;
|
||
CPSI%I: MOVE GT,[%SPNRS] ;# OF RESPONSES CMQ/PQ1 SWAP IN
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,CPSI%R ;# OF RESPONSES.
|
||
MOVE GT,[%SPNTS] ;TOTAL TICKS
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,CPSI%T ;TICKS
|
||
PJRST DBCORE ;ALLOCATE CORE.
|
||
;
|
||
;INCREMETAL DATA COLLECTION
|
||
;
|
||
CPSI%G: MOVE GT,[%SPNRS] ;# OF RESPONSES
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,CPSI%S ;NEW RESPONSE COUNT...SAVE IT
|
||
MOVE GT,[%SPNTS] ;SUM OF TICKS
|
||
PUSHJ P,FETTAB ;NON OPTIONAL
|
||
MOVEM GT,CPSI%U ;NEW TICK VALUE
|
||
;
|
||
; SAVE A FEW AC(S)
|
||
;
|
||
PUSH P,N1
|
||
PUSH P,N2
|
||
;
|
||
MOVE N1,CPSI%T ;PREVIOUS TICKS
|
||
MOVE N2,CPSI%R ;PREVIOUS COUNT OF RESPONSES
|
||
SUBM GT,N1 ;INCREMENTAL TICKS .. N1
|
||
MOVE GT,CPSI%S ;NEW COUNT OF RESPONSES
|
||
SUBM GT,N2 ;INCREMENTAL COUNT
|
||
FLTR N1,N1 ;MAKE THE ARITMETIC
|
||
FLTR N2,N2 ;EASY TO DO
|
||
FDVR N1,N2 ;TICKS/RESPONSES.
|
||
FIXR N1,N1 ;SO TRACK WILL UNDERSTAND
|
||
MOVE GT,N1 ;FOR STONXT
|
||
;
|
||
; RESTORE N1 & N2
|
||
;
|
||
POP P,N1
|
||
POP P,N2
|
||
PUSHJ P,STONXT ;STORE IN NEXT CELL
|
||
;
|
||
MOVE GT,CPSI%S ;MAKE RECENT OLD
|
||
MOVEM GT,CPSI%R ;COUNT OF RESPONSES...
|
||
MOVE GT,CPSI%U ;MAKE RECENT OLD
|
||
MOVEM GT,CPSI%T ;TICKS
|
||
POPJ P, ;EXIT/RETURN
|
||
;
|
||
;
|
||
;THE FUNNY LITTLE DATA BASE
|
||
;
|
||
CPSI%R: Z
|
||
CPSI%T: Z
|
||
CPSI%S: Z
|
||
CPSI%U: Z
|
||
;
|
||
;** END OF INDIVIDUAL ROUTINES ***
|
||
|
||
SUBTTL DATA AREA
|
||
|
||
|
||
;TABLE OF FIELD LENGTHS FOR POSITIONING ROUTINE
|
||
; NOTE : LENGTH OF HIGH CORE FIELD IS FOR BOTH HIGH AND LOW
|
||
;
|
||
DEFINE X(A,B,C) <
|
||
IFN B, <P.'A: EXP B >>
|
||
|
||
SPATAB: DATUMS
|
||
|
||
%NUMFL==.-SPATAB
|
||
|
||
; HERE WE MAKE A TABLE OF 12 MONTHS FOR THE SYSDAT MODULE
|
||
|
||
DEFINE X(AA),
|
||
<IRP AA
|
||
< SIXBIT/-'AA'-/>>
|
||
MONTAB:
|
||
X <JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC>
|
||
|
||
; AND MAKE A DAY TABLE TOO
|
||
DAYTAB: SIXBIT/(WED)/
|
||
SIXBIT/(THUR)/
|
||
SIXBIT/(FRI)/
|
||
SIXBIT/(SAT)/
|
||
SIXBIT/(SUN)/
|
||
SIXBIT/(MON)/
|
||
SIXBIT/(TUES)/
|
||
|
||
|
||
; HERE WE DEFINE THE PURE TABLES FOR THE SYSDAT MODULE
|
||
|
||
|
||
IFN SYS, <
|
||
|
||
|
||
; NOW IS THE VARIANCE TABLE, FOR EACH ITEM IT CONTAINS THE RANGE
|
||
; OVER WHICH WE MAY GROUP ITEMS TOGETHER FOR THE "PERCENT OF TOTAL
|
||
; IN THE RANGE X TO Y" ROUTINE (OUTDB?)
|
||
; DEFINE THIS AS 1 IF EACH POINT IS TO BE DISCRETE
|
||
; EACH ENTRY HAS THE FORM : XXXX.V: EXP VARIANCE THIS ITEM
|
||
;
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
BB'.V:
|
||
IFG FF, <EXP FF>
|
||
IFLE FF, <PRINTX ?VALUES FOR SYSDAT VARIANCE MUST BE 1 OR GREATER
|
||
EXP 1>>
|
||
|
||
TAB.V: SYSDAT
|
||
LEN.V==.-TAB.V
|
||
|
||
|
||
; HERE WE HAVE THE TABLE OF INITIALIZING ROUTINES
|
||
; THEY ARE CALLED ONCE , WHEN WE FIRST GO INTO THE SYSDAT MODULE
|
||
; THEY SET UP POINTERS, PERHAPS GET FIXED ADDRESSES TO AVOID GETTABS,ETC
|
||
; THIS TABLE CONTAINS THE ADDRESS OF THE INITIALIZING ROUTINES
|
||
; A ZERO ENTRY INDICATES NO ROUTINE
|
||
; NOTE: THESE ROUTINES CALL ASSCOR AND SET UP THE DATA BLOCKS
|
||
;
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
BB'.I: EXP CC
|
||
>
|
||
|
||
|
||
TAB.I: SYSDAT
|
||
LEN.I==.-TAB.I
|
||
|
||
|
||
; HERE WE DEFINE TABLE OF ADDRESSES FOR GATHERING DATA ROUTINES
|
||
;
|
||
; EACH ENTRY IS THE ADDRESS OF A ROUTINE FOR PUSHING TO , TO GET
|
||
; DATA ON EACH LOOK. ROUTINES FOR INITIALIZING,GETTING AND DISPLAYING
|
||
; SHOULD ALL END WITH A POPJ TO RETURN.
|
||
; AS WITH INITIALIZING, A ZERO ENTRY MEANS NO ROUTINE IS TO BE DONE
|
||
;
|
||
; EACH ENTRY IS OF THE FORM: XXXX.G: EXP GATHER ROUTINE
|
||
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
BB'.G: EXP DD
|
||
>
|
||
|
||
|
||
TAB.G:
|
||
SYSDAT
|
||
LEN.G==.-TAB.G
|
||
|
||
|
||
; HERE WE MAKE THE TABLE OF POINTERS TO DATUM LABELS
|
||
; IT IS OF THE FORM XXXX.N: 0,,ADDR LABEL IN ASCIZ
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
IFDIF <AA> <0>,<
|
||
BB'.N: [ASCIZ\AA\] >
|
||
IFIDN <AA> <0>,<
|
||
BB'.N: EXP 0>>
|
||
|
||
TAB.N: SYSDAT
|
||
LEN.N==.-TAB.N
|
||
|
||
|
||
; FINALLY, WE DEFINE A TABLE CONTAINING THE ADDRESSES OF THE OUTPUT
|
||
; ROUTINES. EACH ENTRY IS A POINTER TO A ROUTINE TO DO A PRINTOUT
|
||
; OF THE DATA BLOCK. SEE THE CODE FOR A DESCRIPTION OF AVAILABLE
|
||
; ROUTINES.
|
||
;
|
||
; EACH ENTRY IS OF THE FORM XXXX.D: EXP PRINT ROUTINE
|
||
;
|
||
; A ZERO ENTRY IS OF COURSE AN INSTRUCTION TO DO NO DISPLAYING OF THE
|
||
; ITEM
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
BB'.D: EXP EE
|
||
>
|
||
|
||
|
||
TAB.D:
|
||
SYSDAT
|
||
LEN.D==.-TAB.D
|
||
|
||
; FORM A TABLE OF 4 LETTER SIXBIT CODES , 1 FOR EACH
|
||
; ITEM. THE TABLE IS USED FOR FORMAT:TRACE TYPE REPORTS AND FOR
|
||
; ARGUMENTS TO /INCLUDE AND /EXCLUDE
|
||
; THE 4 LETTERS ARE THE SECOND ARGUMENT IN THE SYSDAT MACRO
|
||
|
||
; FORM IS: XXXX.C: SIXBIT/XXXX/
|
||
;
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
|
||
BB'.C: SIXBIT/BB/>
|
||
|
||
TAB.C: SYSDAT
|
||
LEN.C==.-TAB.C
|
||
|
||
|
||
; END OF CONDITIONAL FOR SYSDAT TABLES >
|
||
|
||
|
||
|
||
;** POSSIBLE START OF IMPURE AREA **
|
||
|
||
IFN PURESW, < RELOC >
|
||
|
||
LOWBEG==. ;START OF CORE AREA TO CLEAR ON START AND RESTART
|
||
|
||
|
||
|
||
; THIS BLOCK CONTAINS THE CURRENT DATA ON JOB
|
||
|
||
DEFINE X(A,B,C)<
|
||
C.'A: BLOCK 1 >
|
||
|
||
CURDAT: DATUMS
|
||
SIZDAT==.-CURDAT ;SIZE OF THIS BLOCK
|
||
|
||
; THIS BLOCK CONTAINS THE OLD CURRENT DATA ON JOB
|
||
DEFINE X(A,B,C)<
|
||
O.'A==C.'A-CURDAT>
|
||
|
||
|
||
;SINCE THESE ARE OFFSETS TO FREE CORE LOCATIONS
|
||
;WITH AC J SET UP AS BASE ADDRESS, DONT GET REAL LOCATIONS
|
||
DATUMS
|
||
OLDAT==CURDAT-CURDAT
|
||
|
||
|
||
QTUM: BLOCK 1 ;TIME TO SLEEP BETWEEN LOOKS
|
||
SAVNUM: BLOCK 1 ;THE TTY OR JOB NUMBER USER WANTS TO WATCH
|
||
|
||
SAVPOP: BLOCK 1 ;PPN OR PROGRAM THAT WE ARE WATCHING
|
||
CTRKJ: BLOCK 1 ;-1 WHEN TRACKING AN ACTIVE JOB
|
||
DEFCMP: BLOCK 1 ;BIT MAP FOR DEFINING WHAT /COMPARE DOES
|
||
|
||
SLPTIM: BLOCK 1 ;TIME WE WENT TO SLEEP LAST IN MS SINCE MID.
|
||
SLPQT: BLOCK 1 ;SAME AS QTUM EXCEPT IN MILLISECONDS
|
||
LOOKS: BLOCK 1 ;NUMBER OF LOOKS TO TAKE BEFORE EXITING (0=INFINITE)
|
||
HIJOB: BLOCK 1 ;HIGHEST JOB NUMBER CURRENTLY ASSIGNED
|
||
MAXTTY: BLOCK 1 ;HIGHEST TTY NUMBER EXISTANT
|
||
MAXJOB: BLOCK 1 ;HIGHEST NUMBER OF JOBS
|
||
MYPPN: BLOCK 1 ;PPN OF THIS JOB
|
||
MYJOB: BLOCK 1 ;JOB NR. OF JOB RUNNING
|
||
SAVUP: BLOCK 1 ;NEG. TIME OF DAY ENTERED LOOKUP&PRINT
|
||
SAVST: BLOCK 1 ;TIME STARTING REPORT
|
||
SAVSTU: BLOCK 1 ;REPORT START TIME IN UNIVERSAL FORMAT
|
||
SAVUPU: BLOCK 1 ;REPORT END TIME IN UNIVERSAL FORMAT
|
||
JSTFLG: BLOCK 1 ;SET TO -1 WHEN WANT OUTPUT LINED UP
|
||
|
||
RVAL: BLOCK 1 ;VALUE OF /R REPORT COUNTER
|
||
AVALC: BLOCK 1 ;COUNTER FOR FILSAV ROUTINE
|
||
AVAL: BLOCK 1 ;MASTER COPY OF AVALC, PRINTOUTS/SAVE
|
||
SDISK: BLOCK 1 ;-1 MEANS WATCH ALL DISKS
|
||
;0 MEANS WATCH ONLY DISKS IN SYSTEM SL
|
||
|
||
OUTRUN: BLOCK 1 ;OUTPUT RUNTIME
|
||
OUTRD: BLOCK 1 ;OUTPUT READS
|
||
OUTWR: BLOCK 1 ;OUTPUT WRITES
|
||
NCPU: BLOCK 1 ; # CPUS MONITORS WAS BUILT FOR
|
||
mbord0: block 1 ;use meter board on cpu0
|
||
mbord1: block 1 ;use meter board on cpu1
|
||
mbord2: block 1 ;use meter board on cpu2
|
||
mbord3: block 1 ;use meter board on cpu3
|
||
mbord4: block 1 ;use meter board on cpu4
|
||
mbord5: block 1 ;use meter board on cpu5
|
||
|
||
; STUFF FOR SPYING
|
||
|
||
MAXGTB: BLOCK 1 ;CONTAINS NUMBER OF GETTAB TABLES
|
||
TABTAB: BLOCK 1 ;ADDRESS OF GETTAB IMMEDIATE TABLE
|
||
PDBPTR: BLOCK 1 ;POINTER TO PDB TABLE (JBTPDB)
|
||
; DEBUG BLOCK POINTED TO BY .JBOPS (LOC 135)
|
||
;MAY BE USEFUL SOME DAY FOR ERROR DEBUGGING
|
||
DEBBLK:
|
||
SAVGT: BLOCK 1 ;SAVE GETTAB ARGS
|
||
SAVADR: BLOCK 1 ;SAVE EXEC ADDRESS OF LAST SPY
|
||
ERRPC: BLOCK 1 ;ADDRESS ERRMSG LAST CALLED FROM
|
||
MEMUNI: BLOCK 1 ;ASCII K OR P DEPENDING ON PROCESSOR
|
||
LASTOK: BLOCK <MAXTOK+1+4>/5 ;LAST TOKEN INPUT
|
||
OLDPTR: BLOCK 1 ;POINTER TO BASE OF OLD DATA
|
||
SWIDX: BLOCK 1 ;BASE OF ADDRESS OF TABLE FOR TABLUK
|
||
LASSW: BLOCK 1 ;SIXBIT NAME OF LAST SWITCH SEEN
|
||
HPQREQ: BLOCK 1 ;HPQ NUMBER THAT USER REQUESTED
|
||
EXCFLG: BLOCK 1 ;0/-1 FOR INCLUDE/EXCLUDE
|
||
|
||
; IO AREA
|
||
|
||
TYBUF: BLOCK 3
|
||
SAVFF: BLOCK 1 ;REMEMBERED VALUE OF JOBFF
|
||
|
||
|
||
; AREA FOR COMMAND INPUT
|
||
;[*] NEW AND OLDER LOCATIONS..
|
||
FSTFLG: BLOCK 1 ;[*]SET TO -1 FOR FIRST TIME
|
||
TODAY: BLOCK 1 ;[*]TODAY'S DATE FOR DAILY STUFF
|
||
NEWNAM: BLOCK 1 ;[*]NAME FOR THE NEXT DAILY FILE
|
||
DAILYF: BLOCK 1 ;[*]SEEN /DAILY SWITCH
|
||
STRTED: BLOCK 1 ;[*]-1 MEANS THAT TRACK IS ALL INITED AND RUNNING
|
||
|
||
COMPTR: BLOCK 1 ;PTR TO BYTE IN COMBUF
|
||
LASCHR: BLOCK 1 ;LAST CHARACTER SEEN
|
||
|
||
|
||
; AREA FOR FILE SPECIFICATIONS
|
||
|
||
FILMOD: BLOCK 1 ;GETS FILE MODE FOR OPEN
|
||
FILDEV: BLOCK 1 ;GETS DEVICE NAME
|
||
FILBUF: BLOCK 1 ;GETS BUFFER ADDRESSES
|
||
FILNAM: BLOCK 1 ;GETS FILE NAME
|
||
FILEXT: BLOCK 1 ;GET FILE EXTENSION
|
||
FILDAT: BLOCK 1 ;GETS FILE DATE
|
||
FILPPN: BLOCK 1 ;GETS PPN OR PTR TO PATH BLOCK
|
||
LUELEN==.-FILNAM ; SIZE OF LOOKUP BLOCK
|
||
|
||
PTHADR: BLOCK 1 ;GETS PATH UUO ARG
|
||
PTHSCN: BLOCK 1 ;SCAN SWITCH, CURRENTLY ALWAYS LEFT DEFAULT
|
||
PTHPPN: BLOCK 1 ;PPN OF PATH SPECIFICATION
|
||
PTHSFD: BLOCK MAXSFD+1;MAXIMUM SIZE SFD BLOCK
|
||
PTHLEN==.-PTHADR
|
||
|
||
|
||
|
||
; ARG BLOCK FOR MULTIPLE ARGUMENT HANDLING
|
||
ARGS: BLOCK 26
|
||
ARGSLN==.-ARGS
|
||
|
||
SAVAC: BLOCK 20 ;SAVE THE ACS
|
||
CPUTYP: BLOCK 1 ;CPU TYPE OF CPU0 (SAME AS ALL TYPES, HOPEFULLY)
|
||
|
||
|
||
|
||
;** DATA AREA FOR SYSDAT MODULE
|
||
|
||
|
||
IFN SYS, <
|
||
|
||
T.LOOK: BLOCK 1 ;TOTAL LOOKS TAKEN,STARTS WITH LOOK ZERO
|
||
NLOOK: BLOCK 1 ;NUMBER OF REPORTS PRINTED
|
||
LS.TIC: BLOCK 1 ;LAST TICK TIMER
|
||
CU.TIC: BLOCK 1 ;CURRENT TICK TIMER
|
||
EL.TIC: BLOCK 1 ;ELAPSED TIME IN TICKS BETWEEN LS,CU.TIC
|
||
LS.MS: BLOCK 1 ;LAST MS TIMER
|
||
CU.MS: BLOCK 1 ;CURRENT MS TIME
|
||
EL.MS: BLOCK 1 ;ELAPSED MS BETWEEN LS.MS,CU.MS
|
||
|
||
ADJPTR: BLOCK 1 ;PTR TO CURRENT DATA BLOCK ADJUSTED FOR OUTPUT
|
||
ADJLOK: BLOCK 1 ;ADJUSTED NUMBER OF LOOKS TAKEN
|
||
UL: BLOCK 1 ;UPPER LIMIT OF OUTDB? ROUTINE
|
||
LL: BLOCK 1 ;LOWER LIMIT OF OUTDB? ROUTINE
|
||
DONFLG: BLOCK 1 ;FLAG IS -1 WHEN OUTDBX IS DONE
|
||
VAL: BLOCK 1 ;PERCENT OF TOTAL IN THE RANGE(INTEGER PART)
|
||
ROTFLG: BLOCK 1 ;FLAG FOR ROTATING INCREMENTAL VALUES
|
||
SUMSQ: BLOCK 1 ;SUM-OF-SQUARES FOR OUTDB? ITEMS
|
||
RVALC: BLOCK 1 ;COUNTDOWN OF LOOKS LEFT IN THIS REPORT
|
||
SYSNAM: BLOCK 5 ;SYSTEM NAME IN ASCIZ
|
||
SYSDTE: BLOCK 2 ;DATE SYSTEM WAS BUILT
|
||
SYSVER: BLOCK 1 ;MONITOR VERSION
|
||
SYSSIZ: BLOCK 1 ;SIZE OF MONITOR IN WORDS
|
||
USIZ: BLOCK 1 ;SIZE OF USER MEMORY IN APPROPRIATE UNITS (K OR P)
|
||
IFN FTTRC, <
|
||
BAUXWD: BLOCK 1 ;AUXIALLY ID WORD USED FOR TRACE REPORTS
|
||
>; END OF IFN FTTRC
|
||
INCDIO: BLOCK 1 ;INCREMENTAL USER DISK IO IN BLOCKS
|
||
INCSWP: BLOCK 1 ;INCREMENTAL DISK IO IN BLOCKS FOR SWAPPING
|
||
DIOTAB: BLOCK 1 ;PTR TO BLOCK LOGMAX LONG FOR DISK IO
|
||
KCSTAB: BLOCK 1 ;PTR TO BLOCK LOGMAX LONG FOR INCR. KCS
|
||
CPTTAB: BLOCK 1 ;PTR TO BLOCK LOGMAX FOR INCR. CPUT
|
||
;
|
||
NUMJOB: BLOCK 1 ;NUMBER OF JOBS CURRENTLY LOGGED IN
|
||
HISEGN: BLOCK 1 ;HIGH SEGMENT NUMBER SEEN BY GETCOR
|
||
JOBTB1: BLOCK 1 ;PTR TO TABLE WITH 1 ENTRY FOR EACH JOB
|
||
;HAS FORM J,,ADDRESS OF BLOCK
|
||
;FORMAT OF TABLE WORD IS:
|
||
; XWD LOW CORE, HIGH CORE IF JOB IS LOGGED IN
|
||
; -1 IF JOB NOT LOGGED IN. NOTE THAT
|
||
;CORE IS IN UNITS OF K OR P
|
||
JOBTB2: BLOCK 1 ;POINTER TO JOB BLOCK . FORMAT OF PTR
|
||
;IS SAME AS JOBTB1. 1 WORD FOR EACH JOB
|
||
;WORD FORMAT:
|
||
;BIT 0 =0 IF JOB IS IN CORE
|
||
; =1 IF JOB IS SWAPPED
|
||
;BITS 1-17 HIGH SEGMENT NUMBER OR 0
|
||
;BIT 18 ON IF STATUS RUN BIT WAS ON
|
||
;BITS 19-23 CURRENTLY UNUSED
|
||
;BITS 24-35 2 CHR SIXBIT STATUS CODE
|
||
;DO NOT SEPARATE SEGTAB THRU ACTCOR
|
||
SEGTAB: BLOCK 20 ;BIT MAP 1 BIT PER HISEG. 1 IF ALREADY COUNTED THIS HISEG
|
||
SEGPTR: BLOCK 1 ;WILL GET INDIRECT PTR OF SEGTAB+OFFSET(AC)
|
||
;IN CORE USE TALLY.
|
||
JOBRN: BLOCK 1 ;JOBS IN "RN" STATE
|
||
JOBRNC: BLOCK 1 ;JOBS IN "RN" STATE AND IN CORE
|
||
JOBSHR: BLOCK 1 ;JOBS IN SHAREABLE RESOURCE QUEUES
|
||
JOBTTY: BLOCK 1 ;JOBS IN TI OR TO STATUS
|
||
JOBIO: BLOCK 1 ;JOBS IN IO STATUS, CURRENTLY IO,DI,PI
|
||
TOTCOR: BLOCK 1 ;TOTAL VIRTUAL CORE IN USE
|
||
SHRCOR: BLOCK 1 ;TOTAL CORE IN USE TAKING SHAREING INTO ACCOUNT
|
||
ACTCOR: BLOCK 1 ;LIKE SHRCOR, BUT FOR ACTIVE JOBS
|
||
|
||
UNIPTR: BLOCK 1 ;AOBJN POINTER TO LIST OF DISK UNIT NAMES
|
||
UNIDB: BLOCK 1 ;ADDRESS OF LIST OF DBS FOR DISK UNITS AND CHANNELS
|
||
NSNCRL: BLOCK 1 ;LAST SEEN VALUE OF MONITOR'S %NSNCR
|
||
TNFCC: BLOCK 1 ;TOTAL NR. OF FREE CORE CHUNKS
|
||
TNTCH: BLOCK 1 ;TOTAL NR. OF TTY CHUNKS
|
||
|
||
|
||
|
||
; HERE WE CREATE THE DATA BLOCK POINTER TABLE.
|
||
; NOTE THAT SPACE IS RESERVED FOR EVERY ITEM IN THE SYSDAT
|
||
; MACRO, BUT NO POINTERS ARE ACTUALLY CREATED, OR DATA BLOCKS
|
||
; CREATED. THIS IS THE RESPONSIBILTY OF THE INITIA ROUTINES
|
||
; THATS WHY THIS TABLE IS IN THE IMPURE SECTION OF THE PROGRAM
|
||
; EACH ITEM IN THIS TABLE IS INITIALLY OF THE FORM:
|
||
; XXXX.P: BLOCK 1
|
||
;
|
||
; AFTER INITIALIZATION IT IS USUALLY OF THE FORM:
|
||
; XXXX.P: L,,ADDR WHERE ADDR IS THE START OF THE
|
||
; DATA BLOCK FOR THIS ITEM
|
||
|
||
DEFINE X(AA,BB,CC,DD,EE,FF)<
|
||
BB'.P: BLOCK 1
|
||
>
|
||
|
||
TAB.P: SYSDAT
|
||
LEN.P==.-TAB.P
|
||
|
||
|
||
; END OF CONDITIONAL FOR SYSDAT DATA AREA >
|
||
|
||
|
||
; PUSH DOWN LIST
|
||
|
||
PDL: BLOCK PDSIZE
|
||
|
||
VAR
|
||
|
||
LOWEND==.-1 ;END OF CORE AREA TO CLEAR ON START AND RESTART
|
||
IFN PURESW, <RELOC >
|
||
SCD0: BLOCK 1 ;uscheduling interval (SCDINT)
|
||
SCD2: 5 ;class quotas/flags: b0=fixed, 1-17=class, 18-35=quota
|
||
BLOCK 5
|
||
SCD3: 2 ;pq1, pq2 quantum runtimes
|
||
BLOCK 2
|
||
SCD6: BLOCK 1 ;min core usage per job (PROTO)
|
||
SCD11: BLOCK 1 ;min core usage multiplier (PROT)
|
||
SCD13: BLOCK 1 ;min core usage requeue constant (PROT1)
|
||
SCD14: BLOCK 1 ;min core usage maximum (PROTM)
|
||
SCD15: 3
|
||
block 1 ;PQ1 quantum multiplier: rh=quantum multiplier
|
||
block 1 ;PQ2 quantum multiplier: rh=quantum multiplier
|
||
BLOCK 1 ;scaling factor
|
||
SCD16: 2
|
||
block 1 ;PQ1 max quantum runtime/queue: rh=max time slice
|
||
block 1 ;PQ2 max quantum runtime/queue: rh=max time slice
|
||
SCD17: 5 ;secondary class quota: lh=class#, rh=quota
|
||
BLOCK 5
|
||
SCD20: BLOCK 1 ;time % to scan q swapped in before subqueue (SCDJIL)
|
||
SCD21: BLOCK 1 ;swap scan time - (SCDSWP)
|
||
SCD24: BLOCK 1 ;scheduler fairness factor
|
||
SCD25: BLOCK 1 ;swapper fairness factor (MAXIFC)
|
||
SCD26: BLOCK 1 ;incore fairness factor (SCDIOF)
|
||
SCD27: BLOCK 1 ;SCDCOR
|
||
SCD22: BLOCK 1 ;BACKGROUND BATCH CLASS (BBSUBQ)
|
||
SCD23: BLOCK 1 ;BACKGROUND BATCH SWAP TIME (SCDBBS)
|
||
SCD4: BLOCK 5 ;CHAN USE FRACTION
|
||
;LH=CHAN#, RH=USE FRACTION
|
||
SCDEND:
|
||
SCDL2=SCDEND-SCD0+1
|
||
;
|
||
SCDBLK: 0,,SCD0
|
||
2,,SCD2
|
||
3,,SCD3
|
||
6,,SCD6
|
||
11,,SCD11
|
||
13,,SCD13
|
||
14,,SCD14
|
||
15,,SCD15
|
||
16,,SCD16
|
||
17,,SCD17
|
||
20,,SCD20
|
||
21,,SCD21
|
||
24,,SCD24
|
||
25,,SCD25
|
||
26,,SCD26
|
||
27,,SCD27
|
||
22,,SCD22 ;BB CLASS
|
||
23,,SCD23 ;BB SWAP TIME
|
||
4,,SCD4 ;CHAN USE FRACTION
|
||
SCDLEN=.-SCDBLK
|
||
END TRACK
|
||
|