mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-01 09:21:15 +00:00
6535 lines
186 KiB
Plaintext
6535 lines
186 KiB
Plaintext
SUBTTL R CLEMENTS /CHW/TNH/PFC/RCC/CMF/SML/JMF/TCK/JNG/JMT/PMW/MTH/KPY/ISM/BBE/WCL/BCM/GAT/RJF 27-JUN-88
|
||
VSYSTAT==704
|
||
VEDIT==416
|
||
VMINOR==0
|
||
VWHO==0
|
||
|
||
|
||
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1968, 1988.
|
||
;ALL RIGHTS RESERVED.
|
||
;
|
||
;
|
||
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
|
||
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
|
||
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
|
||
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
|
||
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
|
||
;TRANSFERRED.
|
||
;
|
||
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
|
||
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
|
||
;CORPORATION.
|
||
;
|
||
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
||
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
|
||
|
||
DEFINE .TITL(VMAG,VMIN)<
|
||
TITLE SYSTAT -- PRINT SYSTEM STASTICS -- V VMAG(VMIN)
|
||
>
|
||
.TITL (\VSYSTAT,\VEDIT)
|
||
;EDIT HISTORY
|
||
|
||
;EDIT LEVEL 27 TO LEVEL 30
|
||
|
||
;EDIT #1
|
||
;SY P PRINTED WRONG NUMBER OF FREE BLOCKS
|
||
|
||
;EDIT LEVEL 30 TO LEVEL 31
|
||
|
||
;EDIT #2
|
||
|
||
;THE NUMBER OF EXTENDED READ AND WRITES IS WRONG FOR A MONITOR
|
||
;WITH FTVM OFF
|
||
|
||
;EDIT #3
|
||
|
||
;ONLY PRINT FANCY RESPONSE DATA WHEN FTRSP IS ON
|
||
|
||
;EDIT #4
|
||
|
||
;NO NEW ACCESSSES ALLOWED IS PRINTED ON VM MONITORS
|
||
;FOR RANDOM FILE STRUCTURES WHENEVER SYS IS TYPED,SYS F IS OAKY
|
||
|
||
;EDIT #5
|
||
|
||
;SPOOLED DEVICES SHOULD BE LISTED ON THE OPERATOR SYSTAT LIST
|
||
;FLAGGED WITH A ' SIGN .THIS DID NOT HAPPEN AS SPOOLED DEVICES
|
||
;DO NOT HAVE DVDSK ON IN DEVMOD DDB ENTRY.SO USE THE PROPER FLAG
|
||
;IN DEVSPL DDB ENTRY
|
||
|
||
;EDIT #6
|
||
|
||
;REPORT OF SWAPPING SPACE LOST IS TOO HIGH 3 MORE BITS HAVE TO BE
|
||
;ZEROED IN DATA PRINTED
|
||
|
||
;EDIT #7
|
||
|
||
;ONE MORE OCCURRENCE OF A WRONG UDB INDEX FOR VM SYSTEMS
|
||
|
||
;EDIT #8
|
||
|
||
;WARN USERS THAT NO OPERATOR IS ON DUTY (SPR 10,12,962)
|
||
|
||
;EDIT #9
|
||
|
||
;ADD P OR K TO AVERAGE SIZE PRINT OUT
|
||
|
||
;EDIT 10
|
||
|
||
;IF CONTROL C INTERRUPT THEN DO NOT TYPE HACK TABLE ENTRY BUT EXIT
|
||
|
||
;EDIT 11
|
||
|
||
;LOGICAL NAMES OF JOB ONER ARE NOT DISPLAYED
|
||
|
||
;EDIT 12
|
||
|
||
;SYS LEF PRODUCES AN EMPTY FILE
|
||
|
||
;EDIT 13
|
||
|
||
;SYS ...... MAKES SYSTAT GROW
|
||
|
||
;EDIT 14
|
||
|
||
;THE RIGHT TO WRITE SYSTAT.TXT IS NOT CHECKED
|
||
|
||
;EDIT 15
|
||
|
||
;/X BROKE DUE TO EDIT 13 RESET UUO!
|
||
|
||
;EDIT 16
|
||
|
||
;SPOOLING A CONTINUOUS SYSTAT TEXT RESULTS IN I/O TO AN UNASSIGNED CHANNEL
|
||
;DUE TO EDIT 12
|
||
|
||
;EDIT 17
|
||
|
||
;REENTER OPTION WAS BROKEN
|
||
|
||
;EDIT 18
|
||
|
||
;SYS XL FILE SPEC CAUSED THE MESSAGE CAN'T GET AT THAT FILE
|
||
;MAKE SYSTAT MORE CLEVER.
|
||
|
||
;EDIT 19
|
||
|
||
;SYSTAT CAN EAT TYPE AHAED
|
||
|
||
;EDIT 20
|
||
|
||
;LOW SEGMENT SIZE OF PROGRAMS WITH SHARABLE
|
||
;HISEG IS WRONG
|
||
|
||
;EDIT 143
|
||
|
||
;MAKE EDIT NUMBER EQUAL REVISION HISTORY.
|
||
;USE C AS A UNIVERSAL.
|
||
|
||
;EDIT 144
|
||
|
||
;RESTRICT SYSTAT L WHEN NOT-LOGGED-IN TO LOCAL TTYS OR SUBJOBS OF
|
||
;PROJECT 1. [10-13028]
|
||
|
||
;EDIT 145
|
||
|
||
;MAKE SYSTAT EASIER TO ^C, AND ALLOW CONTINUES IF LOGGED IN.
|
||
|
||
;EDIT 146
|
||
|
||
;CLEAR .UXTRM OFFSET FROM A GETLCH TO AVOID "SY ." PROBS. [14434]
|
||
|
||
;EDIT 147
|
||
|
||
;SHOW BUSY DEVICES WHEN WILD PPN REQUESTED [10-14317]
|
||
|
||
;EDIT 150
|
||
|
||
;ALLOW COMMENTS ON THE SYSTAT COMMAND LINE [10-14543]
|
||
|
||
;EDIT 151
|
||
|
||
;FIX "SYSTAT OCL", BROKEN BY EDIT 145
|
||
|
||
;EDIT 152
|
||
|
||
;STARTING WITH LOAD 722 KNOW OF NEW NUMTAB FORMAT
|
||
|
||
;EDIT 153
|
||
|
||
;BELIEVE IN NEW DDB ENTRY DEVJOB FOR 722
|
||
|
||
;EDIT 154
|
||
|
||
;UPDATE DEVFIL PART OF DDB'S TO USE LENGTH OF SHORT DDB'S
|
||
|
||
;EDIT 155
|
||
|
||
;USE TRMNO. UUO FOR NON TOPS10 MONITORS,WHICH KNOW THE TRMNO.
|
||
|
||
;EDIT 156
|
||
|
||
;THE SEQUENCE : .ASS DSK LPT SYS /L/X
|
||
;GIVES AN ILLEGAL UUO
|
||
|
||
;EDIT 157
|
||
|
||
;REPLACE ALL DDB OFFSETS BY A SYMBOL DV.XXX TO PREVENT DUPLICATING
|
||
;OF UUO NAMES
|
||
|
||
;EDIT 160
|
||
|
||
;NEVER USE A ZERO UPTIME TO COMPUTE PERCENTAGES
|
||
|
||
;EDIT 161
|
||
|
||
;DISK ERRORS ARE REPOTED WRONG FOR A CRASH FILE
|
||
|
||
;EDIT 162
|
||
|
||
;PRINT SYSTEM HEADER ASAP ON A /X AS THIS SAVES CONSIDERABLE
|
||
;TIME IF ONE LOOKS AT THE WRONG CRASH
|
||
|
||
;EDIT 163
|
||
|
||
;SUBTRACT THE MONITOR HIGH SEGSIZE FROM THE CORE SIZE
|
||
|
||
;EDIT 164
|
||
|
||
;ADD SUPPORT FOR READING EXE CRASHES
|
||
|
||
;;EDIT 166 (16236)
|
||
|
||
;;ADD SWAPPING SPACE LOST MESSAGE
|
||
;;AREAS AFFECTED: MUS3
|
||
|
||
;EDIT 167 (16461)
|
||
|
||
;INCREASE REMOTE STATION LOOP RESTRICTION
|
||
|
||
;edit 170 (15261)
|
||
|
||
;typing continue after running systat gives a logged in user the
|
||
;message "kjob"
|
||
|
||
;edit 171
|
||
|
||
;thisis uses the variable date to print the date this varible is
|
||
;not initialized on a sys x command
|
||
|
||
;edit 172
|
||
|
||
;the vlalue of unixra was changed in 602 causing extended writes
|
||
;and reads column to be wrong
|
||
|
||
;edit 173
|
||
|
||
;ignore all structures and packs with zero mount count pack not mounted
|
||
;pack off line and zero reads and writes
|
||
|
||
;EDIT 174
|
||
|
||
;MAKE SYSTAT X GIVE ERROR MESSAGE FOR NON-DISK DEVICES
|
||
|
||
;EDIT 175
|
||
|
||
;USE UNIVERSAL JOBDAT FILE
|
||
|
||
;EDIT 176
|
||
|
||
;REMOVE SYSTEM 124 FROM IN-HOUSE LIST; IT'S BEEN SOLD.
|
||
|
||
;EDIT 177
|
||
|
||
;MAKE /X GIVE PROPER TIME FOR 50HZ COUNTRIES
|
||
|
||
;EDIT 200
|
||
|
||
;MAKE CONTINUOUS SYSTATING REMEMBER THE ARGUMENTS GIVEN IN
|
||
;THE COMMAND. THE COMMAND LINE IS NOW READ INTO A BUFFER SO
|
||
;THE COMMAND CAN BE REREAD ON EACH PASS THROUGH.
|
||
|
||
;EDIT 201
|
||
|
||
;TIME CALCULATION @ERRLY1 USES DECIMAL 60 EXPLICITLY RATHER
|
||
;THAN TCKSEC, THUS 50 HZ. COUNTRIES GET BAD TIMES !
|
||
|
||
;EDIT 202
|
||
|
||
;SYSTAT E TRIES TO DETERMINE STOPCD TYPE BY FOLLOWING ADDRESS
|
||
;IN %SYSPC. UNFORTUNATELY THIS PRODUCES AN ?ILL MEM REF IF
|
||
;SPYING SINCE %SYSPC POINTS INTO HIGH SEGMENT OF MONITOR.
|
||
;MAKE IT DO A PEEK INSTEAD FOR THE RUNNING MONITOR AND ONLY
|
||
;PRINT STOPCD NAME FOR A CRASHED MONITOR.
|
||
|
||
;EDIT 203
|
||
|
||
;THIS EDIT CHANGES THE ROUTINE GETFIL TO USE FILOP. TO OPEN
|
||
;THE CRASH FILE ON A .SYS X SO THAT PRIVILEGE CHECKING FOR
|
||
;FILE ACCESS IS DONE CORRECTLY. PREVIOUSLY A CHKACC WAS PERFORMED
|
||
;WHICH CORRECTLY CHECKED THE FILES PROTECTION, HOWEVER IT DOESN'T
|
||
;CHECK THE UFD PROTECTION. IN FACT, THERE IS NO CHKACC FUNCTION TO
|
||
;SEE IF ACCESS TO FILES IN A UFD IS ALLOWED. IF THE FILOP. IS NOT
|
||
;IMPLEMENTED, THE FORMER METHOD WILL BE USED, AND ONLY THE FILE
|
||
;PROTECTION WILL BE CHECKED BEFORE ALLOWING ACCESS.
|
||
|
||
;EDIT 204
|
||
|
||
;MAKE SYSTAT REPORT "TIMESHARING IS OVER" WHEN IT CHECKS
|
||
;KSYS AS IT DOES WHEN IT REPORTS "TIMESHARING WILL END IN ...".
|
||
|
||
;EDIT 205
|
||
|
||
;WHEN DOING .SYS F DON'T PRINT BLANK STRUCTURES.
|
||
|
||
;EDIT 206
|
||
|
||
;BUSY DEVICE INFORMATION ON SYSTATS OF CRASHED MONITORS IS
|
||
;INCORRECT IF THE DDB FORMAT OF THE CRASHED MONITOR IS DIFFERENT
|
||
;THAN THAT OF THE RUNNING MONITOR.
|
||
;ON SYSTATS OF CRASHED MONITORS, THE MONITOR VERSION SHOULD BE GOTTEN
|
||
;FROM THE CRASH FILE. ITS NOW GOTTEN FROM THE RUNNING MONITOR BECAUSE
|
||
;IT IS DETERMINED AT INITIALIZATION TIME BEFORE WE KNOW WHETHER
|
||
;THIS IS A .SYS X OR A SYSTAT OF THE RUNNING MONITOR. ALSO,
|
||
;FOR THE SAME REASON WHEN DETERMINING THE DISK DDB SIZE AND
|
||
;BUILDING THE DDB POINTERS, THE VALUE IS GOTTEN FROM THE RUNNING
|
||
;MONITOR RATHER THAN FROM THE CRASH FILE.
|
||
;AREA AFFECTED: DSKJN1
|
||
|
||
;EDIT 207
|
||
|
||
;EDIT #200 BROKE THE REENTER FEATURE OF SYSTAT SUCH THAT IF
|
||
;YOU TYPED REENTER, SYSTAT WOULD CONTINUALLY LOOP. THIS IS
|
||
;BECAUSE THE INPUT BUFFER IS NEVER CLEARED AFTER READING
|
||
;COMMAND INTO BUFFER.
|
||
;AREA AFFECTED: RDCMND
|
||
|
||
;EDIT 210
|
||
;IF PAGED OUTPUT IS REQUESTED, YOU TYPE ^C AS RESPONSE TO THE
|
||
;PROMPT, AND YOU'RE NOT LOGGED IN, THE "KJOB" MESSAGE IS NOT TYPED.
|
||
;AREA AFFECTED: HICCUP
|
||
|
||
;EDIT 211
|
||
;ADD STATISTICS REPORT FOR DUAL PORTED RPO4'S
|
||
|
||
;EDIT 212
|
||
;FIX SHORT DDB PROBLEM [.DVDAT, DEVLP]
|
||
|
||
|
||
|
||
;EDIT 213
|
||
;FIX TYPE-AHEAD PROBLEM CAUSED BY EDIT 207'S FIX TO EDIT 200
|
||
|
||
|
||
;EDIT 214 /PMW 10 MAR 77
|
||
;IN RDCMND
|
||
;TEST FOR FULL INPUT BUFFER
|
||
|
||
;EDIT 215 /PMW 10 MAR 77
|
||
;AT GETFIL+1
|
||
;MODIFY EDIT 203 <USE FILOP. FOR CRASH.EXE> TO USE PRIVILEGED FILOP.
|
||
;SO [1,2] AND JACCT JOBS GET FULL ACCESS.
|
||
|
||
;EDIT 216
|
||
;SYS C G <JOB NUMBER> ZEROED OUT CPU TIME FOR THE JOB GIVING
|
||
;THE WRONG CPU TIME FOR THE JOB AND INCREASING THE IDLE TIME
|
||
;REPORTED BY THE SYSTEM.
|
||
;AREA AFFECTED: TSTATE
|
||
;EDIT 217 /PMW 5 APR 77
|
||
;MODIFY EDIT 215 SUCH THAT ONLY 1,2 JOBS GET ACCESS TO CRASH.EXE
|
||
|
||
;EDIT 220 /PMW 5 APR 77
|
||
;MODIFY EDIT 144 SUCH THAT NOT-LOGGED-IN JOBS CAN'T GET LPT
|
||
; (UNLESS 1,2 SUBJOBS)
|
||
|
||
;EDIT 221 MTH 21-JUN-77
|
||
;SYS C <ARGS> WAS DOING INCREMENTAL SYSTATS ON THE REPETITIONS
|
||
;OF THE COMMAND LINE. FIX IT TO ACT LIKE ORIGINAL START UP, EXCEPT
|
||
;THAT COMMAND LINE HAS ALREADY BEEN SAVED AWAY.
|
||
;AREAS AFFECTED: SNOOZ1, CMDBUF
|
||
|
||
;EDIT 222 MTH 21-JUN-77
|
||
;REPLACE EDIT 217 FIX BECAUSE "SYSTAT O" SETS FL.GOD AND ANY
|
||
;RANDOM USER WHO USED THIS WOULD GET THE FILOP. PRIV BIT.
|
||
;AREA AFFECTED: GETFIL
|
||
|
||
;EDIT 223 MTH 27-JUN-77
|
||
;CONTINUOUS STUFF IS DONE INCORRECTLY FOR PARTICULAR ARGUMENTS
|
||
;COMPUTE UPTIME IMMEDIATELY AFTER COMMAND DECODING
|
||
;FLAG ONCE THROUGH IN HACKQ. DON'T ALWAYS DO CLRBFI'S.
|
||
;UNDO EDIT 216, IT CAUSED OUTRAGEOUS %CPU TIMES WITH "REENTER"
|
||
;AREAS AFFECTED:.DVDAT,GENSTS,DUNJOB,FINIS,HACKQ,RDCMND,OLDTIM,
|
||
; SYSINI,GENST1,GENST5,GENST7,TSTATE
|
||
|
||
;EDIT 224 KPY 20-FEB-78
|
||
;FIX 5.03 OR LATER UNIT ERROR INFO ROUTINE
|
||
;UNI2ND SHOULD BE INDEXED BY D.
|
||
;AREAS AFFECTED: DP AT FLUNN0+4
|
||
;C FILE SYMBOLS WHICH ARE OVERRIDDEN
|
||
|
||
|
||
;EDIT 225 PG 30-MAR-78
|
||
;PPN'S MUST HAVE NON-ZERO PROJECT NUMBERS
|
||
;AREAS AFFECTED: GETPPN
|
||
|
||
|
||
;EDIT 226 ISM 19-APR-78
|
||
;FIX "SY P" TO REPORT ON ALL THE STRUCTURES MOUNTED ON THE SYSTEM,
|
||
;ESPECIALLY THOSE BEYOND A STRUCTURE DATA BLOCK WITH A NULL NAME.
|
||
;
|
||
;EDIT 227 ISM 6-9-78 IF "SYSTAT C" IS GOING TO DISK,
|
||
;MAKE IT UPDATE THE FILE IN APPEND MODE.
|
||
;
|
||
;EDIT 230 ISM 6-26-78 CREATE A SUBROUTINE TO SIMULATE
|
||
;THE CTLJOB UUO WHEN SYSTATING A CRASH FILE.
|
||
;
|
||
;EDIT 231 ISM 7-12-78 NOT ENOUGH BITS USED TO DETERMINE
|
||
;ACTIVE SWAPPING STATISTICS IN "SYSTAT P". USED TO BE 2**12, CURRENTLY 2**13.
|
||
;
|
||
;EDIT 232 KPY 31-JUL-78
|
||
; 1) AT GETFIL + 2 USE [1,,2] NOT FSFPPN SINCE THE LATTER IS NOT SETUP
|
||
; AT THIS POINT.
|
||
; 2) AT GETFIL + 3 REPLACE 400000 WITH FO.PRV.
|
||
;BEGIN VERSION 474 HERE WITH 7.00 UPDATE
|
||
;EDIT 233
|
||
; REMOVE THE /R SWITCH SINCE IT HAS NEVER WORKED WITH
|
||
; NETWORKS.
|
||
;EDIT 234
|
||
; UNI2ND HAS A NEW FORMAT TO INDICATE A DRIVE IS DUAL
|
||
; PORTED ACROSS CPU'S. MAKE THE SYS P CODE KNOW ABOUT IT.
|
||
;EDIT 235
|
||
; PRINT DISK DDB'S IN THE BUSY DEVICE CODE IFF WE ARE READING
|
||
; A CRASH FILE OR FOR A USER'S OWN JOB. SINCE THE DDB'S ARE
|
||
; NOW IN FUNNY SPACE THEY CANNOT BE RELIABLY READ FOR ANY JOB
|
||
; BUT OUR OWN.
|
||
;EDIT 236
|
||
; HIGH AND DORMANT HIGH SEGS CAN NOW HAVE POINTERS TO PATH
|
||
; BLOCKS. FOLLOW THE POINTER AND PRINT THE OWNER PPN.
|
||
;EDIT 237
|
||
; PRINT THE MONITOR NAME ON THE USER'S TERMINAL ON SYS X
|
||
; COMMANDS TO GIVE HIM A CHANCE TO ABORT WITHOUT WAITING
|
||
; FOR 3 MINUTES WHILE SYSTAT CRAWLS THROUGH THE DISK FILE.
|
||
;EDIT 240
|
||
; PRINT "PRIVATE STRUCTURE" IN SYS F FOR PRIVATE STRUCTURES.
|
||
;EDIT 241
|
||
; PRINT %OVERHEAD TIME IN THE HEADER
|
||
;EDIT 242
|
||
; ACCEPT CONSTRUCTS OF THE FORM [,] AND ALLOW SFD'S IN
|
||
; THE FILE SPEC FOR SYS X.
|
||
;
|
||
;EDIT 243 SPR 10-27276
|
||
; INVALIDATE SY X IF JOB NOT LOGGED IN EXCEPT
|
||
; IF CONTROLLED BY [1,*].
|
||
;
|
||
;
|
||
;EDIT 244 SPR 10-27189
|
||
; ELIMINATE CPU1 DATA FROM SY E WHEN NCPUS=1
|
||
;
|
||
;
|
||
;EDIT 245 SPR 10-27179
|
||
; REMOVE REFERENCES TO OBSOLETE FLAG
|
||
; TTYFLG
|
||
;
|
||
; 246 WCL 15-MAY-79 SPR 10-27980
|
||
; 6-DIGIT PROJECT NUMBER RUNS INTO JOB NUMBER; INSERT SPACING
|
||
; AREAS AFFECTED: TTYOK, NOTSLF
|
||
;
|
||
;EDIT 247 SPR 10-28133
|
||
; REMOVE THE ^D SENT WHEN SYSTAT IS RUN NOT-LOGGED-IN
|
||
;EDIT 250 SPR 10-27724
|
||
; EDIT PUBLISHED AS 246 LOST
|
||
; CHANGE PUSHJ P,FGETTB TO GETTAB IN EDIT 243 SO WE GET
|
||
; CURRENT INFO ON PPN OF CONTROLLING JOB WHEN PROCESSING SY X.
|
||
;EDIT 251
|
||
; ENHANCE THE MESSAGE PRINTED BY EDIT 237 TO INCLUDE THE DATE
|
||
; AND TIME OF THE CRASH AND THE STOPCD NAME.
|
||
;
|
||
;BEGIN VERSION 475 HERE WITH 7.01 UPDATE
|
||
;EDIT 252
|
||
; ADD THE /U SWITCH TO PRINT A LIST OF USERS. THIS SWITCH MAY
|
||
; BE COMBINED WITH ANY OTHER SWITCH OR COMMAND.
|
||
;EDIT 253
|
||
; ADD CPU STOPCD TYPE TO SYS E CODE.
|
||
;EDIT 254
|
||
; MAINTAIN AN INCORE CACHE OF PAGES FROM THE EXE FILE FOR "SYS X"
|
||
; THIS WILL MAKE IT QUITE A BIT FASTER
|
||
;EDIT 255
|
||
; NEW MONBTS DUMPS HAVE HOLES FOR NXMTAB, CHANGE "SYS X" TO REALLY
|
||
; UNDERSTAND .EXE DIRECTORY FORMAT
|
||
; HAD TO INCREASE DEFAULT PDL SIZE FOR THIS EDIT
|
||
;EDIT 256
|
||
; DEFAULT NCPUS TO 4, REFORMAT CPU SPECIFIC OUTPUT
|
||
;EDIT 257
|
||
; USE THE EPT OF THE BOOT PROCESSOR (BOOTCP) FOR "SYS X"
|
||
; USE GETTAB TO FIND THE CTY CAUSE IT CAN MOVE IN 7.00/7.01
|
||
;EDIT 260
|
||
; REMOVE EDIT 202, PEEKA IS SMART ENOUGH NOW FOR BOTH RUNNING
|
||
; AND CRASHED MONITORS
|
||
;EDIT 261
|
||
; EDIT 256 BROKE OUTPUT FOR PRE-7.00 MONITORS
|
||
;
|
||
; 701 Release SYSTAT 475(261)
|
||
;
|
||
;EDIT 262 SPR #10-29511 RKB 16-JUN-80
|
||
; ADD A NEW PER-JOB TABLE (C0UPTM) TO SHOW CPU0 UPTIME AT EACH RUN-
|
||
; TIME CALCULATION (PREVENTS >100% USAGE ON "REENTER" COMMAND)
|
||
;EDIT 263 SPR #29511 RKB 22-JUL-80
|
||
; FIX TWO PROBLEMS WITH EDIT 262: "7.01-IZE" THE UPTIME TABLE, AND
|
||
; DELETE A LINE OF CODE (C0UPTM IS NOW SYSUPT)
|
||
;EDIT 264 SPR #30143 BCM 8-Dec-80
|
||
; Correct the offset for UNILOG data
|
||
;EDIT 265 SPR #10-30144 BCM 9-Dec-80
|
||
; Print out filename information in header along with everything else
|
||
;EDIT 266 SPR #10-30060 RKB 7-JAN-81
|
||
; Teach "SYS T" about networks, and make it print out more useful
|
||
; information.
|
||
;EDIT 267 RKB 8-JAN-81
|
||
; Fix the "FGETTB" routine to do GETTABs on addresses higher than
|
||
; the EXEC address 400000.
|
||
;EDIT 270 SPR #10-30361 RKB 14-JAN-81
|
||
; Avoid getting over 100% overhead, null, or lost time
|
||
; reported on REENTER.
|
||
;EDIT 271 SPR #10-30215 RKB 15-JAN-81
|
||
; "SYS B" could type out the "busy device" header without listing
|
||
; any devices, if all devices in use are PTY's.
|
||
;EDIT 272 SPR #10-30512 BCM 28-JAN-81
|
||
; Fix edit 265 to work correctly.
|
||
;EDIT 273 SPR #10-30857 BCM 14-APR-81
|
||
; Minor fix to edit 272
|
||
;EDIT 274 SPR #10-30858 BCM 15-May-81
|
||
; Check if we are 50 Hz early, and store result
|
||
;EDIT 275 SPR #10-30998 BCM 18-May-81
|
||
; Skip the first counter increment so we get DSCTAB + 0
|
||
;EDIT 276
|
||
; SPR #10-31700,31733 GAT 7-JAN-82
|
||
; FIXES EDIT 274. CORRECTLY FETCHES THE RIGHT "STATES"
|
||
; WORD FROM THE MONITOR OR THE CRASH DUMP, TO DETERMINE
|
||
; THE CORRECT LINE FREQUENCY(50/60 HERTZ).
|
||
;EDIT 277 JMF 14-Jan-82
|
||
; Make "SYS X" work with KL paging
|
||
;EDIT 300 JMF 16-Jan-82
|
||
; Tell swapping statistics for the second port of a dual ported drive
|
||
; in the "SYS P" report
|
||
;EDIT 301 JMF 16-Jan-82
|
||
; Report characters received, transmitted, and echoed in "SYS E"
|
||
;EDIT 302 JMF 16-Jan-82
|
||
; GETTAB the offset into the UDB of DEVUNI so that UNILOG comes out
|
||
; correctly in "SYS X" report no matter what monitor was running (if
|
||
; the GETTAB is implemented)
|
||
;EDIT 303
|
||
; GAT 21-JAN-82 SPR #10-31462
|
||
; SYS L NEVER CHECKS OUTPUT UUO FOR ERRORS
|
||
;EDIT 304 GAT 26-JAN-82
|
||
; CORRECTS TIME PRINTED IN "TIMESHARING ENDS" MESSAGE
|
||
;EDIT 305
|
||
; SUPERSEDES EDITS 264,302 GAT 25-JAN-82
|
||
; CLEAN UP CODE SO SYSTAT GETS PROPER DDB OFFSETS
|
||
; FOR EITHER THE RUNNING MONITOR OR THE CRASH FILE
|
||
;EDIT 307 GAT SPR 10-31803 3-FEB-82
|
||
; TEACH SYS P THAT ON A KS THERE ARE NO DUAL PORTS, AND STOP IT
|
||
; FROM READING UNI2ND AND PRINTING GARBAGE.
|
||
;EDIT 310 GAT SPR 10-31706 10-MAR-82
|
||
; CORRECT ACTIVE SWAPPING RATIO CALCULATION TO INCLUDE
|
||
; PER PROCESS PAGES AND PRINT IT OUT MORE ACCURATELY.
|
||
; (SYSTAT/SYSDPY CALCULATIONS ARE THE SAME NOW)
|
||
;EDIT 311 GAT 16-MAR-82
|
||
; PRINT "Not Running" MSG FOR STOPPED CPUS
|
||
;EDIT 312 GAT 17-MAR-82
|
||
; MAKE "SYS GG..." WORK CORRECTLY
|
||
;EDIT 313 JMF 22-MAR-82
|
||
; REPORT CHARACTERS TRANSMITTED/RECEIVED/ECHOED ON
|
||
; ALL CPUS.
|
||
;EDIT 314 GAT 16-JUL-82
|
||
; FIX EDIT 305 THAT WAS STILL RETURNING THE WRONG
|
||
; VALUE OF DEVUNI FOR PRE-700 MONITORS.
|
||
;EDIT 315 GAT 16-AUG-82
|
||
; MAKE "SYS P" REPORT INFORMATION ON MAIN OR ALTERNATE
|
||
; PORT EVEN IF NO I/O HAS OCCURRED. REMOVE SECOND OCCURRENCE
|
||
; OF "FREE" FOR ALT PORT.
|
||
;EDIT 316 GAT 23-AUG-82 SPR 10-32936
|
||
; FIX EDIT 300. PRINTS ONE LINE OF GARBAGE AFTER EACH UNIT
|
||
; IN "ACTIVE SWAPPING STATISTICS" ON A KS-10.
|
||
;EDIT 317 GAT 20-OCT-82 SPR 10-33165
|
||
; EDIT 310 DOES NOT ALWAYS CLEAN UP STACK CORRECTLY AND
|
||
; IS PRONE TO "?ILL ADDRESS/MEM REFs".
|
||
;EDIT 320 GAT 19-NOV-82 SPR 10-32964
|
||
; DEFAULT HACKSW TO ZERO.
|
||
;EDIT 321 GAT 29-DEC-82 SPR 10-33374
|
||
; EDIT 310 FETCHES NUMBER OF FUNNY PAGES INCORRECTLY.
|
||
;EDIT 322 GAT 18-FEB-83 SPR 10-33570/QAR 125027
|
||
; FIX ILL MEM REF CAUSED BY EDIT 266 WHEN ENTRY FOUND IN
|
||
; DSCTAB IS PRINTED BY "SYS T".
|
||
;EDIT 323 GAT 8-APR-83 QAR 125024
|
||
; SYSTAT SHOWED INCORRECT IDLE TIME FOR CPU3.
|
||
;EDIT 324 GAT 24-OCT-83 SPR 10-33843
|
||
; "SYS P" REPORTS INCORRECT NUMBER OF RETRIES (UNIECT).
|
||
;EDIT 325 JMF 12-JUN-84 NO SPR
|
||
; FIX ILL MEM REFS FROM "ONE WORD GLOBAL BYTE POINTERS" IN
|
||
; NEW MICROCODE (V352).
|
||
;EDIT 326 JMF 07-JAN-85 SPR 10-34951
|
||
; REPORT SYSTEM UPTIME AS WELL AS CPU UP TIMES ON SMP SYSTEMMS
|
||
;EDIT 327 JMF 15-JAN-85 NO SPR
|
||
; TEACH SYSTAT ABOUT 7.03
|
||
;EDIT 330 JMF 9-DEC-83 NO SPR
|
||
; ADD PAGING I/O STATISTICS TO SYS P DISPLAY.
|
||
;EDIT 331 JMF 9-DEC-83 NO SPR
|
||
; MAKE SYS E DISPLAY EASIER TO READ, PUT THE MOST IMPORTANT THINGS FIRST,
|
||
; AND ADD BLOCKS XFERRED FOR FILE AND SWAPPING I/O.
|
||
;EDIT 332 JMF 19-APR-85 NO SPR
|
||
; FIX SOME BUGS IN 327.
|
||
;EDIT 333 JMF 7-JUL-85 SPR 10-35259
|
||
; SYSTAT hiseg display occasionally doesn't show the device name.
|
||
;EDIT 334 JMF 6-AUG-85 NO SPR
|
||
; Fixup SYS E display when CPU0 isn't running.
|
||
;EDIT 335 LEO 9-AUG-85 NO SPR
|
||
; Fix copyright statements.
|
||
;EDIT 336 JMF 10-OCT-85 QAR 868325
|
||
; CHECK LTLUSE BEFORE PRINTING TTY INFO IN "SYS T" DISPLAY
|
||
;EDIT 337 JMF 17-FEB-86 NO SPR
|
||
; SYSTAT "D" display doesn't show swapped out dormant segments under 7.03.
|
||
; It also doesn't indicate fragmented swapping correctly.
|
||
;EDIT 340 JMF 25-APR-86 SPR 35388
|
||
; SYSTAT "E" display doesn't give info on parity errors on CPUs other than
|
||
; CPU0 in an SMP system.
|
||
;EDIT 341 JMF 25-APR-86 SPR 35394
|
||
; GET SYS:SYSTAT 300P, START gets IO to unassigned channel
|
||
;EDIT 342 JMF 20-NOV-86 SPR 35625
|
||
; AC and feature test switchs for CPU5 and CPU6 not right in ERRPT.
|
||
;
|
||
;START OF VERSION 704
|
||
;
|
||
;EDIT 400 JAD 8-AUG-86 NO SPR
|
||
; Teach SYSTAT about new format of JBTSGN.
|
||
;
|
||
;EDIT 401 JAD 17-SEP-86 NO SPR
|
||
; Teach SYSTAT how to check for addresses in funny space and
|
||
; not to try to SPY on addresses greater than 377777.
|
||
;
|
||
;EDIT 402 DPM 24-SEP-86 NO SPR
|
||
; Clean up CPU portion of SYS G display for SMP systems. Include
|
||
; policy CPU and CTY line number. Clean up code to display CPU
|
||
; down status. Fix up "Report from crash ..." stuff to print actual
|
||
; filespec correctly.
|
||
;
|
||
;EDIT 403 DPM 25-SEP-86 NO SPR
|
||
; Make PURESW work so SYSTAT can be sharable. This requires the
|
||
; removal of the call to HELPER and a help routine be written.
|
||
; Also move the TWOSEG, .JBVER/RELOC, and COPYRIGHT macro around
|
||
; to avoid "Q" errors when assembling with PURESW non-zero. Note
|
||
; that as of this edit, PURESW will default to 1.
|
||
;
|
||
;EDIT 404 DPM 13-OCT-86 NO SPR
|
||
; Fix some cosmetic buggers interduced by edit 402.
|
||
;
|
||
;EDIT 405 JMF 24-MAR-87 NO SPR
|
||
; Teach SYSTAT about the layout of UDBs in 7.04
|
||
;
|
||
;EDIT 406 JMF 24-MAR-87 NO SPR
|
||
; Include some paging statistics in /E display.
|
||
;
|
||
;EDIT 407 JMF 18-SEP-87 NO SPR
|
||
; When monitor version went from 377 to 310, SYSTAT stopped
|
||
; working with 7.04.
|
||
;
|
||
;EDIT 410 JMF 29-SEP-87 NO SPR
|
||
; Changes to SYS P for 7.04 broke it for eariler monitors.
|
||
;
|
||
;EDIT 411 RCB 05-OCT-87 NO SPR
|
||
; SYS T doesn't at all, and all the PEEK/SPY logic can
|
||
; (and does) run afoul of the fact that SYSSIZ is relevant
|
||
; again (and not just FYSORG).
|
||
;
|
||
;EDIT 412 RJF 28-DEC-87 QAR
|
||
; SYS P get swapping statistics wrong and SYS T is all wrong
|
||
; on the KS. Make the offsets of UNIK4S and LDBREN GETTABable
|
||
; and use them rather than try to work them out ourself.
|
||
; Keep doing it the old dum way when the GETTABs fail for older
|
||
; monitors.
|
||
;
|
||
;EDIT 413 RJF 30-DEC-87 QAR
|
||
; If the "Uptime" type-out is .GE. 100 hours, for an SMP system,
|
||
; the other fields on the line get pushed over one to many tabs.
|
||
;
|
||
;EDIT 414 JMF 14-FEB-88 NO SPR
|
||
; Copyright time again.
|
||
;
|
||
;EDIT 415 DPM 12-MAY-88 NO SPR
|
||
; UDBs skewed again. Fix UDBOFS.
|
||
;
|
||
;EDIT 416 JMF 27-JUN-88 NO SPR
|
||
; UDB offsets wrong if doing a SYSTAT of a 7.04 crash under 7.03.
|
||
;
|
||
;END OF EDIT HISTORY
|
||
;
|
||
F%RSP=1B28 ;RESPONSE TIME FEATURE
|
||
|
||
;PRINTS ON SYSTAT:SYSTAT.TXT OR TTY:SYSTAT.TXT
|
||
|
||
SALL
|
||
|
||
SEARCH JOBDAT,MACTEN,UUOSYM ;GET STANDARD SYMBOLS
|
||
|
||
|
||
;AC ASSIGNMENTS
|
||
|
||
F=0
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
J=5
|
||
JS=6
|
||
R=7
|
||
N=10
|
||
N1=11
|
||
M=12
|
||
CH=13
|
||
BP=14
|
||
WD=15
|
||
F1=16
|
||
P=17
|
||
|
||
;I/O CHANNEL
|
||
|
||
HLP==0 ;FOR HELP
|
||
TTY==1 ;FOR OUTPUT
|
||
DSK==2 ;FOR READING DSK:CRASH.XPN
|
||
|
||
;ASSEMBLY OPTIONS
|
||
|
||
IFNDEF PURESW,<PURESW==1> ;SHARABLE
|
||
IFNDEF LN.PDL,<LN.PDL==30> ;LENGTH OF PUSH-DOWN LIST
|
||
IFNDEF LN.BUF,<LN.BUF==200> ;LENGTH OF DISK BUFFER
|
||
IFNDEF STANSW,<STANSW==0> ;PPN IS ALWAYS SIXBIT
|
||
IFNDEF HACKSW,<HACKSW==0> ;DO NOT INCLUDE HACKS (IF -1, JUST FOR LISTED SYSTEMS)
|
||
IFNDEF NSPMEM,<NSPMEM==^D1000> ;N-SEC/MEMORY CYCLE(IN CASE MONITOR REFUSED TO TELL US)
|
||
IFNDEF HIDPPN,<HIDPPN==0> ;HIDE DETACHED JOBS PPN
|
||
IFNDEF NCPUS,<NCPUS==^D4> ;NUMBER OF CPUS IN THE SYSTEM
|
||
IFG NCPUS-6,<NCPUS==^D6 ;EVEN THE MONITOR CAN'T HANDLE MORE THAN THIS
|
||
PRINTX %Number of CPU's reduced to six
|
||
>
|
||
IFNDEF JOBMAX,<JOBMAX==^D512> ;MAXIMUM NUMBER OF JOBS FOR TABLES
|
||
IFNDEF NBCSHE,<NBCSHE==^D25> ;NUMBER OF PAGES TO KEEP IN CORE
|
||
IFLE NBCSHE,<NBCSHE==1> ;IN CASE WE DON'T LIKE THE VALUE
|
||
IFNDEF FTAMPM,<FTAMPM==-1> ;-1=FORCE 24 HR. CLOCK, +1=FORCE AM/PM,
|
||
;0=MAKE FOLLOWING DUBIOUS ASSUMPTION:
|
||
;50 HZ POWER LINE MEANS USE 24 HR TYPEOUT, 60 HZ MEANS USE AM/PM
|
||
|
||
IFNDEF FTEXE,<FTEXE==1> ;SUPPORT FOR EXE FILES
|
||
IFNDEF FTDEBUG,<FTDEBUG==0> ;-1 TO ENABLE SYSTAT TO BE DEBUGGED
|
||
;FTDEBUG ALLOWS COMMANDS OF THE FORM "START ;ARG" TO PASS
|
||
; "ARG" TO SYSTAT. ALSO INCLUDES PATCH AREA.
|
||
;
|
||
;NOTE: TO DEBUG WITH BREAKPOINTS VIA DDT, TYPE
|
||
; "HALT$X". THIS WILL SET THE BREAKPOINTS AND TRAP
|
||
; TO THE MONITOR. THEN TYPE "START ;ARGS"
|
||
;COMMANDS
|
||
|
||
L.BDO=="B" ;B WAS TYPED BUSY DEVICES
|
||
L.DSO=="D" ;D " " DORMANT SEGMENTS
|
||
L.FSO=="F" ;F " " FILE STRUCTURES
|
||
L.GSS=="G" ;G " " GENERAL SYSTEM STATISTICS
|
||
L.DPO=="P" ;P " " PERFORMANCE OF DISKS
|
||
L.SSO=="S" ;S " " SHORT JOB STATUS
|
||
L.JSO=="J" ;J " " JOB STATUS
|
||
L.EJS=="N" ;N " " ALL BUT JOB STATUS
|
||
L.LPT=="L" ;L " " LIST ON LPT
|
||
L.HSO=="H" ;H " " HELP
|
||
L.DSC=="T" ;T " " DATA SET STATUS (TTY)
|
||
L.ERR=="E" ;E " " ERROR REPORTS (NON-DISK)
|
||
L.USR=="U" ;U " " LIST USER NAMES
|
||
L.DSK=="X" ;X " " READ FROM DSK:CRASH.XPN
|
||
L.MYJ=="." ;. " " MY JOB ONLY
|
||
L.DPY=="V" ;V " " VT05 OR VT06 USER...TYPE 20 LINES AT A TIME & WAIT
|
||
L.CNT=="C" ;C " " CONTINUOUS TO SAME FILE
|
||
L.GOD=="O" ;O " " GODLY POSSESSOR OF SECRET CHARACTER
|
||
L.WLD=="*" ;* " " PPN WILD CARD
|
||
|
||
;FLAGS (LH OF F)
|
||
|
||
FL.DSK==1 ;DISK MODE
|
||
FL.HGH==2 ;HIGH SEG PARAGRAPH NEEDED
|
||
FL.GOD==4 ;I AM [1,N]
|
||
FL.LGI==10 ;I AM LOGGED IN
|
||
FL.DTJ==20 ;THIS JOB DETACHED
|
||
FL.DOR==40 ;DORMANT SEG TABLE BEING PRINTED
|
||
FL.SCN==100 ;NEW SCANNER SERVICE (FOR TTYTAB LAYOUT)
|
||
FL.DEV==200 ;HEADER OUTPUT SYNC
|
||
FL.NUM==400 ;IF # PRINTED
|
||
FL.NST==1000 ;IF @ PRINTED
|
||
FL.SZR==2000 ;SUPPRESS ZEROES
|
||
FL.BZR==4000 ;BLANK OUT ZEROES
|
||
FL.HSG==10000 ;WORKING ON HIGH SEGMENT
|
||
FL.LPT==20000 ;LIST ON LPT
|
||
FL.RPT==40000 ;REPEATING, WAITING FOR LPT
|
||
FL.EXM==40000 ;IF ! PRINTED (DURING RUN)
|
||
FL.AMP==100000 ;IF & PRINTED
|
||
FL.NBK==200000 ;NON-BLANK LINE
|
||
FL.BRK==SIGN ;NO MORE CHS. TO I/P OR BREAK CH. SEEN
|
||
|
||
;FLAGS (RH OF F)
|
||
|
||
FR.OVR==1B35 ;COLUMN OVERFLOW
|
||
IFGE FTAMPM,<
|
||
FR.DAY==1B34 ;DO TIME AS TIME OF DAY (AM/PM)
|
||
>
|
||
FR.XOM==1B33 ;IF $ PRINTED
|
||
FR.HPQ==1B32 ;IF HPQ # PRINTED
|
||
FR.NFS==1B31 ;IF UNIT NOT IN A F/S
|
||
FR.NFP==1B30 ;IF "UNIT-NOT-IN-AN-F/S" MESS NOT PRINTED
|
||
FR.CNT==1B29 ;WE ARE DOING A CONTINUOUS SYSTAT
|
||
FR.DPY==1B28 ;PAGE HIS OUTPUT....HE HAS A DISPLAY
|
||
FR.END==1B27 ;WE HAVE BEEN THOUGH THE CONT. THING BEFORE
|
||
FR.CHG==1B26 ;THIS IS NEW OR RE-LOGIN FOR JOB
|
||
FR.LGN==1B25 ;SOME NEW LOGIN THIS PASS
|
||
FR.VMF==1B24 ;THE VM FEATURE IS SUPPORTED
|
||
FR.INI==1B23 ;THE TTY CHANNEL IS OPEN
|
||
FR.DSK==1B22 ;OUTPUT IS TO A DISK FILE
|
||
FR.CMT==1B21 ;A COMMENT HAS BEEN SEEN
|
||
FR.EXE==1B20 ;EXE MODE
|
||
FR.INC==1B19 ;DOING INCREMENTAL SYSTATS
|
||
FR.USR==1B18 ;PRINT USER NAME
|
||
|
||
;FLAGS (LH OF F1)
|
||
|
||
F1.XAD==1 ;ADDRESSES ARE 30 BIT QUANITIES (DON'T CLEAR LH WHEN PEEKING)
|
||
;STUFF WHICH HAS TO AGREE WITH MONITOR, ASIDE FROM GETTAB DEFNS
|
||
|
||
ABSTB1==151 ;OLD VALUE OF ABSTAB, POINTER TO NUMTAB
|
||
ABSTB2==410 ;NEW VALUE OF ABSTAB AFTER 503+ MONITOR
|
||
JBTLOC==26 ;TABLE FOR JOB LOCATIONS
|
||
CMWB==200000 ;COMMAND WAIT IN JOB STATUS TABLE
|
||
JNA==40000
|
||
JLOG==4
|
||
JDCON==20000 ;JOB WAITING FOR DEVICE TO BE READIED
|
||
JDC==100000 ;JOB WAITING FOR DCORE OR DUMP COMMAND
|
||
ASSCON==400000
|
||
ASSPRG==200000
|
||
SNA==400000
|
||
NSWP==10000 ;NON-SWAPPABLE IN LH JBTSTS
|
||
JSWP==2000
|
||
NSHF==1000 ;NON-SHUFFLABLE IN LH JBTSTS
|
||
CLKR==1B18 ;JOB HAS A CLOCK REQUEST IN
|
||
JS.XO==1B25 ;EXECUTE ONLY BIT IN RH OF JOB STATUS
|
||
SHRSEG==200000
|
||
CLKCYC==1B6 ;CLOCK CYCLES (1=50 HERTZ)
|
||
CANXRC==1B13 ;EXTENDED RIBS (1=MONITOR CAN READ/WRITE THEM)
|
||
GT.PRC==1B9 ;BIT IN NUMTAB ENTRY MEANING DATA IN PDB
|
||
GT.PDB==4 ;PDB ENTRY IN NUMTAB
|
||
|
||
IOIMPM==400000
|
||
IODERR==200000
|
||
IODTER==100000
|
||
|
||
DV.NAM==0
|
||
DV.CHR==1
|
||
DV.IOS==2 ;DEVICE STATUS
|
||
DV.SER==3
|
||
DV.MOD==4
|
||
DV.LOG==5 ;LOGICAL DEVICE NAME
|
||
DV.SPL==12 ;SPOOL DATA
|
||
DV.JOB==20 ;THESE ARE 603A DDB OFFSETS
|
||
DV.FIL==21 ;FILE NAME IF DISK
|
||
DV.EXT==22 ;FILE EXTENSION IF DISK
|
||
DV.PPN==23 ;P,PN IF DISK
|
||
DV.UNI==30 ;UDB POINTER IF DISK
|
||
;STARTING WITH VERSION 507 DDBLDB CAN BE OBTAINED WITH GETTAB
|
||
DDBLDB==11 ;LINK TO LDB IF NEW SCNSER
|
||
;SEE ALSO PJOBN AND TPCJOB
|
||
;PARAMETERS
|
||
|
||
SIGN=400000
|
||
DVDSK==200000
|
||
DVTTY==10
|
||
DVTTYC==20000 ;TTY IN USE AS CONSOLE
|
||
LDBTTW==56
|
||
LTLUSE==40000 ;LDB IS IN USE
|
||
OUTMSK==377000
|
||
UU.PHS==1B19 ;PHYSICAL ONLY BIT
|
||
FSP==370 ;PAGE INTO WHICH TO MAP FUNNY SPACE PAGE
|
||
FSPADR==FSP_^D9 ;ABOVE AS AN ADDRESS
|
||
|
||
MLON
|
||
|
||
OPDEF PJRST [JRST]
|
||
OPDEF DEVNAM [CALLI 64]
|
||
OPDEF CHKACC [CALLI 100]
|
||
|
||
DEFINE BOMB(A),<JRST [JSP M,BOMB.
|
||
ASCIZ \A\]>
|
||
DEFINE ALLCPUS,<
|
||
ZZ==0
|
||
REPEAT NCPUS,<
|
||
EACHCPU(\ZZ)
|
||
ZZ==ZZ+1
|
||
>
|
||
>
|
||
DEFINE CALL(R)
|
||
< PUSHJ P,R
|
||
>
|
||
DEFINE RETURN
|
||
< POPJ P,
|
||
>
|
||
;STR DATA BLOCK
|
||
|
||
STRNAM==0
|
||
STRSYS==1
|
||
STRUNI==2
|
||
STRTAL==11
|
||
STRMNT==13
|
||
STRUN1==15
|
||
STPPVS==1B35 ;STRUCTURE IS PRIVATE
|
||
STRJOB==20
|
||
|
||
;UNIT DATA BLOCK
|
||
|
||
UNINAM==0
|
||
UNILOG==1
|
||
UNIHID==2
|
||
UNISYS==3
|
||
UNISTR==4
|
||
UNISWP==7
|
||
UNIK4S==7 ;RIGHT 13 BITS = K FOR SWAPPING
|
||
MSKK4S==17777 ;CHNAGED FROM 12 BITS TO 13
|
||
UNIHCT==10
|
||
UNISCT==11
|
||
UNIMCT==12
|
||
UNIERR==13
|
||
UNISOF==14
|
||
UNIHBN==15
|
||
UNIBRC==16
|
||
UNIBWC==17
|
||
UNIDRC==20
|
||
UNIDWC==21
|
||
UNIMRC==22
|
||
UNIMWC==23
|
||
UNIICT==24
|
||
UNIOCT==25
|
||
UNIMSC==26
|
||
UNIUSC==27
|
||
UNIPCT==30
|
||
IFNDEF UNIFKS,<UNIFKS==31>
|
||
UNISDI==32
|
||
UNIHDI==33
|
||
UNIECT==34
|
||
UNIHNG==35
|
||
;UNITA UNIDES AND UNIXRA ARE SINCE 50634 5 LARGER
|
||
UNIPCI==45
|
||
UNIPCO==46
|
||
UNITAL==47 ;IN 503, 504
|
||
UNITL1==41 ;UNITAL PRE 503
|
||
UNIDES==50 ;IN 503,504 - BUT NOT IN 501
|
||
UNIDE1==42 ;UNIDES PRE-503
|
||
UNPZMT==10000
|
||
UNPSAF==20000
|
||
UNIXRA==54
|
||
UNI2ND==72
|
||
;FIELDS IN DATA SET CONTROL TABLE
|
||
|
||
DSCSTS==7B2 ;STATE OF DATA SET
|
||
DSCTIM==77B17 ;TIMER FOR DATA SET
|
||
|
||
IFN PURESW,<
|
||
TWOSEG
|
||
RELOC 400000
|
||
>
|
||
|
||
LOC .JBVER
|
||
BYTE (3)VWHO(9)VSYSTAT(6)VMINOR(18)VEDIT
|
||
RELOC
|
||
|
||
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1968, 1988. ALL RIGHTS RESERVED.
|
||
\;END COPYRIGHT MACRO
|
||
SUBTTL INITIALIZATION
|
||
;START HERE
|
||
|
||
SYSTAT: RESET ;CLEAR ALL I/O AND RESTORE CORE
|
||
IFN PURESW,<
|
||
MOVE A,[XWD HIGH,LOW]
|
||
BLT A,HILOND-1
|
||
MOVEI A,SYSTGO ;SET A NEW
|
||
HRRM A,.JBSA ; START ADDRESS
|
||
JRST SYSTGO ;JUMP INTO LOW SEGMENT
|
||
LIT
|
||
HIGH: RELOC
|
||
LOW: RELOC
|
||
PHASE LOW
|
||
>
|
||
SYSTGO: SETZM GOTCMD ;WE DONT YET HAVE A COMMAND
|
||
MOVE A,[GOTCMD,,CMDBUF] ;CLEAR ANY JUNK
|
||
BLT A,CDENDP ;THAT MIGHT BE LYING AROUND
|
||
CNTLP: ;HERE'S WHERE WE GO TO DO
|
||
;THE SAME OLD COMMAND AGAIN
|
||
MOVE A,[XWD LOWEND,LOWEND+1]
|
||
SETZM LOWEND
|
||
BLT A,TEMEND
|
||
SETZB F,WD ;CLEAR WD FOR NORMAL SYSTAT O/P
|
||
JRST .+3 ;DOUBLE SKIP
|
||
REENTR: TRO F,FR.INC ;SET INCREMENTAL MODE BIT
|
||
RESET ;REENTRY POINT
|
||
TDZ F,[FL.BRK,,FR.INI!FR.DSK!FR.CMT] ;MARK RESET DONE
|
||
SETZM JOBINT+2 ;NO ^C TYPED YET
|
||
IFE PURESW,<MOVEI A,SYSTAT> ;SET REENTER POINT (RESET LATER)
|
||
IFN PURESW,<MOVEI A,SYSTGO> ;SPECIAL ADDRESS IF SHARABLE
|
||
MOVEM A,.JBREN ;SAVE IT
|
||
SETOM ONCE ;CLEAR ONCE THRU FLAG
|
||
MOVEI M,^D19 ;PAGE SIZE LESS ONE FOR DISPLAYS
|
||
MOVEM M,LINECT ;RESET THE COUNTER
|
||
MOVE P,PDP ;SETUP STACK PNTR.
|
||
|
||
REPEAT 0,<
|
||
OUTSTR [ASCIZ /Systat V/]
|
||
MOVE N,.JBVER ;GET VERSION NUMBER
|
||
PUSHJ P,VERPRT ;TYPE IT TO USER
|
||
PUSHJ P,CRLF ;AND END LINE
|
||
>
|
||
|
||
MOVEI A,400K ;DEFAULT TO 128K LOW SEGMENT
|
||
MOVEM A,SYSSIZ
|
||
MOVEI A,340K ;DEFAULT FUNNY SPACE ORIGIN
|
||
MOVEM A,.UPFSO
|
||
MOVEI A,400K ;DEFAULT END OF FUNNY SPACE
|
||
MOVEM A,.UPFSE
|
||
PUSHJ P,STATE ;GET STATES WORD
|
||
MOVE A,XMNVER ;GET MONITOR VERSION
|
||
CALL GETZ ;GET VALUE IN A
|
||
HRRZS A ;ZAP NOISE BITS
|
||
MOVEM A,MONVER ;AND REMEMBER IT
|
||
CAIGE A,70310 ;7.04?
|
||
TDZA B,B ;NO, EARLIER MONITOR
|
||
MOVEI B,12 ;YES, UDB OFFSETS CHANGED AGAIN, SIGH!
|
||
MOVEM B,UDBOFS ;REMEMBER OFFSET
|
||
CAIGE A,60122 ;OLD STYLE IF LESS
|
||
CAIGE A,60000 ;AN OLD MONITOR
|
||
CAIGE A,50722 ;IF NOT VERSION 6 OR LATER
|
||
JRST SYSTA1 ;OLD STYLE
|
||
SYSTA0: SETOM NEWSPY ;NEW SPY LOGIC
|
||
MOVE A,[POINT 9,C,35] ;NEW POINTER TO JOB NUMBER
|
||
MOVEM A,NPJOBN ;NEW JOB NUMBER POINTER
|
||
SYSTA1: HRRZ A,.JBFF ;MAKE SURE SPY WILL SUCCEED
|
||
CORE A, ;IN CASE SOMEONE DID A RUN WITH A CORE ARG
|
||
JFCL ;SHOULDN'T FAIL
|
||
MOVE A,XSYSSZ ;GET SIZE OF SYSTEM
|
||
PUSHJ P,GETA ;FROM THE MONITOR
|
||
MOVEM A,SYSSIZ ;SAVE SYSTEM SIZE
|
||
CAIG A,377777 ;DON'T TRY TO SPY TOO HIGH
|
||
MOVEI A,400000 ; ..
|
||
MOVEI A,-1(A) ;(BACK UP ONE)
|
||
SPY A, ;AND TRY TO SPY
|
||
JRST NOSPY ;CAN'T--USE GETTABS, ETC.
|
||
;NOTE THAT ALL SPY DATA WILL BE CHANGED BY SETDSK WHEN A SYSTAT
|
||
;OF A CRASHED MONITOR ISMADE
|
||
SETOM SPYFLG ;CAN--SET FLAG FOR PEEKS
|
||
MOVE A,XGTTBI ;SEE IF WE HAVE GETTAB IMMEDIATE
|
||
PUSHJ P,GETZ ;IN THIS MONITOR
|
||
JUMPE A,NOSPY ;IF NOT--STILL DO GETTABS
|
||
HRRZM A,OFSGTB ;YES--STORE OFFSET FOR PEEK VIA SPY
|
||
LSH A,-^D9 ;POSITION LENGTH OF TABLE
|
||
HLRZM A,MAXGTB ;AND STORE FOR SIMULATOR
|
||
MOVE A,XPDBPT ;POINTER TO JBTPDB
|
||
PUSHJ P,GETZ ;GET IT IF IT EXISTS
|
||
SKIPE A ;IF IT DOES,
|
||
TDO A,[XWD A,400000] ;MAKE POINTER FOR INDIRECTING AND INDEXING
|
||
MOVEM A,PDBPTR ;STORE FOR LATER
|
||
NOSPY: MOVE A,[XWD 4,FINIS] ;SETUP TO INTERCEPT CONTROL C
|
||
MOVEM A,JOBINT
|
||
MOVE A,[EXP ER.MSG+ER.ICC]
|
||
MOVEM A,JOBINT+1
|
||
MOVEI A,JOBINT
|
||
HRRM A,.JBINT
|
||
PJOB A, ;GET MY JOB NUMBER
|
||
MOVEM A,MYJOB
|
||
HRROI A,0 ;MY STATUS
|
||
PUSHJ P,GETA
|
||
HRROI B,2 ;MY PPN
|
||
PUSHJ P,GETTB
|
||
JRST GODLY ;NON DISK SYSTEM-FLAG AS GODLY
|
||
TLNE A,JLOG ;LOGGED IN?
|
||
TLO F,FL.LGI ;YES-REMEMBER IT
|
||
TLNN B,-2 ;PROJECT 1?
|
||
TLNN A,JLOG ;YES-LOGGED IN?
|
||
SKIPA ;NO
|
||
GODLY: TLO F,FL.GOD ;WE'RE GOD
|
||
TLNN F,FL.LGI ;ARE WE LOGGED IN?
|
||
SETZ B, ;NO--CLEAR OUR NUMBER
|
||
MOVEM B,ME ;SAVE FOR FUTURE TESTS
|
||
PUSHJ P,RDCMND ;YES--READ COMMAND INTO BUFFER
|
||
SUBTTL COMMAND DECODING
|
||
COMND: PUSHJ P,GETCHR ;INPUT A CH.
|
||
JRST NOGO ;NO CHS. LEFT OR A BREAK CH.
|
||
CAIG WD,"Z"
|
||
CAIGE WD,"A" ;IGNORE ALL NON-ALPHABETIC CHS.
|
||
JRST COMND
|
||
IFE FTDEBUG,<
|
||
CAIE WD,"S" ;IGNORE FIRST WORD UNLESS IT BEGINS WITH S
|
||
JRST NOGO
|
||
>
|
||
COMND1: PUSHJ P,GETCHR ;GET CHARACTERS OF WORD
|
||
JRST NOGO ;JUMP IF END OF LINE
|
||
CAIG WD,"Z" ;SKIP UNTIL NO ALPHAS
|
||
CAIGE WD,"A" ;..
|
||
JRST AGAIN1 ;DONE--CHECK SEPARATOR
|
||
JRST COMND1 ;NO--LOOP
|
||
AGAIN: PUSHJ P,GETCHR ;2ND. TIME AROUND LOOK FOR 1ST. CH. NOT A SPACE
|
||
JRST NOGO ;NO CHS. LEFT OR A BREAK CH.
|
||
AGAIN1: TLNE F,FL.DSK
|
||
CAIE WD," "
|
||
SKIPA
|
||
JRST NOGO
|
||
CAIE WD," " ;SKIP SPACES
|
||
CAIN WD,"," ;AND COMMAS
|
||
JRST AGAIN ;..
|
||
IFN FTDEBUG,<
|
||
CAIE WD,";" ;SKIP SEMICOLON
|
||
>
|
||
CAIN WD,"/" ;SKIP SLASH
|
||
JRST AGAIN ;..
|
||
JRST .+2
|
||
NOGO: MOVEI WD,0 ;CLEAR WORD IF NOT "SYSTAT" COMMAND
|
||
CAIN WD,L.DSK ;SEE IF CRASH FILE REQUESTED
|
||
JRST [TLO F,FL.DSK
|
||
JRST AGAIN]
|
||
|
||
;HERE TO INIT THE DEVICE AND ENTER THE FILE
|
||
|
||
CAIN WD,L.DPY ;IS THIS A DISPLAY?
|
||
JRST [TRO F,FR.DPY ;REMEMBER IT
|
||
JRST AGAIN]
|
||
CAIN WD,L.CNT ;DO IT OVER AND OVER AND OVER?
|
||
JRST [TRO F,FR.CNT ;REMEMBER IT
|
||
JRST AGAIN]
|
||
CAIN WD,L.USR ;WANT USER NAMES?
|
||
JRST [TRO F,FR.USR
|
||
JRST AGAIN]
|
||
CAIE WD,L.GOD ;IS HE GODLY ANYWAY?
|
||
JRST SYSINI ;NO GET DEVICE
|
||
TLO F,FL.GOD ;HE KNEW THE SECRET THING
|
||
JRST AGAIN
|
||
SUBTTL COMMAND DISPATCH AND SET UP
|
||
SYSINI: PUSH P,F ;SAVE CURRENT F
|
||
TLZ F,FL.DSK ;TURN DISK USAGE OFF
|
||
CALL GETTTY ;MAKE OUTPUT AVALABLE
|
||
POP P,A ;GET OLD F BACK
|
||
TLNE A,FL.DSK ;WAS DISK FEATURE ON
|
||
TLO F,FL.DSK ;THEN MAKE IT VISIBLE AGAIN
|
||
TLZ F,FL.RPT ;CLEAR OUT FLAG FOR MESSAGE (LPT)
|
||
CAIN WD,L.LPT ;GETTING LPT??
|
||
JRST AGAIN ;NEXT CHARACTER
|
||
TRNE F,FR.DSK ;IF OUTPUT GOES TO A DISK
|
||
TRZ F,FR.DPY ;THEN DO NOT PAGE
|
||
HRRZ A,.JBFF ;PRIME THE FREE CORE SPACE
|
||
MOVEM A,FREE ;FOR SUBSEQUENT CALLS
|
||
MOVEI A,340000 ;CATCH 22, .UPFSO AND .UPFSE MUST BE INITIALIZED
|
||
MOVEM A,.UPFSO ; TO SOMETHING FOR DSKA TO WORK, BUT CAN'T GET
|
||
MOVEI A,400000 ; REAL VALUES UNTIL DSKA DOES WORK. SO SET THEM
|
||
MOVEM A,.UPFSE ; TO RANDOM VALUES, INITIALIZED FOR REAL LATER
|
||
PUSH P,WD ;SAVE COMMAND
|
||
TLNE F,FL.DSK ;WAS DISK FEATURE ALREADY THERE
|
||
PUSHJ P,SETDSK
|
||
POP P,WD ;RESTORE COMMAND
|
||
.DVDAT: MOVE A,[%CNCPU] ;NUMBER OF CPUS FROM MONGEN
|
||
PUSHJ P,FGETTB ;GET IT FOR LOOP
|
||
JRST [MOVE A,[%CNSTS] ;OLD MONITOR, GET CONFIG STATUS
|
||
PUSHJ P,FGETTB ;GET IT
|
||
SETZ A, ;REAL OLD MONITOR
|
||
TLNN A,(ST%DUL) ;DUAL PROCESSOR MONITOR
|
||
TDZA A,A ;NO, GET A ZERO
|
||
MOVEI A,1 ;YES
|
||
AOJA A,.+1] ;RESUME INLINE, A=NUMBER OF CPUS
|
||
CAILE A,NCPUS ;MORE THAT THIS VERSION WAS ASSEMBLED FOR
|
||
MOVEI A,NCPUS ;YES, RESET TO ASSEMBLY PARAMETER
|
||
MOVEM A,NCPCNF ;SAVE NUMBER OF CPUS AWAY
|
||
MOVE A,[%CNLSD] ;GET LENGH OF SHORT DDB
|
||
CALL GETZ ;GET A ZERO OR VALUE
|
||
JUMPE A,GETUPT ;UNKNOWN - GET UPTIME, ETC.
|
||
HRRM A,.DVFIL ;UPDATE POINTER
|
||
SUBI A,1 ;BACK UP 1
|
||
HRRM A,.DVJOB ;AND GET THIS FOR LATER
|
||
ADDI A,2 ;ADD 2 NOT 1 EXTENSION POINTER
|
||
HRRM A,.DVEXT ;UPDATE
|
||
ADDI A,1 ;PPN POINTER
|
||
HRRM A,.DVPPN ;UPDATE THAT TOO
|
||
MOVE A,[%LDDVU] ;DEVUNI OFFSET
|
||
PUSHJ P,GETZ ;GET OFFSET OR ZERO
|
||
JUMPN A,.DVDT2 ;GOT IT
|
||
MOVEI A,DV.UNI ;SETUP DEVUNI
|
||
MOVE B,MONVER ;GET MONITOR VERSION
|
||
CAIGE B,70000 ;DO WE HAVE MONITOR VERSION 7.00 OR ABOVE?
|
||
JRST .DVDT2 ;NO, DV.UNI GOOD ENOUGH
|
||
MOVE A,[%FTERR] ;FEATURE TEST WORD
|
||
PUSHJ P,GETZ ;GET IT OR ZERO
|
||
TRNE A,F%KL10&<0,,-1>;ON A KL?
|
||
TRNN A,F%MS&<0,,-1> ;SEE IF FTMP TRUE
|
||
SKIPA A,[DV.UNI] ;NO, DEVUNI=30
|
||
MOVEI A,DV.UNI+3 ;YES, DEVUNI=33
|
||
.DVDT2: HRRM A,.DVUNI ;UPDATE UNIT POINTER
|
||
MOVE A,[%VMPPB] ;GET START OF FUNNY SPACE
|
||
PUSHJ P,FGETTB ;GET IT
|
||
MOVEI A,340000 ;TRADITIONAL VALUE
|
||
MOVEM A,.UPFSO ;SAVE FOR RANGE CHECKING
|
||
MOVE A,[%VMPPE] ;GET END OF FUNNY SPACE
|
||
PUSHJ P,FGETTB ;GET IT
|
||
MOVEI A,400000 ;TRADITIONAL VALUE
|
||
MOVEM A,.UPFSE ;SAVE FOR RANGE CHECKING
|
||
MOVE A,[%VMUPM] ;GET POINTER TO VIRTUAL ADDR OF UPMP
|
||
PUSHJ P,GETZ ;GET VALUE
|
||
JUMPE A,GETUPT ;IF NOT DEFINED
|
||
MOVE B,A ;SAVE IT
|
||
MOVE A,[%VMLST] ;GET UPMP OFFSET OF DISK DDB PTRS
|
||
PUSHJ P,GETZ ;GET IT
|
||
JUMPE A,GETUPT ;IF NOT DEFINED
|
||
ADD A,B ;ADD TOGETHER
|
||
MOVEM A,.UPLST ;SAVE FOR SPYPAG
|
||
MOVE A,[%CNBCP] ;GET CPU NUMBER OF BOOT PROCESSOR
|
||
PUSHJ P,FGETTB ;SO WE CAN RESOLVE HIGH SEG ADDRESS IN "SYS X"
|
||
SETZ A, ;PRE-701, USE CPU0
|
||
LSH A,1 ;*2 FOR GETTAB
|
||
ADD A,[%CCTOS] ;ADDRESS OF EPT FOR CPUN
|
||
PUSHJ P,FGETTB ;GET IT
|
||
SKIPA ;CAN'T, FORGET IT
|
||
MOVEM A,.CPTOS ;SAVE FOR LATER
|
||
ADDI A,540 ;LOCATION OF SECTION MAP IN THE EPT
|
||
MOVEI B,0 ;INDEX INTO SECTAB
|
||
.DVDT3: MOVE C,A ;WHERE TO GET ANSWER
|
||
PUSHJ P,PEEKC ;GET ENTRY IN SECTION MAP
|
||
MOVEM C,SECTAB(B) ;STORE IT
|
||
AOS A ;NEXT SECTION
|
||
CAIGE B,37 ;DONE?
|
||
AOJA B,.DVDT3 ;NO, READ NEXT ENTRY
|
||
MOVE A,[%FTERR] ;FEATURE TEST TABLE
|
||
PUSHJ P,GETZ ;GET FEATURE TEST SETTING BITS
|
||
TRNN A,<F%KLP&777777> ;KI OR KL PAGING?
|
||
TDZA A,A ;KI PAGING, EPT AND MAP ARE THE SAME PAGE
|
||
MOVEI A,1000 ;KL PAGING, MAP IS THE NEXT PAGE AFTER THE EPT
|
||
ADD A,.CPTOS ;ADDRESS OF THE MAP
|
||
MOVEM A,.CPMAP ;SAVE THAT FOR DSKA
|
||
|
||
GETUPT: MOVSI A,-NCPUS ;ONCE FOR EVERY CPU
|
||
SETZ D, ;PREPARE COUNTER
|
||
TRNN F,FR.END ;FIRST TIME?
|
||
SKIPE ONCE ;(NO) ONCE THRU?
|
||
JRST UPTIME ;HERE-FIRST TIME
|
||
MOVE B,[XWD CPNNUL,CPNNUL+1] ;SET UP TO ZERO CPU STAT AREA
|
||
SETZM CPNNUL ;ZERO FIRST LOCATION
|
||
BLT B,TEMP-1 ;DO IT
|
||
UPTIME: MOVEI B,(D) ;GET CPU*2
|
||
ADD B,[%CVUPT] ;GET UPTIME FOR THAT CPU
|
||
CALL GETTB ;GET IT
|
||
JRST SYSIN3 ;NO CPU
|
||
MOVE C,B ;SAVE UPTIME
|
||
EXCH C,CPNUPT(A) ;SAVE THE TIME AWAY
|
||
;RECOVER OLD TIME
|
||
SUB B,C ;COMPUTE HOW MUCH TIME
|
||
;HAS PASSED
|
||
MOVEM B,DIFTIM(A) ;SAVE ELAPSED TIME
|
||
MOVE B,CPNNUL(A) ;GET OLD NULL TIME
|
||
MOVEM B,OLDNUL(A) ;REMEMBER IT FOR LATER
|
||
MOVEI B,(D) ;GET CPU*2
|
||
ADD B,[%CVNUL] ;NULL TIME
|
||
CALL GETTB ;GET IT
|
||
SETZ B, ;NONE
|
||
MOVEM B,CPNNUL(A) ;SAVE AWAY
|
||
MOVE B,CPNLST(A) ;GET OLD LOST TIME
|
||
MOVEM B,OLDLOS(A) ;SAVE IT NOW
|
||
MOVEI B,(D) ;GET CPU*2
|
||
ADD B,[%CVLST] ;LOST TIME
|
||
CALL GETTB ;GET IT
|
||
SETZ B, ;NONE
|
||
MOVEM B,CPNLST(A) ;SAVE
|
||
MOVE B,CPNOHT(A) ;GET OLD OVERHEAD TIME
|
||
MOVEM B,OLDOHT(A) ;SAVE IT NOW
|
||
MOVEI B,(D) ;GET CPU*2
|
||
ADD B,[%CVOHT] ;OVERHEAD TIME
|
||
CALL GETTB ;GET IT
|
||
SETZ B,
|
||
MOVEM B,CPNOHT(A) ;SAVE IT
|
||
ADDI D,2 ;INCREMENT D BY 2 FOR
|
||
;GETTAB TABLE
|
||
AOBJN A,UPTIME ;LOOP
|
||
SYSIN3: TXZ F,FR.VMF ;TEST HERE FOR VM SUPPORT
|
||
MOVE A,[%CNST2] ;AS DSKSET COULD BE CALLED
|
||
CALL GETZ ;GET A ZERO OR THE FEATURE
|
||
TXNE A,ST%VMS ;VM SUPPORT
|
||
TXO F,FR.VMF ;YES FLAG IT
|
||
SETZM ONEJOB ;CLEAR SINGLE JOB FLAG
|
||
SETZM ONEPPN ;CLEAR SINGLE PPN FLAG
|
||
SETOM ONETTY ;CLEAR SINGLE TTY MODE
|
||
SKIPE DSKFLG ;SEE IF DISK MODE
|
||
TLO F,FL.GOD!FL.DSK ;YES--THEREFORE NO SECRETS
|
||
|
||
MOVE A,XFSFPP ;GET SOME SYSTEM STUFF
|
||
PUSHJ P,GETZ ;LIKE FAILSAFE PPN
|
||
SKIPN A
|
||
MOVE A,[1,,2]
|
||
MOVEM A,FSFPPN
|
||
MOVE A,XPTYCN ;ALSO PTY POINTER
|
||
PUSHJ P,GETZ
|
||
HLRZM A,PTYOFS
|
||
ADD A,PTYOFS
|
||
HRRZM A,PTYMAX
|
||
HRRZ A,PTYOFS ;COMPUTE LINE NUMBER OF THE CTY
|
||
SOS A ;IT IS USUALLY LAST REAL TTY BEFORE PTYS
|
||
MOVEM A,CTYLIN ;SO SAVE THAT
|
||
MOVE A,[%CNBCL] ;ASK FOR CURRENT CTY
|
||
PUSHJ P,GETZ ;GET IT
|
||
SKIPE A ;IGNORE IF OLD MONITOR (CAN'T BE LINE 0)
|
||
MOVEM A,CTYLIN ;SAVE THAT INSTEAD
|
||
|
||
MOVE A,XOPR ;GET NAME OF "OPR"
|
||
PUSHJ P,GETA
|
||
MOVEM A,OPR
|
||
MOVE A,XDATE ;GET DATE NOW
|
||
PUSHJ P,GETA
|
||
MOVEM A,DATE ;SAVE TODAY'S DATE
|
||
MOVE A,XSPPN ;GET SYS: PPN PAIR
|
||
PUSHJ P,GETZ
|
||
SKIPE A
|
||
MOVEM A,SYSPPN
|
||
SETZM CPKI10 ;ZERO KI10 FLAG
|
||
HRLOI B,-2 ;AND TEST WHETHER WE RUN ON A KI10
|
||
AOBJN B,KI10 ;IT IS AKI10
|
||
JRST NOKI ;IT IS A KA10
|
||
KI10: CAILE A,50510 ;BUT FORGET IF AN EARLY VERSION
|
||
SETOM CPKI10 ;ELSE SET THE KI10 FLAG
|
||
NOKI: HRLZI B,LQTAB ;GET Q TABLE NAMES IF WE CAN
|
||
SETZB C,TIQ ;CLEAR INCASE OF REENTER
|
||
SETZM SLQ ;
|
||
SETZM EWQ ;
|
||
QTLP: HRRZI A,25
|
||
HRL A,B
|
||
PUSHJ P,GETZ
|
||
JUMPE A,QTLP1
|
||
MOVEM A,QTAB(B)
|
||
MOVE D,[POINT 12,QTAB(B)] ;BYTE PTR TO CODES
|
||
HRLI C,-3 ;3 CODES PER WORD
|
||
QTLP2: ILDB A,D ;NEXT CODE
|
||
CAIN A,'SL' ;SKIP IF NOT SLEEP
|
||
HRRZM C,SLQ ;REMEMBER WAIT STATE CODE FOR SLEEP
|
||
CAIN A,'TI' ;SKIP IF NOT TI
|
||
HRRZM C,TIQ ;REMEMBER CODE FOR TI
|
||
CAIN A,'EW' ;"EW" STATE?
|
||
HRRZM C,EWQ ;YES, REMEMBER Q CODE
|
||
AOBJN C,QTLP2 ;LOOP FOR ALL CODES IN THIS WORD
|
||
AOBJN B,QTLP
|
||
QTLP1: MOVE A,STATES ;GET STATES WORD
|
||
TLNE A,100 ;NEW SCANNER SERVICE?
|
||
TLO F,FL.SCN ;YES. REMEMBER IT.
|
||
SETZM TNFRTY ;CLEAR 10/40N FLAG
|
||
TLNN A,(1B2) ;CHECK FOR LOGIN FEATURE
|
||
SETOM TNFRTY ;NONE--SET 10/40N FLAG
|
||
MOVE A,XSYSTP ;FIND OUT THE NAME OF "SYS:"
|
||
PUSHJ P,GETZ ;FROM THE MONITOR
|
||
CAMN A,[SIXBIT /DSK/] ;IF "DSK:",
|
||
MOVEI A,0 ; CLEAR FOR EASY TESTS LATER
|
||
MOVEM A,SYSTAP ;STORE AWAY
|
||
DNTSTO: MOVE A,XMEMNS ;GET CORE SPEED
|
||
PUSHJ P,GETZ
|
||
SKIPE A
|
||
MOVEM A,MEMNSP ;DON'T OVERRIDE IF UNDEFINED
|
||
MOVX A,%FTDS2 ;GET 2ND DISK FEATURE WORD
|
||
PUSHJ P,GETZ ;GET IT OR ZERO
|
||
SETOM FTDUAL ;ASSUME DUAL PORTED SUPPORT
|
||
TRNN A,F%DUAL&777777 ;TEST FOR IT
|
||
SETZM FTDUAL ;NO SUPPORT
|
||
CAIN WD,L.BDO ;LIST BUSY DEVICES ONLY?
|
||
JRST DEVQ ;YES
|
||
CAIN WD,L.HSO ;HELP?
|
||
JRST HELP ;YES
|
||
CAIE WD,L.DSO ;LIST DORMANT SEGS ONLY?
|
||
CAIN WD,L.SSO ;NO - LIST SHORT JOB STATUS ONLY?
|
||
JRST GA ;YES
|
||
CAIE WD,L.JSO ;LIST JOB STATUS INFO. ONLY?
|
||
CAIN WD,L.EJS ;NO-LIST ALL BUT JOB STATUS?
|
||
JRST GA ;YES
|
||
CAIN WD,L.FSO ;LIST FILESTRUCTURES ONLY?
|
||
JRST FS ;YES
|
||
CAIN WD,L.DPO ;LIST DISK PERFORMANCE ONLY?
|
||
JRST DP ;YES
|
||
CAIN WD,L.DSC ;DATA SET CONTROL ONLY?
|
||
JRST DSCDO ;YES
|
||
CAIN WD,L.ERR ;NON-DISK ERRORS ONLY?
|
||
JRST ERRPT ;YES
|
||
CAIN WD,L.GSS ;GENERAL SYSTEM STATISTICS ONLY?
|
||
JRST GA ;YES
|
||
CAIN WD,L.MYJ ;LIST JUST MY JOB?
|
||
JRST [MOVE N,MYJOB
|
||
JRST GOTJOB]
|
||
CAIL WD,"0" ;SEE IF SPECIFIC JOB
|
||
CAILE WD,"9" ;..
|
||
JRST CHKPPN ;NO--GO SEE IF PPN
|
||
MOVEI R,^D10 ;SET FOR DECIMAL INPUT
|
||
PUSHJ P,GETRDX ;GET DECIMAL
|
||
GOTJOB: JUMPE N,HELPM ;ERROR IF JOB 0
|
||
MOVEM N,ONEJOB ;STORE REQUEST
|
||
JRST GOTJNK ;GO DO IT
|
||
CHKPPN: SKIPN TNFRTY ;NO PPNS IF 10/40
|
||
CAIE WD,"[" ;SEE IF PPN
|
||
JRST CHKTTY ;NO--GO PROCESS
|
||
MOVEI R,10 ;SET FOR OCTAL INPUT
|
||
PUSHJ P,GETRDC ;GET PROJECT
|
||
PUSHJ P,GETCHR ;GET BREAK CHAR IN WD
|
||
JRST HELPM
|
||
PUSHJ P,CHKWLD ;SEE IF WILD CARD PPN
|
||
SKIPGE N ;USER TYPE [,...?
|
||
HLRZ N,ME ;YES, SUBSTITUTE OUR PROJECT
|
||
HRLZ A,N ;SAVE FOR LATER
|
||
CAIE WD,"," ;MUST HAVE COMMA HERE
|
||
JRST HELPM
|
||
PUSHJ P,GETRDC ;GET PROGRAMMER
|
||
PUSHJ P,GETCHR ;GET BREAK CHARACTER
|
||
JFCL
|
||
PUSHJ P,CHKWLD ;SEE IF WILD CARD PPN
|
||
SKIPGE N ;USER TYPE [...,]?
|
||
HRRZ N,ME ;YES, USE OUR PROGRAMMER NUMBER
|
||
HRR A,N ;ADD TO RESULT
|
||
SKIPN A ;*,*?
|
||
SETO A, ;YES, REMEMBER THAT
|
||
MOVEM A,ONEPPN ;STORE FOR TESTS
|
||
JRST GOTCT2 ;AND SKIP BREAK CHARACTER
|
||
|
||
CHKWLD: CAIN WD,L.WLD ;* TYPED?
|
||
JRST [JUMPN N,HELPM ;IF *, CANNOT HAVE A NUMBER
|
||
PUSHJ P,GETCHR ;FLUSH THE *
|
||
JFCL
|
||
POPJ P,] ;ELSE RETURN
|
||
SKIPE N ;NUMBER SEEN?
|
||
POPJ P, ;YES, RETURN IT
|
||
TLNN F,FL.LGI ;USER LOGGED IN?
|
||
JRST HELPM ;NO, [,] IS ILLEGAL
|
||
SETOM N ;SET FLAG FOR CALLER
|
||
POPJ P, ;EVERYTHING OK, RETURN
|
||
CHKTTY: TLNE F,FL.SCN ;SEE IF NEW SCANNER SERVICE
|
||
CAIE WD,"#" ;YES--SEE IF TTY NUMBER
|
||
JRST CHKONC ;NO--GO PROCESS
|
||
PUSHJ P,GETCHR ;YES--GET WHICH TYPE
|
||
JRST .+2 ;END--DO SELF
|
||
CAIN WD,"." ;SEE IF SELF
|
||
JRST [SETOM A
|
||
GETLCH A
|
||
TRZ A,.UXTRM ;CLEAR .UXTRM OFFSET
|
||
JRST GOTCT1]
|
||
CAIN WD,"C" ;SEE IF CTY
|
||
JRST GOTCTY ;YES--GO SET IT UP
|
||
MOVEI R,^D8
|
||
CAIN WD,"P" ;SEE IF PSEUDO LINE
|
||
JRST [PUSHJ P,GETRDC
|
||
ADD N,PTYOFS
|
||
JRST GOTTTY]
|
||
CAIN WD,"T" ;SEE IF TTY
|
||
JRST [PUSHJ P,GETRDC
|
||
JRST GOTTTY]
|
||
PUSHJ P,GETRDX ;MUST BE JUST TTY NUMBER
|
||
GOTTTY: HRRZM N,ONETTY ;STORE RESULT
|
||
JRST GOTJNK ;GO DO THE WORK
|
||
GOTCTY: MOVE A,CTYLIN ;GET LINE NUMBER OF THE CTY
|
||
GOTCT1: HRRZM A,ONETTY ;STORE AWAY
|
||
GOTCT2: PUSHJ P,GETCHR ;GET BREAK CHARACTER
|
||
JFCL ;IGNORE EOL
|
||
GOTJNK: MOVEI WD,"[" ;SETUP JUNK
|
||
JRST GA ;GO DO IT
|
||
|
||
CHKSW: TDNE F,[XWD FL.GOD,FR.DPY!FR.CNT] ;DID HE TYPE ONLY ONE OF THE NEW COMMANDS?
|
||
JRST CLRGA ;YES, GIVE HIM THE DEFAULT
|
||
CHKONC: SKIPN ONCE ;NO VALID ARGS. SUPPLIED-HAVE WE BEEN THRU BEFORE?
|
||
JRST HACKQ ;YES-EXIT.
|
||
CAIL WD,40 ;IS IT JUNK GRAPHIC?
|
||
JRST HELPM ;NO--TELL USER HOW TO GET HELP
|
||
CLRGA: MOVEI WD,0 ;CLEAR WD FOR NORMAL O/P
|
||
SUBTTL READ TTY STATUS DATA
|
||
GA: MOVE A,XSEGPT
|
||
PUSHJ P,GETA
|
||
MOVEM A,SEGPTR
|
||
HLRE B,A
|
||
MOVNM B,SEGN
|
||
HRRZM A,JOBN
|
||
ADD A,SEGN
|
||
HRRZM A,BOTH
|
||
HRRZ B,FREE
|
||
MOVEM B,ZERLOW
|
||
MOVE A,JOBN ;GET NUMBER OF JOBS
|
||
IMULI A,3 ;NEED THAT MANY WORDS ON NEXT PAGE
|
||
ADDI B,(A) ;COMPUTE HIGHEST ADDRESS NEEDED
|
||
HRRZ A,.JBREL
|
||
CAIL A,(B) ;SEE IF .DVIOS, .TTY, AND .TTYN TABLES WILL EXCEED CORE
|
||
JRST SYS0A
|
||
CORE B,
|
||
JRST NOCOR ;TROUBLE-PRINT MESSAGE & QUIT
|
||
HRRZ A,.JBREL
|
||
SYS0A: MOVEM A,ZERHGH
|
||
SETZM @ZERLOW
|
||
MOVE A,ZERLOW
|
||
HRLS A
|
||
ADDI A,1
|
||
BLT A,@ZERHGH
|
||
MOVE A,FREE
|
||
HRRM A,.DVIOS
|
||
MOVE A,JOBN
|
||
ADDB A,FREE
|
||
HRRM A,.TTY
|
||
MOVE A,JOBN ;GET NUMBER OF JOBS
|
||
ADDB A,FREE ;ADVANCE POINTER
|
||
HRRM A,.TTYN ;SETUP TABLE OF LINE NUMBERS
|
||
MOVE A,JOBN ;GET NUMBER OF JOBS
|
||
ADDB A,FREE ;AND UPDATE THE FREE BARRIER
|
||
SETOM (A) ;JOB 0 IS ON NO LINE
|
||
MOVSI D,10 ;TABLE INDEX FOR TTYTAB, ENTRY #0
|
||
SYS0L: MOVS B,D
|
||
TLNN F,FL.DSK ;READING FROM DISK?
|
||
SKIPE SPYFLG ;OR PRIVILEGED?
|
||
JRST SYST03 ;YES, USE TTYTAB LOGIC
|
||
HRRZ J,D ;GET JOB NUMBER
|
||
CAML J,JOBN ;CHECK FOR THE END
|
||
JRST SYS0X ;END OF TY DATA
|
||
JUMPE A,SYST02 ;0 IS DETACHED!!
|
||
MOVE A,J ;GET JOB NUMBER
|
||
TRMNO. A, ;GET I/O INDEX
|
||
JRST [SETZ A, ;MAKE IT DETACHED
|
||
JRST SYST02] ;AND FILL IN NAME
|
||
TRZ A,.UXTRM ;CLEAR TTY UDX BIT
|
||
CAMN A,CTYLIN ;IS IT CTY?
|
||
JRST SYST01 ;YES THEN NAME IS KNOWN
|
||
TRO A,.UXTRM ;PUT THE BIT BACK
|
||
DEVNAM A, ;GET NAME
|
||
SETZM A ;DETACHED IF AN ERROR
|
||
SKIPA ;SKIP CTY NAME
|
||
SYST01: MOVSI A,(SIXBIT /CTY/);GET REAL NAME
|
||
SYST02: MOVEM A,@.TTY ;REMEBER NAME
|
||
JRST TTYCN1 ;SKIP TTYTAB LOGIC
|
||
SYST03: PUSHJ P,GETTB ;GET NEXT ENTRY
|
||
JRST SYS0X ;END OF TTYTAB
|
||
LDB J,TPCJOB ;IF OLD SCNSRF, GET JOB NO
|
||
TLNE F,FL.SCN ;NEW SCNSER?
|
||
MOVEI J,0(D) ;YES. DIFFERENT LAYOUT. GET JOB NO.
|
||
SETZM @.TTY ;CLEAR NAME
|
||
TLZ B,-1
|
||
JUMPE B,SYS0Z
|
||
MOVEI C,DV.NAM(B) ;GET TTY NAME
|
||
PUSHJ P,PEEKC ;..
|
||
MOVEM C,@.TTY ;STORE IN TABLE
|
||
MOVEI C,DV.IOS(B) ;GET IOS
|
||
PUSHJ P,PEEKC
|
||
MOVEM C,@.DVIOS
|
||
TLNN F,FL.SCN ;WHICH SCANNER LAYOUT?
|
||
JRST SYS0Z ;OLD FORGET IT
|
||
MOVE A,XDDBLD ;GET CODE FOR LDB LINK
|
||
PUSHJ P,GETZ ;RETURN ZERO IF NOT IMPLEMENTED
|
||
JUMPE A,SYS0L0 ;IN THAT CASE TAKE OLD NUMERIC LOGIC
|
||
MOVE C,B ;GET DDB ADDRESS
|
||
ADDI C,(A) ;AND ADD IN LDB LINK OFFSET
|
||
JRST SYS0L1 ;AND SKIP NUMERIC LOGIC
|
||
SYS0L0: MOVEI C,DDBLDB(B) ;NEW. SEE IF DETACHED.
|
||
SKIPE A,MONVER ;SEE IF OLD MONITOR
|
||
ADDI C,3 ;NO, 5.03 OR LATER
|
||
TLZ A,-1 ;CLEAR JUNK
|
||
CAILE A,50430 ;5.05 OR LATER?
|
||
ADDI C,1 ;ONE MORE WORD IN LDB
|
||
CAILE A,70207 ;703?
|
||
ADDI C,1 ;YES, EVEN 1 MORE
|
||
SYS0L1: PUSHJ P,PEEKC ;..
|
||
TRNN C,-1 ;ANY LDB LINK?
|
||
HRLM C,@.TTY ;CLEAR LEFT HALF
|
||
TTYCN1: MOVE A,[POINT 6,@.TTY,17]
|
||
MOVEI B,0 ;GET TTY NUMBER
|
||
TTYCN2: ILDB C,A ;GET NEXT DIGIT
|
||
SUBI C,'0' ;CONVERT TO BINARY
|
||
JUMPL C,TTYCN3 ;EXIT. WHEN DONE
|
||
LSH B,3 ;ADVANCE RESULT
|
||
IOR B,C ;INCLUDE THIS DIGIT
|
||
TLNE A,(77B5) ;SEE IF AT END OF WORD
|
||
JRST TTYCN2 ;NO--LOOP FOR MORE
|
||
TTYCN3: MOVEI A,-1 ;SET RIGHT HALF MASK
|
||
TDNN A,@.TTY ;SEE IF RH=0 (IE, CTY)
|
||
MOVE B,CTYLIN ;YES--CHANGE TO CTY LINE NUMBER
|
||
MOVEM B,@.TTYN ;STORE LINE NUMBER AWAY
|
||
TSNN A,@.TTY ;SEE IF DETACHED
|
||
JRST SYS0Z ;YES--SKIP PTY TEST
|
||
CAML B,PTYOFS ;SEE IF WITHIN THE PTY RANGE
|
||
CAML B,PTYMAX ;..
|
||
JRST SYS0Z ;NO--LEAVE ALONE
|
||
SUB B,PTYOFS ;YES--REMOVE THE OFFSET
|
||
HRLI B,'PTY' ;SET FLAG FOR LATER
|
||
MOVEM B,@.TTY ;AND STORE
|
||
|
||
SYS0Z: AOJA D,SYS0L
|
||
SYS0X: MOVE J,MYJOB ;SEE IF WE ARE AT AN OPERATOR TTY
|
||
MOVE A,@.TTY
|
||
CAME A,[SIXBIT /CTY/] ;CHECK CTY
|
||
CAMN A,OPR ;CHECK OPR
|
||
TLO F,FL.GOD ;YES--SET GOD FLAG
|
||
|
||
|
||
SUBTTL READ JOB AND SEGMENT STATUS
|
||
MOVE B,[XWD -NTAB,TABPTR]
|
||
HRLI A,.GTSWP
|
||
MOVE C,MONVER
|
||
CAILE C,70207
|
||
HRLI A,.GTIMI
|
||
TLO A,SIGN
|
||
HLLM A,TABPTR+2
|
||
INIT1: MOVE C,(B)
|
||
HRRZ J,BOTH
|
||
TLZN C,SIGN
|
||
HRRZ J,JOBN
|
||
MOVE A,FREE
|
||
HRRM A,(C) ;GENERATE ADDRESS IN TABLE POINTER
|
||
ADDI A,(J) ;PROTECT TABLE
|
||
HRRZM A,FREE ;UPDATE FREE FENCE FOR NEXT ROUND
|
||
CAMG A,.JBREL ;DO WE NEED MORE CORE?
|
||
JRST INIT0 ;NO THERE IS STILL ENOUGH
|
||
CORE A, ;GET CORE
|
||
JRST NOCOR ;IF IT IS NOT THERE THEN TOO BAD
|
||
INIT0: MOVNS J
|
||
HRLZS J
|
||
INIT2: MOVS A,C
|
||
HRLI A,(J)
|
||
PUSHJ P,GETZ
|
||
MOVEM A,@0(C)
|
||
AOBJN J,INIT2
|
||
AOBJN B,INIT1
|
||
|
||
;SEGMENT DATA
|
||
|
||
MOVE A,FREE ;GET FREE POINTER
|
||
HRRM A,.SGN ;SET BASE OF TABLE
|
||
ADD A,JOBN ;ONE ENTRY PER JOB
|
||
HRRZM A,FREE ;UPDATE FREE POINTER
|
||
CAMG A,.JBREL ;DO WE NEED MORE CORE?
|
||
JRST INIT4 ;NO THERE IS STILL ENOUGH
|
||
CORE A, ;GET CORE
|
||
JRST NOCOR ;IF IT IS NOT THERE THEN TOO BAD
|
||
INIT4: MOVN J,JOBN ;MAKE UP AN AOBJN POINTER
|
||
HRLZS J ;...
|
||
INIT5: MOVSI A,(J) ;GET JOB NUMBER
|
||
HRRI A,14 ;TABLE NUMBER
|
||
PUSHJ P,GETZ ;GET IT
|
||
MOVE B,MONVER ;GET VERSION
|
||
CAILE B,70307 ;7.04 OR LATER?
|
||
JUMPN A,[ADDI A,1 ;YES, GET THE EQUIVALENT JBTSGN INFO
|
||
PUSHJ P,PEEKA ;GET IT
|
||
JRST .+1] ;CONTINUE
|
||
MOVEM A,@.SGN ;SAVE IT
|
||
AOBJN J,INIT5 ;LOOP FOR ALL
|
||
MOVE A,FREE
|
||
HRRM A,.SEGCT ;
|
||
ADD A,SEGN
|
||
HRRZM A,FREE
|
||
CAMG A,.JBREL ;IS THERE SILL ENOUGH CORE
|
||
JRST INIT3 ;YES
|
||
CORE A, ;GET IT OR
|
||
JRST NOCOR ;JUST DIE
|
||
INIT3: MOVE A,.SEGCT
|
||
HRLS A
|
||
SETZM (A)
|
||
ADDI A,1
|
||
BLT A,@FREE
|
||
MOVE A,[%NSMXM] ;MAX VALUE MAXMAX
|
||
PUSHJ P,GETZ ;GO GET IT OR ZERO
|
||
SKIPN A ;NON-ZERO?
|
||
BOMB (GETTAB ERROR <%NSMXM>) ;NO, DIE
|
||
SKIPE CPKI10 ;RUNNING ON A KI10.GT.50510
|
||
JRST INIT6 ;YES GO AWAY
|
||
ADDI A,1777 ;ROUND UP
|
||
TRZ A,1777
|
||
INIT6: MOVEM A,MAXMAX ;TOTAL MAX USER CORE AVAILABLE
|
||
CAIN WD,L.DSO ;LIST DORMANT SEGS. ONLY?
|
||
JRST DODORM ;YES - GO DO IT
|
||
CAIN WD,L.SSO ;SHORT STATUS ONLY?
|
||
JRST SYS4A ;YES
|
||
SKIPN ONEJOB ;SEE IF CROSS SECTION
|
||
SKIPE ONEPPN ;..
|
||
JRST SYS4A ;YES--SKIP HEADERS, ETC.
|
||
SKIPL ONETTY ;..
|
||
JRST SYS4A ;..
|
||
SUBTTL PRINT GENERAL SYSTEM STATUS
|
||
PUSHJ P,THISIS ;OUTPUT NAME OF SYSTEM, DATE AND TIME
|
||
MOVE A,STATES ;REPORT LOGIN AVAILABILITY
|
||
MOVEI M,[ASCIZ /No LOGINs allowed
|
||
/]
|
||
TRNN A,1
|
||
MOVEI M,[ASCIZ /No remote LOGINs allowed
|
||
/]
|
||
TRNE A,3
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /Batch only
|
||
/]
|
||
TRNE A,4 ;CHECK BATCH BIT
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /Unspooling allowed
|
||
/]
|
||
TRNE A,200 ;CHECK SPOOL CONTROL
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /No operator on duty
|
||
/]
|
||
TRNE A,400 ;**[8] IS OPERATOR THERE
|
||
CALL MSG ;**[8] (NO) TELL IT
|
||
MOVE A,XSYKTM ;GET MINUTES TO SYSTEM KILL
|
||
PUSHJ P,GETZ ;FROM THE MONITOR
|
||
MOVEI M,[ASCIZ/Timesharing is over
|
||
/] ;
|
||
SKIPGE A ;IS TIMESHARING OVER ?
|
||
PUSHJ P,MSG ;YES--TELL USER ABOUT IT
|
||
SKIPLE N,A ;SEE IF SET
|
||
CAILE A,^D24*^D60 ;YES--SEE IF WITHIN 24 HRS.
|
||
JRST GENSTS ;NO--SKIP MESSAGE
|
||
MOVEI M,[ASCIZ /Timesharing ends in /]
|
||
IDIVI N,^D60 ;YES--GET HOURS
|
||
PUSH P,N1 ;SAVE MINUTES
|
||
JUMPE N,KSYNHR ;JUMP IF NO HOURS LEFT
|
||
PUSHJ P,MSGDEC ;TELL USER HOW LONG
|
||
MOVEI M,[ASCIZ / hrs. /]
|
||
KSYNHR: POP P,N ;RECOVER MINUTES
|
||
PUSHJ P,MSGDEC ;OUTPUT IT
|
||
MOVEI M,[ASCIZ / mins. (at /]
|
||
PUSHJ P,MSG ;AND WHEN THAT IS
|
||
IMULI A,^D60 ;CONVERT TO SECS.
|
||
IMUL A,TCKSEC ;AND THEN JIFFIES
|
||
ADD A,NOW ;ADD CURRENT TIME
|
||
IDIV A,TCKSEC ;CONVERT TO SECS
|
||
IDIVI A,^D60 ;CONVERT TO MINUTES
|
||
IMUL A,TCKSEC ;BACK TO SECONDS
|
||
IMULI A,^D60 ;BACK TO MINUTES,TO DROP SECONDS
|
||
MOVEI B,^D24*^D3600 ;GET NUMBER OF SECS. IN A DAY
|
||
IMUL B,TCKSEC ;CONVERT TO JIFFIES
|
||
CAML A,B ;SEE IF TOMORROW
|
||
SUB A,B ;YES--BACK OFF CLOCK
|
||
IFGE FTAMPM,<
|
||
TRO F,FR.DAY ;REQUEST AM/PM HACK
|
||
>
|
||
PUSHJ P,TCKTIS ;OUTPUT TIME OF DAY
|
||
MOVEI M,[ASCIZ /)
|
||
/]
|
||
PUSHJ P,MSG ;FINISH MESSAGE
|
||
GENSTS: PUSHJ P,CRLF ;ISOLATE CPU TIMES FROM HEADER,KSYS, ETC.
|
||
MOVE A,[%CNCPU] ;[326]NUMBER OF CPUS
|
||
PUSHJ P,FGETTB ;[326]GET THAT
|
||
SETZ A,
|
||
SOJLE A,GENST0 ;[326]DON'T OUTPUT IF ONLY 1 CPU
|
||
MOVEI M,[ASCIZ /System Uptime /] ;[326]
|
||
PUSHJ P,MSG ;[326]OUTPUT
|
||
MOVE A,[%CNSUP] ;[326]GET SYSTEM UPTIME
|
||
PUSHJ P,FGETTB ;[326] ..
|
||
JFCL ;[326]
|
||
PUSHJ P,TCKTIS ;[326]OUTPUT THAT
|
||
MOVEI M,[ASCIZ /, policy CPU = CPU/]
|
||
PUSHJ P,MSG ;PRINT TEXT
|
||
MOVE A,[%CNBCP] ;BOOT CPU NUMBER
|
||
PUSHJ P,FGETTB ;FETCH
|
||
SETZ A, ;???
|
||
HRRZ N,A ;COPY RESULT
|
||
PUSHJ P,DECPRT ;OUTPUT IT
|
||
MOVEI M,[ASCIZ /, CTY = line /]
|
||
PUSHJ P,MSG ;PRINT TEXT
|
||
MOVE A,[%CNBCL] ;BOOT CPU CTY
|
||
PUSHJ P,FGETTB ;FETCH
|
||
SETZ A, ;???
|
||
PUSHJ P,OCTPRA ;PRINT IT
|
||
PUSHJ P,CRLF ;[326]AND END THE LINE
|
||
MOVEI M,[ASCIZ / Uptime/]
|
||
TRNE F,FR.END ;INCREMENTAL?
|
||
MOVEI M,[ASCIZ / + Uptime/]
|
||
PUSHJ P,MSG ;START HEADER LINE
|
||
MOVEI M,[ASCIZ / % Null % Idle % Lost % Overhead/]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,CRLF
|
||
GENST0: MOVN D,NCPCNF ;[326]FORM AOBJN
|
||
HRLZS D
|
||
TLC D,-1 ;FIND OUT IF ONLY 1 IN CONFIGURATION
|
||
TLCN D,-1
|
||
JRST GENST2 ;SKIP OUTPUT OF "CPUn"
|
||
GENST1: MOVEI M,[ASCIZ/CPU/] ;HEADER
|
||
PUSHJ P,MSG
|
||
HRRZ N,D ;GET CPU NUMBER
|
||
PUSHJ P,DECPRT ;OUTPUT IT
|
||
MOVEI M,[ASCIZ / /] ;SPACE OVER 1
|
||
PUSHJ P,MSG ; OVER
|
||
GENST2: HRRZ A,D ;GET CPU #
|
||
LSH A,1 ;CPU*2 FOR GETTAB
|
||
ADD A,[%CCOKP] ;CPU OK WORD
|
||
PUSHJ P,GETZ ;GO GET IT
|
||
MOVE C,A ;SAVE ANSWER
|
||
HRRZ A,D ;GET CPU #
|
||
LSH A,1 ;CPU*2 FOR GETTAB
|
||
ADD A,[%CVRUN] ;RUNNABILITY FLAGS
|
||
PUSHJ P,GETZ ;GET THEM
|
||
ANDX A,CV%RUN!CV%RMV!CV%DET!CV%SPD ;KEEP JUST MEANINGFUL BITS
|
||
TXNN A,CV%RUN ;SIGN BIT ON SAYS NOT RUNNING BY OPR CHOICE
|
||
JUMPLE C,RUNSTS ;RUNNING?
|
||
MOVEI M,[ASCIZ /Not Running/] ;NO
|
||
JUMPE A,DWNSTS ;GO IF IT JUST STOPPED
|
||
TXNE A,CV%SPD ;SUSPENDED (ONLY MAKES SENSE IF A CRASH)
|
||
JRST [MOVEI M,[ASCIZ /Suspended/]
|
||
JRST DWNSTS]
|
||
TXNN A,CV%RMV+CV%DET ;JUST "SET NO RUN"?
|
||
JRST [MOVEI M,[ASCIZ /Set no run/]
|
||
JRST DWNSTS]
|
||
TXNE A,CV%RMV ;REMOVED?
|
||
JRST [MOVEI M,[ASCIZ /Removed/]
|
||
JRST DWNSTS]
|
||
MOVEI M,[ASCIZ/Detached/]
|
||
DWNSTS: PUSHJ P,MSG ;OUTPUT THAT
|
||
JRST GENST3 ;NEXT CPU
|
||
RUNSTS: MOVEI M,[ASCIZ /Uptime /]
|
||
MOVE A,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIN A,1 ;ONLY ONE?
|
||
PUSHJ P,MSG
|
||
TRNE F,FR.END ;FIRST TIME?
|
||
SKIPA A,DIFTIM(D) ;NO, GET DIFF UPTIME
|
||
MOVE A,CPNUPT(D) ;PICK UP UPTIME
|
||
PUSH P,A ;SAVE WHAT WE TYPE
|
||
MOVE A,NCPCNF ;NUMBER OF CPUS AGAIN
|
||
CAIN A,1 ;JUST ONE?
|
||
JRST RUNST1 ;YES - JUST TYPE IT
|
||
MOVE A,(P) ;NO - GET UPTIME BACK
|
||
IDIV A,TCKSEC ;IN SECONDS
|
||
IDIVI A,^D60*^D60 ;GET HOURS OF UPTIME
|
||
CAIGE A,^D100 ;.LT. 100?
|
||
JRST [MOVEI M,[ASCIZ/ /] ;YES - NEED AT LEAST ONE MORE SPACE
|
||
CAIGE A,^D10 ;.LT. 10?
|
||
MOVEI M,[ASCIZ/ /] ;YES - NEEDS 2 MORE SPACES
|
||
PUSHJ P,MSG ;TYPE CORRECT NUMBER OF SPACES
|
||
JRST .+1] ;AND CONTINUE
|
||
RUNST1: MOVE A,(P) ;GET UPTIME BACK
|
||
CALL TCKTIS ;TYPE IT
|
||
POP P,A ;GET VALUE OF UPTIME
|
||
JUMPE A,GENST3 ;SKIP REST IF UPTIME OR INCREMENTAL IS ZERO
|
||
MOVEI M,[ASCIZ /, /] ;MAYBE JUST ONE CPU
|
||
MOVE B,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIE B,1 ;ONLY ONE?
|
||
MOVEI M,[ASCIZ / /] ;SPACE
|
||
PUSHJ P,MSG ; OVER
|
||
MOVE N,CPNNUL(D)
|
||
SUB N,OLDNUL(D) ;USE DIFFERENTIAL NULL TIME
|
||
IMULI N,^D100
|
||
MOVEM N,TEMP(D) ;SAVE FOR COMPUTING IDLE & LOST TIME
|
||
TRNE F,FR.END ;FIRST TIME?
|
||
SKIPA B,DIFTIM(D) ;NO, GET DIF UPTIME.
|
||
MOVE B,CPNUPT(D) ;YES, GET CPU UPTIME
|
||
IDIV N,B ;COMPUTE % NULL TIME
|
||
MOVEM N,TEMP1 ;SAVE %NULL TIME
|
||
PUSHJ P,DECPRT ;TYPE NULL TIME FOR EACH CPU
|
||
MOVEI M,[ASCIZ /% Null time = /]
|
||
MOVE A,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIE A,1 ;ONLY ONE?
|
||
MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,MSG ;SPACE OVER
|
||
MOVE N,CPNLST(D)
|
||
SUB N,OLDLOS(D) ;GET DIFFERENTIAL LOST TIME
|
||
IMUL N,[EXP -^D100]
|
||
ADD N,TEMP(D)
|
||
TRNE F,FR.END ;FIRST TIME?
|
||
SKIPA B,DIFTIM(D) ;NO, GET DIF UPTIME.
|
||
MOVE B,CPNUPT(D) ;YES, GET CPU UPTIME
|
||
IDIV N,B ;COMPUTE % LOST TIME
|
||
MOVEM N,TEMP(D) ;SAVE %IDLE TO GET %LOST LATER
|
||
PUSHJ P,DECPRT ;TYPE IDLE TIME FOR EACH CPU
|
||
MOVEI M,[ASCIZ /% Idle + /]
|
||
MOVE A,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIE A,1 ;ONLY ONE?
|
||
MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,MSG ;SPACE OVER
|
||
MOVE N,TEMP1 ;GET %NULL TIME
|
||
SUB N,TEMP(D) ;SUBTRACT %IDLE TIME
|
||
PUSHJ P,DECPRT ;TYPE LOST TIME FOR EACH CPU
|
||
MOVEI M,[ASCIZ /% Lost, /]
|
||
MOVE A,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIE A,1 ;ONLY ONE?
|
||
MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,MSG ;SPACE OVER
|
||
MOVE N,CPNOHT(D) ;GET CURRENT OHT
|
||
SUB N,OLDOHT(D) ;COMPUTE INCREMENTAL OVERHEAD
|
||
IMULI N,^D100
|
||
TRNE F,FR.END ;FIRST TIME?
|
||
SKIPA B,DIFTIM(D) ;NO, GET INCREMENTAL UPTIME
|
||
MOVE B,CPNUPT(D) ;YES, GET CPU UPTIME
|
||
IDIV N,B ;COMPUTE %OVERHEAD
|
||
PUSHJ P,DECPRT ;PRINT IT
|
||
MOVEI M,[ASCIZ/% Overhead/]
|
||
MOVE A,NCPCNF ;GET NUMBER OF CPUS
|
||
CAIN A,1 ;ONLY ONE?
|
||
PUSHJ P,MSG ;PRINT TEXT
|
||
GENST3: PUSHJ P,CRLF
|
||
AOBJN D,GENST1 ;TYPEOUT FOR ALL CPUS
|
||
MOVE D,NCPCNF ;GET NUMBER OF CPUS (LINES) JUST OUTPUT
|
||
CAILE D,1 ;ONLY 1 LINE
|
||
PUSHJ P,CRLF ;NO, SEPARATE OUTPUT A LITTLE BETTER
|
||
|
||
PRSHUF: TLNN F,FL.DSK!FL.LPT ;SEE IF OPERATOR WORK
|
||
JRST PRSHF1 ;NO--CUT OUT JUNK TO SAVE TIME
|
||
MOVEI M,[ASCIZ/Incremental /] ;IN CASE THIS IS "C"
|
||
TRNE F,FR.END ;NOT FIRST TIME?
|
||
PUSHJ P,MSG ;NOT FIRST, TYPE IT
|
||
MOVEI M,[ASCIZ /Shuffle time = /]
|
||
MOVE A,XSHF ;GET WORDS SHUFFLED
|
||
PUSHJ P,GETA
|
||
MOVN B,OLDSFL ;GET THE LAST SHUFFLE
|
||
MOVEM A,OLDSFL ;SAVE THIS SHUFFLE THERE
|
||
ADD A,B ;USE DIFFERENTIAL SHUFFLE
|
||
PUSHJ P,MEMPR ;PRINT AS TIME
|
||
MOVEI M,[ASCIZ /, Core Zeroing time = /]
|
||
MOVE A,XZCOR ;GET WORDS ZEROED
|
||
PUSHJ P,GETA
|
||
MOVN B,OLDZRO ;GET THE LAST ZEROED
|
||
MOVEM A,OLDZRO ;SAVE THIS ZEROED THERE
|
||
ADD A,B ;USE DIFFERENTIAL ZEROED
|
||
PUSHJ P,MEMPR ;PRINT AS TIME
|
||
PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ/Incr avg response time:/]
|
||
TRNN F,FR.END ;PRINT ON 2ND,3RD,... PASS
|
||
MOVEI M,[ASCIZ /Average response time: /]
|
||
PUSHJ P,MSG ;ANNOUNCE RESPONSE TIME
|
||
MOVE A,[%FTDEB] ;[EDIT 2] GET OPTIONS
|
||
CALL GETZ ;[EDIT 2] ZERO IF NOT THERE
|
||
TXNN A,F%RSP ;[EDIT 2] THE FANCY STUFF?
|
||
JRST PRSHU0 ;[EDIT 2] DEFINITELY NOT
|
||
MOVE A,MONVER ;IS MONITOR .GT 50500?
|
||
CAIL A,50500
|
||
JRST GENRSP ;YES, HANDLE FANCY RESPONSE TABLES
|
||
PRSHU0: TRNE F,FR.END ;FIRST PASS?
|
||
PUSHJ P,SPACE ;NO, PRINT EXTRA SPACE
|
||
MOVE A,XRNUM
|
||
PUSHJ P,GETA
|
||
EXCH A,OLDNUM ;SWAP OLD AND NEW TOTAL RESPONSES
|
||
SUB A,OLDNUM ;-(NUMBER OF RESPONSES)
|
||
MOVMM A,TEMP ;+NUMBER OF RESPONSES THIS INTERVAL
|
||
MOVE A,XSRSP
|
||
PUSHJ P,GETA
|
||
EXCH A,OLDRSP ;SWAP NEW AND OLD JIFFIES RESPONDING
|
||
SUB A,OLDRSP ;-(JIFFIES SPENT RESPNDING)
|
||
MOVMS A
|
||
MOVEM A,TEMP1
|
||
IDIV A,TEMP ;JIFFIES PER RESPONSE THIS INTERVAL
|
||
PUSHJ P,TIMPR ;PRINT TIME IN SECONDS
|
||
MOVEI M,[ASCIZ / sec (/]
|
||
PUSHJ P,MSG
|
||
MOVE A,TEMP1
|
||
PUSHJ P,TIMPR
|
||
MOVEI M,[ASCIZ^ sec/^]
|
||
MOVE N,TEMP
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ/ resp.)/]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,CRLF
|
||
JRST PRSHF1 ;GO DO JOB STUFF
|
||
;HERE TO PRINT RESPONSE MEASURES
|
||
|
||
GENRSP: SETZM CPU ;TO ALIGN HEADERS
|
||
MOVEI M,[ASCIZ@ Mean//St.Dev.@]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,STAB ;ALIGN NEXT HEADER
|
||
MOVEI M,[ASCIZ@Resp/Min @]
|
||
PUSHJ P,MSG
|
||
MOVE A,NCPCNF ;NUMBER OF CPUS TO REPORT
|
||
CAILE A,2 ;IF 1 OR 2, HEADERS WILL LINE UP
|
||
PUSHJ P,TAB ;FOR 3 OR 4, ADD ANOTHER TAB
|
||
MOVEI M,[ASCIZ/# of RESP
|
||
/]
|
||
PUSHJ P,MSG
|
||
HRREI A,-4 ;4 TYPES OF RESPONSE
|
||
SETZM D ;RELATIVE SUBTABLE POINTER
|
||
RSP: MOVEM A,RSPCNT ;SAVE RESPONSE TYPE COUNTER
|
||
MOVE M,RSPMSG+4(A) ;GET MSG FOR THIS RESPONSE TYPE
|
||
SETZM CPU ;SET FOR CPU0
|
||
|
||
;LOOP TO PRINT RESPONSE FOR EACH CPU
|
||
|
||
RSPLP1: MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRNO ;NO. OF RESPONSES SINCE STARTUP
|
||
PUSHJ P,GETRS0 ;GET FROM MONITOR REL TABLE
|
||
JRST RSP1C ;NOT PRESENT FOR THIS CPU
|
||
PUSHJ P,GETDIF ;GET INCREMENTAL VALUE
|
||
PUSH P,A ;SAVE TOTAL NO. OF RESPONSES
|
||
|
||
MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRSO ;SUM OF RESPONSE TIMES IN JIFFIES
|
||
PUSHJ P,GETRSP ;GET FROM MONITOR REL TABLE
|
||
JRST RSP1B ;NOT PRESENT FOR THIS CPU
|
||
PUSHJ P,GETDIF ;GET INCREMENTAL VALUE
|
||
MOVE N,A ;MOVE TO N FOR PNTSEC ROUTINE
|
||
MUL A,A ;GET SQUARE OF SUM OF RESPONSES
|
||
PUSH P,A ;SAVE FOR STANDARD DEV
|
||
PUSH P,B ;..
|
||
IDIV N,-2(P) ;AVERAGE RSP=SUM/NUMBER(IN JIFFIES)
|
||
PUSHJ P,PNTSEC ;PRINT IN SECONDS + TENTHS
|
||
POP P,N1 ;RESTORE SQUARE OF SUM
|
||
POP P,N ;..
|
||
MOVEI M,[ASCIZ @//@] ;SEPARATE MEAN FROM STANDARD DEVIATION
|
||
PUSHJ P,MSG
|
||
|
||
MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRLO ;GET LOW SUM OF SQUARES OF RESPONSES
|
||
PUSHJ P,GETRSP ;GET FROM MONITOR REL TABLE
|
||
JRST RSP1B ;NOT THERE
|
||
PUSHJ P,GETDIF ;GET INCREMENTAL VALUE
|
||
MOVE B,A ;POSITION FOR MULT.
|
||
MOVE A,RSPIDX ;GET INDEX TO DIFRSP TABLE
|
||
MOVEM A,RSPIX1 ;SAVE IT (NEED TO DO DOUBLE
|
||
;PRECISION SUBTRACT)
|
||
|
||
MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRHO ;ASK FOR HIGH SUM OF SQUARES
|
||
PUSHJ P,GETRSP ;FROM MONITOR
|
||
JRST RSP1B ;(STRANGE!)
|
||
PUSHJ P,GETDIF ;GET INCREMENTAL VALUE
|
||
SKIPL B ;IS DIFFERENTIAL LOW ORDER PART NEGATIVE?
|
||
JRST RSPL1A ;NO, OK
|
||
;YES, FUDGE DOUBLE PRECISION
|
||
PUSH P,N ;SAVE N
|
||
MOVE N,RSPIX1 ;GET INDEX TO DIFRSP TABLE
|
||
SETCAB B,DIFRSP(N) ;COMPLEMENT LOW ORDER HALF
|
||
MOVE N,RSPIDX ;GET INDEX TO HIGH ORDER HALF
|
||
SOS A,DIFRSP(N) ;BORROW 1
|
||
POP P,N ;RESTORE N
|
||
RSPL1A: MUL B,(P) ;MULT BY NUMBER
|
||
IMUL A,(P) ;BOTH HALVES
|
||
ADD A,B ;INCLUDE CROSS CARRY
|
||
MOVE B,C ;POSITION LOW HALF
|
||
SETCMM N ;COMPLEMENT SQUARE OF SUM
|
||
MOVNS N1 ;..
|
||
SKIPN N1 ;HANDLE CARRY
|
||
ADDI N,1 ;YES
|
||
TLZ N1,(1B0) ;GOT (N,N1)=-SQ.SUM
|
||
ADD B,N1 ;ADD TO N*SUM SQ.
|
||
ADD A,N ;..
|
||
TLZE B,(1B0) ;SEE IF CARRY
|
||
ADDI A,1 ;YES. GOT (A,B)=N*SUM SQ.-SQ.SUM
|
||
PUSHJ P,ISQRT ;COMPUTE N=SQRT((A,B))
|
||
IDIV N,(P) ;DIVIDE BY NUMBER; N=STD.DEV
|
||
PUSHJ P,PNTSEC ;PRINT AS SECONDS PLUS TENTHS
|
||
POP P,A ;REMOVE NO.
|
||
AOS CPU ;STEP TO NEXT CPU
|
||
JRST RSPLP1 ;GO SEE IF EXISTS
|
||
;HERE WHEN PRINTED MEAN AND STANDARD DEV FOR ALL CPUS
|
||
RSP1B: POP P,A ;REMOVE NUMBER
|
||
RSP1C: PUSHJ P,TAB ;AND A SECOND ONE
|
||
MOVE A,DIFTIM ;UP TIME IN JIFFIES
|
||
IDIV A,TCKSEC ;NO. OF SECONDS UP
|
||
IDIVI A,^D60 ;NO. OF MINUTES UP
|
||
MOVEM A,TEMP ;STORE FOR CMPCNA
|
||
SETZM CPU ;START WITH CPU0
|
||
RSPLP2: MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRNO ;NO. OF RESPONSES FOR THIS CPU
|
||
PUSHJ P,GETRS0 ;CALL GETRSP TO SET UP INDEX
|
||
JRST RSP2 ;NOT THERE
|
||
MOVE A,RSPIDX ;DIDN'T REALLY WANT NEW VALUE
|
||
MOVE A,DIFRSP(A) ;GET INCREMENTAL VALUE
|
||
PUSHJ P,CMPDFA ;PRINT NO. RESPONSES PER MIN
|
||
AOS CPU ;STEP TO NEXT CPU
|
||
JRST RSPLP2 ;TRY NEXT CPU
|
||
|
||
;HERE TO PRINT NUMBER OF RESPONSES FOR THIS TYPE
|
||
|
||
RSP2: PUSHJ P,TAB ;ALIGN OUTPUT
|
||
PUSHJ P,TAB ;...
|
||
SETZM CPU ;START WITH CPU0
|
||
RSPLP3: MOVE A,D ;GET TYPE INDEX
|
||
ADDI A,%CVRNO ;NO. OF RESPONSES FOR THIS CPU
|
||
PUSHJ P,GETRS0 ;CALL GETRSP TO SET UP INDEX
|
||
JRST RSP3 ;NOT THERE
|
||
MOVE A,RSPIDX ;DIDN'T REALLY WANT NEW VALUE
|
||
MOVE N,DIFRSP(A) ;GET INCREMENTAL VALUE
|
||
PUSHJ P,DECPRT ;PRINT # OF RESPONSES
|
||
AOS CPU ;FIND OUT IF ANY MORE CPU'S
|
||
JRST RSPLP3 ;TRY NEXT CPU
|
||
|
||
;HERE WHEN PRINTED FOR ALL CPUS
|
||
|
||
RSP3: PUSHJ P,CRLF
|
||
ADDI D,4 ;STEP TO NEXT RESPONSE TYPE
|
||
MOVE A,RSPCNT
|
||
AOJL A,RSP ;PROCESS NEXT TYPE (IF ANY)
|
||
PRSHF1: SETZB N,B ;COUNT JOBS AND LOGGED IN JOBS
|
||
SETZB C,D ;AND DETACHED JOBS
|
||
MOVE J,JOBN
|
||
CTJOB: SOJLE J,CTJOB1 ;COUNT, PRINT IF DONE
|
||
MOVE A,@.STS
|
||
TLNN A,JNA ;SEE IF JOB NUMBER ASSIGNED
|
||
JRST CTJOB ;NO--DON'T COUNT
|
||
AOS N ;YES
|
||
TLNE A,JLOG ;SEE IF LOGGED IN
|
||
AOS B ;YES
|
||
MOVE A,@.TTY
|
||
TLNN A,-1 ;SEE IF DETACHED
|
||
AOS C ;YES
|
||
JRST CTJOB ;LOOP
|
||
|
||
CTJOB1: MOVEM N,NUMJOB ;SAVE NUMBER OF ACTIVE JOBS
|
||
PUSHJ P,DECPRT ;PRINT NUMBER OF JOBS IN USE
|
||
MOVEI M,[ASCIZ / Jobs in use out of /]
|
||
MOVE N,JOBN ;PRINT NO. IN SYSTEM
|
||
SUBI N,1 ;ALLOW FOR NULL JOB
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ /. /]
|
||
SKIPE TNFRTY ;SEE IF 10/40N
|
||
JRST PRDET ;YES--DON'T COUNT LOGINS
|
||
MOVE N,B ;PRINT NO. LOGGED IN
|
||
MOVEM B,LOGDIN ;SAVE FOR KSEC COMPUTATION
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ / logged in/]
|
||
PUSHJ P,MSG
|
||
MOVE A,XLGMAX ;GET LOGMAX
|
||
PUSHJ P,GETZ
|
||
JUMPE A,CTJOB2 ;NO LOGMAX
|
||
MOVE N,A ;COPY LOGMAX
|
||
AOS A ;SEE IF LOGMAX = ALL JOBS
|
||
CAMN A,JOBN ;IF SO, DON'T BOTHER PRINTING
|
||
JRST CTJOB2
|
||
MOVEI M,[ASCIZ/ (LOGMAX of /]
|
||
PUSHJ P,MSGDEC ;OUTPUT LOGMAX
|
||
MOVEI CH,")" ;CLOSE MESSAGE
|
||
PUSHJ P,TYO ;OUTPUT THAT
|
||
CTJOB2: MOVEI M,[ASCIZ/, /] ;PRETTY UP THE OUTPUT
|
||
PRDET: MOVE N,C ;PRINT NO. DETACHED
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ / detached./]
|
||
PUSHJ P,MSG
|
||
SUBTTL PRINT JOB STATUS
|
||
PRJBST: PUSHJ P,CRLF
|
||
CAIE WD,L.EJS ;LIST ALL BUT JOB STATUS?
|
||
CAIN WD,L.GSS ;ONLY GENERAL SYSTEM STATISTICS?
|
||
TLOA WD,SIGN ;YES
|
||
JRST SSTATS ;NO
|
||
JRST SYS4A
|
||
SSTATS: MOVEI M,[ASCIZ /
|
||
Job Who Line# What Size(K) State /]
|
||
SKIPE CPKI10 ;IS IT A KA10?
|
||
MOVEI M,[ASCIZ /
|
||
Job Who Line# What Size(P) State /]
|
||
SKIPE TNFRTY ;SEE IF 10/40N
|
||
MOVEI M,[ASCIZ /
|
||
Job Line# What Size(K) State /]
|
||
TRNE F,FR.USR ;LIST USER NAMES?
|
||
MOVEI M,[ASCIZ /
|
||
Job Who User Line# What Size(P) State /]
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ/% of CPU KCsecs
|
||
|
||
/]
|
||
TRNN F,FR.END ;FIRST PASS?
|
||
MOVEI M,[ASCIZ/Run Time
|
||
|
||
/]
|
||
PUSHJ P,MSG ;FINISH THE HEADING EITHER WAY
|
||
SYS4A: MOVN J,JOBN
|
||
HRLZS J
|
||
SETZM TOTKCT ;CLEAR TOTAL KILO=CORE SECS
|
||
SETZM CORUSE ;CLEAR TOTAL VIRT. CORE USED
|
||
SETZM DSKUSE ;CLEAR TOTAL SWAPPING SPACE USED
|
||
SETZM ACTUSE ;CLEAR COUNT OF ACTIVE SWAPPING SPACE USED
|
||
SETZM LOWUSE ;CLEAR COUNT OF LOW SEGMENT SIZES
|
||
SETZM PTYS ;CLEAR COUNT OF PTY JOBS
|
||
SETZM SEGFLG ;CLEAR SEGMENT FLAG
|
||
TLZ F,FL.NUM!FL.NST!FL.EXM!FL.AMP
|
||
SYSL1: SKIPE N,ONEJOB ;SEE IF ONE JOB REQUESTED
|
||
CAIN N,(J) ;YES--SEE IF THIS IS IT
|
||
SKIPA JS,@.STS ;A WINNER
|
||
JRST DUNJOB ;A LOSER
|
||
TLNN JS,JNA
|
||
JRST [SETZM JOBTIM(J) ;FOR NEXT TIME
|
||
SETZM OLDPPN(J) ;FOR NEXT TIME AROUND
|
||
SETZM JOBKCT(J) ;START FRESH
|
||
JRST DUNJOB]
|
||
TLO F,FL.DTJ
|
||
MOVE A,@.TTY ;GET TTY NAME
|
||
TLNN A,-1 ;TEST FOR DETACHED
|
||
TLOA A,(SIXBIT /DET/) ;YES
|
||
TLZA F,FL.DTJ ;YES. NOT DETACHED.
|
||
TLNE F,FL.GOD ;SEE IF GOD
|
||
SKIPA ;YES (OR NOT DETACHED)
|
||
TRZ A,-1 ;NOT GOD AND DETACHED--CLEAR TTY NUMBER
|
||
MOVEM A,JOBTTY
|
||
SKIPE TNFRTY ;SEE IF 10/40N
|
||
JRST SYSL1D ;YES--SKIP PRJ-PRG
|
||
MOVE A,@.PPN ;FETCH PPN OF JOB
|
||
TLNN F,FL.DTJ
|
||
TLNN JS,JLOG
|
||
PUSHJ P,NOWHO ;PRINT *'S OR PRJPRG DEPENDING UPON GODLINESS
|
||
SKIPLE N,ONEPPN ;SEE IF PPN CROSS SECTION
|
||
CAMN A,N ;YES--SEE IF MATCHES
|
||
JRST SYSL1D ;A WINNER
|
||
TLNE N,-1 ;WILD CARD PROJECT NUMBER?
|
||
JRST SYSL0D ;NO
|
||
CAIN N,(A) ;PROGRAMMER NUMBERS MATCH?
|
||
JRST SYSL1D ;A WINNER
|
||
SYSL0D: TRNE N,-1 ;WILD CARD PROGRAMMER NUMBER?
|
||
JRST DUNJOB ;A LOSER
|
||
TRZ A,-1 ;ANY PROGRAMMER NUMBER WINS
|
||
CAME A,N ;SEE IF IT MATCHES
|
||
JRST DUNJOB ;A LOSER
|
||
MOVE A,@.PPN ;RESTORE PPN
|
||
SYSL1D: SKIPGE N,ONETTY ;SEE IF TTY CROSS SECTION
|
||
JRST TTYOK ;NO--MUST BE OK
|
||
CAMN N,@.TTYN ;YES--SEE IF CORRECT LINE NUMBER
|
||
CAMN A,[-1] ;SEE IF HIDDEN
|
||
JRST DUNJOB ;A LOSER
|
||
TTYOK: HRRZ N,J
|
||
TRO F,FR.OVR ;TENTATIVELY SET COLUMN OVERFLOW
|
||
CAME A,[-1] ;CLEAR IF HIDDEN
|
||
;DELETE 2 LINES
|
||
TLNE A,7B20 ;SEE IF WIDE PROJECT
|
||
JRST TTYOK1 ;YES--DON'T CLEAR
|
||
TRNN A,7B20 ;AND WIDE PROGRAMMER
|
||
TRZ F,FR.OVR ;NO--CLEAR
|
||
TTYOK1: PUSHJ P,DECP2X ;PRINT AS TWO DIGITS OR SPACE AND ONE
|
||
SKIPE TNFRTY ;SEE IF 10/40
|
||
JRST NOPPN ;10/40 NO PPN'S
|
||
SKIPN N,ONEPPN ;SINGLE USER?
|
||
JRST PPNOK ;NO, DISPLAY PPN
|
||
JUMPL N,PPNOK
|
||
TRNE N,-1 ;WILD CARD PROGRAMMER NUMBER?
|
||
TLNN N,-1 ;OR WILD CARD PROJECT NUMBER?
|
||
JRST PPNOK ;YES, PRINT PPN SINCE MAYBE MORE THAN ONE
|
||
NOPPN: TRZA F,FR.OVR ;YES--SKIP PPN
|
||
PPNOK: PUSHJ P,PNTPPN ;PRINT PRJ-PRG #
|
||
TRNE F,FR.OVR ;SEE IF OVERFLOW
|
||
PUSHJ P,SPACE ;YES--JUST SPACE TO CATCH UP
|
||
TRZN F,FR.OVR ;NO--CLEAR AND
|
||
PUSHJ P,TAB ;TAB OVER
|
||
TRNE F,FR.USR ;WANT USER NAMES?
|
||
PUSHJ P,USRNAM ;YES, PRINT THEM
|
||
SKIPN A,JOBTTY
|
||
MOVE A,@.TTY
|
||
HLRZ CH,A ;GET PREFIX OF DEVICE
|
||
CAIN CH,'TTY' ;SEE IF TTY
|
||
SKIPE ONEJOB ;YES--SEE IF ALL JOBS
|
||
JRST .+2 ;NO--GIVE FULL NAME
|
||
HRLZ A,A ;YES--JUST OUTPUT NUMBER
|
||
CAIE CH,'PTY' ;SEE IF PTY
|
||
JRST SYSLTT ;NO--OUTPUT IN SIXBIT
|
||
AOS PTYS ;COUNT THE PTY JOB
|
||
MOVEI CH,"P" ;YES--OUTPUT A P
|
||
PUSHJ P,TYO ;..
|
||
HRRZ N,A ;FOLLOWED BY
|
||
PUSHJ P,OPRNT ;THE PTY DRIVING THIS PTY
|
||
HRRZ N,J ;GET JOB #
|
||
SKIPE DSKFLG ;DISK MODE?
|
||
PUSHJ P,CTLJB ;YES,SIMULATE CTLJOB UUO
|
||
CTLJOB N, ;FIND CONTROLLING JOB
|
||
JRST SYSLTY ;N.G.
|
||
JUMPLE N,SYSLTY ;N.G.
|
||
MOVEI CH,"J" ;PRINT A J
|
||
PUSHJ P,TYO
|
||
PUSHJ P,DECPRT ;PRINT CONTROLLING JOB #
|
||
SYSLTY: PUSHJ P,TAB
|
||
JRST SYSLTU ;DON'T DO THE SIXBIT THING
|
||
SYSLTT: TDNN A,[-77B5-1] ;SEE IF JUST ONE CHARACTER
|
||
PUSHJ P,SPACE ;YES--SPACE IN ONE
|
||
PUSHJ P,SIXTAB ;PRINT SIXBIT MSG FOLLOWED BY TAB
|
||
|
||
SYSLTU: MOVE A,@.PRG
|
||
PUSHJ P,SIXTAB ;PRINT SIXBIT MSG FOLLOWED BY TAB
|
||
TLZ F,FL.HSG ;FLAG LOW SEGMENT
|
||
PUSHJ P,SEGSZ ;COMPUTE SEGMENT SIZE
|
||
PUSH P,J ;SAVE JOB NO
|
||
PUSH P,N ;SAVE LOW SEG VALUE
|
||
SKIPG J,@.SGN ;GET SEGMENT # OF HISEG
|
||
JRST SYSLT0 ;SPY OR NO HIGH SEGMENT
|
||
TLO F,FL.HSG ;FLAG THAT HISEG IS DESIRED
|
||
PUSHJ P,SEGSZ ;GET HISEG SIZE
|
||
TRNE F,FR.VMF ;IS THIS A VM SYSTEM?
|
||
TLNE J,SHRSEG ;AND IS SEGMENT SHARABLE?
|
||
JRST SYSLT1 ;NO CLASSIC
|
||
SUBM N,(P) ;UPDATE LOW SEGSIZE
|
||
MOVNS (P) ;MAKE IT POSITIVE
|
||
SYSLT1: HRLM N,(P) ;STORE HISEG VALUE ON STACK
|
||
SYSLT0: HRRZ N,(P) ;GET LOW SEGMENT SIZE
|
||
EXCH J,-1(P) ;GET OLD J VALUE
|
||
HLRZ A,@.PDB ;FETCH # OF PER PROCESS PAGES
|
||
ANDI A,77 ;JUST # OF PAGES
|
||
ADD N,A ;ADD THEM TO LOW SEG SIZE
|
||
MOVE A,N ;SAVE FOR LATER TEST
|
||
ADDM N,CORUSE
|
||
PUSHJ P,SEGLOK ;SEE IF SEG LOCKED
|
||
PUSHJ P,INACTC ;SKIP IF JOB IS INACTIVE
|
||
ADDM N,ACTUSE ;NO, ACTIVE, COUNT ACTIVE VIRTUAL CORE
|
||
ADDM N,LOWUSE ;COUNT TOTAL LOW SEG SIZE
|
||
PUSHJ P,DECPRT
|
||
EXCH J,-1(P) ;GET JBTSGN ENTRY
|
||
JUMPLE J,SYS9 ;IN CASE SPYING
|
||
MOVEI CH,"+" ;OUTPUT A PLUS
|
||
PUSHJ P,TYO
|
||
HLRZ N,(P) ;GET HISEG VALUE
|
||
PUSHJ P,DECPRT ;PRINT HI-SEG SIZE
|
||
SYS9: JUMPGE J,SYS8 ;GET VALUABLES BACK
|
||
MOVE A,[SIXBIT /+spy/] ;SPYING--PRINT INDICATION
|
||
PUSHJ P,SIXBP
|
||
SYS8: POP P,J ;GET TEMPORARY OF STACK
|
||
POP P,J ;RESTORE JOB NUMBER
|
||
|
||
CAIN WD,L.SSO ;SHORT STATUS ONLY?
|
||
JRST RET2 ;YES-DON'T PRINT STATE OR RUN TIME
|
||
PUSHJ P,TAB
|
||
MOVSI A,'^W ' ;PREPARE FOR COMMAND WAIT
|
||
TLNE JS,400000 ;SEE IF COMMAND TYPED
|
||
MOVSI A,'CW ' ;.
|
||
TLNE JS,CMWB ;..
|
||
JRST TSTATE ;YES
|
||
MOVSI A,'OW ' ;SET IN CASE OPER WAIT
|
||
TRNE JS,JDCON ;SEE IF DEVICE HOLDING IT UP
|
||
JRST TSTATE ;YES--SEND IT
|
||
MOVSI A,'^D ' ;SET IN CASE DAEMON WAIT
|
||
TRNE JS,JDC ;SEE IF DAEMON CALL FROM COMMAND
|
||
JRST TSTATE ;YES--SEND IT
|
||
MOVSI A,(SIXBIT /^C/)
|
||
JUMPGE JS,TSTATE
|
||
LDB B,[POINT 5,JS,14]
|
||
IDIVI B,3
|
||
IMULI C,^D12
|
||
MOVE A,QTAB(B)
|
||
LSH A,(C)
|
||
AND A,[7777B11]
|
||
MOVSI B,(SIXBIT /SL/) ;SEE IF SLEEP WAIT STATE CODE
|
||
CAME B,A ;IS IT?
|
||
JRST SYS10 ;NO
|
||
TRNN JS,CLKR ;DOES THE JOB HAVE A CLOCK REQUEST IN?
|
||
MOVSI A,(SIXBIT /HB/) ;NO, THE JOB IS HIBERNATING
|
||
SYS10: MOVSI B,(SIXBIT /TI/) ;SEE IF TTY I/O WAIT STATE CODE
|
||
CAMN B,A ;IS IT?
|
||
SKIPN B,@.DVIOS ;AND IS IOS NON-ZERO
|
||
JRST TSTATE ;NO, TI WAIT
|
||
TLNN F,FL.SCN ;NEW SCANNER SERVICE?
|
||
MOVNS B ;NO, REVERSE THE SENSE OF THE BIT
|
||
JUMPGE B,TSTATE ;JUMP IF NOT OUTPUT
|
||
MOVSI A,(SIXBIT /TO/) ;TTY OUTPUT WAIT
|
||
TSTATE: PUSHJ P,LOPSWP ;PRINT STATE AND "SW"/"SWF" IF SWAPPED/& FRAGMENTED
|
||
MOVE C,@.KCT
|
||
TRNN F,FR.END
|
||
MOVEM C,JOBKCT(J) ;STORE ON FIRST PASS ONLY
|
||
MOVE A,@.TIM
|
||
;Deleted MOVE B,JOBTIM(J) ;PICK UP OLD RUN TIME TICKS
|
||
MOVE N,JOBTIM(J) ;PICK UP OLD RUN TIME TICKS
|
||
MOVEM A,JOBTIM(J) ;SAVE THIS PASS
|
||
MOVE B,[%CNSUP] ;GET SYSTEM UPTIME
|
||
CALL GETTB ;DO THE GETTAB
|
||
JFCL ;?FAILURE?
|
||
MOVE CH,B ;SAVE UPTIME AWAY HERE
|
||
SUB CH,SYSUPT(J) ;THIS IS THE UPTIME SINCE LAST "REENTER"
|
||
MOVEM B,SYSUPT(J) ;SAVE NEW UPTIME FOR THE NEXT TIME
|
||
MOVE B,N ;GET JOBTIM BACK HERE
|
||
TRNN F,FR.END ;FIRST PASS?
|
||
JRST PRUNT ;YES
|
||
MOVE M,@.PPN ;PICK UP PPN
|
||
CAMN M,OLDPPN(J) ;NEW PPN?
|
||
CAMGE A,B ;NEW RUN TIME .LT. LAST?
|
||
TROA F,FR.CHG!FR.LGN ;YES. MUST HAVE LOGGED IN
|
||
SUB A,B ;USE DIFFERENTIAL
|
||
JUMPE A,[MOVEI M,[ASCIZ/ /]
|
||
PUSHJ P,MSG ;FAKE IT
|
||
JRST CHKKCT]
|
||
;Deleted MOVE CH,DIFTIM ;PICK UP INCREMENTAL UPTIME
|
||
MOVE N,A ;SET UP CALLING SEQUENCE FOR
|
||
PUSHJ P,PCNT2 ;PRINT PERCENTAGE OF CPU
|
||
CHKKCT: MOVE A,@.KCT ;PICK UP NEW KC TICKS
|
||
MOVE B,JOBKCT(J) ;OLD KC TICKS
|
||
MOVEM A,JOBKCT(J) ;SAVE NEW VALUE
|
||
TRNN F,FR.CHG ;USE NEW AMOUNT IF CHANGE
|
||
SUB A,B
|
||
ADDM A,TOTKCT ;FORM TOTAL THIS PASS
|
||
JUMPE A,[MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,MSG
|
||
JRST DOFLGS]
|
||
MOVEI M,[ASCIZ/ /]
|
||
PUSHJ P,MSG
|
||
MOVE N,A
|
||
IDIV N,TCKSEC
|
||
PUSHJ P,DECP3X ;PRINT KILO-CORE-SECS
|
||
JRST DOFLGS
|
||
PRUNT: PUSHJ P,TCKTIB ;PRINT RUN TIME IS SECS
|
||
DOFLGS: MOVE C,[POINT 6,A] ;SET-UP POINTER FOR FLAGS
|
||
MOVE A,@.RTD ;SEE IF IN A HIGH PRIORITY QUEUE
|
||
LDB N,HPQPNT ;GET HPQ NUMBER
|
||
JUMPE N,SYSLK0 ;ZERO MEANS TS Q'S
|
||
PUSHJ P,SPACE
|
||
PUSHJ P,DECPR2 ;PRINT Q NUMBER
|
||
TRO F,FR.HPQ ;REMEMBER IT FOR THE FOOTNOTE
|
||
SYSLK0: MOVEI A,0 ;CLEAR FLAGS
|
||
MOVE B,@.STS ;GET JOB STATUS
|
||
TLNN B,NSWP!NSHF ;SEE IF LOCKED IN CORE
|
||
JRST SYSLKX ;NO
|
||
TLNE B,NSHF ;YES--SEE IF CAN BE SHUFFLED
|
||
JRST SYSLK1 ;NO
|
||
MOVEI B,(SIXBIT / !/) ;YES
|
||
TLO F,FL.EXM ;FLAG FOR FOOTNOTE
|
||
JRST SYSLK2
|
||
SYSLK1: MOVEI B,(SIXBIT / &/) ;NOTE LOCKED
|
||
TLO F,FL.AMP ;FLAG FOR FOOTNOTE
|
||
SYSLK2: IDPB B,C ;PUT FLAG AWAY
|
||
SYSLKX: MOVS B,@.STS ;GET STATUS WORD, SWAPPED
|
||
HRRI B,'$' ;AND FLAG FOR EXECUTE ONLY
|
||
TLNE B,JS.XO ;IS THIS JOB EXECUTE ONLY?
|
||
IDPB B,C ;YES. ADD $ TO FLAGS
|
||
TLNE B,JS.XO
|
||
TRO F,FR.XOM ;AND FLAG WANT EXECUTE ONLY MESSAGE
|
||
SKIPG B,@.SGN ;DOES JOB HAVE A HISEG?
|
||
JRST SYSL1E ;NO
|
||
TLO F,FL.HGH ;SET HISEGS IN USE FLAG
|
||
PUSH P,J ;SAVE J
|
||
MOVE J,B
|
||
PUSH P,A ;SAVE A
|
||
HRRZ A,B
|
||
SUB A,JOBN
|
||
SKIPL A ;RANGE CHECK
|
||
CAML A,SEGN ;..
|
||
MOVEI A,0 ;BAD. PROTECT ONESSELF
|
||
AOS @.SEGCT ;INCREMENT HI SEG USE COUNT
|
||
POP P,A ;RESTORE A
|
||
SKIPE B,@.PRG ;AN OBSOLETED SEGMENT?
|
||
JRST SYSL1A ;NO-CHECK IF IT'S A NON CUSP HISEG
|
||
MOVE B,@.STS
|
||
TLNN B,SHRSEG ;IS IT SHARABLE?
|
||
JRST SYSL1B ;NO-MUST BE PRIVATE
|
||
MOVEI B,(SIXBIT / @/)
|
||
IDPB B,C ;PUT FLAG AWAY
|
||
TLO F,FL.NST ;YES-SET @ FLAG
|
||
JRST SYSL1B ;PRINT @
|
||
SYSL1A: SKIPN B,SYSTAP ;SEE IF SYSTEM TAPE IS NOT DISK
|
||
JRST SYSL1M ;IS DISK--CHECK PPN
|
||
CAME B,@.PPN ;CHECK LEV.C DEVICE NAME
|
||
CAMN B,@.DEV ;OR LEVEL D DEVICE NAME
|
||
JRST SYSL1B ;IS SYS
|
||
JRST SYSL1N ;IS NOT SYS
|
||
SYSL1M: MOVE B,@.PPN ;GET HISEG OWNER
|
||
CAMN B,SYSPPN ;IS IT A CUSP HISEG?
|
||
JRST SYSL1B ;YES-DON'T PRINT ANYTHING
|
||
SYSL1N: MOVEI B,(SIXBIT / #/) ;PREPARE TO FLAG JOB WITH #
|
||
IDPB B,C ;PUT FLAG AWAY
|
||
TLO F,FL.NUM ;SET # FLAG
|
||
SYSL1B: POP P,J ;RESTORE J & A
|
||
SYSL1E: MOVEI B,(SIXBIT / +/)
|
||
TRZE F,FR.CHG ;NEW LOGIN?
|
||
IDPB B,C ;FLAG ON OUTPUT
|
||
JUMPL C,RET2 ;IF NO FLAGS, JUMP
|
||
PUSHJ P,SPACE ;PRINT A SPACE
|
||
PUSHJ P,SIXBP ;PRINT @ OR #
|
||
RET2: PUSHJ P,CRLF
|
||
|
||
DUNJOB: MOVE A,@.PPN ;IN ANY CASE, SAVE THIS PPN
|
||
MOVEM A,OLDPPN(J)
|
||
PUSHJ P,NOWHO
|
||
MOVEM A,@.PPN ;IN CASE OF **,** WIPEOUT
|
||
AOBJN J,SYSL1
|
||
MOVEI M,[ASCIZ/Total KCS used = /]
|
||
MOVE N,TOTKCT
|
||
IDIV N,TCKSEC
|
||
MOVEM N,TEMP
|
||
TRNE F,FR.END ;2ND OR 3RD PASS?
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ/ Average KCS = /]
|
||
MOVE N,TEMP
|
||
IDIV N,LOGDIN
|
||
TRNE F,FR.END
|
||
PUSHJ P,MSGDEC ;ANNOUNCE AVERAGE KCS OVER INTERVAL
|
||
TRNE F,FR.END
|
||
PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ /@ means superseded Hi-Seg /]
|
||
TLNE F,FL.NST
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /# means non-system Hi-Seg/]
|
||
TLNE F,FL.NUM
|
||
PUSHJ P,MSG
|
||
TLZE F,FL.NST!FL.NUM
|
||
PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ /& means locked in core /]
|
||
TLNE F,FL.AMP
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /! means locked in core--can be shuffled/]
|
||
TLNE F,FL.EXM
|
||
PUSHJ P,MSG
|
||
TLZE F,FL.AMP!FL.EXM
|
||
PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ /$ means Execute Only /]
|
||
TRNE F,FR.XOM ;WAS THERE AN EXECUTE ONLY JOB?
|
||
PUSHJ P,MSG ;YES. EXPLAIN FLAG
|
||
|
||
MOVEI M,[ASCIZ /n means job runs in HPQ n/]
|
||
TRNE F,FR.HPQ ;SEEN ANY JOBS IN HPQ'S?
|
||
PUSHJ P,MSG ;YES, EXPLAIN NUMBER
|
||
TRZE F,FR.XOM!FR.HPQ
|
||
PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ &+ means LOGIN during interval&]
|
||
TRNE F,FR.LGN ;ANY NEW LOGINS?
|
||
PUSHJ P,MSG ;YES, EXPLAIN +
|
||
TRZE F,FR.LGN
|
||
PUSHJ P,CRLF
|
||
SKIPN PTYS ;SEE IF ANY PTY JOBS
|
||
JRST DONJOB ;NO--END OF FOOTNOTES
|
||
MOVEI M,[ASCIZ /Jnn is the controlling job, Pnn corresponds to TTY/]
|
||
PUSHJ P,MSG ;YES--OUTPUT NOTE
|
||
MOVE N,PTYOFS ;GET OFFSET
|
||
PUSHJ P,OPRNT ;OUTPUT IT
|
||
MOVEI M,[ASCIZ /+nn
|
||
/]
|
||
PUSHJ P,MSG ;(PTY0 DRIVES OFFSET TTY)
|
||
DONJOB: CAIN WD,L.SSO ;SHORT STATUS ONLY?
|
||
JRST FINIS ;YES-GO SEE IF WE SHOULD EXIT. OR INTERPRET MORE CHS.
|
||
TLZ WD,SIGN ;CLEAR SIGN BIT IF IT WAS ON SO PRINTING MAY RESUME
|
||
SKIPL ONETTY ;SEE IF SINGLE TTY
|
||
JRST DEVQ ;YES--PROCEED TO DEVICE STATUS
|
||
SKIPN ONEJOB ;SEE IF SINGLE JOB
|
||
SKIPE ONEPPN ;OR SINGLE USER
|
||
JRST DEVQ ;YES--SKIP SEGMENT JUNK
|
||
TLNN F,FL.HGH
|
||
JRST DORMNT
|
||
SUBTTL PRINT HIGH-SEGMENT STATUS
|
||
CAIN WD,L.GSS ;ONLY GENERAL SYSTEM STATISTICS?
|
||
TLO WD,SIGN ;YES, SUPPRESS PRINTING
|
||
LDB D,DSKLEV
|
||
SETOM SEGFLG ;SEG SEGMENT FLAG
|
||
MOVEI M,[ASCIZ /
|
||
High Segments:
|
||
Program /]
|
||
PUSHJ P,MSG
|
||
JUMPE D,.+3
|
||
MOVEI M,[ASCIZ /Device /]
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ /Owner High(K) Users
|
||
|
||
/]
|
||
SKIPE CPKI10
|
||
MOVEI M,[ASCIZ /Owner High(P) Users
|
||
|
||
/]
|
||
PUSHJ P,MSG
|
||
MOVE J,SEGPTR
|
||
SETZM CORSAV ;CLEAR COUNTER FOR VIRT. CORE SAVED
|
||
SETZM LOKCHK ;CLEAR LOKSEG CHECKED FLAG
|
||
HIGH00: SKIPL JS,@.STS
|
||
JRST DUNHGH
|
||
SKIPN A,@.PRG
|
||
JRST [MOVE A,[SIXBIT /(priv)/]
|
||
TLNE JS,SHRSEG
|
||
MOVE A,[SIXBIT /(obs)/]
|
||
JRST .+1]
|
||
PUSHJ P,SIXBP ;PRINT SIXBIT MSG
|
||
JUMPE D,.+3
|
||
MOVE A,@.DEV
|
||
PUSHJ P,TABSIX
|
||
SKIPN A,SYSTAP ;SEE IF SYSTEM TAPE IS NOT A DISK
|
||
JRST HIGH04 ;DISK--CHECK PPN
|
||
CAME A,@.PPN ;COMPARE WITH LEV.C DEVICE
|
||
CAMN A,@.DEV ;COMPARE WITH LEV.D DEVICE
|
||
JRST [MOVSI A,(SIXBIT /SYS/)
|
||
JRST HIGH2A]
|
||
SKIPN A,@.PPN ;NOT SYS, GET DEVICE NAME
|
||
MOVE A,@.DEV ;FROM TABLES
|
||
JRST HIGH2A ;AND GO PRINT IT
|
||
HIGH04: MOVE A,@.PPN
|
||
JUMPE A,.+3 ;IF ZERO, LEAVE IT THAT WAY
|
||
TLNN A,-1 ;PPN OR POINTER?
|
||
PUSHJ P,PEEKA ;POINTER, GET PPN
|
||
CAMN A,SYSPPN ;CUSP HISEG?
|
||
JRST HIGH2A ;YES-DON'T LOOK FOR DETACHED OWNER
|
||
JUMPN A,HIGH05
|
||
PUSHJ P,SEGSCN ;LOOK FOR JOB WITH THIS SEGMENT NO.
|
||
JRST HIGH2C
|
||
SKIPGE B ;PRIVATE HISEG?
|
||
JUMPE A,[MOVEI M,[ASCIZ / Job /] ;YES-COMPUTE JOB NO.
|
||
SUB B,.SGN
|
||
HRRZ N,B
|
||
PUSHJ P,MSGDEC ;AND PRINT IT
|
||
JRST HIGH2C]
|
||
IFE STANSW,<
|
||
HIGH05: JUMPLE A,HIGH2A ;OWNER MUST BE A DEVICE
|
||
PUSH P,J ;SAVE CURRENT SEGMENT NO.
|
||
PUSHJ P,SEGSCN ;FIND 1ST. JOB USING THIS HISEG
|
||
JRST NOSEG ;NONE LEFT
|
||
HRRZ J,B
|
||
SUB J,.SGN ;GET JOB NO.
|
||
HLRZ C,@.TTY ;JOB DETACHED?
|
||
CAIN C,0
|
||
CAME A,@.PPN ;YES-IS THIS JOB HISEG OWNER?
|
||
SKIPA J,(P) ;NO-GET HISEG NO. AGAIN
|
||
JRST GO.ON ;YES-PRINT *'S UNLESS GOD
|
||
AOBJN P,.+1 ;PRETEND WE DID A "PUSHJ"
|
||
SOS (P) ;DECREMENT PC
|
||
AOBJN B,HIGH06 ;RE-ENTER SUBROUTINE (QUEL HACQUE!)
|
||
POP P,J ;POP OFF PC IF NO MORE JOBS TO CHECK
|
||
NOSEG: POP P,J ;RESTORE SEGMENT NO.
|
||
JRST HIGH2A ;PRINT OWNER
|
||
GO.ON: POP P,J ;RESTORE SEGMENT NO.
|
||
PUSHJ P,NOWHO ;PRINT *'S OR PRJPRG DEPENDING UPON GODLINESS
|
||
>
|
||
JRST HIGH2A
|
||
|
||
HIGH2C: SETZ A, ;PRINT BLANKS
|
||
HIGH2A: PUSHJ P,HIGH01
|
||
DUNHGH: AOBJN J,HIGH00 ;ARE THERE ANY MORE HI SEGS.?
|
||
JRST DORMNT
|
||
|
||
HIGH01: PUSHJ P,PNTPPN ;PRINT AS P,PN PAIR
|
||
PUSHJ P,TAB
|
||
TLO F,FL.HSG ;FLAG HI-SEG
|
||
PUSHJ P,SEGSZ ;COMPUTE SEGMENT SIZE
|
||
MOVE B,N ;SAVE FOR LATER TEST
|
||
TLNE F,FL.DOR
|
||
JRST HIGH4A
|
||
ADDM N,CORUSE
|
||
PUSHJ P,SEGSCN ;FIND FIRST USER OF THIS HIGH SEG
|
||
JRST NOALOW ;NO USERS
|
||
JRST FSALOW ;SEE IF ACTIVE
|
||
NXALOW: ADD J,.SGN ;RESTORE PTR TO SEGMENT TABLE
|
||
EXCH J,B ;RESTORE ORIGINAL J AND B
|
||
PUSHJ P,HIGH6A ;FIND NEXT USER OF THIS HIGH SEG
|
||
JRST NOALOW ;NO MORE USERS
|
||
FSALOW: SKIPN LOKCHK ;THIS SEG CHECKED FOR LOCKED?
|
||
PUSHJ P,SEGLOK ;NO,SEE IF SEG LOCKED
|
||
EXCH J,B ;J=PTR TO USER IN SEGMENT TABLE
|
||
SUB J,.SGN ;J=JOB NUMBER OF USER
|
||
PUSHJ P,INACTC ;SKIP IF INACTIVE
|
||
SKIPA J,B ;ACTIVE, COUNT THIS HIGH SEGMENT
|
||
JRST NXALOW ;INACTIVE, CHECK OTHER USERS
|
||
ADDM N,ACTUSE ;COUNT VIRTUAL CORE FOR ACTIVE SEGMENTS
|
||
NOALOW: SETZM LOKCHK ;RESET FLAG FOR NEXT SEGMENT
|
||
PUSH P,N
|
||
HIGH4A: PUSHJ P,DECP2X
|
||
MOVSI A,(SIXBIT //)
|
||
PUSHJ P,HIPSWP
|
||
TLNE F,FL.DOR
|
||
JRST CRLF
|
||
MOVEI A,(J)
|
||
SUB A,JOBN
|
||
SOS N,@.SEGCT
|
||
IMULM N,(P)
|
||
AOS N,@.SEGCT
|
||
POP P,A
|
||
SKIPLE A ;DON'T ADD TO CORSAV IF 0 OR -VE
|
||
ADDM A,CORSAV
|
||
PUSHJ P,DECPRT
|
||
JRST CRLF
|
||
SUBTTL PRINT DORMANT-SEGMENT STATUS
|
||
DORMNT: TLZN WD,SIGN ;SIGN ON? YES IF GENERAL SYSTEM STATISTICS
|
||
TLNN F,FL.LPT!FL.DSK ;SEE IF FOR OPERATOR
|
||
JRST ENDDOR ;NO--SKIP
|
||
DODORM: LDB D,DSKLEV
|
||
SETOM SEGFLG ;SET SEGMENT FLAG
|
||
MOVEI M,[ASCIZ /
|
||
Dormant Segments:
|
||
Program Owner High(K)
|
||
|
||
/]
|
||
JUMPE D,.+2
|
||
MOVEI M,[ASCIZ /
|
||
Dormant Segments:
|
||
Program Device Owner High(K)
|
||
|
||
/]
|
||
SKIPE CPKI10 ;KI10 TEST
|
||
MOVEI M,[ASCIZ /
|
||
Dormant Segments:
|
||
Program Device Owner High(P)
|
||
|
||
/]
|
||
SETO CH,
|
||
MOVE J,SEGPTR
|
||
DOR1: SKIPGE JS,@.STS ;SEGMENT DORMANT?
|
||
JRST DUNDOR ;NO
|
||
MOVEI N,OUTMSK
|
||
MOVE A,MONVER ;MONITOR VERSION NUMBER
|
||
CAILE A,70207 ;7.03?
|
||
MOVEI N,777 ;YES, DATA IS IN A DIFFERENT PLACE
|
||
SKIPN @.ADR ;SEGMENT IN CORE?
|
||
TDNE N,@.SWP ;NO - ON DISK?
|
||
JRST DOR2 ;YES - GO PRINT IT
|
||
JRST DUNDOR ;NOT IN USE
|
||
|
||
DOR2: JUMPE CH,DORMN
|
||
PUSHJ P,MSG
|
||
TLO F,FL.DOR
|
||
DORMN: MOVE A,@.PRG
|
||
PUSHJ P,SIXBP
|
||
SKIPN A,SYSTAP ;SEE IF "SYS:" NOT "DSK:"
|
||
JRST DORMN2 ;DISK
|
||
CAME A,@.PPN ;CHECK LEV.C DEVICE
|
||
CAMN A,@.DEV ;CHECK LEV.D DEVICE
|
||
JRST [MOVSI A,(SIXBIT /SYS/)
|
||
JRST DORM2A]
|
||
SKIPN A,@.PPN
|
||
MOVE A,@.DEV
|
||
JRST DORM2A
|
||
DORMN2: JUMPE D,.+3
|
||
MOVE A,@.DEV
|
||
PUSHJ P,TABSIX
|
||
MOVE A,@.PPN
|
||
DORM2A: TLNN A,-1 ;PPN OR POINTER
|
||
PUSHJ P,PEEKA ;POINTER, GET PPN
|
||
PUSHJ P,HIGH01
|
||
DUNDOR: AOBJN J,DOR1 ;ARE THERE ANY MORE SEGS. TO LOOK AT?
|
||
|
||
ENDDOR: TLZ F,FL.DOR
|
||
CAIN WD,L.DSO ;LIST DORMANT SEGS. ONLY?
|
||
JRST FINIS ;YES - GO SEE IF WE SHOULD EXIT OR INTERPRET MORE CHS.
|
||
SUBTTL PRINT MEMORY UTILIZATION STATISTICS
|
||
MUSTAT: PUSHJ P,CRLF
|
||
MOVEI M,[ASCIZ /Swapping space used = /]
|
||
MOVE A,XK4SWP
|
||
PUSHJ P,GETZ
|
||
JUMPE A,[MOVE A,MAXMAX ;
|
||
ASH A,-12
|
||
MOVEM A,TEMP
|
||
JRST MUS3]
|
||
MOVEM A,TEMP
|
||
MOVE N,DSKUSE
|
||
PUSHJ P,PRPCNT
|
||
MOVEI M,[ASCIZ /Swapping Space Lost = /] ;
|
||
MOVE A,XSWPER ;
|
||
PUSHJ P,GETZ ;
|
||
JUMPE A,MUS3 ;
|
||
HRRZ N,A ;
|
||
TRZ N,770000 ;
|
||
PUSHJ P,MSGDEC ;
|
||
PUSHJ P,CRLF ;
|
||
MUS3: MOVEI M,[ASCIZ /Virt. Core used = /]
|
||
MOVE N,CORUSE
|
||
PUSHJ P,PRPCNT
|
||
MOVE N,MAXMAX ;FETCH MAX USER CORE AVAILABLE
|
||
ASH N,-11
|
||
SKIPN CPKI10 ;FOR A KI10 ALL IS OKAY
|
||
ASH N,-1 ;BUT SHIFT 1 MORE FOR A KA10
|
||
MOVEM N,TEMP
|
||
SUB N,CORUSE
|
||
JUMPL N,SWAP01
|
||
MOVEI M,[ASCIZ /K Core left/]
|
||
SKIPE CPKI10
|
||
MOVEI M,[ASCIZ /P Core left/]
|
||
PUSHJ P,DECMSG
|
||
JRST SWAP02
|
||
|
||
PRPCNT: MOVEM N,TEMP1
|
||
PUSHJ P,MSGDEC
|
||
MOVSI A,(SIXBIT ./.)
|
||
MOVE N,TEMP
|
||
PUSHJ P,SIXDEC
|
||
MOVEI M,[ASCIZ / = /]
|
||
MOVE N,TEMP1
|
||
PUSHJ P,CMPCNT
|
||
MOVEI M,[ASCIZ /%
|
||
/]
|
||
JRST MSG
|
||
SWAP01: MOVEI M,[ASCIZ /Swapping Ratio = /]
|
||
MOVE N,CORUSE
|
||
PUSHJ P,SWPPRT ;TYPE SWAPPING RATIO LINE
|
||
SWAP02: MOVEI M,[ASCIZ .
|
||
Active swapping ratio = .]
|
||
MOVE N,ACTUSE ;TOTAL ACTIVE VIRTUAL CORE
|
||
PUSHJ P,SWPPRT ;TYPE LINE
|
||
SKIPN N,CORSAV ;ANY CORE SAVED BY SHARING?
|
||
JRST SWAP03 ;NO-DON'T PRINT ANYTHING
|
||
MOVEI M,[ASCIZ /
|
||
Virt. Core saved by sharing = /]
|
||
PUSHJ P,MSGDEC
|
||
MOVSI A,(SIXBIT ./(.)
|
||
MOVE N,CORSAV
|
||
PUSHJ P,SIXDEC
|
||
MOVSI A,(SIXBIT .+.)
|
||
MOVE N,CORUSE
|
||
PUSHJ P,SIXDEC
|
||
MOVEI M,[ASCIZ /) = /]
|
||
MOVE N,CORSAV
|
||
ADD N,CORUSE
|
||
MOVEM N,TEMP
|
||
MOVE N,CORSAV
|
||
PUSHJ P,CMPCNT ;COMPUTE PERCENTAGE & PRINT
|
||
MOVSI A,(SIXBIT .%.)
|
||
PUSHJ P,SIXBP
|
||
SWAP03: PUSHJ P,CRLF
|
||
MOVE N,NUMJOB ;NUMBER OF ACTIVE JOBS
|
||
MOVEM N,TEMP ;USE AS DIVISOR
|
||
MOVEI M,[ASCIZ .Average job size =.]
|
||
MOVE N,LOWUSE ;TOTAL OF LOW SEG SIZES
|
||
PUSHJ P,SWPPRT ;TYPE AVERAGE LOW SEG SIZE
|
||
CALL KAYPEE ;**[9] PRINT K OR P
|
||
MOVEI M,[ASCIZ .+.]
|
||
MOVE N,CORUSE ;TOTAL CORE USED
|
||
ADD N,CORSAV ;PLUS SAVED BY SHARING
|
||
SUB N,LOWUSE ;MINUS LOW SEGS= HIGH SEGS
|
||
PUSHJ P,SWPPRT ;TYPE AVERAGE HIGH SEGMENT SIZE
|
||
CALL KAYPEE ;**[9] PRINT K OR P
|
||
MOVEI M,[ASCIZ . Total=.]
|
||
MOVE N,CORUSE ;TOTAL CORE USED
|
||
ADD N,CORSAV ;PLUS SAVED BY SHARING
|
||
PUSHJ P,SWPPRT ;TYPE AVERAGE TOTAL SIZE
|
||
CALL KAYPEE ;**[9] PRINT K OR P
|
||
PUSHJ P,CRLF
|
||
CAIE WD,L.GSS ;GENERAL SYSTEM STATISTICS ONLY?
|
||
CAIN WD,L.JSO ;PRINT JOB STATUS ONLY?
|
||
JRST FINIS ;YES-GO SEE IF WE SHOULD EXIT. OR INTERPRET MORE CHS.
|
||
SUBTTL "B" - DEVICE STATUS
|
||
DEVQ: TLZ F,FL.DEV ;CLEAR HEADER FLAG
|
||
SETOM FSDCNT ;SET 1ST PASS FLAG
|
||
SETZM DSKDDB ;CLEAR COUNTER OF DISK DDBS
|
||
MOVE A,XDVLST
|
||
PUSHJ P,GETZ
|
||
DEVLP1: HLRZ D,A ;GET POINTER
|
||
MOVEI JS,^D10000 ;PROTECT AGAINST INF. LOOP
|
||
DEVLP: JUMPE D,DEVEND ;EXIT. LOOP IF ALL DONE
|
||
MOVEI C,DV.MOD(D)
|
||
PUSHJ P,PEEKC
|
||
MOVE B,C
|
||
TRNN B,ASSCON+ASSPRG
|
||
JRST NXTDEV
|
||
MOVEI C,DV.LOG(D) ;GET LOGICAL NAME
|
||
PUSHJ P,PEEKC ;FROM DDB
|
||
MOVEM C,LOGNAM ;SAVE FOR LATER
|
||
MOVEI A,DV.NAM(D)
|
||
PUSHJ P,PEEKA
|
||
MOVEI C,@.DVJOB ;NEW ENTRY IN DDB SINCE LOAD 722
|
||
SKIPN NPJOBN ;IF NEW STYLE THEN SKIP
|
||
MOVEI C,DV.CHR(D)
|
||
PUSHJ P,PEEKC
|
||
LDB J,PJOBN ;YES--GET JOB NUMBER
|
||
SKIPE NPJOBN ;IF NOT NEW STYLE
|
||
LDB J,NPJOBN ;GET JOB NUMBER SOMEWHERE ELSE
|
||
MOVEI C,DV.SPL(D) ;**[5] GET DEVSPL DDB ENTRY
|
||
CALL PEEKC ;**[C] IN C ASS J HAS BEEN SET
|
||
SKIPL C ;**[5] SPOOLED DEVICES USE A DISK DDB
|
||
TLNE B,DVDSK ;SEE IF DISK
|
||
AOS DSKDDB ;YES--COUNT IT
|
||
TLNE B,DVTTY ;SEE IF TTY
|
||
TLNE B,DVTTYC ;IF I/O TTY ALWAYS DO IT
|
||
TLNN B,DVTTY+DVDSK ;SEE IF TTY OR DISK
|
||
JRST DEVDO ;NO--JUST GO DO IT
|
||
TLNE F,FL.DSK ;IS IT DISK MODE?
|
||
JRST DEVDO ;YES--ALWAYS DO ALL DEVICES
|
||
TLNN F,FL.LPT!FL.GOD ;IF THIS IS OPER WORK
|
||
CAMN J,MYJOB ;OR SAME JOB
|
||
SKIPN LOGNAM ;AND THERE IS A LOGNAM
|
||
JRST NXTDEV ;**[5] FORGET THE THING
|
||
DEVDO: SKIPE N1,ONEJOB ;SEE IF SINGLE JOB
|
||
CAMN J,N1 ;YES--SEE IF MATCHES
|
||
JRST .+2 ;A WINNER
|
||
JRST NXTDEV ;NO--SKIP IT
|
||
SKIPN N1,ONEPPN ;MAKE WILD CARDS WORK; WAS ANY PPN
|
||
JRST DEVTTY ;SPECIFIED? NO; GO ON.
|
||
MOVE N,@.PPN ;LOAD UP PPN OF DEVICE.
|
||
TRNN N1,-1 ;RIGHT HALF OF SPEC'D PPN WILD?
|
||
TRZ N,-1 ;YES; ZERO IT IN DEV PPN FOR MATCH.
|
||
TLNN N1,-1 ;HOW ABOUT THE LEFT HALF?
|
||
TLZ N,-1 ;DITTO.
|
||
CAME N,N1 ;IF THEY AREN'T SAME NOW,
|
||
JRST NXTDEV ;GET ANOTHER DEVICE.
|
||
DEVTTY: SKIPGE N1,ONETTY ;(LABEL ADDITION) ;SEE IF SINGLE TTY MODE
|
||
JRST TTYOKD ;NO--PROCEED
|
||
SETOM N ;PRESET FOR TEST
|
||
CAMN N1,@.TTYN ;YES--SEE IF IT MATCHES
|
||
CAMN N,@.PPN ;SEE IF HIDDEN
|
||
JRST NXTDEV ;NO--SKIP IT
|
||
TTYOKD: TLNE B,DVTTY ;IF TTY
|
||
TLNE A,-1 ;AND LH=0
|
||
JRST .+2 ;NO
|
||
HRLI A,'DET' ;YES--DETACHED
|
||
;THE FOLLOWING TEST WAS MOVED UP A FEW LINES TO THIS POINT
|
||
HLRZ CH,A ;GRAB FIRST 3 CHARS
|
||
CAIN CH,'PTY' ;IS IT A PTY?
|
||
JRST [MOVEI CH,0 ;YES, MAYBE LIST ANYWAY
|
||
OR CH,ONEJOB
|
||
OR CH,ONEPPN
|
||
ORCM CH,ONETTY
|
||
SKIPE CH ;NONE OF THESE
|
||
JRST .+1 ;GIVE HIM THE PTY ANYWAY
|
||
CAME J,MYJOB ;ESPECIALLY IF IT IS HIS
|
||
TLNE F,FL.LPT!FL.GOD ;OR HE DESERVES IT
|
||
JRST .+1
|
||
JRST NXTDEV] ;SPARE HIM THE TYPEOUT
|
||
|
||
MOVEI M,[ASCIZ /
|
||
Busy devices:
|
||
Device Job Why Logical
|
||
|
||
/]
|
||
TLNE F,FL.DSK ;SEE IF DISK MODE
|
||
MOVEI M,[ASCIZ /
|
||
Busy devices:
|
||
Device Job Address Why Logical UNILOG DEVFIL DEVEXT DEVPPN
|
||
|
||
/]
|
||
TLON F,FL.DEV
|
||
PUSHJ P,MSG
|
||
MOVEI CH,"'" ;GET FLAG IN CASE DISK
|
||
SKIPL C ;**[6] IF SPOOLELED OR
|
||
TLNE B,DVDSK ;IS IT DISK?
|
||
PUSHJ P,TYO ;YES--OUTPUT FLAG FIRST
|
||
;THE TEST FOR PTY DEVICES WAS HERE BEFORE
|
||
PUSHJ P,SIXTAB ;PRINT SIXBIT MSG FOLLOWED BY TAB
|
||
MOVE N,J ;**[5] GET JOB NUMBER
|
||
PUSHJ P,DECP2X
|
||
PUSHJ P,TAB
|
||
TLNN F,FL.DSK ;SEE IF DISK MODE
|
||
JRST DVWHY ;NO--PROCEED
|
||
MOVEI N,(D) ;YES--GET ADDRESS OF DDB
|
||
MOVEI CH,-1 ;SET FOR 6 DIGITS
|
||
PUSHJ P,FIXOCT ;OUTPUT IT
|
||
PUSHJ P,TAB ;AND SPACE
|
||
DVWHY: MOVEI M,[ASCIZ /as/]
|
||
TRNE B,ASSCON
|
||
PUSHJ P,MSG
|
||
TRNN B,ASSPRG
|
||
JRST DVLOG
|
||
MOVEI CH,"+"
|
||
TRNE B,ASSCON
|
||
PUSHJ P,TYO
|
||
MOVEI M,[ASCIZ /init/]
|
||
PUSHJ P,MSG
|
||
DVLOG: TLNN F,FL.LPT!FL.GOD ;IF FOR OPERATOR
|
||
CAMN J,MYJOB ;OR THIS JOB
|
||
SKIPN A,LOGNAM ;AND THERE IS A LOGICAL NAME
|
||
JRST DVFILE ;NO--SKIP IT
|
||
PUSHJ P,TABSIX ;OUTPUT IT
|
||
DVFILE: TLNE F,FL.DSK ;IN DSK MODE?
|
||
TLNN B,DVDSK ;AND IS THIS A DSK DDB
|
||
JRST DVCRLF ;NO--SKIP IT
|
||
SKIPN LOGNAM ;NEED A TAB?
|
||
PUSHJ P,TAB ;YES
|
||
MOVEI A,@.DVUNI ;GET UDB ADDRESS
|
||
PUSHJ P,PEEKA
|
||
TRNN A,-1 ;DOES "CURRENT" EXIST?
|
||
MOVS A,A ;IF NOT, USE "ORIGINAL" UDB
|
||
TLZ A,-1 ;SEE IF WE HAVE AN ADDRESS
|
||
JUMPE A,DVLOG1 ;?
|
||
MOVEI A,UNILOG(A) ;GET UNIT'S LOGICAL NAME
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA ;...
|
||
DVLOG1: PUSHJ P,TABSIX ;AND PRINT IT
|
||
DVLOGN: MOVEI A,@.DVFIL ;USE D AS INDEX
|
||
PUSHJ P,PEEKA
|
||
JUMPE A,DVCRL0 ;FORGET IT IF ITS ZERO
|
||
PUSH P,A ;SAVE FILE NAME
|
||
MOVEI A,@.DVEXT ;GET EXTENSION USE D AS INDEX
|
||
PUSHJ P,PEEKA
|
||
TRZ A,-1
|
||
PUSHJ P,TAB ;LINE IT UP
|
||
CAME A,[SIXBIT /UFD/]
|
||
JRST DVFIL1 ;PRINT SIXBIT NAME
|
||
EXCH A,(P) ;GET UFD PPN
|
||
PUSHJ P,OCTPRA ;PRINT IT
|
||
JRST DVFIL2 ;GO DO THE EXTENSION
|
||
DVFIL1: EXCH A,(P) ;GET SIXBIT FILE NAME
|
||
PUSHJ P,SIXBP ;DISPLAY IT
|
||
DVFIL2: POP P,A ;EXTENSION
|
||
PUSHJ P,TABSIX ;PRINT IT
|
||
MOVEI A,@.DVPPN ;GET OWNER USE D AS INDEX
|
||
PUSHJ P,PEEKA
|
||
PUSHJ P,PNTPPN ;AND PRINT IT
|
||
DVCRL0:
|
||
DVCRLF: PUSHJ P,CRLF
|
||
NXTDEV: MOVEI C,DV.SER(D)
|
||
PUSHJ P,PEEKC
|
||
HLRZ D,C
|
||
SOJG JS,DEVLP
|
||
|
||
DEVEND: MOVE A,MONVER ;GET MONITOR VERSION
|
||
CAIGE A,67700 ;7.00 FIELD TEST OR LATER?
|
||
JRST DEVEN4 ;NO, QUIT NOW
|
||
TLNN F,FL.DSK ;READING A CRASH?
|
||
JRST DEVEN2 ;NO
|
||
DEVEN1: AOS J,FSDCNT ;BUMP JOB # COUNT
|
||
CAML J,JOBN ;DONE THEM ALL YET?
|
||
JRST DEVEN4 ;YES
|
||
MOVE A,@.STS ;PICK UP JOB STATUS
|
||
TLNN A,JNA ;JOB NUMBER ASSIGNED?
|
||
JRST DEVEN1 ;NO, TRY NEXT
|
||
JRST DEVEN3 ;JOIN COMMON CODE
|
||
DEVEN2: AOSE FSDCNT ;BEEN HERE BEFORE?
|
||
JRST DEVEN4 ;YES, THAT'S ALL
|
||
SKIPE A,ONEJOB ;USER SPECIFY JUST ONE JOB?
|
||
CAME A,MYJOB ;AND IS IT THIS ONE?
|
||
JRST DEVEN4 ;NO, DON'T PRINT ANY DDB'S
|
||
DEVEN3: SKIPE A,.UPLST ;GET ADDRESS OF PTR TO DISK DDB'S
|
||
PUSHJ P,PEEKA ;READ FROM OUR PAGE MAP
|
||
JUMPN A,DEVLP1 ;PRINT ANY DISK DDB'S
|
||
TLNE F,FL.DSK ;READING A CRASH?
|
||
JRST DEVEN1 ;YES, TRY NEXT JOB
|
||
|
||
DEVEN4: SETOM FSDCNT ;SET FLAG AGAIN
|
||
SKIPN ONEJOB ;SEE IF SINGLE JOB
|
||
SKIPE ONEPPN ;SEE IF SINGLE PPN
|
||
JRST FINIS ;YES--ALL DONE
|
||
SKIPL ONETTY ;SEE IF SINGLE TTY
|
||
JRST FINIS ;YES--FINISH UP
|
||
MOVEI M,[ASCIZ /
|
||
No busy devices
|
||
/]
|
||
TLZN F,FL.DEV
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ / disk DDBs
|
||
/]
|
||
MOVE CH,MONVER ;GET VERSION OF MONITOR
|
||
SKIPE N,DSKDDB ;GET DISK DDB COUNT
|
||
CAIL CH,67700 ;7.00 FIELD TEST OR LATER?
|
||
CAIA ;YES, DON'T PRINT
|
||
PUSHJ P,DECMSG ;OUTPUT IT IF THERE ARE ANY
|
||
|
||
DEVFIN: CAIN WD,L.BDO ;PRINT BUSY DEVICES ONLY?
|
||
JRST FINIS ;YES-GO SEE IF WE SHOULD EXIT. OR INTERPRET MORE CHS.
|
||
SUBTTL "F" - FILE STRUCTURE STATUS
|
||
|
||
FS: TLZ F,FL.DEV ;CLEAR HEADER FLAG
|
||
SETZB A,C
|
||
MOVE A,XSYSST
|
||
PUSHJ P,GETA
|
||
FS1: HLRZ D,A
|
||
JUMPE D,FSFIN
|
||
MOVEI A,STRNAM(D)
|
||
PUSHJ P,PEEKA
|
||
JUMPE A,FSL1 ;IF BLANK STRUCTURE NAME, PROCEED
|
||
MOVEI M,[ASCIZ /
|
||
System File Structures:
|
||
Name Free Mount
|
||
/]
|
||
TLON F,FL.DEV ;TYPED THIS HEADING YET?
|
||
PUSHJ P,MSG ;NO. DO IT NOW.
|
||
PUSHJ P,SIXTAB ;TYPE STRUCTURE NAME
|
||
MOVEI A,STRTAL(D)
|
||
PUSHJ P,PEEKA
|
||
MOVE N,A
|
||
ADD C,N ;ACCUMULATE IT IN THE TOTAL
|
||
PUSHJ P,DECTAB ;PRINT IT
|
||
MOVEI A,STRMNT(D)
|
||
PUSHJ P,PEEKA
|
||
MOVE N,A
|
||
PUSHJ P,DECPRT ;PRINT IT
|
||
MOVEI M,[ASCIZ / Private structure/]
|
||
MOVEI A,STRUN1(D) ;POINT TO WORD CONTAINING STPPVS
|
||
PUSHJ P,PEEKA ;GET IT
|
||
TRNE A,STPPVS ;THIS STR PRIVATE?
|
||
PUSHJ P,MSG ;YES, TELL THE USER
|
||
MOVEI M,[ASCIZ / Single Access by job /]
|
||
MOVEI A,STRJOB(D)
|
||
PUSHJ P,PEEKA
|
||
JUMPLE A,FSNNA
|
||
HRRZ N,A
|
||
PUSHJ P,MSGDEC ;AND PRINT HIS NUMBER
|
||
FSNNA: MOVEI M,[ASCIZ / No New Accesses/]
|
||
MOVEI A,STRUNI(D)
|
||
PUSHJ P,PEEKA
|
||
HLRZM A,UNIBLK ;SET THE UDB ADDRESS
|
||
PUSH P,D ;SAVE STR ADDRESS
|
||
CALL GETDES ;GET UNIDES
|
||
POP P,D ;RESTORE D
|
||
TLNE A,(.UPNNA) ;SEE IF NNA
|
||
PUSHJ P,MSG ;YES--PRINT FLAG
|
||
FSL: PUSHJ P,CRLF ;GO TO NEW LINE
|
||
FSL1: MOVEI A,STRSYS(D) ;
|
||
PUSHJ P,PEEKA
|
||
JRST FS1 ;LOOP
|
||
|
||
FSFIN: MOVE N,C ;TOTAL FREE
|
||
MOVEI M,[ASCIZ /Total Free /]
|
||
PUSHJ P,MSGDEC ;PRINT IT
|
||
PUSHJ P,CRLF ;NEW LINE
|
||
CAIN WD,L.FSO ;PRINT FILE STRUCTURES ONLY?
|
||
JRST FINIS ;YES-GE SEE IF WE SHOULD EXIT. OR INTERPRETMORE CHS.
|
||
SUBTTL "T" - DATA SET TABLE
|
||
|
||
; Begin body of Edit 266 - This edit causes SYSTAT to search through LINTAB
|
||
; (LDB's) first for remote lines, and then through DSCTAB for lines on the
|
||
; central node.
|
||
|
||
; This code depends on a few post-6.03A GETTAB-able monitor symbols; it
|
||
; will assume 6.03A defaults if the GETTABs fail:
|
||
|
||
%CNDCH=154,,11 ;LDBDCH
|
||
%CNDJB=135,,11 ;DEVJOB
|
||
%NDSNM=3,,161 ;NDBSNM
|
||
|
||
; 7.04 AND LATER GETTAB'S
|
||
|
||
%CNREM=207,,11 ;OFFSET OF LDBREM IN LDB'S
|
||
%CNK4S=210,,11 ;OFFSET OF UNIK4S IN UDB'S
|
||
|
||
DSCDO: TLZ F,FL.DEV ;Clear the header flag
|
||
MOVEI M,[ASCIZ /
|
||
Dataset Control
|
||
Line # Status
|
||
|
||
/ ] ;Get header text
|
||
MOVE A,[0,,.GTLOC] ;Get location of central site
|
||
PUSHJ P,GETZ
|
||
MOVEM A,CNTLOC ;Save it
|
||
MOVE B,[%CNDCH] ;Get device-charac. word in LDB
|
||
PUSHJ P,GETTB
|
||
MOVEI B,16 ;Call not implemented? Assume 6.03A-style
|
||
HRRZM B,LDBDCH
|
||
MOVE B,[%NDSNM] ;Get node-name pointer in NDB
|
||
PUSHJ P,GETTB
|
||
MOVEI B,2 ;Not implemented? Assume 2
|
||
HRRZM B,NDBSNM ;Save this value
|
||
MOVE B,[%CNDJB] ;Get job-number pointer in DDB
|
||
PUSHJ P,GETTB
|
||
MOVEI B,20 ;Assume old monitor
|
||
HRRZM B,DEVJOB ;Save this value
|
||
MOVE A,[%CNREM] ;ASK MONITOR FOR THE
|
||
GETTAB A, ; OFFSET OF LDBREN.
|
||
CAIA ;* CAN'T GET IT - OLD MONITOR
|
||
JRST DSCLRM ;SKIP ALL THIS JUNK AND USE IT
|
||
MOVE B,MONVER ;Now determine LDBREM
|
||
CAILE B,70100 ;Is it after 7.01?
|
||
MOVEI A,33 ;Yes, use 7.02 value of LDBREM
|
||
CAILE B,70207 ;Is it after 7.02?
|
||
MOVEI A,57 ;Yes, use 7.03 value
|
||
CAILE B,70307 ;Is it 7.04?
|
||
MOVEI A,62 ;Yes, use that value
|
||
CAIG B,70100 ;Is it 7.01 or before?
|
||
MOVEI A,32 ;Yes, assume 7.00-7.01 value of LDBREM
|
||
CAIGE B,70000 ;Is it before 7.00?
|
||
MOVEI A,23 ;Yes, assume 6.03A value of LDBREM
|
||
DSCLRM: MOVEM A,LDBREM ;Remember this value
|
||
MOVE A,[%CNLNP] ;Get count and address of TTY line table
|
||
PUSHJ P,GETZ
|
||
JUMPGE A,FINIT ;Failed? Skip this whole routine
|
||
HRRZM A,LINTAB ;Remember beginning of table
|
||
SETZM TTNUM ;Zero out the counter
|
||
DSCLP0: HRRZ C,A ;Find the address of the LDB
|
||
PUSHJ P,PEEKC ;Get this address
|
||
MOVE B,MONVER ;Monitor version number
|
||
CAILE B,70207 ;7.03?
|
||
TLOA F1,F1.XAD ;Yes, LDBs are in section 4. Don't clear left half
|
||
HRRZS C ;Get rid of left-half junk
|
||
JUMPE C,DSNEXT
|
||
MOVEM C,LDB ;Save the LDB pointer
|
||
ADD C,LDBDCH ;Get offset into LDB
|
||
PUSHJ P,PEEKC ;Get the word of data
|
||
TRNE C,(GL.DSL) ;See if a dataset TTY
|
||
PUSHJ P,TYPEIT ;Type it out if so
|
||
DSNEXT: AOS TTNUM ;Go to next terminal
|
||
AOBJN A,DSCLP0 ;Bump pointer and loop back
|
||
FINIT: MOVE A,XDSCTB ;Get pointer to dataset table
|
||
PUSHJ P,GETZ ;(Optional)
|
||
JUMPGE A,DSCFIN ;Skip table if empty
|
||
SETOM TTNUM ;Start with lowest TTY - 1
|
||
TRNA ;skip incr. first time through
|
||
|
||
DSCLP: AOBJP A,DSCFIN ;Exit when done
|
||
AOS TTNUM ;Bump tty counter
|
||
HRRZ C,A ;Get location of this entry
|
||
PUSHJ P,PEEKC ;Look at it
|
||
TLNN C,(DSCSTS) ;See if other than idle
|
||
JRST DSCLP ;Idle--skip this entry
|
||
TLON F,FL.DEV ;See if header output yet
|
||
PUSHJ P,MSG ;No--do it
|
||
LDB N,[POINT 3,C,2+^L<DSCSTS>]
|
||
CAIE N,6 ;Check special case first
|
||
JRST DSCREG ;Not "in use"? Do regular stuff
|
||
TLNE C,(DSCTIM) ;Timed state 6
|
||
SETZ N, ;Flag as "new call"
|
||
DSCREG: HRRZS C ;Get rid of left half
|
||
PUSHJ P,TYPTTY ;Type out the message
|
||
JRST DSCLP ;And loop back
|
||
|
||
TYPEIT: PUSH P,A ;Save this ac
|
||
MOVE C,LDB ;Get LDB pointer
|
||
ADD C,LDBREM ;Add on this
|
||
ADDI C,3 ;Go to LDBREM+3
|
||
PUSHJ P,PEEKC ;Get the word that contains the node number
|
||
LDB A,LDPRNN ;Get the right byte
|
||
CAMN A,CNTLOC ;On central node?
|
||
JRST TYPDON ;Don't bother with locals
|
||
JUMPE C,TYPDON ;If zero, not connected or local
|
||
MOVE C,TTNUM ;Tell next routine the TTY number
|
||
MOVEI N,6 ;Tell this routine N=6 (line "in use")
|
||
PUSHJ P,TYPTTY ;Type out this TTY line
|
||
TYPDON: POP P,A ;Get "A" back
|
||
POPJ P,
|
||
; Here to type out a TTY status report, with C = TTY # set up and N containing
|
||
; the status of the line
|
||
|
||
TYPTTY: PUSH P,A ;[322] Save loop counter
|
||
PUSH P,N ;Remember this word
|
||
PUSH P,C ;Remember the TTY number
|
||
ADD C,LINTAB ;Find the address of the LDB
|
||
PUSHJ P,PEEKC ;Get this address
|
||
MOVE B,MONVER ;Monitor version number
|
||
CAILE B,70207 ;7.03?
|
||
TLOA F1,F1.XAD ;Yes, LDBs are in section 4. Don't clear left half
|
||
HRRZS C ;Get rid of left-half flags
|
||
MOVEM C,LDB ;Save the LDB pointer
|
||
TLNN F1,F1.XAD ;7.03 or later?
|
||
JRST TYPA.0 ;No, don't check use bit
|
||
ADD C,LDBREM ;Point to LDBREM word
|
||
SOS C ;Back off to LDBTTW
|
||
PUSHJ P,PEEKC ;Get it
|
||
TLNE C,LTLUSE ;Use bit on?
|
||
JRST TYPA.0 ;Yes, go type it out
|
||
POP P,C ;No, return typing nothing
|
||
POP P,N ; ..
|
||
JRST NOJOB1 ; ..
|
||
TYPA.0: TLON F,FL.DEV ;Header printed yet?
|
||
PUSHJ P,MSG ;Do it now
|
||
PUSHJ P,NODENM ;Simulate the NODE. call
|
||
JRST [MOVEI M,[ASCIZ / /] ;Failed?
|
||
PUSHJ P,MSG ;Type a few spaces instead of a name
|
||
JRST TYPE.1] ;And skip down a bit
|
||
JUMPE A,TYPE.1 ;If zero, assume old monitor (no networks)
|
||
PUSHJ P,SIXBP ;Print out the node name
|
||
TYPE.0: MOVEI CH,"_" ;Type separator out
|
||
PUSHJ P,TYO
|
||
MOVE C,LDB ;Now get line number
|
||
ADD C,LDBREM ;Go to LDBREM+2
|
||
ADDI C,2
|
||
PUSHJ P,PEEKC ;Get this word
|
||
JUMPE C,[MOVE N,TTNUM ;If zero, we have a central-node TTY
|
||
JRST .+2] ;And should use correct line-number
|
||
LDB N,LDPRLN ;Get line number out of it
|
||
PUSHJ P,OPRNT ;Type it out
|
||
TYPE.1: PUSHJ P,SPACE ;Type a space
|
||
MOVE N,COLCNT ;Get HPOS
|
||
CAIE N,^D12 ;At Column 12?
|
||
JRST TYPE.1 ;No, type another space
|
||
MOVE N,COLCNT ;Get current column
|
||
CAIGE N,10 ;Past first tab stop?
|
||
PUSHJ P,TAB ;No, line it up
|
||
MOVEI M,[ASCIZ /TTY/] ;Type this out
|
||
PUSHJ P,MSG
|
||
POP P,N ;Get the TTY number back (into N, not C)
|
||
PUSHJ P,OPRNT ;Type that out too
|
||
MOVEI M,[ASCIZ /: /] ;Print this spacer out
|
||
PUSHJ P,MSG
|
||
POP P,N ;Get the TTY number back
|
||
SKIPE M,DSCMTB(N) ;Get standard message, if any
|
||
JRST DSCMSG ;Go output it
|
||
PUSHJ P,OPRNT ;No--Type octal status
|
||
CAIA ;And skip
|
||
DSCMSG: PUSHJ P,MSG ;Output message
|
||
MOVE C,LDB
|
||
PUSHJ P,PEEKC ;Get LDBDDB word
|
||
HRRZS C ;See if a DDB exists for this TTY
|
||
JUMPE C,NOJOB ;No? Not a job
|
||
ADD C,DEVJOB ;Get the job number
|
||
PUSHJ P,PEEKC ;(from the DDB)
|
||
LDB N,DDBJOB
|
||
JUMPE N,NOJOB ;If zero, don't type this
|
||
MOVEI M,[ASCIZ / by job /]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,DECPRT ;Type it out
|
||
NOJOB: PUSHJ P,CRLF ;Plus a crlf
|
||
NOJOB1: POP P,A ;[322] Restore loop counter
|
||
POPJ P, ;That's all
|
||
; Here to simulate function 2 of NODE. call (takes address in LDB)
|
||
|
||
NODENM: PUSH P,C ;Can't smash C
|
||
MOVE C,LDB ;Get LDB pointer
|
||
ADD C,LDBREM ;Add on this
|
||
ADDI C,3 ;Go to LDBREM+3
|
||
PUSHJ P,PEEKC ;Get the word that contains the node number
|
||
JUMPE C,NODBAD ;If zero, we have a central-node TTY
|
||
LDB A,LDPRNN ;Get the right byte
|
||
MOVE B,[%CNNDB] ;Get address of first NDB
|
||
PUSHJ P,GETTB
|
||
JRST NODBAD ;Failure
|
||
MOVE C,B ;Initialize search through NDB chain
|
||
|
||
NODLOP: MOVE D,C ;Remember the NDB address
|
||
PUSHJ P,PEEKC ;Get contents of this address
|
||
HLRZ N,C ;Get node number of this NDB
|
||
HRRZS C ;Get rid of left half
|
||
CAMN N,A ;Does it match?
|
||
JRST NODRET ;Yes, return the name
|
||
SKIPN C ;At the bottom of the chain yet?
|
||
JRST NODBAD ;Yes, fail miserably
|
||
JRST NODLOP ;Loop back
|
||
|
||
NODRET: MOVE C,D ;Get NDB address
|
||
ADD C,NDBSNM ;Get this word out of the NDB
|
||
PUSHJ P,PEEKC ;Got it
|
||
MOVSS C ;Swap halves of N
|
||
PUSHJ P,PEEKC ;Get the SIXBIT node name here
|
||
MOVE A,C ;Return the value here
|
||
POP P,C ;Get C back
|
||
AOS (P) ;Give skip return
|
||
POPJ P,
|
||
|
||
NODBAD: POP P,C ;Get C back
|
||
POPJ P, ;Give non-skip return
|
||
|
||
LDPRNN: POINT 16,C,35 ;Pointer to node number in LDBREM+3
|
||
LDPRLN: POINT 10,C,35 ;Pointer to line number in LDBREM+2
|
||
DDBJOB: POINT 9,C,35 ;Pointer to job number in DDB+DEVJOB
|
||
|
||
; End of body of Edit 266
|
||
|
||
DSCMTB: [ASCIZ /new call/]
|
||
0 ;STATE=1
|
||
[ASCIZ /rang/]
|
||
[ASCIZ /carrier interrupt/]
|
||
0 ;4
|
||
0 ;5
|
||
[ASCIZ /in use/]
|
||
0 ;7
|
||
|
||
DSCFIN: TLZ F1,F1.XAD ;Let PEEKA clear the left half of A
|
||
CAIN WD,L.DSC ;See if just this display
|
||
JRST FINIS ;Yes--exit
|
||
|
||
SUBTTL "E" - NON-DISK ERROR REPORT
|
||
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
IFE CPUN,<MOVEI N,0>
|
||
IFG CPUN,<TLNE M,(1B<4+CPUN-1>)
|
||
MOVEI N,CPUN>
|
||
>
|
||
|
||
TLNN F,FL.DSK!FL.LPT ;SEE IF FOR OPERATOR
|
||
JRST SWFIN ;NO--SKIP REST OF DISPLAYS
|
||
ERRPT: TLZ F,FL.DEV ;CLEAR TITLE FLAG
|
||
MOVSI D,-ERRTL1 ;SETUP TABLE POINTER
|
||
|
||
ERRLP1: MOVE A,ERRTB1(D) ;GET NEXT GETTAB
|
||
MOVE M,ERRTM1(D) ;ALLOW FOR POSSIBILITY OF A SUBTABLE
|
||
TLNE M,(1B11) ;ITEM FROM A SUBTABLE?
|
||
JRST [ALLCPUS ;YES, GET CPU NUMBER
|
||
MOVEM N,CPU ;SET TO CALL GETRSP
|
||
PUSHJ P,GETRSP ;GET THE VALUE
|
||
JRST ERRLX1 ;NO SUCH GETTAB
|
||
JRST .+2] ;SKIP CALL TO GETZ AND CONTINUE
|
||
PUSHJ P,GETZ ;GET IT IF POSSIBLE
|
||
JUMPE A,ERRLX1 ;ZERO--EITHER NOT THERE OR NOT USED
|
||
MOVEI M,[ASCIZ /
|
||
Non-disk Performance
|
||
|
||
/]
|
||
TLON F,FL.DEV ;SEE IF TITLE DONE YET
|
||
PUSHJ P,MSG ;OUTPUT TITLE
|
||
HRRZ M,ERRTM1(D)
|
||
MOVE B,ERRTM1(D)
|
||
TLNE B,(1B12)
|
||
HLRZS A
|
||
TLNE B,(1B13)
|
||
HRRZS A
|
||
MOVE N,A ;SAVE COUNT
|
||
JUMPL B,ERRLA1
|
||
TLZE B,200000 ;DECIMAL HALF WORDS?
|
||
JRST ERRLA2 ;YES
|
||
PUSH P,A
|
||
ERRLA3: PUSH P,B
|
||
PUSH P,M
|
||
MOVEI M,[ASCIZ / /] ;LINE THINGS UP
|
||
PUSHJ P,MSG
|
||
POP P,M
|
||
PUSHJ P,DECPRJ ;OUTPUT RIGHT JUSTIFIED DECIMAL NUMBER
|
||
POP P,B
|
||
POP P,A
|
||
PUSHJ P,MSG ; AND THEN THE MESSAGE
|
||
MOVEI M,[EXP 0]
|
||
JRST ERRLY1 ;JUMP TO FINISH LINE
|
||
|
||
ERRLA2: PUSH P,A ;DECIMAL HALFWORDS WERE A WIERD IDEA
|
||
PUSH P,WD
|
||
SETO WD, ;COUNT, DON'T PRINT
|
||
HLRZ N,A
|
||
PUSHJ P,DECPRJ ;COUNT LEFT HALF CHARACTERS
|
||
HRRZ N,-1(P)
|
||
PUSHJ P,DECPRJ ;DON'T PRINT THAT EITHER, JUST COUNT CHARACTERS
|
||
MOVE N,COLCNT ;NOW COMPUTE HOW TO FORMAT IT
|
||
SUBI N,^D10 ;WANT TO END UP IN COLUMN 15., ACCOUNT FOR ., AND .
|
||
POP P,WD
|
||
SKIPLE N
|
||
PUSHJ P,SPACE
|
||
SOJG N,.-1
|
||
POP P,A
|
||
HLRZ N,A
|
||
PUSHJ P,DECPRT
|
||
MOVEI M,[ASCIZ /.,/]
|
||
PUSHJ P,MSG
|
||
HRRZ N,A
|
||
PUSHJ P,DECPRT
|
||
HRRZ M,ERRTM1(D)
|
||
PUSHJ P,MSG
|
||
JRST ERRLY2
|
||
ERRLA1: PUSH P,M
|
||
MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,MSG ;LINE THINGS UP
|
||
POP P,M
|
||
PUSHJ P,OCTPRJ ;OUTPUT OCTAL NUMBER
|
||
PUSHJ P,MSG ;OUTPUT MESSAGE
|
||
ERRLY1: TLNN B,140000
|
||
JRST ERRLY2
|
||
MOVEM A,TEMP
|
||
MOVE A,[%CVUPT]
|
||
IFG NCPUS-1,<
|
||
TLNE B,20000
|
||
ADDI A,2
|
||
>
|
||
IFG NCPUS-2,<
|
||
TLNE B,10000
|
||
ADDI A,4
|
||
>
|
||
IFG NCPUS-3,<
|
||
TLNE B,4000
|
||
ADDI A,6
|
||
>
|
||
IFG NCPUS-4,<
|
||
TLNE B,2000
|
||
ADDI A,10
|
||
>
|
||
IFG NCPUS-5,<
|
||
TLNE B,1000
|
||
ADDI A,12
|
||
>
|
||
TLNE B,400
|
||
MOVE A,[%CNSUP]
|
||
PUSHJ P,FGETTB ;TRY TO GET UPTIME
|
||
JRST [MOVE A,XUPTIM ;DEFAULT TO TOTAL
|
||
PUSHJ P,GETA ;SYSTEMS UPTIME
|
||
JRST .+1 ]
|
||
EXCH A,TEMP
|
||
IMULI A,^D60
|
||
TLNE B,40000
|
||
IMUL A,TCKSEC ;REMEMBER ENGLAND !
|
||
PUSHJ P,CMPDFA
|
||
MOVEI M,[ASCIZ \/Second)\]
|
||
TLNE B,40000
|
||
MOVEI M,[ASCIZ \/Minute)\]
|
||
PUSHJ P,MSG
|
||
ERRLY2: PUSHJ P,CRLF ;END LINE
|
||
ERRLX1: AOBJN D,ERRLP1 ;LOOP BACK UNTIL DONE
|
||
|
||
;PRINT LAST STOPCD INFORMATION
|
||
MOVE A,[%SYSPC] ;GET LAST STOPCODE DATA
|
||
PUSHJ P,GETZ ;GET IT OR A ZERO
|
||
JUMPE A,NSTOPC ;THERE WAS NO STOPCD
|
||
PUSH P,A ;SAVE STOPCD INFO
|
||
MOVE A,[%SYSCD] ;STOPCD NAME IN 7.03 OR LATER
|
||
PUSHJ P,GETZ ;GET IT OR ZERO
|
||
SKIPN BP,A ;IS THERE A NEW NAME?
|
||
HLLZ BP,(P) ;NO, COPY OLD STOP CODE NAME
|
||
PUSHJ P,SIXBP1 ;PRINT SIXBIT CODE
|
||
MOVEI M,[ASCIZ / was last STOPCD, type=/]
|
||
PUSHJ P,MSG ;PRINT NAME
|
||
JUMPN A,[POP P,A ;IF 7.03 OR LATER
|
||
MOVE A,[%SYSTY] ;STOPCD TYPE IS STORED HERE
|
||
PUSHJ P,GETZ ;GET IT
|
||
JRST STOPTY] ;AND PRINT THE RESULTS
|
||
POP P,A ;RESTORE STOPCD INFO
|
||
HRRZ A,A ;ISOLATE ADDRESS
|
||
PUSHJ P,PEEKA ;GET STOPCD TYPE
|
||
LDB A,[POINT 3,A,12] ;GET TYPE ( IGNORE LONG FORM BIT )
|
||
STOPTY: MOVE M,STOPT(A) ;GET TYPE OF STOPCD
|
||
PUSHJ P,MSG ;PRINT IT AND
|
||
PUSHJ P,CRLF ;A NEW LINE
|
||
NSTOPC:
|
||
REPEAT 0,< ;HISTORICAL STUFF
|
||
|
||
TLNN F,FL.DSK ;SEE IF DISK MODE
|
||
JRST ERRXIT ;NO--SKIP CRASH STUFF
|
||
MOVE A,XPCMA ;GET PC AND MA (FROM SWITCHES)
|
||
PUSHJ P,GETZ ;FROM MONITOR
|
||
JUMPE A,ERRLX0 ;NOT USEABLE
|
||
MOVEM A,D ;SAVE FOR LATER
|
||
PUSHJ P,CRLF ;START NEW LINE
|
||
MOVEI M,[ASCIZ /PC=/]
|
||
HLRZ N,A ;GET PC
|
||
PUSHJ P,MSGOCT ;OUTPUT PC
|
||
MOVEI M,[ASCIZ / MA=/]
|
||
HRRZ N,A ;GET MA
|
||
PUSHJ P,MSGOCT ;OUTPUT MA
|
||
MOVE A,XPIIP ;GET PI SYSTEM
|
||
PUSHJ P,GETZ ;FROM MONITOR
|
||
ANDI A,77400 ;MASK TO IN-PROGRESS
|
||
JUMPE A,ERRLXX ;SKIP IF NONE
|
||
MOVSI B,-^D8 ;SET UP COUNT
|
||
MOVEI M,[ASCIZ / PIs in prog=/]
|
||
ERRLPX: AOBJP B,ERRLXX ;COUNT EACH CHANNEL
|
||
LSH A,1 ;POSITION BITS
|
||
TRNN A,100000 ;SEE IF ON
|
||
JRST ERRLPX ;LOOP IF NOT
|
||
HRRZ N,B ;GET CHANNEL NUMBER
|
||
PUSHJ P,MSGDEC ;OUTPUT NUMBER
|
||
MOVEI M,[ASCIZ /,/]
|
||
JRST ERRLPX ;LOOP FOR MORE
|
||
ERRLXX: PUSHJ P,CRLF ;END LINE
|
||
|
||
ERRLX0: MOVE A,MONVER ;IS MONITOR .GT. 5.04?
|
||
CAIGE A,50400
|
||
JRST ERRLX2 ;NO, "JOB" IS 150
|
||
MOVEI A,20 ;YES, "JOB" IS 20. GET IT.
|
||
PUSHJ P,PEEKA
|
||
TLNN A,-1 ;DUAL PROCESSOR?
|
||
JRST ERRLX3 ;NO, PRINT C(JOB)
|
||
MOVEI M,[ASCIZ /Job (CPU1,,CPU0) /]
|
||
HLRZ N,A ;GET CPU1 JOB
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ /,,/]
|
||
HRRZ N,A ;GET CPU0 JOB
|
||
PUSHJ P,MSGDEC ;PRINT IT
|
||
JRST ERRLX4 ;DONE WITH C(JOB)
|
||
|
||
ERRLX2: MOVEI A,150 ;GET JOB (FOR MONITOR OLDER THAN 5.04)
|
||
PUSHJ P,PEEKA ;FROM MONITOR
|
||
ERRLX3: MOVE N,A ;MOVE TO OUTPUT
|
||
MOVEI M,[ASCIZ /job /]
|
||
PUSHJ P,MSGDEC ;OUTPUT IT
|
||
ERRLX4: MOVEI A,30 ;READ LOCATION 30
|
||
PUSHJ P,PEEKA ;FROM MONITOR
|
||
MOVE N,A ;SETUP FOR OUTPUT
|
||
MOVEI M,[ASCIZ / C(30) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
PUSHJ P,CRLF ;NEW LINE
|
||
MOVE A,XAPRCN ;GET APR CONI
|
||
PUSHJ P,GETZ ;FROM CRASH
|
||
ANDI A,7 ;GET CHANNEL OF APR
|
||
ADDI A,40(A) ;GET 40+2*A
|
||
PUSHJ P,PEEKA ;LOOK IN CORE AS JSR FOR CLOCK
|
||
ANDI A,-1 ;CLEAR JUNK
|
||
CAML A,DSKFLG ;MAKE SURE IT IS OK
|
||
JRST ERRNCL ;NO--SKIP THIS LINE
|
||
PUSHJ P,PEEKA ;GET PC AT LAST CLOCK
|
||
MOVE N,A ;MOVE TO OUTPUT
|
||
MOVEI M,[ASCIZ /PC at trap /]
|
||
PUSHJ P,MSGOCT ;OUTPUT LINE
|
||
PUSHJ P,CRLF ;AND END LINE
|
||
PUSHJ P,GETBTH ;GET IT AND IT-1
|
||
JRST ERRNCL ;SKIP IF JUNK
|
||
MOVE N,C ;GET -1
|
||
MOVEI M,[ASCIZ /C(PCT-1) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
MOVE N,A ;GET IT
|
||
MOVEI M,[ASCIZ / C(PCT) /]
|
||
PUSHJ P,MSGOCT ;PRINT IT
|
||
PUSHJ P,CRLF ;END OF LINE
|
||
|
||
ERRNCL: HLRZ A,D ;GET PC
|
||
PUSHJ P,GETBTH ;GET IT AND IT-1
|
||
JRST ERRNPC ;SKIP IF BAD
|
||
MOVE N,C ;GET -1
|
||
MOVEI M,[ASCIZ /C(PC-1) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
MOVE N,A ;GET IT
|
||
MOVEI M,[ASCIZ / C(PC) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
PUSHJ P,CRLF ;END LINE
|
||
|
||
ERRNPC: HRRZ A,D ;GET MA
|
||
PUSHJ P,GETBTH ;GET IT AND IT-1
|
||
JRST ERRNMA ;SKIP IF BAD
|
||
MOVE N,C ;GET MA-1
|
||
MOVEI M,[ASCIZ /C(MA-1) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
MOVE N,A ;GET MA
|
||
MOVEI M,[ASCIZ / C(MA) /]
|
||
PUSHJ P,MSGOCT ;OUTPUT IT
|
||
PUSHJ P,CRLF ;END LINE
|
||
|
||
ERRNMA:
|
||
|
||
> ;END REPEAT 0 OF HISTORICAL STUFF
|
||
ERRXIT: CAIN WD,L.ERR ;SEE IF JUST THIS DISPLAY
|
||
JRST FINIS ;YES--END
|
||
JRST DP ;NO--PROCEED
|
||
|
||
ERRTB1:
|
||
XMNVER: EXP %CNVER
|
||
EXP %SYERR
|
||
EXP %SYDEL ;DISABLED ERROR COUNT
|
||
EXP %CNPOK
|
||
EXP %CNPUC
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVTPE+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVSPE+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVMPC+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVMPA+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVMPW+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVMPP+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
EXP %NSEPO
|
||
EXP %NSEPR
|
||
EXP %NSABC
|
||
EXP %NSABA
|
||
EXP %SYNCP
|
||
EXP %VMSPF
|
||
EXP %VMSPF
|
||
EXP %VMMPC
|
||
EXP %SCNRI
|
||
EXP %SCNXI
|
||
EXP %SCNEI
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVTUC+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVTJC+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
EXP %CVNRI
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
EXP %CVNXI
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
EXP %CVNEI
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVFBI+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVFBO+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVSBI+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
EXP %CVSBO+CPUN+CPUN
|
||
>
|
||
ALLCPUS
|
||
EXP %SYNDS ;NUMBER OF DEBUG STOPCDS
|
||
EXP %SYNJS ;NUMBER OF JOB STOPCDS
|
||
EXP %SYNCS ;NUMBER OF CPU STOPCDS
|
||
ERRTL1==.-ERRTB1
|
||
|
||
;ERROR PRINT MESSAGES:
|
||
; BIT 0 - PRINT COUNT IN OCTAL
|
||
; BIT 1 - PRINT COUNT AS DECIMAL HALF WORDS
|
||
; BIT 2 - PRINT AVERAGE NUMBER OF OCCURRENCES/SECOND
|
||
; BIT 3 - PRINT AVERAGE NUMBER OF OCCURRENCES/MINUTE
|
||
; BIT 4 - PRINT FOR CPU1
|
||
; BIT 5 - PRINT FOR CPU2
|
||
; BIT 6 - PRINT FOR CPU3
|
||
; BIT 7 - PRINT FOR CPU4
|
||
; BIT 8 - PRINT FOR CPU5
|
||
; BIT 9 - USE SYSUPT, NOT .C0UPT
|
||
; BIT 11 - DATA IS FROM A CDB GETTAB SUBTABLE ;
|
||
; BIT 12 - DATA IS IN THE LEFT HALF WORD
|
||
; BIT 13 - DATA IS IN THE RIGHT HALF WORD
|
||
|
||
ERRTM1:
|
||
1B0+[ASCIZ / = Monitor version/]
|
||
[ASCIZ /. = System wide hardware error count/]
|
||
[ASCIZ /. = Number of errors for which logging was disabled/]
|
||
1B0+[ASCIZ / = Address of last POKE uuo/]
|
||
1B1+[ASCIZ /. = lh=job that POKEd, rh=# of POKEs/]
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = user memory parity errors on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = spurious memory parity errors on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = continues after memory parity errors on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ / = address of last memory parity error on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ / = contents of last memory parity error on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B0
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ / = PC of last memory parity error on CPU'CPUN/]
|
||
>
|
||
ALLCPUS
|
||
1B2+[ASCIZ /. = EXEC PDL overflows (/]
|
||
1B2+[ASCIZ /. = recovered EXEC PDL overflows (/]
|
||
[ASCIZ /. = address breaks/]
|
||
1B0+[ASCIZ /. = switches on last address break/]
|
||
1B3+1B9+[ASCIZ /. = Number of commands processed (/]
|
||
1B2+1B9+1B12+[ASCIZ /. = Number of not in working set page faults (/]
|
||
1B2+1B9+1B13+[ASCIZ /. = Number of in working set page faults (/]
|
||
1B2+1B9+[ASCIZ /. = Number of modified page faults (/]
|
||
1B2+1B9+[ASCIZ /. = Total number of characters received (/] ;
|
||
1B2+1B9+[ASCIZ /. = Total number of characters transmitted (/] ;
|
||
1B2+1B9+[ASCIZ /. = Total number of characters echoed (/] ;
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of UUOs executed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of context switches on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
ZZZ==1B2+1B11
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of characters received on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
ZZZ==1B2+1B11
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of characters transmitted on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),< ;
|
||
ZZZ==1B2+1B11
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of characters echoed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of disk reads executed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of disk writes executed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of swap reads executed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
DEFINE EACHCPU(CPUN),<
|
||
ZZZ==1B2
|
||
IFG CPUN,<ZZZ==ZZZ!1B<4+CPUN-1>>
|
||
ZZZ+[ASCIZ /. = Number of swap writes executed on CPU'CPUN (/]
|
||
>
|
||
ALLCPUS
|
||
[ASCIZ /. = Number of DEBUG STOPCDs/]
|
||
[ASCIZ /. = Number of JOB STOPCDs/]
|
||
[ASCIZ /. = Number of CPU STOPCDs/]
|
||
SUBTTL "P" - PERFORMANCE OF DISKS INCLUDING ERRORS
|
||
|
||
DP: PUSHJ P,CRLF
|
||
LDB D,DSKLEV ;DISK LEVEL NO. FROM STATES WORD
|
||
SKIPE D ;BEFORE 5.01?
|
||
SKIPE TNFRTY ;NO, SEE IF 10/40N
|
||
JRST SWFIN ;YES--SKIP DISK PERFORMANCE
|
||
CAIN WD,L.DPO ;"P" TYPED?
|
||
PUSHJ P,THISIS ;YES--GIVE SYSTEM HEADER
|
||
MOVEI M,[ASCIZ .
|
||
Disk performance statistics:
|
||
.]
|
||
PUSHJ P,MSG
|
||
SETZM CURFS
|
||
TRZ F,FR.NFS ;CLEAR "NOT IN A F/S" CODE FLAG
|
||
MOVEI M,[ASCIZ .Unit or F/S
|
||
BR BW DR DW XR XW MR MW
|
||
.]
|
||
PUSHJ P,MSG
|
||
|
||
MOVE A,XSYSST ;SYS STR LIST POINTER
|
||
PUSHJ P,GETA
|
||
FLFSL: HLRZ C,A
|
||
JUMPE C,FLNFS ;IF 0, GO TO UNITS NOT IN ANY F/S
|
||
MOVEM C,CURFS ;C GETS CLOBBERED LATER
|
||
MOVEI A,STRNAM(C)
|
||
PUSHJ P,PEEKA
|
||
JUMPE A,FLFSN ;GET NEXT STRUCTURE IF STRUCTURE NAME IS NULL;
|
||
PUSHJ P,CRLF ;MAKE IT EASIER TO PICK OUT A STR
|
||
PUSHJ P,SIXBP ;TYPE F/S NAME
|
||
MOVEI M,[ASCIZ/:/] ;PRETTY IT UP
|
||
PUSHJ P,MSG ;PRINT IT OUT
|
||
PUSHJ P,TAB
|
||
MOVEI A,STRTAL(C) ;GET BLOCKS LEFT
|
||
PUSHJ P,PEEKA
|
||
MOVE N,A
|
||
PUSHJ P,DECPRT ;PRINT IT
|
||
MOVEI M,[ASCIZ . Free
|
||
.]
|
||
PUSHJ P,MSG
|
||
;UNIT STUFF HERE
|
||
|
||
MOVEI A,STRUNI(C)
|
||
PUSHJ P,PEEKA
|
||
FLUNL: HLRZ D,A ;D NOW POINTS TO THE UDB
|
||
JUMPE D,FLFSN ;DONE ALL UNITS?
|
||
FLUNL1: MOVEM D,UNIBLK ;SET POINTER FOR USE BY ERROR STATISTICS CODE
|
||
movsi n,-6 ;6 read write varibles
|
||
hrri n,unibrc(d) ;start at unibrc
|
||
flu000: hrrz a,n ;get the address
|
||
pushj p,peeka ;get the count
|
||
jumpn a,flu010 ;non zero then report
|
||
aobjn n,flu000 ;try next entry
|
||
CALL GETDES ;GET UNIDES
|
||
tlne a,210000 ;ofline zero mount
|
||
pjrst flunn ;next unit
|
||
ldb a,[point 2,a,8] ;uniust field
|
||
jumpn a,flunn ;unit is not mounted
|
||
flu010: PUSHJ P,SPACE ;MAKE IT EASIER TO PICK OUT A UDB
|
||
MOVEI A,UNINAM(D) ;GET PHYSICAL UNIT NAME
|
||
PUSHJ P,PEEKA
|
||
MOVEM A,DSKBLK ;SAVE NAME IN CASE WE MUST DO DSKCHR UUO
|
||
PUSHJ P,SIXBP
|
||
MOVEI M,[ASCIZ /(/]
|
||
PUSHJ P,MSG
|
||
MOVEI A,UNIHID(D)
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
PUSHJ P,SIXBP
|
||
MOVEI M,[ASCIZ /) /] ;TAKE OUT :
|
||
SKIPE DOALT ;DOING ALTERNATE?
|
||
JRST FLSEEK ;YES,DON'T PRINT "FREE" AGAIN
|
||
CALL GETTAL ;GET UNITAL
|
||
MOVE N,A
|
||
PUSHJ P,MSGDEC
|
||
MOVEI M,[ASCIZ . Free, .]
|
||
FLSEEK: PUSHJ P,MSG ;
|
||
MOVEI A,UNIUSC
|
||
PUSHJ P,GETUDB
|
||
MOVEI A,UNIMSC
|
||
ADD A,UDBOFS
|
||
ADD A,UNIBLK
|
||
PUSHJ P,PEEKA
|
||
ADD N,A
|
||
MOVEI M,[ASCIZ / Seeks
|
||
/]
|
||
PUSHJ P,DECMSG
|
||
MOVSI C,-UDTBL
|
||
FLUNL3: HRRZ A,UDTAB(C)
|
||
CAIE A,UNIXRA ;THIS OFFSET CHANGED IN 50634
|
||
JRST FLUNL0 ;NO SKIP UPDATE
|
||
CALL GETXRA ;GET UNIXRA
|
||
SKIPA N,A ;SKIP GET UDB
|
||
FLUNL0: PUSHJ P,GETUDB
|
||
HLRE A,UDTAB(C)
|
||
JUMPE A,FLUNLA
|
||
JUMPL A,FLDIFF
|
||
MOVE A,STATES
|
||
TLNN A,(CANXRC)
|
||
MOVEI N,0
|
||
PUSH P,N
|
||
TLZ N,-1
|
||
PUSHJ P,TAB
|
||
PUSHJ P,DECPRT
|
||
POP P,N
|
||
HLRZ N,N
|
||
JRST FLUNLA
|
||
|
||
FLDIFF: MOVNS A
|
||
ADD A,UNIBLK
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
SUB N,A
|
||
FLUNLA: PUSHJ P,TAB
|
||
PUSHJ P,DECPRT
|
||
AOBJN C,FLUNL3
|
||
FLUN2: PUSHJ P,CRLF
|
||
TLZ F,FL.NBK+FL.DEV
|
||
PUSHJ P,SETDES ;GET DSKCHR BITS
|
||
TLZ A,BITMSK
|
||
JUMPE A,FLUN4
|
||
PUSHJ P,SPACE
|
||
TLO F,FL.NBK
|
||
MOVSI C,-BITTL
|
||
FLBTL: SKIPGE A
|
||
PUSHJ P,PRTBIT
|
||
LSH A,1
|
||
AOBJN C,FLBTL
|
||
FLUN4: LDB C,DSKLEV ;DISK LEVEL NO.
|
||
CAILE C,1 ;5.01, 5.02 OR EARLIER?
|
||
JRST FLUN5 ;NO, MUST BE 5.03 OR LATER
|
||
|
||
;HERE TO DO 5.01, OR 5.02 UNIT ERROR INFO
|
||
MOVSI C,-UERRTL
|
||
FLUNL4: HLRZ A,UERRT1(C)
|
||
PUSHJ P,GETUDB
|
||
HRRZ M,UERRT1(C)
|
||
XCT UERRT2(C)
|
||
PUSHJ P,@UERRT3(C)
|
||
AOBJN C,FLUNL4
|
||
JRST FLUNN0 ;FINISHED
|
||
|
||
;HERE TO DO 5.03 OR LATER UNIT ERROR INFO
|
||
FLUN5: MOVSI C,-UER2TL
|
||
FLUNL5: HLRZ A,UER2T1(C)
|
||
PUSHJ P,GETUDB
|
||
HRRZ M,UER2T1(C)
|
||
XCT UER2T2(C)
|
||
PUSHJ P,@UER2T3(C)
|
||
AOBJN C,FLUNL5
|
||
FLUNN0: TLNE F,FL.NBK+FL.DEV
|
||
PUSHJ P,CRLF
|
||
SKIPE A,DOALT ;ARE WE DOING ALTERNATE PATH?
|
||
JRST FLMAIN ;YES, GO BACK TO MAIN FOR NEXT
|
||
SKIPN FTDUAL ;DUAL PORTED SUPPORT?
|
||
JRST FLUNN ;NO, SKIP ALTERNATE PATH LOGIC
|
||
MOVEI A,UNI2ND(D) ;GO GET ALTERNATE PART WORD
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA ;0 IF NOT DUAL PORTED,
|
||
;0,,ALTERNATE UDB ADDRESS IF MAIN
|
||
;-1,,MAIN UDB ADDRESS IF ALTERNATE
|
||
;400000,,ALTERNATE IF MAIN ON OTHER CPU
|
||
;400001,,MAIN IF ALTERNATE ON OTHER CPU
|
||
JUMPE A,FLUNN ;GO IF NOT DUAL PORTED
|
||
TLNN A,1 ;SKIP IF DOING ALTERNATE NOW
|
||
JRST FLALT ;SET UP TO DO ALTERNATE
|
||
|
||
FLUNN: TRNE F,FR.NFS
|
||
JRST FLNFS2
|
||
flunn2: MOVEI A,UNISTR(D)
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
JRST FLUNL
|
||
|
||
FLFSN: MOVE C,CURFS
|
||
MOVEI A,STRSYS(C)
|
||
PUSHJ P,PEEKA
|
||
JRST FLFSL ;LOOP FOR NEXT STRUCTURE
|
||
|
||
FLALT: AOS DOALT ;REMEMBER DOING ALTERNATE
|
||
MOVEM D,MAIND ;REMEMBER MAIN UDB (D)
|
||
HRLZ A,A ;PUT UDB (OF ALT) ADDR IN LEFT
|
||
JRST FLUNL ;GO THROUGH THIS LOOP AGAIN
|
||
|
||
FLMAIN: MOVE D,MAIND ;RESTORE D
|
||
SETZM DOALT ;RESET ALTERNATE FLAG
|
||
JRST FLUNN
|
||
SETDES: TLNE F,FL.DSK ;DISK MODE?
|
||
JRST SETDE2 ;YES
|
||
MOVE A,[XWD 1,DSKBLK]
|
||
DSKCHR A, ;NOTE! THIS IS THE ONLY WAY TO GET THE "SWP" BIT
|
||
SETZ A,
|
||
SETDE1: HLLZ A,A ;CLEAR OUT RH
|
||
POPJ P,0
|
||
|
||
SETDE2: CALL GETDES ;GET UNIDES
|
||
HLLZ B,A ;SAVE UNIDES
|
||
SKIPN C,CURFS ;GET F/S
|
||
JRST SETDE1 ;RETURN IF NOT IN A F/S
|
||
MOVEI A,STRMNT(C)
|
||
PUSHJ P,PEEKA
|
||
CAIN A,0 ;ZMT?
|
||
TLO B,UNPZMT
|
||
MOVEI A,STRJOB(C)
|
||
PUSHJ P,PEEKA
|
||
CAILE A,0 ;SAF?
|
||
TLO B,UNPSAF
|
||
HLLZ A,B
|
||
POPJ P,0
|
||
;NOTE THAT SWP IS NEVER ON IF /X
|
||
|
||
;CODE FOR UNITS NOT IN ANY F/S
|
||
FLNFS: TRO F,FR.NFS!FR.NFP
|
||
SETZM CURFS
|
||
MOVE A,XSYSUN ;SYSTEM UNIT LIST POINTER
|
||
PUSHJ P,GETA
|
||
FLNFS1: HLRZ D,A
|
||
JUMPE D,FILEXI
|
||
MOVEI A,UNISTR(D)
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
JUMPE A,FLNFS3 ;JUMP IF NOT IN A F/S
|
||
FLNFS2: MOVEI A,UNISYS(D)
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
JRST FLNFS1
|
||
FLNFS3: MOVEI M,[ASCIZ .Units not in any File Structure:
|
||
.]
|
||
TRZE F,FR.NFP
|
||
PUSHJ P,MSG
|
||
JRST FLUNL1
|
||
FILEXI:
|
||
SW: MOVEI M,[ASCIZ!
|
||
Active swapping/paging statistics:
|
||
Class Unit Swap Swap Page Page Used(!] ;EXPANDED HEADER
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ/K)
|
||
/]
|
||
SKIPE CPKI10
|
||
MOVEI M,[ASCIZ/P)
|
||
/]
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ/ Reads Writes Reads Writes
|
||
/]
|
||
PUSHJ P,MSG
|
||
MOVE A,XSWPUN
|
||
PUSHJ P,GETA
|
||
MOVEM A,SWPUNI
|
||
HLRZ D,A
|
||
MOVE A,[%CNK4S] ;GET OFFSET OF UNIK4S
|
||
GETTAB A, ;ASK MONITOR WHERE IT PUT IT
|
||
TDZA A,A ;* OLD MONITOR
|
||
SUB A,UDBOFS ;REMOVE UDB OFFSET PRTSRW WILL ADD IN LATER
|
||
MOVEM A,UNOK4S ;SAVE OFFSET OF UNIK4S
|
||
SWLP1: MOVEI M,[ASCIZ/ /]
|
||
PUSHJ P,MSG
|
||
MOVEI A,UNISWP(D)
|
||
ADD A,UDBOFS ;ADD 10 IF 7.04
|
||
PUSHJ P,PEEKA
|
||
LDB N,[POINT 3,A,22];SWAPPER CLASS
|
||
PUSHJ P,DECTAB
|
||
PUSHJ P,PRTSRW ;PRINT SWAP STATISTICS
|
||
MOVEI A,UNIFKS(D)
|
||
PUSHJ P,PEEKA
|
||
MOVEM A,N
|
||
SKIPE A,UNOK4S ;OFFSET OF UNIK4S KNOWN?
|
||
JRST [ADDI A,(D) ; YES - GET ITS ADDRESS
|
||
JRST SWLP1A] ; AND USE IT.
|
||
;NO - TRY THE OLD WAY
|
||
MOVEI A,UNIK4S(D) ;7.02 AND EARLIER VALUE
|
||
MOVE B,MONVER
|
||
CAILE B,70207 ;PRE 7.03?
|
||
MOVEI A,111(D) ;NO, ASSUME 7.03 VALUE
|
||
SKIPE UDBOFS ;REALLY 7.04?
|
||
MOVEI A,107(D) ;YES, USE 7.04 VALUE
|
||
SWLP1A: PUSHJ P,PEEKA
|
||
MOVE B,MONVER
|
||
CAILE B,70207
|
||
TLZA B,-1
|
||
ANDI A,MSKK4S
|
||
SKIPE CPKI10 ;A KA10
|
||
LSH A,1 ;NO SHIFT ONE MORE
|
||
MOVEM A,TEMP
|
||
SUBB A,N
|
||
MOVEI M,[ASCIZ / /]
|
||
PUSHJ P,PRPCNT
|
||
SKIPN FTDUAL ;DUAL PORT SUPPORT?
|
||
JRST SWLP2 ;NO, SKIP ALTERNATE PORT LOGIC
|
||
MOVEI A,UNI2ND(D) ;ALTERNATE PORT
|
||
PUSHJ P,PEEKA ;PEEK IT
|
||
JUMPE A,SWLP2 ;NONE,DON'T OUTPUT
|
||
PUSH P,D ;SAVE PRIME PORT ADDR
|
||
MOVE D,A ;SET UP FOR ALTERNATE UDB
|
||
PUSHJ P,TAB ;BE NEAT
|
||
PUSHJ P,PRTSRW ;PRINT SWAP STATISTICS
|
||
PUSHJ P,CRLF ;NEXT LINE
|
||
POP P,D ;RESTORE MAIN UDB ADDR
|
||
SWLP2: MOVEI A,UNISWP(D) ;GET NEXT UDB
|
||
PUSHJ P,PEEKA
|
||
HLRZ D,A
|
||
JUMPN D,SWLP1
|
||
PUSHJ P,CRLF
|
||
;HERE TO CHECK FOR SWAP READ ERRORS
|
||
MOVE A,XSWPER
|
||
PUSHJ P,GETZ
|
||
JUMPE A,SWFIN
|
||
MOVE D,A
|
||
MOVEI M,[ASCIZ /
|
||
Swap errors: /]
|
||
PUSHJ P,MSG
|
||
HLRZ N,D
|
||
PUSHJ P,DECTAB
|
||
MOVEI M,[ASCIZ / CHK/]
|
||
TRZE D,IOIMPM
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ / DEV/]
|
||
TRZE D,IODERR
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ / DAT/]
|
||
TRZE D,IODTER
|
||
PUSHJ P,MSG
|
||
MOVEI M,[ASCIZ / K Lost: /]
|
||
SKIPE CPKI10
|
||
MOVEI M,[ASCIZ / P Lost: /]
|
||
HRRZ N,D
|
||
TRZ N,770000 ;**[6] FIRST 3 ARE NOT NEEDED,BUT
|
||
PUSHJ P,MSGDEC
|
||
PUSHJ P,CRLF
|
||
SWFIN: JRST FINIS
|
||
|
||
;SUBROUTINE TO PRINT SWAP READS/WRITES FOR A UNIT
|
||
|
||
PRTSRW: MOVEI A,UNINAM(D) ;UNIT NAME
|
||
PUSHJ P,PEEKA ;PEEK FOR IT
|
||
PUSHJ P,SIXBP ;SIXBIT OUTPUT
|
||
PUSHJ P,TAB ;BE NEAT
|
||
ADD D,UDBOFS ;ADD IN UDB OFFSET (10 IF 7.04)
|
||
MOVEI A,UNIICT(D) ;# BLOCKS SWAPPED IN
|
||
PUSHJ P,PEEKA ;GET IT
|
||
MOVE N,A ;SET UP FOR DECTAB
|
||
PUSHJ P,DECTAB ;DECIMAL OUTPUT
|
||
MOVEI A,UNIOCT(D) ;# BLOCKS SWAPPED OUT
|
||
PUSHJ P,PEEKA ;GO PEEK
|
||
MOVE N,A ;SET UP FOR DECTAB
|
||
PUSHJ P,DECTAB ;DO OUTPUT
|
||
MOVEI A,UNIPCI(D) ;# BLOCKS SPAGED IN
|
||
PUSHJ P,PEEKA ;GET IT
|
||
MOVE N,A ;SET UP FOR DECTAB
|
||
PUSHJ P,DECTAB ;DECIMAL OUTPUT
|
||
MOVEI A,UNIPCO(D) ;# BLOCKS PAGED OUT
|
||
PUSHJ P,PEEKA ;GO PEEK
|
||
MOVE N,A ;SET UP FOR DECPRT
|
||
PJRST DECPRT ;DO OUTPUT
|
||
SUBTTL ROTINES TO SETDES UNITAL AND UNIXRA FROM THE UDB
|
||
|
||
;ALL USE D TO STORE THE UDB ADDRESS FROM UNIBLK
|
||
;CLOBBER B AND RETURN THE VALUE IN A
|
||
|
||
GETTAL: MOVE D,UNIBLK ;GET UDB ADDRESS
|
||
MOVEI A,UNITAL(D) ;AND ENTRY
|
||
CALL UPDADR ;UPDATE THE ADDRESS
|
||
LDB B,DSKLEV ;GET VERSION
|
||
CAIG B,1 ;SEE HOW OLD
|
||
MOVEI A,UNITL1(D) ;REUPDATE
|
||
PJRST PEEKA ;AND GET THE VALUE
|
||
|
||
GETDES: MOVE D,UNIBLK ;GET THE UDB ADDRESS
|
||
MOVEI A,UNIDES(D) ;GET THE ENTRY
|
||
CALL UPDADR ;UPDATE THE ADDRES
|
||
LDB B,DSKLEV ;GET THE DISK VERSION
|
||
CAIG B,1 ;SEE HOW OLD
|
||
MOVEI A,UNIDE1(D) ;SO CHANGE
|
||
PJRST PEEKA ;AND GET IT
|
||
|
||
GETXRA: MOVE D,UNIBLK ;GET UDB ADDRES
|
||
MOVEI A,UNIXRA(D) ;AND ENTRY
|
||
hrrz b,monver ;get monitor version
|
||
cail b,50750 ;if 602 then
|
||
subi a,1 ;one less
|
||
CALL UPDADR ;UPDATE THE ADDRESS
|
||
PJRST PEEKA ;AND PEEK
|
||
|
||
|
||
UPDADR: HRRZ B,MONVER ;GET VERSION
|
||
CAIL B,50634 ;HERE UNITAL XRA AND DES BECAME 3 LARGER
|
||
ADDI A,3 ;SO UPDATE
|
||
TXNE F,FR.VMF ;IF VM THEN
|
||
ADDI A,2 ;ADD ANOTHER 2
|
||
ADD A,UDBOFS ;ALSO BUMP BY OFFSET IF LATER THAN 70307
|
||
RETURN
|
||
|
||
;OFFSET IN A GETS CONTENTS INTO N
|
||
|
||
GETUDB: ADD A,UNIBLK
|
||
ADD A,UDBOFS
|
||
PUSHJ P,PEEKA
|
||
MOVE N,A
|
||
POPJ P,
|
||
PRTBIT: MOVE M,BITTAB(C) ;NOW A LITERAL
|
||
PUSHJ P,MSG
|
||
PUSHJ P,SPACE
|
||
POPJ P,0
|
||
|
||
PRTUED: JUMPE N,CPOPJ
|
||
PUSH P,M
|
||
MOVEI M,[ASCIZ / Errors: /]
|
||
TLON F,FL.DEV
|
||
PUSHJ P,MSG
|
||
POP P,M
|
||
PUSHJ P,MSGDEC
|
||
PUSHJ P,PERIOD ;NOW EVERYBODY KNOWS IT IS DECIMAL
|
||
JRST SPACE
|
||
|
||
PRTUEO: JUMPE N,CPOPJ
|
||
PUSH P,M
|
||
MOVEI M,[ASCIZ / Errors: /]
|
||
TLON F,FL.DEV
|
||
PUSHJ P,MSG
|
||
POP P,M
|
||
PUSHJ P,MSG
|
||
PUSHJ P,OCTPRT
|
||
JRST SPACE
|
||
|
||
BITTAB: [ASCIZ /Reread home blocks/] ;RHB
|
||
[ASCIZ /Offline/] ;OFL
|
||
[ASCIZ /Hardware write protect/] ;HWP
|
||
[ASCIZ /Software write protect/] ;SWP
|
||
[ASCIZ /Single access/] ;SAF
|
||
[ASCIZ /Zero mount count/] ;ZMT
|
||
[ASCIZ /Private/] ;PRF
|
||
[ASCIZ /Pack not mounted/] ;PNM
|
||
[ASCIZ /Down/] ;DWN
|
||
[ASCIZ /Multiple SAT blocks/] ;MSB
|
||
[ASCIZ /No new accesses/] ;NNA
|
||
BITTL=.-BITTAB
|
||
|
||
BITMSK=77 ;CLEAR, LEAVING BITS IN 777700,,0
|
||
|
||
UDTAB: XWD 0,UNIBRC
|
||
XWD 0,UNIBWC
|
||
XWD 0,UNIDRC
|
||
XWD 0,UNIDWC
|
||
XWD 1,UNIXRA
|
||
XWD -UNIICT,UNIMRC
|
||
XWD -UNIOCT,UNIMWC
|
||
UDTBL==.-UDTAB
|
||
;5.01 AND 5.02 MONITOR ERROR INFO TABLES:
|
||
|
||
UERRT1: XWD UNIHCT,[ASCIZ /HDEV:/]
|
||
XWD UNIHCT,[ASCIZ /HDAT:/]
|
||
XWD UNISCT,[ASCIZ /SDEV:/]
|
||
XWD UNISCT,[ASCIZ /SDAT:/]
|
||
XWD UNIPCT,[ASCIZ /HPOS:/]
|
||
XWD UNIPCT,[ASCIZ /SPOS:/]
|
||
XWD UNIMCT,[ASCIZ /SER:/]
|
||
XWD UNIMCT,[ASCIZ /RER:/]
|
||
XWD UNIMCT,[ASCIZ /CER:/]
|
||
XWD UNIERR,[ASCIZ /HERR status:/]
|
||
XWD UNISOF,[ASCIZ /SERR status:/]
|
||
XWD UNIHBN,[ASCIZ /LBN:/]
|
||
UERRTL==.-UERRT1
|
||
|
||
UERRT2: HLRZS N
|
||
HRRZS N
|
||
HLRZS N
|
||
HRRZS N
|
||
HLRZS N
|
||
HRRZS N
|
||
LDB N,[POINT 12,N,11]
|
||
LDB N,[POINT 12,N,23]
|
||
ANDI N,7777
|
||
JFCL
|
||
JFCL
|
||
JFCL
|
||
|
||
UERRT3: PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUEO
|
||
PRTUEO
|
||
PRTUEO
|
||
;5.03 AND LATER MONTIORS ERROR INFO TABLES:
|
||
|
||
|
||
UER2T1: XWD UNIHCT,[ASCIZ /Hard Device:/] ;HDEV
|
||
XWD UNIHCT,[ASCIZ /Hard Data:/] ;HDAT
|
||
XWD UNISCT,[ASCIZ /Soft Device:/] ;1DEV
|
||
XWD UNISCT,[ASCIZ /Soft Data:/] ;1DAT
|
||
XWD UNIECT,[ASCIZ /Retries:/] ;RETRIES
|
||
XWD UNIMCT,[ASCIZ /SAT:/] ;SER
|
||
XWD UNIMCT,[ASCIZ /RIB:/] ;RER
|
||
XWD UNIMCT,[ASCIZ /Checksum:/] ;CER
|
||
XWD UNIERR,[ASCIZ /2nd CONI:/] ;2CONI
|
||
XWD UNISOF,[ASCIZ /1st CONI:/] ;1CONI
|
||
XWD UNIHBN,[ASCIZ /LBN:/]
|
||
XWD UNIHNG,[ASCIZ /Position Hang:/] ;PHUNG
|
||
XWD UNIHNG,[ASCIZ /Soft Transfer Hang:/] ;THUNG
|
||
XWD UNIHNG,[ASCIZ /Hard Transfer Hang:/] ;NTHUNG
|
||
XWD UNIHNG,[ASCIZ /Software Hang:/] ;SHUNG
|
||
XWD UNIHDI,[ASCIZ /2nd DATAI:/] ;2DATAI
|
||
XWD UNISDI,[ASCIZ /1st DATAI:/] ;1DATAI
|
||
UER2TL==.-UER2T1
|
||
|
||
UER2T2: HLRZS N
|
||
HRRZS N
|
||
HLRZS N
|
||
HRRZS N
|
||
ANDI N,77777 ;[324] RETRIES FIELD BITS 15-35
|
||
LDB N,[POINT 12,N,11]
|
||
LDB N,[POINT 12,N,23]
|
||
ANDI N,7777
|
||
JFCL
|
||
JFCL
|
||
JFCL
|
||
LDB N,[POINT 9,N,26]
|
||
LDB N,[POINT 9,N,17]
|
||
LDB N,[POINT 9,N,8]
|
||
LDB N,[POINT 9,N,35]
|
||
JFCL
|
||
JFCL
|
||
UER2T3: PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUEO
|
||
PRTUEO
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUED
|
||
PRTUEO
|
||
PRTUEO
|
||
FINIS: SKIPE JOBINT+2 ;CONTROL C TYPED?
|
||
JRST CTRAP ;YES, GO SERVICE
|
||
PUSHJ P,CRLF
|
||
JUMPE WD,HACKQ ;NO CHS. TYPED--EXIT.
|
||
JUMPL F,HACKQ ;BREAK CH. FOUND--EXIT.
|
||
TRNN F,FR.DSK ;DO NOT CLODE DISK FILE
|
||
CLOSE TTY, ;EMPTY BUFFERS (IN CASE OF TTY ^O)
|
||
AND F,[FL.GOD!FL.LGI!FL.LPT,,FR.CNT!FR.DPY!FR.DSK!FR.INI!FR.END!FR.INC!FR.USR]
|
||
SETZM ONCE ;SET ONCE THRU FLAG
|
||
JRST AGAIN ;GO INTERPRET MORE CHS.
|
||
|
||
|
||
;HERE ON FATAL ERROR
|
||
|
||
BOMB.: OUTSTR [ASCIZ /
|
||
? /]
|
||
OUTSTR (M) ;OUTPUT MESSAGE
|
||
OUTSTR [ASCIZ /
|
||
/]
|
||
CLRBFI ;CLEAR TYPE AHEAD
|
||
JRST EXIT. ;GO BIND OFF JOB
|
||
|
||
;HERE WHEN ^C TYPED
|
||
|
||
CTRAP: TLNN F,FL.LGI ;ARE WE LOGGED IN?
|
||
JRST KILL ;NO, GO KJOB
|
||
PUSH P,JOBINT+2 ;SAVE RETURN
|
||
CLRBFO ;KILL TYPE-AHEAD
|
||
EXIT 1, ;STOP NOW
|
||
SETZM JOBINT+2 ;ALLOW MORE ^CS
|
||
POPJ P, ;CONTINUE WHERE STOPPED
|
||
SUBTTL FINISH UP
|
||
HACKQ: MOVEI M,REENTR ;SET REENTER POINT
|
||
MOVEM M,.JBREN ;SAVE IT
|
||
TRO F,FR.END ;MARK AS HAVING BEEN DONE NOW
|
||
TRNE F,FR.CNT ;ARE WE CONTINUING ?
|
||
JRST SNOOZE ;YES--GO SLEEP FOR AWHILE
|
||
TRNE F,FR.DSK ;KEEP DISK FILES OPEN
|
||
JRST EXIT. ;NO BIRTH DAYS
|
||
CLOSE TTY,
|
||
IFN HACKSW,<
|
||
IFL HACKSW,<
|
||
MOVE A,XAPRSN ;GET SERIAL NUMBER
|
||
PUSHJ P,GETZ ;OF THIS MACHINE
|
||
MOVSI B,-LENHAQ ;SEARCH SPECIAL TABLE
|
||
HAQ1: MOVE C,HAQAPR(B) ;OF MACHINES TO BE
|
||
CAME A,C ;HACKED
|
||
AOBJN B,HAQ1 ;LOOP
|
||
JUMPGE B,EXIT. ;EXIT. IF NOT THIS MACHINE
|
||
>
|
||
SETZB WD,TYOB ;CLEAR WD IN CASE -VE SO PRINTING WILL HAPPEN
|
||
MOVE A,DATE
|
||
IDIVI A,^D31*^D12 ;GET MODULO YEAR
|
||
MOVEM B,DATE
|
||
MOVSI J,-HAKLEN
|
||
JUMPE J,EXIT. ;GO AWAY IF EMPTY TABLE
|
||
HAKLUP: MOVE A,HAKTAB(J)
|
||
HLRZ B,A ;THE DATE FROM TABLE
|
||
ANDI B,7777 ;JUST DATE CODE
|
||
CAME B,DATE ;TODAY?
|
||
JRST HAKNXT ;NO
|
||
PUSHJ P,CRLF2
|
||
MOVEI M,BMSG
|
||
SKIPL A
|
||
PUSHJ P,MSG
|
||
HRRZ M,A
|
||
PUSHJ P,MSG
|
||
PUSHJ P,CRLF
|
||
HAKNXT: AOBJN J,HAKLUP
|
||
>
|
||
JRST EXIT.
|
||
|
||
IFL HACKSW,<
|
||
HAQAPR: DEC 1,2,40,169,513,514,546,1026,1042,2263,2476
|
||
LENHAQ==.-HAQAPR
|
||
>
|
||
NOCOR: MOVEI M,[ASCIZ /?Need more core for data
|
||
|
||
/]
|
||
PUSHJ P,MSG
|
||
EXIT.: CLOSE TTY, ;CLOSE TTY IN CASE OF ^O
|
||
PUSHJ P,GETCHR ;GOBBLE LEFTOVER CHS. UNTIL A BREAK CH. IS SEEN
|
||
TLZA F,FL.BRK ;CLEAR BREAK CHAR FLAG
|
||
JRST .-2
|
||
KILL: TDZ F,[FL.LPT,,FR.INI!FR.DSK] ;EDIT 17 FORGET ALL ABOUT IO
|
||
RELEASE TTY, ;CLEAR BITS, THEN RELEASE TTY
|
||
SKIPN TNFRTY ;EXIT ON 10/40 SYSTEM
|
||
TLNE F,FL.LGI
|
||
pjrst [ EXIT 1,
|
||
pjrst systat] ;restart it
|
||
OUTSTR KJMSG
|
||
LOGOUT
|
||
|
||
KJMSG: ASCII /.KJOB/
|
||
BYTE (7) 15,12,".",0,0
|
||
|
||
MINUTE==^D1 ;THIS IS THE SLEEP TIME
|
||
|
||
SNOOZE: CLOSE TTY, ;CLOSE TTY IN CASE OF ^O
|
||
TLNN F,FL.LGI
|
||
JRST KILL ;NOT LOGGED IN, CAN'T REPEAT
|
||
RELEASE TTY,
|
||
TRZ F,FR.INI ;**[16] NO MORE INITED
|
||
SETZM TYOB ;TO FORCE USE OF TTCALL I/O
|
||
TTCALL 2,M ;JUST TO RESET THE ^O BIT
|
||
JRST SNOOZ1
|
||
CAIN M,3 ;IS IT ^C ?
|
||
EXIT 1,
|
||
CLRBFI
|
||
|
||
SNOOZ1: MOVEI M,^D60/4 ;SECONDS PER MINUTE/4
|
||
MOVSI A,-MINUTE*4 ;HOW MANY MINUTES TO SLEEP*4
|
||
CNTRLC: TTCALL 2,CH ;JUST IN CASE HE TYPED ^C
|
||
JRST ZZZZZ ;NO
|
||
CAIN CH,3 ;IS IT?
|
||
EXIT 1, ;YES
|
||
CLRBFI
|
||
ZZZZZ: CALLI M,31 ;GO TO SLEEP FOR A MINUTE
|
||
AOBJN A,CNTRLC ;DO IT AGAIN AND AGAIN
|
||
TRNE F,FR.INC ;INCREMENTAL MODE?
|
||
JRST REENTR ;YES, GO DO IT.
|
||
JRST CNTLP ;WAKE UP, WORLD! HERE WE GO AGAIN
|
||
SUBTTL HELP
|
||
|
||
HELPM: MOVEI M,[ASCIZ /? Type "SYS H" for Help
|
||
/]
|
||
PUSHJ P,MSG ;TELL ABOUT HELP
|
||
JRST EXIT. ;GO EXIT
|
||
|
||
HELP: OPEN HLP,[EXP <UU.PHS+.IOASC>,<'HLP '>,<0,,IBR>]
|
||
BOMB (Can't open device HLP)
|
||
MOVE A,['SYSTAT'] ;FILE NAME
|
||
MOVSI B,'HLP' ;EXTENSION
|
||
SETZB C,D ;...
|
||
LOOKUP HLP,A ;FIND THE FILE
|
||
BOMB (No help available for SYSTAT)
|
||
PUSH P,.JBFF ;SAVE FIRST FREE
|
||
MOVEI A,IBUF ;POINT TO BUFFER
|
||
MOVEM A,.JBFF ;TELL MONITOR ORIGIN
|
||
INBUF HLP,1 ;BUILD A SINGLE BUFFER
|
||
POP P,.JBFF ;RESTORE FIRST FREE
|
||
HELP1: SOSG IBR+.BFCTR ;COUNT DOWN
|
||
JRST HELP2 ;NEED ANOTHER BUFFER
|
||
ILDB CH,IBR+.BFPTR ;GET A CHARACTER
|
||
SKIPE CH ;IGNORE NULLS
|
||
PUSHJ P,TYO ;PRINT IT
|
||
JRST HELP1 ;LOOP FOR MORE
|
||
HELP2: IN HLP, ;READ A BUFFER
|
||
JRST HELP1 ;CONTINUE
|
||
GETSTS HLP,A ;READ CHANNEL STATUS
|
||
TRNN A,IO.EOF ;END OF FILE?
|
||
BOMB (I/O error reading HLP:SYSTAT.HLP)
|
||
RELEAS HLP, ;TIE OFF CHANNEL
|
||
JRST HACKQ ;DONE
|
||
|
||
;O IS DELIBERATELY NOT TYPED BY HELP
|
||
;ALL JOB STATE CODES ARE LISTED (EVEN THOSE NOT TYPED BY SYSTAT)
|
||
|
||
SUBTTL "X" - INVOKE DSK:CRASH.XPN RATHER THAN RUNNING MONITOR
|
||
;COMMAND FORMAT:
|
||
; 'ANY NONGO SITCHES' X 'ATLEAST ONE SPACE' [FILE NAME]
|
||
; FILE CRASH.XPN IS TAKEN WHEN FILE NAME IS EMPTY
|
||
|
||
SETDSK:
|
||
TLNE F,FL.LGI ;LOGGED IN JOB?
|
||
JRST STDSK1 ;YES
|
||
;
|
||
;IF JOB IS NOT LOGGED IN BUT CONTROLLED BY A [1,*] JOB
|
||
;ALLOW SYSTAT X OTHERWISE BOMB IT OUT
|
||
;
|
||
PJOB A, ;GET CURRENT JOB NUMBER
|
||
CTLJOB A, ;GET CONTROLLING JOB NUMBER
|
||
SETO A, ;NOT IMPLEMENTED
|
||
MOVSI A,(A) ;SET UP TO GETTAB
|
||
HRRI A,.GTPPN ;GET PPN OF CONTROLLING JOB
|
||
GETTAB A, ;DO THE GETTAB
|
||
SETO A, ;ERROR
|
||
TLNN A,-2 ;PROJECT 0 OR 1?
|
||
JRST STDSK1 ;YES..
|
||
BOMB (Job not logged in.) ;BYE BYE
|
||
STDSK1: SETZM INDEV
|
||
SETZM INFILE
|
||
SETZM INEXT
|
||
SETZM INPPN
|
||
PUSHJ P,GETNXT ;GET A SIXBIT FIELD OR ZERO
|
||
JUMPE A,SETDS2 ;CHECK FOR PPN ;NOTHING FOUND THE JUMP
|
||
CAIE WD,":"
|
||
JRST SETDS1
|
||
MOVEM A,INDEV
|
||
PUSHJ P,GETNXT
|
||
JUMPE A,SETDS2 ;IS THERE A FILE
|
||
SETDS1: MOVEM A,INFILE
|
||
CAIE WD,"."
|
||
JRST SETDS2
|
||
PUSHJ P,GETNXT
|
||
JFCL
|
||
MOVEM A,INEXT
|
||
SETDS2: CAIN WD,"["
|
||
PUSHJ P,INPPPN
|
||
SETDS3: PUSHJ P,GETFIL
|
||
BOMB (Can't get at that file)
|
||
MOVSI A,-NBCSHE ;PRIME THE INCORE CACHE POINTERS
|
||
MOVE B,FREE ;FIRST AVAILABLE LOC
|
||
HRROM B,DCACHE(A) ;STORE -1,,BUFFER ADDRESS
|
||
ADDI B,LN.BUF ;STEP TO NEXT DISK BUFFER
|
||
AOBJN A,.-2 ;STORE ALL ENTRIES
|
||
MOVEM B,FREE ;STORE NEXT AVAILABLE FREE CORE ADDR
|
||
CAMG B,.JBREL ;NEED TO EXPAND
|
||
JRST .+3 ;NO
|
||
CORE B, ;GET THE EXTRA CORE
|
||
JRST NOCOR ;WHOOPS
|
||
IFN FTEXE,<
|
||
TRNN F,FR.EXE ;EXE CRASH FILE?
|
||
JRST NOXCRS ;NO
|
||
MOVEI A,0 ;FIRST, LET'S CHECK HEADER WORD
|
||
PUSHJ P,DSKA ;GET FIRST WORD FORM FILE
|
||
HLRZS A ;ISOLATE HEADER CODE
|
||
CAIE A,1776 ;CORRECT?
|
||
BOMB (Bad header code--not an EXE file)
|
||
PUSHJ P,CPYEXE ;COPY EXE FILE DIRECTORY AND RE-COMPUTE DSKFLG
|
||
NOXCRS:
|
||
>;END OF IFN FTEXE
|
||
MOVEI A,ABSTB1 ;GET POINTER TO GETTABS
|
||
DSKJN1: MOVEM A,MAXGTB ;BORROW THIS CELL TO REMEMBER WHICH ABSTAB TRYING
|
||
PUSHJ P,DSKA ;READ IT
|
||
TLNE A,-1 ;MAKE SURE ZERO LH
|
||
JRST DSKJNK ;NO. NOT ABSTAB
|
||
CAMLE A,MAXGTB ;MAKE SURE IT MAKES SOME SENSE
|
||
CAML A,DSKFLG ;..
|
||
JRST DSKJNK ;NO--GIVE UP
|
||
HRRZ B,A ;SAVE FOR TEST LATER
|
||
ADD A,XGTTBI ;ADD OFFSET FOR GETTAB IMMEDIATE
|
||
PUSHJ P,DSKA ;READ THAT PLACE
|
||
CAIE B,(A) ;SEE IF IT MATCHES
|
||
JRST DSKJNK ;NO--MUST BE JUNK
|
||
HRRZM A,OFSGTB ;YES--REMEMBER OFFSET
|
||
LSH A,-^D9 ;GET NUMBER OF TABLES
|
||
HLRZM A,MAXGTB ;SAVE IT
|
||
PUSHJ P,STATE ;GET STATES WORD FROM DUMP
|
||
MOVEI A,TYOCH ;GET ADDRESS OF OUTSTR ROUTINE
|
||
MOVEM A,COMTOA ;STORE TYPE OUT ADDRESS
|
||
MOVEI M,[ASCIZ/
|
||
[/]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,CRSMSG ;TYPE MONITOR NAME, DATE, TIME
|
||
MOVE A,[%SYSPC] ;GET LAST STOPCODE DATA
|
||
PUSHJ P,GETZ ;GET IT OR A ZERO
|
||
JUMPE A,SETDS4 ;THERE WAS NO STOPCD
|
||
PUSH P,A ;SAVE STOPCD INFO
|
||
MOVE A,[%SYSCD] ;STOPCD NAME IN 7.03 OR LATER
|
||
PUSHJ P,GETZ ;GET IT OR ZERO
|
||
SKIPN BP,A ;IS THERE A NEW NAME?
|
||
HLLZ BP,(P) ;NO, COPY OLD STOP CODE NAME
|
||
POP P,(P) ;POP OFF JUNK
|
||
MOVEI M,[ASCIZ/, stopcode /]
|
||
PUSHJ P,MSG ;TELL WHAT IT IS
|
||
PUSHJ P,SIXBP1 ;TYPE STOPCD NAME
|
||
SETDS4: MOVEI M,[ASCIZ/]
|
||
/]
|
||
PUSHJ P,MSG
|
||
SETZM COMTOA ;USE DEFAULT TYPEOUT
|
||
MOVE A,XPDBPT ;SET UP PDB POINTER FOR CRASH FILE
|
||
PUSHJ P,GETZ ;SEE IIF IT IS THERE
|
||
MOVEM A,PDBPTR ;STORE ZERO OR VALUE
|
||
MOVE A,XMNVER ;GET CRASHED MONITORS
|
||
CALL GETZ ;VERSION INTO A
|
||
HRRZS A ;STRIP OFF NOISE BITS
|
||
MOVEM A,MONVER ;AND STORE IT AWAY
|
||
CAIGE A,70310 ;7.04?
|
||
TDZA B,B ;NO, EARLIER MONITOR
|
||
MOVEI B,12 ;YES, UDB OFFSETS CHANGED AGAIN, SIGH!
|
||
MOVEM B,UDBOFS ;REMEMBER OFFSET
|
||
CAIGE A,60122 ;OLD STYLE IF LESS
|
||
CAIGE A,60000 ;AN OLD MONITOR
|
||
CAIGE A,50722 ;IF NOT VERSION 6 OR LATER
|
||
SETZM NPJOBN ;OLD STYLE SO CLEAR NEW JOB PTR.
|
||
POPJ P, ;RETURN
|
||
|
||
DSKJNK: MOVEI A,ABSTB2 ;TRY SECOND ONE
|
||
CAME A,MAXGTB ;OR DID WE ALREADY?
|
||
JRST DSKJN1 ;NO, TRY IT.
|
||
JSP M,BOMB. ;GIVE JUNK ERROR
|
||
ASCIZ /Can't find GETTABs in CRASH/
|
||
GETFIL: MOVSI A,DSK ;GET CHANNEL #
|
||
MOVE B,ME ;GET MY PPN
|
||
CAMN B,[1,,2] ;AM I THE SAME AS OPR PPN?
|
||
TXO A,FO.PRV ;SET PRIV BIT FOR FILOP.
|
||
;[1,2] JOBS GET FULL ACCESS
|
||
MOVEM A,FLP+.FOFNC ;AND STORE IT IN FILOP. BLOCK
|
||
MOVEI A,.FORED ;SET FUNCTION CODE
|
||
HRRM A,FLP+.FOFNC ;TO READ FILE
|
||
MOVEI A,17 ;SET I/O MODE
|
||
MOVEM A,FLP+.FOIOS ;. .
|
||
SKIPN A,INDEV ;DID USER SPECIFY A DEVICE ?
|
||
MOVSI A,'DSK' ;NO--ASSUME DSK
|
||
MOVEM A,FLP+.FODEV ;AND STORE IT
|
||
DEVCHR A, ;GET DEVICE CHARACTERISTICS
|
||
TLNN A,(DV.DIR) ;IS IT A DISK ?
|
||
JRST DNDERR ;PROCESS ERROR
|
||
SETZM FLP+.FOBRH ;NO BUFFERS
|
||
SETZM FLP+.FONBF ;. .
|
||
MOVEI A,LKB ;ADDR. OF LOOKUP BLOCK
|
||
MOVEM A,FLP+.FOLEB ;. .
|
||
SKIPN A,INFILE ;FILE SPECIFIED ?
|
||
MOVE A,CRASH ;NO--ASSUME CRASH
|
||
MOVEM A,LKB+.RBNAM ;STORE IT IN LOOKUP BLOCK
|
||
SKIPN A,INEXT ;EXTENSION SPECIFIED ?
|
||
IFE FTEXE,<
|
||
MOVE A,CRSEXT ;NO--GET CRASH EXTENSION
|
||
>;END OF IFE FTEXE
|
||
IFN FTEXE,<
|
||
MOVSI A,'EXE' ;NO--ASSUME EXE
|
||
>;END IFN FTEXE
|
||
MOVEM A,LKB+.RBEXT ;STORE IT
|
||
SKIPN A,INPPN ;PPN SPECIFIED ?
|
||
MOVE A,CRSPPN ;NO--USE CRASH PPN DEFAULT
|
||
MOVEM A,LKB+.RBPPN ;STORE IT
|
||
MOVEI A,10 ;GET EXTENDED LOOKUP BLOCK SIZE
|
||
MOVEM A,LKB ;STORE IT IN LOOKUP BLOCK
|
||
FLPAGN: MOVE A,[XWD 6,FLP] ;POINT TO FILOP. BLOCK
|
||
FILOP. A, ;OPEN CRASH FILE
|
||
JRST FLPERR ;GO PROCESS FILOP. ERROR
|
||
FILOPN: HLRZ A,LKB+.RBEXT ;GET EXTENSION
|
||
CAIN A,'EXE' ;IS THIS AN EXE FILE ?
|
||
TRO F,FR.EXE ;YES--SET BIT TO REMEMBER IT
|
||
MOVE A,LKB+.RBSIZ ;YES--GET FILE SIZE
|
||
MOVEM A,DSKFLG ;AND SAVE IT AWAY FOR LATER
|
||
MOVE A,[2,,B] ;SET UP UUO AC
|
||
MOVE B,[DSK,,.FOFIL] ;CHANNEL,,FUNCTION CODE
|
||
MOVE C,[.FOFMX,,INFSP] ;RETURNED FILSPEC BLOCK
|
||
FILOP. A, ;READ OPENED FILESPEC
|
||
JRST CPOPJ1 ;GIVE UP
|
||
MOVE A,INFSP+.FOFDV ;DEVICE
|
||
MOVEM A,INDEV
|
||
MOVE A,INFSP+.FOFFN ;FILE NAME
|
||
MOVEM A,INFILE
|
||
MOVE A,INFSP+.FOFEX ;EXTENSION
|
||
MOVEM A,INEXT
|
||
MOVE A,[INFSP+.FOFPP,,INPTH+.PTPPN] ;ACTUAL PATH
|
||
BLT A,INPTH+.PTMAX-.PTPPN-1
|
||
MOVEI A,INPTH ;POINT TO PATH
|
||
MOVEM A,LKB+.RBPPN ;SET IN LOOKUP BLOCK
|
||
JRST CPOPJ1 ;GIVE GOOD RETURN
|
||
|
||
FLPERR: CAME A,[XWD 6,FLP] ;IS FILOP. IMPLEMENTED ?
|
||
JRST CHKERR ;YES--GO CHECK THE ERROR CODE THEN
|
||
OPEN DSK,FLP+.FOIOS ;NO--DO MANUAL OPEN
|
||
POPJ P, ;CAN'T ACCESS FILE
|
||
LOOKUP DSK,LKB ;LOOKUP FILE
|
||
JRST CHKER1 ;GO PROCESS LOOKUP FAILURE
|
||
CHKPRV: HLRZ B,LKB+.RBPRV ;GET PRIVILEGE WORD FROM LOOKUP BLOCK
|
||
LSH B,-^D9 ;RIGHT JUSTIFY PROT. CODE
|
||
HRLI B,5 ;SET CHKACC FUNC. CODE TO READ FILE
|
||
MOVEI C,DSK ;GET CHANNEL #
|
||
DEVPPN C, ;GET DEVICE'S ASSOCIATED PPN
|
||
MOVEI C,ME ;ASSUME MY PPN
|
||
CAME C,ME ;IS IT ME ?
|
||
MOVEM C,INPPN ;NO--OVERIDE ALL WITH ERSATZ PPN
|
||
SKIPN C,INPPN ;IS THERE A PPN ARGUMENT ?
|
||
MOVE C,ME ;NO--ASSUME OUR PPN
|
||
MOVE D,ME ;PERFORM CHKACC AGAINST ME
|
||
MOVEI A,B ;POINT TO CHKACC ARGUMENT BLOCK
|
||
CHKACC A, ;ARE WE ALLOWED TO ACCESS THIS FILE ?
|
||
JRST FILOPN ;ASSUME YES AND PROCEED
|
||
JUMPGE A,FILOPN ;YES--PROCEED
|
||
FILPRT: JSP M,BOMB. ;NO--FILE'S PROTECTED AGAINST US
|
||
ASCIZ/File is read protected/
|
||
|
||
DNDERR: JSP M,BOMB. ;DEVICE MUST BE A DISK !!
|
||
ASCIZ/Device must be a disk/
|
||
|
||
CHKER1: HRRZ A,LKB+.RBEXT ;GET LOOKUP ERROR CODE
|
||
CHKERR: CAIN A,2 ;PROTECTION FAILURE ?
|
||
JRST FILPRT ;YES--GIVE ERROR
|
||
JUMPN A,CPOPJ ;FILE NOT FOUND ?
|
||
HLRZ A,LKB+.RBEXT ;YES--GET EXTENSION
|
||
CAIE A,'EXE' ;WAS IT 'EXE' ?
|
||
POPJ P, ;NO--CAN'T ACCESS FILE
|
||
MOVE A,CRSEXT ;YES--GET OLD EXTENSION
|
||
MOVEM A,LKB+.RBEXT ;AND STORE IT
|
||
JRST FLPAGN ;TRY AGAIN WITH NEW EXTENSION
|
||
|
||
INPPPN: PUSHJ P,GETPPN
|
||
MOVEM A,INPTH+.PTPPN
|
||
MOVEI A,INPTH ;POINT TO PATH BLOCK
|
||
MOVEM A,INPPN ;SAVE AS POINTER IN PPN WORD
|
||
PUSH P,[-5,,0] ;SAVE AOBJN POINTER TO SFD LIST ON STK
|
||
INPPP1: CAIE WD,"," ;SFD LIST FOLLOW?
|
||
JRST INPPP2 ;NO
|
||
PUSHJ P,GETNXT ;GET NEXT SFD
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
SKIPN A ;MUST BE NON-NULL
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
MOVE C,(P) ;GET AOBJN POINTER BACK
|
||
MOVEM A,INPTH+.PTPPN+1(C) ;STORE SFD IN NEXT WORD OF BLOCK
|
||
AOBJP C,INPPP2 ;GO IF TOO MANY
|
||
MOVEM C,(P) ;STORE UPDATED POINTER BACK ON STACK
|
||
JRST INPPP1 ;AND LOOP FOR NEXT
|
||
INPPP2: POP P,A ;RESTORE LAST VALUE OF AOBJN POINTER
|
||
SETZM INPTH+.PTPPN+1(A) ;INSURE ZERO TERMINATOR
|
||
CAIE WD,12
|
||
PUSHJ P,GETNXT
|
||
JFCL
|
||
POPJ P,
|
||
DSKBP1: CAMN BP,LASBPA ;SEE IF SAME AS LAST ONE
|
||
JRST [MOVE BP,LASBP1 ;YES--GET SAME ANSWER
|
||
JRST CPOPJ1] ;GIVE SKIP RETURN
|
||
MOVEM BP,LASBPA ;NO--SAVE ADDRESS
|
||
PUSH P,A ;SAVE A
|
||
MOVE A,BP ;GET ARGUMENT
|
||
PUSHJ P,DSKA ;GET WORD
|
||
MOVE BP,A ;GIVE ANSWER
|
||
POP P,A ;RESORE A
|
||
MOVEM BP,LASBP1 ;SAVE ANSWER
|
||
JRST CPOPJ1 ;SKIP RETURN
|
||
|
||
DSKC: PUSH P,A ;SAVE A
|
||
MOVE A,C ;GET ARGUMENT
|
||
PUSHJ P,DSKA ;GET WORD
|
||
MOVE C,A ;GIVE ANSWER
|
||
POP P,A ;RESTORE A
|
||
POPJ P, ;RETURN
|
||
DSKA1: AOS (P) ;SKIP RETURN
|
||
DSKA: TLNN F1,F1.XAD ;30 BIT ADDRESS?
|
||
TLZ A,-1 ;CLEAR JUNK
|
||
CAMGE A,SYSSIZ ;ADDRESS IN MONITOR LOW SEG?
|
||
JRST DSKA8 ;YES, JUST GET MONITOR LOW SEG VALUE
|
||
PUSH P,D ;GET A WORKING AC
|
||
MOVE D,A ;SAVE ADDRESS IN D
|
||
CAML D,.UPFSO ;CHECK FOR FUNNY SPACE
|
||
CAML D,.UPFSE ;REALLY IN FUNNY SPACE?
|
||
TLO D,400000 ;NO, IN THE MONITOR'S HIGH SEGMENT
|
||
ANDI A,777 ;ISOLATE OFFSET IN PAGE
|
||
PUSH P,A ;SAVE THIS
|
||
LSH D,-^D9 ;CONVERT TO PAGE NUMBER
|
||
MOVE A,.CPTOS ;THIS IS KIND OF A KLUDGE BUT THERE ARE NO
|
||
CAME A,.CPMAP ;CONVIENENT BITS TO REMEMBER TYPE OF PAGING
|
||
TLO D,600000 ;KL PAGING
|
||
TLZN D,400 ;ADDRESS IN MONITOR HIGH SEG?
|
||
JRST DSKA2 ;NO, PER-PROCESS MAPPING
|
||
TLNN D,200000 ;KL PAGING?
|
||
ROT D,-1 ;NO, KI PAGING - MAP SLOTS ARE HALF WORDS
|
||
HRRZ A,D ;WORD WITHIN THE MAP
|
||
TRNE A,37000 ;NON-ZERO SECTION?
|
||
JRST [PUSH P,B ;YES, SAVE A TEMP
|
||
LDB B,[POINT 9,A,26] ;GET SECTION NUMBER
|
||
MOVE B,SECTAB(B) ;GET MAP POINTER
|
||
ANDI B,17777 ;ISOLATE PHYSICAL PAGE NUMBER
|
||
LSH B,^D9 ;POSITION IT
|
||
ANDI A,777 ;JUST PAGE OFFSET WITHIN SECTION
|
||
ADD A,B ;PHYSICAL ADDRESS OF MAP POINTER
|
||
POP P,B ;RESTORE TEMP
|
||
JRST DSKA7] ;GO GET MAP SLOT ENTRY
|
||
ADD A,.CPMAP ;ADDRESS OF MAP SLOT ENTRY
|
||
JRST DSKA7 ;GO GET MAP SLOT ENTRY
|
||
DSKA2: MOVSI A,(J) ;JOB NUMBER TO LH
|
||
HRRI A,.GTUPM ;NEED JBTUPM FOR THIS JOB
|
||
PUSHJ P,FGETTB ;GET VALUE
|
||
JRST DSKA3 ;FAILED, RETURN ZERO
|
||
HRRZS A ;KEEP JUST PAGE NUMBER
|
||
JUMPN A,DSKA5 ;IF THERE, CONTINUE
|
||
DSKA3: POP P,(P) ;FLUSH JUNK
|
||
POP P,D ;RESTORE D
|
||
DSKA4: MOVEI A,0 ;RETURN ZERO TO CALLER
|
||
POPJ P, ;AND RETURN
|
||
DSKA5: LSH A,^D9 ;MAKE PAGE NUMBER AN ADDRESS
|
||
TLNE D,200000 ;KL PAGING?
|
||
JRST DSKA6 ;YES, PAGE NUMBER IS OFFSET INTO THE MAP
|
||
ROT D,-1 ;DIVIDE BY 2 PUTTING REMAINDER IN THE SIGN BIT
|
||
ADDI D,220 ;PP STUFF STARTS AT 400 IN THE MAP
|
||
DSKA6: ADDI A,(D) ;POINT TO PER-PROCESS STUFF IN THE UPMP
|
||
DSKA7: PUSHJ P,DSKA8 ;GET THE MAP SLOT FOR THIS ADDRESS
|
||
SKIPL D ;SKIP IF MAPPING THROUGH RH
|
||
MOVSS A ;MAPPING THROUGH LH, REVERSE
|
||
TLNE D,200000 ;KL PAGING?
|
||
TLNN A,700000 ;YES, ACCESS ALLOWED?
|
||
CAIA ;KI PAGING OR ACCESS NOT ALLOWED
|
||
TRO A,400000 ;INDICATE ACCESS ALLOWED
|
||
TRNN A,400000 ;PAGE HAVE ACCESS ALLOWED ON?
|
||
JRST DSKA3 ;NO, RETURN ZERO
|
||
ANDI A,17777 ;KEEP JUST 13 BIT PAGE NUMBER
|
||
LSH A,^D9 ;MAKE IT AN ADDRESS
|
||
ADD A,0(P) ;ADD IN OFFSET IN PAGE
|
||
POP P,(P) ;FLUSH JUNK
|
||
POP P,D ;RESTORE D
|
||
DSKA8: PUSH P,B ;SAVE B
|
||
CAML A,DSKFLG ;COMPARE TO AMOUNT IN FILE
|
||
JRST [POP P,B ;RESTORE B
|
||
JRST DSKA4] ;RETURN ZERO
|
||
PUSH P,C ;SAVE A WORK REGISTER
|
||
IFN FTEXE,<
|
||
JUMPE A,DSKA9 ;DON'T RELOCATE 0 (NEED TO READ EXE DIRECTORY)
|
||
TRNN F,FR.EXE ;IS THIS AN EXE FILE?
|
||
JRST DSKA9 ;NO, GO STRAIGHT TO FILE
|
||
PUSHJ P,RELEXE ;RELOCATE ADDRESS TO DISK PAGE ADDRESS
|
||
JRST [POP P,C ;ADDRESS NOT IN FILE, RESTORE ACS
|
||
POP P,B
|
||
JRST DSKA4] ;AND RETURN 0
|
||
>;END OF IFN FTEXE
|
||
DSKA9: IDIVI A,LN.BUF ;SPLIT INTO BLOCK AND WORD
|
||
PUSH P,B ;OFFSET FOR WORD IN BUFFER
|
||
MOVSI B,-NBCSHE ;SEARCH THE CACHE FOR THIS DISK BLOCK
|
||
HLRZ C,DCACHE(B) ;FETCH BLOCK DESCRIBED
|
||
CAIE C,(A) ;IS THIS IT
|
||
AOBJN B,.-2 ;NO, KEEP LOOKING
|
||
JUMPL B,DSKARD ;FOUND ONE, UPDATE LEAST RECENTLY USED
|
||
HRLM A,DCACHE+NBCSHE-1 ;STORE BLOCK NUMBER IN LAST (OLDEST)
|
||
HRRZ B,DCACHE+NBCSHE-1 ;WHERE DATA IS TO BE READ
|
||
SOS B ;-1 FOR THE IOWD
|
||
HRRM B,DSKIOW ;STORE ADDR
|
||
MOVEI B,NBCSHE-1 ;INDEX WHERE READ (FOUND)
|
||
IFN LN.BUF-200,<IMULI A,LN.BUF/200>
|
||
IFN LN.BUF-<LN.BUF/200>*200,<PRINTX LN.BUF MUST BE MULT OF 200>
|
||
USETI DSK,1(A) ;NO--POSITION FILE
|
||
IN DSK,DSKIOW
|
||
JRST DSKARD ;READ OK
|
||
PUSH P,M ;BAD--SAVE LOTS STUFF
|
||
PUSH P,N
|
||
PUSH P,N1
|
||
PUSH P,R
|
||
PUSH P,CH
|
||
PUSH P,WD
|
||
MOVEI WD,0
|
||
GETSTS DSK,N
|
||
MOVEI M,[ASCIZ /
|
||
% Disk read error /]
|
||
PUSHJ P,MSG
|
||
PUSHJ P,OCTPRT
|
||
PUSHJ P,CRLF
|
||
POP P,WD
|
||
POP P,CH
|
||
POP P,R
|
||
POP P,N1
|
||
POP P,N
|
||
POP P,M
|
||
|
||
DSKARD: HRRZS B ;ISOLATE POSITION IN TABLE
|
||
CAIG B,NBCSHE/3 ;DON'T RIPPLE TABLE IF CLOSE TO FRONT ALREADY
|
||
JRST DSKAR1 ;THIS MIGHT NOT BE TOO GOOD WITH SMALL "NBCSHE"
|
||
PUSH P,DCACHE(B) ;SAVE DESIRED ENTRY
|
||
MOVE C,DCACHE-1(B) ;COMPRESS TABLE SO LEAST USED IS LAST
|
||
MOVEM C,DCACHE(B) ;MOVE UP ENTRIES BELOW ONE FOUND
|
||
SOJG B,.-2 ;SO NEW ONE CAN BE FOUND QUICKLY LATER
|
||
POP P,DCACHE(B) ;PUT SAVED ENTRY AT THE FRONT
|
||
DSKAR1: POP P,C ;GET WORD OFFSET FOR DATA ITEM
|
||
ADD C,DCACHE(B) ;FIND WORD IN BUFFER
|
||
MOVE A,(C) ;FETCH IT
|
||
POP P,C ;RESTORE WORK AC
|
||
POP P,B ;RESTORE CALLERS AC
|
||
POPJ P, ;RETURN WITH DATA ITEM IN A
|
||
;SUBROUTINES TO DEAL WITH EXE DIRECTORY
|
||
|
||
IFN FTEXE,<
|
||
|
||
CPYEXE: HRLZ A,DCACHE ;*** "KNOW" WHERE DSKA READ IT
|
||
HRRI A,EXEDIR ;PLACE TO SAVE IT
|
||
BLT A,EXEDIR+LN.BUF-1 ;MOVE AS MUCH AS WAS READ
|
||
HRRZ A,EXEDIR ;FETCH DIRECTORY SIZE
|
||
CAIL A,LN.BUF ;DID WE GET ALL OF IT
|
||
BOMB (EXE Directory too complex, try making LN.BUF larger)
|
||
MOVE A,EXEDIR-1(A) ;FETCH LAST DESCRIPTOR WORD
|
||
LDB B,[POINT 9,A,8] ;GET REPEATER COUNT
|
||
ADDI B,1(A) ;FIRST PAGE NOT IN FILE
|
||
LSH B,^D9 ;FIRST ADDRESS NOT IN FILE
|
||
MOVEM B,DSKFLG ;RESET MAXIMUM ADDRESS
|
||
POPJ P, ;AND RETURN
|
||
|
||
RELEXE: PUSH P,D ;SAVE A WORKING AC
|
||
IDIVI A,1000 ;SPLIT INTO PAGE AND OFFSET
|
||
PUSH P,B ;SAVE OFFSET
|
||
HRRZ B,EXEDIR ;FETCH NUMBER OF WORDS IN DIRECTORY
|
||
MOVNI B,-1(B) ;DON'T COUNT HEADER WORD
|
||
HRLZS B ;= AOBJN
|
||
RELEX1: HRRZ C,EXEDIR+2(B) ;GET CORE ADDRESS FROM DESCRIPTOR
|
||
CAILE C,(A) ;PASS THE ONE WE WANT
|
||
JRST RELEX3 ;YES, WORD NOT IN FILE
|
||
LDB D,[POINT 9,EXEDIR+2(B),8] ;GET REPEATER
|
||
ADDI D,1(C) ;FIRST PAGE NOT IN POINTER
|
||
CAIL A,(D) ;PAGE IN THIS POINTER AT ALL
|
||
JRST RELEX2 ;NO, GET ANOTHER POINTER
|
||
SUBI A,(C) ;HOW FAR INTO THE POINTER
|
||
ADD A,EXEDIR+1(B) ;HOW FAR INTO THE FILE PROPER
|
||
TLZ A,-1 ;KEEP IT REASONABLE ( FLAGS BITS )
|
||
LSH A,^D9 ;TO A PAGE ADDRESS IN THE FILE
|
||
ADDM A,(P) ;INCLUDE THE OFFSET WANTED
|
||
AOS -2(P) ;GIVE GOOD RETURN
|
||
JRST RELEX3 ;AND RETURN
|
||
RELEX2: AOBJN B,.+1 ;ADJUST FOR DOUBLE WORD ENTRIES
|
||
AOBJN B,RELEX1 ;LOOK AT NEXT POINTER
|
||
RELEX3: POP P,A ;RETURN VALUE
|
||
POP P,D ;RESTORE WORKING AC
|
||
POPJ P, ;RETURN
|
||
|
||
> ;END FTEXE
|
||
;GETNXT IS CALLED TO COLLECT A SIXBIT FIELD IN ACCU A
|
||
;AND A DELIMITING CHARACTER IN REGISTER WD
|
||
;DELIMITERS ARE:
|
||
;LINE FEED COMMA PERIOD COLON LEFT BRACKET RIGHT BRACKET LEFTARROW
|
||
;IF A BREAK CHARACTER WAS FOUND A ZERO DELIMITER IS RETURNED CAUSING
|
||
;SYSTAT TO FAIL AT ALL DELIMITER TESTS
|
||
GETNXT: SETZ A,
|
||
GETNX0: SETZ WD, ;LET TEST ON DELIMITER FAIL
|
||
TLNE F,FL.BRK
|
||
POPJ P,
|
||
PUSHJ P,GETCHR
|
||
JFCL
|
||
CAIE WD," "
|
||
CAIN WD,15
|
||
JRST GETNX0
|
||
GETNX1: MOVE B,DELMPT
|
||
GETNX2: ILDB C,B
|
||
JUMPE C,GETNX4
|
||
CAIE WD,(C)
|
||
JRST GETNX2
|
||
SKIPE A
|
||
GETNX3: TLNE A,770000
|
||
JRST CPOPJ1
|
||
LSH A,6
|
||
JRST GETNX3
|
||
GETNX4: TLNE A,770000
|
||
JRST GETNX0
|
||
LSH A,6
|
||
ADDI A,-40(WD)
|
||
JRST GETNX0
|
||
|
||
DELMPT: POINT 7,DELMTB
|
||
DELMTB: BYTE (7) 12,54,56,72,133,135,137,0
|
||
|
||
GETPPN: PUSHJ P,GETNXT
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
SKIPN C,A
|
||
MOVSI C,'0 ' ;IF [,], FAKE GETNUM
|
||
CAIE WD,","
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
PUSHJ P,GETNUM
|
||
SKIPN A ;SKIP IF PROJECT# NON-ZERO
|
||
HLRZ A,ME ;IF [,], USE OUR PROJECT NUMBER
|
||
PUSH P,A
|
||
TLNN A,-1
|
||
PUSHJ P,GETNXT
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
SKIPN C,A
|
||
MOVSI C,'0 ' ;IF [,] FAKE GETNUM
|
||
PUSHJ P,GETNUM
|
||
SKIPN A ;SKIP IF PROGRAMMER NUMBER NON-ZERO
|
||
HRRZ A,ME ;USER OURS IF [,]
|
||
TLNE A,-1
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
HRL A,(P)
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
GETNUM: SETZ A,
|
||
GETNM0: SETZ B,
|
||
LSHC B,6
|
||
CAIL B,"0"-40
|
||
CAILE B,"7"-40
|
||
BOMB <Command error -- Type SYS /H for help>
|
||
LSH A,3
|
||
ADDI A,-20(B)
|
||
JUMPN C,GETNM0 ;GET MORE DIGITS
|
||
POPJ P,
|
||
SUBTTL SUBROUTINES
|
||
;GETTAB OPTIONAL TABLE--RETURN 0 IF ABSENT (RESULT IN A)
|
||
GETZ: PUSHJ P,FGETTB ;GO DO GETTAB
|
||
SETZ A,
|
||
POPJ P,
|
||
|
||
;GETTAB OPTIONAL TABLE--ERROR RETURN IF ABSENT (RESULT IN B)
|
||
GETTB: PUSH P,A ;SAVE A
|
||
MOVE A,B ;SETUP FOR GETTAB
|
||
PUSHJ P,FGETTB ;DO GETTAB
|
||
JRST [POP P,A
|
||
POPJ P,]
|
||
MOVE B,A ;GET ANSWER
|
||
POP P,A ;RESTORE A
|
||
CPOPJ1: AOS (P)
|
||
POPJ P,
|
||
CPOPJ2: AOS (P) ;
|
||
AOS (P) ;
|
||
POPJ P, ;
|
||
|
||
;GETTAB MANDATORY TABLES (RESULT IN A)
|
||
GETA: PUSHJ P,FGETTB ;GETTAB
|
||
TDZA A,A
|
||
POPJ P,0
|
||
PRQM: MOVEI CH,"?"
|
||
JRST TYO
|
||
;ROUTINE TO FUDGE GETTABS VIA SPY IF POSSIBLE
|
||
;NOTE--DOES NOT HANDLE -2 IN LH, IF FAIL, CHANGES A
|
||
|
||
FGETTB: SKIPE N1,MAXGTB ;SEE IF GETTAB SPYING POSSIBLE
|
||
JRST GETTB1 ;YES--GO DO IT
|
||
FGETT1: SKIPN DSKFLG ;DONT GETTAB IF IN /X
|
||
GETTAB A, ;NO--USE MONITOR
|
||
POPJ P, ;ERROR RETURN
|
||
JRST CPOPJ1 ;WIN RETURN
|
||
GETTB1: HRRZ BP,A ;GET TABLE INDEX
|
||
CAMLE BP,N1 ;SEE IF IN RANGE
|
||
POPJ P, ;NO--ERROR RETURN
|
||
ADD BP,OFSGTB ;YES--GET CORE ADDRESS
|
||
TLNE F,FL.DSK ;SEE IF DISK MODE
|
||
PUSHJ P,DSKBP1 ;YES--READ FROM IT AND SKIP
|
||
MOVE BP,400000(BP) ;GET NUMTAB POINTER
|
||
CALL SETSPY ;SET UP SPY DATA
|
||
SKIPE PDBPTR ;YES. HAVE WE THE POINTER TO JBTPDB?
|
||
SKIPA ;OK
|
||
JRST FGETT1 ;NO. GO USE A GETTAB
|
||
HLRZ A,A ;GET REQUESTED INDEX IN TABLE
|
||
TRNE A,1B18 ;SEE IF JOB FLAG
|
||
MOVE A,MYJOB ;YES--GET JOB NUMBER
|
||
CAMLE A,N1 ;SEE IF IN RANGE
|
||
POPJ P, ;NO--ERROR RETURN
|
||
TLNN BP,(17B17) ;SEE IF INDEXING
|
||
MOVEI A,0 ;NO--CLEAR REQUEST
|
||
TLNN BP,(GT.PRC) ;PDB DATUM?
|
||
JRST FGETT2 ;NO
|
||
TLNE F,FL.DSK ;DISK MODE?
|
||
JRST FGETP2 ;YES, HANDLE IT
|
||
ADD BP,@PDBPTR ;GET ADDRESS IN JOBS PDB
|
||
MOVEI A,0 ;HAVE ADDED IN A ALREADY
|
||
FGETT2: ADDI A,(BP) ;ADD TABLE LOCATION TO OFFSET
|
||
TLNE F,FL.DSK ;SEE IF DISK MODE
|
||
PJRST DSKA1 ;YES--GET WORD FROM DISK
|
||
CAML A,.UPFSO ;IS "A" IN THE EXEC LOW-SEGMENT?
|
||
JRST FGETT3 ;NO, MUST USE PEEKC
|
||
MOVE A,400000(A) ;GET WORD
|
||
JRST CPOPJ1 ;GIVE WIN RETURN
|
||
FGETT3: PUSH P,C ;DON'T SMASH "C"
|
||
MOVEI C,(A) ;GET THE ADDRESS
|
||
PUSHJ P,PEEKC ;GET CONTENTS THIS WAY
|
||
MOVE A,C ;RETURN THE VALUE
|
||
POP P,C ;RESTORE "C" PROPERLY
|
||
JRST CPOPJ1 ;WIN RETURN
|
||
|
||
FGETP2: ADD A,PDBPTR ;GET JOBS PDB POINTER FROM DISK
|
||
PUSHJ P,DSKA
|
||
ADDB BP,A ;POINT TO RELATIVE WORD
|
||
PJRST DSKA1 ;GET THE PDB WORD
|
||
|
||
SETSPY: LDB N1,[POINT 9,BP,8];GET TABLE LENGTH
|
||
PUSH P,N1 ;AND SAVE IT
|
||
SKIPN NEWSPY ;THE NEW STYLE OF SPYING
|
||
JRST SETSP0 ;NO LEAVEIT AS IT IS
|
||
LDB N1,[POINT 3,BP,11];GET ENTRY TYPE
|
||
TLZ BP,777760 ;ZAP ALL BUT INDEX FIELD
|
||
CAIN N1,GT.PDB ;SKIP IF NOT PDB DATA
|
||
TLO BP,(GT.PRC) ;COMPATIBLE
|
||
PUSH P,A ;SAVE A
|
||
SKIPN A,BOTH ;GET NUMBER OF JOBS+SEGMENTS
|
||
JRST SETSP1 ;NOT SET UP YET, LEAVE ALONE
|
||
SUBI A,1 ;COMPUTE HIGHEST SEGMENT OFFSET
|
||
CAIN N1,.SLIXS ;INDEX BY SEGMENT NUMBER?
|
||
MOVEM A,-1(P) ;YES, CHANGE MAX
|
||
SETSP1: POP P,A ;RESTORE A
|
||
SETSP0: POP P,N1 ;GET LENGTH OF TABLE BACK
|
||
TLNN BP,(GT.PRC) ;PDB DATA??
|
||
AOS (P) ;SET SKIP RETURN
|
||
RETURN
|
||
;PEEK INTO C
|
||
PEEKC: TLNE F,FL.DSK ;SEE IF DISK MODE
|
||
PJRST DSKC ;YES--PEEK AT THE DISK
|
||
PUSH P,A ;SAVE A
|
||
MOVE A,C ;GET ARGUMENT
|
||
PUSHJ P,PEEKA ;GET VALUE IN A
|
||
MOVE C,A ;MOVE TO C FOR RETURN
|
||
POP P,A ;RESTORE A
|
||
POPJ P,
|
||
|
||
;PEEK INTO A
|
||
PEEKA: TLNE F,FL.DSK ;SEE IF DISK MODE
|
||
PJRST DSKA ;YES--PEEK AT THE DISK
|
||
TLNN F1,F1.XAD ;30 BIT ADDRESS?
|
||
TLZ A,-1 ;NO, CLEAR JUNK
|
||
CAML A,.UPFSO ;FUNNY SPACE ADDRESS?
|
||
CAML A,.UPFSE
|
||
SKIPA ;NO
|
||
PJRST SPYPAG ;YES
|
||
SKIPE SPYFLG ;SEE IF SPYING
|
||
TDNE A,[-1,,400000] ;ADDRESS GREATER THAN 377777?
|
||
JRST PEEKA1 ;MUST USE PEEK
|
||
CAML A,SYSSIZ ;IS IT IN RANGE?
|
||
JRST PEEKA1 ;NO--USE PEEK
|
||
SKIPA A,400000(A) ;YES--GET FROM CORE
|
||
PEEKA1: PEEK A, ;NO--GET FROM MONITOR
|
||
POPJ P,
|
||
|
||
GETBTH: ANDI A,-1 ;MASK TO SIZE
|
||
SKIPE A ;ERROR IF 0
|
||
CAML A,DSKFLG ;SEE IF IT FITS
|
||
POPJ P, ;NO--GIVE ERROR
|
||
MOVEI C,-1(A) ;GET ADDR-1
|
||
PUSHJ P,PEEKA ;GET CONT(ADDR)
|
||
PUSHJ P,PEEKC ;GET CONT(ADDR-1)
|
||
JRST CPOPJ1 ;SKIP RETURN
|
||
|
||
;ROUTINE TO GET A WORD FROM FUNNY SPACE FOR THIS JOB. WORKS
|
||
;ONLY FOR THIS JOB. CALL WITH A=ADDRESS, RETURNS A=VALUE.
|
||
SPYPAG: PUSH P,A ;SAVE ADDRESS
|
||
MOVE A,MONVER ;GET MONITOR VERSION NUMBER
|
||
CAIGE A,67700 ;7.00 FIELD TEST OR GREATER?
|
||
JRST SPYPA2 ;NO, RETURN ZERO
|
||
MOVE A,0(P) ;GET ADDRESS BACK
|
||
LSH A,-^D9 ;KEEP JUST PAGE NUMBER
|
||
CAMN A,LASSPY ;SAME PAGE AS LAST TIME?
|
||
JRST SPYPA1 ;YES, JUST GET IT FROM CORE
|
||
MOVEM A,LASSPY ;SAVE FOR NEXT CALL
|
||
HRLM A,GETBLK+1 ;ALSO SAVE FOR PAGE CALL
|
||
MOVE A,[.PAGSP,,DELBLK] ;POINT AT BLOCK TO DELETE PAGE
|
||
PAGE. A, ;DELETE PAGE FROM OUR ADDRESS SPACE
|
||
JFCL ;MUST NOT HAVE BEEN THERE
|
||
MOVE A,[.PAGSP,,GETBLK] ;POINT TO BLOCK TO GET PAGE
|
||
PAGE. A, ;PAGE IN THAT PAGE
|
||
JRST SPYPA2 ;FAILED, RETURN ZERO
|
||
SPYPA1: POP P,A ;GET ADDRESS BACK
|
||
ANDI A,777 ;KEEP JUST OFFSET IN PAGE
|
||
MOVE A,FSPADR(A) ;GET ADDRESS FROM FUNNY SPACE PAGE
|
||
POPJ P, ;AND RETURN
|
||
SPYPA2: POP P,(P) ;PRUNE STACK
|
||
MOVEI A,0 ;RETURN 0
|
||
SETZM LASSPY ;FORCE REREAD NEXT TIME
|
||
POPJ P, ;RETURN
|
||
GETTTY: TRNE F,FR.CNT ;**[16] A CONTINUOUS SYSTAT?
|
||
TLNN F,FL.LPT ;**[16] (YES) AND GOING TO LPT
|
||
SKIPA ;**[16] (NO) NORMAL
|
||
JRST GETTT0 ;**[16] (YES) FORCE OF INIT
|
||
TLNE F,FL.LPT ;IS LPT FILE OPEN?
|
||
RETURN ;(YES) THEN KEEP IT THTA WAY
|
||
CAIE WD,L.LPT ;DID USER WANT LINE PRINTER
|
||
JRST SYSIN2 ;(NO) SEE IF HE HAS TTY ALLREADY
|
||
TLO F,FL.LPT ;DID HE HAVE LPT ALLREADY
|
||
;REMOTELY REMOTE?
|
||
TLNE F,FL.LGI ;OR NOT LOGGED IN?
|
||
JRST GETTT0 ;NO..OK TO USE LPT
|
||
CTLJOB A, ;BEING CONTROLLED?
|
||
SETO A, ;NOT IMPLEMENTED
|
||
MOVSI A,(A) ;SETUP TO GETTAB ...
|
||
HRRI A,.GTPPN ;OUR CONTROLLING JOB'S PPN
|
||
PUSHJ P,FGETTB ;SIMULATE THE GETTAB
|
||
SETO A, ;DISALLOW IF NOT IMPLEMENTED
|
||
TLNN A,-2 ;PROJECTS 0 OR 1?
|
||
JRST GETTT0 ;YES..YOU WIN
|
||
BOMB (LOGIN to use LPT) ;NO, TOO BAD
|
||
GETTT0: MOVEI C,5 ;TRY INIT FIVE TIMES
|
||
RESET ;GIVE BUFFERS BACK
|
||
SYSIN1: INIT TTY,0 ;YES--INIT LPT
|
||
SYSDEV: SIXBIT /LPT/
|
||
XWD TYOB,0
|
||
SKIPA
|
||
JRST SYSOPN ;IF SUCCESS
|
||
MOVE B,C
|
||
SLEEP B, ;WIAT AWHILE
|
||
SOJG C,SYSIN1 ;TRY SOME,THEN GIVE MESSAGE
|
||
SYSNOT: TLON F,FL.RPT ;FAILED--SEE IF FIRST TIME
|
||
OUTSTR [ASCIZ /LPT busy--Please assign LPT and continue
|
||
/]
|
||
EXIT 1, ;RETURN TO MONITOR MODE
|
||
JRST SYSIN1 ;LOOP BACK FOR ANOTHER TRY
|
||
SYSIN2: TROE F,FR.INI ;IS THIS THE FIRST TRY
|
||
RETURN ;(NO) YOU HAVE IT ALLREADY
|
||
TLNN F,FL.DSK ;**[16] DO NOT RESET DISK FILE
|
||
RESET ;GET OLD BUFFERS AWAY
|
||
INIT TTY,0 ;FIRST TRY DEVICE SYSTAT
|
||
SIXBIT /SYSTAT/
|
||
XWD TYOB,0
|
||
SKIPA ;NOTHING ASSIGNED AS SYSTAT
|
||
JRST SYSOPN ;OK. USE IT.
|
||
INIT TTY,0
|
||
SIXBIT /TTY/
|
||
XWD TYOB,0
|
||
BOMB (Output init failed) ;DIE IF CAN'T DO OUTPUT
|
||
SYSOPN: TRO F,FR.INI ;TURN ON FOR L OPTION
|
||
OUTBUF TTY,1 ;ONLY ONE BUFFER
|
||
TRZ F,FR.DSK ;ASSUME NO DISK
|
||
MOVEI A,TTY ;GET CHANNEL NUMBER
|
||
DEVTYP A, ;AND GET IT'S TYPE
|
||
JRST SYSOP1 ;GIVE UP TRY THE ENTER
|
||
ANDI A,TY.DEV ;GET THE TYPE FIELD
|
||
CAIE A,.TYDSK ;IS IT A DISK
|
||
JRST SYSOP1 ;(NO) OPEN THE FILE
|
||
TRO F,FR.DSK ;FLAG THAT THIS IS A DISK FILE
|
||
MOVE A,[%LDSTP] ;GET STANDARD PROTECTION
|
||
CALL GETZ ;SEE WHAT IT IS
|
||
ROT A,^D9 ;GET IT IN THE RIGHT HAND SIDE
|
||
HRLI A,.ACWRI ;WE WANT TO WRITE
|
||
TRZ A,777000 ;MASK OUT JUNK
|
||
MOVEI B,TTY ;GET OWNERS PPN
|
||
DEVPPN B, ;FIND THE PPN
|
||
JRST SYSOP1 ;NO PROTECTION
|
||
MOVE C,ME ;GET MY PPN
|
||
MOVEI N,A ;GET ADDRESS OF CHECK BLOCK
|
||
CHKACC N, ;SEE IF I MAY ENTER AND WRITE FILE
|
||
JRST SYSOP1 ;NO CHKACC SO DO IT
|
||
JUMPE N,SYSOP1 ;ALL IS FINE
|
||
BOMB (No write privilige for file SYSTAT.TXT)
|
||
SYSOP1: MOVE A,[SIXBIT /SYSTAT/]
|
||
MOVSI B,(SIXBIT /TXT/)
|
||
SETZB C,D ;CLEAR DATE & PPN
|
||
TRNE F,FR.DSK ;IS OUTPUT GOING TO DISK?
|
||
LOOKUP TTY,A ;YES.DOES SYSTAT.TXT EXIST?
|
||
SKIPA ;NO. CREATE FILE
|
||
JRST APPEND ;APPEND TO EXISTING FILE
|
||
ENTER TTY,A
|
||
BOMB (Output enter failed) ;DIE IF CAN'T ENTER
|
||
RETURN
|
||
APPEND: HLRE N,D ;-WORDS(<128K) OR +BLOCKS(>128K)
|
||
SKIPL N ;BLOCKS?
|
||
JRST APPEN1 ;YES.
|
||
MOVNS N ;MAKE WORDS +
|
||
LSH N,-7 ;CONVERT TO BLOCKS
|
||
AOS N ;NEXT BLOCK
|
||
APPEN1: AOS N ;NEXT BLOCK
|
||
MOVEM N,FLP+1 ;SET NEXT BLOCK IN USETO REQUEST
|
||
HLLZS B ;CLEAR ENTER ARG BLOCK
|
||
SETZB C,D ;
|
||
ENTER TTY,A ;REQUEST SUPERCEDE EXISTING SYSTAT.TXT
|
||
BOMB (Output ENTER failed) ;DIE ON ERROR
|
||
MOVE N,[XWD TTY,.FOUSO] ;SET UP FILOP BLOCK TO DO...
|
||
MOVEM N,FLP ;...AN APPEND.
|
||
MOVE N,[XWD 2,FLP] ;SET UP FOR FILOP CALL
|
||
FILOP. N, ;POINT TO NEXT BLOCK IN SYSTAT.TXT
|
||
BOMB (Output append failed) ;DIE IF CAN'T APPEND
|
||
RETURN ;
|
||
;SUBROUTINE TO TYPE <MESSAGE> N/TEMP = NUM.NUM
|
||
;ARGS M=ADDR OF FIRST ASCIZ MESSAGE
|
||
; N=DIVIDEND
|
||
; TEMP=DIVISOR
|
||
|
||
SWPPRT: PUSH P,N ;SAVE DIVIDEND
|
||
PUSHJ P,MSGDEC
|
||
MOVSI A,(SIXBIT ./.)
|
||
MOVE N,TEMP
|
||
PUSHJ P,SIXDEC
|
||
MOVEI M,[ASCIZ / = /]
|
||
POP P,N ;RESTORE DIVIDEND
|
||
IMULI N,^D100 ;
|
||
IDIV N,TEMP ;
|
||
PJRST MSGCPC ;PRINT AS N.MM%
|
||
;SUBROUTINE TO PRINT THE USER NAME FOR A JOB.
|
||
;ARGS J=JOB NUMBER
|
||
|
||
USRNAM: MOVE A,@.USNM1 ;GET FIRST HALF OF USER NAME
|
||
PUSHJ P,SIXPRT ;PRINT IT
|
||
MOVE A,@.USNM2 ;GET SECOND HALF
|
||
PUSHJ P,SIXPRT ;PRINT IT
|
||
PJRST TAB ;END WITH TAB AND RETURN
|
||
|
||
;SUBROUTINE TO PRINT ALL 6 CHARACTERS OF A SIXBIT NAME
|
||
;ARGS: A=SIXBIT NAME
|
||
|
||
SIXPRT: MOVE BP,A ;MOVE NAME TO BP
|
||
MOVEI A,6 ;AND SETUP LOOP COUNTER
|
||
SIXPR1: MOVEI CH,0
|
||
LSHC CH,6 ;MOVE NEXT CHAR OF NAME INTO CH
|
||
ADDI CH,40 ;CONVERT TO ASCII
|
||
PUSHJ P,TYO ;TYPE IT
|
||
SOJG A,SIXPR1 ;LOOP FOR ALL
|
||
POPJ P, ;RETURN
|
||
NOWHO:
|
||
IFN HIDPPN,<
|
||
CAME A,ME
|
||
TLNE F,FL.GOD
|
||
POPJ P, ;RETURN IF OK
|
||
SETO A, ;HIDE IT--CHANGE NAME
|
||
>
|
||
POPJ P,
|
||
|
||
ASTSIX: MOVE A,[SIXBIT /**,**/]
|
||
SP4SIX: TDNE A,[-1-77B5] ;SEE IF SHORT NAME
|
||
SKIPE SEGFLG ;NO--SEE IF SEGMENT MODE
|
||
JRST TABSIX ;YES--DO TAB THEN PRINT
|
||
MOVEI N,4 ;SPACE 4, THEN SIXBIT
|
||
PUSHJ P,SPACE
|
||
SOJG N,.-1
|
||
SIXBP: MOVE BP,A
|
||
SIXBP1: MOVEI CH,0
|
||
LSHC CH,6
|
||
IFN CH-BP+1,<PRINTX BP MUST BE CH+1>
|
||
ADDI CH,40
|
||
PUSHJ P,TYO
|
||
JUMPN BP,SIXBP1
|
||
CPOPJ: POPJ P,0
|
||
|
||
TABSIX: PUSHJ P,TAB ;SEND TAB
|
||
JRST SIXBP ;THEN SIXBIT MESSAGE
|
||
|
||
REPEAT 0,<
|
||
;SUBR VERPRT - CALL WITH (137) OR THE LIKE IN N, TYPES STD FORM VERSION
|
||
VERPRT: PUSH P,N
|
||
LDB N,[POINT 9,0(P),11]
|
||
PUSHJ P,OCTPRT
|
||
LDB CH,[POINT 6,0(P),17]
|
||
JUMPE CH,VERP1
|
||
ADDI CH,"A"-1
|
||
PUSHJ P,TYO
|
||
VERP1: HRRZ N,0(P)
|
||
JUMPE N,VERP2
|
||
MOVEI CH,"("
|
||
PUSHJ P,TYO
|
||
PUSHJ P,OCTPRT
|
||
MOVEI CH,")"
|
||
PUSHJ P,TYO
|
||
VERP2: LDB N,[POINT 3,0(P),2]
|
||
JUMPE N,VERP3
|
||
MOVNS N
|
||
PUSHJ P,DECPRT
|
||
VERP3:
|
||
NPOPJ: POP P,N
|
||
POPJ P,0
|
||
>
|
||
;SUBROUTINE CALLED TO INSURE THAT DATA FOR MULTIPLE CPU'S IS
|
||
;LINED UP PROPERLY.THE CALL IS IDENTICAL TO THE CALL OF GETRSP
|
||
|
||
GETRS0: PUSHJ P,GETRSP ;GET THE DATA
|
||
JRST STAB ;NO MORE SET TABS
|
||
SKIPE CPU ;DO NOT SEPERATE PRINT OUT THE FIRST TIME
|
||
PUSHJ P,PLUS ;PRINT THE SEPERATOR
|
||
PJRST CPOPJ1 ;GIVE A SKIP RETURN
|
||
|
||
STAB: MOVE A,NCPCNF ;GET THE NUMBER OF CPUS
|
||
STAB0: CAMG A,CPU ;LIGNED UP ALLREADY
|
||
POPJ P, ;YES GIVE NORMAL RETURNS
|
||
PUSHJ P,TAB ;PRINT A TAB
|
||
SOJA A,STAB0 ;FILL TILL ALL CPUS DONE
|
||
|
||
;SUBROUTINE TO GET REL ENTRY FROM MONITOR GETTAB SUB-TABLE
|
||
;CALL: MOVEI A,DESIRED REL ENTRY IN RESPONSE TABLE
|
||
; MOVEM CPU #,CPU ;STORE CPU NUMBER = 0,1
|
||
; PUSHJ P,GETRSP
|
||
; ERROR RETURN NOT PRESENT FOR THIS CPU
|
||
; OK RETURN CONTENTS IN AC A
|
||
|
||
GETRSP: PUSH P,N1 ;SAVE N1
|
||
PUSH P,B ;SAVE B (GETTB USES B INSTEAD OF A)
|
||
PUSH P,A ;SAVE RELATIVE ADR IN SUB-TABLE
|
||
MOVE B,CPU ;CPU WANTED
|
||
CAML B,NCPCNF ;REALLY THERE
|
||
JRST GTRSPX ;NO, ERROR RETURN
|
||
IMULI A,NCPUS ;MAKE INDEX TO RESPONSE TABLE IN CORE
|
||
ADD A,CPU
|
||
MOVEM A,RSPIDX
|
||
MOVE B,[%CCRSP] ;GETTAB IN CPU CONSTANTS TABLE
|
||
;FOR REL ENTRY IN CPU VARIABLE TABLE
|
||
;FOR RESPONSE DATA
|
||
ADD B,CPU ;FORM FOR THIS CPU
|
||
ADD B,CPU ;CONSTANTS GETTABS ARE EVERY OTHER
|
||
PUSHJ P,GETTB ;GET ENTRY FROM MONITOR
|
||
JRST GTRSPX ;NOT PRESENT, ERROR RETURN
|
||
ADD B,(P) ;FORM ADR IN CPU VARIABLE TABLE
|
||
HRL B,B ;TO LH
|
||
HRRI B,.GTC0V ;VARIABLE GETTAB FOR CPU0
|
||
ADD B,CPU ;FOR FOR CPU N
|
||
ADD B,CPU ;VARIABLE TABLE IS EVERY OTHER
|
||
PUSHJ P,GETTB ;GET FROM MONITOR
|
||
SOS -3(P) ;NOT PRESENT, SET FOR ERROR RETURN
|
||
AOS -3(P) ;SKIP RETURN(UNLESS ERROR)
|
||
GTRSPX: MOVE A,B ;PUT RESULT IN A
|
||
POP P,N1 ;RESTORE PD LIST
|
||
POP P,B ;RESTORE B
|
||
POP P,N1 ;RESTORE N1
|
||
POPJ P, ;ERROR OR OK RETURN
|
||
|
||
|
||
;SUBROUTINE TO PROVIDE INCREMENTAL RESPONSE VALUE
|
||
; RETURNS WITH INCREMENTAL VALUE IN A, OLD VALUE IN OLDRSP(RSPIDX)
|
||
; AND INCREMENTAL VALUE IN DIFRSP(RSPIDX).
|
||
;
|
||
;CALL: MOVEI A,VALUE ;VALUE FROM GETTAB
|
||
; PUSHJ P,GETDIF ;RSPIDX HAS POINTER (SET BY GETRSP)
|
||
; RETURN HERE
|
||
|
||
GETDIF: PUSH P,B ;SAVE B,N
|
||
PUSH P,N
|
||
MOVE N,RSPIDX ;GET TABLE POINTER
|
||
MOVE B,OLDRSP(N) ;GET PREVIOUS VALUE
|
||
MOVEM A,OLDRSP(N) ;SAVE NEW AS OLD FOR NEXT TIME
|
||
SUB A,B ;GET DIFFERENCE
|
||
MOVEM A,DIFRSP(N) ;SAVE DIFFERENCE IN CASE NEED IT LATER
|
||
POP P,N ;RESTORE N,B
|
||
POP P,B
|
||
POPJ P, ;RETURN, INCREMENTAL VALUE IN A
|
||
|
||
|
||
;ROUTINE TO COMPUTE INTEGER SQRT: N=ISQRT(A,B)
|
||
;CALLED WITH POS ARG IN "A,B", RESULT RETURNED IN "N", USES N1
|
||
|
||
ISQRT: MOVEI N,0 ;PRESET NULL ANSWER
|
||
JUMPL A,CPOPJ ;RETURN 0 IF NEG
|
||
MOVE N,A ;COPY ARG
|
||
JFFO N,.+2 ;SET N1 TO NUM 0S
|
||
MOVEI N1,^D36 ;IN CASE ALL ZERO
|
||
SOS N1 ;BACK DOWN FOR SIGN BIT
|
||
TRZ N1,1 ;MAKE SMALLER EVEN
|
||
LSH B,1 ;COMPRESS OUT SIGN BIT OF B
|
||
LSHC A,-^D35(N1) ;POSITION MOST SIG. BITS IN B
|
||
ASH N1,-1 ;DIVIDE SHIFT BY 2
|
||
MOVNS N1 ;SET TO OTHER WAY FOR ANSWER
|
||
|
||
TRO B,1 ;FORCE SOME BITS ON TO TERMINATE
|
||
MOVEI N,0 ;CLEAR ANSWER
|
||
ISQ1: ASH N,1 ;MOVE TO NEXT BIT
|
||
CAMG A,N ;SEE IF REMAINDER IS BIG
|
||
JRST ISQ2 ;NO--LOOP ON
|
||
SUB A,N ;DECREASE REMAINDER
|
||
SUBI A,1 ;..
|
||
TRO N,2 ;INCREASE RESULT
|
||
ISQ2: LSHC A,2 ;SHIFT REMAINDER TWO BITS
|
||
JUMPN B,ISQ1 ;LOOP UNTIL DONE
|
||
ASH A,-1 ;BACK OFF REMAINDER
|
||
CAMLE A,N ;SEE IF ROUNDING NEEDED
|
||
ADDI N,1 ;YES--INCREASE RESULT
|
||
|
||
ASH N,^D17(N1) ;POSITION RESULT
|
||
POPJ P, ;RETURN
|
||
CRLF2: PUSHJ P,CRLF
|
||
CRLF: MOVEI M,[ASCIZ /
|
||
/]
|
||
MSG: TLZ M,-1 ;[325]
|
||
TLOA M,440700
|
||
MSG1: PUSHJ P,TYO
|
||
ILDB CH,M
|
||
JUMPN CH,MSG1
|
||
POPJ P,
|
||
|
||
;KAYPEE PRINTS A P OR K DDEPENDING ON THE SYSTEM
|
||
;WHOSE SYSTAT IS BEING PRINTED
|
||
|
||
KAYPEE: MOVEI CH,"K" ;ASSUME KA10 FIRST
|
||
SKIPE CPKI10 ;IS IT A KI10?
|
||
MOVEI CH,"P" ;(YES) THEN A P
|
||
PJRST TYO ;RETURN AFTER PRINTING
|
||
|
||
PLUS: MOVEI CH,"+"
|
||
JRST TYO
|
||
|
||
PERIOD: MOVEI CH,"."
|
||
JRST TYO
|
||
|
||
COLON: TLNE F,FL.SZR ;DON'T PRINT IF SUPPRESSINGZEROES
|
||
POPJ P,
|
||
MOVEI CH,":"
|
||
TLNE F,FL.BZR ;PRINT BLANK IF BLANKING ZEROES
|
||
MOVEI CH," "
|
||
JRST TYO
|
||
|
||
COMMA: MOVEI CH,","
|
||
JRST TYO
|
||
|
||
SIXTAB: PUSHJ P,SIXBP
|
||
TAB: SKIPA CH,[" "] ;PRINT TAB
|
||
SPACE: MOVEI CH,40
|
||
TYO: AOS COLCNT ;COUNT COLUMN
|
||
CAIN CH,12 ;A LINE FEED?
|
||
SETZM COLCNT ;YES, SET COLUMN COUNT TO LEFT MARGIN
|
||
JUMPL WD,CPOPJ
|
||
SKIPE COMTOA ;SPECIAL TYPEOUT ROUTINE?
|
||
PJRST @COMTOA ;YES, DISPATCH TO IT
|
||
TRNN F,FR.DPY ;DOES HE WANT PAGED OUTPUT?
|
||
JRST TYO1 ;NO
|
||
CAIN CH,12 ;IS IT A LINE FEED?
|
||
SOSE LINECT ;COUNT LINES
|
||
SKIPA
|
||
PUSH P,[HICCUP] ;HANDLE IT LATER
|
||
TYO1: SOSG TYOB+2
|
||
OUTPUT TTY,0
|
||
IDPB CH,TYOB+1
|
||
POPJ P,0
|
||
|
||
TYOCH: OUTCHR CH
|
||
POPJ P,
|
||
;WE TRICKED TYO INTO RETURNING HERE AFTER THAT LINE FEED
|
||
HICCUP: PUSH P,M ;SAVE THE REST FOR LATER
|
||
CLRBFI ;CLEAR THE INPUT BUFFER
|
||
OUTPUT TTY,0 ;EMPTY THE BUFFER JUST IN CASE
|
||
TTCALL 2,M ;RESET THE ^O SWITCH
|
||
JRST .+3 ;NOTHING TYPED
|
||
CAIN M,3 ;HE SAID SOMETHING, WAS IT ^C?
|
||
JRST EXIT. ;YES, QUIT
|
||
OUTSTR [ASCIZ/Type any single character to continue:/]
|
||
INCHRW M ;WAIT UNTIL HE TYPES SOMETHING, THEN EAT IT
|
||
CAIE M,15
|
||
OUTSTR [ASCIZ /
|
||
/] ;SEND CAR.RETURN IF USER DIDN'T.
|
||
CAIN M,3 ;IS IT ^C ?
|
||
JRST EXIT. ;YES, QUIT!
|
||
CAIN M,15
|
||
INCHRW M ;ACCEPT SCANNER SERVICE L.F.
|
||
MOVEI M,^D19 ;PAGE SIZE LESS ONE
|
||
MOVEM M,LINECT ;RESET THE COUNTER
|
||
POP P,M ;RESTORE THE REGISTER
|
||
POPJ P, ;REMEMBER WE HAD STOLEN TYO'S RETURN
|
||
|
||
OPRN2X: MOVEI CH,77 ;PRINT OCTAL AT LEAST 2 DIGITS
|
||
|
||
;PRINT OCTAL FIXED NUMBER OF PLACES
|
||
;CALL: CH=BIGGEST VALUE, N=VALUE
|
||
FIXOCT: LSH CH,-3 ;POSITION MASK
|
||
SKIPE CH ;SEE IF OUT OF PREFIX
|
||
CAMLE N,CH ;SEE IF DONE
|
||
JRST OPRNT ;YES--OUTPUT NUMBER
|
||
PUSH P,CH ;PRESERVE MASK
|
||
PUSHJ P,SPACE ;OUTPUT FILLER
|
||
POP P,CH ;RESTORE MASK
|
||
JRST FIXOCT ;LOOP FOR MORE
|
||
|
||
;OCTAL OUTPUTS
|
||
OPRNT: MOVEI R,10 ;REGULAR RADIX
|
||
JRST RDXPRT ;GO DO IT
|
||
TCKTIB: TLOA F,FL.BZR ;BLANK LEADING ZEROES
|
||
TCKTIS: TLO F,FL.SZR ;SUPPRESS ZEROES
|
||
TCKTIM: IDIV A,TCKSEC ;JUNK JIFFIES
|
||
ASH B,1 ;ROUND?
|
||
CAML B,TCKSEC
|
||
ADDI A,1 ;ROUND-UP
|
||
TIME: PUSH P,A ;ASVE TIME FOR LATER TEST
|
||
IFGE FTAMPM,<
|
||
IFE FTAMPM,<
|
||
MOVSI B,(CLKCYC) ;GET FLAG FOR 50 HERTZ
|
||
TDNE B,STATES ;IN STATES WORD
|
||
TRZ F,FR.DAY ;YES--CLEAR AM/PM REQUEST
|
||
>
|
||
TRNE F,FR.DAY ;SEE IF AM/PM HACK
|
||
CAIGE A,^D12*^D60*^D60 ;YES--SEE IF PM
|
||
JRST .+2 ;NO--SKIP
|
||
SUBI A,^D12*^D60*^D60 ;YES--SUBTRACT 12 HOURS
|
||
>
|
||
IDIVI A,^D60*^D60
|
||
IFL FTAMPM,<
|
||
MOVE N,A
|
||
>
|
||
IFGE FTAMPM,<
|
||
SKIPN N,A
|
||
TRNN F,FR.DAY
|
||
JRST .+2
|
||
MOVEI N,^D12
|
||
>
|
||
PUSHJ P,DECP2X
|
||
PUSHJ P,COLON
|
||
IDIVI B,^D60
|
||
MOVE N,B
|
||
PUSHJ P,DECPR2
|
||
PUSHJ P,COLON
|
||
MOVE N,C
|
||
MOVEI C,DECPR2 ;PRESET ROUTINE
|
||
TLZE F,FL.SZR
|
||
MOVEI C,DECPRT ;IF SUPPRESSING, MAKE SURE WE PRINT SOMETHING
|
||
TLZE F,FL.BZR
|
||
MOVEI C,DECP2X ;LIKEWISE FOR BLANKING
|
||
PUSHJ P,(C) ;PRINT FINAL FIELD
|
||
POP P,C ;RECOVER ARGUMENT
|
||
IFGE FTAMPM,<
|
||
MOVEI M,[ASCIZ / a.m./]
|
||
CAIL C,^D12*^D60*^D60
|
||
MOVEI M,[ASCIZ / p.m./]
|
||
TRZE F,FR.DAY ;SEE IF AM/PM HACK
|
||
JRST MSG ;YES--OUTPUT SUFFIX
|
||
>
|
||
POPJ P, ;NO--RETURN
|
||
OCTPRJ: PUSH P,A
|
||
PUSH P,N
|
||
PUSH P,COLCNT
|
||
PUSH P,WD
|
||
SETO WD, ;COUNT, DON'T PRINT
|
||
PUSHJ P,OCTPRT
|
||
MOVE N,COLCNT ;NOW COMPUTE HOW TO FORMAT IT
|
||
SUB N,-1(P)
|
||
SUBI N,^D13 ;IT TAKES 13 DIGITS TO PRINT THE LARGEST
|
||
; OCTAL NUMBER. E.G., NNNNNN,NNNNNN
|
||
POP P,WD
|
||
POP P,COLCNT
|
||
SKIPGE N
|
||
PUSHJ P,SPACE
|
||
AOJL N,.-1
|
||
POP P,N
|
||
POP P,A
|
||
JRST OCTPRT
|
||
DECPRJ: JUMPL N,DECPJ2 ;JUST FOR SAFETY'S SAKE
|
||
MOVE A,[^D10000000000]
|
||
DECPJ1: CAML N,A
|
||
JRST DECPJ2
|
||
PUSHJ P,SPACE
|
||
IDIVI A,^D10
|
||
JRST DECPJ1
|
||
DECPJ2: JUMPGE WD,DECPRT
|
||
POPJ P,
|
||
DECP3X: MOVEI CH," "
|
||
CAIG N,^D99
|
||
PUSHJ P,TYO
|
||
JRST DECP2X ;PRINT 3 DECIMAL DIGITS
|
||
DECPR2: MOVEI CH,"0"
|
||
TLNE F,FL.BZR ;SUBSTITUTE BLANK IF BLANKING ZEROES
|
||
DECP2X: MOVEI CH," "
|
||
CAIG N,^D9
|
||
TLNE F,FL.SZR ;DON'T PRINT IF SUPPRESSING ZEROES
|
||
JRST DECPRT
|
||
PUSHJ P,TYO
|
||
DECPRT: MOVEI R,^D10
|
||
RDXPRT: MOVEI CH,"-"
|
||
JUMPGE N,RADIX1
|
||
PUSHJ P,TYO
|
||
MOVMS N
|
||
RADIX1: JUMPN N,RADIX2 ;DEFINITELY PRINT IF NON-ZERO
|
||
TLNN F,FL.SZR!FL.BZR ;SEE IF BLANKING OR SUPPRESSING
|
||
JRST RADIX2 ;NO--PRINT ONE ZERO
|
||
MOVEI CH," "
|
||
TLNN F,FL.SZR ;SEE IF SUPPRESSING ZEROES
|
||
PUSHJ P,TYO ;NO--BLANKING SO OUTPUT SPACE
|
||
POPJ P, ;YES--RETURN
|
||
RADIX2: TLZ F,FL.SZR!FL.BZR ;STOP ANY ZERO SUPPRESSION
|
||
IDIVI N,(R)
|
||
HRLM N1,0(P)
|
||
SKIPE N
|
||
PUSHJ P,RADIX2
|
||
HLRZ CH,0(P)
|
||
ADDI CH,"0"
|
||
JRST TYO
|
||
|
||
DECTAB: PUSHJ P,DECPRT
|
||
JRST TAB
|
||
CPCPT: CAIG N,^D999 ;NN.N% FORM?
|
||
JRST CPCPT2 ;NO
|
||
IDIVI N,^D100 ;YES, REDUCE TO JUST PERCENT
|
||
CAILE N,^D99 ;100%?
|
||
PJRST DECPRT ;YES, THAT'S OUR THREE DIGITS
|
||
PUSH P,N1 ;HOLD REMAINDER
|
||
PUSHJ P,DECPRT ;NO, PRINT TWO DIGITS
|
||
MOVEI CH,"." ;FOLLOW BY PERCENT INDICATOR
|
||
PUSHJ P,TYO ;AND CAP IT OFF
|
||
POP P,N ;GET IT BACK
|
||
IDIVI N,^D10 ;ONLY TENTHS
|
||
PJRST DECPRT ;TYPE IT OUT
|
||
CPCPT2: CAIG N,^D99 ;N.N FORM?
|
||
JRST CPCPT4 ;NO
|
||
IDIVI N,^D100 ;GET PERCENTAGE DIGIT
|
||
MOVEI CH,"0"(N) ;IN ASCII
|
||
PUSHJ P,TYO ;AND PRINT IT OUT
|
||
MOVEI CH,"." ;SEPARATING DOT
|
||
PUSHJ P,TYO ;PRINT IT ALSO
|
||
MOVE N,N1 ;GET BACK THE HUNDREDTHS
|
||
IDIVI N,^D10 ;TENTHS OF PERCENT
|
||
MOVEI CH,"0"(N) ;IN ASCII
|
||
PJRST TYO ;AND PRINT IT OUT
|
||
CPCPT4: MOVEI CH,"." ;LEADING DECIMAL
|
||
PUSHJ P,TYO ;INDICATE HUNDREDTHS
|
||
MOVEI CH,"0" ;IN CASE NEED LEADING "0"
|
||
CAIG N,^D9 ;LESS THAN .10 PERCENT?
|
||
PUSHJ P,TYO ;YES, NEED LEADING "0"
|
||
PJRST DECPRT ;TYPE HUNDREDTHS OF PERCENT
|
||
THISIS: MOVEI M,[BYTE (7) 14,0,0,0] ;GIVE HIM A FORM FEED
|
||
TLNE F,FL.LPT ;IF HE IS OUTPUTTING TO THE LPT
|
||
PUSHJ P,MSG ;OTHERWISE NOT
|
||
TLNN F,FL.DSK ;SEE IF WE SHOULD TYPE THIS STUFF
|
||
JRST NULDEV ;NO, GO DO NORMAL THINGS
|
||
SKIPN INFILE ;IF NO FILE NAME THEN NO DESCRIPTION
|
||
JRST NULDEV ;SO GET OUT OF HERE
|
||
MOVEI M,[ASCIZ/[Status report from crash file /] ;GIVE MESSAGE
|
||
PUSHJ P,MSG ;SHOULD HELP PRETTY IT UP
|
||
MOVE A,INDEV ;GET THE DEVICE TYPE
|
||
JUMPE A,INFIL ;IN CASE OF NULL DEV
|
||
PUSHJ P,SIXBP ;OUTPUT IT
|
||
MOVEI M,[ASCIZ/:/] ;PUT THE COLON OUT THERE
|
||
PUSHJ P,MSG ;OUT IT
|
||
INFIL: MOVE A,INFILE ;GET THE FILE NAME
|
||
PUSHJ P,SIXBP ;PUT IT OUT THERE
|
||
MOVEI M,[ASCIZ/./] ;SEPERATE WITH A PERIOD
|
||
PUSHJ P,MSG ;OUT IT
|
||
SKIPN A,INEXT ;GET EXTENSION IF GIVEN
|
||
MOVSI A,'EXE' ;ELSE DEFAULT TO .EXE IF BLANK
|
||
PUSHJ P,SIXBP ;PUT IT OUT ALSO
|
||
MOVEI M,[ASCIZ/[/] ;START OF PATH
|
||
PUSHJ P,MSG ;PRINT SEPARATOR
|
||
MOVE B,LKB+.RBPPN ;GET PPN/PATH POINTER
|
||
TLNN B,-1 ;PATH?
|
||
SKIPA C,.PTPPN(B) ;GET PPN FROM PATH
|
||
MOVE C,B ;ELSE USE ONE FROM LOOKUP BLOCK
|
||
HLRZ A,C ;PROJECT NUMBER
|
||
PUSHJ P,OCTPRA ;PRINT IT
|
||
MOVEI M,[ASCIZ/,/] ;SEPARATOR
|
||
PUSHJ P,MSG ;PRINT IT
|
||
HRRZ A,C ;PROGRAMMER NUMBER
|
||
PUSHJ P,OCTPRA ;PRINT IT
|
||
TLNE B,-1 ;PATH?
|
||
JRST INPAT2 ;NO--DONE
|
||
INPAT1: SKIPN A,.PTSFD(B) ;END OF PATH?
|
||
JRST INPAT2 ;YES
|
||
MOVEI M,[ASCIZ/,/] ;SEPARATOR
|
||
PUSHJ P,MSG ;PRINT IT
|
||
PUSHJ P,SIXBP ;PRINT SFD
|
||
AOJA B,INPAT1 ;LOOP FOR MORE
|
||
INPAT2: MOVEI M,[ASCIZ/]]
|
||
/] ;PUT THE CLOSING TEXT OUT THERE
|
||
PUSHJ P,MSG ;PUT IT OUT
|
||
NULDEV: ;ADD LABEL NULDEV
|
||
SKIPA M,[[ASCIZ /
|
||
Status of /]]
|
||
CRSMSG: MOVEI M,[ASCIZ/Monitor is /]
|
||
PUSHJ P,MSG
|
||
MOVEI B,0
|
||
MOVEI C,11 ;TAB
|
||
SYS2: MOVEI M,A
|
||
MOVE A,C
|
||
PUSHJ P,GETA
|
||
PUSHJ P,MSG
|
||
AOBJN C,.+1
|
||
TRNE A,376
|
||
SOJA C,SYS2
|
||
MOVEI M,[ASCIZ / at /]
|
||
PUSHJ P,MSG
|
||
MOVE A,XTIME
|
||
PUSHJ P,GETA
|
||
MOVEM A,NOW ;SAVE FOR LATER
|
||
IFGE FTAMPM,<
|
||
TRO F,FR.DAY ;SET FOR DATE AM/PM HACK
|
||
>
|
||
PUSHJ P,TCKTIM
|
||
MOVEI M,[ASCIZ / on /]
|
||
PUSHJ P,MSG
|
||
MOVE A,XDATE ;GET TODAY'S DATE
|
||
PUSHJ P,GETA ;FRESHLY
|
||
IDIVI A,^D31
|
||
MOVEI N,1(B)
|
||
PUSHJ P,DECPR2
|
||
IDIVI A,^D12
|
||
MOVE B,MONTAB(B)
|
||
MOVEI C,0
|
||
MOVEI M,B
|
||
MOVEI N,^D64(A)
|
||
PUSHJ P,MSGDEC ;PRINT MESSAGE FOLLOWED BY DECIMAL NO.
|
||
SKIPE COMTOA ;SPECIAL TYPEOUT ROUTINE?
|
||
POPJ P, ;YES, NO CRLF AT END
|
||
CALL CRLF ;PRINT IT
|
||
OUT TTY, ;DO OUTPUT
|
||
RETURN
|
||
BOMB <Output failed> ;ERROR ON OUTPUT
|
||
;SUBROUTINE TO PRINT PROJECT PROGRAMMER NUMBER AS A PAIR
|
||
;IF ZERO, RETURN
|
||
;IF SAME AS SYSPPN, PRINT "SYS"
|
||
;IF SAME AS MY PPN, PRINT "[SELF]"
|
||
;IF SIGN BIT ON, PRINT IN SIXBIT
|
||
;ELSE, PRINT AS PAIR OR OCTAL NUMBERS
|
||
;ENTERED WITH PPN TO BE PRINTED IN A
|
||
;USES N,R,N1,BP,CH
|
||
|
||
PNTPPN: SKIPN A ;SEE IF NULL
|
||
POPJ P, ;YES--RETURN
|
||
CAMN A,[-1] ;SEE IF HIDDEN
|
||
JRST ASTSIX ;YES--PRINT ASTERISKS
|
||
CAMN A,FSFPPN ;SEE IF OPERATOR
|
||
MOVE A,[SIXBIT /[OPR]/]
|
||
CAMN A,SYSPPN
|
||
MOVE A,[SIXBIT /[SYS]/] ;TYPE NAME FOR SYS
|
||
SKIPN ONEJOB ;SEE IF SELF
|
||
TLNE F,FL.GOD!FL.LPT ;SEE IF OPERATOR
|
||
JRST NOTSLF ;YES--SKIP SELF CHECK
|
||
CAMN A,ME ;SEE IF ME
|
||
MOVE A,[SIXBIT /[SELF]/]
|
||
NOTSLF: IFN STANSW,<JRST TABSIX>
|
||
IFE STANSW,<
|
||
JUMPLE A,SP4SIX ;PRINT AS NAME IF SIXBIT
|
||
TLNE A,7B20 ;WIDE PROJECT NUMBER?
|
||
PUSHJ P,SPACE ;YES--SPACE OVER
|
||
PUSH P,A ;SAVE ARGUMENT
|
||
HLRZ N,A ;GET LEFT HALF
|
||
MOVEI CH,-1 ;SETUP MASK FOR 6 DIGITS
|
||
PUSHJ P,FIXOCT ;OUTPUT IN FIXED FORMAT
|
||
JRST OCTCRH ;GO FINISH IN VARIABLE FORM
|
||
>
|
||
|
||
;PRINT OCTAL AS UNSIGNED HALVES
|
||
OCTPRA: MOVE N,A ;MOVE DATUM
|
||
OCTPRT: PUSH P,N
|
||
HLRZ N,N
|
||
JUMPE N,OCTRH
|
||
PUSHJ P,OPRNT ;OUTPUT IN OCTAL
|
||
OCTCRH: PUSHJ P,COMMA
|
||
OCTRH: HRRZ N,(P)
|
||
PUSHJ P,OPRNT ;OUTPUT IN OCTAL
|
||
POP P,N
|
||
POPJ P,
|
||
JRST RDXPRT
|
||
;SUBROUTINE TO GET A CH. FROM COMMAND BUFFER
|
||
;CALL PUSHJ P,GETCHR
|
||
; NONE LEFT OR BREAK CH. FOUND
|
||
; GOT A CH. RETURN
|
||
;AC WD IS RETURNED WITH THE CH.
|
||
;AC F WILL HAVE FL.BRK SET IF BREAK CH. FOUND
|
||
|
||
GETCHR: SKIPE WD,SAVCHR ;SEE IF ALREADY HOLDING CHAR
|
||
JRST [SETZM SAVCHR ;YES--CLEAR IT
|
||
JRST CPOPJ1] ;AND RETURN IT
|
||
TLNE F,FL.BRK ;SEE IF ALREADY AT END
|
||
JRST FLAGIT ;YES
|
||
ILDB WD,CMDPTR ;GET CHARACTER
|
||
CAIN WD,0 ;NULL CHARACTER ?
|
||
JRST FLAGIT ;YES--NONE LEFT
|
||
CAIN WD,3 ;IS IT ^C ?
|
||
EXIT 1, ;YES, ABORT, ABORT, ABORT
|
||
CAIL WD,"A"+40 ;CHECK LOWER CASE
|
||
CAILE WD,"Z"+40
|
||
JRST .+2 ;NO
|
||
SUBI WD,40 ;YES
|
||
CAIN WD,11 ;SEE IF TAB
|
||
MOVEI WD," " ;YES--CHANGE TO SPACE
|
||
CAIG WD,14 ;IS IT LF,VT
|
||
CAIGE WD,12 ;FF OR
|
||
CAIN WD,33 ;ALTMODE?
|
||
JRST FLAGIT ;YES - NON SKIP RETURN
|
||
CAIE WD,176 ;OTHER KINDS
|
||
CAIN WD,175 ;OF ALTMODE?
|
||
JRST FLAGIT ;YES - NON SKIP
|
||
IFE FTDEBUG,<
|
||
TRNE F,FR.CMT ;ARE WE IN A COMMENT?
|
||
JRST GETCHR ;YES - THROW IT AWAY
|
||
CAIE WD,";" ;IS THIS A COMMENT?
|
||
CAIN WD,"!" ;EITHER KIND?
|
||
JRST .+2 ;YES, GO HANDLE IT
|
||
>
|
||
JRST CPOPJ1 ;NONE OF THE ABOVE, RETURN IT.
|
||
IFE FTDEBUG,<
|
||
TRO F,FR.CMT ;INTO A COMMENT
|
||
JRST GETCHR ;SO THROW THE CHAR AWAY.
|
||
>
|
||
|
||
FLAGIT: TLO F,FL.BRK ;FLAG THAT BREAK FOUND
|
||
POPJ P, ;NON SKIP RETURN
|
||
|
||
;GET RADIX INPUT
|
||
GETRDC: TDZA N,N ;CLEAR ANSWER AND SUCK CHAR
|
||
GETRDX: TDZA N,N ;CLEAR ANSWER
|
||
GETRD1: PUSHJ P,GETCHR ;GET NEXT DIGIT
|
||
JFCL ;IGNORE END
|
||
CAIL WD,"0" ;SEE IF DIGIT
|
||
CAIL WD,"0"(R) ;..
|
||
JRST [EXCH WD,SAVCHR ;NO--SAVE FOR NEXT SCAN
|
||
POPJ P,] ;RETURN
|
||
IMULI N,(R) ;YES--ADVANCE RESULT
|
||
ADDI N,-"0"(WD) ;ADD DIGIT
|
||
JRST GETRD1 ;LOOP FOR MORE
|
||
|
||
; @GETRD1+7 1/2, ADD ROUTINE RDCMND, JMT, 3-MAY-76
|
||
;SUBROUTINE TO READ COMMAND INTO COMMAND BUFFER
|
||
;IF THIS IS THE FIRST TIME, AND TO RESET THE POINTER
|
||
;TO THE BEGINNING.
|
||
;CALL:
|
||
; PUSHJ P,RDCMND
|
||
; . . ;RETURNS HERE
|
||
;ACS A & WD ARE DESTROYED
|
||
|
||
RDCMND: MOVE A,ORGPTR ;GET ORIGIONAL POINTER
|
||
MOVEM A,CMDPTR ;AND RESET COMMAND POINTER
|
||
SETZM SAVCHR ;RESET LOOK AHEAD
|
||
TLZ F,FL.BRK ;AND CLEAR BREAK FLAG
|
||
SKIPE GOTCMD ;GOT COMMAND ALREADY?
|
||
RETURN ;YES, RETURN
|
||
RESCAN 1 ;TRY TO READY COMMAND LINE
|
||
SKPINC ;ANYTHING?
|
||
JRST FLAGIT ;NO, RETURN EOF.
|
||
RDCMD1: TTCALL 2,WD ;GET CHARACTER
|
||
JRST RDCMD2 ;NO MORE LEFT
|
||
IDPB WD,CMDPTR ;STORE CHARACTER IN BUFFER
|
||
HRRZ A,CMDPTR ;WHERE DID WE PUT THAT CHAR?
|
||
CAIL A,CDENDP ;IN THE LAST WORD??
|
||
JRST CBOFLO ;YES, OVERFLOW ERROR
|
||
CAIG WD,14 ;IS IT LF, VT
|
||
CAIGE WD,12 ;FF OR
|
||
CAIN WD,33 ;ALTMODE ?
|
||
JRST RDCMD2 ;YES--NO MORE LEFT
|
||
CAIE WD,176 ;OTHER KINDS
|
||
CAIN WD,175 ;OF ALTMODES ?
|
||
JRST RDCMD2 ;YES--THAT'S IT
|
||
JRST RDCMD1 ;NO--LOOP BACK FOR REST OF LINE
|
||
|
||
RDCMD2: SETZ WD, ;CLEAR WD TO MAKE NULL
|
||
IDPB WD,CMDPTR ;MARK BUFFER END WITH NULL
|
||
MOVE A,ORGPTR ;GET ORIGIONAL BUFFER POINTER
|
||
MOVEM A,CMDPTR ;AND RESET COMMAND POINTER
|
||
SETOM GOTCMD ;SET COMMAND GOTTEN FLAG
|
||
MOVE A,ORGPTR ;GET ORIGIONAL POINTER
|
||
MOVEM A,CMDPTR ;AND RESET COMMAND POINTER
|
||
SETZM SAVCHR ;RESET LOOK AHEAD
|
||
TLZ F,FL.BRK ;AND CLEAR BREAK FLAG
|
||
POPJ P,0 ;RETURN
|
||
|
||
|
||
|
||
CBOFLO: JSP M,BOMB. ;
|
||
ASCIZ /Input line too long/
|
||
;SUBROUTINE TO DIVIDE A NUMBER IN AC N BY TEMP
|
||
;ROUND UP RESULT IF NECESSARY AND PRINT MESSAGE FOLLOWED BY N (%)
|
||
;CALL MOVEM AC,TEMP
|
||
; MOVE N,NUMBER TO BE DIVIDED
|
||
; MOVEI M,[ASCIZ /TEXT/]
|
||
; PUSHJ P,DIVRPT
|
||
; ALWAYS RETURN
|
||
;ACS N1,N,M,CH & R ARE DESTROYED
|
||
|
||
CMPCNA: MOVE N,A
|
||
CMPCNT: IMULI N,^D100
|
||
IDIV N,TEMP
|
||
LSH N1,1
|
||
CAML N1,TEMP
|
||
ADDI N,1
|
||
|
||
MSGDEC: PUSHJ P,MSG
|
||
JRST DECPRT
|
||
|
||
SIXDEC: PUSHJ P,SIXBP
|
||
JRST DECPRT
|
||
|
||
DECMSG: PUSHJ P,DECPRT ;OUTPUT DECIMAL
|
||
JRST MSG ;THEN MESSAGE
|
||
|
||
MSGOCT: PUSHJ P,MSG ;SEND MESSAGE
|
||
JRST OCTPRT ;THEN OCTAL
|
||
|
||
MSGCPC: PUSHJ P,MSG ;OUTPUT MESSAGE
|
||
JRST CPCPT ;THEN PERCENTAGE
|
||
;SUBROUTINE TO CHECK IF A SEGMENT IS INACTIVE
|
||
;INACTIVE IS DEFINED AS RUN BIT OFF OR TI/SL/EW STATE
|
||
;ARGS J=SEGMENT NUMBER IN RH
|
||
;NON-SKIP RETURN IF ACTIVE, SKIP RETURN IF INACTIVE
|
||
|
||
INACTC: SKIPL R,@.STS ;SKIP IF RUN BIT ON
|
||
JRST CPOPJ1 ;OFF, INACTIVE
|
||
LDB R,[POINT 5,R,14];GET WAIT STATE CODE
|
||
CAMN R,SLQ ;SKIP IF DOESNT MATCH
|
||
JRST CPOPJ1 ;YES, ONE MATCHES, INACTIVE
|
||
CAME R,TIQ ;IN "TI" STATE?
|
||
CAMN R,EWQ ;IN "EW" STATE?
|
||
JRST CPOPJ1 ;YES, MATCHES, INACTIVE
|
||
POPJ P, ;NO, MUST BE ACTIVE
|
||
|
||
;SUBROUTINE TO PRINT (N) AS A PERCENTAGE OF (CH), RIGHT JUSTIFIED
|
||
;CALL MOVE CH,REFERENCE NUMBER
|
||
; MOVE N,NUMBER TO BE DIVIDED
|
||
; PUSHJ P,PNCT2
|
||
; ALWAYS RETURN
|
||
;ACS N1,N,CH & R ARE DESTROYED
|
||
|
||
PCNT2: IMULI N,^D100
|
||
IDIV N,CH
|
||
LSH N1,1
|
||
CAML N1,CH
|
||
ADDI N,1
|
||
|
||
MOVEI CH," " ;FOR A LEADING BLANK
|
||
CAIG N,^D9 ;DO WE NEED IT TO RIGHT JUSTIFY?
|
||
PUSHJ P,TYO ;YES
|
||
JRST DECPRT
|
||
|
||
;SUBROUTINE TO PRINT INTEGER+1 DIGIT FRACTION
|
||
;CALL: MOVEM TEMP NUMBER TO DIVIDE BY
|
||
; MOVE A,NUMBER TO BE DIVIDED
|
||
; PUSHJ P,CMPDFA
|
||
; ALWAYS RETURN
|
||
|
||
CMPDFA: MOVE N,A
|
||
CMPDFN: IMULI N,^D10 ;* 10
|
||
IDIV N,TEMP ;DIVIDE BY #K AVAILABLE
|
||
LSH N1,1 ;REMAINDER * 2
|
||
CAML N1,TEMP ;TEST FOR ROUNDING NEEDED
|
||
AOJ N, ;YES, INCR QUOTIENT BY 1
|
||
IDIVI N,^D10 ;DIVIDE TO GET INTEGER/FRACTION
|
||
PUSH P,N1 ;SAVE FRACTION FOR LATER
|
||
PUSHJ P,MSGDEC ;PRINT MSG & INTEGRAL PART
|
||
POP P,N ;RESTORE FRACTIONAL DIGIT
|
||
MOVEI M,[ASCIZ /./]
|
||
PJRST MSGDEC ;PRINT DEC. POINT & FRACTION
|
||
|
||
;SUBROUTINE TO PRINT JIFFY TIME TO NEAREST TENTHS OF SECONDS
|
||
;CALL: MOVE N,TIME IN JIFFIES
|
||
; PUSHJ P,PNTSEC
|
||
|
||
PNTSEC: MOVE A,TCKSEC ;NO. OF JIFFIES IN 1 SECOND
|
||
MOVEM A,TEMP ;STORE FOR CMPDFN
|
||
PJRST CMPDFN ;GO PRINT RATIO
|
||
;SUBROUTINE TO PRINT SMALL TIME VALUE
|
||
;CALL MOVE A,VALUE IN JIFFIES
|
||
; PUSHJ P,TIMPR
|
||
; .. RETURN
|
||
|
||
TIMPR: IMULI A,^D100
|
||
IDIV A,TCKSEC ;FORM .01 SECONDS
|
||
TLO F,FL.SZR ;SUPPRESS ZEROES
|
||
JRST MEMPR1
|
||
|
||
;SUBROUTINE TO CONVERT BLT TIME TO SECONDS (ROUNDED)
|
||
;PRINTS MESSAGE FOLLOWED BY TIME
|
||
;CALL MOVE A,BLT COUNT
|
||
; MOVEI M,[ASCIZ /TEXT/]
|
||
; PUSHJ P,MEMPR
|
||
; ALWAYS RETURN
|
||
;ACS A,B,C,N,N1,M,CH & R ARE DESTROYED
|
||
|
||
MEMPR: TLO F,FL.SZR ;SUPPRESS ZEROES
|
||
PUSHJ P,MSG ;SEND MESSAGE
|
||
MUL A,MEMNSP ;=TOTAL N-SEC/2
|
||
DIV A,[^D5000000] ;=TOTAL .01 SEC
|
||
MEMPR1: TLNE B,200000 ;CHECK ROUND
|
||
ADDI A,1 ;ROUND-UP
|
||
IDIVI A,^D100 ;GET SEC
|
||
PUSH P,B ;SAVE .01S
|
||
PUSHJ P,TIME ;PRINT HR:MIN:SEC
|
||
PUSHJ P,PERIOD ;PRINT .
|
||
POP P,N ;RESTORE .01S
|
||
PUSHJ P,DECPR2 ;PRINT .01S
|
||
POPJ P, ;RETURN
|
||
|
||
|
||
;SUBROUTINE SEGLOK CHECKS IF A SEGMENT IS LOCKED IN CORE
|
||
; J=JOB # OR HIGH SEG #
|
||
; N=SIZE OF SEGMENT
|
||
; UPDATES MAXMAX TO INCLUDE LOCKED SEG SIZE
|
||
; ALWAYS NON-SKIP RETURN
|
||
;
|
||
SEGLOK: SETOM LOKCHK ;FLAG THAT WE WERE HERE
|
||
PUSH P,B ;SAVE B
|
||
MOVE B,@.STS ;GET STATUS WORD
|
||
TLNE B,NSWP!NSHF ;SEE IF LOCKED
|
||
ADDM N,MAXMAX ;YES,UPDATE MAXMAX W/ SIZE OF LOCKED SEG
|
||
POP P,B ;(NO)RESTORE B
|
||
POPJ P, ;RETURN
|
||
;SUBROUTINE TO COMPUTE THE SIZE OF A HI OR LOW SEGMENT
|
||
;ENTERRED WITH J=JOB OR SEGMENT NUMBER; IF JOB, JS=STATUS
|
||
;RETURN WITH N=SIZE IN K
|
||
;RESPECTS ALL AC'S
|
||
|
||
SEGSZ: MOVEI N,(J) ;CHECK RANGE.
|
||
CAML N,BOTH ;..
|
||
JRST SEGSZ4 ;NO GOOD
|
||
TRNN F,FR.VMF ;IS THIS A VM SYSTEM?
|
||
JRST SEGSZ7 ;(NO) USE THE CLASSIC LOGIC
|
||
MOVE N,@.SWP ;(YES) ASSUME WE NEED IMGIN FIELD
|
||
TLNN F,FL.HSG ;IF THIS IS NO HIGH SEGMENT
|
||
JRST SEGSZ6 ;THEN RETURN LAST 9 BITS
|
||
SEGSZ8: MOVE N,@.STS ;ELSE SEE IF IT IS
|
||
TLNE N,SHRSEG ;NONSHARABLE
|
||
JRST SEGSZ7 ;SHARABLE IS OLD LOGIC
|
||
PUSHJ P,NSHSZ ;IT IS NONSHARABLE
|
||
JRST SEGSZ6 ;RETURN 9 BITS
|
||
SEGSZ7: MOVS N,@.ADR ;FETCH SEGMENT ADDRESS AND SIZE IN CORE
|
||
JUMPE N,SEGSZ1 ;JUMP IF NOT IN CORE
|
||
TLNN F,FL.HSG ;TEST IF HI-SEG REQUEST
|
||
TLNN JS,JSWP ;N0--SEE IF SWAPPED OUT
|
||
JRST SEGSZ2 ;HI-SEG OR IN-CORE LO-SEG
|
||
SEGSZ1: MOVE N,@.SWP ;FETCH SWAPPING DATA
|
||
TRNE N,377 ;SEE IF OUT YET
|
||
JRST SEGSZ3 ;(IN-CORE SIZE)
|
||
MOVS N,@.ADR ;NO. USE IN-CORE VALUE ANYWAY
|
||
SEGSZ2: SKIPE CPKI10
|
||
JRST SEGSZ5 ;DO KI10 WORK
|
||
ADDI N,1777 ;ROUND IN-CORE SIZE UP
|
||
ASH N,-^D10 ;DIVIDE BY 1K
|
||
SEGSZ3: ANDI N,377 ;MASK RESULT TO 256K
|
||
POPJ P, ;RETURN
|
||
SEGSZ4: MOVEI N,777 ;RETURN HUGE NUMBER
|
||
POPJ P,0
|
||
SEGSZ5: ADDI N,777 ;ROUND TO PAGES
|
||
LSH N,-^D9
|
||
SEGSZ6: PUSH P,A
|
||
TLNE F,FL.HSG
|
||
JRST SEGSZ9
|
||
MOVE A,MONVER
|
||
CAILE A,70207
|
||
TLZA N,777770
|
||
SEGSZ9: ANDI N,777
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
;SUBROUTINE TO RETURN SIZE OF A NON-SHARABLE HIGH SEGMENT. ENTER J=SEGMENT NUMBER.
|
||
|
||
NSHSZ: PUSH P,A ;SAVE A TEMP TO USE FOR GETTAB
|
||
HRLZ A,J ;SEGMENT NUMBER
|
||
HRRI A,7 ;GETTAB TABLE NUMBER
|
||
PUSHJ P,GETZ ;GET SIZE
|
||
HLRZ N,A ;IN THE LEFT HALF
|
||
POP P,A ;RESTORE TEMP
|
||
POPJ P, ;AND RETURN
|
||
;SUBROUTINE TO FIND 1ST. JOB USING A SEGMENT
|
||
;CALL MOVE J,SEGMENT NO.
|
||
; PUSHJ P,SEGSCN
|
||
; NONE FOUND RETURN
|
||
; FOUND
|
||
;AC'S B & C DESTROYED
|
||
;AC J IS RESPECTED
|
||
|
||
SEGSCN: MOVN B,JOBN
|
||
HRLZS B
|
||
HRR B,.SGN ;PREPARE AOBJN PTR. FOR SCANNING JBTSGN
|
||
HIGH06: HRRZ C,(B) ;GET SEGMENT NO.
|
||
CAIE C,(J) ;DOES IT MATCH WITH CURRENT ONE?
|
||
HIGH6A: AOBJN B,HIGH06 ;NO-DO AGAIN
|
||
JUMPL B,CPOPJ1 ;WE HAVE A MATCH?
|
||
POPJ P, ;NO-NONE FOUND RETURN
|
||
|
||
|
||
;SUBROUTINE TO PRINT A MSG. FOLLOWED "SW" IF SEGMENT SWAPPED & NOT FRAGMENTED
|
||
; OR "SF" IF SWAPPED & FRAGMENTED, OR "FR" IF JUST FRAGMENTED & A HISEG
|
||
; OR NOTHING IF IN CORE & NOT FRAGMENTED
|
||
;CALL MOVE JS,JOB/HISEG STATUS
|
||
; MOVE B,CORE SIZE (HI ONLY)
|
||
; MOVSI A,(SIXBIT .XX.)
|
||
; PUSHJ P,LOPSWP/HIPSWP
|
||
; ALWAYS GOOD RETURN
|
||
;AC'S A,B,BP,CH ARE DESTROYED
|
||
;AC JS IS RESPECTED *******MSG TO BE PRINTED MUSTN'T EXCEED 4 CHS.********
|
||
|
||
HIPSWP: TLNE JS,JSWP ;IS HI SEG SWAPPED?
|
||
JRST LOPSW1 ;YES - GO PRINT "SW" OR "SF"
|
||
SKIPL @.SWP ;CORE IMAGE FRAGMENTED ON DISK?
|
||
JRST LOPSW3 ;NO
|
||
PUSHJ P,SIXBP
|
||
MOVSI A,(SIXBIT .FR.) ;YES - PRESUME HISEG IN CORE
|
||
JRST LOPSW2 ;YES - PRINT "FR"
|
||
|
||
LOPSWP: SETZ B,
|
||
TLNN JS,JSWP ;IS SEG SWAPPED?
|
||
JRST LOPSW3 ;NO - PRINT MSG & EXIT
|
||
LOPSW1: PUSHJ P,SIXBP
|
||
MOVEI A,.GTSWP ;JBTSWP
|
||
HRL A,J ;SEGMENT NUMBER
|
||
PUSHJ P,GETZ ;GET CONTENTS OF JBTSWP
|
||
SKIPL A ;FRAGMENTED?
|
||
SKIPA A,[SIXBIT /SW/] ;NO
|
||
MOVSI A,(SIXBIT /SWF/);YES, INDICATE SWAPPED & FRAGMENTED
|
||
CAIGE B,^D100 ;SKIP SPACE IF NO ROOM
|
||
LOPSW2: PUSHJ P,SPACE
|
||
LOPSW3: PUSHJ P,SIXBP ;PRINT "FR","SF" OR "SW"
|
||
LDB N,IMGOUT ;GET CORE SIZE ON DISK
|
||
MOVE B,MONVER ;GET MONITOR VERSION NUMBER
|
||
CAILE B,70207 ;BEFORE 7.03?
|
||
LDB N,[POINT 21,@.SWP,35] ;7.03 IS DIFFERENT
|
||
ADDM N,DSKUSE ;ADD TO TOTAL SPACE USED ON SWAPPING SPACE
|
||
TLNN F,FL.DOR
|
||
JRST TAB ;PRINT TAB & EXIT
|
||
POPJ P,
|
||
; SUBROUTINE TO SIMULATE CTLJOB UUO WHEN SYSTATING
|
||
;A CRASH FILE.
|
||
;CALL WITH PTY NAME AND NUMBER IN A.
|
||
;RETURNS CONTROLLING JOB NUMBER IN N.
|
||
;GIVES DOUBLE SKIP RETURN TO JUMP OVER CTLJOB UUO AND ITS ERROR RETURN.
|
||
;
|
||
CTLJB: PUSH P,A ;SAVE DEVICE NAME
|
||
MOVE A,XDVLST ;TABLE FOR GETTAB UUO
|
||
PUSHJ P,GETZ ;GET ADDR OF FIRST DDB
|
||
HLRZ D,A ;MOVE IT TO D
|
||
POP P,A ;GET BACK PTY NAME
|
||
PUSHJ P,CNVERT ;CONVERT RIGHT HALF OF PTY NAME TO SIXBIT
|
||
PUSH P,JS ;SAVE JS
|
||
MOVEI JS,^D10000 ;PREVENT INFINITE LOOP
|
||
CTLLOP: JUMPE D,ENDDEV ;LAST DDB ENCOUNTERED?
|
||
MOVEI C,DV.MOD(D) ;NO,GET ITS CHARCTERISTICS
|
||
PUSHJ P,PEEKC ;FETCH IT
|
||
MOVE B,C ;
|
||
TRNN B,ASSCON+ASSPRG ;IN USE?
|
||
JRST NEXTDV ;NO,GET THE NEXT DDB
|
||
MOVEI C,DV.NAM(D) ;GET DEVICE NAME FROM DDB
|
||
PUSHJ P,PEEKC ;FETCH IT
|
||
CAME A,C ;SAME?
|
||
JRST NEXTDV ;NO,GET ANOTHER DDB
|
||
MOVE C,.DVJOB ;GET POSITION OF CONTROLLING JOB IN DDB
|
||
ADD C,D ;ADDRESS OF DDB+JOB OFFSET
|
||
SKIPN NPJOBN ;OLD STYLE?
|
||
MOVEI C,DV.CHR(D) ;YES
|
||
HRRZS C ;MAKE SURE LEFT HALF IS EMPTY
|
||
PUSHJ P,PEEKC ;FETCH IT
|
||
LDB N,PJOBN ;LOAD THE CONTROLLING JOB'S NUMBER
|
||
SKIPE NPJOBN ;
|
||
LDB N,NPJOBN ;TRY AGAIN
|
||
JRST ENDDEV+1 ;DOUBLE SKIP RETURN
|
||
NEXTDV: MOVEI C,DV.SER(D) ;GET LINK TO NEXT DDB
|
||
PUSHJ P,PEEKC ;FETCH IT
|
||
HLRZ D,C ;
|
||
SOJG JS,CTLLOP ;LOOP FOR MORE
|
||
ENDDEV: SETZM N ;COULDN'T FIND CONTROLLING JOB
|
||
POP P,JS ;GET IT BACK
|
||
JRST CPOPJ2 ;DOUBLE SKIP RETURN
|
||
;
|
||
;SUBROUTINE TO CONVERT RIGHT HALF OF PTY NAME TO SIXBIT WHEN SIMULATING
|
||
;CTLJOB UUO.
|
||
CNVERT: PUSH P,N ;SET UP
|
||
PUSH P,J ;
|
||
PUSH P,D ;
|
||
PUSH P,C ;
|
||
PUSH P,B ;
|
||
PUSH P,A ;
|
||
SETZM B ;
|
||
SETZM C ;
|
||
MOVEI D,3 ;NUMBER OF CHARACTERS TO EXAMINE
|
||
HRRZS A ;NOW CONTAINS DEVICE NUMBER TO CONVERT TO SIXBIT
|
||
JUMPE A,ZEROUT ;DEVICE 0
|
||
MOVE J,[POINT 3,A,26] ;SET UP BYTE POINTER
|
||
MOVE N,[POINT 6,C,17] ;
|
||
SXBT: ILDB B,J ;FETCH FIRST NUMBER
|
||
CAIE D,6 ;
|
||
CAMN B,C ;
|
||
JUMPE B,SXBT1 ;LEADING ZERO?
|
||
ADDI B,20 ;NO, CONVERT TO SIXBIT
|
||
IDPB B,N ;DEPOSIT SIXBIT CHARACTER
|
||
SXBT1: SOJN D,SXBT ;MORE CHARACTERS?
|
||
SKIPA ;NO
|
||
ZEROUT: MOVEI C,200000 ;DEVICE 0
|
||
POP P,A ;GET BACK PTY NAME
|
||
HRR A,C ;PUT SIXBIT DEVICE CODE IN RIGHT HALF
|
||
POP P,B ;CLEAN UP
|
||
POP P,C ;
|
||
POP P,D ;
|
||
POP P,J ;
|
||
POP P,N ;
|
||
POPJ P, ;
|
||
;END OF EDIT 230 SUBROUTINES TO SIMULATE CTLJOB UUO
|
||
|
||
STATE: MOVE A,XSTATS ;ROUTINE TO FETCH STATES WORD
|
||
PUSHJ P,GETZ ;GO GET IT
|
||
JUMPE A,NOSTAT ;UNDEFINED, RETURN ZERO
|
||
MOVEM A,STATES ;SAVE IT
|
||
MOVEI B,^D60 ;SET UP FOR 60HZ
|
||
TLNE A,(CLKCYC) ;SEE IF 50HZ
|
||
MOVEI B,^D50 ;YES IT IS
|
||
MOVEM B,TCKSEC ;SAVE TICKS/SECOND
|
||
NOSTAT: POPJ P, ;RETURN
|
||
SUBTTL TABLES
|
||
IFLE HACKSW,<XLIST>
|
||
IFN HACKSW,< RADIX 10
|
||
DEFINE BDAY (MO,DA,WHO)
|
||
<XWD <<MO-1>*^D31+DA-1>,EXP [ASCIZ /WHO/]>
|
||
DEFINE SDAY (MO,DA,SALUD)
|
||
<XWD SIGN!<<MO-1>*^D31+DA-1>,EXP [ASCIZ /SALUD/]>
|
||
BMSG: ASCIZ /Happy Birthday /
|
||
HAKTAB:
|
||
SDAY (01,01,<Happy New Year>)
|
||
SDAY (03,17,<Happy Evacuation Day>)
|
||
SDAY (03,17,<P.S. It's also St. Patty's Day>)
|
||
BDAY (03,21,<Johann Sebastian Bach>)
|
||
SDAY (05,10,<Confederate Memorial Day>)
|
||
SDAY (07,01,<Dominion Day>)
|
||
SDAY (07,04,<Happy Independence Day>)
|
||
SDAY (07,14,<Bastille Day>)
|
||
SDAY (07,15,<Happy St Swithin's Day>)
|
||
SDAY (10,12,<Real Columbus Day>)
|
||
SDAY (10,24,<United Nations Day>)
|
||
SDAY (11,05,<Guy Fawkes Day>)
|
||
SDAY (12,25,<Merry Christmas>)
|
||
SDAY (12,26,<Boxing Day>)
|
||
SDAY (12,31,<Drive carefully tonight>)
|
||
|
||
HAKLEN==.-HAKTAB
|
||
RADIX 8
|
||
>
|
||
LIST
|
||
|
||
;CONSTANTS FOR GETTAB UUO
|
||
|
||
XTIME: XWD 10,11
|
||
XPDBPT: XWD 45,11 ;POINTER TO JBTPDB
|
||
XDATE: XWD 11,11
|
||
XSEGPT: XWD 15,11
|
||
XUPTIM: XWD 15,12
|
||
XDVLST: XWD 14,11
|
||
XCORMX: XWD 10,12
|
||
XSYSSZ: XWD 12,11
|
||
XMEMSZ: XWD 23,12
|
||
XSTATS: XWD 17,11
|
||
XLSTIM: XWD 22,12
|
||
XK4SWP: XWD 1,15
|
||
XSPPN: XWD 1,16
|
||
XTTY: XWD -1,10
|
||
XSHF: XWD 16,12
|
||
XZCOR: XWD 21,12
|
||
XSRSP: XWD 42,12 ;INDEX OF SYSRSP
|
||
XRNUM: XWD 43,12 ;INDEX OF NUMRSP
|
||
XMEMNS: XWD 21,11
|
||
XOPR: XWD 13,11
|
||
XSYSST: XWD 6,16 ;SYSTEM STR LIST
|
||
XSYSUN: XWD 7,16
|
||
XSWPER: XWD 5,13
|
||
XSWPUN: XWD 10,16
|
||
XSYSTP: XWD 7,11 ;NAME OF SYSTEM TAPE ("SYS:")
|
||
XFSFPP: XWD 2,16 ;OPERATOR (FAILSAFE) NUMBER
|
||
XPTYCN: XWD 22,11 ;CONFIGURATION FOR PTYS
|
||
XAPRSN: XWD 20,11 ;APR SERIAL NUMBER
|
||
XSYKTM: XWD 35,12 ;SYSTEM KILL TIME
|
||
XGTTBI: XWD 23,23 ;GETTAB IMMEDIATE
|
||
XDSCTB: XWD 35,11 ;DSC TAB POINTER
|
||
XPCMA: XWD 2,44 ;PC AND MA ON CRASH (SWITCHES)
|
||
XPIIP: XWD 1,44 ;PI SYSTEM ON CRASH
|
||
XAPRCN: XWD 0,44 ;APR CONI ON A CRASH
|
||
XLGMAX: XWD 50,11 ;LOGMAX
|
||
XDDBLD: XWD 75,11 ;VALUE OF DDBLDB
|
||
|
||
MONTAB: ASCII /-Jan-/
|
||
ASCII /-Feb-/
|
||
ASCII /-Mar-/
|
||
ASCII /-Apr-/
|
||
ASCII /-May-/
|
||
ASCII /-Jun-/
|
||
ASCII /-Jul-/
|
||
ASCII /-Aug-/
|
||
ASCII /-Sep-/
|
||
ASCII /-Oct-/
|
||
ASCII /-Nov-/
|
||
ASCII /-Dec-/
|
||
|
||
;TABLE OF STOPCD CODES INDEXED BY VALUE
|
||
|
||
STOPT: [ASCIZ /HALT/]
|
||
[ASCIZ /STOP/]
|
||
[ASCIZ /JOB/]
|
||
[ASCIZ /DEBUG/]
|
||
[ASCIZ/CPU/]
|
||
[ASCIZ /INFO/]
|
||
[ASCIZ /EVENT/]
|
||
TABPTR: XWD SIGN+0,.STS
|
||
XWD SIGN+1,.ADR
|
||
XWD SIGN+7,.SWP
|
||
XWD SIGN+2,.PPN
|
||
XWD 162,.PDB ;
|
||
XWD 4,.TIM
|
||
; XWD 14,.SGN
|
||
XWD SIGN+3,.PRG
|
||
XWD SIGN+24,.DEV
|
||
XWD 5,.KCT ;TABLE 5,kilo core ticks
|
||
XWD 37,.RTD
|
||
XWD .GTNM1,.USNM1
|
||
XWD .GTNM2,.USNM2
|
||
NTAB==.-TABPTR
|
||
XWD 0,.SEGCT
|
||
|
||
|
||
;MORE MONITOR INTERFACE
|
||
|
||
PJOBN: POINT 7,C,6
|
||
NPJOBN: Z ;NEW STYLE JOB POINTER
|
||
NEWSPY: Z ;FOR LOAD 722 AND SUBSEQUENT
|
||
.DVJOB: D,,DV.JOB
|
||
.DVFIL: D,,DV.FIL ;TO GET FILE NAMES
|
||
.DVEXT: D,,DV.EXT ;TO GET FILE EXTENSIONS
|
||
.DVPPN: D,,DV.PPN ;TO GET PPN
|
||
.DVUNI: D,,DV.UNI ;TO GET UDB ADDRESS
|
||
TPCJOB: POINT 8,B,10
|
||
IMGOUT: POINT 8,@.SWP,26
|
||
DSKLEV: POINT 3,STATES,9
|
||
HPQPNT: POINT 4,A,9
|
||
|
||
;CRASH-FILE NAME DATA
|
||
; WANT TO BE ABLE TO ASK FOR "FILE" IF CAN'T FIND
|
||
; "CRASH.XPN", BUT FOR NOW CAN DEPOSIT OTHER FILE NAME HERE.
|
||
; (NOTE: ERRORS STILL SAY "CRASH.XPN")
|
||
|
||
CRASH: SIXBIT /CRASH/
|
||
CRSEXT: SIXBIT /XPN/
|
||
CRSPPN: 1,,4
|
||
|
||
RSPMSG: [ASCIZ / 'til TTY output: /]
|
||
RSPMS2: [ASCIZ / 'til TTY input: /]
|
||
RSPMS3: [ASCIZ / 'til requeued: /]
|
||
RSPMS4: [ASCIZ / 'til 1st of above: /]
|
||
|
||
IFN FTDEBUG,<
|
||
PAT:
|
||
PATCH:
|
||
FOO: BLOCK 50 ;PATCH AREA
|
||
>
|
||
IFE FTDEBUG,<
|
||
XLIST ;ONLY LIST LITERALS IF IN DEBUG MODE
|
||
>
|
||
LIT
|
||
LIST
|
||
|
||
PDP: IOWD LN.PDL,PDL ;POINTER TO PUSH DOWN LIST
|
||
;TEMPORARIES
|
||
|
||
DSKIOW: IOWD LN.BUF,0 ;IOWD FOR READING CRASH FILE, ADDR FILLED IN
|
||
0 ;END OF LIST
|
||
|
||
QTAB: SIXBIT /RNWSTS/
|
||
SIXBIT /STAUMQ/
|
||
SIXBIT /DADTDC/
|
||
SIXBIT /MTIOTT/
|
||
SIXBIT /SLNL^C/
|
||
SIXBIT /AABBCC/
|
||
SIXBIT /DDEEFF/
|
||
SIXBIT /GGHHII/
|
||
SIXBIT /JJKKLL/
|
||
SIXBIT /MMNNOO/
|
||
SIXBIT /PPQQRR/
|
||
LQTAB==QTAB-.
|
||
|
||
.DVIOS: XWD J,0 ;L
|
||
.TTY: XWD J,0 ;L
|
||
.TTYN: XWD J,0 ;L TTY LINE NUMBERS
|
||
.STS: XWD J,0 ;L+H
|
||
.ADR: XWD J,0 ;L+H
|
||
.SWP: XWD J,0 ;L+H
|
||
.PPN: XWD J,0 ;L+H
|
||
.PDB: XWD J,0 ;L ;
|
||
.TIM: XWD J,0 ;L
|
||
.SGN: XWD J,0 ;L
|
||
.PRG: XWD J,0 ;L+H
|
||
.DEV: XWD J,0 ;L+H
|
||
.KCT: XWD J,0 ;L
|
||
.RTD: XWD J,0 ;L
|
||
.SEGCT: XWD A,0 ;H
|
||
.USNM1: XWD J,0 ;L
|
||
.USNM2: XWD J,0 ;L
|
||
TCKSEC: 0 ;JIFFIES PER SECOND, A GETTAB VALUE
|
||
SYSPPN: XWD 1,1 ;PPN OF SYS:
|
||
MEMNSP: NSPMEM ;CORE SPEED
|
||
LASSPY: EXP 0 ;LAST PAGE GOTTEN IN SPYPAG
|
||
GETBLK: EXP 1 ;PAGE. BLOCK TO PAGE IN PAGE
|
||
XWD 0,FSP
|
||
DELBLK: EXP 1 ;PAGE. BLOCK TO PAGE OUT PAGE
|
||
PA.GAF!FSP
|
||
|
||
ORGPTR: POINT 7,CMDBUF ;ORIGIONAL COMMAND BUFFER POINTER
|
||
|
||
IFN PURESW,<
|
||
ZZZ==.-LOW
|
||
RELOC
|
||
LOW: BLOCK ZZZ
|
||
HILOND:>
|
||
CBSIZE==^D14 ;SIZE <WORDS> OF COMMAND BUFFER
|
||
GOTCMD: BLOCK 1 ;COMMAND GOTTEN FLAG (MOVED)
|
||
CMDBUF: BLOCK CBSIZE+1 ;COMMAND BUFFER
|
||
CMDPTR: BLOCK 1 ;CURRENT COMMAND POINTER (MOVED)
|
||
CDENDP==CMDBUF+CBSIZE+1 ;END OF COMMAND BUFFER AREA
|
||
;REDEFINED BECUZ OF MOVED STUFF
|
||
|
||
LOWEND: ;START OF ZEROED AREA
|
||
|
||
PDL: BLOCK LN.PDL+1 ;PUSH-DOWN LIST
|
||
|
||
COMTOA: BLOCK 1 ;ADDRESS OF SPECIAL TYPEOUT ROUTINE
|
||
NCPCNF: BLOCK 1 ;NUMBER OF CPUS IN THE CONFIGURATION
|
||
CPNUPT: BLOCK NCPUS
|
||
CPNNUL: BLOCK NCPUS
|
||
CPNLST: BLOCK NCPUS
|
||
CPNOHT: BLOCK NCPUS
|
||
TEMP: BLOCK NCPUS ;[323] ONE TEMP AREA FOR EACH CPU
|
||
TEMP1: BLOCK 1
|
||
|
||
TYOB: BLOCK 3 ;LISTING DEVICE OUTPUT BUFFER POINTERS
|
||
|
||
FLP: BLOCK 6 ;FILOP. ARGUMENT BLOCK
|
||
LKB: BLOCK 10 ;EXTENDED LOOKUP BLOCK
|
||
|
||
SEGPTR: BLOCK 1 ;LH=-# SEGS, RH=# JOBS
|
||
JOBN: BLOCK 1 ;NUMBER OF JOBS IN SYSTEM
|
||
SEGN: BLOCK 1 ;NUMBER OF SEGMENTS IN SYSTEM
|
||
BOTH: BLOCK 1 ;JOBN + SEGN
|
||
|
||
MAXMAX: BLOCK 1 ;MAX SIZE OF USER CORE
|
||
CORUSE: BLOCK 1 ;VIRTUAL CORE USED
|
||
DSKUSE: BLOCK 1 ;SWAPPING SPACE USED
|
||
ACTUSE: BLOCK 1 ;ACTIVE VIRTUAL CORE USED
|
||
LOWUSE: BLOCK 1 ;TOTAL VIRTUAL CORE IN LOW SEGMENTS
|
||
|
||
FREE: BLOCK 1 ;TEMPORARY .JBFF
|
||
ZERLOW: BLOCK 1 ;FIRST ADDRESS OF DYNAMIC TABLES
|
||
ZERHGH: BLOCK 1 ;LAST ADDRESS OF DYNAMIC TABLES
|
||
|
||
JOBTTY: BLOCK 1 ;NAME OF CURRENT JOB'S TTY
|
||
DATE: BLOCK 1 ;TODAY'S DATE
|
||
FTDUAL: BLOCK 1 ;NON-ZERO IF DUAL PORTED DISK SUPPORT
|
||
STATES: BLOCK 1 ;SYSTEM STATES WORD
|
||
FSDCNT: BLOCK 1 ;JOB OR LOOP NUMBER/COUNT IN SYS B CODE
|
||
.UPLST: BLOCK 1 ;ADDRESS OF PTR TO OUR DSK DDB'S
|
||
;CATCH 22, .UPFSO AND .UPFSE MUST BE INITIALIZED TO SOMETHING FOR DSKA
|
||
; TO WORK, BE CAN'T GET REAL VALUES UNTIL DSKA DOES WORK
|
||
;DITTO FOR SYSSIZ
|
||
SYSSIZ: BLOCK 1 ;LOW SEGMENT SIZE
|
||
.UPFSO: BLOCK 1 ;FUNNY SPACE ORIGIN
|
||
.UPFSE: BLOCK 1 ;END OF FUNNY SPACE
|
||
SECTAB: BLOCK 40 ;STORAGE FOR SECTION MAP
|
||
.CPTOS: BLOCK 1 ;PAGE NUMBER OF CPU0 EPT TO MAKE CALCULATIONS
|
||
;IN DSKA WORK FOR EPT MAPPING AS WELL AS UPMP
|
||
.CPMAP: BLOCK 1 ;ADDRESS OF THE EXEC MAP (=.CPTOS IF KI PAGING)
|
||
ME: BLOCK 1 ;MY PPN
|
||
OPR: BLOCK 1 ;NAME OF "OPR" DEVICE
|
||
MYJOB: BLOCK 1 ;MY JOB NUMBER
|
||
CORSAV: BLOCK 1 ;VIRTUAL CORE SAVED BY SHARING
|
||
ONCE: BLOCK 1 ;-1 FIRST TIME THROUGH
|
||
TNFRTY: BLOCK 1 ;1 IF 10/40N (NO LOGIN)
|
||
SYSTAP: BLOCK 1 ;NAME OF SYSTEM TAPE ("SYS:"), 0=DSK:
|
||
FSFPPN: BLOCK 1 ;OPERATOR NUMBER
|
||
CTYLIN: BLOCK 1 ;LINE NUMBER OF CTY
|
||
PTYOFS: BLOCK 1 ;NUMBER OF FIRST TTY DRIVEN BY PTY
|
||
PTYMAX: BLOCK 1 ;NUMBER OF LAST+1 TTY DRIVEN BY PTY
|
||
.UPSAF==1B4 ;BIT FLAGGING S/A
|
||
.UPNNA==1B10 ;BIT FLAGGING NNA
|
||
CURFS: BLOCK 1 ;CURRENT FILESTRUCTURE
|
||
UNIBLK: BLOCK 1
|
||
UDBOFS: BLOCK 1
|
||
SYSUNI: BLOCK 1
|
||
SWPUNI: BLOCK 1
|
||
DSKBLK: BLOCK 1 ;DSKCHR UUO BLOCK
|
||
DSKDDB: BLOCK 1 ;COUNT OF DISK DDB'S
|
||
LOGNAM: BLOCK 1 ;LOGICAL NAME OF THIS DEVICE
|
||
NOW: BLOCK 1 ;CURRENT TIME
|
||
SPYFLG: BLOCK 1 ;-1 IF SPYING
|
||
MAXGTB: BLOCK 1 ;LARGEST GETTAB TABLE #
|
||
OFSGTB: BLOCK 1 ;START OF GETTAB TABLE POINTERS
|
||
PTYS: BLOCK 1 ;COUNT OF PTY DRIVEN JOBS
|
||
ONEJOB: BLOCK 1 ;NUMBER OF JOB IF SINGLE
|
||
ONEPPN: BLOCK 1 ;NUMBER OF PPN IF SINGLE
|
||
ONETTY: BLOCK 1 ;NUMBER OF TTY IF SINGLE
|
||
SAVCHR: BLOCK 1 ;CHARACTER TO RESCAN IF ANY
|
||
SEGFLG: BLOCK 1 ;-1 IF SEGMENT PRINTING
|
||
DSKFLG: BLOCK 1 ;FLAG (AND MAX SIZE) OF DISK INPUT FILE
|
||
DCACHE: BLOCK NBCSHE ;INCORE CACHE FOR CRASH FILE
|
||
EXEDIR: BLOCK LN.BUF ;SPACE FOR EXE DIRECTORY
|
||
LASBP1: BLOCK 1 ;VALUE OF LAST DSKBP1 CALL
|
||
LASBPA: BLOCK 1 ;ARGUMENT OF LAST DSKBP1 CALL
|
||
MONVER: BLOCK 1 ;MONITOR VERSION GETTAB (0 BEFORE 503)
|
||
OLDNUL: BLOCK NCPUS ;PREVIOUS NULL TIME IN JIFFIES
|
||
OLDLOS: BLOCK NCPUS ;PREVIOUS LOST TIME IN JIFFIES
|
||
OLDOHT: BLOCK NCPUS ;PREVIOUS OVERHEAD TIME IN JIFFIES
|
||
OLDZRO: BLOCK 1
|
||
OLDSFL: BLOCK 1
|
||
OLDNUM: BLOCK 1 ;PREVIOUS NUMBER OF SYSTEM RESPONSES(OLD RSP CODE)
|
||
TOTKCT: BLOCK 1 ;TOTAL KC TICKS THIS PASS
|
||
LOGDIN: BLOCK 1 ;JOBS LOGGED IN
|
||
DIFTIM: BLOCK NCPUS ;DIFFERENTIAL UPTIME FOR THIS PASS
|
||
LINECT:COLCNT: BLOCK 1 ;COLUMN COUNT FOR FORMATTING OUTPUT
|
||
BLOCK 1 ;LINES PER PAGE FOR DISPLAY USERS
|
||
SYSUPT: BLOCK JOBMAX ;CPU0 UPTIME AT EACH RUN-TIME CALCULATION
|
||
JOBTIM: BLOCK JOBMAX ;RUN TIM FOR EACH JOB NUMBER
|
||
OLDPPN: BLOCK JOBMAX ;OLD PPN FOR EACH JOB NUMBER
|
||
JOBKCT: BLOCK JOBMAX ;KILO CORE TICKS FOR EACH JOB
|
||
SLQ: BLOCK 1 ;WAIT STATE CODE FOR SL
|
||
TIQ: BLOCK 1 ;WAIT STATE CODE FOR TI
|
||
EWQ: BLOCK 1 ;WAIT STATE CODE FOR EW
|
||
LOKCHK: BLOCK 1 ;CHECKED FOR LOCKED SEGMENT FLAG
|
||
NUMJOB: BLOCK 1 ;NUMBER OF ACTIVE JOBS
|
||
REMSNO: BLOCK 1 ;CURRENT REMOTE STATION NUMBER
|
||
PDBPTR: BLOCK 1 ;ADDRESS OF JBTPDB FOR PEEKING
|
||
JOBINT: BLOCK 4 ;INTERRUPT BLOCK FOR INTERRUPTING ^C
|
||
CPU: BLOCK 1 ;TEMP FOR GETRSP
|
||
DOALT: BLOCK 1 ;FLAG FOR ALTERNATE PATH TYPE
|
||
MAIND: BLOCK 1 ;SAVE LOCATION FOR UDB OF MAIN
|
||
CPKI10: BLOCK 1 ;IF KI10 AND MONITOR.GT.50510 THEN -1 ELSE 0
|
||
INDEV: BLOCK 1
|
||
INFILE: BLOCK 1
|
||
INEXT: BLOCK 1
|
||
INPPN: BLOCK 1
|
||
INPTH: BLOCK .PTMAX
|
||
INFSP: BLOCK .FOFMX ;RETURNED FILESPEC BLOCK
|
||
IBR: BLOCK 3 ;BUFFER RING HEADER FOR HELP
|
||
IBUF: BLOCK 203 ;DISK BUFFER FOR HELP
|
||
RSPCNT: BLOCK 1 ;COUNTER FOR GENRSP CODE
|
||
RSPIDX: BLOCK 1 ;INDEX INTO OLDRSP & DIFRSP
|
||
RSPIX1: BLOCK 1 ;TEMP FOR GETRSP
|
||
OLDRSP: BLOCK NCPUS*4*4 ;4 DIFFERENT TYPES OF RESPONSE*4
|
||
DIFRSP: BLOCK NCPUS*4*4 ;ENTRIES PER TYPE* # OF CPU'S
|
||
|
||
LINTAB: BLOCK 1 ;Address of LDB table in the monitor
|
||
LDB: BLOCK 1 ;Pointer to a given LDB
|
||
LDBDCH: BLOCK 1 ;Device-characteristics pointer in LDB
|
||
LDBREM: BLOCK 1 ;Beginning of remote TTY block in LDB
|
||
UNOK4S: BLOCK 1 ;Offset of UNIK4S in UDB's
|
||
NDBSNM: BLOCK 1 ;An NDB word defined in the monitor
|
||
DEVJOB: BLOCK 1 ;Word in DDB containing job number
|
||
CNTLOC: BLOCK 1 ;Node number of central site
|
||
TTNUM: BLOCK 1 ;Number of a TTY
|
||
|
||
TEMEND==.-1 ;END OF ZEROED AREA
|
||
|
||
END SYSTAT
|
||
|