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
41 INTERNAL FTLOGIN,FTSWAP,FTTIME
\r
42 EXTERNAL COMCNT,TTYCOM,JBTSTS,JOBMAX,JBTDAT,JBTADR,JOBHCU
\r
43 EXTERNAL CONFIG,HIGHJB
\r
44 EXTERNAL TTYSTR,TTYUSR,TTYATT
\r
45 EXTERNAL TTYTAB,PUNIT,TTYATI
\r
46 EXTERNAL ADRERR,ANYACT,ASSASG,CORE0,DAMESS,DEVLG,DEVPHY,DEVSRC
\r
47 EXTERNAL DLYCOM,ERNAM,ESTOP,GETWD1,GETWDU,KSTOP,CORE1,MONJOB,DECP1
\r
48 EXTERNAL MONSTR,MSTART,OCTPNT,PHOLD,PRNAME,RADX10,RELEA5
\r
49 EXTERNAL RELEA6,RESET,SETRUN,STOP1
\r
50 EXTERNAL STOTAC,UPTIME,USRXIT,USTART,UUOERR
\r
52 T=BUFPNT ;TEMPORARY AC'S
\r
57 COMMAND:PUSHJ PDP,TTYCOM ;SETUP DEVDAT,DAT,TAC,AND ITEM
\r
58 ; FOR ANY TTY WHICH HAS TYPED A COMMAND
\r
59 COM0: POPJ PDP, ;NONE FOUND
\r
60 PUSH PDP,DEVDAT ;SAVE TTY DEVICE DATA BLOCK ADDRESS
\r
61 PUSHJ PDP,CTEXT ;SCAN COMMAND NAME, RETURN IT IN TAC1
\r
62 MOVE T,TAC1 ;COPY COMMAND.
\r
63 MOVNI T1,1 ;SET MASK ALL ONES
\r
64 LSH T1,-6 ;CLEAR OUT ONE MORE CHAR.
\r
65 LSH T,6 ;SHIFT 1 COMMAND CHAR OFF
\r
66 JUMPN T,.-2 ;IF NOT END OF COMMAND. GO AROUND
\r
67 MOVEI T4,0 ;CLEAR FLAG REGISTER
\r
68 MOVSI T,-DISPL ;SEARCH COMMAND TABLE FOR MATCH
\r
69 COMLP: MOVE T2,COMTAB(T) ;GET NEXT ENTRY FROM COMMAND TABLE
\r
70 TDZ T2,T1 ;MASK OUT CHAR 5
\r
71 CAMN TAC1,COMTAB(T) ;EXACT MATCH?
\r
72 JRST COMFND ;YES, THIS IS IT.
\r
73 CAME TAC1,T2 ;MATCH?
\r
74 JRST COMNEQ ;NOT EVEN GOOD MASK
\r
75 TROE T4,1 ;MATCHES MASKED, IS THIS FIRST ONE
\r
76 TROA T4,2 ;NO, SET 2ND OCCUR FLAG
\r
77 MOVE T3,T ;YES, COPY CURRENT INDEX
\r
78 COMNEQ: AOBJN T,COMLP ;NO, KEEP LOOKING
\r
79 CAIN T4,1 ;DID ONE AND ONLY ONE COMMAND MATCH?
\r
80 MOVE T,T3 ;YES, GET ITS INDEX
\r
81 \fCOMFND: MOVE TAC1,DISP(T) ;GET DISPATCH TABLE ENTRY,
\r
82 PUSH PDP,TAC1 ;SAVE RH(DISPATCH ADR,+BITS)
\r
83 MOVE T,JBTSTS(ITEM) ;JOB STATUS WORD FOR THIS JOB
\r
85 TLNN T,JLOG ;IS JOB LOGGED IN?
\r
86 TLNE TAC1,NOLOGIN ;NO, CAN COMMAND PROCEED WITH NO LOGIN?
\r
88 JSP TAC,COMER ;NO, TYPE "LOGIN PLEASE"
\r
91 CHKNO: JUMPN ITEM,CHKRUN ;JOB NUMBER ALREADY ASSIGNED?
\r
92 TLNE TAC1,NOJOBN ;NO, DOES THIS COMMAND NEED A JOB NUMBER?
\r
94 MOVEI ITEM,1 ;YES, SCAN FOR ONE STARTING WITH 1
\r
95 NUMLOP: MOVE T,JBTSTS(ITEM) ;SCAN FOR FREE JOB NO.
\r
96 TLNN T,JNA+CMWB ;THIS NUMBER ASSIGNED?
\r
97 JRST NEWJOB ;NO, SO USE THIS NUMBER
\r
99 CAIGE ITEM,JOBMAX ;YES, IS THE MAX. JOB NO.?
\r
100 AOJA ITEM,NUMLOP ;NO, KEEP LOOKING
\r
101 JSP TAC,COMER ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED"
\r
102 ASCIZ /JOB CAPACITY EXCEEDED
\r
104 ; EVEN THROUGH THIS IS A NEW JOB NUMBER
\r
105 ; IT MAY HAVE CORE ASSIGNED NOW BECAUSE IT WAS DELAYED
\r
106 ; UNTIL IT COULD BE SWAPPED IN(LOGIN WITH CORE FULL)
\r
107 NEWJOB: MOVEI T1,ASSCON ;SET ASSIGNED BY CONSOLE BIT FOR TTY
\r
108 IORM T1,DEVMOD(DEVDAT) ;SO OTHER JOBS CAN NOT USE
\r
109 SETZM DEVLOG(DEVDAT) ;SET LOGICAL NAME TO ZERO
\r
110 ; "TTY" IS PUBLIC LOGICAL NAME
\r
112 SETZM RTIME(ITEM) ;CLEAR INCREMENTAL JOB RUNNING TIME
\r
113 SETZM TTIME(ITEM) ;CLEAR TOTAL JOB RUNNING TIME
\r
117 SETZM JBTKCT(ITEM) ;CLEAR CORE-RUNNING TIME CORE
\r
119 CAMLE ITEM,HIGHJB ;HIGHEST JOB NUMBER ASSIGNED?
\r
120 MOVEM ITEM,HIGHJB ;YES,SAVE IT FOR SCHEDULER SCAN OF JOBS
\r
121 \fCHKRUN: TLNE T,RUN ;RUN BIT ON IN JOB STATUS?
\r
122 TLNN TAC1,NORUN ;YES, DOES THIS COMMAND REQUIRE A JOB?
\r
124 JSP TAC,COMER ;YES.
\r
125 ASCIZ /PLEASE TYPE ^C FIRST
\r
131 MOVE JDAT,JBTDAT(ITEM) ;ADDRESS OF JOB DATA AREA
\r
133 MOVE PROG,JBTADR(ITEM) ;XWD PROTECTION,RELOCATION
\r
135 TLNE TAC1,INCOR!NOTRAN ;MUST JUST NOT BE SWAPPING OR
\r
136 ; IF JOB HAS CORE ASSIGNED, MUST IT BE
\r
137 ; IN PHYSICAL CORE (RATHER THAN DISK OR ON ITS WAY)
\r
138 TLNN T,SWP ;YES, IS JOB ON DISK OR ON ITS WAY?
\r
140 TLNN TAC1,INCOR ;YES, MUST JOB BE IN CORE?
\r
141 JUMPE PROG,CHKCO2 ;NO, IS A SWAP FOR THIS JOB IN PROGRESS?
\r
142 ; NO, SO COMMAND MUST BE DELAYED
\r
143 ; (EITHER BECAUSE SWAP IN PROGRESS OR
\r
144 ; JOB ON DISK AND MUST BE IN PHY CORE)
\r
145 HRRI TAC1,DLYCM ;ASSUME JOB MUST BE IN PHY CORE
\r
146 ; SO SET TO SWAP JOB IN
\r
147 TLNN TAC1,INCOR ;IS THIS TRUE?
\r
148 CHKDLY: HRRI TAC1,DLYCM1 ;NO, JUST DELAY COMMAND UNTIL SWAP OUT OR IN IS FINISHED
\r
149 JRST COMDIS ;AND DISPATCH TO DELAY COMMAND
\r
151 CHKCO2: TLNE TAC1,NOACT ;CAN COMMAND BE PERFORMED WITH ACTIVE DEVICES?
\r
152 PUSHJ PDP,RUNCHK ;NO, RETURN IF JOB STOPPED AND NO ACTIVE DEVICES
\r
153 CHKCO1: TLNE TAC1,NOCORE ;DOES THIS COMMAND NEED CORE?
\r
154 JRST COMGO ;NO, GO DISPATCH
\r
155 JUMPN PROG,CHKXPN ;YES, IS CORE IN MEMORY?
\r
156 JSP TAC,COMER ;NO, PRINT "NO CORE ASSIGNED"
\r
157 ASCIZ /NO CORE ASSIGNED
\r
159 \fCHKXPN: TLNN TAC1,PLSXPN ;DOES THIS COMMAND NEED CORE TO BE EXPANDED?
\r
161 HLRE IOS,JOBHCU(JDAT) ;YES, IS CORE STILL COMPRESSED(SAVE DID NOT GO
\r
163 AOJGE IOS,COMGO ;LH=-2 DURING SAVE, WHEN CORE COMPRESSED
\r
164 ;LH=-1 DURING SAVE OF HIGH SEG, OR GET OF LOW
\r
166 PUSHJ PDP,EXPAND ;YES, EXPAND CORE FIRST
\r
167 JFCL ;IGNORE ADDRESS CHECK ERROR, WE TRIED
\r
169 JRST CHKDLY ;DELAY COMMAND BECAUSE COMMAND DECODER ACS ARE
\r
170 ; ALL GONE, NEXT TIME JOBHCU WILL BE 0
\r
174 HRRI TAC1,DLYCM1 ;DELAY COMMAND TILL NEXT CLOCK TICK
\r
178 COMER: MOVSI TAC1,NOINCK
\r
180 MOVEI TAC1,CERR ;CALL ERROR MESSAGE ROUTINE
\r
182 COMGO: MOVSI IOS,CMWRQ
\r
183 TLZN T,CMWB ;CLEAR CMWB; WAS JONB IN COMM WAIT
\r
184 ANDCAM IOS,(PDP) ;NO, CLEAR REQUEU BIT IN DISP. FLAGS
\r
185 MOVEM T,JBTSTS(ITEM)
\r
187 COMDIS: MOVEI IOS,0 ;CLEAR IOS FOR SETTING DISPATCH ADDRESSES
\r
188 PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE.
\r
189 \f;RETURN FROM COMMAND SETUP ROUTINE
\r
191 COMRET: POP PDP,T1 ;RESTORE COMMAND FLAGS
\r
192 POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS.
\r
194 EXTERN TITAKR,TISYNC
\r
195 LDB TEM,TITAKR(DEVDAT) ;GET BREAK CHARACTER
\r
196 PUSHJ PDP,SKPBRK ;SKIP TO BREAK CHAR
\r
197 SOS TISYNC(DEVDAT) ;REDUCE LINE COUNT
\r
201 ANDCAM T,TTYTAB(TAC) ;YES. TURN OFF SIGN BIT
\r
203 JUMPN ITEM,COMRT1 ;DID AN ERROR OCCUR?
\r
204 TLNN T1,NOJOBN ;I.E., ITEM=0 AND NOJOBN=0?
\r
205 MOVSI T1,NOINCK+ERRFLG+CMWRQ ;YES, PRINT ERROR MESSAGE ONLY, AND
\r
206 ;REQUEUE JOB IF NECESSARY.
\r
208 COMRT1: MOVE T,JBTSTS(ITEM) ;JOB STATUS WORD
\r
209 TLNN T1,NOINCK ;SUPPRESS JOB INIT. CHECK?
\r
210 TLOE T,JNA ;NO, IS JOB INIT BIT ALREADY SET?
\r
212 MOVEM T,JBTSTS(ITEM) ;NO, SO SET IT THIS COMMAND
\r
213 PUSHJ PDP,TTYATI ;ATTACH TTY TO JOB
\r
214 JFCL ;INGORE IF CAN NOT(SHOULD NEVER HAPPEN)
\r
215 PUSHJ PDP,INLMES ;AND PRINT "JOB "
\r
217 MOVE TAC,ITEM ;PRINT JOB NUMBER
\r
220 MOVEI TAC,CONFIG ;PRINT SYSTEM CONFIGURATION NAME
\r
229 \fPCRLF: TLNE T1,ERRFLG ;DID AN ERROR OCCUR?
\r
230 PUSHJ PDP,PRQM ;YES. APPEND ?
\r
231 TLNN T1,NOCRLF ;SUPRESS CRLF?
\r
233 TLNN T1,NOPER ;SUPRESS PRINTING PERIOD?
\r
234 PUSHJ PDP,PRPER ;NO
\r
235 JUMPE ITEM,PCRLF1 ;JOB DOES NOT RUN IF ERROR OR NO JOB NO. ASSIGNED
\r
236 TLNE T1,TTYRNU ;JOB TO RUN WHEN TTY FINISHED TYPING?
\r
237 ; COMMAND RESPONSE (TTY TO USER MODE)?
\r
238 PUSHJ PDP,TTYUSR ;YES, CALL SCANNER ROUTINE
\r
239 TLNE T1,TTYRNC ;NO. JOB TO RUN AND REMAIN IN MONITOR MODE?
\r
240 PUSHJ PDP,SETRUN ;YES, CALL SCANNER ROUTINE
\r
241 PCRLF1: TLNN T1,NOMESS ;IS THERE A MESSAGE?
\r
242 PUSHJ PDP,TTYSTR ;YES. START TTY TYPING IT OUT
\r
245 LDB ITEM,PJOBN ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK
\r
247 TLNE T1,CMWRQ ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR?
\r
253 IFN FTTTYSER, <EXTERN SPCHEK,TITAKR,GETCHR,TPOPJ
\r
255 SKPBRK: PUSH PDP,TAC
\r
256 SKPBR2: PUSHJ PDP,SPCHEK
\r
258 TLNE TAC,BREAKB ;IS THIS CHAR THE BREAK?
\r
259 JRST TPOPJ ;YES, RESTORE TAC, RETURN
\r
260 SKPBR1: PUSHJ PDP,GETCHR
\r
261 JUMPN TEM,SKPBR2 ;LOOK FURTHER FOR BREAK
\r
262 JRST TPOPJ ;UNLESS NO MORE CHARS
\r
264 \f;TABLE OF CONSOLE COMMANDS
\r
266 INTERNAL FTATTACH,FTTIME,FTTALK,FTEXAMINE,FTLOGIN,FTREASSIGN
\r
267 INTERNAL FTFINISH,FTCCL
\r
269 ;BITS CHECKED BEFORE DISPATCHING TO COMMAND SETUP ROUTINE
\r
271 NOCORE=400000 ;NO CORE NEEDED FOR COMMAND
\r
272 NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND
\r
273 NOLOGIN=100000 ;JOB DOES NOT NEED TO BE ALREADY LOGGED IN.
\r
274 NOACT=40000 ;COMMAND MUST BE DELAYED IF JOB HAS ACTIVE DEVICES.
\r
275 NOTRAN=20000 ;COMMAND MUST BE DELAYED IF SWAPPED TRANSFER IN PROGRESS
\r
276 NORUN=10000 ;AN EXPLICIT ^C MUST BE TYPED BY USER BEFORE COMMAND
\r
277 ; IS EXECUTED IF JOB IS RUNNING
\r
278 ; JOB MUST BE SWAPPED IN IF IT HAS LOGICAL CORE
\r
279 INCOR=4000 ;USED ONLY BY COMMAND DISPATCH
\r
280 ; DOES NOT APPEAR IN COMMAND TABLE
\r
281 INCORE=4000!NOTRAN ;COMMAND MUST BE DELAYED IF JOB HAS LOGICAL CORE
\r
282 ; WHICH IS ON DISK OR ON ITS WAY IN OR OUT.
\r
283 ; JOB WILL BE SWAPPED IN (SEE DLYCOM)
\r
284 ; AND IS NOT SITTING QUIETLY IN CORE(IE NO SWAPPING TRANSFER)
\r
285 PLSXPN=4 ;CORE MUST BE EXPANED IF STILL COMPRESSED BY SAVE NOT GOING
\r
286 ; TO COMPLETION(CONTROL C OR DEVICE OK?)
\r
287 ; MUST BE USED IN CONJUNCTION WITH COMMANDS WHICH
\r
288 ; NEED CORE AND NEED IT IN CORE
\r
290 ;BITS CHECKED AFTER RETURN FROM COMMAND SETUP ROUTINE
\r
292 CMWRQ=2000 ;REQUEUE JOB AFTER COMMAND WAIT
\r
293 NODATE=1000 ;DON'T PRINT DATE DURING JOB INTERROGATION
\r
294 NOINCK=400 ;NO CHECK FOR JOB INITIALIZATION (JNA=0)
\r
295 NOCRLF=200 ;NO PRINTING OF CRLF
\r
296 NOPER=100 ;NO PRINTING OF PERIOD
\r
297 TTYRNU=40 ;SET TTY TO USER MODE AND START JOB
\r
298 ; WHEN COMMAND RESPONSE STOPS TYPING
\r
299 TTYRNC=20 ;KEEP TTY IN COMMAND MODE AND START JOB
\r
300 ; WHEN COMMAND RESPONSE STOPS TYPING
\r
301 NOMESS=10 ;NO COMMAND RESPONSE EVER, DO NOT CALL TTYSTR
\r
303 ;T TAKEN ABOVE BY 'PLSXPN' BIT
\r
305 ERRFLG=1 ;COMMAND ERROR
\r
307 C START,START,NOPER!TTYRNU!INCORE!NOACT!NORUN
\r
308 C HALT,STOP,NOCORE!NOJOBN!NOLOGIN!NOINCK!CMWRQ
\r
309 C KJOB,KJOB,NOCORE!NOJOBN!NOINCK!NOLOGIN!NOACT!NORUN!NOPER!NOCRLF!NOMESS!NOTRAN
\r
310 C <>,CBLANK,NOCORE!NOJOBN!NOLOGIN!NOINCK!NOCRLF
\r
311 C R,RCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
312 C RUN,RUNCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
313 C CORE,CORE,NOCORE!NORUN!CMWRQ!INCORE!NOACT!NOTRAN
\r
314 C GET,GET,NOCRLF!NOPER!TTYRNC!NOCORE!NOACT!NORUN!NOTRAN
\r
315 C SAVE,SAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
317 C SSAVE,SSAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
319 C CONTINUE,CONT,NOPER!TTYRNU!INCORE!NORUN
\r
321 C D,DCOM,CMWRQ!INCORE
\r
322 C E,ECOM,NOCRLF!CMWRQ!INCORE
\r
325 C ASSIGN,ASSIGN,NOCORE
\r
326 C DEASSI,DEASSIGN,NOCORE!NOJOBN!NOINCK
\r
327 C DDT,DDTGO,NOPER!TTYRNU!INCORE!NORUN!PLSXPN
\r
329 C FINISH,CFINI,TTYRNC!NOACT!INCORE!NORUN
\r
331 C REENTER,REENTER,TTYRNU!NOPER!INCORE!NORUN!PLSXPN
\r
332 C CSTART,STARTC,TTYRNC!INCORE!NOACT!NORUN!PLSXPN
\r
333 C CCONTINUE,CONTC,TTYRNC!INCORE!NORUN
\r
335 C DETACH,DETACH,NOPER+NOCRLF+NOCORE!NOJOBN!NOINCK
\r
336 C ATTACH,ATTACH,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
338 C DAYTIME,DAYTIM,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
340 C TIME,RUNTIM,NOCORE!NOLOGIN!NOINCK
\r
342 C RESOURCES,FREDEV,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
344 C SCHEDULE,SKEDUL,NOCORE!NOJOBN!NOLOGIN!NOINCK
\r
347 C TALK,TALK,NOCRLF+NOPER+NOCORE!NOJOBN!NOLOGIN!NOMESS!NOINCK
\r
350 C LOGIN,CLOGIN,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
353 C LOGIN,CPOPJ,NOCORE!NOACT!NORUN!NOTRAN
\r
356 C REASSI,REASS,NOCORE!NOACT!INCORE!CMWRQ!NORUN
\r
358 C HELP,HELP,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN
\r
359 C SYSTAT,SYSTAT,NOCORE!NOLOGIN!NOACT!NORUN!NOCRLF!NOPER!TTYRNU!NOTRAN
\r
361 C COMPILE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
362 C CREATE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
363 C CREF,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
364 C DEBUG,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
365 C DELETE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
366 C DIRECT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
367 C EDIT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
368 C EXECUTE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
369 C LIST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
370 C LOAD,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
371 C MAKE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
372 C RENAME,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
373 C TECO,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
374 C TYPE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
375 C CTEST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN
\r
378 \f;GENERATE TABLE OF SIXBIT COMMAND NAMES
\r
384 DISPL=.-COMTAB ;LENGTH OF TABLE
\r
385 \f;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS
\r
391 \f;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE
\r
392 ;WITH FOLLOWING AC'S SET:
\r
393 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)
\r
395 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER
\r
396 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND
\r
397 ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA
\r
398 ;PROG=XWD PROTECTION,RELOCATION; 0 IF NO CORE
\r
401 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF
\r
402 ;NEEDED AND TTY IS STARTED
\r
404 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE
\r
405 ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY
\r
406 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET
\r
407 ;THE JOB TO A RUNABLE STATUS AND RETURN IMMEDIATELY
\r
411 COR0: JUMPE PROG,CPOPJ ;RETURN IF JOB DOES NOT HAVE CORE
\r
413 JSP TAC1,MONJOB ;SET TO RUN MONITOR JOB(PC IN EXEC MODE)
\r
414 ; RETURN HERE AT UUO LEVEL(NO ACS SET UP)
\r
415 MOVEI TAC1,ESTOP ;PUT ERROR STOP ON END OF PDL
\r
416 JSP TAC,MONSTR ;START MONITOR JOB BY SETTING UP ACS AND
\r
417 JOB1: PUSHJ PDP,RESET ;RELEASE ALL IO DEVICES ASSIGNED TO THIS JOB
\r
418 PUSHJ PDP,TTYFNU ;FIND TTY FOR THIS JOB(SETUP ITEM WITH JOB NO.)
\r
420 EXTERN ZERSWP,NOCORQ
\r
421 PUSHJ PDP,NOCORQ ;PUT JOB IN NO CORE Q
\r
422 PUSHJ PDP,ZERSWP ;CLEAR SWAP SPACE (IF ANY) FOR LOW SEG
\r
423 ; AND CLEAR SWP,SHF,IMGIN,IMGOUT FOR LOW SEG
\r
427 PUSHJ PDP,KILHGH ;HIGH SEG FOR THIS USER. RETURN CORE
\r
428 ; REMOVE HIGH SEG FROM THIS USER LOGICAL ADDRESSING SPACE
\r
429 ; IF NO OTHER USERS IN CORE ARE USING IT
\r
430 ; RETURN DISKL SPACE IF NO LONGER SHARABLE HIGH SEG
\r
432 MOVEI TAC,0 ;RETURN BOTH PHYSICAL AND LOGICAL CORE
\r
433 SOS (PDP) ;NEGATE SKIP RETURN WHICH CORE1 WILL DO
\r
434 JRST CORE1 ;GO DO IT AND RETURN TO CALLER
\r
435 \f; "PJOB" PRINT JOB NUMBER OF JOB TTY IS ATTACHED TO
\r
437 INTERNAL PJOB,DECLF
\r
439 PJOB: MOVE TAC,ITEM ;JOB NO.
\r
440 DECLF: PUSHJ PDP,RADX10 ;PRINT TAC AS DEC. THEN CRLF
\r
443 ; "KJOB" KILL ATTACHED JOB
\r
445 EXTERNAL JBTSTS,TTYKILM,CPOPJ
\r
446 INTERNAL FTTIME,JOBKL
\r
448 KJOB: JUMPE ITEM,JOBKB ;WAS JOB INITIALIZED?
\r
450 TLZN T,JLOG+JACCT ;TEST JACCT ALSO IN CASE COMMAND WAS DELAYED
\r
451 JRST KJOB2 ;IF JOB NOT LOGGED IN
\r
452 TLO T,JACCT ;DISABLE ^C
\r
453 MOVEM T,JBTSTS(ITEM)
\r
455 PUSHJ PDP,ALOGN1 ;ATTACH TTY
\r
457 MOVSI TAC,TTYRNU+NOMESS
\r
458 XORM TAC,-1(PDP) ;SET TTYRNU AND CLEAR NOMESS FOR COMRET
\r
459 MOVE TAC,[SIXBIT /LOGOUT/] ;NAME OF CUSP
\r
463 IFE FTSWAP+FTLOGIN,<
\r
464 JUMPE PROG,JOBKA ;YES. DOES JOB HAVE CORE IN MEMORY?
\r
466 PUSHJ PDP,GETMIN ;GET MINIMAL JOB AREA ON DISK OR CORE
\r
467 JUMPE PROG,DLYCM1 ;DELAY COMMAND IF CORE ASSIGNED ON DISK
\r
468 JSP TAC1,MONJOB ;YES, SCHEDULE MONITOR JOB(PC IN EXEC MODE)
\r
469 ;RETURN HERE AT UUO LEVEL WHEN SCHEDULED
\r
470 \fJOBKL: MOVEI TAC1,ESTOP ;PUT ESTOP ON END OF PDL
\r
471 JSP TAC,MONSTR ;GO SETUP ACS AND PD LIST
\r
472 PUSHJ PDP,JOB1 ;FLUSH CORE AFTER RELEASING DEVICES
\r
476 PUSHJ PDP,PRTTIM ;PRINT JUST TOTAL RUN TIME
\r
477 PUSHJ PDP,TTYSTR ;START TTY
\r
479 PUSHJ PDP,DEASTY ;DEASSIGN ALL BY TTY
\r
480 PUSHJ PDP,TTYKIL ;RETURN TTY TO VIRGIN STATE
\r
481 JRST KSTOP ;CLEAR JOB STATUS WORD AND STOP JOB
\r
487 JOBKB: SETZM -1(PDP) ;CLEAR NOJOBN SO COMRET WILL PRINT ERROR MSG.
\r
488 JRST ATT4 ;"NOT A JOB"
\r
489 \f; "START L" OR "START" - START AT LOC, L OR STARTING ADDRESS
\r
493 START: ;SAME AS CSTART, DIFF BY COMTAB BITS
\r
494 ; WHICH PUT TTY IN MONITOR OR USER MODE
\r
496 ; "CSTART L" OR "CSTART" - START AT LOC. L(TTY IN COMMAND MODE)
\r
498 STARTC: PUSHJ PDP,OCTIN ;CONVERT POSSIBLE OCTAL NO ARG.
\r
500 SKIPA TAC1,JOBSA(JDAT) ;NO START ADR. SPECIFIED RETURN
\r
503 JRST SNOARG ;NO ARG SPECIFIED RETURN
\r
505 JRST COMERA ;ILLEGAL CHARACTER
\r
508 PUSHJ PDP,CHKMED ;CHECK TO SEE IF HIGH SEG WHICH IS SHARABLE
\r
509 ; IF YES, TURN ON USER MODE WRITE PROTECT
\r
510 ; FOR THIS USER, AND SET MEDDLE BIT SO HE CANNOT
\r
512 JRST CHKSTR ;START JOB WITH PC IN USER MODE,
\r
513 ; IF START ADR IS NON-ZERO
\r
515 SNOARG: SKIPA TAC1,JOBSA(JDAT) ;NO. ARG SPECIFIED, USE START ADR SUPPLIED
\r
516 ; BY PROGRAM END STATEMENT AND STORED BY LINKING LOADER
\r
517 ; SKIP INTO REENTER, START WITH PC IN USER MODE
\r
519 \f;"REENTER" - REENTER USER PROGRAM
\r
523 REENTER:MOVE TAC1,JOBREN(JDAT) ;GET REENTER ADDRESS FORM JOB DATA AREA
\r
524 JRST CHKSTR ;START JOB WITH PC IN USER MODE
\r
525 ; IF START ADR IS NON-ZERO
\r
527 ; "DDT" - START EXECUTION AT DDT IN USER AREA
\r
531 DDTGO: MOVE TAC1,JOBDDT(JDAT) ;DDT STARTING ADR. IN JOB DATA AREA
\r
534 ;ROUTINE TO CHECK TO SEE IF STARTING ADDRESS IS NON-ZERO, AND START USER IF OK
\r
536 CHKSTR: JUMPN TAC1,USTART ;IS IT NON-ZERO?, IS YES
\r
537 ; STORE OLD PC IN JOBOPC IN JOB DATA AREA
\r
538 ; THEN START WITH PC IN USER MODE
\r
539 JSP TAC,ERRMES ;NO, PRINT "NO START ADR"
\r
540 ASCII /NO START ADR
\r
543 ; "STOP" OR "<CONTROL>C"
\r
544 ;SCANNER ROUTINES DUMMY UP STOP WHEN CONTROL C TYPED IN
\r
545 ;STOP MUST BE DELAYED IF THIS JOB IS SYSTEM TAPE USER
\r
546 ;AND SYSTEM TAPE IS ACTIVE, OTHERWISE, THE JOB WILL NOT BE
\r
547 ;STOPPED WHEN DONE USING THE SYSTEM TAPE.
\r
550 EXTERNAL STUSER,JOB,PJBSTS,IOWQ,JOBDAC
\r
552 STOP: JUMPE ITEM,STOP8
\r
553 CAMN ITEM,STUSER ;IS THIS SYSTEM TAPE USER?
\r
554 JRST CFINS ;YES, DO FINISH SYS COMMAND
\r
557 PUSHJ PDP,STOPCK ;CAN THE JOB STOP?
\r
558 JRST DLYCM1 ;NO. DELAY IT.
\r
560 PUSHJ PDP,STOP1 ;STOP JOB
\r
561 STOP8: IFE FTTTYSER,<
\r
562 JSP TAC,CONMES ;PRINT "^C CRLF CRFL PERIOS"
\r
566 IFN FTTTYSER,< POPJ PDP,0>
\r
568 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)
\r
570 CONTC: ;SAME AS CONT
\r
572 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF
\r
575 CONT: MOVSI TAC1,JERR
\r
576 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET?
\r
577 POPJ PDP, ;COMMAND DECODER WILL DO REST
\r
578 JSP TAC,ERRMES ;YES, PRINT CANT CONTINUE
\r
580 ASCIZ /CAN'T CONTINUE
\r
582 \f; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB
\r
583 ; "CORE" WITH NO ARG. WILL PRINT NO OF FREE BLOCKS LEFT
\r
584 ; WITHOUT AFFECTING CURRENT ASSIGNMENT OF CORE
\r
585 ; JOB NOT IN MIDDLE OF SWAPPING
\r
586 ; EITHER ON DISK OR CORE OR NEITHER PLACE
\r
590 CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS
\r
591 JRST COR3 ;NO ARG. SPECIFIED, JUST TYPE FREE BLOCK LEFT
\r
592 JRST COMERA ;ILLEGAL DECIMAL CHARACTER RETURN
\r
594 JUMPE TAC1,COR0 ;RELEASE DEVICES IF USER ASKING FOR 0 CORE
\r
597 JUMPE TAC1,COR1 ;ASSIGN JUST MINIMAL CORE AND RELEASE DEVICES
\r
598 ; IF ASKING FOR 0 CORE
\r
600 LSH TAC1,12 ;CONVERT 1K BLOCKS TO WORDS
\r
602 MOVEI TAC,-1(TAC1) ;HIGHEST RELATIVE ADDRESS=LENGTH-1 OF LOW SEG
\r
603 PUSHJ PDP,CORE0 ;TRY TO ASSIGN CORE
\r
604 JRST COR2 ;CORE NOT AVAILABLE. GO PRINT MESSAGE
\r
605 POPJ PDP, ;OK RETURN, CORE ASSIGNED ON DISK OF MEMORY
\r
607 ;USER ASKING FOR 0K
\r
608 COR1: JUMPN PROG,COR0 ;GO RELEASE ALL DEVICES IF HE HAS CORE IN MEMORY YET
\r
609 PUSHJ PDP,GETMIN ;NO, CORE ON DISK OR HAS NONE, ASSIGN MINIMAL
\r
610 ; AREA(FLUSH HIGH SEG TOO) IN CORE OR DISK
\r
611 JRST DLYCM ;AND DELAY COMMAND TILL CORE IS IN MEMORY
\r
612 ; DLYCM WILL SWAP IT IN.
\r
614 \fCOR2: IFN FTTTYSERM,<
\r
615 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB ADR
\r
617 PUSHJ PDP,INLMES ;PRINT ? FOR PATCH
\r
620 COR3: PUSHJ PDP,PRTSEG ;PRINT SIZE OF LOW SEG
\r
623 PUSHJ PDP,PRTHGH ;PRINT SIZE OF HIGH SEG (+0 IF NONE)
\r
624 ; NOTHING IF NOT 2 REG. MACHINE OR SOFTWARE
\r
631 MOVE TAC,CORTAL ;NO. OF FREE 1K BLOCKS
\r
635 MOVE TAC,CORMAX ;PRINT MAX. NO. OF BLOCKS IN PHYSICAL CORE
\r
636 LSH TAC,-12 ;AVAILABLE TO A SINGLE USER(AS SET
\r
637 ; BY BUILD AND/OR ONCE)
\r
639 PUSHJ PDP,RADX10 ;PRINT NO. OF 1K BLOCKS AVAILABLE
\r
650 MOVE TAC,VIRTAL ;PRINT AMOUNT OF FREE SWAP SAPCE LEFT
\r
651 JRST RADX10 ;IN DECIMAL
\r
653 \f; "SSAVE FILENAM.EXT [PROJ,PROG] CORE"
\r
654 ;WORKS LIKE SAVE, EXCEPT THAT HIGH SEG IS SAVED AS SHARABLE(EXT=SHR)
\r
655 ;INSTEAD OF NON-SHARABLE(EXT=HGH)
\r
657 ; "SAVE FILE-NAME[PROJ.,PROG.] CORE" - SAVES JOB AREA ON RETRIEVABLE DEVICE
\r
658 ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB
\r
659 ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSGINMENTS, AC'S OR PC
\r
662 TLO IOS,NSRBIT ;SET FLAGE FOR NON-SHARABLE EXT(HGH)
\r
664 SSAVE: HRRI IOS,SAVJOB ;SETUP TO RUN SAVEJOB (IOS CLEARED BEFORE
\r
665 PUSHJ PDP,CTEXT1 ;DISPATCH
\r
666 SETZM JBTPRG(ITEM) ;CLEAR JOB'S PROGRAM NAME FOR ROOM
\r
669 ; "GET DEVICE:FILE-NAME[PROJ.,PROG.] CORE" - SETS UP JOB AREA FROM RETREIVABLE
\r
671 ;DEVICE AND ASSIGNS CORE.
\r
673 GET: MOVEI IOS,GETJOB ;SETUP TO RUN GETJOB
\r
674 PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
675 SETZM JBTPRG(ITEM) ;CLEAR NAME FOR RCOM
\r
677 ; JOB DATA AREA FOR MONITOR JOB
\r
679 IFN FTLOGIN,< ;AUTOMATIC LOGIN AFTER DSK REFESH OR WHEN REFLAG SET
\r
683 LOGREF: MOVEM TAC,PRJPRG(ITEM) ;PRJ,PRG NRS. IN REFLAG
\r
685 IORM TAC,JBTSTS(ITEM)
\r
686 SETZM -1(PDP) ;CLEAR ALL FLAGS FOR COMRET
\r
687 SETZM REFLAG ;ONLY ONCE
\r
690 \f;"HELP" -HELP COMMAND
\r
694 IFN FTLOGIN,< EXTERNAL HELPPP
\r
702 HELP: IFN FTLOGIN,<
\r
705 MOVE TAC,[SIXBIT /HELP/] ;CUSP NAME
\r
708 SYSTAT: IFN FTLOGIN,<
\r
711 MOVE TAC,[SIXBIT /SYSTAT/] ;CUSP NAME
\r
714 EXTERNAL JBTSTS,TTYATT
\r
718 IFN FTLOGIN,< EXTERNAL PRJPRG
\r
719 MOVEM TAC,PRJPRG(ITEM)
\r
721 ANDCAM TAC,JBTSTS(ITEM)
\r
723 IFN FTSWAP,<EXTERNAL TTYATT
\r
724 ALOGN1: PUSHJ PDP,TTYATT ;MAKE SURE TTY IS ATTACHED IN CASE
\r
725 ; THIS COMMAND MUST BE DELAYED
\r
726 ; BECAUSE NO CORE YET.
\r
734 CCLRUN: MOVE TAC,[SIXBIT /COMPIL/] ;CUSP NAME
\r
737 ;"LOGIN" - LOGIN COMMAND
\r
744 LOGDET: JSP TAC,ERRMES
\r
745 ASCIZ /PLEASE KJOB OR DETACH
\r
747 CLOGIN: TLNE T,JLOG ;FORCE USER TO LOGOUT BEFORE
\r
748 JRST LOGDET ; LOGGING IN ANEW.
\r
750 EXTERN VIRTAL,LOGSIZ
\r
751 MOVE TAC,VIRTAL ;AMOUNT OF FREE VIRTUAL CORE LEFT
\r
752 CAIL TAC,LOGSIZ ;IS THERE AT LEAST 2K FOR LOGIN?
\r
753 ; CUSTOMER CAN REDEFINE TO BE BIGGER THAN 2
\r
754 ; WITH MONGEN DIALOG
\r
756 MOVEI ITEM,0 ;NO, SET JOB NUMBER TO 0 FOR COMMAND DECODER
\r
757 JRST COR2 ;AND GO TELL USER AMOUNT OF CORE LEFT
\r
759 CLOG2: SKIPE TAC,REFLAG ;REFLAG SET NON-ZERO FOR AUTOMATIC LOGIN?
\r
760 JRST LOGREF ;YES, LOG USER IN WITHOUT RUNNING CUSP
\r
761 ; SO HE CAN RELOAD THE DISK AFTER REFRESH
\r
762 MOVE TAC,SYSPP ;SET PRJPRG TO SYSPP
\r
763 PUSHJ PDP,ALOGIN ;AUTOMATIC LOGIN
\r
764 MOVSI TAC,JACCT ;FLAG LOGIN OR LOGOUT RUNNING AND
\r
765 IORM TAC,JBTSTS(ITEM);DISABLE ^C,
\r
766 MOVE TAC,[SIXBIT /LOGIN/] ;CUSP NAME
\r
769 \f; "R CUSTNAME CORE" - DOES "RUN SYS:CUSPNAME"
\r
771 RCOM: MOVEI TAC,0 ;NO FILE NAME, TTY WILL SUPPLY IT
\r
774 ARCOM: IFN FTTTYSER,< PUSHJ PDP,SKPBRK>
\r
775 ARCOM1: MOVEM TAC,JBTPRG(ITEM) ;STORE FILE NAME
\r
776 MOVSI TAC1,(SIXBIT /SYS/) ;READ FROM SYS DEVICE
\r
778 ; "RUN DEVICE:FILE[PROJ.PROG.] (CORE)"
\r
779 ;DOES A CORE,GET,START ALL IN ONE
\r
780 ;IF CORE ARG IS MISSING. SIZEIN DIRECTORY IS USED
\r
781 ;JOB ON DISK OR IN CORE OR NO CORE, BUT NOT IN MIDDLE OF SWAP
\r
785 RUNCOM: PUSHJ PDP,CTEXT1 ;GET DEVICE NAME FROM COMMAND STRING
\r
786 SETZM JBTPRG(ITEM) ;CLEAR FILE NAME
\r
787 RUNCO2:RUNC1: MOVEI IOS,RUNJOB
\r
788 RUNCM: PUSHJ PDP,GETMIN ;GET MININAL JOB AREA IN CORE OR DISK
\r
789 JUMPN PROG,SGSET ;WAS CORE ASSIGNED IN MEMORY? IF YES, GO SCANARGS
\r
791 JRST COR2 ;NO. PRINT "0K CORE LEFT"
\r
794 JRST DLYCM ;NO. DELAY COMMAND UNTIL IN CORE
\r
796 \f; "ASSIGN DEV:NAME" - ASSIGN DEVICE TO JOB AND GIVE IT LOGICAL NAME
\r
798 EXTERNAL DEVLST,PJOBN,SYSTAP
\r
800 ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT
\r
801 JUMPE TAC1, NOTENF ;NO ARGUEMNT TYPED IF 0
\r
802 IFN FTLOGIN,<EXTERN PRJPRG
\r
803 CAME TAC,[SIXBIT .SYS.]
\r
805 HLRZ T1,PRJPRG(ITEM)
\r
806 CAIN T1,1 ;PROJECT NR, 1?
\r
810 MOVE T1, TAC1 ;SAVE DEVICE NAME
\r
812 PUSH PDP,DEVDAT ;SAVE TTY
\r
816 PUSH PDP, TAC ;SAVE INPUT BYTE POINT
\r
823 ASSG3: MOVEI TAC1,ASSCON ;SETUP ASSIGNED BY CONSOLE BIT
\r
824 HLRZ DEVDAT, DEVLST
\r
825 ASSG0: MOVE TAC,DEVNAM(DEVDAT)
\r
826 CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH?
\r
828 ASSG4: CAMN T1,[SIXBIT /DSK/] ;IS THIS A DISC?(IF YES,
\r
829 JRST ASSG5 ;BYPASS CHECK FOR SYSTEM TAPE AND ASSIGN BELOW
\r
830 CAMN TAC,SYSTAP ;IS NEXT DEVICE IN LIST THE SYSTEM TAPE?
\r
831 JRST ASSFIN ;YES, DO NOT ASSIGN. CLEAR DIRECTORY IN CORE BIT
\r
832 ASSG5: PUSHJ PDP,ASSASG ;NO, TRY TO ASSGIN DEVICE
\r
833 JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB
\r
834 JRST ASSFIN ;ASSIGNED
\r
835 \f;SYSTEM TAPE OR NOT MATCH OF ARG AND PHYSICAL NAME.
\r
837 ASSG1: CAMN TAC,SYSTAP ;IS THIS SYSTEM TAPE?
\r
839 LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS DEVICE
\r
840 TRZ TAC,-1 ;COMAPRE LEFT HALF ONLY
\r
842 PUSHJ PDP, ASSASG ;MATCH. TRY TO ASSIGN IT
\r
843 JRST ASSG2 ;KEEP LOOKING
\r
844 JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY UNASSIGNED
\r
846 ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT)
\r
847 JUMPN DEVDAT, ASSG0
\r
849 POP PDP,DEVDAT ;RESTORE TTY DDB
\r
854 JRST NOTDEV ;PRINT NO SUCH DEVICE
\r
856 IFN FTLOGIN,<EXTERN STREQ,SYSTAP
\r
857 ASSG7: PUSHJ PDP,CTEXT1
\r
864 \f;ALREADY ASSIGNED TO ANOTHER JOB
\r
871 JRST DECLF ;PRINT JOB NUMBER CRLF
\r
874 LDB TAC,PJOBN ;GET JOB NUMBER FOR DEVICE
\r
875 POP PDP,DEVDAT ;GET DDB FOR TTY
\r
876 PUSH PDP,TAC ;SAVE JOB NO.
\r
877 MOVEI TAC,ASSMS2 ;TYPE ERROR MESSAGE
\r
879 POP PDP,TAC ;GET JOB NO. BACK
\r
880 JRST DECLF ;AND TYPE IT
\r
883 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB /
\r
884 \f;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME
\r
885 ASSFIN: SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME
\r
887 POP PDP,TAC ;RESTORE INPUT BYTE POINTER
\r
888 PUSH PDP,DEVDAT ;SAVE DDB ADDRESS
\r
891 EXCH DEVDAT,0(PDP) ;GET TTYDDB, SAVE DEVICE DDB
\r
893 PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME
\r
894 SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED?
\r
895 PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE
\r
898 MOVEI TAC,LOGERR ;YES, PRINT ERROR
\r
899 MOVE DEVDAT,-3(PDP) ;RESTORE TTY DDB
\r
901 MOVEI TAC,0 ;CLEAR LOGICAL NAME FOR THIS DEVICE
\r
902 ASSF1: POP PDP,DEVDAT
\r
903 MOVEM TAC,DEVLOG(DEVDAT);STORE IN DEVICE DATA BLOCK
\r
904 MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT
\r
905 ANDCAB TAC1,DEVMOD(DEVDAT) ;SETUP TAC1 WITH DEVICE CHARACTERISTICS FOR ASGHGH
\r
908 PUSHJ PDP,ASGHGH ;GO CHECK IF THIS DEVICE HAS INITIALIZED ANY SHARED SEGMENTS
\r
909 ; IF YES, CLEAR SEG NAMES SO NO NEW SHARING (DTA,MTA ONLY)
\r
911 MOVE TAC1,DEVNAM(DEVDAT) ;PHYSICAL NAME
\r
912 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
913 PUSHJ PDP,PRNAME ;PRINT IT
\r
919 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE. /
\r
921 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE
\r
925 DEASSI: JUMPE ITEM,CPOPJ ;NO-OP IF NO JOB NUMBER
\r
926 PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
927 JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BY TTY
\r
928 MOVE TAC, TAC1 ;DEVICE NAME
\r
929 PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE
\r
930 JRST DEAER1 ;NOT FOUND
\r
931 PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT
\r
932 JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED
\r
933 POPJ PDP, ;DEVICE DEASSIGNED
\r
936 DEAER1: MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
937 JSP TAC,ERRMES ;PRINT NO SUCH DEVICE
\r
939 ASCIZ /NO SUCH DEVICE
\r
942 DEAER2: MOVE TAC1,DEVNAM(DEVDAT) ;PRINT PHYSICAL DEVICE NAME
\r
943 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
947 ASCIZ / WASN'T ASSIGNED
\r
949 \fINTERNAL FTREASSIGN
\r
957 ;CALL MOVE AC,JOB NUMBER
\r
958 ; MOVE AC+1,SIXBIT /DEVICE/
\r
959 ; CALL AC,[SIXBIT /REASSIGN/]
\r
960 ;IF C(AC)=0, JOB HAS NOT BEEN INITIALIZED
\r
961 ;IF C(AC+1)=0, DEVICE NOT ASSIGNED TO THIS JOB OR DEVICE IS A TTY
\r
964 EXTERNAL PUUOAC,JOB
\r
966 REASSI: LDB UUO,PUUOAC
\r
968 PUSH PDP,@UUO ;STACK JOB NUMBER TO BE REASSIGNED TO
\r
970 MOVE TAC1,@UUO ;DEVICE NAME
\r
971 MOVE ITEM,JOB ;THIS JOB NUMBER
\r
974 ;"REASSIGN DEV:JOB" - REASSIGN DEVICE "DEV" TO JOB "JOB"
\r
977 PUSHJ PDP,CTEXT ;GET DEVICE NAME
\r
978 JUMPE TAC,NOTENF ;NULL NAME?
\r
979 MOVE UUO,TAC1 ;SAVE IT IN UUO
\r
980 PUSHJ PDP,DECIN1 ;GET NEW JOB NUMBER
\r
981 JRST NOTENF ;NONE SPECIFIED, DOESN'T RETURN IF ERROR
\r
982 JRST COMERA ;ILLEGAL CHARACTER
\r
983 PUSH PDP,TAC1 ;PUT JOB NUMBER ON STACK, DEVICE
\r
984 MOVE TAC1,UUO ;NAME IN TAC1
\r
985 SETZM UUO ;SET COMMAND SWITCH
\r
987 ;ROUTINE COMMON TO REASSIGN UUO AND COMMAND
\r
989 EXTERNAL JBTSTS,PJOBN,JOBFDV
\r
991 REASS1: EXCH ITEM,(PDP) ;NEW JOB NO. IN ITEM
\r
992 CAILE ITEM,JOBN ;IS JOB NUMBER OUT OF RANGE
\r
993 JRST REASE2 ;YES, DO NOT REASSIGN
\r
994 MOVE TAC,JBTSTS(ITEM) ;NEW JOB STATUS
\r
995 EXCH ITEM,(PDP) ;RESTORE ITEM AND STACK
\r
996 TLNN TAC,JNA ;DOES NEW JOB EXIST?
\r
999 PUSHJ PDP,DEVSRC ;SEARCH FOR DEV
\r
1000 JRST REASE2 ;NOT FOUND
\r
1002 CAME TAC,ITEM ;ASSIGNED TO THIS JOB
\r
1004 MOVE TAC,DEVMOD(DEVDAT)
\r
1006 TLNE TAC,DVTTY ;IS IT A TTY?
\r
1007 JRST REASE6 ;YES. CAN'T BE REASSIGNED
\r
1008 TRNN TAC,ASSPRG ;IS DEVICE INITED?
\r
1010 JUMPN UUO,REASS4 ;YES. COMMAND LEVEL?
\r
1011 HRL DEVDAT,(PDP) ;YES. SCHEDULE RELEASE
\r
1012 MOVEM DEVDAT,JOBFDV(JDAT)
\r
1014 MOVE DEVDAT,-2(PDP)
\r
1015 MOVSI TAC1,TTYRNC ;SET TTYRNC SO JOB WILL RUN
\r
1019 HLRZ TAC,JOBFDV(JDAT)
\r
1021 HRRZ DEVDAT,JOBFDV(JDAT)
\r
1023 SETOM UUO ;SET FLAG TO STOP JOB
\r
1024 REASS4: HRRZ DSER,DEVSER(DEVDAT)
\r
1025 HRRZM DEVDAT,JOBFDV(JDAT)
\r
1027 \fREASS2: MOVE DEVDAT,USRJDA(UCHN) ;GET XWD UUO BITS,DDB ADDRESS
\r
1028 HRRZ TAC,JOBFDV(JDAT) ;GET ADDR. OF DDB SAVED BY COMMAND
\r
1029 PUSH PDP,UCHN ;SAVE USER CHANNEL
\r
1030 CAIN TAC,(DEVDAT) ;IS CHOSEN DEVICE ON THHS CHANNEL?
\r
1031 PUSHJ PDP,RELEA5 ;YES, RELEASE DEVICE
\r
1034 MOVE DEVDAT,JOBFDV(JDAT)
\r
1035 MOVE ITEM,JOB ;CURRENT JOB NUMBER
\r
1036 REASS3: MOVEI TAC,ASSCON ;ASSIGN IT BY CONSOLE
\r
1037 IORM TAC,DEVMOD(DEVDAT)
\r
1039 DPB ITEM,PJOBN ;PUT IN NEW JOB NUMBER
\r
1044 REASE1: POP PDP,TAC
\r
1045 JUMPE UUO,ATT4 ;JOB NEVER WAS INITIATED
\r
1046 REASE4: SETZM @UUO ;CLEAR C(AC)
\r
1049 REASE2: MOVEI TAC,NOTDEV ;NO SUCH DEVICE
\r
1050 REASE5: POP PDP,TAC1
\r
1054 REASE3: MOVEI TAC,DEAER2 ;WASN'T ASSIGNED
\r
1057 REASE6: MOVEI TAC,REASE7
\r
1059 REASE7: MOVE TAC1,DEVNAM(DEVDAT)
\r
1060 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1063 ASCIZ / CAN'T BE REASSIGNED
\r
1066 \fINTERNAL FTATTACH
\r
1069 ;"ATTACH DEVNAME" -ATTACHES A PREVIOUSLY PARTITIONED DEVICE
\r
1070 ; NOTE-MUST BE LOGGED IN UNDER [1,1] TO DO THIS
\r
1071 ; "ATTACH N [PROJ.,PROG.]" - ATTACH CONSOLE TO JOB N
\r
1072 ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -2(PDP)
\r
1073 ;BY THE COMMAND DECODER
\r
1076 EXTERNAL TTYATT,JOBN,TTYFND
\r
1078 ATTACH: IFE FTTTYSER,<
\r
1079 MOVE AC2,TAC ;SAVE BYTE POINTER>
\r
1080 PUSHJ PDP,DECIN ;GET JOB NO.
\r
1081 JRST NOTENF ;NOT A NUMBER OR NONE SPECIFIEED
\r
1083 JRST DEVATT ;WANTS TO ATTACH A DEVICE
\r
1089 SKIPE TAC1 ;0 IS ILLEGAL
\r
1090 CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG?
\r
1091 JRST ATT1 ;ILLEGAL JOB NUMBER
\r
1092 MOVSI T1,JNA ;HAS THIS JOB NO BEEN ASSIGNED?
\r
1093 TDNN T1,JBTSTS(TAC1)
\r
1094 JRST ATT4 ;NO, PRINT ERROR
\r
1097 MOVE IOS,TAC1 ;SAVE JOB NO.
\r
1098 PUSHJ PDP,PJPGNO ;GET PROJ,-PROG. NOS. ARG(IF ERROR, PDP SUP LEVEL
\r
1099 ; OFF 1, PRINT ERROR, AND DO NOT RETRY HERE
\r
1101 MOVEM IOS,TAC1 ;RESTORE
\r
1102 SKIPN AC2 ;DID USER TYPE IN A PROG,PROG # IN []'S?
\r
1103 MOVE AC2,PRJPRG(ITEM) ;NO. ASSUME PROJ,PROG NUMBER FOR CURRENT JOB
\r
1104 ; SO USER CAN AVOID TYPEING PROGPROG NO. IF DOING
\r
1105 ; FROM 1 JOB TO ANOTHER UNDER SAME PROJ,PROG
\r
1106 CAME AC2,PRJPRG(TAC1) ;IS THIS THE SAME PERSON WHO DETACHED FROM THIS JOB NUMBER?
\r
1107 JRST ATT3 ;NO-ERROR
\r
1110 MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM
\r
1111 PUSHJ PDP,TTYATT ;NO, ATTACH TTY
\r
1112 JRST ATT2 ;ERROR CAN'T ATTACH
\r
1113 MOVEM DEVDAT,-2(PDP) ;CHANGE DEV DATA BLOCK ADDRESS
\r
1116 PUSHJ PDP,TSETBF ;INITIALIZE TTY INPUT BUFFER
\r
1118 JRST TTYFND ;ATTACHED, GO SET UP OUTP. BYTE PTR.
\r
1122 DEVATT: IFE FTTTYSER,<
\r
1123 MOVE TAC,AC2 ;RESTORE BYTE POINTER>
\r
1124 PUSHJ PDP,CTEXT1 ;GET DEVICE ARGUMENT
\r
1125 JFCL ;SHOULD NEVER RETURN
\r
1126 MOVE T,PRJPRG(ITEM) ;GET PROJ.-PROG. NOS.
\r
1127 CAME T,SYSPP ;PRJPRG = [1,1]?
\r
1128 JRST ATT5 ;NO - ERROR
\r
1129 MOVE TAC,TAC1 ;YES-SET UP DEVICE NAME
\r
1130 PUSH PDP,DEVDAT ;SAVE DDB FOR THIS TTY
\r
1131 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1132 JRST TEMP1 ;NOT FOUND
\r
1133 LDB T,PJOBN ;GET JOB NUMBER
\r
1134 JUMPN T,ATT6 ;IS IT = 0?
\r
1135 DPB ITEM,PJOBN ;SET JOB NUMBER
\r
1136 MOVE TAC,DEVMOD(DEVDAT); CHECK TO SEE IF THIS IS A TTY
\r
1138 TLNE TAC,DVTTY ;IS IT A TTY?
\r
1139 HRRM DEVDAT,TTYTAB(TAC1) ;SET TRANS TABLE TO POINT TO DDB
\r
1144 ATT1: JSP TAC,ERRMES
\r
1145 ASCIZ /ILLEGAL JOB NUMBER
\r
1147 ATT2: MOVE TAC1,DEVNAM(DEVDAT) ;[PRINT PHYSICAL NAME
\r
1148 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1151 ASCIZ / ALREADY ATTACHED
\r
1153 ATT3: JSP TAC,ERRMES
\r
1154 ASCIZ /CAN'T ATT TO JOB
\r
1156 ATT4: JSP TAC,ERRMES
\r
1159 ATT5: JSP TAC,ERRMES
\r
1160 ASCIZ /CAN'T ATT DEV
\r
1162 ATT6: POP PDP,DEVDAT
\r
1167 \fINTERNAL FTATTACH
\r
1170 ;"DETACH" - DETACH CONSOLE FROM JOB
\r
1171 ;"DETACH DEVNAM" - DETACHES DEVICE FROM THE SYSTEM SOFTWAREWISE
\r
1172 ; NOTE - MUST BE LOGGED IN UNDER [1,1] TO DO THIS
\r
1178 DETACH: JRST TTYDET ;GO DETACH TTY
\r
1182 EXTERNAL PRJPRG,SYSPP,PUNIT,TTYTAB,PJOBN
\r
1183 DETACH: PUSHJ PDP,CTEXT1 ;GET ARGUMENT
\r
1184 JUMPE TAC1,TTYDET ;ONLY "DET" TYPED
\r
1185 MOVE T,PRJPRG(ITEM) ;GET PROJ.-PROG. NUMBER
\r
1186 CAME T,SYSPP ;PRJPRG = [1,1]?
\r
1187 JRST LOGER1 ;NO-PRINT ERROR MSG.
\r
1188 MOVE TAC,TAC1 ;YES-SET UP DEVICE NAME
\r
1189 PUSH PDP,DEVDAT ;SAVE TTY DDB
\r
1190 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1191 JRST TEMP1 ;DEVICE NOT FOUND
\r
1192 MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS DSK
\r
1193 TLNE TAC,DVDSK ;IS IT THE DSK?
\r
1194 JRST TEMP1 ;YES-PRINT ERROR MSG.
\r
1195 MOVEI TAC1,ASSCON ;FOUND-SET UP ASSIGNED BY CONSOLE
\r
1196 PUSHJ PDP,ASSASG ;TRY TO ASSIGN
\r
1197 JRST TEMP2 ;CAN'T ASSIGN
\r
1198 TLNE DEVDAT,SYSDEV ;IS THIS SYSTEM DEVICE?
\r
1199 JRST TEMP1 ;YES-PRINT ERROR MSG.
\r
1200 XOR T,T ;NO-SET TO ZERO
\r
1201 DPB T,PJOBN ;SET JOB NO. TO NULL JOB
\r
1202 MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS A TTY
\r
1203 TLNN TAC,DVTTY ;IS IT A TTY?
\r
1204 JRST .+4 ;NO-GO AHEAD
\r
1205 LDB TAC,PUNIT ;YES-SET UPO FOR SCNSER
\r
1206 MOVEI TAC1,-1 ;SET LEFT HALVE TO TTYTAB TO -1
\r
1207 HRRM TAC1,TTYTAB(TAC) ;SO THAT SCNSER CHECKS FOR THIS
\r
1208 POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1209 POPJ PDP, ;SUCCESSFUL RETURN
\r
1210 \fTEMP1: POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1211 JRST DEAER1 ;PRINT ERROR MSG. AND RETURN
\r
1213 IFE FTTTYSER,< POP PDP,DEVDAT ;RESTORE TTY DDB
\r
1214 JRST ASSER1+1 ;PRINT ERROR MSG. AND RETURN
\r
1219 LOGER1: JSP TAC,ERRMES
\r
1220 ASCIZ /CAN'T DET DEV
\r
1222 >> ;CLOSE BOTH FTLOGIN AND FTATTACH CONDITIONALS.
\r
1223 \f;"DAYTIME" - PRINT TIME OF DAY
\r
1225 EXTERNAL TIME,THSDAT,MONTAB,JIFMIN
\r
1230 PUSHJ PDP,DECIN ;WAS AN ARGUMENT TYPED?
\r
1231 JRST DAYTM1 ;NO, PRINT TIME
\r
1232 JRST COMERA ;ERROR
\r
1233 HLRZ TAC,PRJPRG(ITEM) ;YES
\r
1234 CAIE TAC,1 ;IS THIS PROJECT 1?
\r
1235 JRST DAYTM1 ;NO, PRINT TIME OF DAY ANYWAY(IGNORE ARG)
\r
1236 MOVE TAC,TAC1 ;YES, RESET TIME ACCORDING TO ARGUMENT
\r
1239 ADD TAC,TAC1 ;COMPUTE MINUTES
\r
1240 IMULI TAC,JIFMIN ;COMPUTE JIFFIES
\r
1241 MOVEM TAC,TIME ;AND STORE
\r
1244 DAYTM1: MOVE TAC,THSDAT ;PRINT TODAY'S DATE
\r
1246 EXCH TAC,TAC1 ;YEAR AND MONTH IN TAC1
\r
1247 PUSHJ PDP,DECP1 ;ADD 1 TO DAY(IN TAC) AND PRINT DECIMAL
\r
1251 MOVE TAC,MONTAB(TAC) ;MONTH
\r
1252 DPB TAC,[POINT 21,DAMESS,27]
\r
1254 PUSHJ PDP,CONMES ;PRINT DAY
\r
1255 MOVEI TAC,^D64(TAC1)
\r
1256 PUSHJ PDP,RADX10 ;PRINT YEAR
\r
1258 MOVE TAC,TIME ;PRINT TIME OF DAY
\r
1262 ;"TIME (JOB NO.)" - PRINT TOTAL AND INCREMENTAL RUNNING TIME FOR A JOB
\r
1263 ;FOLLOWED BY KILO-CORE TICKS
\r
1264 ;"TIME 0" IMPLIES RUNTIME FOR NULL JOB AND THE TOTAL TIME SPENT SHUFFLING USERS
\r
1265 ; IF NO JOB NO. GIVEN-TIME WILL BE FOR CURRENTLY LOGGGED IN JOB NO.
\r
1267 EXTERNAL RTIME,TTIME,SHFWRD,WDPJIF,JOBN,JBTSTS,CLRWRD,LSTWRD
\r
1269 RUNTIM: PUSHJ PDP,DECIN ;GETJOB NO. ARG.
\r
1270 JRST RUN1 ;NO ARG. GIVEN - LOGGED IN?
\r
1271 JRST COMERA ;ILLEGAL DECIMAL CHARACTER RETURN
\r
1272 JUMPE TAC1,RUN2 ;RUNTIME 0 GIVEN
\r
1273 CAIL TAC1,JOBN ;JOB NO. TO BIG?
\r
1274 JRST ATT1 ;YES,ILLEGAL JOB. NO.
\r
1275 MOVE TAC,TTIME(TAC1) ;TIME SINCE LAST LOGGIN
\r
1276 JRST PRTIME ;PRINT AND RETURN
\r
1278 RUN2: PUSHJ PDP,INLMES ;PRINT
\r
1280 ASCIZ /SHFL / ;"SHUFFLING "
\r
1281 MOVE TAC,SHFWRD ;NO. WORDS SHUFFLED
\r
1282 IDIVI TAC,WDPJIF ;NO.WORDS/JIFFY USING BLT
\r
1283 PUSHJ PDP,PRTIME ;PRINT SHUFFLE TIME
\r
1288 PUSHJ PDP,PRTIME ;PRINT TIME SPENT CLEARING CORE
\r
1292 PUSHJ PDP,PRTIME ;PRINT TME SPENT "LOST" RUNNING NULL JOB
\r
1293 PUSHJ PDP,INLMES ;PRINT
\r
1294 ASCIZ /NULL / ;"NULL TIME "
\r
1295 MOVE TAC,TTIME ;PRINT NULL JOB RUNNING TIME
\r
1296 PUSHJ PDP,PRTIME ;
\r
1297 PUSHJ PDP,INLMES ;PRINT TOTAL SYSTEM UP TIME
\r
1300 JRST PRTIME ;AND RETURN
\r
1304 MOVEI TAC,0 ;GET SET TO CLEAR INCREMENTAL RUN TIME
\r
1307 MOVSI TAC,JLOG ;IS JOB LOGGED IN?
\r
1308 TDZN TAC,JBTSTS(ITEM) ;TEST JOB STATUS BITS AND CLEAR TAC ALWAYS
\r
1309 JRST NOTENF ;NO, NEED MORE ARGUMENTS
\r
1311 EXCH TAC,RTIME(ITEM) ;GET CURRENT INCR. TIME AND CLEAR
\r
1312 PUSHJ PDP,PRTIME ;PRINT TIME SINCE LAST TIME COMM.
\r
1313 PRTTIM: MOVE TAC,TTIME(ITEM) ;GET TOTAL ACCUMULATED TIME
\r
1317 PUSHJ PDP,INLMES ;PRINT "K*CPUSEG=
\r
1318 ASCIZ /KILO-CORE-SEC=/
\r
1319 MOVE TAC,JBTKCT(ITEM) ;PRODUCT OF NO. OF K CORE* NO. OF JIFFIES RUN
\r
1320 IDIVI TAC,JIFSEC ;AT THAT SIZE, CONVERT TO KILO CORE SECONDS
\r
1321 PUSHJ PDP,RADX10 ;AND PRINT IN DECIMAL
\r
1322 JRST CRLF ;PRINT IRLF
\r
1325 JRST PRTIME ;PRINT IT AND RETURN
\r
1328 \f;ROUTINE TO LET TTY TALK TO ANY OTHER RING OF TTYS
\r
1330 ; TTYN NEED NEVER HAVE BEEN TYPED ON BEFORE
\r
1337 TALK: PUSHJ PDP,CTEXT1 ;GET ARGUMENT
\r
1338 JUMPE TAC1,TALK2 ;NONE SPECIFIED
\r
1340 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE
\r
1341 JRST TALK1 ;DEVSRC SHOULD FIND A FREE TTY DDB
\r
1342 ; EVEN IF TTY NEVER TYPED ON YET
\r
1347 TALK2: MOVSI ITEM,NOINCK ;SET FLAGS SO RESPONSE WILL PRINT
\r
1348 MOVEM ITEM,-1(PDP)
\r
1351 TALK1: MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB
\r
1352 MOVSI ITEM,NOINCK ;SET FLAGS TO PRINT RESPONSE
\r
1353 MOVEM ITEM,-1(PDP)
\r
1358 \fINTERNAL FTEXAMINE
\r
1362 ;"EXAMINE LOC" - LOOKS A CONTENTS OF LOC AND PRINTS IN OCTAL
\r
1363 ;IF LOC IS MISSING, NEXT LOC IS PRINTED
\r
1364 ;IF PREVIOUS WAS E COMMAND, SAME LOC IF PREVIOUS WAS D COMMAND
\r
1365 ;TAB. IS PRINTED INSTEAD OF CRLF(LIKE DDT)
\r
1367 EXTERNAL TPOPJ,JOBPC
\r
1369 ECOM: SKIPGE JOBEXM(JDAT) ;WAS PREVIOUS D OR E COMMAND. A D COMMAND?
\r
1370 AOS JOBEXM(JDAT) ;NO, IT WAS AN E. INCREMENT IN CASE HE TYPES NO ARG
\r
1371 HRROS JOBEXM(JDAT) ;YES, FLAG THAT E HAPPENED LAST(LH=-1)
\r
1372 PUSHJ PDP,OCTIN ;GET OCTAL LOCATION
\r
1373 SKIPA TAC,JOBEXM(JDAT) ;NONE SPECIFIED, USE LAST LOC OF D OR NEXT OF E
\r
1374 JRST COMERA ;ILLEGAL CHARACTER
\r
1375 PUSHJ PDP,DEAT ;CHECK FOR AC REFERENCE AND STORE JOBEXM
\r
1376 HRRZ UUO,TAC1 ;IGNORE LH
\r
1377 HRLI UUO,PROG ;SET TO RELOCATE
\r
1378 PUSHJ PDP,GETWRD ;GET WORD FROM LOW OR HIGH SEG
\r
1379 JRST ECOMA ;ERROR, OUT OF BOUNDS
\r
1380 PUSH PDP,TAC ;SAVE CONTENTS OF LOC TO BE PRINTED
\r
1381 HRRZ TAC,JOBEXM(JDAT) ;PRINT LOC BEING EXAMINED
\r
1383 PUSHJ PDP,INLMES ;PRINT SLASH TAB
\r
1385 HLRZ TAC,(PDP) ;PRINT LEFT HALF
\r
1387 PUSHJ PDP,INLMES ;PRINT SPACE
\r
1389 HRRZ TAC,(PDP) ;PRINT RIGHT HALF
\r
1391 PUSHJ PDP,INLMES ;PRINT FINAL TAB
\r
1393 JRST TPOPJ ;POP PDP,TAC,POPJ PDP,
\r
1395 ;"DEPOSIT LH RH LOC" - DEPOSITS XWD LH,RH IN LOCATION LOC
\r
1396 ;IF LOC IS MISSING. ASSUME NEXT LOC IF PREVIOUS D, SAME LOC IF PREVIOUS E
\r
1398 EXTERNAL JOBEXM,JOBPFI
\r
1400 DCOM: PUSHJ PDP,OCTIN ;GET LH
\r
1401 JRST NOTENF ;NOT ENOUGH ARGUMENTS
\r
1402 JRST COMERA ;ILLEGAL CHARACTER
\r
1403 HRLM TAC1,IOS ;SAVE LH
\r
1404 PUSHJ PDP,OCTIN ;GET RH
\r
1405 JRST NOTENF ;NOT ENOUGH ARGUMENTS
\r
1406 JRST COMERA ;ILLEGAL CHARACTER
\r
1407 HRRM TAC1,IOS ;SVE RH
\r
1408 SKIPL JOBEXM(JDAT) ;WAS PREVIOUS D OR E AN E COMMAND?
\r
1409 ; LH=-1 IF E, LH=0 IF D
\r
1410 AOS JOBEXM(JDAT) ;NO, INCREMENT IN CASE USER TYPED NOT THIRD ARG
\r
1411 ; FOR SUCCESSIVE D'S
\r
1412 HRRZS JOBEXM(JDAT) ;FLAG THAT A D WASDONE LAST(LH=0)
\r
1413 PUSHJ PDP,OCTIN ;GET LOC
\r
1414 SKIPA TAC1,JOBEXM(JDAT) ;NOT SPECIFIED, USE LAST OF E OR NEXT OF D
\r
1415 JRST COMERA ;ILLEGAL CHARACTER
\r
1418 PUSHJ PDP,CHKMED ;CHECK TO SEE IF HIGH SEG IS SHARABLE
\r
1419 ; IF YES, SET USER-MODE WRITE PROTECT (UWP) ON
\r
1420 ; FOR THIS USER, AND SET MEDDLE FOR THIS USER
\r
1421 ; SO HE CANNOT TURN UWP OFF
\r
1423 TRNN TAC1,777760 ;IN USER ACS
\r
1425 HLRZ TAC,PROG ;GET PROTECTION
\r
1426 CAILE TAC1,JOBPFI ;NO, GREATER THAN HIGHEST LOC, PROTECTED
\r
1427 ; FROM IO IN JOB DATA AREA?
\r
1428 CAMLE TAC1,TAC ;IN BOUNDS?
\r
1430 DCOM1: PUSHJ PDP,DEAT ;CHECK FOR AC REFERENCE
\r
1431 HRLI TAC1,PROG ;SET FOR RELOCATION
\r
1436 \fDEAT: TLZ TAC1,-1 ;CLEAR LH IN CASE THIS IS A SUCCESSIVE E WITH NO ARG
\r
1437 HRRM TAC1,JOBEXM(JDAT) ;STORE FOR NEXT TIME, DO NOT TOUCH LH(D OR E LAST)
\r
1438 ; YES, WAS JOB STOPPED IN USER MODE?
\r
1439 CAIL TAC1,20 ;IS IT AN AC?
\r
1441 MOVE TAC,JOBPC(JDAT)
\r
1442 TLNE TAC,USRMOD ;USER MODE?
\r
1443 ADDI TAC1,20 ;YES USER ACS ARE AT 20 INSTEAD OF 0
\r
1448 PUSHJ PDP,HGHDEP ;IS IT IN BOUNDS AND ALLOWED IN HIGH SEG?
\r
1449 JRST ECOMA ;NO, PRINT "OUT OF BOUNDS"
\r
1450 POPJ PDP, ;YES, IOS DEPOSITED, AND JOBEXM UPDATED
\r
1452 ECOMA: JSP TAC,ERRMES ;OUT OF BOUNDS
\r
1453 ASCIZ /OUT OF BOUNDS
\r
1457 ;"SCHEDULE OCTN" - SETS RH OF STATES TO OCTN, IF TYPED FROM
\r
1458 ; THE OPERATOR CONSOLE (C(DEVOPR)), OTHERWISE ILLEGAL
\r
1459 ;"SCHEDULE" WITH NO ARGUMENTS TYPES OUT RH OF STATES, LEGAL FOR ALL.
\r
1461 EXTERN DEVOPR,STATES,OCTPNT
\r
1463 SKEDUL: PUSHJ PDP,OCTIN ;GET THE ARGUMENT IF ANY
\r
1464 JRST SKED1 ;NO ARGUMENT
\r
1465 JRST COMERA ;BAD SYNTAX IN OCTAL NUMBER
\r
1466 MOVE TAC,DEVNAM(DEVDAT) ;AN ARGUMENT. IS THIS THE OPR?
\r
1468 JRST COMERR ;NO, THIS IS ILLEGAL, THEN.
\r
1469 HRRM TAC1,STATES ;YES. STORE ARGUMENT IN RH OF STATES
\r
1470 POPJ PDP,0 ;RETURN
\r
1472 SKED1: HRRZ TAC,STATES ;SCHEDULE WITH NO ARGUMENTS.
\r
1473 PUSHJ PDP,OCTPNT ;PRINT RH OF STATES.
\r
1474 JRST CRLF ;AND RETURN WITH A CRLF
\r
1476 ;"BLANK" OR NO ALPHA NUMERIC BEFORE BREAK CHAR COMMAND
\r
1477 ;DISPATCHED TO LIKE ANY OTHER COMMAND(0 IN COMMAND TABLE)
\r
1481 LDB TEM,TAC ;GET BREAK CHARACTER
\r
1482 CAIE TEM,15 ;IS IT A CR
\r
1485 CAIE TEM,12 ;WAS BREAK A LF
\r
1487 CAIN TEM,";" ;NO, IS IT SEMI COLON(MONITOR COMMENT)
\r
1488 POPJ PDP, ;YES, IGNORE
\r
1489 ; FALL IN UNKNOWN COMMAND
\r
1491 ;COMMAND NOT IN COMMAND DICECTORY
\r
1493 NOCOM: JRST COMERR ;NO, APPEND ? TO WHAT HE TYPED IN
\r
1495 ; "FINISH DEVICE" - CLOSES,RELEASE AND DESASSIGNS DEVICE
\r
1496 ;JOB MUST HAVE CORE
\r
1498 EXTERNAL USRJDA,PUUOAC,JOB,USRHCU,JOBFDV,SYSTAP
\r
1499 CFINI: PUSHJ PDP,CTEXT1 ;GET DEVICE NAME
\r
1500 JUMPE TAC1,NOTENF ;NOT ENOUGH ARG. IF NONE
\r
1501 SKIPA TAC,TAC1 ;SEARCH FOR SIXBIT DEVICE NAME
\r
1502 CFINS: MOVE TAC,SYSTAP ;HERE ON CONTROL C ON SYSTEM TAPE USER
\r
1503 ; DO A FINISH SYS COMMAND FOR HIM
\r
1505 JRST NOTDEV ;PRINT NOT A DEVICE
\r
1506 HRRZM DEVDAT,JOBFDV(JDAT) ;STORE DDB ADR. IN JOB DATA AREA
\r
1507 MOVE DEVDAT,-2(PDP)
\r
1508 JSP TAC1, MSTART ;SETUP MONITOR JOB AND RETURN
\r
1509 ; RETURN HERE AT UUO LEVEL WHEN SCHEDULED
\r
1510 JSP TAC,MONSTR ;SETUP ACS,PROG,JDAT,PDP
\r
1511 MOVE UCHN,USRHCU ;HIGHEST USER IO CHANNEL IN USE
\r
1512 FDV1: HRRZ DEVDAT,USRJDA(UCHN) ;GET NEXT DEVICE
\r
1513 MOVSI UUO,071000 ;SETUP RELEASE UUO
\r
1514 DPB UCHN,PUUOAC ;WITH CHANNEL NO.
\r
1516 CAMN DEVDAT,JOBFDV(JDAT) ;IS THIS DEV. THE ONE TO RELEASE?
\r
1517 XCT UUO ;YES, RELEASE IT(AND CLOSE)
\r
1519 SOJGE UCHN,FDV1 ;FINISHED?
\r
1520 MOVE ITEM,JOB ;GET JOB NUMBER
\r
1521 MOVE DEVDAT,JOBFDV(JDAT) ;RESET DEVDAT
\r
1522 PUSHJ PDP,DEASG ;DEASSIGN DEVICE
\r
1523 JFCL ;IGNORE IF NOT ASSIGNED BY CONSOLE
\r
1524 JRST ESTOP ;STOP JOB SO HE CANNOT CONTINUE
\r
1527 ;"RESOURCES" - PRINT OUT AVAILABLE DEVICES AND FREE BLOCKS ON THE DISK
\r
1533 EXTERNAL SATENT,SATXWD,WLBIT,SENTSZ,NUMBIT
\r
1535 XOR TAC,TAC ;INITIALIZE COUNTER
\r
1536 HLRE T2,SATXWD ;SET INDEX WITH NUMBER OF SAT BLOCKS IN EXISTENCE,
\r
1538 HRRI T1,SATENT ;GET SATENT ENTRY POINTER
\r
1539 LOP05: HRRZ TAC1,0(T1) ;GET VALUE
\r
1540 TRNE TAC1,WLBIT ;IS THIS SPACE WRITE PROTECTED?
\r
1541 JRST LOP06 ;YES, NO FREE BLOCKS IN THE SAT BLOCK.
\r
1542 ADDI TAC,NUMBIT ;NO, ADD THE FOLLOWING QUANTITY IN THIS SAT
\r
1543 SUB TAC,TAC1 ; RUNNING TOTAL: (TOTAL BLOCKS IN THIS SAT
\r
1544 ; BLOCK) - (BLOCKS ALREADY IN USE).
\r
1545 LOP06: ADDI T1,SENTSZ ;BUMP POINTER
\r
1546 SOJN T2,LOP05 ;DECREMENT INDEX
\r
1547 PUSHJ PDP,RADX10 ;CONVERT TO DECIMAL
\r
1548 PUSHJ PDP,INLMES ;PRINT
\r
1552 HRLZ T,DEVLST ;GET DDB POINTER
\r
1553 MOVEI AC2,0 ;SET DEVICE NAME 0 FOR FIRST COMPARE
\r
1554 LOP01: MOVE T1,DEVMOD(T) ;DEVICE CHARACTERISTICS
\r
1555 TRNN T1,ASSCON!ASSPRG ;DEVICE ASSIGNED BY CONSOLE OR PROGRAM?
\r
1556 TLNE T1,DVTTY!DVDSK ;NO, IS IT A TTY OR DSK?
\r
1557 JRST LOP02 ;YES DO NOT PRINT
\r
1559 JUMPE AC2,LOP018 ;SUPPRESS LEADING COMMA IF NO DISK
\r
1561 PUSHJ PDP,INLMES ;PRINT ,(INSTEAD OF CRLF SO WILL FIT IN 1 BUFFER)
\r
1563 LOP018: MOVS AC1,DEVNAM(T) ;GET DEVICE NAME
\r
1564 HLLZ TAC1,AC1 ;ASSUME SAME TYPE AS LAST ONE, PRINT
\r
1565 ; ONLY RH OF NAME (UNIT NUMBER)
\r
1566 CAIN AC2,0(AC1) ;IS IT REALLY THE SAME?
\r
1567 JRST LOP01A ;YES. PRINT THE UNIT NUMBER,
\r
1568 MOVS TAC1,AC1 ;NO. MUST PRINT WHOLE NAME,
\r
1569 HRRZ AC2,AC1 ; AND GET THE NEW DEVICE IN FLAG AC.
\r
1570 LOP01A: PUSHJ PDP,PRNAME ;AS BEING FREE
\r
1571 LOP02: HLRZ T,DEVSER(T) ;GET NEXT DEVICE IN CHAIN
\r
1572 JUMPN T,LOP01 ;IS THERE ONE?
\r
1573 JRST CRLF ;NO. DONE, PRINT CR. LF AND THEN POPJ
\r
1575 \fEXTERNAL CPOPJ,STUSER
\r
1576 ;ROUTINE TO CHECK FOR ACTIVE DEVICES
\r
1577 ;NEVER GET HERE DURING SWAP IN OU OUT
\r
1578 ;SINCE COMMAND TABLE SHOULD AHVE NOTRAN BIT ON
\r
1580 RUNCHK: CAMN ITEM,STUSER ;SYSTEM TAPE USER?
\r
1581 JRST DLYCM1 ;YES. DELY,BUT DO NOT STOP JOB
\r
1582 ACTCHK: JUMPE PROG,ACTCH1 ;DOES JOB HAVE CORE IN MEMORY
\r
1583 PUSHJ PDP,ANYACT ;YES. ARE DEVICES ACTIVE?
\r
1584 JRST DLYCM ;YES. DELAY COMMAND.
\r
1585 ACTCH1: MOVE TAC1,-1(PDP) ;RESTORE COMMAND DISPATCH ADDRESS
\r
1586 MOVE DEVDAT,-2(PDP) ;RESTORE TTY DDB ADDRESS
\r
1587 MOVE T,JBTSTS(ITEM) ;RESTORE JOB STATUS
\r
1588 CONTC1: POPJ PDP,COM0
\r
1590 ;ROUTINE TO DELAY A COMMAND
\r
1592 ;DELAYS COMMAND TO BE EXECUTED WHEN JOB IN CORE MEMORY
\r
1593 ;AND CAUSE JOB TO BE SWAPPED IN(COMMAND WAIT BIT IS SET IN JBSTS)
\r
1594 ;AND POPD LEVEL UP ONE.
\r
1596 EXTERNAL TTYCM,LINSAV
\r
1598 DLYCM: PUSHJ PDP,DLYCOM ;SET COMMAND WAIT BIT IN JOB STATUS AND PUT
\r
1599 ; JOB IN COMMAND WAIT QUEUE
\r
1600 ; SO JOB IS NOT RUNNABLE ANY MORE
\r
1601 ;ROUTINE TO DELAY A COMMAND IF A SWAP OUT OR IN IS IN PROGRESS
\r
1602 ;DIFFERS FROM DLYCM IN THAT JOB IS NOT MADE TO BE SWAPPED IN
\r
1603 ;REQUIRES OR DELYAING COMMAND IF SYSTEM
\r
1604 ;TAPE USER TYPOES ^C (HALT COMMAND)
\r
1606 DLYCM1: POP PDP,TAC
\r
1614 ;SEARCH DEVICE CHAIN FOR DSK WITH COUNTS ON
\r
1615 ;CALL MOVE ITEM,JOB NO
\r
1616 ; PUSHJ PDP,STOPCK
\r
1617 ; CAN'T STOP RETURN
\r
1618 ; OK TO STOP RETURN
\r
1620 EXTERNAL DSKDDB,DSKFGS,CPOPJ1
\r
1622 STOPCK: MOVEI DEVDAT,DSKDDB
\r
1624 STOPD: LDB TAC,PJOBN
\r
1625 CAIE ITEM,(TAC) ;ASSIGNED TO THIS JOB?
\r
1627 TDNE TAC1,DEVIOS(DEVDAT) ;YES. FLAG ON?
\r
1628 JRST CPOPJ ;YES. DELAY
\r
1629 STOPC: HLRZ DEVDAT,DEVSER(DEVDAT)
\r
1632 CAMN TAC,DEVNAM(DEVDAT)
\r
1634 JRST CPOPJ1 ;OK TO STOP
\r
1636 \fSUBTTL COMCSS - COMMON COMMAND SUBROUTINES
\r
1638 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING
\r
1639 ; IN COMMAND LINE (SIXBIT)
\r
1640 ;CALL: MOVE TAC,BYTE POINTER TO PREVIOUS CHAR.
\r
1641 ; PUSHJ PDP, CTEXT
\r
1642 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1
\r
1647 T=BUFPNT ;TEMPORARY AC'S
\r
1651 CTEXT: PUSHJ PDP,SKIPS ;CALL HERE IF AT START OF LINE
\r
1654 CTEXT1: PUSHJ PDP,SKIPS1 ;SKIP LEAD SPACES,TABS,NULLS AND CLEAR TAC1
\r
1655 ; DO NOT RETURN IF CR WAS PERVIOUS BREAK
\r
1656 MOVE T,[POINT 6,TAC1]
\r
1660 CTEX0: ILDB TEM,TAC
\r
1663 EXTERN TAKR,GETCHR
\r
1664 LDB TEM,TAKR(DAT) ;GET LAST CHAR.
\r
1666 CTEX0: PUSHJ PDP,GETCHR ;ROUTINE IN SCNSER TO PICK UP CHAR.
\r
1669 CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC
\r
1670 TRC TEM,40 ;CONVERT TO SIXBIT
\r
1671 TLNE T,770000 ;SIX CHARS YET?
\r
1672 IDPB TEM,T ;NO. BUILD WORD
\r
1673 JRST CTEX0 ;LOOP FOR MORE
\r
1674 \f;SCAN FOR ALPHANUMERIC CHAR IN TEM
\r
1675 CTEX: CAILE TEM,"Z"+40 ;GREATER THAN LC Z?
\r
1676 JRST CTEXA ;YES. NOT SIXBIT.
\r
1677 CAIL TEM,"A"+40 ;LOWER CASE LETTER?
\r
1678 TRZ TEM,40 ;YES. MAKE UPPER CASE.
\r
1680 CAILE TEM, "Z" ;LETTERS ARE LARGER THEN NOS.
\r
1681 JRST CTEXA ;NEITHER
\r
1684 POPJ PDP, ;LETTER OR NUMBER RETURN
\r
1685 CTEXA: IFE FTTTYSER,<
\r
1686 POP PDP,T1 ;REDUCE PDP BY 1 LEVEL
\r
1687 POPJ PDP, ;AND RETURN
\r
1690 CAIN TEM,":" ;DEVICE NAME?
\r
1691 PUSHJ PDP,GETCHR ;YES. SKIP COLON
\r
1692 CAIE TEM,3 ;CONTROL C?
\r
1694 JRST TPOPJ ;NO. RETURN ONE LEVEL UP
\r
1695 CTXCNC: MOVSI TAC1,(SIXBIT /HAL/) ;MAKE PHONY HALT COMMAND
\r
1696 MOVSI TEM,12 ;WITH LF FOR TERMINATION
\r
1697 JRST TPOPJ ;AND RETURN UP A LEVEL
\r
1699 \f;ROUTINE TO IGNORE LEADING SPACES, TABS, AND NULLS
\r
1701 ;DOES NOT RETURN IF PREVIOUS CHAR. OR NEXT NON-SPACING
\r
1702 ;CHAR, IS CR(IE POPS SUBROUTINE LEVEL UP 1 ON RETURN)
\r
1703 ;CALL: MOVE TAC,BYTE POINTER TO PREVIOUS BREAK CHAR.
\r
1704 ; PUSHJ PDP, SKIPS1
\r
1706 INTERNAL SKIPS1,SKIPS
\r
1710 SKIPS: MOVEI TAC1,0 ;CLEAR TAC1
\r
1711 LDB TEM,TAC ;WAS PRECEDING BREAK A CR?
\r
1713 JRST SKIPS2 ;YES. POP SUB. LEVEL UP 1
\r
1716 JUMPE TEM,SKIPSA ;NULL?
\r
1717 CAIE TEM," " ;SPACE?
\r
1721 SKIPS2: POP PDP,T ;YES. POP SUB. LEVEL UP ONE
\r
1723 IFN FTTTYSER,< EXTERNAL GETCHR,SPCHEK,BREAKB,TAKR
\r
1725 SKIPS: PUSHJ PDP,GETCHR ;GET FIRST CHAR ON LINE
\r
1726 SKIPS1: MOVEI TAC1,0 ;FOR CTEXT, DECIN
\r
1727 LDB TEM,TAKR(DAT) ;IN CASE TEM CLOBBERED
\r
1728 CAIN TEM,15 ;SKIP TO LF IF CR
\r
1729 SKIPSA: PUSHJ PDP,GETCHR ;NEXT CHARACTER
\r
1730 JUMPE TEM,SKIPS3 ;POP UP A LEVEL IF NO CHARS
\r
1731 PUSHJ PDP,SPCHEK ;SPECIAL?
\r
1733 TLNE TAC,BREAKB ;BREAK?(END OF LINE)
\r
1734 JRST SKIPS3 ;YES. POP UP RETURN
\r
1735 SKIPS2: CAIG TEM,40 ;SPACE OR CONTROL CHAR?
\r
1737 POPJ PDP,Z ;NO. RETURN
\r
1738 SKIPS3: CAIN TEM,3 ;^C?
\r
1739 JRST CTXCNC ;HANDLE IT
\r
1740 MOVEI TEM,12 ;FOR BREAK CONSISTENCY
\r
1741 JRST TPOPJ ;RETURN ONE LEVEL UP
\r
1743 \f;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT
\r
1744 ;CALLED FROM OCTIN, RETURNS TO SECOND LEVEL ON PDL
\r
1745 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
1746 ; PUSHJ PDP, COMERA
\r
1748 INTERNAL COMERA,COMERP
\r
1750 COMERP: POP PDP,T ;REMOVE SUB. RETURN BEFORE CALLING COMERA
\r
1751 COMERA: IFE FTTTYSER,< IBP TAC>
\r
1752 IFN FTTTYSER,< PUSHJ PDP,GETCHR> ;MOVE UP, A CH
\r
1754 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"
\r
1755 ;AND SET AS OUTPUT
\r
1756 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING
\r
1757 ; PUSHJ PDP, COMERR
\r
1764 EXTERN OUTCHS,TRESCN,TITAKR,SETBFI,TISYNC
\r
1766 MOVE T,TITAKR(DEVDAT) ;SAVE POSISITION IN SCAN
\r
1767 PUSHJ PDP,TRESCN ;BACK UP TO START OF COMMAND
\r
1768 COMERL: PUSHJ PDP,GETCHR ;GET A CHAR FROM COMMAND
\r
1769 CAMN T,TITAKR(DEVDAT) ;PASS BAD CHAR YET?
\r
1771 PUSHJ PDP,OUTCHS ;NO. TYPE CHAR.
\r
1772 JUMPN TEM,COMERL ;LOOP IF NOT OUT OF CHARACTERS
\r
1774 COMER1: PUSHJ PDP,SETBFI ;CLEAR ANY MORE TYPEIN
\r
1775 AOS TISYNC(DEVDAT) ;THIS WILL BE SOS-ED AT COMRET
\r
1776 MOVEI TEM,"?" ;APPEND ? TO ERRONEOUS WORD
\r
1781 MOVEI T,"?" ;STORE ? ON TOP OF BREAK CHAR.
\r
1784 TDZA ITEM,ITEM ;CLEAR JOB NO. AND SKIP INTO CRLF ROUT.
\r
1785 \f;ROUTINE TO PRINT A COMMAND ERROR MESSAGE
\r
1786 ;SAME CALL AS CONMES
\r
1790 ; COMERR SKIPS THIS ROUT,(SEE ABOVE)
\r
1791 ERRMES: TDZA ITEM,ITEM ;CLEAR JOB NUMBER TO INDICATE ERROR
\r
1792 ; SKIP INTO CONMES ROUTINE
\r
1794 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED
\r
1795 ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT
\r
1800 ; COMERR SKIPS TO HERE(SEE ABOVE)
\r
1801 CRLF: MOVEI TAC,[ASCII /
\r
1804 ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER
\r
1805 ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER
\r
1806 ; MOVEI TAC, ADDRESS OF ASCII MESSAGE
\r
1807 ; PUSHJ PDP, CONMES
\r
1808 ; STRING TERMINATED BY NULL
\r
1809 ; CONMES DOES NOT START TTY
\r
1810 ;CONMS1 - SAME CALLING SEQUENCE A CONMES,EXCEPT LH IS BYTE POINTER
\r
1815 ; ERRMES SKIPS TO HERE
\r
1816 CONMES: HRLI TAC,440700 ;FORM ASCIZ BYTE POINTER
\r
1817 CONMS1: PUSH PDP,TAC ;SAVE BYTE POINTER
\r
1818 CON0: ILDB TEM,(PDP) ;GET NEXT CHAR.
\r
1819 JUMPE TEM,TPOPJ ;IS IT NULL?(IF YES, DO POP TAC, POPJ)
\r
1820 TYOINS: ;TAG FOR THE TYPE OUT INSTRUCTION
\r
1821 CONOUT: ;EXECUTED FROM REST OF COMCSS TO OUTPUT CHAR
\r
1824 PUSHJ PDP,OUTCHS ;NO. STORE TTY OUTPUT BUFFER
\r
1829 JRST CON0 ;KEEP GOING
\r
1830 \f;ROUTINE TO PRINT INLINE ASCIZ MESSAGE
\r
1831 ;CALL: PUSHJ PDP,INLMES
\r
1832 ; ASCIZ /THE MESSAGE/
\r
1833 ;RETURN TO NEXT LOC AFTER MESSAGE
\r
1837 INLMES: POP PDP,TAC ;SETUP PRINT ADRESS FOR CONMES
\r
1839 JRST 1(TAC) ;RETURN TO NEXT LOC AFTER MESSAGE
\r
1841 ;ROUTINE TO APPEND ? TO ERROR MESSAGE
\r
1842 ;CALL PUSHJ PDP,PRQM
\r
1847 PRQM: MOVEI TEM,"?"
\r
1857 PRSPC: MOVEI TAC,[ASCIZ / /]
\r
1861 ;ROUTINE TO PRINT "TOO FEW ARGUMENTS"
\r
1862 ;CALL: MOVE DAT,BYTE POINTER
\r
1863 ; PUSHJ PDP,NOTENF
\r
1867 NOTENF: JSP TAC,ERRMES
\r
1869 ASCIZ /TOO FEW ARGUMENTS
\r
1872 ;ROUTINE TO PRINT A PERIOD
\r
1873 ;CALL: PUSHJ PDP,PRPER
\r
1877 PRPER: JSP TAC,CONMES
\r
1880 ;ROUTINE TO DEASSIGN A DEVICE
\r
1881 ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK
\r
1882 ; MOVE ITEM, JOB NUMBER
\r
1883 ; PUSHJ PDP, DEASG
\r
1884 ; ERROR NOT PREVIOUSLY ASSIGNED
\r
1885 ; OK RETURN WITH DEVICE DEASSIGNED
\r
1888 EXTERNAL PJOBN,CPOPJ1,IPOPJ
\r
1890 DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB?
\r
1892 POPJ PDP, ;NO, RETURN
\r
1893 PUSH PDP,ITEM ;SAVE JOB NUMBER
\r
1894 MOVSI TAC1,DVDIRI ;CLEAR DIRECTORY IN CORE BIT
\r
1895 ANDCAB TAC1,DEVMOD(DEVDAT) ;SET DEVICE CHARACTERISTICS FOR TEST
\r
1897 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME
\r
1899 TRNE TAC1,ASSCON ;IS DEVICE ASSIGNED BY CONSOLE?
\r
1900 AOS -1(PDP) ;YES, DO OK RETURN
\r
1903 PUSHJ PDP,ASGHGH ;IF DTA OR MTA, CLEAR ANY HIGH SEGMENT NAMES
\r
1904 ; FROM THIS DEVICE SO NO NEW SHARING
\r
1905 ; DEVMOD SETUP IN TAC1 ON CALL
\r
1907 MOVEI TAC1,ASSCON ;SETUP ASSIGNED BE CONSOLE BIT FOR RELEASE
\r
1908 PUSHJ PDP,RELEA6 ;CLEAR JOB NO. IN DDB IF DDB NOT NEEDED
\r
1909 JRST IPOPJ ;RESTORE JOB NUMBER AND RETURN
\r
1911 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY
\r
1912 ;CALL: MOVE ITEM, JOB NUMBER
\r
1913 ; MOVE DEVDAT,ADR. OF DEVICE NOT TO BE DEASSIGNED
\r
1914 ; PUSHJ PDP, DEASTY
\r
1916 INTERNAL DEASAL,DEASTY
\r
1920 DEASAL: PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS
\r
1921 HLRZ DEVDAT,DEVLST ;SEARCH ALL DDB'S
\r
1922 DEA1: CAIE DEVDAT,@(PDP) ;IS THIS DEVICE NOT TO BE DEASSIGNED?
\r
1923 PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT
\r
1924 JFCL ;IGNORE IF CAN'T
\r
1925 HLRZ DEVDAT, DEVSER(DEVDAT)
\r
1926 JUMPN DEVDAT, DEA1
\r
1927 POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS
\r
1930 ;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER
\r
1931 ; CALL: MOVE TAC1, DESIRED RADIX
\r
1932 ; MOVE TAC, BYTE POINTER TO FIRST CHARACTER
\r
1933 ; PUSHJ PDP, ANYRIN
\r
1934 ; NO ARG. TYPED RETURN, TAC1=0
\r
1935 ; ILLEGAL CHARACTER RETURN
\r
1936 ; NORMAL EXIT TAC TAC1 CONTAINS NUMBER
\r
1937 ;SCAN STOPS ON FIRST OR,DASH,SPACE,OR TAB OR ILLEGAL CHAR.
\r
1938 ;SKIPS LEADING SPACES AND TABS
\r
1940 INTERNAL OCTIN,OCTIN1,DECIN,DECIN1
\r
1941 EXTERNAL CPOPJ1,CPOPJ2
\r
1943 C=BUFPNT ;CHARACTER AC
\r
1944 R=BUFWRD ;RADIX AC
\r
1947 DECIN: MOVEI R,12 ;DECIMAL INPUT
\r
1951 OCTIN: MOVEI R,10 ;OCTAL INPUT
\r
1952 ANYRIN: PUSHJ PDP,SKIPS1 ;SKIP LEADING SPACES, TABS, NULLS
\r
1953 ; DO NOT RETURN IF CR WAS PREVIOUS BREAK
\r
1955 IFE FTTTYSER,< LDB TEM,TAC>
\r
1956 OCT0: CAIGE TEM,175 ;ALTMODES(175 OR 176)?
\r
1957 CAIN TEM,"[" ;NO. LEFT BRACKET(SO SPACE NOT REQ
\r
1958 ; BEFORE [P,P] IN ATT AND GET COMMANDS.
\r
1959 JRST CPOPJ2 ;YES. SKIP RETURN
\r
1960 CAIE TEM,"-" ;DASH?
\r
1961 CAIG TEM,400 ;SPACE OR CONTROL CHAR?
\r
1962 JRST CPOPJ2 ;YES, ONLY LEGAL TERMINATORS
\r
1963 CAIE TEM,"," ;COMMA?
\r
1964 CAIN TEM,"]" ;RIGHT BRACKET?
\r
1967 JUMPL TEM,CPOPJ1 ;ERROR IF NEG.,REMOVE SUB. RETURN AND PRINT
\r
1968 CAML TEM, R ;OR .GE. RADIX
\r
1969 JRST CPOPJ1 ;ERROR, GREATER OR EQUAL TO RADIX
\r
1972 IFE FTTTYSER,< ILDB TEM,TAC ;NEXT CHAR>
\r
1973 IFN FTTTYSER,< PUSHJ PDP,GETCHR> ;NEXT CHAR
\r
1975 \fINTERNAL FTLOGIN
\r
1977 ;GET PROJECT-PROGRAMMER NUMBERS
\r
1978 ;CALL: MOVE TAC,INPUT BYTE POINTER
\r
1979 ; PUSHJ PDP,PJPGNO
\r
1981 ;(AC2)LH _ PROJECT NUMBER
\r
1982 ;(AC2)RH _ PROGRAMMER NUMBER
\r
1983 ;(AC2) = 0 IF NO [ ]'S TYPED
\r
1984 ;THE TERMINAL ] IS OPTIONAL
\r
1987 PJPGNO: SKIPA TAC1,TAC ;SAVE INPUT BYTE POINTER IN CASE NO
\r
1988 ; [ ]'S WERE TYPED IN.
\r
1989 PP0: IBP TAC ;GET NEXT CHARACTER (2ND TIME THRU LOOP)
\r
1990 LDB TEM,TAC ;GET CHAR WHICH STOPED PREVIOUS FIELD SCAN
\r
1991 ; (OR NEXT CHAR ON 2ND TIME THRU LOOP)
\r
1995 PP0: PUSHJ PDP,SKIPS1
\r
1998 CAIN TEM,"[" ;IS IT A "[" ?
\r
1999 JRST PP1 ;YES, GET PROJECT-PROGRAMMER NUMBERS FROM INSIDE.
\r
2000 CAIE TEM," " ;NO, IS IT A SPACE ?
\r
2001 CAIN TEM,11 ; OR A TAB?
\r
2002 JRST PP0 ;YES, KEEP LOOKING FOR "[".
\r
2003 MOVEI AC2,0 ;NEITHER SPACE NOT TAB, THUS RETURN A 0 MEANING
\r
2004 ; NO PROJECT-PROGRAMMER NUMBER ENCOUNTERED.
\r
2005 IFE FTTTYSER,< MOVEM TAC1,TAC ;RESTORE ORIGINAL BYTE POINTER.>
\r
2006 POPJ PDP, ;EXIT.......
\r
2009 IFN FTTTYSER,< PUSHJ PDP,SKIPS>
\r
2010 PUSHJ PDP,OCTIN ;GET FIRST ARG.-PROJ. NO.
\r
2011 JRST COMERP ;NO ARG. GIVEN
\r
2012 JRST COMERP ;ILLEGAL DECIMAL CHARACTER GIVEN
\r
2013 HRL AC2,TAC1 ;ENTER
\r
2014 IFN FTTTYSER,< CAIE TEM,","
\r
2017 PUSHJ PDP,OCTIN ;GET SECOND ARG.-PROG. NO.
\r
2020 HRR AC2,TAC1 ;ENTER
\r
2021 PUSHJ PDP,SKIPS1 ;SKIP BLANKS
\r
2022 CAIN TEM,"]" ;IS USUAL ENDING A "]"?
\r
2023 IFE FTTTYSER,<IBP TAC> ;YES, SKIP IT
\r
2024 IFN FTTTYSER,<PUSHJ PDP,GETCHR> ;YES, SKIP IT SO FINAL ] IS OPTIONAL
\r
2025 POPJ PDP, ;RETURN RO CALL
\r
2027 \f;ROUTINE TO PRINT TIME AS HOURS,MINUTES,SECONDS, AND HUNDRETHS
\r
2028 ;FORMAT IS HHMM:SS.HH
\r
2029 ;CALL: MOVE TAC,TIME IN JIFFIES(60THS,50THS OR MILLISECONDS)
\r
2030 ; MOVE DAT,OUTPUT TEXT BYTE POINTER
\r
2031 ; PUSHJ PDP,PRTIME
\r
2033 ;SCALEING IS DONE USING THE FOLLOWING GLOBAL SYMBOLS DEFINED
\r
2034 ;ON THE CONFIGURATION TAPE (IOINI1)
\r
2035 ;THUS ANY INSTALLATION MAY HAVE ANY RATE CLOCK
\r
2037 EXTERNAL JIFMIN,JIFSEC,JIFSC2
\r
2039 ;JIFMIN=NO. OF JIFFIES(CLOCK TICKS) PER MINUTE
\r
2040 ;JIFSEC=NO. OF JIRFIES PER SECOND
\r
2041 ;JIFSC2=1/2*JIFSEC(USED FOR ROUNDING)
\r
2045 PRTIME: IDIVI TAC,JIFMIN ;FORM MINUTES
\r
2046 PUSH PDP,TAC1 ;SAVE REMAINDER IN JIFFIES
\r
2047 JUMPE TAC,PR1 ;SUPRESS 0 HOURS IN MINUTES
\r
2048 IDIVI TAC,^D60 ;HOURS, MINUTES IN TAC,TAC1
\r
2049 JUMPE TAC,PR0 ;SUPPRES 0 HOURS
\r
2051 PUSHJ PDP,INLMES ;PRINT "HH:" OR "H:"
\r
2053 PR0: MOVE TAC,TAC1 ;GET MINUTES
\r
2054 PUSHJ PDP,PRT2 ;PRINT "MM:"
\r
2057 PR1: POP PDP,TAC ;RESTORE SECONDS(IN JIFFIES)
\r
2058 IDIVI TAC,JIFSEC ;JIFFIES PER SECOND
\r
2059 PUSHJ PDP,RADX10 ;PRINT SECONDS
\r
2060 PUSHJ PDP,PRPER ;PRINT PERIOD
\r
2061 MOVE TAC,TAC1 ;NO OF JIFFIES(HUNDRETHS)
\r
2062 IMULI TAC,^D100 ;CONVERT TO HUNDRETHS
\r
2064 CAIL TAC1,JIFSC2 ;ROUND IF GREATER THEN HALF
\r
2066 JRST PRT2LF ;PRINT
\r
2067 \fPRTIM1: IDIVI TAC,JIFMIN ;
\r
2068 IDIVI TAC,^D60 ;HOURS,MINUTES IN TAC,TAC1
\r
2070 PUSHJ PDP,INLMES ;PRINT "HH:"
\r
2073 PRT2LF: PUSHJ PDP,PRT2 ;PRINT "MM
\r
2076 PRT2: MOVEI TEM,"0"
\r
2078 XCT CONOUT ;PUT LEADING 0 IF LESS THEN 10
\r
2079 JRST RADX10 ;PRINT REST OF NUMBER
\r
2080 \f;ROUTINE TO PRINT SIZE OF LOGICAL SEGMENT (LOW OR HIGH)
\r
2081 ;CALL: MOVE ITEM, HIGH OR LOW SEG NUMBER
\r
2082 ; PUSHJ PDP,PRT SEG
\r
2084 ;CALLED AT CLOCK LEVEL FROM CORE (UUO ARG) COMMAND AND SEGCON
\r
2089 PRTSEG: PUSHJ PDP,SEGSIZ ;TAC1=SIZE OF HIGH OR LOW SEG
\r
2090 MOVE TAC,TAC1 ;RADX10 WANT DEC. NO. IN TAC
\r
2091 JRST RADX10 ;PRINT DECIMAL
\r
2093 ;ROUTINE TO RETURN SIZE OF HIGH OR LOW SEG
\r
2094 ;CALL: MOVE ITEM,LOW OR HIGH SEG NUMBER
\r
2095 ; PUSHJ PDP,SEGSIZ
\r
2096 ; RETURN WITH SIZE IN K IN TAC1
\r
2104 LDB TAC1,IMGIN ;SIZE WHEN NEXT SWAPPED IN(IN K)
\r
2105 JUMPN TAC1,CPOPJ ;0 MEANS NOT SWAPPED OUT
\r
2107 HLRZ TAC1,JBTADR(ITEM) ;SIZE-1 LOW LOW OR HIGH SEG IN WORDS IN CORE
\r
2108 JUMPE TAC1,CPOPJ ;IS IT IN CORE?
\r
2109 LSH TAC1,-12 ;YES, CONVERT TO #K-1
\r
2110 AOJA TAC1,CPOPJ ;ADD 1 AND RETURN NUMBER OF K
\r
2111 \f;ROUTINE TO ASSIGN A MINIMAL CORE AREA(140 WORDS)
\r
2112 ;CALLED FROM CORE,KJOB, AND RUN COMMANDS
\r
2113 ;THIS ROUTINE PRESERVES INPUT BYTE POINTER IN TAC
\r
2114 ;CALL: PUSHJ PDP,GETMIN
\r
2115 ; RETURN PROG=0 IF UNSUCCESSFUL OR CORE ASSIGNED ON DISK
\r
2117 EXTERN JOBDA,TPOPJ
\r
2121 PUSH PDP,TAC ;SAVE INPUT BYTE POINTER TO COMMAND
\r
2124 PUSH PDP,DEVDAT ;SAVE TTY DDB ADR
\r
2126 PUSH PDP,TAC1 ;SAVE DEVICE NAME(GET)
\r
2127 PUSH PDP,IOS ;SAVE DISPATCH ADDRESS(ANYACT USES IOS)
\r
2131 PUSHJ PDP,KILHGH ;KILL HIGH SEG
\r
2133 MOVEI TAC,JOBDA ;LENGTH OF JOBDATA AREA
\r
2134 PUSHJ PDP,CORE0 ;ASSIGN 140 WORDS ON DISK OR MEMORY
\r
2135 JFCL ;IGNORE IF CANT(PROG=0)
\r
2137 POP PDP,TAC1 ;RESTORE PUSHED ACS
\r
2139 POP PDP,DEVDAT ;RESTORE TTY DDB ADR
\r
2140 POPJ PDP, ;TAC NOT USER BY FULL DUPLEX SCNSER
\r
2143 JRST TPOPJ ;RESTORE TAC AND RETURN
\r
2145 \f;ROUTINE TO GET 1 WORD FORM USER ARE WHICH CAN BE IN LOW OR HIGH SEG
\r
2146 ;CALL: MOVE PROG,[XWD PROT,RELOC FOR LOW SEG]
\r
2147 ; MOVE ITEM,JOB NUMBER
\r
2148 ; HRLI UUO,PROG ;FOR RELOCATION
\r
2149 ; HRR UUO,USER ADDRESS(IE BEFORE RELOCATION)
\r
2150 ; PUSHJ PDP,GETWRD
\r
2151 ; ERROR RETURN ADDRESS OUT OF BOUNDS
\r
2152 ; OK RETURN, CONTENTS IN AC TAC
\r
2153 ;CAN BE CALLED AT CLOCK OR UUO LEVEL
\r
2154 ;CALLED FROM E COMMAND,INIT,OPEN AND CALL UUOS
\r
2159 GETWRD: HLRZ TAC,PROG ;LARGEST REL LOC IN LOW SEG
\r
2160 CAIGE TAC,(UUO) ;IS ADR. IN LOW SEG?
\r
2163 JRST HGHWRD ;NO, CHECK IF IN HIGH SEG(ERROR RET IF NO)
\r
2166 POPJ PDP, ;NO, ERROR RETURN
\r
2168 MOVE TAC,@UUO ;YES, GET IT FROM LOW SEG
\r
2169 JRST CPOPJ1 ;AND SKIP RETURN
\r
2170 \fSUBTTL SAVGET - SAVE,GET,R,RUN COMMANDS AND RUN,GETSEG UUOS
\r
2172 ;SAVGET LOWER CORE LOCATIONS USED FOR UUOS TO MONITOR
\r
2173 ;USED IN SAVGET IN APRSER AND SAVGET IN SEGCON
\r
2174 ;THESE LOCATIONS ARE DEFINED TO BE IN THE USERS UUO ACS
\r
2176 ;FOR LOOKUP,ENTER UUOS:
\r
2177 XP SGANAM,0 ;FILE NAME
\r
2178 XP SGAEXT,SGANAM+1 ;FILE EXTENSION
\r
2179 XP SGADAT,SGANAM+2 ;FILE CREATION DATE+TIME
\r
2180 XP SGALEN,SGANAM+3 ;LN=-LENGTH,RH=FIRST LOC-1 DUMPED
\r
2181 ; OR PROJECT-PROGRAMMER NUMBER(DISK)
\r
2182 XP SGAEND,SGALEN+1 ;LAST WORD OF DUMP COMMAND LIST=0(SAVE AND GET)
\r
2183 XP SGAREN,SGAEND ; ALSO FIRST WORD FOR RENAME USED AS DELETE
\r
2184 XP SGAPPN,SGAREN+3 ;FOURTH WORD-PLACE TO SAVE PROJECT-PROGRAMEMR
\r
2185 ; NUMBER USER TYPED
\r
2188 XP SGAMOD,10 ;IOS MODE WORD FOR OPEN UUO
\r
2189 XP SGADEV,SGAMOD+1 ;DEVICE NAME
\r
2190 XP SGAHED,SGAMOD+2 ;INPUT-OUTPUT BUFFER HEADER ADDRESSES=0
\r
2192 ;MISC. DATA LOCATIONS:
\r
2194 XP SGADMP,13 ;DUMP COMMAND IOWD
\r
2195 XP SGACOR,14 ;AC FOR CORE UUO'S(HIGHEST USER LOC DESIRED)
\r
2196 XP SGANEW,15 ;NEW CORE ASSIGNMENT AS SPECIFIED BY THIRD ARG
\r
2197 XP SGAHGH,16 ;LH=EXT TO USE FOR SAVING HIGH SEG
\r
2198 ; RH=EXT TO DELETE(IE SHRHGH OR HGHSHR)
\r
2199 XP SGALOW,17 ;LH=EXT WHICH USER TYPED FOR SAVE OR GET COMMAND
\r
2200 ; OR .SAV IF HE DIDN'T TYPE AN ARG WITH LEADING PERIOD
\r
2202 \f;ROUTINE TO SCAN COMMAND STRING ARGUMENTS FOR SAVE,GET,RUN AND R
\r
2203 ;COMAMNDS AND STORE THEM IN JOB DATA AREA WHICH MUST BE IN CORE
\r
2204 ;WHEN SGSET IS CALLED FROM COMMAND DECODER
\r
2205 ;CALL: MOVE TAC,INPUT BYTE POINTER
\r
2206 ; MOVE TAC1,SIXBIT DEVICE NAME
\r
2207 ; MOVE DAT,OUTPUT BYTE POINTER
\r
2208 ; MOVE IOS,ADR. OF MONITOR JOB(SAVJOB,GETJOB,RUNJOB)
\r
2209 ; MOVE PROG, ADR. OF JOB AREA
\r
2214 INTERNAL FTLOGIN,FT2REL,FTDISK
\r
2215 EXTERNAL JOBCOR,JBTPRG
\r
2217 SGSET: JUMPE TAC1,NOTENF ;NOT ENOUGH ARE IF NO DEVICE NAME
\r
2218 MOVEM TAC1,SGADEV(PROG) ;STORE DEVICE NAME
\r
2219 SKIPN TAC1,JBTPRG(ITEM) ;GET AUTOMATIC FILENAME, OR
\r
2220 PUSHJ PDP, CTEXT1 ;GET FILE NAME FROM COMMAND STRING
\r
2221 JUMPE TAC1,NOTENF ;THERE MUST BE A FILE NAME
\r
2222 MOVEM TAC1,SGANAM(PROG) ;STORE FILE NAME
\r
2223 MOVEM TAC1,JBTPRG(ITEM) ;SAVE FILE NAME FOR SYSTAT COMMAND
\r
2224 MOVEI TAC1,0 ;ASSUME USER DID NOT SPECIFY AN EXTENSION
\r
2225 ; 0 WILL BE TURNED INTO SAV OR DMP
\r
2226 IFE FTTTYSER,< LDB TEM,TAC>
\r
2227 CAIN TEM,"." ;IS AN EXTENSION SPECIFIED?
\r
2228 PUSHJ PDP,CTEXT ;YES. GET EXTENSION
\r
2229 HLLZM TAC1,SGAEXT(PROG) ;STORE IT FOR LOOKUP
\r
2231 EXTERN SETEXT ;ALSO SAVE IT AGAIN IN SGALOW FOR LOW SEG
\r
2233 PUSHJ PDP,SETEXT ;SET HIGH EXTENSION(SGAHIGH) TO .SHR IF SSAVE OR GET
\r
2234 ; .HGH IF SAVE(LH IOS=NSRBIT).
\r
2236 SETZM SGADAT(PROG) ;SET DATE(E+2) TO 0, SO MONITOR WILL USE TODAYS
\r
2238 PUSHJ PDP,PJPGNO ;GET PROJ, PROG. NO.
\r
2239 MOVEM AC2,SGAPPN(PROG) ;STORE 0 IF NO []'S TYPED BY USER
\r
2241 PUSHJ PDP,DECIN1 ;AMOUNT OF CORE (OPTIONAL THIRD ARG.)
\r
2242 JRST SGSET1 ;DOES NOT RETURN IF ERROR. RETURN HERE IF NO ARG.
\r
2243 JRST COMERA ;ILLEGAL CHARACTER
\r
2244 LSH TAC,12 ;CONVERT TO HIGHEST REL. LOC.
\r
2246 SGSET1: MOVEM TAC1,SGANEW(PROG) ;STORE FOR RUN AND SAVE
\r
2247 HRRZ TAC1,IOS ;SCHEDULE MONITOR JOB
\r
2248 ; GUARRANTEE LH OF PC WORD IS 0, SINCE IT WILL
\r
2249 ; BE ADDED TO STARTING ADDRESS(IF RUN COM)
\r
2250 JRST MSTART ;START JOB WITH PC IN MONITOR MODE
\r
2251 \f;ROUTINE TO PICKUP ARGUMENTS FOR RUN AND GETSET UUOS
\r
2252 ;THIS ROUTINE DOES SAME THING AS SGSET, EXCEPT THAT ARGUMENTS ARE
\r
2253 ;OBTAINED FROM USER UUO ARGUMENTS INSTEAD OF FROM CONSOLE COMMAND
\r
2254 ;THE USERS ARG ARE MOVED TO USER ACS(SGA...), THEREBY CLOBBERING HIS AC$S
\r
2255 ;USER AC FIELD AND START PC OFFSET(RUN UUO) ARE SAVED ON PD LIST AT JOBPD3
\r
2256 ;THEN LOWER CORE IS SET UP(SG2 CALLED) RESET IS NOT DONE (FOR GETSEGUUO)
\r
2257 ;JBTPRG NOT SET FOR LOW SET, SINCE GETSEGUUO SHOULD NOT
\r
2258 ;CALL: MOVE TAC,CONTENTS OF USER AC(ADR. OF 3 WORD ARG LIST)
\r
2259 ; MOVE PROG,JOB RELOCATION
\r
2260 ; PUSHJ PDP,GETARG
\r
2264 EXTERN JBTPRG,JOBCOR,PUUOAC
\r
2266 GETARG: HRR UUO,TAC ;MOVE ADR. OF ARG LIST TO UUO
\r
2267 EXCH TAC,(PDP) ;AND PUT ON PD LIST
\r
2268 PUSH PDP,TAC ;MOVE RETURN PC UP ONE IN PD LIST
\r
2269 LDB TAC,PUUOAC ;USER AC FIELD IN RUN OF GETSEG UUO
\r
2271 HRRM TAC,-1(PDP) ;SAVE IN CASE OF ERROR RETURN
\r
2272 PUSHJ PDP,GETWDU ;GET FIRST ARG FROM USER AREA
\r
2273 MOVEM TAC,SGADEV(PROG) ;STORE DEVICE NAME
\r
2274 PUSHJ PDP,GETWD1 ;GET NEXT ARG FROM USER ARREA
\r
2275 MOVEM TAC,SGANAM(PROG) ;STORE FILE NAME FOR LOOKUP (DO NOT STORE FOR LOWSEG)
\r
2276 PUSHJ PDP,GETWD1 ;GET THIRD ARG(EXTENSION WORD E+1)
\r
2277 MOVE TAC1,TAC ;PUT ARG IN TAC1, SO SMAE AS SGSET RETURN FROM CTEXT
\r
2278 MOVEM TAC1,SGAEXT(PROG) ;STORE EXTENSION AND RH FROM USER
\r
2281 PUSHJ PDP,SETEX1 ;SAVE EXT AGAIN IN SGALOW
\r
2282 ; SETUP EXT FOR HIGH SEG(SGAHGH="SHR")
\r
2283 ; SETUP EXTENSION FOR LOW SEG(SGALOW="SAV")
\r
2285 PUSHJ PDP,GETWD1 ;GET FOURTH ARG(DATE WORD)
\r
2286 MOVEM TAC,SGADAT(PROG)
\r
2287 PUSHJ PDP,GETWD1 ;GET FIFTH USER ARG FROM USER AREA
\r
2288 MOVEM TAC,SGAPPN(PROG) ;STORE PROJECT,PROGRAMMER NO. OR 0
\r
2289 PUSHJ PDP,GETWD1 ;SIX ARG FROM USER
\r
2290 HRRZM TAC,SGANEW(PROG) ;STORE CORE ARG OR 0(HIGHEST LOC DESIRED)
\r
2292 JRST SG2A ;GO SET UP LOWER CORE AND RETURN
\r
2293 ; DO NOT DO A RESET
\r
2294 \f;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE
\r
2295 ;THIS JOB RUNS IN EXEC MODE AND CALLS IO ROUTINES USING REGULAR UUOS
\r
2296 ;NO ATTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBDP, OR AC'S
\r
2297 ;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA
\r
2298 ;AFTER IT HAS BEEN SAVED IS TO START EXECUTIUON OVER AT THE STARTING
\r
2301 INTERNAL SAVJOB,SAVERR
\r
2302 EXTERNAL JOB41,JOBS41,JOBDDT,JOBSDD,JOBSV
\r
2304 SAVJOB: JSP TAC1,SG1 ;SET UP ACS PROG,PDP,JDAT,ITEM.
\r
2306 HLRE TAC1,SGADMP(PROG) ;-NO. OF WORDS TO WRITE
\r
2307 PUSHJ PDP,CKIOWD ;CHECK USER'S CORE ARG(IF ANY) WITH AMOUNT
\r
2308 ; RETURN ONLY IF 0 OR NOT SMALLER
\r
2309 HRRM TAC,JOBCOR(PROG) ;STORE MAX OF SIZE OF FILE OR CORE ARG
\r
2310 ; FOR ASSIGNING INITIAL CORE WHEN FILE GOTTEN
\r
2313 PUSHJ PDP,SAVHGH ;INIT DEV,SAVE HIGH SEG, IF ANY, RETURN IF OK
\r
2314 JRST SAVFIN ;HIGH SAVED, BUT NO DATA IN LOW SEG, SO DO
\r
2315 ; NOT WRITE LOW FILE
\r
2316 ; SKIP RETURN IF LOW SEG TO BE WRITTEN
\r
2318 ; SGALEN, AND SGAEXT RESTORED
\r
2319 SAVJB1: OPEN 0,SGAMOD ;RE INIT DEVICE, SO UGETF WILL SET FIRST FREE
\r
2320 ; BLOCK BECAUSE NO LOOKUP OR ENTER DONE
\r
2321 JRST SGERRA ;DEVICE NOT AVAILABLE
\r
2322 UGETF 0,SGAHED ;GET FIRST FREE BLOCK(MEANINGFUL ONLY IF DTA)
\r
2323 ; CAUSE ENTER TO ASSIGN FIRST LOBCK OF FILE
\r
2324 ; AS LOWEST FREE BLOCK SO TENDMP CAN READ
\r
2325 ENTER 0,SGANAM ;ENTER FILE NAME IN DIRECTORY
\r
2326 JRST SAVERR ;DIRECTORY FULL OR PROTECTION FAILURE
\r
2327 MOVE TAC,JOB41(JDAT) ;SAVE USER UUO HANDLING JSR
\r
2328 MOVEM TAC,JOBS41(JDAT) ;IN UPPER PART OF JOB DATA AREA
\r
2329 \f MOVE TAC,JOBDDT(JDAT) ;SAVE DDT STARTING ADDRESS HIGHER UP IN JOB DATA AREA
\r
2330 MOVEM TAC,JOBSDD(JDAT) ;SO COMPRESS ALWAYS MOVES CODE DOWN
\r
2331 HRROS USRHCU ;FLAG THAT SAVE GET IS UNDER WAY
\r
2332 ; SO THAT JOBHRL WILL NOT BE MODIFIED BY SETHGH RUOTINE
\r
2333 ; TO USER'S HIGH SEG RELOCATION INFO. SINCE
\r
2334 ; IT WILL CONTAIN COMPRESSION IOWD.
\r
2335 ; COMPRESSION WILL ALWAYS MOVE DOWN
\r
2336 HRRZ TEM,JOBSA(JDAT) ;SAV START ADDRESS FOR 10DMP
\r
2337 MOVEI TAC,JOBSV(PROG) ;POINT TO 1ST DATA WORD
\r
2338 MOVE TAC1,[XWD PROG,JOBSDD] ;IT STARTS AT JOBSDD
\r
2339 HLRE ITEM,SGADMP(PROG) ;IOWD FOR THIS SIZE CORE(-LENGTH TO WRITE)
\r
2340 MOVNS ITEM ;POSITIVE LENGTH
\r
2341 ADDI ITEM,JOBSVM ;ADD IN FIRST LOC-1 TO WRITE=HIGHEST LOC TO WRITE
\r
2342 ; TO MAKE END TEST
\r
2343 HRLI ITEM,PROG ;USE PROG FOR RELOCATION
\r
2344 CMPLP1: MOVEM TAC,DAT ;SAVE 1ST LOC FOR IOWD
\r
2345 CAMLE TAC1,ITEM ;SEARCH FOR 1ST NON-0 WORD
\r
2346 AOJA TAC,CMPTHR ;THROUGH
\r
2348 SKIPN @TAC1 ;THIS A DATA WORD?
\r
2349 AOJA TAC1,.-3 ;NO, KEEP LOOKING
\r
2350 MOVNI AC1,1 ;YES, AC1 WILL BE AN IOWD
\r
2351 HRLI AC1,-1(TAC1) ;1ST LOCATION - 1
\r
2352 CMPLP2: PUSH TAC,@TAC1 ;SAVE A DATA WORD
\r
2354 CAMGE TAC1,ITEM ;AT TOP?
\r
2355 SKIPN @TAC1 ;NO. NEXT WORD NON-0?
\r
2356 JRST .+2 ;NO. THROUGH THIS BLOCK
\r
2357 SOJA AC1,CMPLP2 ;COUNT THE WORD AND CHECK NEXT
\r
2358 MOVSM AC1,(DAT) ;SAVE IOWD IN FRONT OF BLOCK
\r
2359 AOJA TAC,CMPLP1 ;LOOK FOR NEXT NON-0 BLOCK
\r
2360 CMPTHR: HRLI TEM,254000 ;SET A JRST C(JOBSA)
\r
2361 MOVEM TEM,-1(TAC) ;AT END OF FILE
\r
2362 SUBI TAC,JOBSV(JDAT) ;COMPUTE WORD COUNT
\r
2363 MOVNS TAC ;MAKE AN IOWD
\r
2364 HRL TAC,SGADMP(PROG) ;START ADDRESS
\r
2365 MOVSM TAC,SGALEN(PROG) ;IOWD FOR THE OUTPUT UUO
\r
2366 MOVEI TAC,-2 ;FLAG THAT CORE HAS BEEN COMPRESSED
\r
2367 HRLM TAC,USRHCU ;KEEP LH NEG. COMMAND DECODER WILL EXPAND
\r
2368 ; CORE ON START ,ODT,SAVE, REENTER,SSAVE IN CASE
\r
2369 ; THIS SAE IO DOES NOT GO TO COMPLETION. (CONTROL C
\r
2370 ; OR DEVICE FULL, SO THAT CORE DOES NOT GET EXPANDED
\r
2371 \f PUSHJ PDP,SGDOA ;DO OUTPUT,RELEASE,FIND TTY
\r
2372 OUTPUT 0,SGALEN ;OUTPUT UUO EXECUTED BY SGDO
\r
2373 ; RETURN HERE ONLY IF NO ERRORS
\r
2374 SAVFIN: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY
\r
2375 JSP TAC,PHOLD ;PRINT MESSAGE AND STOP JOB
\r
2377 SAVERR: MOVEI TAC,PRTERR ;ERROR CORE IN CASE RUN UUO(PROTECTION ERROR)
\r
2378 ; CHANGE TO DISK ERROR CODE IF DEV IS DSK
\r
2379 PUSHJ PDP,SGRELL ;CHANGE TO DISK ENTER ERROR CODE IF DSK
\r
2380 ; RELEASE DEVICE AND RETURN TO USER(IF RUN UUO)
\r
2381 ; OR FIND TTY=PRINT ?CRLF
\r
2382 JSP TAC,PHOLD ;PRINT MESSAGE AND STOP JOB
\r
2383 ASCIZ /DIRECTORY FULL/
\r
2385 ;THIS JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE
\r
2386 ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY
\r
2387 ;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR AC'S
\r
2388 ;JOBPC IS SET TO STARTING ADDRESS OF JOB
\r
2389 ;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN
\r
2395 GETJOB: JSP TAC1,SG1 ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)
\r
2396 PUSHJ PDP,GETJB ;GET THE JOB
\r
2397 JSP TAC,PHOLD ;RETURN ONLY IF EVERYTHING OK
\r
2400 ;THIS JOB GETS A JOB AREA FROM A RETRIEVAL DEVICE AND STARTS IT UP
\r
2402 ;JOB HAS JUST A JOB DATA AREA ASSIGNED WHEN CONTROL GETS HERE
\r
2403 ;THIS MONITOR JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE
\r
2404 ;ASSIGNS CORE AND START
\r
2408 RUNJOB: JSP TAC1,SG1 ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)
\r
2409 JRST URUN1 ;LH PF PC WORD=0(MSTART) SO LH OF TAC1=0 AFTER JSP
\r
2410 ; PUT TAC1 AS FIRST ITEM ON PD LIST(JOBPN1)
\r
2411 ; LH USED BY SGRELE ON ERROR TO SEE IF FROM USER
\r
2412 ; AND LH ADDED TO START PC(JOBSA) BY URUN
\r
2414 ;CALL: MOVE AC,[XWD N,D]
\r
2415 ; CALL AC,[SIXBIT /RUN/]
\r
2416 ; ERROR RETURN ;UNLESS LH=HALT(PRINT CONSOLE MESS, IF YES)
\r
2417 ; 1K OK, TRANSFER TO C(JOBSA)+N FOR NEW PROGRAM
\r
2418 ; USERS ACS CLOBBERED SO CANNOT PASS DATA TO NEW PROGRAM
\r
2420 ;WHERE: D/ DEVICE NAME
\r
2422 ; D+2/ FILE EXT OR 0 (LH SIXBIT)
\r
2424 ; D+4/ PROJECT,PROGRAMMER NO OR 0(CURRENT UFD OR DTA,MTA)
\r
2425 ; D+5/ HIGHEST LOC DESIRED(OR 0) ANALOGOUS TO RUN COMMAND
\r
2426 ; LH IS IGNORED(RATHER THAN ASSIGNING CORE TO HIGH SEG)
\r
2431 URUN: PUSHJ PDP,RESET ;RELEASE DEVICES
\r
2432 ; WARNING! THIS GOES VERY DEEP IN
\r
2433 ; PUSHDOWN, SEE MOD 518
\r
2434 ; (AC UUO PRESERVED IN RESET)
\r
2435 MOVE TAC,@UUO ;RESTORE CONTENTS OF USERS'S CALLING AC
\r
2436 PUSHJ PDP,GETARG ;GET 6 ARGS FROM USER AND STORE
\r
2437 ; SAVE STARTING ADDRESS INCREMENT(LH OF TAC)
\r
2438 ; AND USER AC NUMBER(IN CASE OF ERROR RETURN)
\r
2439 ; SETUP ACS,DEVDAT TO DDB
\r
2440 MOVE TAC,SGANAM(PROG) ;STORE FILE NAME FOR LOW SEG
\r
2441 MOVEM TAC,JBTPRG(ITEM) ;FOR SYSTAT
\r
2442 URUN1: PUSHJ PDP,GETJB ;GET BOTH LOW AND HIGH SEGMENTS
\r
2443 HLRZ TAC1,(PDP) ;GET STARTING ADDRESS INCREMENT(0 IF RUN COM)
\r
2447 CAILE TAC1,1 ;IS START INCREMENT 0 OR 1?
\r
2448 PUSHJ PDP,CHKMED ;NO, CHECK TO SEE IF THIS IS SHARABLE SEG
\r
2449 ; AND IF YES, SET MEDDLE BIT FOR THIS USER
\r
2450 ; SO UWP CANNOT BE TURNED OFF AND CORE FOR HIGH SEG
\r
2451 ; CANNOT BE INCREASED OR DECREASED (TAC1 PRESERVED)
\r
2453 ADDB TAC1,JOBSA(JDAT) ;ADD STARTING ADDRESS TO BOTH
\r
2454 ; SO THAT <CONTROL>C START WILL START
\r
2455 ; PROGRAM AT SAME STARTING ADDRESS
\r
2456 HRLI TAC1,USRMOD ;SET USER MODE BIT IN PC
\r
2457 PUSH PDP,TAC1 ;PUT ON PD LIST
\r
2458 JRST USRXIT ;AND GO TO RETURN TO USER AS IF FROM UUO
\r
2459 \f;UUO TO GET JUST HIGH SEG AND RETURN TO USER
\r
2460 ;CALL IS THE SAME AS FOR RUN UUO EXCEPT THAT OK RETURN IS SKIP RETURN
\r
2461 ;IF ERROR RETURN HAS HALT IN LH, STANDARD CONSOLE MESSAGE IS PRINTED AND JOB STOPPED
\r
2463 INTERN UGTSEG,UGTERR
\r
2468 JRST UGETHI ;IN SEGCON
\r
2470 UGTERR: MOVEI TAC,ILUERR ;ILLEGAL UUO ERROR CORE
\r
2471 PUSHJ PDP,SGRELE ;SEE IF USER WANTS ERROR
\r
2472 JRST UUOERR ;NO, PRINT ILLEGAL UUO
\r
2473 \f;ROUTINE TO SETUP ACS, RESET IO, AND SETUP LOWER CORE LOCATIONS
\r
2474 ;FOR SAVE AND GET(SGALEN SET IO IOWD OR PP IF DTA OR DSK)
\r
2475 ;SGADMP SET TO IOWD FOR THIS SIZE CORE
\r
2476 ;CALL: JSP TAC1,SG1
\r
2477 ; ALWAYS RETURN HERE, UNLESS DEVICE NOT FOUND
\r
2478 ; DEVDAT SETUP TO DEVICE DATA BLOCK(BUT NOT INITED, UNLESS FT2REL=0)
\r
2479 ; SO THAT INIT NOT NECESSARTY IF SEG ALREADY KNOWN(NO DTA QUEUING)
\r
2480 ; DEVICE CHARACTERISTICS WORD(DEVMOD) RETURNED IN AC TAC1
\r
2483 INTERN SG1,SG3,SG4 ;CALLED FROM SEGCON
\r
2484 EXTERN USRDDT,USRREL,JOBSAV,JOBFF,CPOPJ1
\r
2485 EXTERN TTYFNU,JOBSVM,IADRCK,SAVDMP
\r
2487 SG1: JSP TAC,MONSTR ;SETUP PROG.PDP,JDAT,ITEM=JOB NUMBER
\r
2488 ; PUT TAC1 ON END OF PD LIST(EXEC MODE PC,
\r
2489 ; SO ERROR MESSAGES WILL ALWAYS PRINT(SEE SGRELE)
\r
2491 SG2: PUSHJ PDP,RESET ;RELEASE ALL DEVICES
\r
2492 SG2A: MOVEI TAC,DR ;DUMP MODE 16(DUMP BY RECORDS
\r
2493 ; IN CASE THIS IS MAGTAPE)
\r
2495 MOVEM TAC,SGAMOD(PROG) ;STORE FOR OPEN UUO
\r
2496 SETZM SGAEND(PROG) ;0 END OF DUMPE MODE COMMAND LIST
\r
2497 SETZM SGAREN+1(PROG) ;FOR DELETE
\r
2498 SETZM SGAREN+2(PROG) ;FOR DELETE
\r
2499 HLLZS JOBCOR(JDAT) ;0 THIRD ARG IN JOBDATA AREA(SO CHKARG WILL
\r
2500 ; WORD ON FIRST CALL(SAVE AND GET)
\r
2501 SETZM SGAHED(PROG) ;CLEAR BUFFER HEADER ARG, FOR OPEN UUO
\r
2503 OPEN 0,SGAMOD ;TRY TO ASSIGN DEVICE, SINCE IT MUST BE DONE
\r
2506 MOVE TAC,SGADEV(PROG) ;PHYSICAL OR LOGICAL DEVICE NAME
\r
2507 PUSHJ PDP,DEVSRC ;FIND DEVICE AND SETUP DEVDAT TO DDB
\r
2508 ; DO NOT INIT DEV SINCE IO MAY NOT BE NECESSARY
\r
2509 ; DO NOT WANT TO WAIT IN DTA SYSTEM
\r
2510 ; TAPE QUEUE IN 10/40 SYS
\r
2512 JRST SGERRA ;NOT AVAILABLE
\r
2513 ;DEVICE INITED(OR FOUND)
\r
2514 \f;COMMON EXIT FROM SAVHGH AND GETHGH ROUTINES(HIGH SEG SAVE AND GET)
\r
2515 ;SO THAT SGA... LOCATIONS ARE RESTOREED TO ORIGINAL VALUES FOR LOW SEG
\r
2517 SG3: MOVE TAC,JOBFF(JDAT) ;FIRST FREE LOC IN JOB(SET FROM LH OF
\r
2518 ; JOBSA WHICH IS SET BY LOADER
\r
2519 MOVEI TAC,-1(TAC) ;MAKE LAST LOC TO SAVE OR GET(MAKE 0=777777)
\r
2520 SKIPN USRDDT ;USER DDT IN USE(IF YES, SAVE ALL OF CORE
\r
2521 ; SO HIS SYMBOLS WILL BE INCLUDED
\r
2522 PUSHJ PDP,IADRCK ;NO, ADDRESS TO SMALL OR TO LARGE?
\r
2523 MOVE TAC,USRREL ;YES, DUMP ALL OF CORE RATHER THEN GIVE
\r
2524 ; ADDRESS CHECK MESSAGE-HIGHEST REL.ADR.
\r
2525 MOVNS TAC ;-HIGHEST ADR TO SAVE TO GET
\r
2526 ADDI TAC,JOBSVM ;LOWER CORE NOT DUMPED
\r
2527 HRLI TAC,JOBSVM ;IE FIRST LOC-1 TO BE DUMPED
\r
2528 MOVSM TAC,SGADMP(PROG) ;STORE IOWD WORD OF THIS SIZE CORE
\r
2531 MOVE TAC1,DEVMOD(DEVDAT) ;RETURN DEVICE CHARACTERISTICS(IF DISK SYS)
\r
2532 TLNE TAC1,DVDSK ;IS THIS DEVICE A DISK?
\r
2534 MOVS TAC1,SGAPPN(PROG) ;YES. MAKE SURE FORTH WORD IS PROJ,PROG NO.
\r
2536 MOVSM TAC,SGALEN(PROG) ;NO. MAKE SURE FORTH WORD IS IOWD FOR DECTAPE
\r
2537 ; SINCE DECTAPE USES RH TO COMPUTE LENGTH IN K
\r
2538 ; FOR BOTH SAVE AND GET
\r
2539 SKIPN TAC,SGAEXT(PROG) ;DID USER SPECIFY AN EXTENSION ?
\r
2540 MOVSI TAC,SAVDMP ;NO, USE .SAV OR .DMP
\r
2541 MOVEM TAC,SGAEXT(PROG) ;AND STORE FOR LOOK UP ORENTER
\r
2544 ;ERROR ON INIT OR DEVICE SEARCH
\r
2546 INTERN SGERRA ;CALLED FROM SEGCON
\r
2548 SGERRA: JUMPE DEVDAT,SGERR1 ;WAS DEVICE FOUND, BUT JUST UNAVAILABLE?
\r
2549 MOVEM DEVDAT,(PDP) ;YES, SAVE DDB ADDRESS FOR MESSAGE(ERNAM)
\r
2550 MOVEI TAC,DNAERR ;ERROR CODE IN CASE RUN UUO(DEVICE NOT AVAILABLE)
\r
2551 PUSHJ PDP,SGRELE ;RETURN TO USER IF RUN UUO
\r
2552 ; OR FIND TTY AND PRINT ?CRLF
\r
2553 PUSHJ PDP,ERNAM ;PRINT DEVICE NAME USING (PDP)
\r
2554 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2555 ASCIZ / NOT AVAILABLE/
\r
2557 SGERR1: MOVEI TAC,NSDERR ;ERROR CODE IN CASE RUN UUO(NO SUCH DEVICE)
\r
2558 PUSHJ PDP,SGRELE ;RETURN TO USER IF RUN UUO
\r
2559 ; OR FIND TTY AND PRINT ?CRLF
\r
2560 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2561 ASCIZ /NO SUCH DEVICE/
\r
2562 \f;ROUTINE TO GET FILE FROM DEVICE(LOW AND/OR HIGH)
\r
2563 ;CALL: ACS JDAT,PROG,PDP,DEVDAT SETUP
\r
2564 ; MOVE ITEM,JOB NUMBER
\r
2565 ; IFN FTDISK,<MOVE TAC1,DEVMOD(DEVDAT) ;DEVICE CHAR.>
\r
2567 ; RETURN ONLY IF EVERYTHING OK
\r
2569 EXTERNAL JOBCOR,JOB,CPOPJ,JOBS41,JOB41
\r
2574 PUSHJ PDP,GETHGH ;SEE IF HIGH SEG ALREADY EXISTS AND BEING SHARED
\r
2575 ; IF NOT, TRY TO LOOKUP AND READ IN HIGH FILE
\r
2576 ; IF .SHR DOESN'T EXIST, TRY .HGH, IF NEITHER-SKIP RETURN
\r
2577 ; TAC1=DEVMOD(DEVDAT) IF DISK(DEV CHAR.)
\r
2578 JRST LOWFIN ;HIGH SEG NOW IN CORE AND NO LOW FILE NEEDED
\r
2580 ; EITHER BECUASE NOHIGH SEG
\r
2581 ; ORHIGH SEG ALSO NEEDS LOW FILE
\r
2583 LOOKUP 0,SGANAM ;LOOKUP LOW SEG FILE(EXT=SAV,DMP OR LOW(IF HIGH SEG
\r
2584 ; REQUIRES LOW SEG AND USER DID NOT TYPE EXT)
\r
2585 ; MODE=SAVMOD SO DECTAPE SERVICE WILL RETURN
\r
2586 ; IOWD IN E+3(TEMPORARY)
\r
2587 JRST NOFILE ;GO PRINT FILE.EXT NOT FOUND
\r
2588 HLRE TAC1,SGALEN(PROG) ;-NO. OF WORDS IN FILE
\r
2589 PUSHJ PDP,CKIOWD ;CHECK USER'S SUPPLIED CORE ARG TO MAKE SURE NOT
\r
2590 ;TOO SMALL, RETURN LARGER OF FILE SIZE OR CORE ARG
\r
2591 PUSHJ PDP,GETCOR ;OK, TRY TO GET CORE
\r
2592 MOVE TAC1,DEVMOD(DEVDAT) ;DEVICE CHARACTERISTICS
\r
2594 ADDI TAC,JOBSVM ;-WORD COUNT FOR ALL USERS CORE
\r
2595 TLNE TAC1,DVMTA ;MAG TAPE?
\r
2596 HRLM TAC,SGALEN(PROG) ;YES, USE USER-SPECIFIED CORE ARGUMENT
\r
2597 HRRZS JOBPD1(JDAT) ;TURN OFF USER MODE PC FLAG IN CASE THIS
\r
2598 ;IS A RUN UUO,SO ERRORS WILL NOT TRY TO RETURN
\r
2600 PUSHJ PDP,SGDO ;READ IN FILE INTO LOW SEGMENT
\r
2601 INPUT 0,SGALEN ;EXECUTED FROM SGDO
\r
2602 MOVE TAC,JOBS41(JDAT) ;RESTORE USER UUO JSR LOC
\r
2603 MOVEM TAC,JOB41(JDAT) ;SAVED BY SAVE
\r
2604 LOWFIN: HRRZ TAC,JOBCOR(JDAT) ;CORE ARG FROM PREVIOUS SAVE(THIS MONITOR
\r
2605 ; ALWAYS STORES SOMETHING)
\r
2606 SKIP TAC ;IS THIS AN OLD FORMAT FILE WITH NO CORE ARG TO SAVE?
\r
2607 MOVE TAC,USRREL ;YES, USE ASSIGNMENT MADE WEN LOW FILE READ IN
\r
2608 PUSHJ PDP,CKSARG ;RETURN ONLY IF USER'S SUPLLIED ARG IS 0 OR NOT
\r
2609 ; SMALLER THAN SAVE CORE ARG. RETURN LARGER
\r
2610 PUSHJ PDP,GETCOR ;TRY TO GET THIS AMOUNT OF CORE
\r
2611 MOVE TAC,USRREL ;HIGHEST LOC ASSIGNED TO LOW SEG
\r
2612 HRRM TAC,JOBCOR(JDAT) ;SET INITIAL CORE ASSIGNMENT IN JOB DATA AREA FOR
\r
2613 ; USER TO USE TO RESET CORE TO INITIAL SETTING WHEN
\r
2614 ; PROGRAM IS RESTARTED
\r
2616 \f;ROUTINE TO EXECUTE DUMP MODE COMMAND LIST SETUP IN SGALEN(R)
\r
2617 ;AND CHECK FOR ERRORS. USED ONLY TO READ LOW FILE.
\r
2618 ;CALL: PUSHJ P,SGDO
\r
2619 ; INPUT 0,SGALEN OR OUTPUT 0,SGALEN
\r
2620 ; OK RETURN(NO ERRORS)
\r
2621 ;SGDOA CALLED FROM SAVE, IT HAS ALREADY SET LH OF USRHCU=-2
\r
2622 ;TO INDICATE CORE IS COMPRESSED
\r
2624 EXTERN USRHCU,USRJDA,JOBSA,JOBDDT,JOBSDD,JOBSD1,JOBSAV,JOBCOR
\r
2625 EXTERN JOBSV,JOBSV3,JOBSVD,JOBSDP
\r
2627 SGDO: HRROS USRHCU ;SET LH OF USRCHU-1 AS A FLAG TO INDICATE SAVE GET
\r
2628 ; LOW FILE IO IN PROGRESS, SO MONITOR WILL
\r
2629 ; NOT STORE HIGH SEG PROTECTION IN JOBHRL WHICH
\r
2630 ; HAS IOWD FOR ZERO COMPRESSION
\r
2631 SGDOA: XCT @(PDP) ;EXECUTE INPUT OR OUTPUT UUO
\r
2632 MOVE ITEM,JOB ;READ INTO PROTECTED PART OF JOB DATA AREA
\r
2633 PUSHJ PDP,EXPAND ;EXPAND CORE IMAGE
\r
2634 JRST ADRERR ;ADDRESS CHECK, PRINT MESSAGE AND STOP JOB
\r
2635 MOVE TAC1,JOBDDT(PROG) ;COPY DDT STARTING ADR
\r
2636 MOVEM TAC1,USRDDT ;INTO MONITOR PROTECTED AREA(IN CASE THIS IS GET)
\r
2637 SETZM USRHCU ;FLAG THAT SAVE-GET IO FINISHED AND CORE EXPANDED
\r
2638 AOS (PDP) ;SKIP OVER UUO IN CALLING SEQUENCE
\r
2640 ;ROUTINE TO CHECK FOR IO ERRORS(CALLED FROM SEGCON)
\r
2641 ;CALL: MOVE F,DEVICE DATA BLOCK ADDRESS
\r
2643 ; RETURN ONLY IF NO ERRORS
\r
2647 SGIOCK: MOVE T4,DEVIOS(DEVDAT) ;IO STATUS WORD FOR THIS DEVICE
\r
2648 TRNN T4,IOBKTL!IODTER!IODERR!IOIMPM ;ANY ERRORS ON SAVE-GET DEVICE?
\r
2649 POPJ PDP, ;NO, GIVE OK RETURN
\r
2650 MOVEI TAC,TRNERR ;YES, ERROR CODE IN CASE THIS IS RUN UUO
\r
2651 ; (TRANSMISSION ERROR)
\r
2652 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2653 ; OF FIND TTY AND PRINT ?CRLF
\r
2654 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2655 ASCIZ /TRANSMISSION ERROR/
\r
2656 ;ROUTINE TO RELEASE DEVICE AND FIND TTY
\r
2659 SGREL: SKIPN DEVDAT,USRJDA ;HAS CHANNEL BEEN RELEASED ALREADY?
\r
2660 JRST SGREL2 ;YES, FIND TTY AND WAIT FOR OUTPUT TO FINISH
\r
2662 MOVE TAC1,DEVMOD(DEVDAT)
\r
2663 TLNE TAC1,DVMTA ;MAGTAPE?
\r
2664 TLNN DEVDAT,INPB ;YES, WAS AN INPUT DONE?
\r
2666 CLOSE 0,CLSOUT ;YES, CLOSE MTA INPUT
\r
2667 STATO 0,IOTEND+IODEND ;AT END OF APTE?
\r
2668 MTAPE 0,16 ;NO SKIP TO EOF
\r
2669 SGREL1: RELEASE 0, ;NO RELEASE DEVICE
\r
2672 JRST TTYFNU ;FIND TTY FOR CURRENT USER
\r
2673 \f;ROUTINE TO EXPAND CORE AFTER A SAVE(LOW SEG ONLY)
\r
2674 ;CALL: MOVE DEVDAT,DEVICE ADR.
\r
2675 ; MOVE PROG,JOBADR.
\r
2676 ; MOVE ITEM,JOB NUMBER
\r
2677 ; PUSHJ PDP,EXPAND
\r
2678 ; ERROR RETURN, ADR, CHECK, OR NEED CORE BUT NOT CURRENT USER(COMMAND
\r
2679 ; DECODER EXPANDING AFTER USER HAS REDUCED CORE)
\r
2680 ; OK RETURN, CORE EXPANDED
\r
2681 ;CALLED FROM SAVE AND COMMAND DECODER
\r
2682 ;START,CSTART,DDT,REENTER,SAVE,SSAVE COMMANDS IF CORE STILL COMPRESSED
\r
2684 EXPAND: HLRE AC3,SGALEN(PROG) ;-LENGTH OF FILE
\r
2685 MOVNS AC3 ;-LENGTH OF FILE
\r
2686 ADDI AC3,JOBSVM ;ADD FIRST LOC-1 TO FORM HIGHEST LEGAL ADR.
\r
2687 HRLI AC3,PROG ;PUT PROG IN LH FOR COMPARE
\r
2688 ; AC3 SET FOR ADDRESS CHECKING BELOW
\r
2689 SKIPL TAC,JOBSV(PROG) ;IF FIRST LOC IS POSITIVE
\r
2690 JRST SGDO1 ;OLD FORMAT, SO DONT EXPAND
\r
2691 HRRZS TAC ;LOOK AT 1ST WORD OF FILE
\r
2692 CAILE TAC,JOBDDT ;IS IT BELOW JOBJDA?
\r
2693 JRST EXPND1 ;NO. NEW COMPRESSED FORMAT
\r
2694 CAIE TAC,JOBSAV ;IS JOBDDT THE DATA WORD?
\r
2695 JRST EXPND1 ;NO. EXPAND
\r
2696 SKIPN JOBSV3(JDAT) ;IS THE SAVE FILE FROM CONVERT?
\r
2697 ; CONVERT DOES NOT ZERO COMPRESS
\r
2698 ; IT JUST WRITES ENTIRE FILE WITHH 1 IOWD IN FRONT
\r
2699 SOJA AC3,SGDO1 ;YES, GO BLT DATA DOWN AS IF OLD DISK SAVE FILE
\r
2700 ; (NON-COMPRESSED)
\r
2701 HRROI TAC,JOBSD1 ;YES. CHANGE TO IOWD 1,JOBSDD
\r
2702 EXCH TAC,JOBSV(PROG) ;ZEP, THE IOWD IS FIXED
\r
2703 HLRES TAC ;WORD COUNT OF IOWD
\r
2704 AOJE TAC,EXPND1 ;JUST 1 DATA WORD - THROUGH
\r
2705 MOVSI TAC,1(TAC) ;MAKE IOWD N-2,JOBSAV
\r
2707 HRRI TAC,JOBSAV ;SO NEXT DATA WDS WILL BE SKIPPED
\r
2708 MOVEI TAC1,JOBSV(PROG)
\r
2709 MOVEM TAC,2(TAC1) ;STORE IN COMPRESSED DATA
\r
2711 EXPZ: MOVSI TAC,-2
\r
2712 HLLM TAC,JOBSV(PROG)
\r
2713 \f;COME HERE TO DO THE ACTUAL EXPANSION OF A FILE
\r
2714 EXPND1: MOVE TAC,[XWD PROG,JOBSV] ;IT WAS READ INTO JOBSV
\r
2715 MOVE TAC,@TAC ;FIRST IOWD
\r
2716 EXPLP1: HRRZ AC1,TAC1 ;ADDRESS OF IOWD
\r
2717 CAIGE AC1,JOBSAV ;LEGAL?
\r
2718 AOJA AC1,TOOLOW ;NO. DELETE DATA WHICH IS TO LOW
\r
2719 HLRE AC1,TAC1 ;YES. GET WORDCOUNT
\r
2721 HRLM AC1,TAC1 ;CONVERT IOWD TO +N IN LH
\r
2722 ADDI TAC,1(AC1) ;ADDRESS OF NEXT IOWD.
\r
2723 CAMLE TAC,AC3 ;IN BOUNDS?
\r
2724 JRST SGDOER ;NO. COMPLAIN
\r
2725 ADDI TAC1,(AC1) ;YES. CHANGE RH OF IOWD
\r
2726 EXCH TAC1,@TAC ;MAKE IT XWD +N,A+N-1 AFTER DATA BLOCK
\r
2727 JUMPL TAC1,EXPLP1 ;CONTINUE IF NEXT THING IS AN IOWD
\r
2728 PUSH PDP,TAC ;SAVE DATA LOCATION
\r
2729 HRRZ TAC,@TAC ;TOP REAL LOCATION NEEDED
\r
2731 TRO TAC,1777 ;MAKE IT NK-1
\r
2732 HLRZ TAC1,PROG ;PRESENT SIZ OF LOW SEG
\r
2733 CAMG TAC,TAC1 ;IS THERE ENOUGH?
\r
2735 CAME ITEM,JOB ;NO, IS TIS THE CURENT JOB?
\r
2736 JRST SGDOER ;NO, GIVE ERRROR RETURN, MUST BE COMMAND DECODER
\r
2737 ; DOING EXPAND AFTER USER HAS REDUECED CORE
\r
2738 PUSHJ PDP,GETCOR ;YES. GET IT
\r
2739 EXPCOR: POP PDP,TAC1
\r
2740 MOVEI AC1,@TAC1 ;TOP DATA LOC
\r
2741 HRLI AC1,1(AC1) ;SET TO ZERO TO TOP OF CORE
\r
2744 HRLI TAC,PROG ;RELOCATE TOP LOC OF JOB
\r
2745 BLT AC1,@TAC ;ZAP, CORE IS 0 FROM HERE ...
\r
2746 HRROI TAC,@TAC1 ;FORM DATA POINTER
\r
2747 EXPLP2: HRRZ AC1,(TAC) ;TO DATA POINTER
\r
2748 ADDI AC1,(PROG) ;RELOCATE
\r
2749 HLRZ AC2,(TAC) ;WORD COUNT
\r
2750 SUBI TAC1,1(AC2) ;POINT TAC1 TO PREVIOUS IOWD
\r
2751 SETZM (TAC) ;ZERO THIS IOWD
\r
2752 SOSA TAC ;POINT TO DATA
\r
2754 CAIGE AC1,JOBSDD(PROG) ;DON'T STORE DATA BELOW JOBSDD
\r
2756 POP TAC,(AC1) ;MOVE A DATA WORD
\r
2757 SETZM 1(TAC) ;ZERO WHERE IT CAME FROM
\r
2758 SOJG AC2,EXPLP3 ;LOOP IF MORE DATA
\r
2759 CAMLE TAC1,[XWD PROG,JOBSV] ;THROUGH?
\r
2760 JRST EXPLP2 ;NO, DO NEXT BLOCK
\r
2761 EXCH AC2,JOBSDD(PROG) ;YES, ZERO JOBSDD
\r
2762 MOVEM AC2,JOBDDT(JDAT) ;SET USER DDT STR ADR
\r
2763 JRST SGDO2 ;AND SETUP USRDDT IN MONITOR PROTECTED
\r
2765 \f;THIS ROUTINE WILL DELETE ALL DATA FROM A COMPRESSED FILE
\r
2766 ;WHICH IS BELOW JOBSOD (PROBABLY WRITTEN BY TENDUMP)
\r
2768 TOOLOW: HLRE AC2,@TAC ;WORDCOUNT OF OFFENDING IOWD
\r
2769 SUB AC1,AC2 ;ADDRESS+N
\r
2770 CAIG AC1,JOBSDD ;IS ANY DATA IN IT LEGAL?
\r
2771 AOJA TAC,NXIOWD ;NO, TEST NEXT IOWD
\r
2772 SUBI AC1,JOBSDD ;YES, NUMBER OF WORDS TO KEEP
\r
2773 MOVNS AC2 ;TOTAL NUMBER OF WORDS
\r
2774 SUB AC2,AC1 ;NUMBER OF WORDS TO DROP
\r
2775 HRLS AC2 ;INTO BOTH HALVES
\r
2776 ADD AC2,@TAC ;NEW IOWD FOR ONLY GOOD DATA
\r
2777 ADDI TAC,(AC2) ;POINT TAC TO LAST BAD DATA LOC
\r
2778 MOVEM AC2,@TAC ;STORE UPDATED IOWD OVER IT
\r
2779 JRST IOWBLT ;GO BLT OVER BAD DATA
\r
2780 NXIOWD: SUB TAC,AC2 ;POINT TAC TO NEXT IOWD
\r
2781 HRRZ AC1,@TAC ;GET ADDRESS
\r
2782 CAIGE AC1,JOBSD1 ;LEGAL?
\r
2783 AOJA AC1,TOOLOW ;NO, AT LEAST PART OF THE DATA IS LOW
\r
2784 IOWBLT: MOVSI TAC,@TAC ;YES, KEEP THE ENTIRE IOWD DATA
\r
2785 HRRI TAC1,JOBSV(PROG) ;TAC1 IS A BLT POINTER
\r
2786 SUBI TAC,JOBSV ;RH OF TAC IS AMOUNT BEING DELETED
\r
2787 SUBI AC3,(TAC) ;AC3 POINTS TO TOP OF DATA READ IN-(N)
\r
2788 BLT TAC1,@AC3 ;MOVE ONLY GOOD DATA DOWN
\r
2789 JRST EXPND1 ;GO EXPAND THE GOOD DATA
\r
2790 \fSGDO1: MOVEI TAC,JOBDDT(PROG) ;MOVE EVERYTHING DOWN )MUST BE NON-COMPRESSED DSK FILE
\r
2791 HRLI TAC,JOBSVD(TAC) ;OR CONVERT SAVE FILE
\r
2792 SKIPGE JOBSV(JDAT) ;IS THIS CONVERT FILE(FIRST WORD IS IOWD)?
\r
2793 HRLI TAC,JOBSDP(TAC) ;YES, ALSO SKIP OVER IOWD
\r
2796 SGDO2: AOSA (PDP) ;SET FOR OK RETURN
\r
2797 SGDOER: POP PDP,TAC
\r
2798 SETZM JOBHCU(JDAT) ;CLEAR LH AND SET HIGHEST USER CHAN, IN
\r
2799 ; USE TO 0(WHERE IT SHOULD BE ANYWAY)
\r
2800 POPJ PDP, ;ERROR RETURN OR OK RETURN
\r
2801 \f;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK TO SEE IF 0
\r
2802 ;OR GREATER THAN OR EQUAL TO IOWD USED TO SAVE OR GET FILE
\r
2803 ;CALL: HLRE TAC1,-NO. OF WORDS IN FILE
\r
2804 ; PUSHJ PDP,CKIOWD
\r
2805 ; RETURN WITH LARGER OF 2 POSITIVE NOS. IN TAC(1777 ORED IN)
\r
2806 ; DO NOT RETURN IF CORE ARG SUPLLIED BY USER IS TOO SMALL
\r
2807 ;CALLED FROM SAVE AND GET
\r
2811 CKIOWD: MOVEI TAC,JOBSVM ;FIRST LOC-1 READ OR WRITTEN IN USER AREA
\r
2812 HRRM TAC,SGALEN(PROG) ;RESTORE RH TO JOBSAV AFTER LOOKUP
\r
2813 SUB TAC,TAC1 ;HIGHEST LOC=FIRST LOC-1+LENGTH OF FILE
\r
2814 ; FALL INOT CHSARG
\r
2816 ;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK IF 0
\r
2817 ;OR GREATER THAN OR EQUAL TO CORE ARG FOR PREVIOUS SAVE
\r
2818 ;CALL: HRRZ TAC,JOBCOR(JDAT) ;WRITTEN WHEN FILE SAVED
\r
2819 ; PUSHJ PDP,CKSARG
\r
2820 ; RETURN WITH LARGER OF 2 IN AC TAC, ONLY IF USER ARG NOT TOO SMALL
\r
2821 ;CALLED ONLY FROM GET AFTER JOB DATA AREA LOADED FROM FILE(JOBCOR) OR HIGH SEG
\r
2823 INTERN NROOM1 ;CALLED FROM SEGCON
\r
2825 CKSARG: IORI TAC,1777 ;MAKE SURE 1K-1
\r
2826 CAMG TAC,SGANEW(PROG) ;IS USER SUPPLIED CORE ARG BIGGER?
\r
2827 SKIPA TAC,SGANEW(PROG) ;YES, RETURN IT
\r
2828 SKIPN SGANEW(PROG) ;NO, DID USER SUPPLY ONE
\r
2829 POPJ PDP, ;NO, RETURN LARGER OF TWO
\r
2830 ;ROUTINE TO PRINTE #K OF CORE NEEDED
\r
2831 ;CALL: MOVE TAC,HIGHEST REL. USER ADR.
\r
2832 ; PUSHJ PDP, NROOM1
\r
2835 NROOM1: PUSH PDP,TAC ;YES, ERROR, USER'S SUPPLIED CORE ARG TOO SMALL
\r
2836 NOROOM: MOVEI TAC,NECERR ;ERROR CODE IN CASE THIS IS RUN UUO(NOT ENOUGH CORE)
\r
2837 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2838 ; OR FIND TTY AND PRINT ?CRLF
\r
2839 HRRZ TAC,(PDP) ;GET AMOUNT OF CORE REQUESTED
\r
2840 LSH TAC,-12 ;CONVERT TO NO. OF 1K BLOCKS-1
\r
2841 PUSHJ PDP,DECP1 ;ADD 1 TO TAC AND PRINT DECIMAL
\r
2842 JSP TAC,PHOLD ;START TTY ADN STOP JOB
\r
2843 ASCIZ /K OF CORE NEEDED/
\r
2846 ;ROUTINE TO ASSIGN CORE FOR LOW AND HIGH SEG
\r
2847 ;CALL: MOVE PROG,LOW SEG RELOCATION
\r
2848 ; HRR TAC,HIGHEST LOC DESIRED
\r
2849 ; PUSHJ PDP,GETCORE
\r
2850 ; RETURN ONLY IF ASSIGNED
\r
2854 GETCOR: HRRZM TAC,SGACOR(PROG) ;SOTRE CORE ARG FOR CORE UUO IN USER AC
\r
2855 PUSH PDP,TAC ;SAVE IN CASE OF ERROR
\r
2856 CALLI SGACOR,11 ;DO CORE UUO
\r
2857 JRST NOROOM ;NOT AVAILABLE, PRINT ERROR AND AMOUNT TRYING FOR
\r
2858 JRST TPOPJ ;OK, REMOVE TAC FROM PD LIST AND RETURN
\r
2859 \f;ROUTINE TO PRINT NOT A SAVE FILE IF WRONG FORMAT FILE DETECTED
\r
2863 GETERR: MOVEI TAC,NSFERR ;ERROR CODE IN CASE THIS IS RUN UUO(NOT SAVE FILE)
\r
2864 PUSHJ PDP,SGRELE ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO
\r
2865 ; OR FIND TTY AND PRINT ?CRLF
\r
2866 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2867 ASCIZ /NOT A SAVE FILE/
\r
2869 ;ROUTINE TO PRINT FILE NOT FOUND ORNEEDS 2 RELOC REG
\r
2871 INTERN NOFILE ;CALLED FROM SEGCON
\r
2873 NOFILE: MOVEI TAC,FNFERR ;ERROR CODE IN CASE THIS IS RUN UUO(FILE NOT FOUND
\r
2874 ; CHANGE ERROR CODE TO DISK ERROR CODE IF DEV IS DSK
\r
2875 PUSHJ PDP,SGRELL ;RETURN DISK LOOKUP OR ENTER ERROR CODE IF DSK
\r
2876 ; RELEASE DEVICE AND ERROR RETURN TO USER IF HE WANTED
\r
2877 ; OR FIND TTY AND PRINT ?CRLF
\r
2878 MOVE TAC1,SGANAM(PROG) ;PRINT FILE NAME
\r
2880 PUSHJ PDP,PRPER ;PRINT PERIOD
\r
2881 HLLZ TAC1,SGAEXT(PROG) ;PRINT EXTENSION
\r
2883 JSP TAC,PHOLD ;START TTY AND STOP JOB
\r
2884 ASCIZ / NOT FOUND/
\r
2885 \f;ROUTINE TO RELEASE DEVICE ON AN ERROR AND CHECK TO SEE
\r
2886 ;IF THIS IS A MONITOR COMMAND OR USER UUO
\r
2887 ;IF USER UUO, GIVE ERROR RETURN TO USER UNLESS THERE IS A HALT
\r
2888 ;IN LH OF EROR RETURN WORD, IN WHICH CASE FIND TTY, PRINT ?CRLF
\r
2889 ;AND RETURN TO CALLER SO CAN ADD MORE INFO TO ERROR MESSAGE AND STOP JOB
\r
2890 ;CALL: MOVEI TAC,ERROR CODE(DEFINED IN S.MAC)
\r
2891 ; PUSHJ PDP,SGRELE
\r
2892 ;DO NOT RETURN TO CALLER IF USER WANTS ERROR RETURN ON RUN AND GETSEG UUOS
\r
2894 EXTERN JOBPD1,JOBPD3,USRJDA
\r
2896 SGRELL: ;LOOKUP OR ENTER FAILURE
\r
2898 MOVE TAC1,DEVMOD(DEVDAT) ;IS THIS DEVICE A DISK?
\r
2900 HRRZ TAC,SGAEXT(PROG) ;YES, RETURN DISK SERVICE ERROR CODE
\r
2902 SGRELE: MOVE TAC1,JOBPD1(JDAT) ;GET FIRST PC ON PD LIST
\r
2903 TLNN TAC1,USRMOD ;IS IT IN USER MODE(IE USER UUO)?
\r
2905 JRST SGRLE1 ;NO. MUST BE MONITOR COMMAND OR CALLED OVERLAYED
\r
2906 ; RELEASE DEVICE, FIND TTY, AND RETURN TO CALLED
\r
2907 PUSH PDP,TAC ;SAVE ERROR CORE
\r
2908 HRR UUO,TAC1 ;ADDRESS OF RETURN AFTER RUN OF GETSEG UUO
\r
2909 PUSHJ PDP,GETWDU ;GET ERROR RETURN WORD FROM RUN OR GETSEG UUO
\r
2910 HLRZ TAC1,TAC ;GET OP CODE
\r
2911 POP PDP,TAC ;RESTORE ERROR CODE
\r
2912 CAIN TAC1,(HALT) ;IS LH HALT?
\r
2913 JRST SGRLE1 ;YES, RELEASE DEVICE,FIND TTY, AND RETURN TO CALLER
\r
2914 HRR UUO,JOBPD3(JDAT) ;NO, AC NUMBER OF RUN OR GETSEG UUO
\r
2915 PUSHJ PDP,STOTAC ;STORE ERROR NUMBER IN USER AC
\r
2916 SKIPE USRJDA+0 ;DO NOT RELEASE CHANNEL 0 IF NOT INITED YET
\r
2917 ; UUO HANDLER DOES NOT ALLOW THIS FROM EXEC MODE
\r
2918 RELEAS 0, ;RELEASE DEVICE(IF INITED)
\r
2919 JRST USRXIT ;AND RETURN TO USER TO HANDLE ERROR
\r
2921 SGRLE1: PUSHJ PDP,SGREL ;RELEASE DEVICE AND FIND TTY
\r
2922 JSP TAC,CONMES ;PRINT ?CRLF AND RETURN TO CALLER
\r
2923 ; WHO WILL PRINT REST OF ERROR MESSAGE AND STOP JOB
\r
2926 COMEND: END ;END OF COMCON
\r