1 TITLE COMCON - COMMAND DECODER AND SAVEGET ROUTINES - V433
\r
2 SUBTTL /RCC 03 JUN 69
\r
4 ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB
\r
6 ENTRY COMCON ;ALWAYS LOAD COMCON IF LIBRARY SEARCH
\r
9 ;CALLED FROM CLOCK ROUTINE WHEN 'COMCNT' IS GREATER THAN 0
\r
11 ;AS SET BY TTY SERVICE ROUTINE
\r
12 ;ALL AC'S HAVE BEEN SAVED BY CLOCK CHANNEL
\r
13 ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED
\r
14 ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE
\r
15 ;COMMAND SETUP ROUTINE OF THE SAME NAME WITH AC'S SET AS:
\r
17 ;TAC = BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)
\r
18 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER
\r
19 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND
\r
20 ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA
\r
21 ;PROG = ADDRESS OF PROGRAM AREA, 0 MEANS NOT IN CORE OR NO CORE
\r
22 ;IOS IS SET TO 0, USED FOR ADDRESS OF SUBSEQUENT CALLS
\r
23 ;DEVDAT IS ALSO PUSHED ON END OF PO LIST SO IT MAY BE DESTROYED
\r
24 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED TO
\r
25 ;MESSAGE AND TTY IS STARTED ON TTYP SPECIFIED BY -1(PDP)
\r
26 ;SEVERAL COMMAND FLAGS ARE CHECKED BEFORE DISPATCHING TO
\r
27 ;COMMAND SETUP ROUTINES TO SEE IF COMMAND IS LEGAL AT THIS TIME
\r
28 ;SEVERAL MORE FLAGS ARE CHECKED UPON RETURN FROM COMMAND SETUP
\r
29 ;ROUTINES(UNLESS AN ERROR HAS OCCURRED) FOR STANDARD
\r
31 ;IF AN ERROR OCCURS, THE JOB NO.(ITEM) SHOULD BE 0 ON RETURN
\r
32 ;SO THAT JOB WILL NOT BE INITIALIZED IF FIRST COMMAND.
\r
33 ;ERRMES ROUTINE WILL SET ITEM TO 0
\r
35 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE
\r
36 ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY
\r
37 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET
\r
38 ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY
\r
39 ;OR DELAY THE COMMAND FOR LATER EXECUTION
\r
42 INTERNAL FTLOGIN,FTSWAP,FTTIME
\r
43 EXTERNAL COMCNT,TTYCOM,JBTSTS,JOBMAX,JBTDAT,JBTADR,JOBHCU
\r
44 EXTERNAL CONFIG,HIGHJB
\r
45 EXTERNAL TTYSTR,TTYUSR,TTYATT
\r
46 EXTERNAL TTYTAB,PUNIT,TTYATI
\r
47 EXTERNAL ADRERR,ANYACT,ASSASG,CORE0,DAMESS,DEVLG,DEVPHY,DEVSRC
\r
48 EXTERNAL DLYCOM,ERNAM,ESTOP,GETWD1,GETWDU,KSTOP,CORE1,MONJOB,DECP1
\r
49 EXTERNAL MONSTR,MSTART,OCTPNT,PHOLD,PRNAME,RADX10,RELEA5
\r
50 EXTERNAL RELEA6,RESET,SETRUN,STOP1
\r
51 EXTERNAL STOTAC,UPTIME,USRXIT,USTART,UUOERR
\r
53 T=BUFPNT ;TEMPORARY AC'S
\r
58 COMMAND:PUSHJ PDP,TTYCOM ;SETUP DEVDAT,DAT,TAC,AND ITEM
\r
59 ; FOR ANY TTY WHICH HAS TYPED A COMMAND
\r
60 COM0: POPJ PDP, ;NONE FOUND
\r
61 PUSH PDP,DEVDAT ;SAVE TTY DEVICE DATA BLOCK ADDRESS
\r
62 PUSHJ PDP,CTEXT ;SCAN COMMAND NAME, RETURN IT IN TAC1
\r
63 MOVE T,TAC1 ;COPY COMMAND.
\r
64 MOVNI T1,1 ;SET MASK ALL ONES
\r
65 LSH T1,-6 ;CLEAR OUT ONE MORE CHAR.
\r
66 LSH T,6 ;SHIFT 1 COMMAND CHAR OFF
\r
67 JUMPN T,.-2 ;IF NOT END OF COMMAND. GO AROUND
\r
68 MOVEI T4,0 ;CLEAR FLAG REGISTER
\r
69 MOVSI T,-DISPL ;SEARCH COMMAND TABLE FOR MATCH
\r
70 COMLP: MOVE T2,COMTAB(T) ;GET NEXT ENTRY FROM COMMAND TABLE
\r
71 TDZ T2,T1 ;MASK OUT CHAR 5
\r
72 CAMN TAC1,COMTAB(T) ;EXACT MATCH?
\r
73 JRST COMFND ;YES, THIS IS IT.
\r
74 CAME TAC1,T2 ;MATCH?
\r
75 JRST COMNEQ ;NOT EVEN GOOD MASK
\r
76 TROE T4,1 ;MATCHES MASKED, IS THIS FIRST ONE
\r
77 TROA T4,2 ;NO, SET 2ND OCCUR FLAG
\r
78 MOVE T3,T ;YES, COPY CURRENT INDEX
\r
79 COMNEQ: AOBJN T,COMLP ;NO, KEEP LOOKING
\r
80 CAIN T4,1 ;DID ONE AND ONLY ONE COMMAND MATCH?
\r
81 MOVE T,T3 ;YES, GET ITS INDEX
\r
83 COMFND: MOVE TAC1,DISP(T) ;GET DISPATCH TABLE ENTRY,
\r
84 PUSH PDP,TAC1 ;SAVE RH(DISPATCH ADR,+BITS)
\r
85 MOVE T,JBTSTS(ITEM) ;JOB STATUS WORD FOR THIS JOB
\r
87 TLNN T,JLOG ;IS JOB LOGGED IN?
\r
88 TLNE TAC1,NOLOGIN ;NO, CAN COMMAND PROCEED WITH NO LOGIN?
\r
90 JSP TAC,COMER ;NO, TYPE "LOGIN PLEASE"
\r
93 CHKNO: JUMPN ITEM,CHKRUN ;JOB NUMBER ALREADY ASSIGNED?
\r
94 TLNE TAC1,NOJOBN ;NO, DOES THIS COMMAND NEED A JOB NUMBER?
\r
96 MOVEI ITEM,1 ;YES, SCAN FOR ONE STARTING WITH 1
\r
97 NUMLOP: MOVE T,JBTSTS(ITEM) ;SCAN FOR FREE JOB NO.
\r
98 TLNN T,JNA+CMWB ;THIS NUMBER ASSIGNED?
\r
99 JRST NEWJOB ;NO, SO USE THIS NUMBER
\r
101 CAIGE ITEM,JOBMAX ;YES, IS THE MAX. JOB NO.?
\r
102 AOJA ITEM,NUMLOP ;NO, KEEP LOOKING
\r
103 JSP TAC,COMER ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED"
\r
104 ASCIZ /JOB CAPACITY EXCEEDED
\r
106 ; EVEN THROUGH THIS IS A NEW JOB NUMBER
\r
107 ; IT MAY HAVE CORE ASSIGNED NOW BECAUSE IT WAS DELAYED
\r
108 ; UNTIL IT COULD BE SWAPPED IN(LOGIN WITH CORE FULL)
\r
109 NEWJOB: MOVEI T1,ASSCON ;SET ASSIGNED BY CONSOLE BIT FOR TTY
\r
110 IORM T1,DEVMOD(DEVDAT) ;SO OTHER JOBS CAN NOT USE
\r
111 SETZM DEVLOG(DEVDAT) ;SET LOGICAL NAME TO ZERO
\r
112 ; "TTY" IS PUBLIC LOGICAL NAME
\r
114 SETZM RTIME(ITEM) ;CLEAR INCREMENTAL JOB RUNNING TIME
\r
115 SETZM TTIME(ITEM) ;CLEAR TOTAL JOB RUNNING TIME
\r
119 SETZM JBTKCT(ITEM) ;CLEAR CORE-RUNNING TIME CORE
\r
121 CAMLE ITEM,HIGHJB ;HIGHEST JOB NUMBER ASSIGNED?
\r
122 MOVEM ITEM,HIGHJB ;YES,SAVE IT FOR SCHEDULER SCAN OF JOBS
\r
124 CHKRUN: TLNE T,RUN ;RUN BIT ON IN JOB STATUS?
\r
125 TLNN TAC1,NORUN ;YES, DOES THIS COMMAND REQUIRE A JOB?
\r
127 JSP TAC,COMER ;YES.
\r
128 ASCIZ /PLEASE TYPE ^C FIRST
\r
134 MOVE JDAT,JBTDAT(ITEM) ;ADDRESS OF JOB DATA AREA
\r
136 MOVE PROG,JBTADR(ITEM) ;XWD PROTECTION,RELOCATION
\r
138 TLNE TAC1,INCOR!NOTRAN ;MUST JUST NOT BE SWAPPING OR
\r
139 ; IF JOB HAS CORE ASSIGNED, MUST IT BE
\r
140 ; IN PHYSICAL CORE (RATHER THAN DISK OR ON ITS WAY)
\r
141 TLNN T,SWP ;YES, IS JOB ON DISK OR ON ITS WAY?
\r
143 TLNN TAC1,INCOR ;YES, MUST JOB BE IN CORE?
\r
144 JUMPE PROG,CHKCO2 ;NO, IS A SWAP FOR THIS JOB IN PROGRESS?
\r
145 ; NO, SO COMMAND MUST BE DELAYED
\r
146 ; (EITHER BECAUSE SWAP IN PROGRESS OR
\r
147 ; JOB ON DISK AND MUST BE IN PHY CORE)
\r
148 HRRI TAC1,DLYCM ;ASSUME JOB MUST BE IN PHY CORE
\r
149 ; SO SET TO SWAP JOB IN
\r
150 TLNN TAC1,INCOR ;IS THIS TRUE?
\r
151 CHKDLY: HRRI TAC1,DLYCM1 ;NO, JUST DELAY COMMAND UNTIL SWAP OUT OR IN IS FINISHED
\r
152 JRST COMDIS ;AND DISPATCH TO DELAY COMMAND
\r
153 CHKCO2: TLNE TAC1,NOACT ;CAN COMMAND BE PERFORMED WITH ACTIVE DEVICES?
\r
154 PUSHJ PDP,RUNCHK ;NO, RETURN IF JOB STOPPED AND NO ACTIVE DEVICES
\r
155 CHKCO1: TLNE TAC1,NOCORE ;DOES THIS COMMAND NEED CORE?
\r
156 JRST COMGO ;NO, GO DISPATCH
\r
157 JUMPN PROG,CHKXPN ;YES, IS CORE IN MEMORY?
\r
158 JSP TAC,COMER ;NO, PRINT "NO CORE ASSIGNED"
\r
159 ASCIZ /NO CORE ASSIGNED
\r
162 CHKXPN: TLNN TAC1,PLSXPN ;DOES THIS COMMAND NEED CORE TO BE EXPANDED?
\r
164 HLRE IOS,JOBHCU(JDAT) ;YES, IS CORE STILL COMPRESSED(SAVE DID NOT GO
\r
166 AOJGE IOS,COMGO ;LH=-2 DURING SAVE, WHEN CORE COMPRESSED
\r
167 ;LH=-1 DURING SAVE OF HIGH SEG, OR GET OF LOW
\r
169 PUSHJ PDP,EXPAND ;YES, EXPAND CORE FIRST
\r
170 JFCL ;IGNORE ADDRESS CHECK ERROR, WE TRIED
\r
172 JRST CHKDLY ;DELAY COMMAND BECAUSE COMMAND DECODER ACS ARE
\r
173 ; ALL GONE, NEXT TIME JOBHCU WILL BE 0
\r
177 HRRI TAC1,DLYCM1 ;DELAY COMMAND TILL NEXT CLOCK TICK
\r
181 COMER: MOVSI TAC1,NOINCK
\r
183 MOVEI TAC1,CERR ;CALL ERROR MESSAGE ROUTINE
\r
185 COMGO: MOVSI IOS,CMWRQ
\r
186 TLZN T,CMWB ;CLEAR CMWB; WAS JONB IN COMM WAIT
\r
187 ANDCAM IOS,(PDP) ;NO, CLEAR REQUEU BIT IN DISP. FLAGS
\r
188 MOVEM T,JBTSTS(ITEM)
\r
190 COMDIS: MOVEI IOS,0 ;CLEAR IOS FOR SETTING DISPATCH ADDRESSES
\r
191 PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE.
\r
193 ;RETURN FROM COMMAND SETUP ROUTINE
\r
195 COMRET: POP PDP,T1 ;RESTORE COMMAND FLAGS
\r
196 POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS.
\r
198 EXTERN TITAKR,TISYNC
\r
199 LDB TEM,TITAKR(DEVDAT) ;GET BREAK CHARACTER
\r
200 PUSHJ PDP,SKPBRK ;SKIP TO BREAK CHAR
\r
201 SOS TISYNC(DEVDAT) ;REDUCE LINE COUNT
\r
205 ANDCAM T,TTYTAB(TAC) ;YES. TURN OFF SIGN BIT
\r
207 JUMPN ITEM,COMRT1 ;DID AN ERROR OCCUR?
\r
208 TLNN T1,NOJOBN ;I.E., ITEM=0 AND NOJOBN=0?
\r
209 MOVSI T1,NOINCK+ERRFLG+CMWRQ ;YES, PRINT ERROR MESSAGE ONLY, AND
\r
210 ;REQUEUE JOB IF NECESSARY.
\r
212 COMRT1: MOVE T,JBTSTS(ITEM) ;JOB STATUS WORD
\r
213 TLNN T1,NOINCK ;SUPPRESS JOB INIT. CHECK?
\r
214 TLOE T,JNA ;NO, IS JOB INIT BIT ALREADY SET?
\r
216 MOVEM T,JBTSTS(ITEM) ;NO, SO SET IT THIS COMMAND
\r
217 PUSHJ PDP,TTYATI ;ATTACH TTY TO JOB
\r
218 JFCL ;INGORE IF CAN NOT(SHOULD NEVER HAPPEN)
\r
219 PUSHJ PDP,INLMES ;AND PRINT "JOB "
\r
221 MOVE TAC,ITEM ;PRINT JOB NUMBER
\r
224 MOVEI TAC,CONFIG ;PRINT SYSTEM CONFIGURATION NAME
\r
234 PCRLF: TLNE T1,ERRFLG ;DID AN ERROR OCCUR?
\r
235 PUSHJ PDP,PRQM ;YES. APPEND ?
\r
236 TLNN T1,NOCRLF ;SUPRESS CRLF?
\r
238 TLNN T1,NOPER ;SUPRESS PRINTING PERIOD?
\r
239 PUSHJ PDP,PRPER ;NO
\r
240 JUMPE ITEM,PCRLF1 ;JOB DOES NOT RUN IF ERROR OR NO JOB NO. ASSIGNED
\r
241 TLNE T1,TTYRNU ;JOB TO RUN WHEN TTY FINISHED TYPING?
\r
242 ; COMMAND RESPONSE (TTY TO USER MODE)?
\r
243 PUSHJ PDP,TTYUSR ;YES, CALL SCANNER ROUTINE
\r
244 TLNE T1,TTYRNC ;NO. JOB TO RUN AND REMAIN IN MONITOR MODE?
\r
245 PUSHJ PDP,SETRUN ;YES, CALL SCANNER ROUTINE
\r
246 PCRLF1: TLNN T1,NOMESS ;IS THERE A MESSAGE?
\r
247 PUSHJ PDP,TTYSTR ;YES. START TTY TYPING IT OUT
\r
250 LDB ITEM,PJOBN ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK
\r
252 TLNE T1,CMWRQ ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR?
\r
258 IFN FTTTYSER, <EXTERN SPCHEK,TITAKR,GETCHR,TPOPJ
\r
260 SKPBRK: PUSH PDP,TAC
\r
261 SKPBR2: PUSHJ PDP,SPCHEK
\r
263 TLNE TAC,BREAKB ;IS THIS CHAR THE BREAK?
\r
264 JRST TPOPJ ;YES, RESTORE TAC, RETURN
\r
265 SKPBR1: PUSHJ PDP,GETCHR
\r
266 JUMPN TEM,SKPBR2 ;LOOK FURTHER FOR BREAK
\r
267 JRST TPOPJ ;UNLESS NO MORE CHARS
\r
270 ;TABLE OF CONSOLE COMMANDS
\r
272 INTERNAL FTATTACH,FTTIME,FTTALK,FTEXAMINE,FTLOGIN,FTREASSIGN
\r
273 INTERNAL FTFINISH,FTCCL
\r
275 ;BITS CHECKED BEFORE DISPATCHING TO COMMAND SETUP ROUTINE
\r
277 NOCORE=400000 ;NO CORE NEEDED FOR COMMAND
\r
278 NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND
\r
279 NOLOGIN=100000 ;JOB DOES NOT NEED TO BE ALREADY LOGGED IN.
\r
280 NOACT=40000 ;COMMAND MUST BE DELAYED IF JOB HAS ACTIVE DEVICES.
\r
281 NOTRAN=20000 ;COMMAND MUST BE DELAYED IF SWAPPED TRANSFER IN PROGRESS
\r
282 NORUN=10000 ;AN EXPLICIT ^C MUST BE TYPED BY USER BEFORE COMMAND
\r
283 ; IS EXECUTED IF JOB IS RUNNING
\r
284 ; JOB MUST BE SWAPPED IN IF IT HAS LOGICAL CORE
\r
285 INCOR=4000 ;USED ONLY BY COMMAND DISPATCH
\r
286 ; DOES NOT APPEAR IN COMMAND TABLE
\r
287 INCORE=4000!NOTRAN ;COMMAND MUST BE DELAYED IF JOB HAS LOGICAL CORE
\r
288 ; WHICH IS ON DISK OR ON ITS WAY IN OR OUT.
\r
289 ; JOB WILL BE SWAPPED IN (SEE DLYCOM)
\r
290 ; AND IS NOT SITTING QUIETLY IN CORE(IE NO SWAPPING TRANSFER)
\r
291 PLSXPN=4 ;CORE MUST BE EXPANED IF STILL COMPRESSED BY SAVE NOT GOING
\r
292 ; TO COMPLETION(CONTROL C OR DEVICE OK?)
\r
293 ; MUST BE USED IN CONJUNCTION WITH COMMANDS WHICH
\r
294 ; NEED CORE AND NEED IT IN CORE
\r
296 ;BITS CHECKED AFTER RETURN FROM COMMAND SETUP ROUTINE
\r
298 CMWRQ=2000 ;REQUEUE JOB AFTER COMMAND WAIT
\r
299 NODATE=1000 ;DON'T PRINT DATE DURING JOB INTERROGATION
\r
300 NOINCK=400 ;NO CHECK FOR JOB INITIALIZATION (JNA=0)
\r
301 NOCRLF=200 ;NO PRINTING OF CRLF
\r
302 NOPER=100 ;NO PRINTING OF PERIOD
\r
303 TTYRNU=40 ;SET TTY TO USER MODE AND START JOB
\r
304 ; WHEN COMMAND RESPONSE STOPS TYPING
\r
305 TTYRNC=20 ;KEEP TTY IN COMMAND MODE AND START JOB
\r
306 ; WHEN COMMAND RESPONSE STOPS TYPING
\r
307 NOMESS=10 ;NO COMMAND RESPONSE EVER, DO NOT CALL TTYSTR
\r
309 ;T TAKEN ABOVE BY 'PLSXPN' BIT
\r
311 ERRFLG=1 ;COMMAND ERROR
\r
314 C START,START,NOPER!TTYRNU!INCORE!NOACT!NORUN
\r
315 C HALT,STOP,NOCORE!NOJOBN!NOLOGIN!NOINCK!CMWRQ
\r
316 C KJOB,KJOB,NOCORE!NOJOBN!NOINCK!NOLOGIN!NOACT!NORUN!NOPER!NOCRLF!NOMESS!NOTRAN
\r
317 C <>,CBLANK,NOCORE!NOJOBN!NOLOGIN!NOINCK!NOCRLF
\r
318 C R,RCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
319 C RUN,RUNCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
320 C CORE,CORE,NOCORE!NORUN!CMWRQ!INCORE!NOACT!NOTRAN
\r
321 C GET,GET,NOCRLF!NOPER!TTYRNC!NOCORE!NOACT!NORUN!NOTRAN
\r
322 C SAVE,SAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
324 C SSAVE,SSAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
326 C CONTINUE,CONT,NOPER!TTYRNU!INCORE!NORUN
\r
328 C D,DCOM,CMWRQ!INCORE
\r
329 C E,ECOM,NOCRLF!CMWRQ!INCORE
\r
332 C ASSIGN,ASSIGN,NOCORE
\r
333 C DEASSI,DEASSIGN,NOCORE!NOJOBN!NOINCK
\r
334 C DDT,DDTGO,NOPER!TTYRNU!INCORE!NORUN!PLSXPN
\r
336 C FINISH,CFINI,TTYRNC!NOACT!INCORE!NORUN
\r
338 C REENTER,REENTER,TTYRNU!NOPER!INCORE!NORUN!PLSXPN
\r
339 C CSTART,STARTC,TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
340 C CCONTINUE,CONTC,TTYRNC!INCORE!NORUN
\r
342 C DETACH,DETACH,NOPER+NOCRLF+NOCORE!NOJOBN!NOINCK
\r
343 C ATTACH,ATTACH,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
345 C DAYTIME,DAYTIM,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
347 C TIME,RUNTIM,NOCORE!NOLOGIN!NOINCK
\r
349 C RESOURCES,FREDEV,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
351 C SCHEDULE,SKEDUL,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
354 C TALK,TALK,NOCRLF+NOPER+NOCORE!NOJOBN!NOLOGIN!NOMESS!NOINCK
\r
357 C LOGIN,CLOGIN,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
360 C LOGIN,CPOPJ,NOCORE!NOACT!NORUN!NOTRAN
\r
363 C REASSI,REASS,NOCORE!NOACT!INCORE!CMWRQ!NORUN
\r
365 C HELP,HELP,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
366 C SYSTAT,SYSTAT,NOCORE!NOLOGIN!NOACT!NORUN!NOCRLF!NOPER!TTYRNU!NOTRAN
\r
368 C COMPILE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
369 C CREATE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
370 C CREF,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
371 C DEBUG,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
372 C DELETE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
373 C DIRECT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
374 C EDIT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
375 C EXECUTE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
376 C LIST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
377 C LOAD,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
378 C MAKE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
379 C RENAME,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
380 C TECO,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
381 C TYPE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
382 C CTEST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
386 ;GENERATE TABLE OF SIXBIT COMMAND NAMES
\r
392 DISPL=.-COMTAB ;LENGTH OF TABLE
\r
394 ;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS
\r
401 ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE
\r
402 ;WITH FOLLOWING AC'S SET:
\r
403 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)
\r
405 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER
\r
406 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND
\r
407 ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA
\r
408 ;PROG=XWD PROTECTION,RELOCATION; 0 IF NO CORE
\r
411 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF
\r
412 ;NEEDED AND TTY IS STARTED
\r
414 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE
\r
415 ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY
\r
416 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET
\r
417 ;THE JOB TO A RUNABLE STATUS AND RETURN IMMEDIATELY
\r
421 COR0: JUMPE PROG,CPOPJ ;RETURN IF JOB DOES NOT HAVE CORE
\r
423 JSP TAC1,MONJOB ;SET TO RUN MONITOR JOB(PC IN EXEC MODE)
\r
424 ; RETURN HERE AT UUO LEVEL(NO ACS SET UP)
\r
425 MOVEI TAC1,ESTOP ;PUT ERROR STOP ON END OF PDL
\r
426 JSP TAC,MONSTR ;START MONITOR JOB BY SETTING UP ACS AND
\r
427 JOB1: PUSHJ PDP,RESET ;RELEASE ALL IO DEVICES ASSIGNED TO THIS JOB
\r
428 PUSHJ PDP,TTYFNU ;FIND TTY FOR THIS JOB(SETUP ITEM WITH JOB NO.)
\r
430 EXTERN ZERSWP,NOCORQ
\r
431 PUSHJ PDP,NOCORQ ;PUT JOB IN NO CORE Q
\r
432 PUSHJ PDP,ZERSWP ;CLEAR SWAP SPACE (IF ANY) FOR LOW SEG
\r
433 ; AND CLEAR SWP,SHF,IMGIN,IMGOUT FOR LOW SEG
\r
437 PUSHJ PDP,KILHGH ;HIGH SEG FOR THIS USER. RETURN CORE
\r
438 ; REMOVE HIGH SEG FROM THIS USER LOGICAL ADDRESSING SPACE
\r
439 ; IF NO OTHER USERS IN CORE ARE USING IT
\r
440 ; RETURN DISKL SPACE IF NO LONGER SHARABLE HIGH SEG
\r
442 MOVEI TAC,0 ;RETURN BOTH PHYSICAL AND LOGICAL CORE
\r
443 SOS (PDP) ;NEGATE SKIP RETURN WHICH CORE1 WILL DO
\r
444 JRST CORE1 ;GO DO IT AND RETURN TO CALLER
\r
446 ; "PJOB" PRINT JOB NUMBER OF JOB TTY IS ATTACHED TO
\r
448 INTERNAL PJOB,DECLF
\r
450 PJOB: MOVE TAC,ITEM ;JOB NO.
\r
451 DECLF: PUSHJ PDP,RADX10 ;PRINT TAC AS DEC. THEN CRLF
\r
454 ; "KJOB" KILL ATTACHED JOB
\r
456 EXTERNAL JBTSTS,TTYKILM,CPOPJ
\r
457 INTERNAL FTTIME,JOBKL
\r
459 KJOB: JUMPE ITEM,JOBKB ;WAS JOB INITIALIZED?
\r
461 TLZN T,JLOG+JACCT ;TEST JACCT ALSO IN CASE COMMAND WAS DELAYED
\r
462 JRST KJOB2 ;IF JOB NOT LOGGED IN
\r
463 TLO T,JACCT ;DISABLE ^C
\r
464 MOVEM T,JBTSTS(ITEM)
\r
466 PUSHJ PDP,ALOGN1 ;ATTACH TTY
\r
468 MOVSI TAC,TTYRNU+NOMESS
\r
469 XORM TAC,-1(PDP) ;SET TTYRNU AND CLEAR NOMESS FOR COMRET
\r
470 MOVE TAC,[SIXBIT /LOGOUT/] ;NAME OF CUSP
\r
474 IFE FTSWAP+FTLOGIN,<
\r
475 JUMPE PROG,JOBKA ;YES. DOES JOB HAVE CORE IN MEMORY?
\r
477 PUSHJ PDP,GETMIN ;GET MINIMAL JOB AREA ON DISK OR CORE
\r
478 JUMPE PROG,DLYCM1 ;DELAY COMMAND IF CORE ASSIGNED ON DISK
\r
479 JSP TAC1,MONJOB ;YES, SCHEDULE MONITOR JOB(PC IN EXEC MODE)
\r
480 ;RETURN HERE AT UUO LEVEL WHEN SCHEDULED
\r
481 JOBKL: MOVEI TAC1,ESTOP ;PUT ESTOP ON END OF PDL
\r
482 JSP TAC,MONSTR ;GO SETUP ACS AND PD LIST
\r
483 PUSHJ PDP,JOB1 ;FLUSH CORE AFTER RELEASING DEVICES
\r
487 PUSHJ PDP,PRTTIM ;PRINT JUST TOTAL RUN TIME
\r
488 PUSHJ PDP,TTYSTR ;START TTY
\r
490 PUSHJ PDP,DEASTY ;DEASSIGN ALL BY TTY
\r
491 PUSHJ PDP,TTYKIL ;RETURN TTY TO VIRGIN STATE
\r
492 JRST KSTOP ;CLEAR JOB STATUS WORD AND STOP JOB
\r
498 JOBKB: SETZM -1(PDP) ;CLEAR NOJOBN SO COMRET WILL PRINT ERROR MSG.
\r
499 JRST ATT4 ;"NOT A JOB"
\r
501 ; "START L" OR "START" - START AT LOC, L OR STARTING ADDRESS
\r
505 START: ;SAME AS CSTART, DIFF BY COMTAB BITS
\r
506 ; WHICH PUT TTY IN MONITOR OR USER MODE
\r
508 ; "CSTART L" OR "CSTART" - START AT LOC. L(TTY IN COMMAND MODE)
\r
510 STARTC: PUSHJ PDP,OCTIN ;CONVERT POSSIBLE OCTAL NO ARG.
\r
512 SKIPA TAC1,JOBSA(JDAT) ;NO START ADR. SPECIFIED RETURN
\r
515 JRST SNOARG ;NO ARG SPECIFIED RETURN
\r
517 JRST COMERA ;ILLEGAL CHARACTER
\r
520 PUSHJ PDP,CHKMED ;CHECK TO SEE IF HIGH SEG WHICH IS SHARABLE
\r
521 ; IF YES, TURN ON USER MODE WRITE PROTECT
\r
522 ; FOR THIS USER, AND SET MEDDLE BIT SO HE CANNOT
\r
524 JRST CHKSTR ;START JOB WITH PC IN USER MODE,
\r
525 ; IF START ADR IS NON-ZERO
\r
527 SNOARG: SKIPA TAC1,JOBSA(JDAT) ;NO. ARG SPECIFIED, USE START ADR SUPPLIED
\r
528 ; BY PROGRAM END STATEMENT AND STORED BY LINKING LOADER
\r
529 ; SKIP INTO REENTER, START WITH PC IN USER MODE
\r
532 ;"REENTER" - REENTER USER PROGRAM
\r
536 REENTER:MOVE TAC1,JOBREN(JDAT) ;GET REENTER ADDRESS FORM JOB DATA AREA
\r
537 JRST CHKSTR ;START JOB WITH PC IN USER MODE
\r
538 ; IF START ADR IS NON-ZERO
\r
540 ; "DDT" - START EXECUTION AT DDT IN USER AREA
\r
544 DDTGO: MOVE TAC1,JOBDDT(JDAT) ;DDT STARTING ADR. IN JOB DATA AREA
\r
547 ;ROUTINE TO CHECK TO SEE IF STARTING ADDRESS IS NON-ZERO, AND START USER IF OK
\r
549 CHKSTR: JUMPN TAC1,USTART ;IS IT NON-ZERO?, IS YES
\r
550 ; STORE OLD PC IN JOBOPC IN JOB DATA AREA
\r
551 ; THEN START WITH PC IN USER MODE
\r
552 JSP TAC,ERRMES ;NO, PRINT "NO START ADR"
\r
553 ASCII /NO START ADR
\r
556 ; "STOP" OR "<CONTROL>C"
\r
557 ;SCANNER ROUTINES DUMMY UP STOP WHEN CONTROL C TYPED IN
\r
558 ;STOP MUST BE DELAYED IF THIS JOB IS SYSTEM TAPE USER
\r
559 ;AND SYSTEM TAPE IS ACTIVE, OTHERWISE, THE JOB WILL NOT BE
\r
560 ;STOPPED WHEN DONE USING THE SYSTEM TAPE.
\r
563 EXTERNAL STUSER,JOB,PJBSTS,IOWQ,JOBDAC
\r
565 STOP: JUMPE ITEM,STOP8
\r
566 CAMN ITEM,STUSER ;IS THIS SYSTEM TAPE USER?
\r
567 JRST CFINS ;YES, DO FINISH SYS COMMAND
\r
570 PUSHJ PDP,STOPCK ;CAN THE JOB STOP?
\r
571 JRST DLYCM1 ;NO. DELAY IT.
\r
573 PUSHJ PDP,STOP1 ;STOP JOB
\r
574 STOP8: IFE FTTTYSER,<
\r
575 JSP TAC,CONMES ;PRINT "^C CRLF CRFL PERIOS"
\r
579 IFN FTTTYSER,< POPJ PDP,0>
\r
581 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)
\r
583 CONTC: ;SAME AS CONT
\r
585 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF
\r
588 CONT: MOVSI TAC1,JERR
\r
589 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET?
\r
590 POPJ PDP, ;COMMAND DECODER WILL DO REST
\r
591 JSP TAC,ERRMES ;YES, PRINT CANT CONTINUE
\r
593 ASCIZ /CAN'T CONTINUE
\r
596 ; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB
\r
597 ; "CORE" WITH NO ARG. WILL PRINT NO OF FREE BLOCKS LEFT
\r
598 ; WITHOUT AFFECTING CURRENT ASSIGNMENT OF CORE
\r
599 ; JOB NOT IN MIDDLE OF SWAPPING
\r
600 ; EITHER ON DISK OR CORE OR NEITHER PLACE
\r
604 CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS
\r
605 JRST COR3 ;NO ARG. SPECIFIED, JUST TYPE FREE BLOCK LEFT
\r
606 JRST COMERA ;ILLEGAL DECIMAL CHARACTER RETURN
\r
608 JUMPE TAC1,COR0 ;RELEASE DEVICES IF USER ASKING FOR 0 CORE
\r
611 JUMPE TAC1,COR1 ;ASSIGN JUST MINIMAL CORE AND RELEASE DEVICES
\r
612 ; IF ASKING FOR 0 CORE
\r
614 LSH TAC1,12 ;CONVERT 1K BLOCKS TO WORDS
\r
616 MOVEI TAC,-1(TAC1) ;HIGHEST RELATIVE ADDRESS=LENGTH-1 OF LOW SEG
\r
617 PUSHJ PDP,CORE0 ;TRY TO ASSIGN CORE
\r
618 JRST COR2 ;CORE NOT AVAILABLE. GO PRINT MESSAGE
\r
619 POPJ PDP, ;OK RETURN, CORE ASSIGNED ON DISK OF MEMORY
\r
621 ;USER ASKING FOR 0K
\r
622 COR1: JUMPN PROG,COR0 ;GO RELEASE ALL DEVICES IF HE HAS CORE IN MEMORY YET
\r
623 PUSHJ PDP,GETMIN ;NO, CORE ON DISK OR HAS NONE, ASSIGN MINIMAL
\r
624 ; AREA(FLUSH HIGH SEG TOO) IN CORE OR DISK
\r
625 JRST DLYCM ;AND DELAY COMMAND TILL CORE IS IN MEMORY
\r
626 ; DLYCM WILL SWAP IT IN.
\r
629 COR2: IFN FTTTYSERM,<
\r
630 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB ADR
\r
632 PUSHJ PDP,INLMES ;PRINT ? FOR PATCH
\r
635 COR3: PUSHJ PDP,PRTSEG ;PRINT SIZE OF LOW SEG
\r
638 PUSHJ PDP,PRTHGH ;PRINT SIZE OF HIGH SEG (+0 IF NONE)
\r
639 ; NOTHING IF NOT 2 REG. MACHINE OR SOFTWARE
\r
646 MOVE TAC,CORTAL ;NO. OF FREE 1K BLOCKS
\r
650 MOVE TAC,CORMAX ;PRINT MAX. NO. OF BLOCKS IN PHYSICAL CORE
\r
651 LSH TAC,-12 ;AVAILABLE TO A SINGLE USER(AS SET
\r
652 ; BY BUILD AND/OR ONCE)
\r
654 PUSHJ PDP,RADX10 ;PRINT NO. OF 1K BLOCKS AVAILABLE
\r
665 MOVE TAC,VIRTAL ;PRINT AMOUNT OF FREE SWAP SAPCE LEFT
\r
666 JRST RADX10 ;IN DECIMAL
\r
669 ; "SSAVE FILENAM.EXT [PROJ,PROG] CORE"
\r
670 ;WORKS LIKE SAVE, EXCEPT THAT HIGH SEG IS SAVED AS SHARABLE(EXT=SHR)
\r
671 ;INSTEAD OF NON-SHARABLE(EXT=HGH)
\r
673 ; "SAVE FILE-NAME[PROJ.,PROG.] CORE" - SAVES JOB AREA ON RETRIEVABLE DEVICE
\r
674 ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB
\r
675 ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSGINMENTS, AC'S OR PC
\r
678 TLO IOS,NSRBIT ;SET FLAGE FOR NON-SHARABLE EXT(HGH)
\r
680 SSAVE: HRRI IOS,SAVJOB ;SETUP TO RUN SAVEJOB (IOS CLEARED BEFORE
\r
681 PUSHJ PDP,CTEXT1 ;DISPATCH
\r
682 SETZM JBTPRG(ITEM) ;CLEAR JOB'S PROGRAM NAME FOR ROOM
\r
685 ; "GET DEVICE:FILE-NAME[PROJ.,PROG.] CORE" - SETS UP JOB AREA FROM RETREIVABLE
\r
687 ;DEVICE AND ASSIGNS CORE.
\r
689 GET: MOVEI IOS,GETJOB ;SETUP TO RUN GETJOB
\r
690 PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
691 SETZM JBTPRG(ITEM) ;CLEAR NAME FOR RCOM
\r
693 ; JOB DATA AREA FOR MONITOR JOB
\r
695 IFN FTLOGIN,< ;AUTOMATIC LOGIN AFTER DSK REFESH OR WHEN REFLAG SET
\r
699 LOGREF: MOVEM TAC,PRJPRG(ITEM) ;PRJ,PRG NRS. IN REFLAG
\r
701 IORM TAC,JBTSTS(ITEM)
\r
702 SETZM -1(PDP) ;CLEAR ALL FLAGS FOR COMRET
\r
703 SETZM REFLAG ;ONLY ONCE
\r
707 ;"HELP" -HELP COMMAND
\r
711 IFN FTLOGIN,< EXTERNAL HELPPP
\r
719 HELP: IFN FTLOGIN,<
\r
722 MOVE TAC,[SIXBIT /HELP/] ;CUSP NAME
\r
725 SYSTAT: IFN FTLOGIN,<
\r
728 MOVE TAC,[SIXBIT /SYSTAT/] ;CUSP NAME
\r
731 EXTERNAL JBTSTS,TTYATT
\r
735 IFN FTLOGIN,< EXTERNAL PRJPRG
\r
736 MOVEM TAC,PRJPRG(ITEM)
\r
738 ANDCAM TAC,JBTSTS(ITEM)
\r
740 IFN FTSWAP,<EXTERNAL TTYATT
\r
741 ALOGN1: PUSHJ PDP,TTYATT ;MAKE SURE TTY IS ATTACHED IN CASE
\r
742 ; THIS COMMAND MUST BE DELAYED
\r
743 ; BECAUSE NO CORE YET.
\r
752 CCLRUN: MOVE TAC,[SIXBIT /COMPIL/] ;CUSP NAME
\r
755 ;"LOGIN" - LOGIN COMMAND
\r
762 LOGDET: JSP TAC,ERRMES
\r
763 ASCIZ /PLEASE KJOB OR DETACH
\r
765 CLOGIN: TLNE T,JLOG ;FORCE USER TO LOGOUT BEFORE
\r
766 JRST LOGDET ; LOGGING IN ANEW.
\r
768 EXTERN VIRTAL,LOGSIZ
\r
769 MOVE TAC,VIRTAL ;AMOUNT OF FREE VIRTUAL CORE LEFT
\r
770 CAIL TAC,LOGSIZ ;IS THERE AT LEAST 2K FOR LOGIN?
\r
771 ; CUSTOMER CAN REDEFINE TO BE BIGGER THAN 2
\r
772 ; WITH MONGEN DIALOG
\r
774 MOVEI ITEM,0 ;NO, SET JOB NUMBER TO 0 FOR COMMAND DECODER
\r
775 JRST COR2 ;AND GO TELL USER AMOUNT OF CORE LEFT
\r
777 CLOG2: SKIPE TAC,REFLAG ;REFLAG SET NON-ZERO FOR AUTOMATIC LOGIN?
\r
778 JRST LOGREF ;YES, LOG USER IN WITHOUT RUNNING CUSP
\r
779 ; SO HE CAN RELOAD THE DISK AFTER REFRESH
\r
780 MOVE TAC,SYSPP ;SET PRJPRG TO SYSPP
\r
781 PUSHJ PDP,ALOGIN ;AUTOMATIC LOGIN
\r
782 MOVSI TAC,JACCT ;FLAG LOGIN OR LOGOUT RUNNING AND
\r
783 IORM TAC,JBTSTS(ITEM);DISABLE ^C,
\r
784 MOVE TAC,[SIXBIT /LOGIN/] ;CUSP NAME
\r
788 ; "R CUSTNAME CORE" - DOES "RUN SYS:CUSPNAME"
\r
790 RCOM: MOVEI TAC,0 ;NO FILE NAME, TTY WILL SUPPLY IT
\r
793 ARCOM: IFN FTTTYSER,< PUSHJ PDP,SKPBRK>
\r
794 ARCOM1: MOVEM TAC,JBTPRG(ITEM) ;STORE FILE NAME
\r
795 MOVSI TAC1,(SIXBIT /SYS/) ;READ FROM SYS DEVICE
\r
797 ; "RUN DEVICE:FILE[PROJ.PROG.] (CORE)"
\r
798 ;DOES A CORE,GET,START ALL IN ONE
\r
799 ;IF CORE ARG IS MISSING. SIZEIN DIRECTORY IS USED
\r
800 ;JOB ON DISK OR IN CORE OR NO CORE, BUT NOT IN MIDDLE OF SWAP
\r
804 RUNCOM: PUSHJ PDP,CTEXT1 ;GET DEVICE NAME FROM COMMAND STRING
\r
805 SETZM JBTPRG(ITEM) ;CLEAR FILE NAME
\r
806 RUNCO2:RUNC1: MOVEI IOS,RUNJOB
\r
807 RUNCM: PUSHJ PDP,GETMIN ;GET MININAL JOB AREA IN CORE OR DISK
\r
808 JUMPN PROG,SGSET ;WAS CORE ASSIGNED IN MEMORY? IF YES, GO SCANARGS
\r
810 JRST COR2 ;NO. PRINT "0K CORE LEFT"
\r
813 JRST DLYCM ;NO. DELAY COMMAND UNTIL IN CORE
\r
816 ; "ASSIGN DEV:NAME" - ASSIGN DEVICE TO JOB AND GIVE IT LOGICAL NAME
\r
818 EXTERNAL DEVLST,PJOBN,SYSTAP
\r
820 ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT
\r
821 JUMPE TAC1, NOTENF ;NO ARGUEMNT TYPED IF 0
\r
822 IFN FTLOGIN,<EXTERN PRJPROG
\r
823 CAME TAC,[SIXBIT .SYS.]
\r
825 HLRZ T1,PRJPRG(ITEM)
\r
826 CAIN T1,1 ;PROJECT NR, 1?
\r
830 MOVE T1, TAC1 ;SAVE DEVICE NAME
\r
832 PUSH PDP,DEVDAT ;SAVE TTY
\r
836 PUSH PDP, TAC ;SAVE INPUT BYTE POINT
\r
843 ASSG3: MOVEI TAC1,ASSCON ;SETUP ASSIGNED BY CONSOLE BIT
\r
844 HLRZ DEVDAT, DEVLST
\r
845 ASSG0: MOVE TAC,DEVNAM(DEVDAT)
\r
846 CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH?
\r
848 ASSG4: CAMN T1,[SIXBIT /DSK/] ;IS THIS A DISC?(IF YES,
\r
849 JRST ASSG5 ;BYPASS CHECK FOR SYSTEM TAPE AND ASSIGN BELOW
\r
850 CAMN TAC,SYSTAP ;IS NEXT DEVICE IN LIST THE SYSTEM TAPE?
\r
851 JRST ASSFIN ;YES, DO NOT ASSIGN. CLEAR DIRECTORY IN CORE BIT
\r
852 ASSG5: PUSHJ PDP,ASSASG ;NO, TRY TO ASSGIN DEVICE
\r
853 JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB
\r
854 JRST ASSFIN ;ASSIGNED
\r
856 ;SYSTEM TAPE OR NOT MATCH OF ARG AND PHYSICAL NAME.
\r
858 ASSG1: CAMN TAC,SYSTAP ;IS THIS SYSTEM TAPE?
\r
860 LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS DEVICE
\r
861 TRZ TAC,-1 ;COMAPRE LEFT HALF ONLY
\r
863 PUSHJ PDP, ASSASG ;MATCH. TRY TO ASSIGN IT
\r
864 JRST ASSG2 ;KEEP LOOKING
\r
865 JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY UNASSIGNED
\r
867 ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT)
\r
868 JUMPN DEVDAT, ASSG0
\r
870 POP PDP,DEVDAT ;RESTORE TTY DDB
\r
875 JRST NOTDEV ;PRINT NO SUCH DEVICE
\r
877 IFN FTLOGIN,<EXTERN STREQ,SYSTAP
\r
878 ASSG7: PUSHJ PDP,CTEXT1
\r
886 ;ALREADY ASSIGNED TO ANOTHER JOB
\r
893 JRST DECLF ;PRINT JOB NUMBER CRLF
\r
896 LDB TAC,PJOBN ;GET JOB NUMBER FOR DEVICE
\r
897 POP PDP,DEVDAT ;GET DDB FOR TTY
\r
898 PUSH PDP,TAC ;SAVE JOB NO.
\r
899 MOVEI TAC,ASSMS2 ;TYPE ERROR MESSAGE
\r
901 POP PDP,TAC ;GET JOB NO. BACK
\r
902 JRST DECLF ;AND TYPE IT
\r
905 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB /
\r
907 ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME
\r
908 ASSFIN: SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME
\r
910 POP PDP,TAC ;RESTORE INPUT BYTE POINTER
\r
911 PUSH PDP,DEVDAT ;SAVE DDB ADDRESS
\r
914 EXCH DEVDAT,0(PDP) ;GET TTYDDB, SAVE DEVICE DDB
\r
916 PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME
\r
917 SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED?
\r
918 PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE
\r
921 MOVEI TAC,LOGERR ;YES, PRINT ERROR
\r
922 MOVE DEVDAT,-3(PDP) ;RESTORE TTY DDB
\r
924 MOVEI TAC,0 ;CLEAR LOGICAL NAME FOR THIS DEVICE
\r
925 ASSF1: POP PDP,DEVDAT
\r
926 MOVEM TAC,DEVLOG(DEVDAT);STORE IN DEVICE DATA BLOCK
\r
927 MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT
\r
928 ANDCAB TAC1,DEVMOD(DEVDAT) ;SETUP TAC1 WITH DEVICE CHARACTERISTICS FOR ASGHGH
\r
931 PUSHJ PDP,ASGHGH ;GO CHECK IF THIS DEVICE HAS INITIALIZED ANY SHARED SEGMENTS
\r
932 ; IF YES, CLEAR SEG NAMES SO NO NEW SHARING (DTA,MTA ONLY)
\r
934 MOVE TAC1,DEVNAM(DEVDAT) ;PHYSICAL NAME
\r
935 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
936 PUSHJ PDP,PRNAME ;PRINT IT
\r
942 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE. /
\r
944 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE
\r
948 DEASSI: JUMPE ITEM,CPOPJ ;NO-OP IF NO JOB NUMBER
\r
949 PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
950 JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BY TTY
\r
951 MOVE TAC, TAC1 ;DEVICE NAME
\r
952 PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE
\r
953 JRST DEAER1 ;NOT FOUND
\r
954 PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT
\r
955 JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED
\r
956 POPJ PDP, ;DEVICE DEASSIGNED
\r
959 DEAER1: MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
960 JSP TAC,ERRMES ;PRINT NO SUCH DEVICE
\r
962 ASCIZ /NO SUCH DEVICE
\r
965 DEAER2: MOVE TAC1,DEVNAM(DEVDAT) ;PRINT PHYSICAL DEVICE NAME
\r
966 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
970 ASCIZ / WASN'T ASSIGNED
\r
973 INTERNAL FTREASSIGN
\r
981 ;CALL MOVE AC,JOB NUMBER
\r
982 ; MOVE AC+1,SIXBIT /DEVICE/
\r
983 ; CALL AC,[SIXBIT /REASSIGN/]
\r
984 ;IF C(AC)=0, JOB HAS NOT BEEN INITIALIZED
\r
985 ;IF C(AC+1)=0, DEVICE NOT ASSIGNED TO THIS JOB OR DEVICE IS A TTY
\r
988 EXTERNAL PUUOAC,JOB
\r
990 REASSI: LDB UUO,PUUOAC
\r
992 PUSH PDP,@UUO ;STACK JOB NUMBER TO BE REASSIGNED TO
\r
994 MOVE TAC1,@UUO ;DEVICE NAME
\r
995 MOVE ITEM,JOB ;THIS JOB NUMBER
\r
998 ;"REASSIGN DEV:JOB" - REASSIGN DEVICE "DEV" TO JOB "JOB"
\r
1001 PUSHJ PDP,CTEXT ;GET DEVICE NAME
\r
1002 JUMPE TAC,NOTENF ;NULL NAME?
\r
1003 MOVE UUO,TAC1 ;SAVE IT IN UUO
\r
1004 PUSHJ PDP,DECIN1 ;GET NEW JOB NUMBER
\r
1005 JRST NOTENF ;NONE SPECIFIED, DOESN'T RETURN IF ERROR
\r
1006 JRST COMERA ;ILLEGAL CHARACTER
\r
1007 PUSH PDP,TAC1 ;PUT JOB NUMBER ON STACK, DEVICE
\r
1008 MOVE TAC1,UUO ;NAME IN TAC1
\r
1009 SETZM UUO ;SET COMMAND SWITCH
\r
1011 ;ROUTINE COMMON TO REASSIGN UUO AND COMMAND
\r
1013 EXTERNAL JBTSTS,PJOBN,JOBFDV
\r
1015 REASS1: EXCH ITEM,(PDP) ;NEW JOB NO. IN ITEM
\r
1016 CAILE ITEM,JOBN ;IS JOB NUMBER OUT OF RANGE
\r
1017 JRST REASE2 ;YES, DO NOT REASSIGN
\r
1018 MOVE TAC,JBTSTS(ITEM) ;NEW JOB STATUS
\r
1019 EXCH ITEM,(PDP) ;RESTORE ITEM AND STACK
\r
1020 TLNN TAC,JNA ;DOES NEW JOB EXIST?
\r
1023 PUSHJ PDP,DEVSRC ;SEARCH FOR DEV
\r
1024 JRST REASE2 ;NOT FOUND
\r
1026 CAME TAC,ITEM ;ASSIGNED TO THIS JOB
\r
1028 MOVE TAC,DEVMOD(DEVDAT)
\r
1030 TLNE TAC,DVTTY ;IS IT A TTY?
\r
1031 JRST REASE6 ;YES. CAN'T BE REASSIGNED
\r
1032 TRNN TAC,ASSPRG ;IS DEVICE INITED?
\r
1034 JUMPN UUO,REASS4 ;YES. COMMAND LEVEL?
\r
1035 HRL DEVDAT,(PDP) ;YES. SCHEDULE RELEASE
\r
1036 MOVEM DEVDAT,JOBFDV(JDAT)
\r
1038 MOVE DEVDAT,-2(PDP)
\r
1039 MOVSI TAC1,TTYRNC ;SET TTYRNC SO JOB WILL RUN
\r
1043 HLRZ TAC,JOBFDV(JDAT)
\r
1045 HRRZ DEVDAT,JOBFDV(JDAT)
\r
1047 SETOM UUO ;SET FLAG TO STOP JOB
\r
1048 REASS4: HRRZ DSER,DEVSER(DEVDAT)
\r
1049 HRRZM DEVDAT,JOBFDV(JDAT)
\r
1052 REASS2: MOVE DEVDAT,USRJDA(UCHN) ;GET XWD UUO BITS,DDB ADDRESS
\r
1053 HRRZ TAC,JOBFDV(JDAT) ;GET ADDR. OF DDB SAVED BY COMMAND
\r
1054 PUSH PDP,UCHN ;SAVE USER CHANNEL
\r
1055 CAIN TAC,(DEVDAT) ;IS CHOSEN DEVICE ON THHS CHANNEL?
\r
1056 PUSHJ PDP,RELEA5 ;YES, RELEASE DEVICE
\r
1059 MOVE DEVDAT,JOBFDV(JDAT)
\r
1060 MOVE ITEM,JOB ;CURRENT JOB NUMBER
\r
1061 REASS3: MOVEI TAC,ASSCON ;ASSIGN IT BY CONSOLE
\r
1062 IORM TAC,DEVMOD(DEVDAT)
\r
1064 DPB ITEM,PJOBN ;PUT IN NEW JOB NUMBER
\r
1069 REASE1: POP PDP,TAC
\r
1070 JUMPE UUO,ATT4 ;JOB NEVER WAS INITIATED
\r
1071 REASE4: SETZM @UUO ;CLEAR C(AC)
\r
1074 REASE2: MOVEI TAC,NOTDEV ;NO SUCH DEVICE
\r
1075 REASE5: POP PDP,TAC1
\r
1079 REASE3: MOVEI TAC,DEAER2 ;WASN'T ASSIGNED
\r
1082 REASE6: MOVEI TAC,REASE7
\r
1084 REASE7: MOVE TAC1,DEVNAM(DEVDAT)
\r
1085 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1088 ASCIZ / CAN'T BE REASSIGNED
\r
1095 ;"ATTACH DEVNAME" -ATTACHES A PREVIOUSLY PARTITIONED DEVICE
\r
1096 ; NOTE-MUST BE LOGGED IN UNDER [1,1] TO DO THIS
\r
1097 ; "ATTACH N [PROJ.,PROG.]" - ATTACH CONSOLE TO JOB N
\r
1098 ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -2(PDP)
\r
1099 ;BY THE COMMAND DECODER
\r
1102 EXTERNAL TTYATT,JOBN,TTYFND
\r
1104 ATTACH: IFE FTTTYSER,<
\r
1105 MOVE AC2,TAC ;SAVE BYTE POINTER>
\r
1106 PUSHJ PDP,DECIN ;GET JOB NO.
\r
1107 JRST NOTENF ;NOT A NUMBER OR NONE SPECIFIEED
\r
1109 JRST DEVATT ;WANTS TO ATTACH A DEVICE
\r
1115 SKIPE TAC1 ;0 IS ILLEGAL
\r
1116 CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG?
\r
1117 JRST ATT1 ;ILLEGAL JOB NUMBER
\r
1118 MOVSI T1,JNA ;HAS THIS JOB NO BEEN ASSIGNED?
\r
1119 TDNN T1,JBTSTS(TAC1)
\r
1120 JRST ATT4 ;NO, PRINT ERROR
\r
1123 MOVE IOS,TAC1 ;SAVE JOB NO.
\r
1124 PUSHJ PDP,PJPGNO ;GET PROJ,-PROG. NOS. ARG(IF ERROR, PDP SUP LEVEL
\r
1125 ; OFF 1, PRINT ERROR, AND DO NOT RETRY HERE
\r
1127 MOVEM IOS,TAC1 ;RESTORE
\r
1128 SKIPN AC2 ;DID USER TYPE IN A PROG,PROG # IN []'S?
\r
1129 MOVE AC2,PRJPRG(ITEM) ;NO. ASSUME PROJ,PROG NUMBER FOR CURRENT JOB
\r
1130 ; SO USER CAN AVOID TYPEING PROGPROG NO. IF DOING
\r
1131 ; FROM 1 JOB TO ANOTHER UNDER SAME PROJ,PROG
\r
1132 CAME AC2,PRJPRG(TAC1) ;IS THIS THE SAME PERSON WHO DETACHED FROM THIS JOB NUMBER?
\r
1133 JRST ATT3 ;NO-ERROR
\r
1136 MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM
\r
1137 PUSHJ PDP,TTYATT ;NO, ATTACH TTY
\r
1138 JRST ATT2 ;ERROR CAN'T ATTACH
\r
1139 MOVEM DEVDAT,-2(PDP) ;CHANGE DEV DATA BLOCK ADDRESS
\r
1142 PUSHJ PDP,TSETBF ;INITIALIZE TTY INPUT BUFFER
\r
1144 JRST TTYFND ;ATTACHED, GO SET UP OUTP. BYTE PTR.
\r
1148 DEVATT: IFE FTTTYSER,<
\r
1149 MOVE TAC,AC2 ;RESTORE BYTE POINTER>
\r
1150 PUSHJ PDP,CTEXT1 ;GET DEVICE ARGUMENT
\r
1151 JFCL ;SHOULD NEVER RETURN
\r
1152 MOVE T,PRJPRG(ITEM) ;GET PROJ.-PROG. NOS.
\r
1153 CAME T,SYSPP ;PRJPRG = [1,1]?
\r
1154 JRST ATT5 ;NO - ERROR
\r
1155 MOVE TAC,TAC1 ;YES-SET UP DEVICE NAME
\r
1156 PUSH PDP,DEVDAT ;SAVE DDB FOR THIS TTY
\r
1157 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1158 JRST TEMP1 ;NOT FOUND
\r
1159 LDB T,PJOBN ;GET JOB NUMBER
\r
1160 JUMPN T,ATT6 ;IS IT = 0?
\r
1161 DPB ITEM,PJOBN ;SET JOB NUMBER
\r
1162 MOVE TAC,DEVMOD(DEVDAT); CHECK TO SEE IF THIS IS A TTY
\r
1164 TLNE TAC,DVTTY ;IS IT A TTY?
\r
1165 HRRM DEVDAT,TTYTAB(TAC1) ;SET TRANS TABLE TO POINT TO DDB
\r
1170 ATT1: JSP TAC,ERRMES
\r
1171 ASCIZ /ILLEGAL JOB NUMBER
\r
1173 ATT2: MOVE TAC1,DEVNAM(DEVDAT) ;[PRINT PHYSICAL NAME
\r
1174 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1177 ASCIZ / ALREADY ATTACHED
\r
1179 ATT3: JSP TAC,ERRMES
\r
1180 ASCIZ /CAN'T ATT TO JOB
\r
1182 ATT4: JSP TAC,ERRMES
\r
1185 ATT5: JSP TAC,ERRMES
\r
1186 ASCIZ /CAN'T ATT DEV
\r
1188 ATT6: POP PDP,DEVDAT
\r
1197 ;"DETACH" - DETACH CONSOLE FROM JOB
\r
1198 ;"DETACH DEVNAM" - DETACHES DEVICE FROM THE SYSTEM SOFTWAREWISE
\r
1199 ; NOTE - MUST BE LOGGED IN UNDER [1,1] TO DO THIS
\r
1205 DETACH: JRST TTYDET ;GO DETACH TTY
\r
1209 EXTERNAL PRJPRG,SYSPP,PUNIT,TTYTAB,PJOBN
\r
1210 DETACH: PUSHJ PDP,CTEXT1 ;GET ARGUMENT
\r
1211 JUMPE TAC1,TTYDET ;ONLY "DET" TYPED
\r
1212 MOVE T,PRJPRG(ITEM) ;GET PROJ.-PROG. NUMBER
\r
1213 CAME T,SYSPP ;PRJPRG = [1,1]?
\r
1214 JRST LOGER1 ;NO-PRINT ERROR MSG.
\r
1215 MOVE TAC,TAC1 ;YES-SET UP DEVICE NAME
\r
1216 PUSH PDP,DEVDAT ;SAVE TTY DDB
\r
1217 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1218 JRST TEMP1 ;DEVICE NOT FOUND
\r
1219 MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS DSK
\r
1220 TLNE TAC,DVDSK ;IS IT THE DSK?
\r
1221 JRST TEMP1 ;YES-PRINT ERROR MSG.
\r
1222 MOVEI TAC1,ASSCON ;FOUND-SET UP ASSIGNED BY CONSOLE
\r
1223 PUSHJ PDP,ASSASG ;TRY TO ASSIGN
\r
1224 JRST TEMP2 ;CAN'T ASSIGN
\r
1225 TLNE DEVDAT,SYSDEV ;IS THIS SYSTEM DEVICE?
\r
1226 JRST TEMP1 ;YES-PRINT ERROR MSG.
\r
1227 XOR T,T ;NO-SET TO ZERO
\r
1228 DPB T,PJOBN ;SET JOB NO. TO NULL JOB
\r
1229 MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS A TTY
\r
1230 TLNN TAC,DVTTY ;IS IT A TTY?
\r
1231 JRST .+4 ;NO-GO AHEAD
\r
1232 LDB TAC,PUNIT ;YES-SET UPO FOR SCNSER
\r
1233 MOVEI TAC1,-1 ;SET LEFT HALVE TO TTYTAB TO -1
\r
1234 HRRM TAC1,TTYTAB(TAC) ;SO THAT SCNSER CHECKS FOR THIS
\r
1235 POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1236 POPJ PDP, ;SUCCESSFUL RETURN
\r
1238 TEMP1: POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1239 JRST DEAER1 ;PRINT ERROR MSG. AND RETURN
\r
1241 IFE FTTTYSER,< POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1242 JRST ASSER1+1 ;PRINT ERROR MSG. AND RETURN
\r
1247 LOGER1: JSP TAC,ERRMES
\r
1248 ASCIZ /CAN'T DET DEV
\r
1251 >> ;CLOSE BOTH FTLOGIN AND FTATTACH CONDITIONALS.
\r
1253 ;"DAYTIME" - PRINT TIME OF DAY
\r
1255 EXTERNAL TIME,THSDAT,MONTAB,JIFMIN
\r
1260 PUSHJ PDP,DECIN ;WAS AN ARGUMENT TYPED?
\r
1261 JRST DAYTM1 ;NO, PRINT TIME
\r
1262 JRST COMERA ;ERROR
\r
1263 HLRZ TAC,PRJPRG(ITEM) ;YES
\r
1264 CAIE TAC,1 ;IS THIS PROJECT 1?
\r
1265 JRST DAYTM1 ;NO, PRINT TIME OF DAY ANYWAY(IGNORE ARG)
\r
1266 MOVE TAC,TAC1 ;YES, RESET TIME ACCORDING TO ARGUMENT
\r
1269 ADD TAC,TAC1 ;COMPUTE MINUTES
\r
1270 IMULI TAC,JIFMIN ;COMPUTE JIFFIES
\r
1271 MOVEM TAC,TIME ;AND STORE
\r
1274 DAYTM1: MOVE TAC,THSDAT ;PRINT TODAY'S DATE
\r
1276 EXCH TAC,TAC1 ;YEAR AND MONTH IN TAC1
\r
1277 PUSHJ PDP,DECP1 ;ADD 1 TO DAY(IN TAC) AND PRINT DECIMAL
\r
1281 MOVE TAC,MONTAB(TAC) ;MONTH
\r
1282 DPB TAC,[POINT 21,DAMESS,27]
\r
1284 PUSHJ PDP,CONMES ;PRINT DAY
\r
1285 MOVEI TAC,^D64(TAC1)
\r
1286 PUSHJ PDP,RADX10 ;PRINT YEAR
\r
1288 MOVE TAC,TIME ;PRINT TIME OF DAY
\r
1293 ;"TIME (JOB NO.)" - PRINT TOTAL AND INCREMENTAL RUNNING TIME FOR A JOB
\r
1294 ;FOLLOWED BY KILO-CORE TICKS
\r
1295 ;"TIME 0" IMPLIES RUNTIME FOR NULL JOB AND THE TOTAL TIME SPENT SHUFFLING USERS
\r
1296 ; IF NO JOB NO. GIVEN-TIME WILL BE FOR CURRENTLY LOGGGED IN JOB NO.
\r
1298 EXTERNAL RTIME,TTIME,SHFWRD,WDPJIF,JOBN,JBTSTS,CLRWRD,LSTWRD
\r
1300 RUNTIM: PUSHJ PDP,DECIN ;GETJOB NO. ARG.
\r
1301 JRST RUN1 ;NO ARG. GIVEN - LOGGED IN?
\r
1302 JRST COMERA ;ILLEGAL DECIMAL CHARACTER RETURN
\r
1303 JUMPE TAC1,RUN2 ;RUNTIME 0 GIVEN
\r
1304 CAIL TAC1,JOBN ;JOB NO. TO BIG?
\r
1305 JRST ATT1 ;YES,ILLEGAL JOB. NO.
\r
1306 MOVE TAC,TTIME(TAC1) ;TIME SINCE LAST LOGGIN
\r
1307 JRST PRTIME ;PRINT AND RETURN
\r
1309 RUN2: PUSHJ PDP,INLMES ;PRINT
\r
1311 ASCIZ /SHFL / ;"SHUFFLING "
\r
1312 MOVE TAC,SHFWRD ;NO. WORDS SHUFFLED
\r
1313 IDIVI TAC,WDPJIF ;NO.WORDS/JIFFY USING BLT
\r
1314 PUSHJ PDP,PRTIME ;PRINT SHUFFLE TIME
\r
1319 PUSHJ PDP,PRTIME ;PRINT TIME SPENT CLEARING CORE
\r
1323 PUSHJ PDP,PRTIME ;PRINT TME SPENT "LOST" RUNNING NULL JOB
\r
1324 PUSHJ PDP,INLMES ;PRINT
\r
1325 ASCIZ /NULL / ;"NULL TIME "
\r
1326 MOVE TAC,TTIME ;PRINT NULL JOB RUNNING TIME
\r
1327 PUSHJ PDP,PRTIME ;
\r
1328 PUSHJ PDP,INLMES ;PRINT TOTAL SYSTEM UP TIME
\r
1331 JRST PRTIME ;AND RETURN
\r
1335 MOVEI TAC,0 ;GET SET TO CLEAR INCREMENTAL RUN TIME
\r
1338 MOVSI TAC,JLOG ;IS JOB LOGGED IN?
\r
1339 TDZN TAC,JBTSTS(ITEM) ;TEST JOB STATUS BITS AND CLEAR TAC ALWAYS
\r
1340 JRST NOTENF ;NO, NEED MORE ARGUMENTS
\r
1342 EXCH TAC,RTIME(ITEM) ;GET CURRENT INCR. TIME AND CLEAR
\r
1343 PUSHJ PDP,PRTIME ;PRINT TIME SINCE LAST TIME COMM.
\r
1344 PRTTIM: MOVE TAC,TTIME(ITEM) ;GET TOTAL ACCUMULATED TIME
\r
1348 PUSHJ PDP,INLMES ;PRINT "K*CPUSEG=
\r
1349 ASCIZ /KILO-CORE-SEC=/
\r
1350 MOVE TAC,JBTKCT(ITEM) ;PRODUCT OF NO. OF K CORE* NO. OF JIFFIES RUN
\r
1351 IDIVI TAC,JIFSEC ;AT THAT SIZE, CONVERT TO KILO CORE SECONDS
\r
1352 PUSHJ PDP,RADX10 ;AND PRINT IN DECIMAL
\r
1353 JRST CRLF ;PRINT IRLF
\r
1356 JRST PRTIME ;PRINT IT AND RETURN
\r
1360 ;ROUTINE TO LET TTY TALK TO ANY OTHER RING OF TTYS
\r
1362 ; TTYN NEED NEVER HAVE BEEN TYPED ON BEFORE
\r
1369 TALK: PUSHJ PDP,CTEXT1 ;GET ARGUMENT
\r
1370 JUMPE TAC1,TALK2 ;NONE SPECIFIED
\r
1372 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1373 JRST TALK1 ;DEVSRC SHOULD FIND A FREE TTY DDB
\r
1374 ; EVEN IF TTY NEVER TYPED ON YET
\r
1379 TALK2: MOVSI ITEM,NOINCK ;SET FLAGS SO RESPONSE WILL PRINT
\r
1380 MOVEM ITEM,-1(PDP)
\r
1383 TALK1: MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1384 MOVSI ITEM,NOINCK ;SET FLAGS TO PRINT RESPONSE
\r
1385 MOVEM ITEM,-1(PDP)
\r
1391 INTERNAL FTEXAMINE
\r
1395 ;"EXAMINE LOC" - LOOKS A CONTENTS OF LOC AND PRINTS IN OCTAL
\r
1396 ;IF LOC IS MISSING, NEXT LOC IS PRINTED
\r
1397 ;IF PREVIOUS WAS E COMMAND, SAME LOC IF PREVIOUS WAS D COMMAND
\r
1398 ;TAB. IS PRINTED INSTEAD OF CRLF(LIKE DDT)
\r
1400 EXTERNAL TPOPJ,JOBPC
\r
1402 ECOM: SKIPGE JOBEXM(JDAT) ;WAS PREVIOUS D OR E COMMAND. A D COMMAND?
\r
1403 AOS JOBEXM(JDAT) ;NO, IT WAS AN E. INCREMENT IN CASE HE TYPES NO ARG
\r
1404 HRROS JOBEXM(JDAT) ;YES, FLAG THAT E HAPPENED LAST(LH=-1)
\r
1405 PUSHJ PDP,OCTIN ;GET OCTAL LOCATION
\r
1406 SKIPA TAC,JOBEXM(JDAT) ;NONE SPECIFIED, USE LAST LOC OF D OR NEXT OF E
\r
1407 JRST COMERA ;ILLEGAL CHARACTER
\r
1408 PUSHJ PDP,DEAT ;CHECK FOR AC REFERENCE AND STORE JOBEXM
\r
1409 HRRZ UUO,TAC1 ;IGNORE LH
\r
1410 HRLI UUO,PROG ;SET TO RELOCATE
\r
1411 PUSHJ PDP,GETWRD ;GET WORD FROM LOW OR HIGH SEG
\r
1412 JRST ECOMA ;ERROR, OUT OF BOUNDS
\r
1413 PUSH PDP,TAC ;SAVE CONTENTS OF LOC TO BE PRINTED
\r
1414 HRRZ TAC,JOBEXM(JDAT) ;PRINT LOC BEING EXAMINED
\r
1416 PUSHJ PDP,INLMES ;PRINT SLASH TAB
\r
1418 HLRZ TAC,(PDP) ;PRINT LEFT HALF
\r
1420 PUSHJ PDP,INLMES ;PRINT SPACE
\r
1422 HRRZ TAC,(PDP) ;PRINT RIGHT HALF
\r
1424 PUSHJ PDP,INLMES ;PRINT FINAL TAB
\r
1426 JRST TPOPJ ;POP PDP,TAC,POPJ PDP,
\r
1428 ;"DEPOSIT LH RH LOC" - DEPOSITS XWD LH,RH IN LOCATION LOC
\r
1429 ;IF LOC IS MISSING. ASSUME NEXT LOC IF PREVIOUS D, SAME LOC IF PREVIOUS E
\r
1431 EXTERNAL JOBEXM,JOBPFI
\r
1433 DCOM: PUSHJ PDP,OCTIN ;GET LH
\r
1434 JRST NOTENF ;NOT ENOUGH ARGUMENTS
\r
1435 JRST COMERA ;ILLEGAL CHARACTER
\r
1436 HRLM TAC1,IOS ;SAVE LH
\r
1437 PUSHJ PDP,OCTIN ;GET RH
\r
1438 JRST NOTENF ;NOT ENOUGH ARGUMENTS
\r
1439 JRST COMERA ;ILLEGAL CHARACTER
\r
1440 HRRM TAC1,IOS ;SVE RH
\r
1441 SKIPL JOBEXM(JDAT) ;WAS PREVIOUS D OR E AN E COMMAND?
\r
1442 ; LH=-1 IF E, LH=0 IF D
\r
1443 AOS JOBEXM(JDAT) ;NO, INCREMENT IN CASE USER TYPED NOT THIRD ARG
\r
1444 ; FOR SUCCESSIVE D'S
\r
1445 HRRZS JOBEXM(JDAT) ;FLAG THAT A D WASDONE LAST(LH=0)
\r
1446 PUSHJ PDP,OCTIN ;GET LOC
\r
1447 SKIPA TAC1,JOBEXM(JDAT) ;NOT SPECIFIED, USE LAST OF E OR NEXT OF D
\r
1448 JRST COMERA ;ILLEGAL CHARACTER
\r
1451 PUSHJ PDP,CHKMED ;CHECK TO SEE IF HIGH SEG IS SHARABLE
\r
1452 ; IF YES, SET USER-MODE WRITE PROTECT (UWP) ON
\r
1453 ; FOR THIS USER, AND SET MEDDLE FOR THIS USER
\r
1454 ; SO HE CANNOT TURN UWP OFF
\r
1456 TRNN TAC1,777760 ;IN USER ACS
\r
1458 HLRZ TAC,PROG ;GET PROTECTION
\r
1459 CAILE TAC1,JOBPFI ;NO, GREATER THAN HIGHEST LOC, PROTECTED
\r
1460 ; FROM IO IN JOB DATA AREA?
\r
1461 CAMLE TAC1,TAC ;IN BOUNDS?
\r
1463 DCOM1: PUSHJ PDP,DEAT ;CHECK FOR AC REFERENCE
\r
1464 HRLI TAC1,PROG ;SET FOR RELOCATION
\r
1468 DEAT: TLZ TAC1,-1 ;CLEAR LH IN CASE THIS IS A SUCCESSIVE E WITH NO ARG
\r
1469 HRRM TAC1,JOBEXM(JDAT) ;STORE FOR NEXT TIME, DO NOT TOUCH LH(D OR E LAST)
\r
1470 ; YES, WAS JOB STOPPED IN USER MODE?
\r
1471 CAIL TAC1,20 ;IS IT AN AC?
\r
1473 MOVE TAC,JOBPC(JDAT)
\r
1474 TLNE TAC,USRMOD ;USER MODE?
\r
1475 ADDI TAC1,20 ;YES USER ACS ARE AT 20 INSTEAD OF 0
\r
1480 PUSHJ PDP,HGHDEP ;IS IT IN BOUNDS AND ALLOWED IN HIGH SEG?
\r
1481 JRST ECOMA ;NO, PRINT "OUT OF BOUNDS"
\r
1482 POPJ PDP, ;YES, IOS DEPOSITED, AND JOBEXM UPDATED
\r
1484 ECOMA: JSP TAC,ERRMES ;OUT OF BOUNDS
\r
1485 ASCIZ /OUT OF BOUNDS
\r
1491 ;"SCHEDULE OCTN" - SETS RH OF STATES TO OCTN, IF TYPED FROM
\r
1492 ; THE OPERATOR CONSOLE (C(DEVOPR)), OTHERWISE ILLEGAL
\r
1493 ;"SCHEDULE" WITH NO ARGUMENTS TYPES OUT RH OF STATES, LEGAL FOR ALL.
\r
1495 EXTERN DEVOPR,STATES,OCTPNT
\r
1497 SKEDUL: PUSHJ PDP,OCTIN ;GET THE ARGUMENT IF ANY
\r
1498 JRST SKED1 ;NO ARGUMENT
\r
1499 JRST COMERA ;BAD SYNTAX IN OCTAL NUMBER
\r
1500 MOVE TAC,DEVNAM(DEVDAT) ;AN ARGUMENT. IS THIS THE OPR?
\r
1502 JRST COMERR ;NO, THIS IS ILLEGAL, THEN.
\r
1503 HRRM TAC1,STATES ;YES. STORE ARGUMENT IN RH OF STATES
\r
1504 POPJ PDP,0 ;RETURN
\r
1506 SKED1: HRRZ TAC,STATES ;SCHEDULE WITH NO ARGUMENTS.
\r
1507 PUSHJ PDP,OCTPNT ;PRINT RH OF STATES.
\r
1508 JRST CRLF ;AND RETURN WITH A CRLF
\r
1510 ;"BLANK" OR NO ALPHA NUMERIC BEFORE BREAK CHAR COMMAND
\r
1511 ;DISPATCHED TO LIKE ANY OTHER COMMAND(0 IN COMMAND TABLE)
\r
1515 LDB TEM,TAC ;GET BREAK CHARACTER
\r
1516 CAIE TEM,15 ;IS IT A CR
\r
1519 CAIE TEM,12 ;WAS BREAK A LF
\r
1521 CAIN TEM,";" ;NO, IS IT SEMI COLON(MONITOR COMMENT)
\r
1522 POPJ PDP, ;YES, IGNORE
\r
1523 ; FALL IN UNKNOWN COMMAND
\r
1525 ;COMMAND NOT IN COMMAND DICECTORY
\r
1527 NOCOM: JRST COMERR ;NO, APPEND ? TO WHAT HE TYPED IN
\r
1530 ; "FINISH DEVICE" - CLOSES,RELEASE AND DESASSIGNS DEVICE
\r
1531 ;JOB MUST HAVE CORE
\r
1533 EXTERNAL USRJDA,PUUOAC,JOB,USRHCU,JOBFDV,SYSTAP
\r
1534 CFINI: PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
1535 JUMPE TAC1,NOTENF ;NOT ENOUGH ARG. IF NONE
\r
1536 SKIPA TAC,TAC1 ;SEARCH FOR SIXBIT DEVICE NAME
\r
1537 CFINS: MOVE TAC,SYSTAP ;HERE ON CONTROL C ON SYSTEM TAPE USER
\r
1538 ; DO A FINISH SYS COMMAND FOR HIM
\r
1540 JRST NOTDEV ;PRINT NOT A DEVICE
\r
1541 HRRZM DEVDAT,JOBFDV(JDAT) ;STORE DDB ADR. IN JOB DATA AREA
\r
1542 MOVE DEVDAT,-2(PDP)
\r
1543 JSP TAC1, MSTART ;SETUP MONITOR JOB AND RETURN
\r
1544 ; RETURN HERE AT UUO LEVEL WHEN SCHEDULED
\r
1545 JSP TAC,MONSTR ;SETUP ACS,PROG,JDAT,PDP
\r
1546 MOVE UCHN,USRHCU ;HIGHEST USER IO CHANNEL IN USE
\r
1547 FDV1: HRRZ DEVDAT,USRJDA(UCHN) ;GET NEXT DEVICE
\r
1548 MOVSI UUO,071000 ;SETUP RELEASE UUO
\r
1549 DPB UCHN,PUUOAC ;WITH CHANNEL NO.
\r
1551 CAMN DEVDAT,JOBFDV(JDAT) ;IS THIS DEV. THE ONE TO RELEASE?
\r
1552 XCT UUO ;YES, RELEASE IT(AND CLOSE)
\r
1554 SOJGE UCHN,FDV1 ;FINISHED?
\r
1555 MOVE ITEM,JOB ;GET JOB NUMBER
\r
1556 MOVE DEVDAT,JOBFDV(JDAT) ;RESET DEVDAT
\r
1557 PUSHJ PDP,DEASG ;DEASSIGN DEVICE
\r
1558 JFCL ;IGNORE IF NOT ASSIGNED BY CONSOLE
\r
1559 JRST ESTOP ;STOP JOB SO HE CANNOT CONTINUE
\r
1563 ;"RESOURCES" - PRINT OUT AVAILABLE DEVICES AND FREE BLOCKS ON THE DISK
\r
1569 EXTERNAL SATENT,SATXWD,WLBIT,SENTSZ,NUMBIT
\r
1571 XOR TAC,TAC ;INITIALIZE COUNTER
\r
1572 HLRE T2,SATXWD ;SET INDEX WITH NUMBER OF SAT BLOCKS IN EXISTENCE,
\r
1574 HRRI T1,SATENT ;GET SATENT ENTRY POINTER
\r
1575 LOP05: HRRZ TAC1,0(T1) ;GET VALUE
\r
1576 TRNE TAC1,WLBIT ;IS THIS SPACE WRITE PROTECTED?
\r
1577 JRST LOP06 ;YES, NO FREE BLOCKS IN THE SAT BLOCK.
\r
1578 ADDI TAC,NUMBIT ;NO, ADD THE FOLLOWING QUANTITY IN THIS SAT
\r
1579 SUB TAC,TAC1 ; RUNNING TOTAL: (TOTAL BLOCKS IN THIS SAT
\r
1580 ; BLOCK) - (BLOCKS ALREADY IN USE).
\r
1581 LOP06: ADDI T1,SENTSZ ;BUMP POINTER
\r
1582 SOJN T2,LOP05 ;DECREMENT INDEX
\r
1583 PUSHJ PDP,RADX10 ;CONVERT TO DECIMAL
\r
1584 PUSHJ PDP,INLMES ;PRINT
\r
1588 HRLZ T,DEVLST ;GET DDB POINTER
\r
1589 MOVEI AC2,0 ;SET DEVICE NAME 0 FOR FIRST COMPARE
\r
1590 LOP01: MOVE T1,DEVMOD(T) ;DEVICE CHARACTERISTICS
\r
1591 TRNN T1,ASSCON!ASSPRG ;DEVICE ASSIGNED BY CONSOLE OR PROGRAM?
\r
1592 TLNE T1,DVTTY!DVDSK ;NO, IS IT A TTY OR DSK?
\r
1593 JRST LOP02 ;YES DO NOT PRINT
\r
1595 JUMPE AC2,LOP018 ;SUPPRESS LEADING COMMA IF NO DISK
\r
1597 PUSHJ PDP,INLMES ;PRINT ,(INSTEAD OF CRLF SO WILL FIT IN 1 BUFFER)
\r
1599 LOP018: MOVS AC1,DEVNAM(T) ;GET DEVICE NAME
\r
1600 HLLZ TAC1,AC1 ;ASSUME SAME TYPE AS LAST ONE, PRINT
\r
1601 ; ONLY RH OF NAME (UNIT NUMBER)
\r
1602 CAIN AC2,0(AC1) ;IS IT REALLY THE SAME?
\r
1603 JRST LOP01A ;YES. PRINT THE UNIT NUMBER,
\r
1604 MOVS TAC1,AC1 ;NO. MUST PRINT WHOLE NAME,
\r
1605 HRRZ AC2,AC1 ; AND GET THE NEW DEVICE IN FLAG AC.
\r
1606 LOP01A: PUSHJ PDP,PRNAME ;AS BEING FREE
\r
1607 LOP02: HLRZ T,DEVSER(T) ;GET NEXT DEVICE IN CHAIN
\r
1608 JUMPN T,LOP01 ;IS THERE ONE?
\r
1609 JRST CRLF ;NO. DONE, PRINT CR. LF AND THEN POPJ
\r
1612 EXTERNAL CPOPJ,STUSER
\r
1613 ;ROUTINE TO CHECK FOR ACTIVE DEVICES
\r
1614 ;NEVER GET HERE DURING SWAP IN OU OUT
\r
1615 ;SINCE COMMAND TABLE SHOULD AHVE NOTRAN BIT ON
\r
1617 RUNCHK: CAMN ITEM,STUSER ;SYSTEM TAPE USER?
\r
1618 JRST DLYCM1 ;YES. DELY,BUT DO NOT STOP JOB
\r
1619 ACTCHK: JUMPE PROG,ACTCH1 ;DOES JOB HAVE CORE IN MEMORY
\r
1620 PUSHJ PDP,ANYACT ;YES. ARE DEVICES ACTIVE?
\r
1621 JRST DLYCM ;YES. DELAY COMMAND.
\r
1622 ACTCH1: MOVE TAC1,-1(PDP) ;RESTORE COMMAND DISPATCH ADDRESS
\r
1623 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB ADDRESS
\r
1624 MOVE T,JBTSTS(ITEM) ;RESTORE JOB STATUS
\r
1625 CONTC1: POPJ PDP,COM0
\r
1627 ;ROUTINE TO DELAY A COMMAND
\r
1629 ;DELAYS COMMAND TO BE EXECUTED WHEN JOB IN CORE MEMORY
\r
1630 ;AND CAUSE JOB TO BE SWAPPED IN(COMMAND WAIT BIT IS SET IN JBSTS)
\r
1631 ;AND POPD LEVEL UP ONE.
\r
1633 EXTERNAL TTYCM,LINSAV
\r
1635 DLYCM: PUSHJ PDP,DLYCOM ;SET COMMAND WAIT BIT IN JOB STATUS AND PUT
\r
1636 ; JOB IN COMMAND WAIT QUEUE
\r
1637 ; SO JOB IS NOT RUNNABLE ANY MORE
\r
1638 ;ROUTINE TO DELAY A COMMAND IF A SWAP OUT OR IN IS IN PROGRESS
\r
1639 ;DIFFERS FROM DLYCM IN THAT JOB IS NOT MADE TO BE SWAPPED IN
\r
1640 ;REQUIRES OR DELYAING COMMAND IF SYSTEM
\r
1641 ;TAPE USER TYPOES ^C (HALT COMMAND)
\r
1643 DLYCM1: POP PDP,TAC
\r
1651 ;SEARCH DEVICE CHAIN FOR DSK WITH COUNTS ON
\r
1652 ;CALL MOVE ITEM,JOB NO
\r
1653 ; PUSHJ PDP,STOPCK
\r
1654 ; CAN'T STOP RETURN
\r
1655 ; OK TO STOP RETURN
\r
1657 EXTERNAL DSKDDB,DSKFGS,CPOPJ1
\r
1659 STOPCK: MOVEI DEVDAT,DSKDDB
\r
1661 STOPD: LDB TAC,PJOBN
\r
1662 CAIE ITEM,(TAC) ;ASSIGNED TO THIS JOB?
\r
1664 TDNE TAC1,DEVIOS(DEVDAT) ;YES. FLAG ON?
\r
1665 JRST CPOPJ ;YES. DELAY
\r
1666 STOPC: HLRZ DEVDAT,DEVSER(DEVDAT)
\r
1669 CAMN TAC,DEVNAM(DEVDAT)
\r
1671 JRST CPOPJ1 ;OK TO STOP
\r
1674 SUBTTL COMCSS - COMMON COMMAND SUBROUTINES
\r
1676 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING
\r
1677 ; IN COMMAND LINE (SIXBIT)
\r
1678 ;CALL: MOVE TAC,BYTE POINTER TO PREVIOUS CHAR.
\r
1679 ; PUSHJ PDP, CTEXT
\r
1680 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1
\r
1685 T=BUFPNT ;TEMPORARY AC'S
\r
1689 CTEXT: PUSHJ PDP,SKIPS ;CALL HERE IF AT START OF LINE
\r
1692 CTEXT1: PUSHJ PDP,SKIPS1 ;SKIP LEAD SPACES,TABS,NULLS AND CLEAR TAC1
\r
1693 ; DO NOT RETURN IF CR WAS PERVIOUS BREAK
\r
1694 MOVE T,[POINT 6,TAC1]
\r
1698 CTEX0: ILDB TEM,TAC
\r
1701 EXTERN TAKR,GETCHAR
\r
1702 LDB TEM,TAKR(DAT) ;GET LAST CHAR.
\r
1704 CTEX0: PUSHJ PDP,GETCHR ;ROUTINE IN SCNSER TO PICK UP CHAR.
\r
1707 CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC
\r
1708 TRC TEM,40 ;CONVERT TO SIXBIT
\r
1709 TLNE T,770000 ;SIX CHARS YET?
\r
1710 IDPB TEM,T ;NO. BUILD WORD
\r
1711 JRST CTEX0 ;LOOP FOR MORE
\r
1713 ;SCAN FOR ALPHANUMERIC CHAR IN TEM
\r
1714 CTEX: CAILE TEM,"Z"+40 ;GREATER THAN LC Z?
\r
1715 JRST CTEXA ;YES. NOT SIXBIT.
\r
1716 CAIL TEM,"A"+40 ;LOWER CASE LETTER?
\r
1717 TRZ TEM,40 ;YES. MAKE UPPER CASE.
\r
1719 CAILE TEM, "Z" ;LETTERS ARE LARGER THEN NOS.
\r
1720 JRST CTEXA ;NEITHER
\r
1723 POPJ PDP, ;LETTER OR NUMBER RETURN
\r
1724 CTEXA: IFE FTTTYSER,<
\r
1725 POP PDP,T1 ;REDUCE PDP BY 1 LEVEL
\r
1726 POPJ PDP, ;AND RETURN
\r
1729 CAIN TEM,":" ;DEVICE NAME?
\r
1730 PUSHJ PDP,GETCHR ;YES. SKIP COLON
\r
1731 CAIE TEM,3 ;CONTROL C?
\r
1733 JRST TPOPJ ;NO. RETURN ONE LEVEL UP
\r
1734 CTXCNC: MOVSI TAC1,(SIXBIT /HAL/) ;MAKE PHONY HALT COMMAND
\r
1735 MOVSI TEM,12 ;WITH LF FOR TERMINATION
\r
1736 JRST TPOPJ ;AND RETURN UP A LEVEL
\r
1739 ;ROUTINE TO IGNORE LEADING SPACES, TABS, AND NULLS
\r
1741 ;DOES NOT RETURN IF PREVIOUS CHAR. OR NEXT NON-SPACING
\r
1742 ;CHAR, IS CR(IE POPS SUBROUTINE LEVEL UP 1 ON RETURN)
\r
1743 ;CALL: MOVE TAC,BYTE POINTER TO PREVIOUS BREAK CHAR.
\r
1744 ; PUSHJ PDP, SKIPS1
\r
1746 INTERNAL SKIPS1,SKIPS
\r
1750 SKIPS: MOVEI TAC1,0 ;CLEAR TAC1
\r
1751 LDB TEM,TAC ;WAS PRECEDING BREAK A CR?
\r
1753 JRST SKIPS2 ;YES. POP SUB. LEVEL UP 1
\r
1756 JUMPE TEM,SKIPSA ;NULL?
\r
1757 CAIE TEM," " ;SPACE?
\r
1761 SKIPS2: POP PDP,T ;YES. POP SUB. LEVEL UP ONE
\r
1763 IFN FTTTYSER,< EXTERNAL GETCHR,SPCHEK,BREAKB,TAKR
\r
1765 SKIPS: PUSHJ PDP,GETCHR ;GET FIRST CHAR ON LINE
\r
1766 SKIPS1: MOVEI TAC1,0 ;FOR CTEXT, DECIN
\r
1767 LDB TEM,TAKR(DAT) ;IN CASE TEM CLOBBERED
\r
1768 CAIN TEM,15 ;SKIP TO LF IF CR
\r
1769 SKIPSA: PUSHJ PDP,GETCHR ;NEXT CHARACTER
\r
1770 JUMPE TEM,SKIPS3 ;POP UP A LEVEL IF NO CHARS
\r
1771 PUSHJ PDP,SPCHEK ;SPECIAL?
\r
1773 TLNE TAC,BREAKB ;BREAK?(END OF LINE)
\r
1774 JRST SKIPS3 ;YES. POP UP RETURN
\r
1775 SKIPS2: CAIG TEM,40 ;SPACE OR CONTROL CHAR?
\r
1777 POPJ PDP,Z ;NO. RETURN
\r
1778 SKIPS3: CAIN TEM,3 ;^C?
\r
1779 JRST CTXCNC ;HANDLE IT
\r
1780 MOVEI TEM,12 ;FOR BREAK CONSISTENCY
\r
1781 JRST TPOPJ ;RETURN ONE LEVEL UP
\r
1784 ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT
\r
1785 ;CALLED FROM OCTIN, RETURNS TO SECOND LEVEL ON PDL
\r
1786 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
1787 ; PUSHJ PDP, COMERA
\r
1789 INTERNAL COMERA,COMERP
\r
1791 COMERP: POP PDP,T ;REMOVE SUB. RETURN BEFORE CALLING COMERA
\r
1792 COMERA: IFE FTTTYSER,< IBP TAC>
\r
1793 IFN FTTTYSER,< PUSHJ PDP,GETCHR> ;MOVE UP, A CH
\r
1795 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"
\r
1796 ;AND SET AS OUTPUT
\r
1797 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
1798 ; PUSHJ PDP, COMERR
\r
1805 EXTERN OUTCHS,TRESCN,TITAKR,SETBFI,TISYNC
\r
1807 MOVE T,TITAKR(DEVDAT) ;SAVE POSISITION IN SCAN
\r
1808 PUSHJ PDP,TRESCN ;BACK UP TO START OF COMMAND
\r
1809 COMERL: PUSHJ PDP,GETCHR ;GET A CHAR FROM COMMAND
\r
1810 CAMN T,TITAKR(DEVDAT) ;PASS BAD CHAR YET?
\r
1812 PUSHJ PDP,OUTCHS ;NO. TYPE CHAR.
\r
1813 JUMPN TEM,COMERL ;LOOP IF NOT OUT OF CHARACTERS
\r
1815 COMER1: PUSHJ PDP,SETBFI ;CLEAR ANY MORE TYPEIN
\r
1816 AOS TISYNC(DEVDAT) ;THIS WILL BE SOS-ED AT COMRET
\r
1817 MOVEI TEM,"?" ;APPEND ? TO ERRONEOUS WORD
\r
1822 MOVEI T,"?" ;STORE ? ON TOP OF BREAK CHAR.
\r
1825 TDZA ITEM,ITEM ;CLEAR JOB NO. AND SKIP INTO CRLF ROUT.
\r
1827 ;ROUTINE TO PRINT A COMMAND ERROR MESSAGE
\r
1828 ;SAME CALL AS CONMES
\r
1832 ; COMERR SKIPS THIS ROUT,(SEE ABOVE)
\r
1833 ERRMES: TDZA ITEM,ITEM ;CLEAR JOB NUMBER TO INDICATE ERROR
\r
1834 ; SKIP INTO CONMES ROUTINE
\r
1836 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED
\r
1837 ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT
\r
1842 ; COMERR SKIPS TO HERE(SEE ABOVE)
\r
1843 CRLF: MOVEI TAC,[ASCII /
\r
1846 ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER
\r
1847 ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER
\r
1848 ; MOVEI TAC, ADDRESS OF ASCII MESSAGE
\r
1849 ; PUSHJ PDP, CONMES
\r
1850 ; STRING TERMINATED BY NULL
\r
1851 ; CONMES DOES NOT START TTY
\r
1852 ;CONMS1 - SAME CALLING SEQUENCE A CONMES,EXCEPT LH IS BYTE POINTER
\r
1857 ; ERRMES SKIPS TO HERE
\r
1858 CONMES: HRLI TAC,440700 ;FORM ASCIZ BYTE POINTER
\r
1859 CONMS1: PUSH PDP,TAC ;SAVE BYTE POINTER
\r
1860 CON0: ILDB TEM,(PDP) ;GET NEXT CHAR.
\r
1861 JUMPE TEM,TPOPJ ;IS IT NULL?(IF YES, DO POP TAC, POPJ)
\r
1862 TYOINS: ;TAG FOR THE TYPE OUT INSTRUCTION
\r
1863 CONOUT: ;EXECUTED FROM REST OF COMCSS TO OUTPUT CHAR
\r
1866 PUSHJ PDP,OUTCHS ;NO. STORE TTY OUTPUT BUFFER
\r
1871 JRST CON0 ;KEEP GOING
\r
1873 ;ROUTINE TO PRINT INLINE ASCIZ MESSAGE
\r
1874 ;CALL: PUSHJ PDP,INLMES
\r
1875 ; ASCIZ /THE MESSAGE/
\r
1876 ;RETURN TO NEXT LOC AFTER MESSAGE
\r
1880 INLMES: POP PDP,TAC ;SETUP PRINT ADRESS FOR CONMES
\r
1882 JRST 1(TAC) ;RETURN TO NEXT LOC AFTER MESSAGE
\r
1884 ;ROUTINE TO APPEND ? TO ERROR MESSAGE
\r
1885 ;CALL PUSHJ PDP,PRQM
\r
1890 PRQM: MOVEI TEM,"?"
\r
1900 PRSPC: MOVEI TAC,[ASCIZ / /]
\r
1903 ;ROUTINE TO PRINT "TOO FEW ARGUMENTS"
\r
1904 ;CALL: MOVE DAT,BYTE POINTER
\r
1905 ; PUSHJ PDP,NOTENF
\r
1909 NOTENF: JSP TAC,ERRMES
\r
1911 ASCIZ /TOO FEW ARGUMENTS
\r
1914 ;ROUTINE TO PRINT A PERIOD
\r
1915 ;CALL: PUSHJ PDP,PRPER
\r
1919 PRPER: JSP TAC,CONMES
\r
1922 ;ROUTINE TO DEASSIGN A DEVICE
\r
1923 ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK
\r
1924 ; MOVE ITEM, JOB NUMBER
\r
1925 ; PUSHJ PDP, DEASG
\r
1926 ; ERROR NOT PREVIOUSLY ASSIGNED
\r
1927 ; OK RETURN WITH DEVICE DEASSIGNED
\r
1930 EXTERNAL PJOBN,CPOPJ1,IPOPJ
\r
1932 DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB?
\r
1934 POPJ PDP, ;NO, RETURN
\r
1935 PUSH PDP,ITEM ;SAVE JOB NUMBER
\r
1936 MOVSI TAC1,DVDIRI ;CLEAR DIRECTORY IN CORE BIT
\r
1937 ANDCAB TAC1,DEVMOD(DEVDAT) ;SET DEVICE CHARACTERISTICS FOR TEST
\r
1939 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME
\r
1941 TRNE TAC1,ASSCON ;IS DEVICE ASSIGNED BY CONSOLE?
\r
1942 AOS -1(PDP) ;YES, DO OK RETURN
\r
1945 PUSHJ PDP,ASGHGH ;IF DTA OR MTA, CLEAR ANY HIGH SEGMENT NAMES
\r
1946 ; FROM THIS DEVICE SO NO NEW SHARING
\r
1947 ; DEVMOD SETUP IN TAC1 ON CALL
\r
1949 MOVEI TAC1,ASSCON ;SETUP ASSIGNED BE CONSOLE BIT FOR RELEASE
\r
1950 PUSHJ PDP,RELEA6 ;CLEAR JOB NO. IN DDB IF DDB NOT NEEDED
\r
1951 JRST IPOPJ ;RESTORE JOB NUMBER AND RETURN
\r
1953 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY
\r
1954 ;CALL: MOVE ITEM, JOB NUMBER
\r
1955 ; MOVE DEVDAT,ADR. OF DEVICE NOT TO BE DEASSIGNED
\r
1956 ; PUSHJ PDP, DEASTY
\r
1958 INTERNAL DEASAL,DEASTY
\r
1962 DEASAL: PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS
\r
1963 HLRZ DEVDAT,DEVLST ;SEARCH ALL DDB'S
\r
1964 DEA1: CAIE DEVDAT,@(PDP) ;IS THIS DEVICE NOT TO BE DEASSIGNED?
\r
1965 PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT
\r
1966 JFCL ;IGNORE IF CAN'T
\r
1967 HLRZ DEVDAT, DEVSER(DEVDAT)
\r
1968 JUMPN DEVDAT, DEA1
\r
1969 POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS
\r
1972 ;ROUTINE TO REA CONSOLE AND CONVERT ANY RADIX NUMBER
\r
1973 ; CALL: MOVE TAC1, DESIRED RADIX
\r
1974 ; MOVE TAC, BYTE POINTER TO FIRST CHARACTER
\r
1975 ; PUSHJ PDP, ANYRIN
\r
1976 ; NO ARG. TYPED RETURN, TAC1=0
\r
1977 ; ILLEGAL CHARACTER RETURN
\r
1978 ; NORMAL EXIT TAC TAC1 CONTAINS NUMBER
\r
1979 ;SCAN STOPS ON FIRST OR,DASH,SPACE,OR TAB OR ILLEGAL CHAR.
\r
1980 ;SKIPS LEADING SPACES AND TABS
\r
1982 INTERNAL OCTIN,OCTIN1,DECIN,DECIN1
\r
1983 EXTERNAL CPOPJ1,CPOPJ2
\r
1985 C=BUFPNT ;CHARACTER AC
\r
1986 R=BUFWRD ;RADIX AC
\r
1989 DECIN: MOVEI R,12 ;DECIMAL INPUT
\r
1993 OCTIN: MOVEI R,10 ;OCTAL INPUT
\r
1994 ANYRIN: PUSHJ PDP,SKIPS1 ;SKIP LEADING SPACES, TABS, NULLS
\r
1995 ; DO NOT RETURN IF CR WAS PREVIOUS BREAK
\r
1997 IFE FTTTYSER,< LDB TEM,TAC>
\r
1998 OCT0: CAIGE TEM,175 ;ALTMODES(175 OR 176)?
\r
1999 CAIN TEM,"[" ;NO. LEFT BRACKET(SO SPACE NOT REQ
\r
2000 ; BEFORE [P,P] IN ATT AND GET COMMANDS.
\r
2001 JRST CPOPJ2 ;YES. SKIP RETURN
\r
2002 CAIE TEM,"-" ;DASH?
\r
2003 CAIG TEM,400 ;SPACE OR CONTROL CHAR?
\r
2004 JRST CPOPJ2 ;YES, ONLY LEGAL TERMINATORS
\r
2005 CAIE TEM,"," ;COMMA?
\r
2006 CAIN TEM,"]" ;RIGHT BRACKET?
\r
2009 JUMPL TEM,CPOPJ1 ;ERROR IF NEG.,REMOVE SUB. RETURN AND PRINT
\r
2010 CAML TEM, R ;OR .GE. RADIX
\r
2011 JRST CPOPJ1 ;ERROR, GREATER OR EQUAL TO RADIX
\r
2014 IFE FTTTYSER,< ILDB TEM,TAC ;NEXT CHAR>
\r
2015 IFN FTTTYSER,< PUSHJ PDP,GETCHR> ;NEXT CHAR
\r
2020 ;GET PROJECT-PROGRAMMER NUMBERS
\r
2021 ;CALL: MOVE TAC,INPUT BYTE POINTER
\r
2022 ; PUSHJ PDP,PJPGNO
\r
2024 ;(AC2)LH _ PROJECT NUMBER
\r
2025 ;(AC2)RH _ PROGRAMMER NUMBER
\r
2026 ;(AC2) = 0 IF NO [ ]'S TYPED
\r
2027 ;THE TERMINAL ] IS OPTIONAL
\r
2030 PJPGNO: SKIPA TAC1,TAC ;SAVE INPUT BYTE POINTER IN CASE NO
\r
2031 ; [ ]'S WERE TYPED IN.
\r
2032 PP0: IBP TAC ;GET NEXT CHARACTER (2ND TIME THRU LOOP)
\r
2033 LDB TEM,TAC ;GET CHAR WHICH STOPED PREVIOUS FIELD SCAN
\r
2034 ; (OR NEXT CHAR ON 2ND TIME THRU LOOP)
\r
2038 PP0: PUSHJ PDP,SKIPS1
\r
2041 CAIN TEM,"[" ;IS IT A "[" ?
\r
2042 JRST PP1 ;YES, GET PROJECT-PROGRAMMER NUMBERS FROM INSIDE.
\r
2043 CAIE TEM," " ;NO, IS IT A SPACE ?
\r
2044 CAIN TEM,11 ; OR A TAB?
\r
2045 JRST PP0 ;YES, KEEP LOOKING FOR "[".
\r
2046 MOVEI AC2,0 ;NEITHER SPACE NOT TAB, THUS RETURN A 0 MEANING
\r
2047 ; NO PROJECT-PROGRAMMER NUMBER ENCOUNTERED.
\r
2048 IFE FTTTYSER,< MOVEM TAC1,TAC ;RESTORE ORIGINAL BYTE POINTER.>
\r
2049 POPJ PDP, ;EXIT.......
\r
2052 IFN FTTTYSER,< PUSHJ PDP,SKIPS>
\r
2053 PUSHJ PDP,OCTIN ;GET FIRST ARG.-PROJ. NO.
\r
2054 JRST COMERP ;NO ARG. GIVEN
\r
2055 JRST COMERP ;ILLEGAL DECIMAL CHARACTER GIVEN
\r
2056 HRL AC2,TAC1 ;ENTER
\r
2057 IFN FTTTYSER,< CAIE TEM,","
\r
2060 PUSHJ PDP,OCTIN ;GET SECOND ARG.-PROG. NO.
\r
2063 HRR AC2,TAC1 ;ENTER
\r
2064 PUSHJ PDP,SKIPS1 ;SKIP BLANKS
\r
2065 CAIN TEM,"]" ;IS USUAL ENDING A "]"?
\r
2066 IFE FTTTYSER,<IBP TAC> ;YES, SKIP IT
\r
2067 IFN FTTTYSER,<PUSHJ PDP,GETCHR> ;YES, SKIP IT SO FINAL ] IS OPTIONAL
\r
2068 POPJ PDP, ;RETURN RO CALL
\r
2071 ;ROUTINE TO PRINT TIME AS HOURS,MINUTES,SECONDS, AND HUNDRETHS
\r
2072 ;FORMAT IS HHMM:SS.HH
\r
2073 ;CALL: MOVE TAC,TIME IN JIFFIES(60THS,50THS OR MILLISECONDS)
\r
2074 ; MOVE DAT,OUTPUT TEXT BYTE POINTER
\r
2075 ; PUSHJ PDP,PRTIME
\r
2077 ;SCALEING IS DONE USING THE FOLLOWING GLOBAL SYMBOLS DEFINED
\r
2078 ;ON THE CONFIGURATION TAPE (IOINI1)
\r
2079 ;THUS ANY INSTALLATION MAY HAVE ANY RATE CLOCK
\r
2081 EXTERNAL JIFMIN,JIFSEC,JIFSC2
\r
2083 ;JIFMIN=NO. OF JIFFIES(CLOCK TICKS) PER MINUTE
\r
2084 ;JIFSEC=NO. OF JIRFIES PER SECOND
\r
2085 ;JIFSC2=1/2*JIFSEC(USED FOR ROUNDING)
\r
2089 PRTIME: IDIVI TAC,JIFMIN ;FORM MINUTES
\r
2090 PUSH PDP,TAC1 ;SAVE REMAINDER IN JIFFIES
\r
2091 JUMPE TAC,PR1 ;SUPRESS 0 HOURS IN MINUTES
\r
2092 IDIVI TAC,^D60 ;HOURS, MINUTES IN TAC,TAC1
\r
2093 JUMPE TAC,PR0 ;SUPPRES 0 HOURS
\r
2095 PUSHJ PDP,INLMES ;PRINT "HH:" OR "H:"
\r
2097 PR0: MOVE TAC,TAC1 ;GET MINUTES
\r
2098 PUSHJ PDP,PRT2 ;PRINT "MM:"
\r
2101 PR1: POP PDP,TAC ;RESTORE SECONDS(IN JIFFIES)
\r
2102 IDIVI TAC,JIFSEC ;JIFFIES PER SECOND
\r
2103 PUSHJ PDP,RADX10 ;PRINT SECONDS
\r
2104 PUSHJ PDP,PRPER ;PRINT PERIOD
\r
2105 MOVE TAC,TAC1 ;NO OF JIFFIES(HUNDRETHS)
\r
2106 IMULI TAC,^D100 ;CONVERT TO HUNDRETHS
\r
2108 CAIL TAC1,JIFSC2 ;ROUND IF GREATER THEN HALF
\r
2110 JRST PRT2LF ;PRINT
\r
2112 PRTIM1: IDIVI TAC,JIFMIN ;
\r
2113 IDIVI TAC,^D60 ;HOURS,MINUTES IN TAC,TAC1
\r
2115 PUSHJ PDP,INLMES ;PRINT "HH:"
\r
2118 PRT2LF: PUSHJ PDP,PRT2 ;PRINT "MM
\r
2121 PRT2: MOVEI TEM,"0"
\r
2123 XCT CONOUT ;PUT LEADING 0 IF LESS THEN 10
\r
2124 JRST RADX10 ;PRINT REST OF NUMBER
\r
2126 ;ROUTINE TO PRINT SIZE OF LOGICAL SEGMENT (LOW OR HIGH)
\r
2127 ;CALL: MOVE ITEM, HIGH OR LOW SEG NUMBER
\r
2128 ; PUSHJ PDP,PRT SEG
\r
2130 ;CALLED AT CLOCK LEVEL FROM CORE (UUO ARG) COMMAND AND SEGCON
\r
2135 PRTSEG: PUSHJ PDP,SEGSIZ ;TAC1=SIZE OF HIGH OR LOW SEG
\r
2136 MOVE TAC,TAC1 ;RADX10 WANT DEC. NO. IN TAC
\r
2137 JRST RADX10 ;PRINT DECIMAL
\r
2139 ;ROUTINE TO RETURN SIZE OF HIGH OR LOW SEG
\r
2140 ;CALL: MOVE ITEM,LOW OR HIGH SEG NUMBER
\r
2141 ; PUSHJ PDP,SEGSIZ
\r
2142 ; RETURN WITH SIZE IN K IN TAC1
\r
2150 LDB TAC1,IMGIN ;SIZE WHEN NEXT SWAPPED IN(IN K)
\r
2151 JUMPN TAC1,CPOPJ ;0 MEANS NOT SWAPPED OUT
\r
2153 HLRZ TAC1,JBTADR(ITEM) ;SIZE-1 LOW LOW OR HIGH SEG IN WORDS IN CORE
\r
2154 JUMPE TAC1,CPOPJ ;IS IT IN CORE?
\r
2155 LSH TAC1,-12 ;YES, CONVERT TO #K-1
\r
2156 AOJA TAC1,CPOPJ ;ADD 1 AND RETURN NUMBER OF K
\r
2158 ;ROUTINE TO ASSIGN A MINIMAL CORE AREA(140 WORDS)
\r
2159 ;CALLED FROM CORE,KJOB, AND RUN COMMANDS
\r
2160 ;THIS ROUTINE PRESERVES INPUT BYTE POINTER IN TAC
\r
2161 ;CALL: PUSHJ PDP,GETMIN
\r
2162 ; RETURN PROG=0 IF UNSUCCESSFUL OR CORE ASSIGNED ON DISK
\r
2164 EXTERN JOBDA,TPOPJ
\r
2168 PUSH PDP,TAC ;SAVE INPUT BYTE POINTER TO COMMAND
\r
2171 PUSH PDP,DEVDAT ;SAVE TTY DDB ADR
\r
2173 PUSH PDP,TAC1 ;SAVE DEVICE NAME(GET)
\r
2174 PUSH PDP,IOS ;SAVE DISPATCH ADDRESS(ANYACT USES IOS)
\r
2178 PUSHJ PDP,KILHGH ;KILL HIGH SEG
\r
2180 MOVEI TAC,JOBDA ;LENGTH OF JOBDATA AREA
\r
2181 PUSHJ PDP,CORE0 ;ASSIGN 140 WORDS ON DISK OR MEMORY
\r
2182 JFCL ;IGNORE IF CANT(PROG=0)
\r
2184 POP PDP,TAC1 ;RESTORE PUSHED ACS
\r
2186 POP PDP,DEVDAT ;RESTORE TTY DDB ADR
\r
2187 POPJ PDP, ;TAC NOT USER BY FULL DUPLEX SCNSER
\r
2190 JRST TPOPJ ;RESTORE TAC AND RETURN
\r
2193 ;ROUTINE TO GET 1 WORD FORM USER ARE WHICH CAN BE IN LOW OR HIGH SEG
\r
2194 ;CALL: MOVE PROG,[XWD PROT,RELOC FOR LOW SEG]
\r
2195 ; MOVE ITEM,JOB NUMBER
\r
2196 ; HRLI UUO,PROG ;FOR RELOCATION
\r
2197 ; HRR UUO,USER ADDRESS(IE BEFORE RELOCATION)
\r
2198 ; PUSHJ PDP,GETWRD
\r
2199 ; ERROR RETURN ADDRESS OUT OF BOUNDS
\r
2200 ; OK RETURN, CONTENTS IN AC TAC
\r
2201 ;CAN BE CALLED AT CLOCK OR UUO LEVEL
\r
2202 ;CALLED FROM E COMMAND,INIT,OPEN AND CALL UUOS
\r
2207 GETWRD: HLRZ TAC,PROG ;LARGEST REL LOC IN LOW SEG
\r
2208 CAIGE TAC,(UUO) ;IS ADR. IN LOW SEG?
\r
2211 JRST HGHWRD ;NO, CHECK IF IN HIGH SEG(ERROR RET IF NO)
\r
2214 POPJ PDP, ;NO, ERROR RETURN
\r
2216 MOVE TAC,@UUO ;YES, GET IT FROM LOW SEG
\r
2217 JRST CPOPJ1 ;AND SKIP RETURN
\r
2219 SUBTTL SAVGET - SAVE,GET,R,RUN COMMANDS AND RUN,GETSEG UUOS
\r
2221 ;SAVGET LOWER CORE LOCATIONS USED FOR UUOS TO MONITOR
\r
2222 ;USED IN SAVGET IN APRSER AND SAVGET IN SEGCON
\r
2223 ;THESE LOCATIONS ARE DEFINED TO BE IN THE USERS UUO ACS
\r
2225 ;FOR LOOKUP,ENTER UUOS:
\r
2226 XP SGANAM,0 ;FILE NAME
\r
2227 XP SGAEXT,SGANAM+1 ;FILE EXTENSION
\r
2228 XP SGADAT,SGANAM+2 ;FILE CREATION DATE+TIME
\r
2229 XP SGALEN,SGANAM+3 ;LN=-LENGTH,RH=FIRST LOC-1 DUMPED
\r
2230 ; OR PROJECT-PROGRAMMER NUMBER(DISK)
\r
2231 XP SGAEND,SGALEN+1 ;LAST WORD OF DUMP COMMAND LIST=0(SAVE AND GET)
\r
2232 XP SGAREN,SGAEND ; ALSO FIRST WORD FOR RENAME USED AS DELETE
\r
2233 XP SGAPPN,SGAREN+3 ;FOURTH WORD-PLACE TO SAVE PROJECT-PROGRAMEMR
\r
2234 ; NUMBER USER TYPED
\r
2237 XP SGAMOD,10 ;IOS MODE WORD FOR OPEN UUO
\r
2238 XP SGADEV,SGAMOD+1 ;DEVICE NAME
\r
2239 XP SGAHED,SGAMOD+2 ;INPUT-OUTPUT BUFFER HEADER ADDRESSES=0
\r
2241 ;MISC. DATA LOCATIONS:
\r
2243 XP SGADMP,13 ;DUMP COMMAND IOWD
\r
2244 XP SGACOR,14 ;AC FOR CORE UUO'S(HIGHEST USER LOC DESIRED)
\r
2245 XP SGANEW,15 ;NEW CORE ASSIGNMENT AS SPECIFIED BY THIRD ARG
\r
2246 XP SGAHGH,16 ;LH=EXT TO USE FOR SAVING HIGH SEG
\r
2247 ; RH=EXT TO DELETE(IE SHRHGH OR HGHSHR)
\r
2248 XP SGALOW,17 ;LH=EXT WHICH USER TYPED FOR SAVE OR GET COMMAND
\r
2249 ; OR .SAV IF HE DIDN'T TYPE AN ARG WITH LEADING PERIOD
\r
2252 ;ROUTINE TO SCAN COMMAND STRING ARGUMENTS FOR SAVE,GET,RUN AND R
\r
2253 ;COMAMNDS AND STORE THEM IN JOB DATA AREA WHICH MUST BE IN CORE
\r
2254 ;WHEN SGSET IS CALLED FROM COMMAND DECODER
\r
2255 ;CALL: MOVE TAC,INPUT BYTE POINTER
\r
2256 ; MOVE TAC1,SIXBIT DEVICE NAME
\r
2257 ; MOVE DAT,OUTPUT BYTE POINTER
\r
2258 ; MOVE IOS,ADR. OF MONITOR JOB(SAVJOB,GETJOB,RUNJOB)
\r
2259 ; MOVE PROG, ADR. OF JOB AREA
\r
2264 INTERNAL FTLOGIN,FT2REL,FTDISK
\r
2265 EXTERNAL JOBCOR,JBTPRG
\r
2267 SGSET: JUMPE TAC1,NOTENF ;NOT ENOUGH ARE IF NO DEVICE NAME
\r
2268 MOVEM TAC1,SGADEV(PROG) ;STORE DEVICE NAME
\r
2269 SKIPN TAC1,JBTPRG(ITEM) ;GET AUTOMATIC FILENAME, OR
\r
2270 PUSHJ PDP, CTEXT1 ;GET FILE NAME FROM COMMAND STRING
\r
2271 JUMPE TAC1,NOTENF ;THERE MUST BE A FILE NAME
\r
2272 MOVEM TAC1,SGANAM(PROG) ;STORE FILE NAME
\r
2273 MOVEM TAC1,JBTPRG(ITEM) ;SAVE FILE NAME FOR SYSTAT COMMAND
\r
2274 MOVEI TAC1,0 ;ASSUME USER DID NOT SPECIFY AN EXTENSION
\r
2275 ; 0 WILL BE TURNED INTO SAV OR DMP
\r
2276 IFE FTTTYSER,< LDB TEM,TAC>
\r
2277 CAIN TEM,"." ;IS AN EXTENSION SPECIFIED?
\r
2278 PUSHJ PDP,CTEXT ;YES. GET EXTENSION
\r
2279 HLLZM TAC1,SGAEXT(PROG) ;STORE IT FOR LOOKUP
\r
2281 EXTERN SETEXT ;ALSO SAVE IT AGAIN IN SGALOW FOR LOW SEG
\r
2283 PUSHJ PDP,SETEXT ;SET HIGH EXTENSION(SGAHIGH) TO .SHR IF SSAVE OR GET
\r
2284 ; .HGH IF SAVE(LH IOS=NSRBIT).
\r
2286 SETZM SGADAT(PROG) ;SET DATE(E+2) TO 0, SO MONITOR WILL USE TODAYS
\r
2288 PUSHJ PDP,PJPGNO ;GET PROJ, PROG. NO.
\r
2289 MOVEM AC2,SGAPPN(PROG) ;STORE 0 IF NO []'S TYPED BY USER
\r
2291 PUSHJ PDP,DECIN1 ;AMOUNT OF CORE (OPTIONAL THIRD ARG.)
\r
2292 JRST SGSET1 ;DOES NOT RETURN IF ERROR. RETURN HERE IF NO ARG.
\r
2293 JRST COMERA ;ILLEGAL CHARACTER
\r
2294 LSH TAC,12 ;CONVERT TO HIGHEST REL. LOC.
\r
2296 SGSET1: MOVEM TAC1,SGANEW(PROG) ;STORE FOR RUN AND SAVE
\r
2297 HRRZ TAC1,IOS ;SCHEDULE MONITOR JOB
\r
2298 ; GUARRANTEE LH OF PC WORD IS 0, SINCE IT WILL
\r
2299 ; BE ADDED TO STARTING ADDRESS(IF RUN COM)
\r
2300 JRST MSTART ;START JOB WITH PC IN MONITOR MODE
\r
2302 ;ROUTINE TO PICKUP ARGUMENTS FOR RUN AND GETSET UUOS
\r
2303 ;THIS ROUTINE DOES SAME THING AS SGSET, EXCEPT THAT ARGUMENTS ARE
\r
2304 ;OBTAINED FROM USER UUO ARGUMENTS INSTEAD OF FROM CONSOLE COMMAND
\r
2305 ;THE USERS ARG ARE MOVED TO USER ACS(SGA...), THEREBY CLOBBERING HIS AC$S
\r
2306 ;USER AC FIELD AND START PC OFFSET(RUN UUO) ARE SAVED ON PD LIST AT JOBPD3
\r
2307 ;THEN LOWER CORE IS SET UP(SG2 CALLED) RESET IS NOT DONE (FOR GETSEGUUO)
\r
2308 ;JBTPRG NOT SET FOR LOW SET, SINCE GETSEGUUO SHOULD NOT
\r
2309 ;CALL: MOVE TAC,CONTENTS OF USER AC(ADR. OF 3 WORD ARG LIST)
\r
2310 ; MOVE PROG,JOB RELOCATION
\r
2311 ; PUSHJ PDP,GETARG
\r
2315 EXTERN JBTPROG,JOBCORE,PUUOAC
\r
2317 GETARG: HRR UUO,TAC ;MOVE ADR. OF ARG LIST TO UUO
\r
2318 EXCH TAC,(PDP) ;AND PUT ON PD LIST
\r
2319 PUSH PDP,TAC ;MOVE RETURN PC UP ONE IN PD LIST
\r
2320 LDB TAC,PUUOAC ;USER AC FIELD IN RUN OF GETSEG UUO
\r
2322 HRRM TAC,-1(PDP) ;SAVE IN CASE OF ERROR RETURN
\r
2323 PUSHJ PDP,GETWDU ;GET FIRST ARG FROM USER AREA
\r
2324 MOVEM TAC,SGADEV(PROG) ;STORE DEVICE NAME
\r
2325 PUSHJ PDP,GETWD1 ;GET NEXT ARG FROM USER ARREA
\r
2326 MOVEM TAC,SGANAM(PROG) ;STORE FILE NAME FOR LOOKUP (DO NOT STORE FOR LOWSEG)
\r
2327 PUSHJ PDP,GETWD1 ;GET THIRD ARG(EXTENSION WORD E+1)
\r
2328 MOVE TAC1,TAC ;PUT ARG IN TAC1, SO SMAE AS SGSET RETURN FROM CTEXT
\r
2329 MOVEM TAC1,SGAEXT(PROG) ;STORE EXTENSION AND RH FROM USER
\r
2332 PUSHJ PDP,SETEX1 ;SAVE EXT AGAIN IN SGALOW
\r
2333 ; SETUP EXT FOR HIGH SEG(SGAHGH="SHR")
\r
2334 ; SETUP EXTENSION FOR LOW SEG(SGALOW="SAV")
\r
2336 PUSHJ PDP,GETWD1 ;GET FOURTH ARG(DATE WORD)
\r
2337 MOVEM TAC,SGADAT(PROG)
\r
2338 PUSHJ PDP,GETWD1 ;GET FIFTH USER ARG FROM USER AREA
\r
2339 MOVEM TAC,SGAPPN(PROG) ;STORE PROJECT,PROGRAMMER NO. OR 0
\r
2340 PUSHJ PDP,GETWD1 ;SIX ARG FROM USER
\r
2341 HRRZM TAC,SGANEW(PROG) ;STORE CORE ARG OR 0(HIGHEST LOC DESIRED)
\r
2343 JRST SG2A ;GO SET UP LOWER CORE AND RETURN
\r
2344 ; DO NOT DO A RESET
\r
2346 ;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE
\r
2347 ;THIS JOB RUNS IN EXEC MODE AND CALLS IO ROUTINES USING REGULAR UUOS
\r
2348 ;NO ATTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBDP, OR AC'S
\r
2349 ;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA
\r
2350 ;AFTER IT HAS BEEN SAVED IS TO START EXECUTIUON OVER AT THE STARTING
\r
2353 INTERNAL SAVJOB,SAVERR
\r
2354 EXTERNAL JOB41,JOBS41,JOBDDT,JOBSDD,JOBSV
\r
2356 SAVJOB: JSP TAC1,SG1 ;SET UP ACS PROG,PDP,JDAT,ITEM.
\r
2358 HLRE TAC1,SGADMP(PROG) ;-NO. OF WORDS TO WRITE
\r
2359 PUSHJ PDP,CKIOWD ;CHECK USER'S CORE ARG(IF ANY) WITH AMOUNT
\r
2360 ; RETURN ONLY IF 0 OR NOT SMALLER
\r
2361 HRRM TAC,JOBCOR(PROG) ;STORE MAX OF SIZE OF FILE OR CORE ARG
\r
2362 ; FOR ASSIGNING INITIAL CORE WHEN FILE GOTTEN
\r
2365 PUSHJ PDP,SAVHGH ;INIT DEV,SAVE HIGH SEG, IF ANY, RETURN IF OK
\r
2366 JRST SAVFIN ;HIGH SAVED, BUT NO DATA IN LOW SEG, SO DO
\r
2367 ; NOT WRITE LOW FILE
\r
2368 ; SKIP RETURN IF LOW SEG TO BE WRITTEN
\r
2370 ; SGALEN, AND SGAEXT RESTORED
\r
2371 SAVJB1: OPEN 0,SGAMOD ;RE INIT DEVICE, SO UGETF WILL SET FIRST FREE
\r
2372 ; BLOCK BECAUSE NO LOOKUP OR ENTER DONE
\r
2373 JRST SGERRA ;DEVICE NOT AVAILABLE
\r
2374 UGETF 0,SGAHED ;GET FIRST FREE BLOCK(MEANINGFUL ONLY IF DTA)
\r
2375 ; CAUSE ENTER TO ASSIGN FIRST LOBCK OF FILE
\r
2376 ; AS LOWEST FREE BLOCK SO TENDMP CAN READ
\r
2377 ENTER 0,SGANAM ;ENTER FILE NAME IN DIRECTORY
\r
2378 JRST SAVERR ;DIRECTORY FULL OR PROTECTION FAILURE
\r
2379 MOVE TAC,JOB41(JDAT) ;SAVE USER UUO HANDLING JSR
\r
2380 MOVEM TAC,JOBS41(JDAT) ;IN UPPER PART OF JOB DATA AREA
\r
2382 MOVE TAC,JOBDDT(JDAT) ;SAVE DDT STARTING ADDRESS HIGHER UP IN JOB DATA AREA
\r
2383 MOVEM TAC,JOBSDD(JDAT) ;SO COMPRESS ALWAYS MOVES CODE DOWN
\r
2384 HRROS USRHCU ;FLAG THAT SAVE GET IS UNDER WAY
\r
2385 ; SO THAT JOBHRL WILL NOT BE MODIFIED BY SETHGH RUOTINE
\r
2386 ; TO USER'S HIGH SEG RELOCATION INFO. SINCE
\r
2387 ; IT WILL CONTAIN COMPRESSION IOWD.
\r
2388 ; COMPRESSION WILL ALWAYS MOVE DOWN
\r
2389 HRRZ TEM,JOBSA(JDAT) ;SAV START ADDRESS FOR 10DMP
\r
2390 MOVEI TAC,JOBSV(PROG) ;POINT TO 1ST DATA WORD
\r
2391 MOVE TAC1,[XWD PROG,JOBSDD] ;IT STARTS AT JOBSDD
\r
2392 HLRE ITEM,SGADMP(PROG) ;IOWD FOR THIS SIZE CORE(-LENGTH TO WRITE)
\r
2393 MOVNS ITEM ;POSITIVE LENGTH
\r
2394 ADDI ITEM,JOBSVM ;ADD IN FIRST LOC-1 TO WRITE=HIGHEST LOC TO WRITE
\r
2395 ; TO MAKE END TEST
\r
2396 HRLI ITEM,PROG ;USE PROG FOR RELOCATION
\r
2397 CMPLP1: MOVEM TAC,DAT ;SAVE 1ST LOC FOR IOWD
\r
2398 CAMLE TAC1,ITEM ;SEARCH FOR 1ST NON-0 WORD
\r
2399 AOJA TAC,CMPTHR ;THROUGH
\r
2401 SKIPN @TAC1 ;THIS A DATA WORD?
\r
2402 AOJA TAC1,.-3 ;NO, KEEP LOOKING
\r
2403 MOVNI AC1,1 ;YES, AC1 WILL BE AN IOWD
\r
2404 HRLI AC1,-1(TAC1) ;1ST LOCATION - 1
\r
2405 CMPLP2: PUSH TAC,@TAC1 ;SAVE A DATA WORD
\r
2407 CAMGE TAC1,ITEM ;AT TOP?
\r
2408 SKIPN @TAC1 ;NO. NEXT WORD NON-0?
\r
2409 JRST .+2 ;NO. THROUGH THIS BLOCK
\r
2410 SOJA AC1,CMPLP2 ;COUNT THE WORD AND CHECK NEXT
\r
2411 MOVSM AC1,(DAT) ;SAVE IOWD IN FRONT OF BLOCK
\r
2412 AOJA TAC,CMPLP1 ;LOOK FOR NEXT NON-0 BLOCK
\r
2413 CMPTHR: HRLI TEM,254000 ;SET A JRST C(JOBSA)
\r
2414 MOVEM TEM,-1(TAC) ;AT END OF FILE
\r
2415 SUBI TAC,JOBSV(JDAT) ;COMPUTE WORD COUNT
\r
2416 MOVNS TAC ;MAKE AN IOWD
\r
2417 HRL TAC,SGADMP(PROG) ;START ADDRESS
\r
2418 MOVSM TAC,SGALEN(PROG) ;IOWD FOR THE OUTPUT UUO
\r
2419 MOVEI TAC,-2 ;FLAG THAT CORE HAS BEEN COMPRESSED
\r
2420 HRLM TAC,USRHCU ;KEEP LH NEG. COMMAND DECODER WILL EXPAND
\r
2421 ; CORE ON START ,ODT,SAVE, REENTER,SSAVE IN CASE
\r
2422 ; THIS SAE IO DOES NOT GO TO COMPLETION. (CONTROL C
\r
2423 ; OR DEVICE FULL, SO THAT CORE DOES NOT GET EXPANDED
\r
2425 PUSHJ PDP,SGDOA ;DO OUTPUT,RELEASE,FIND TTY
\r
2426 OUTPUT 0,SGALEN ;OUTPUT UUO EXECUTED BY SGDO
\r
2427 ; RETURN HERE ONLY IF NO ERRORS
\r
2428 SAVFIN: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY
\r
2429 JSP TAC,PHOLD ;PRINT MESSAGE AND STOP JOB
\r
2431 SAVERR: MOVEI TAC,PRTERR ;ERROR CORE IN CASE RUN UUO(PROTECTION ERROR)
\r
2432 ; CHANGE TO DISK ERROR CODE IF DEV IS DSK
\r
2433 PUSHJ PDP,SGRELL ;CHANGE TO DISK ENTER ERROR CODE IF DSK
\r
2434 ; RELEASE DEVICE AND RETURN TO USER(IF RUN UUO)
\r
2435 ; OR FIND TTY=PRINT ?CRLF
\r
2436 JSP TAC,PHOLD ;PRINT MESSAGE AND STOP JOB
\r
2437 ASCIZ /DIRECTORY FULL/
\r
2439 ;THIS JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE
\r
2440 ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY
\r
2441 ;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR AC'S
\r
2442 ;JOBPC IS SET TO STARTING ADDRESS OF JOB
\r
2443 ;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN
\r
2449 GETJOB: JSP TAC1,SG1 ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)
\r
2450 PUSHJ PDP,GETJB ;GET THE JOB
\r
2451 JSP TAC,PHOLD ;RETURN ONLY IF EVERYTHING OK
\r
2454 ;THIS JOB GETS A JOB AREA FROM A RETRIEVAL DEVICE AND STARTS IT UP
\r
2456 ;JOB HAS JUST A JOB DATA AREA ASSIGNED WHEN CONTROL GETS HERE
\r
2457 ;THIS MONITOR JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE
\r
2458 ;ASSIGNS CORE AND START
\r
2462 RUNJOB: JSP TAC1,SG1 ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)
\r
2463 JRST URUN1 ;LH PF PC WORD=0(MSTART) SO LH OF TAC1=0 AFTER JSP
\r
2464 ; PUT TAC1 AS FIRST ITEM ON PD LIST(JOBPN1)
\r
2465 ; LH USED BY SGRELE ON ERROR TO SEE IF FROM USER
\r
2466 ; AND LH ADDED TO START PC(JOBSA) BY URUN
\r
2469 ;CALL: MOVE AC,[XWD N,D]
\r
2470 ; CALL AC,[SIXBIT /RUN/]
\r
2471 ; ERROR RETURN ;UNLESS LH=HALT(PRINT CONSOLE MESS, IF YES)
\r
2472 ; 1K OK, TRANSFER TO C(JOBSA)+N FOR NEW PROGRAM
\r
2473 ; USERS ACS CLOBBERED SO CANNOT PASS DATA TO NEW PROGRAM
\r
2475 ;WHERE: D/ DEVICE NAME
\r
2477 ; D+2/ FILE EXT OR 0 (LH SIXBIT)
\r
2479 ; D+4/ PROJECT,PROGRAMMER NO OR 0(CURRENT UFD OR DTA,MTA)
\r
2480 ; D+5/ HIGHEST LOC DESIRED(OR 0) ANALOGOUS TO RUN COMMAND
\r
2481 ; LH IS IGNORED(RATHER THAN ASSIGNING CORE TO HIGH SEG)
\r
2486 URUN: PUSHJ PDP,RESET ;RELEASE DEVICES
\r
2487 ; WARNING! THIS GOES VERY DEEP IN
\r
2488 ; PUSHDOWN, SEE MOD 518
\r
2489 ; (AC UUO PRESERVED IN RESET)
\r
2490 MOVE TAC,@UUO ;RESTORE CONTENTS OF USERS'S CALLING AC
\r
2491 PUSHJ PDP,GETARG ;GET 6 ARGS FROM USER AND STORE
\r
2492 ; SAVE STARTING ADDRESS INCREMENT(LH OF TAC)
\r
2493 ; AND USER AC NUMBER(IN CASE OF ERROR RETURN)
\r
2494 ; SETUP ACS,DEVDAT TO DDB
\r
2495 MOVE TAC,SGANAM(PROG) ;STORE FILE NAME FOR LOW SEG
\r
2496 MOVEM TAC,JBTPRG(ITEM) ;FOR SYSTAT
\r
2497 URUN1: PUSHJ PDP,GETJB ;GET BOTH LOW AND HIGH SEGMENTS
\r
2498 HLRZ TAC1,(PDP) ;GET STARTING ADDRESS INCREMENT(0 IF RUN COM)
\r
2502 CAILE TAC1,1 ;IS START INCREMENT 0 OR 1?
\r
2503 PUSHJ PDP,CHKMED ;NO, CHECK TO SEE IF THIS IS SHARABLE SEG
\r
2504 ; AND IF YES, SET MEDDLE BIT FOR THIS USER
\r
2505 ; SO UWP CANNOT BE TURNED OFF AND CORE FOR HIGH SEG
\r
2506 ; CANNOT BE INCREASED OR DECREASED (TAC1 PRESERVED)
\r
2508 ADDB TAC1,JOBSA(JDAT) ;ADD STARTING ADDRESS TO BOTH
\r
2509 ; SO THAT <CONTROL>C START WILL START
\r
2510 ; PROGRAM AT SAME STARTING ADDRESS
\r
2511 HRLI TAC1,USRMOD ;SET USER MODE BIT IN PC
\r
2512 PUSH PDP,TAC1 ;PUT ON PD LIST
\r
2513 JRST USRXIT ;AND GO TO RETURN TO USER AS IF FROM UUO
\r
2515 ;UUO TO GET JUST HIGH SEG AND RETURN TO USER
\r
2516 ;CALL IS THE SAME AS FOR RUN UUO EXCEPT THAT OK RETURN IS SKIP RETURN
\r
2517 ;IF ERROR RETURN HAS HALT IN LH, STANDARD CONSOLE MESSAGE IS PRINTED AND JOB STOPPED
\r
2519 INTERN UGTSEG,UGTERR
\r
2524 JRST UGETHI ;IN SEGCON
\r
2526 UGTERR: MOVEI TAC,ILUERR ;ILLEGAL UUO ERROR CORE
\r
2527 PUSHJ PDP,SGRELE ;SEE IF USER WANTS ERROR
\r
2528 JRST UUOERR ;NO, PRINT ILLEGAL UUO
\r
2530 ;ROUTINE TO SETUP ACS, RESET IO, AND SETUP LOWER CORE LOCATIONS
\r
2531 ;FOR SAVE AND GET(SGALEN SET IO IOWD OR PP IF DTA OR DSK)
\r
2532 ;SGADMP SET TO IOWD FOR THIS SIZE CORE
\r
2533 ;CALL: JSP TAC1,SG1
\r
2534 ; ALWAYS RETURN HERE, UNLESS DEVICE NOT FOUND
\r
2535 ; DEVDAT SETUP TO DEVICE DATA BLOCK(BUT NOT INITED, UNLESS FT2REL=0)
\r
2536 ; SO THAT INIT NOT NECESSARTY IF SEG ALREADY KNOWN(NO DTA QUEUING)
\r
2537 ; DEVICE CHARACTERISTICS WORD(DEVMOD) RETURNED IN AC TAC1
\r
2540 INTERN SG1,SG3,SG4 ;CALLED FROM SEGCON
\r
2541 EXTERN USRDDT,USRREL,JOBSAV,JOBFF,CPOPJ1
\r
2542 EXTERN TTYFNU,JOBSVM,IADRCK,SAVDMP
\r
2544 SG1: JSP TAC,MONSTR ;SETUP PROG.PDP,JDAT,ITEM=JOB NUMBER
\r
2545 ; PUT TAC1 ON END OF PD LIST(EXEC MODE PC,
\r
2546 ; SO ERROR MESSAGES WILL ALWAYS PRINT(SEE SGRELE)
\r
2548 SG2: PUSHJ PDP,RESET ;RELEASE ALL DEVICES
\r
2549 SG2A: MOVEI TAC,DR ;DUMP MODE 16(DUMP BY RECORDS
\r
2550 ; IN CASE THIS IS MAGTAPE)
\r
2552 MOVEM TAC,SGAMOD(PROG) ;STORE FOR OPEN UUO
\r
2553 SETZM SGAEND(PROG) ;0 END OF DUMPE MODE COMMAND LIST
\r
2554 SETZM SGAREN+1(PROG) ;FOR DELETE
\r
2555 SETZM SGAREN+2(PROG) ;FOR DELETE
\r
2556 HLLZS JOBCOR(JDAT) ;0 THIRD ARG IN JOBDATA AREA(SO CHKARG WILL
\r
2557 ; WORD ON FIRST CALL(SAVE AND GET)
\r
2558 SETZM SGAHED(PROG) ;CLEAR BUFFER HEADER ARG, FOR OPEN UUO
\r
2560 OPEN 0,SGAMOD ;TRY TO ASSIGN DEVICE, SINCE IT MUST BE DONE
\r
2563 MOVE TAC,SGADEV(PROG) ;PHYSICAL OR LOGICAL DEVICE NAME
\r
2564 PUSHJ PDP,DEVSRC ;FIND DEVICE AND SETUP DEVDAT TO DDB
\r
2565 ; DO NOT INIT DEV SINCE IO MAY NOT BE NECESSARY
\r
2566 ; DO NOT WANT TO WAIT IN DTA SYSTEM
\r
2567 ; TAPE QUEUE IN 10/40 SYS
\r
2569 JRST SGERRA ;NOT AVAILABLE
\r
2570 ;DEVICE INITED(OR FOUND)
\r
2572 ;COMMON EXIT FROM SAVHGH AND GETHGH ROUTINES(HIGH SEG SAVE AND GET)
\r
2573 ;SO THAT SGA... LOCATIONS ARE RESTOREED TO ORIGINAL VALUES FOR LOW SEG
\r
2575 SG3: MOVE TAC,JOBFF(JDAT) ;FIRST FREE LOC IN JOB(SET FROM LH OF
\r
2576 ; JOBSA WHICH IS SET BY LOADER
\r
2577 MOVEI TAC,-1(TAC) ;MAKE LAST LOC TO SAVE OR GET(MAKE 0=777777)
\r
2578 SKIPN USRDDT ;USER DDT IN USE(IF YES, SAVE ALL OF CORE
\r
2579 ; SO HIS SYMBOLS WILL BE INCLUDED
\r
2580 PUSHJ PDP,IADRCK ;NO, ADDRESS TO SMALL OR TO LARGE?
\r
2581 MOVE TAC,USRREL ;YES, DUMP ALL OF CORE RATHER THEN GIVE
\r
2582 ; ADDRESS CHECK MESSAGE-HIGHEST REL.ADR.
\r
2583 MOVNS TAC ;-HIGHEST ADR TO SAVE TO GET
\r
2584 ADDI TAC,JOBSVM ;LOWER CORE NOT DUMPED
\r
2585 HRLI TAC,JOBSVM ;IE FIRST LOC-1 TO BE DUMPED
\r
2586 MOVSM TAC,SGADMP(PROG) ;STORE IOWD WORD OF THIS SIZE CORE
\r
2589 MOVE TAC1,DEVMOD(DEVDAT) ;RETURN DEVICE CHARACTERISTICS(IF DISK SYS)
\r
2590 TLNE TAC1,DVDSK ;IS THIS DEVICE A DISK?
\r
2592 MOVS TAC1,SGAPPN(PROG) ;YES. MAKE SURE FORTH WORD IS PROJ,PROG NO.
\r
2594 MOVSM TAC,SGALEN(PROG) ;NO. MAKE SURE FORTH WORD IS IOWD FOR DECTAPE
\r
2595 ; SINCE DECTAPE USES RH TO COMPUTE LENGTH IN K
\r
2596 ; FOR BOTH SAVE AND GET
\r
2597 SKIPN TAC,SGAEXT(PROG) ;DID USER SPECIFY AN EXTENSION ?
\r
2598 MOVSI TAC,SAVDMP ;NO, USE .SAV OR .DMP
\r
2599 MOVEM TAC,SGAEXT(PROG) ;AND STORE FOR LOOK UP ORENTER
\r
2602 ;ERROR ON INIT OR DEVICE SEARCH
\r
2604 INTERN SGERRA ;CALLED FROM SEGCON
\r
2606 SGERRA: JUMPE DEVDAT,SGERR1 ;WAS DEVICE FOUND, BUT JUST UNAVAILABLE?
\r
2607 MOVEM DEVDAT,(PDP) ;YES, SAVE DDB ADDRESS FOR MESSAGE(ERNAM)
\r
2608 MOVEI TAC,DNAERR ;ERROR CODE IN CASE RUN UUO(DEVICE NOT AVAILABLE)
\r
2609 PUSHJ PDP,SGRELE ;RETURN TO USER IF RUN UUO
\r
2610 ; OR FIND TTY AND PRINT ?CRLF
\r
2611 PUSHJ PDP,ERNAM ;PRINT DEVICE NAME USING (PDP)
\r
2612 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2613 ASCIZ / NOT AVAILABLE/
\r
2615 SGERR1: MOVEI TAC,NSDERR ;ERROR CODE IN CASE RUN UUO(NO SUCH DEVICE)
\r
2616 PUSHJ PDP,SGRELE ;RETURN TO USER IF RUN UUO
\r
2617 ; OR FIND TTY AND PRINT ?CRLF
\r
2618 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2619 ASCIZ /NO SUCH DEVICE/
\r
2621 ;ROUTINE TO GET FILE FROM DEVICE(LOW AND/OR HIGH)
\r
2622 ;CALL: ACS JDAT,PROG,PDP,DEVDAT SETUP
\r
2623 ; MOVE ITEM,JOB NUMBER
\r
2624 ; IFN FTDISK,<MOVE TAC1,DEVMOD(DEVDAT) ;DEVICE CHAR.>
\r
2626 ; RETURN ONLY IF EVERYTHING OK
\r
2628 EXTERNAL JOBCOR,JOB,CPOPJ,JOBS41,JOB41
\r
2633 PUSHJ PDP,GETHGH ;SEE IF HIGH SEG ALREADY EXISTS AND BEING SHARED
\r
2634 ; IF NOT, TRY TO LOOKUP AND READ IN HIGH FILE
\r
2635 ; IF .SHR DOESN'T EXIST, TRY .HGH, IF NEITHER-SKIP RETURN
\r
2636 ; TAC1=DEVMOD(DEVDAT) IF DISK(DEV CHAR.)
\r
2637 JRST LOWFIN ;HIGH SEG NOW IN CORE AND NO LOW FILE NEEDED
\r
2639 ; EITHER BECUASE NOHIGH SEG
\r
2640 ; ORHIGH SEG ALSO NEEDS LOW FILE
\r
2642 LOOKUP 0,SGANAM ;LOOKUP LOW SEG FILE(EXT=SAV,DMP OR LOW(IF HIGH SEG
\r
2643 ; REQUIRES LOW SEG AND USER DID NOT TYPE EXT)
\r
2644 ; MODE=SAVMOD SO DECTAPE SERVICE WILL RETURN
\r
2645 ; IOWD IN E+3(TEMPORARY)
\r
2646 JRST NOFILE ;GO PRINT FILE.EXT NOT FOUND
\r
2647 HLRE TAC1,SGALEN(PROG) ;-NO. OF WORDS IN FILE
\r
2648 PUSHJ PDP,CKIOWD ;CHECK USER'S SUPPLIED CORE ARG TO MAKE SURE NOT
\r
2649 ;TOO SMALL, RETURN LARGER OF FILE SIZE OR CORE ARG
\r
2650 PUSHJ PDP,GETCOR ;OK, TRY TO GET CORE
\r
2651 MOVE TAC1,DEVMOD(DEVDAT) ;DEVICE CHARACTERISTICS
\r
2653 ADDI TAC,JOBSVM ;-WORD COUNT FOR ALL USERS CORE
\r
2654 TLNE TAC1,DVMTA ;MAG TAPE?
\r
2655 HRLM TAC,SGALEN(PROG) ;YES, USE USER-SPECIFIED CORE ARGUMENT
\r
2656 HRRZS JOBPD1(JDAT) ;TURN OFF USER MODE PC FLAG IN CASE THIS
\r
2657 ;IS A RUN UUO,SO ERRORS WILL NOT TRY TO RETURN
\r
2659 PUSHJ PDP,SGDO ;READ IN FILE INTO LOW SEGMENT
\r
2660 INPUT 0,SGALEN ;EXECUTED FROM SGDO
\r
2661 MOVE TAC,JOBS41(JDAT) ;RESTORE USER UUO JSR LOC
\r
2662 MOVEM TAC,JOB41(JDAT) ;SAVED BY SAVE
\r
2663 LOWFIN: HRRZ TAC,JOBCOR(JDAT) ;CORE ARG FROM PREVIOUS SAVE(THIS MONITOR
\r
2664 ; ALWAYS STORES SOMETHING)
\r
2665 SKIP TAC ;IS THIS AN OLD FORMAT FILE WITH NO CORE ARG TO SAVE?
\r
2666 MOVE TAC,USRREL ;YES, USE ASSIGNMENT MADE WEN LOW FILE READ IN
\r
2667 PUSHJ PDP,CKSARG ;RETURN ONLY IF USER'S SUPLLIED ARG IS 0 OR NOT
\r
2668 ; SMALLER THAN SAVE CORE ARG. RETURN LARGER
\r
2669 PUSHJ PDP,GETCOR ;TRY TO GET THIS AMOUNT OF CORE
\r
2670 MOVE TAC,USRREL ;HIGHEST LOC ASSIGNED TO LOW SEG
\r
2671 HRRM TAC,JOBCOR(JDAT) ;SET INITIAL CORE ASSIGNMENT IN JOB DATA AREA FOR
\r
2672 ; USER TO USE TO RESET CORE TO INITIAL SETTING WHEN
\r
2673 ; PROGRAM IS RESTARTED
\r
2675 ;ROUTINE TO RELEASE DEVICE AND FIND TTY
\r
2678 SGREL: SKIPN DEVDAT,USRJDA ;HAS CHANNEL BEEN RELEASED ALREADY?
\r
2679 JRST SGREL2 ;YES, FIND TTY AND WAIT FOR OUTPUT TO FINISH
\r
2681 MOVE TAC1,DEVMOD(DEVDAT)
\r
2682 TLNE TAC1,DVMTA ;MAGTAPE?
\r
2683 TLNN DEVDAT,INPB ;YES, WAS AN INPUT DONE?
\r
2685 CLOSE 0,CLSOUT ;YES, CLOSE MTA INPUT
\r
2686 STATO 0,IOTEND+IODEND ;AT END OF APTE?
\r
2687 MTAPE 0,16 ;NO SKIP TO EOF
\r
2688 SGREL1: RELEASE 0, ;NO RELEASE DEVICE
\r
2691 JRST TTYFNU ;FIND TTY FOR CURRENT USER
\r
2693 ;ROUTINE TO EXECUTE DUMP MODE COMMAND LIST SETUP IN SGALEN(R)
\r
2694 ;AND CHECK FOR ERRORS. USED ONLY TO READ LOW FILE.
\r
2695 ;CALL: PUSHJ P,SGDO
\r
2696 ; INPUT 0,SGALEN OR OUTPUT 0,SGALEN
\r
2697 ; OK RETURN(NO ERRORS)
\r
2698 ;SGDOA CALLED FROM SAVE, IT HAS ALREADY SET LH OF USRHCU=-2
\r
2699 ;TO INDICATE CORE IS COMPRESSED
\r
2701 EXTERN USRHCU,USRJDA,JOBSA,JOBDDT,JOBSDD,JOBSD1,JOBSAV,JOBCOR
\r
2702 EXTERN JOBSV,JOBSV3,JOBSVD,JOBSDP
\r
2704 SGDO: HRROS USRHCU ;SET LH OF USRCHU-1 AS A FLAG TO INDICATE SAVE GET
\r
2705 ; LOW FILE IO IN PROGRESS, SO MONITOR WILL
\r
2706 ; NOT STORE HIGH SEG PROTECTION IN JOBHRL WHICH
\r
2707 ; HAS IOWD FOR ZERO COMPRESSION
\r
2708 SGDOA: XCT @(PDP) ;EXECUTE INPUT OR OUTPUT UUO
\r
2709 MOVE ITEM,JOB ;READ INTO PROTECTED PART OF JOB DATA AREA
\r
2710 PUSHJ PDP,EXPAND ;EXPAND CORE IMAGE
\r
2711 JRST ADRERR ;ADDRESS CHECK, PRINT MESSAGE AND STOP JOB
\r
2712 MOVE TAC1,JOBDDT(PROG) ;COPY DDT STARTING ADR
\r
2713 MOVEM TAC1,USRDDT ;INTO MONITOR PROTECTED AREA(IN CASE THIS IS GET)
\r
2714 SETZM USRHCU ;FLAG THAT SAVE-GET IO FINISHED AND CORE EXPANDED
\r
2715 AOS (PDP) ;SKIP OVER UUO IN CALLING SEQUENCE
\r
2717 ;ROUTINE TO CHECK FOR IO ERRORS(CALLED FROM SEGCON)
\r
2718 ;CALL: MOVE F,DEVICE DATA BLOCK ADDRESS
\r
2720 ; RETURN ONLY IF NO ERRORS
\r
2724 SGIOCK: MOVE T4,DEVIOS(DEVDAT) ;IO STATUS WORD FOR THIS DEVICE
\r
2725 TRNN T4,IOBKTL!IODTER!IODERR!IOIMPM ;ANY ERRORS ON SAVE-GET DEVICE?
\r
2726 POPJ PDP, ;NO, GIVE OK RETURN
\r
2727 MOVEI TAC,TRNERR ;YES, ERROR CODE IN CASE THIS IS RUN UUO
\r
2728 ; (TRANSMISSION ERROR)
\r
2729 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2730 ; OF FIND TTY AND PRINT ?CRLF
\r
2731 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2732 ASCIZ /TRANSMISSION ERROR/
\r
2734 ;ROUTINE TO EXPAND CORE AFTER A SAVE(LOW SEG ONLY)
\r
2735 ;CALL: MOVE DEVDAT,DEVICE ADR.
\r
2736 ; MOVE PROG,JOBADR.
\r
2737 ; MOVE ITEM,JOB NUMBER
\r
2738 ; PUSHJ PDP,EXPAND
\r
2739 ; ERROR RETURN, ADR, CHECK, OR NEED CORE BUT NOT CURRENT USER(COMMAND
\r
2740 ; DECODER EXPANDING AFTER USER HAS REDUCED CORE)
\r
2741 ; OK RETURN, CORE EXPANDED
\r
2742 ;CALLED FROM SAVE AND COMMAND DECODER
\r
2743 ;START,CSTART,DDT,REENTER,SAVE,SSAVE COMMANDS IF CORE STILL COMPRESSED
\r
2745 EXPAND: HLRE AC3,SGALEN(PROG) ;-LENGTH OF FILE
\r
2746 MOVNS AC3 ;-LENGTH OF FILE
\r
2747 ADDI AC3,JOBSVM ;ADD FIRST LOC-1 TO FORM HIGHEST LEGAL ADR.
\r
2748 HRLI AC3,PROG ;PUT PROG IN LH FOR COMPARE
\r
2749 ; AC3 SET FOR ADDRESS CHECKING BELOW
\r
2750 SKIPL TAC,JOBSV(PROG) ;IF FIRST LOC IS POSITIVE
\r
2751 JRST SGDO1 ;OLD FORMAT, SO DONT EXPAND
\r
2752 HRRZS TAC ;LOOK AT 1ST WORD OF FILE
\r
2753 CAILE TAC,JOBDDT ;IS IT BELOW JOBJDA?
\r
2754 JRST EXPND1 ;NO. NEW COMPRESSED FORMAT
\r
2755 CAIE TAC,JOBSAV ;IS JOBDDT THE DATA WORD?
\r
2756 JRST EXPND1 ;NO. EXPAND
\r
2757 SKIPN JOBSV3(JDAT) ;IS THE SAVE FILE FROM CONVERT?
\r
2758 ; CONVERT DOES NOT ZERO COMPRESS
\r
2759 ; IT JUST WRITES ENTIRE FILE WITHH 1 IOWD IN FRONT
\r
2760 SOJA AC3,SGDO1 ;YES, GO BLT DATA DOWN AS IF OLD DISK SAVE FILE
\r
2761 ; (NON-COMPRESSED)
\r
2762 HRROI TAC,JOBSD1 ;YES. CHANGE TO IOWD 1,JOBSDD
\r
2763 EXCH TAC,JOBSV(PROG) ;ZEP, THE IOWD IS FIXED
\r
2764 HLRES TAC ;WORD COUNT OF IOWD
\r
2765 AOJE TAC,EXPND1 ;JUST 1 DATA WORD - THROUGH
\r
2766 MOVSI TAC,1(TAC) ;MAKE IOWD N-2,JOBSAV
\r
2768 HRRI TAC,JOBSAV ;SO NEXT DATA WDS WILL BE SKIPPED
\r
2769 MOVEI TAC1,JOBSV(PROG)
\r
2770 MOVEM TAC,2(TAC1) ;STORE IN COMPRESSED DATA
\r
2772 EXPZ: MOVSI TAC,-2
\r
2773 HLLM TAC,JOBSV(PROG)
\r
2775 ;COME HERE TO DO THE ACTUAL EXPANSION OF A FILE
\r
2776 EXPND1: MOVE TAC,[XWD PROG,JOBSV] ;IT WAS READ INTO JOBSV
\r
2777 MOVE TAC,@TAC ;FIRST IOWD
\r
2778 EXPLP1: HRRZ AC1,TAC1 ;ADDRESS OF IOWD
\r
2779 CAIGE AC1,JOBSAV ;LEGAL?
\r
2780 AOJA AC1,TOOLOW ;NO. DELETE DATA WHICH IS TO LOW
\r
2781 HLRE AC1,TAC1 ;YES. GET WORDCOUNT
\r
2783 HRLM AC1,TAC1 ;CONVERT IOWD TO +N IN LH
\r
2784 ADDI TAC,1(AC1) ;ADDRESS OF NEXT IOWD.
\r
2785 CAMLE TAC,AC3 ;IN BOUNDS?
\r
2786 JRST SGDOER ;NO. COMPLAIN
\r
2787 ADDI TAC1,(AC1) ;YES. CHANGE RH OF IOWD
\r
2788 EXCH TAC1,@TAC ;MAKE IT XWD +N,A+N-1 AFTER DATA BLOCK
\r
2789 JUMPL TAC1,EXPLP1 ;CONTINUE IF NEXT THING IS AN IOWD
\r
2790 PUSH PDP,TAC ;SAVE DATA LOCATION
\r
2791 HRRZ TAC,@TAC ;TOP REAL LOCATION NEEDED
\r
2793 TRO TAC,1777 ;MAKE IT NK-1
\r
2795 HLRZ TAC1,PROG ;PRESENT SIZ OF LOW SEG
\r
2796 CAMG TAC,TAC1 ;IS THERE ENOUGH?
\r
2798 CAME ITEM,JOB ;NO, IS TIS THE CURENT JOB?
\r
2799 JRST SGDOER ;NO, GIVE ERRROR RETURN, MUST BE COMMAND DECODER
\r
2800 ; DOING EXPAND AFTER USER HAS REDUECED CORE
\r
2801 PUSHJ PDP,GETCOR ;YES. GET IT
\r
2802 EXPCOR: POP PDP,TAC1
\r
2803 MOVEI AC1,@TAC1 ;TOP DATA LOC
\r
2804 HRLI AC1,1(AC1) ;SET TO ZERO TO TOP OF CORE
\r
2807 HRLI TAC,PROG ;RELOCATE TOP LOC OF JOB
\r
2808 BLT AC1,@TAC ;ZAP, CORE IS 0 FROM HERE ...
\r
2809 HRROI TAC,@TAC1 ;FORM DATA POINTER
\r
2810 EXPLP2: HRRZ AC1,(TAC) ;TO DATA POINTER
\r
2811 ADDI AC1,(PROG) ;RELOCATE
\r
2812 HLRZ AC2,(TAC) ;WORD COUNT
\r
2813 SUBI TAC1,1(AC2) ;POINT TAC1 TO PREVIOUS IOWD
\r
2814 SETZM (TAC) ;ZERO THIS IOWD
\r
2815 SOSA TAC ;POINT TO DATA
\r
2817 CAIGE AC1,JOBSDD(PROG) ;DON'T STORE DATA BELOW JOBSDD
\r
2819 POP TAC,(AC1) ;MOVE A DATA WORD
\r
2820 SETZM 1(TAC) ;ZERO WHERE IT CAME FROM
\r
2821 SOJG AC2,EXPLP3 ;LOOP IF MORE DATA
\r
2822 CAMLE TAC1,[XWD PROG,JOBSV] ;THROUGH?
\r
2823 JRST EXPLP2 ;NO, DO NEXT BLOCK
\r
2824 EXCH AC2,JOBSDD(PROG) ;YES, ZERO JOBSDD
\r
2825 MOVEM AC2,JOBDDT(JDAT) ;SET USER DDT STR ADR
\r
2826 JRST SGDO2 ;AND SETUP USRDDT IN MONITOR PROTECTED
\r
2829 ;THIS ROUTINE WILL DELETE ALL DATA FROM A COMPRESSED FILE
\r
2830 ;WHICH IS BELOW JOBSOD (PROBABLY WRITTEN BY TENDUMP)
\r
2832 TOOLOW: HLRE AC2,@TAC ;WORDCOUNT OF OFFENDING IOWD
\r
2833 SUB AC1,AC2 ;ADDRESS+N
\r
2834 CAIG AC1,JOBSDD ;IS ANY DATA IN IT LEGAL?
\r
2835 AOJA TAC,NXIOWD ;NO, TEST NEXT IOWD
\r
2836 SUBI AC1,JOBSDD ;YES, NUMBER OF WORDS TO KEEP
\r
2837 MOVNS AC2 ;TOTAL NUMBER OF WORDS
\r
2838 SUB AC2,AC1 ;NUMBER OF WORDS TO DROP
\r
2839 HRLS AC2 ;INTO BOTH HALVES
\r
2840 ADD AC2,@TAC ;NEW IOWD FOR ONLY GOOD DATA
\r
2841 ADDI TAC,(AC2) ;POINT TAC TO LAST BAD DATA LOC
\r
2842 MOVEM AC2,@TAC ;STORE UPDATED IOWD OVER IT
\r
2843 JRST IOWBLT ;GO BLT OVER BAD DATA
\r
2844 NXIOWD: SUB TAC,AC2 ;POINT TAC TO NEXT IOWD
\r
2845 HRRZ AC1,@TAC ;GET ADDRESS
\r
2846 CAIGE AC1,JOBSD1 ;LEGAL?
\r
2847 AOJA AC1,TOOLOW ;NO, AT LEAST PART OF THE DATA IS LOW
\r
2848 IOWBLT: MOVSI TAC,@TAC ;YES, KEEP THE ENTIRE IOWD DATA
\r
2849 HRRI TAC1,JOBSV(PROG) ;TAC1 IS A BLT POINTER
\r
2850 SUBI TAC,JOBSV ;RH OF TAC IS AMOUNT BEING DELETED
\r
2851 SUBI AC3,(TAC) ;AC3 POINTS TO TOP OF DATA READ IN-(N)
\r
2852 BLT TAC1,@AC3 ;MOVE ONLY GOOD DATA DOWN
\r
2853 JRST EXPND1 ;GO EXPAND THE GOOD DATA
\r
2855 SGDO1: MOVEI TAC,JOBDDT(PROG) ;MOVE EVERYTHING DOWN )MUST BE NON-COMPRESSED DSK FILE
\r
2856 HRLI TAC,JOBSVD(TAC) ;OR CONVERT SAVE FILE
\r
2857 SKIPGE JOBSV(JDAT) ;IS THIS CONVERT FILE(FIRST WORD IS IOWD)?
\r
2858 HRLI TAC,JOBSDP(TAC) ;YES, ALSO SKIP OVER IOWD
\r
2861 SGDO2: AOSA (PDP) ;SET FOR OK RETURN
\r
2862 SGDOER: POP PDP,TAC
\r
2863 SETZM JOBHCU(JDAT) ;CLEAR LH AND SET HIGHEST USER CHAN, IN
\r
2864 ; USE TO 0(WHERE IT SHOULD BE ANYWAY)
\r
2865 POPJ PDP, ;ERROR RETURN OR OK RETURN
\r
2867 ;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK TO SEE IF 0
\r
2868 ;OR GREATER THAN OR EQUAL TO IOWD USED TO SAVE OR GET FILE
\r
2869 ;CALL: HLRE TAC1,-NO. OF WORDS IN FILE
\r
2870 ; PUSHJ PDP,CKIOWD
\r
2871 ; RETURN WITH LARGER OF 2 POSITIVE NOS. IN TAC(1777 ORED IN)
\r
2872 ; DO NOT RETURN IF CORE ARG SUPLLIED BY USER IS TOO SMALL
\r
2873 ;CALLED FROM SAVE AND GET
\r
2877 CKIOWD: MOVEI TAC,JOBSVM ;FIRST LOC-1 READ OR WRITTEN IN USER AREA
\r
2878 HRRM TAC,SGALEN(PROG) ;RESTORE RH TO JOBSAV AFTER LOOKUP
\r
2879 SUB TAC,TAC1 ;HIGHEST LOC=FIRST LOC-1+LENGTH OF FILE
\r
2880 ; FALL INOT CHSARG
\r
2882 ;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK IF 0
\r
2883 ;OR GREATER THAN OR EQUAL TO CORE ARG FOR PREVIOUS SAVE
\r
2884 ;CALL: HRRZ TAC,JOBCOR(JDAT) ;WRITTEN WHEN FILE SAVED
\r
2885 ; PUSHJ PDP,CKSARG
\r
2886 ; RETURN WITH LARGER OF 2 IN AC TAC, ONLY IF USER ARG NOT TOO SMALL
\r
2887 ;CALLED ONLY FROM GET AFTER JOB DATA AREA LOADED FROM FILE(JOBCOR) OR HIGH SEG
\r
2889 INTERN NROOM1 ;CALLED FROM SEGCON
\r
2891 CKSARG: IORI TAC,1777 ;MAKE SURE 1K-1
\r
2892 CAMG TAC,SGANEW(PROG) ;IS USER SUPPLIED CORE ARG BIGGER?
\r
2893 SKIPA TAC,SGANEW(PROG) ;YES, RETURN IT
\r
2894 SKIPN SGANEW(PROG) ;NO, DID USER SUPPLY ONE
\r
2895 POPJ PDP, ;NO, RETURN LARGER OF TWO
\r
2896 ;ROUTINE TO PRINTE #K OF CORE NEEDED
\r
2897 ;CALL: MOVE TAC,HIGHEST REL. USER ADR.
\r
2898 ; PUSHJ PDP, NROOM1
\r
2901 NROOM1: PUSH PDP,TAC ;YES, ERROR, USER'S SUPPLIED CORE ARG TOO SMALL
\r
2902 NOROOM: MOVEI TAC,NECERR ;ERROR CODE IN CASE THIS IS RUN UUO(NOT ENOUGH CORE)
\r
2903 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2904 ; OR FIND TTY AND PRINT ?CRLF
\r
2905 HRRZ TAC,(PDP) ;GET AMOUNT OF CORE REQUESTED
\r
2906 LSH TAC,-12 ;CONVERT TO NO. OF 1K BLOCKS-1
\r
2907 PUSHJ PDP,DECP1 ;ADD 1 TO TAC AND PRINT DECIMAL
\r
2908 JSP TAC,PHOLD ;START TTY ADN STOP JOB
\r
2909 ASCIZ /K OF CORE NEEDED/
\r
2911 ;ROUTINE TO ASSIGN CORE FOR LOW AND HIGH SEG
\r
2912 ;CALL: MOVE PROG,LOW SEG RELOCATION
\r
2913 ; HRR TAC,HIGHEST LOC DESIRED
\r
2914 ; PUSHJ PDP,GETCORE
\r
2915 ; RETURN ONLY IF ASSIGNED
\r
2919 GETCOR: HRRZM TAC,SGACOR(PROG) ;SOTRE CORE ARG FOR CORE UUO IN USER AC
\r
2920 PUSH PDP,TAC ;SAVE IN CASE OF ERROR
\r
2921 CALLI SGACOR,11 ;DO CORE UUO
\r
2922 JRST NOROOM ;NOT AVAILABLE, PRINT ERROR AND AMOUNT TRYING FOR
\r
2923 JRST TPOPJ ;OK, REMOVE TAC FROM PD LIST AND RETURN
\r
2925 ;ROUTINE TO PRINT NOT A SAVE FILE IF WRONG FORMAT FILE DETECTED
\r
2929 GETERR: MOVEI TAC,NSFERR ;ERROR CODE IN CASE THIS IS RUN UUO(NOT SAVE FILE)
\r
2930 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2931 ; OR FIND TTY AND PRINT ?CRLF
\r
2932 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2933 ASCIZ /NOT A SAVE FILE/
\r
2935 ;ROUTINE TO PRINT FILE NOT FOUND ORNEEDS 2 RELOC REG
\r
2937 INTERN NOFILE ;CALLED FROM SEGCON
\r
2939 NOFILE: MOVEI TAC,FNFERR ;ERROR CODE IN CASE THIS IS RUN UUO(FILE NOT FOUND
\r
2940 ; CHANGE ERROR CODE TO DISK ERROR CODE IF DEV IS DSK
\r
2941 PUSHJ PDP,SGRELL ;RETURN DISK LOOKUP OR ENTER ERROR CODE IF DSK
\r
2942 ; RELEASE DEVICE AND ERROR RETURN TO USER IF HE WANTED
\r
2943 ; OR FIND TTY AND PRINT ?CRLF
\r
2944 MOVE TAC1,SGANAM(PROG) ;PRINT FILE NAME
\r
2946 PUSHJ PDP,PRPER ;PRINT PERIOD
\r
2947 HLLZ TAC1,SGAEXT(PROG) ;PRINT EXTENSION
\r
2949 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2950 ASCIZ / NOT FOUND/
\r
2952 ;ROUTINE TO RELEASE DEVICE ON AN ERROR AND CHECK TO SEE
\r
2953 ;IF THIS IS A MONITOR COMMAND OR USER UUO
\r
2954 ;IF USER UUO, GIVE ERROR RETURN TO USER UNLESS THERE IS A HALT
\r
2955 ;IN LH OF EROR RETURN WORD, IN WHICH CASE FIND TTY, PRINT ?CRLF
\r
2956 ;AND RETURN TO CALLER SO CAN ADD MORE INFO TO ERROR MESSAGE AND STOP JOB
\r
2957 ;CALL: MOVEI TAC,ERROR CODE(DEFINED IN S.MAC)
\r
2958 ; PUSHJ PDP,SGRELE
\r
2959 ;DO NOT RETURN TO CALLER IF USER WANTS ERROR RETURN ON RUN AND GETSEG UUOS
\r
2961 EXTERN JOBPD1,JOBPD3,USRJDA
\r
2963 SGRELL: ;LOOKUP OR ENTER FAILURE
\r
2965 MOVE TAC1,DEVMOD(DEVDAT) ;IS THIS DEVICE A DISK?
\r
2967 HRRZ TAC,SGAEXT(PROG) ;YES, RETURN DISK SERVICE ERROR CODE
\r
2969 SGRELE: MOVE TAC1,JOBPD1(JDAT) ;GET FIRST PC ON PD LIST
\r
2970 TLNN TAC1,USRMOD ;IS IT IN USER MODE(IE USER UUO)?
\r
2972 JRST SGRLE1 ;NO. MUST BE MONITOR COMMAND OR CALLED OVERLAYED
\r
2973 ; RELEASE DEVICE, FIND TTY, AND RETURN TO CALLED
\r
2974 PUSH PDP,TAC ;SAVE ERROR CORE
\r
2975 HRR UUO,TAC1 ;ADDRESS OF RETURN AFTER RUN OF GETSEG UUO
\r
2976 PUSHJ PDP,GETWDU ;GET ERROR RETURN WORD FROM RUN OR GETSEG UUO
\r
2977 HLRZ TAC1,TAC ;GET OP CODE
\r
2978 POP PDP,TAC ;RESTORE ERROR CODE
\r
2979 CAIN TAC1,(HALT) ;IS LH HALT?
\r
2980 JRST SGRLE1 ;YES, RELEASE DEVICE,FIND TTY, AND RETURN TO CALLER
\r
2981 HRR UUO,JOBPD3(JDAT) ;NO, AC NUMBER OF RUN OR GETSEG UUO
\r
2982 PUSHJ PDP,STOTAC ;STORE ERROR NUMBER IN USER AC
\r
2983 SKIPE USRJDA+0 ;DO NOT RELEASE CHANNEL 0 IF NOT INITED YET
\r
2984 ; UUO HANDLER DOES NOT ALLOW THIS FROM EXEC MODE
\r
2985 RELEAS 0, ;RELEASE DEVICE(IF INITED)
\r
2986 JRST USRXIT ;AND RETURN TO USER TO HANDLE ERROR
\r
2988 SGRLE1: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY
\r
2989 JSP TAC,CONMES ;PRINT ?CRLF AND RETURN TO CALLER
\r
2990 ; WHO WILL PRINT REST OF ERROR MESSAGE AND STOP JOB
\r
2993 COMEND: END ;END OF COMCON
\r