464d9533ac928ecae5fe0e21554ebe24441ef8c8
[retro-software/dec/tops10/v4.5.git] / src / comcon.mac
1 TITLE COMCON - COMMAND DECODER AND SAVEGET ROUTINES - V433\r
2 SUBTTL /RCC 03 JUN 69\r
3 XP VCOMCN,433\r
4                                 ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB\r
5 \r
6         ENTRY COMCON    ;ALWAYS LOAD COMCON IF LIBRARY SEARCH\r
7 COMCON:\r
8 \r
9 ;CALLED FROM CLOCK ROUTINE WHEN 'COMCNT' IS GREATER THAN 0\r
10 \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
16 ;ITEM = JOB NUMBER\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
30 ;COMMAND RESPONSE\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
34 \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
40 \fINTERNAL COMMAND\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
51 \r
52 T=BUFPNT        ;TEMPORARY AC'S\r
53 T1=BUFWRD\r
54 T2=UUO\r
55 T3=AC1\r
56 T4=AC2\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
84 IFN FTLOGIN,<\r
85                 TLNN T,JLOG             ;IS JOB LOGGED IN?\r
86                 TLNE TAC1,NOLOGIN       ;NO, CAN COMMAND PROCEED WITH NO LOGIN?\r
87                 JRST CHKNO              ;YES\r
88                 JSP TAC,COMER           ;NO, TYPE "LOGIN PLEASE"\r
89                 ASCIZ /LOGIN PLEASE\r
90 />\r
91 CHKNO:  JUMPN ITEM,CHKRUN       ;JOB NUMBER ALREADY ASSIGNED?\r
92         TLNE TAC1,NOJOBN        ;NO, DOES THIS COMMAND NEED A JOB NUMBER?\r
93         JRST COMGO              ;NO\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
98 \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
103 /\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
111 IFN FTTIME,<\r
112         SETZM RTIME(ITEM)       ;CLEAR INCREMENTAL JOB RUNNING TIME\r
113         SETZM TTIME(ITEM)       ;CLEAR TOTAL JOB RUNNING TIME\r
114 >\r
115 IFN FTKCT,<\r
116         EXTERN JBTKCT\r
117         SETZM JBTKCT(ITEM)      ;CLEAR CORE-RUNNING TIME CORE\r
118 >\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
123         JRST    CHKACT          ;NO\r
124         JSP     TAC,COMER       ;YES.\r
125         ASCIZ   /PLEASE TYPE ^C FIRST\r
126 /\r
127 \r
128 CHKACT:\r
129 \r
130 IFN PROG-JDAT,<\r
131         MOVE JDAT,JBTDAT(ITEM)  ;ADDRESS OF JOB DATA AREA\r
132 >\r
133         MOVE PROG,JBTADR(ITEM)  ;XWD PROTECTION,RELOCATION\r
134 IFN FTSWAP,<\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
139         JRST CHKCO2             ;NO\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
150 >\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
158 /\r
159 \fCHKXPN:        TLNN TAC1,PLSXPN        ;DOES THIS COMMAND NEED CORE TO BE EXPANDED?\r
160         JRST COMGO              ;NO\r
161         HLRE IOS,JOBHCU(JDAT)   ;YES, IS CORE STILL COMPRESSED(SAVE DID NOT GO\r
162                                 ; TO COMPLETION)\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
165                                 ; OR HIGH SEG\r
166         PUSHJ PDP,EXPAND        ;YES, EXPAND CORE FIRST\r
167         JFCL                    ;IGNORE ADDRESS CHECK ERROR, WE TRIED\r
168 IFN FTSWAP,<\r
169         JRST CHKDLY             ;DELAY COMMAND BECAUSE COMMAND DECODER ACS ARE\r
170                                 ; ALL GONE, NEXT TIME JOBHCU WILL BE 0\r
171 >\r
172 \r
173 IFE FTSWAP,<\r
174         HRRI TAC1,DLYCM1                ;DELAY COMMAND TILL NEXT CLOCK TICK\r
175         JRST COMDIS\r
176 >\r
177 \r
178 COMER:  MOVSI TAC1,NOINCK\r
179         MOVEM TAC1,(PDP)\r
180         MOVEI TAC1,CERR         ;CALL ERROR MESSAGE ROUTINE\r
181 \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
186 \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
190 \r
191 COMRET: POP PDP,T1              ;RESTORE COMMAND FLAGS\r
192         POP PDP,DEVDAT          ;RESTORE TTY DDB ADDRESS.\r
193 IFN FTTTYSER,<\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
198 >\r
199         MOVSI T,400000\r
200         LDB     TAC,PUNIT\r
201         ANDCAM  T,TTYTAB(TAC)   ;YES. TURN OFF SIGN BIT\r
202         SOS     COMCNT\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
207 \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
211         JRST PCRLF              ;YES.\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
216         ASCIZ /JOB /\r
217         MOVE TAC,ITEM           ;PRINT JOB NUMBER\r
218         PUSHJ PDP,RADX10\r
219         PUSHJ PDP,PRSPC\r
220         MOVEI TAC,CONFIG        ;PRINT SYSTEM CONFIGURATION NAME\r
221         PUSHJ PDP,CONMES\r
222 IFN FTLOGIN, <\r
223         PUSHJ PDP,CRLF\r
224 >\r
225 IFE FTLOGIN, <\r
226         PUSHJ PDP,PRSPC\r
227         PUSHJ   PDP,DAYTM1\r
228 >\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
232         PUSHJ PDP,CRLF          ;NO\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
243 IFN     FTSWAP, <\r
244         EXTERN  PJOBN,REQUE\r
245         LDB     ITEM,PJOBN      ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK\r
246         JUMPE   ITEM,CPOPJ      \r
247         TLNE    T1,CMWRQ        ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR?\r
248 \r
249         JRST    REQUE           ;YES\r
250 >\r
251         POPJ PDP,\r
252 \r
253 IFN FTTTYSER,   <EXTERN SPCHEK,TITAKR,GETCHR,TPOPJ\r
254 \r
255 SKPBRK: PUSH    PDP,TAC\r
256 SKPBR2: PUSHJ   PDP,SPCHEK\r
257         JRST    SKPBR1\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
263 >\r
264 \f;TABLE OF CONSOLE COMMANDS\r
265 \r
266 INTERNAL FTATTACH,FTTIME,FTTALK,FTEXAMINE,FTLOGIN,FTREASSIGN\r
267 INTERNAL FTFINISH,FTCCL\r
268 \r
269 ;BITS CHECKED BEFORE DISPATCHING TO COMMAND SETUP ROUTINE\r
270 \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
289 \r
290 ;BITS CHECKED AFTER RETURN FROM COMMAND SETUP ROUTINE\r
291 \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
302 \r
303                 ;T TAKEN ABOVE BY 'PLSXPN' BIT\r
304 \r
305 ERRFLG=1        ;COMMAND ERROR\r
306 \fDEFINE NAMES<\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
316 IFN FT2REL,<\r
317         C SSAVE,SSAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN\r
318 >\r
319         C CONTINUE,CONT,NOPER!TTYRNU!INCORE!NORUN\r
320 IFN FTEXAMINE,<\r
321         C D,DCOM,CMWRQ!INCORE\r
322         C E,ECOM,NOCRLF!CMWRQ!INCORE\r
323 >\r
324         C PJOB,PJOB,NOCORE\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
328 IFN FTFINISH,<\r
329         C FINISH,CFINI,TTYRNC!NOACT!INCORE!NORUN\r
330 >\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
334 IFN FTATTACH,<\r
335         C DETACH,DETACH,NOPER+NOCRLF+NOCORE!NOJOBN!NOINCK\r
336         C ATTACH,ATTACH,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
337 >\r
338         C DAYTIME,DAYTIM,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
339 IFN FTTIME,<\r
340         C TIME,RUNTIM,NOCORE!NOLOGIN!NOINCK\r
341 >\r
342         C RESOURCES,FREDEV,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
343 IFN FTLOGIN,<\r
344         C SCHEDULE,SKEDUL,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
345 >\r
346 IFN FTTALK,<\r
347         C TALK,TALK,NOCRLF+NOPER+NOCORE!NOJOBN!NOLOGIN!NOMESS!NOINCK\r
348 >\r
349 IFN FTLOGIN,<\r
350         C LOGIN,CLOGIN,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN\r
351 >\r
352 IFE FTLOGIN,<\r
353         C LOGIN,CPOPJ,NOCORE!NOACT!NORUN!NOTRAN\r
354 >\r
355 IFN FTREASSIGN,<\r
356         C REASSI,REASS,NOCORE!NOACT!INCORE!CMWRQ!NORUN\r
357 >\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
360 IFN FTCCL,<\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
376 >\r
377 >\r
378 \f;GENERATE TABLE OF SIXBIT COMMAND NAMES\r
379 \r
380 DEFINE C(A,B,D) <\r
381         <SIXBIT /A/>\r
382 >\r
383 COMTAB: NAMES\r
384 DISPL=.-COMTAB  ;LENGTH OF TABLE\r
385 \f;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS\r
386 \r
387 DEFINE C(A,B,D) <\r
388 Z       B       (D)\r
389 >\r
390 DISP:   NAMES\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
394 ;ITEM = JOB NUMBER\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
399 ;IOS=0\r
400 \r
401 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF\r
402 ;NEEDED AND TTY IS STARTED\r
403 \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
408 \r
409         EXTERN TTYFNU\r
410 \r
411 COR0:   JUMPE PROG,CPOPJ        ;RETURN IF JOB DOES NOT HAVE CORE\r
412         \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
419 IFN FTSWAP,<\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
424 >\r
425 IFN FT2REL,<\r
426         EXTERN KILHGH\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
431 >\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
436 \r
437 INTERNAL PJOB,DECLF\r
438 \r
439 PJOB:   MOVE TAC,ITEM           ;JOB NO.\r
440 DECLF:  PUSHJ PDP,RADX10        ;PRINT TAC AS DEC. THEN CRLF\r
441         JRST CRLF\r
442 \r
443 ; "KJOB" KILL ATTACHED JOB\r
444 \r
445 EXTERNAL JBTSTS,TTYKILM,CPOPJ\r
446 INTERNAL FTTIME,JOBKL\r
447 \r
448 KJOB:   JUMPE ITEM,JOBKB        ;WAS JOB INITIALIZED?\r
449 IFN     FTLOGIN,<\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
454 IFN     FTSWAP, <\r
455         PUSHJ   PDP,ALOGN1      ;ATTACH TTY\r
456 >\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
460         JRST    ARCOM\r
461 >\r
462 KJOB2:\r
463 IFE FTSWAP+FTLOGIN,<\r
464         JUMPE PROG,JOBKA        ;YES. DOES JOB HAVE CORE IN MEMORY?\r
465 >\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
473 JOBKA:\r
474 IFN FTTIME,<\r
475 IFE     FTLOGIN, <\r
476         PUSHJ PDP,PRTTIM        ;PRINT JUST TOTAL RUN TIME\r
477         PUSHJ   PDP,TTYSTR      ;START TTY\r
478 >>\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
482 \r
483 ;ERROR IN COMMAND\r
484 \r
485 CERR:   JRST ERRMES\r
486 \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
490 INTERNAL FT2REL\r
491 EXTERNAL JOBSA\r
492 \r
493 START:                          ;SAME AS CSTART, DIFF BY COMTAB BITS\r
494                         ; WHICH PUT TTY IN MONITOR OR USER MODE\r
495 \r
496 ; "CSTART L" OR   "CSTART" - START AT LOC. L(TTY IN COMMAND MODE)\r
497 \r
498 STARTC: PUSHJ PDP,OCTIN         ;CONVERT POSSIBLE OCTAL NO ARG.\r
499 IFE FT2REL,<\r
500         SKIPA TAC1,JOBSA(JDAT)  ;NO START ADR. SPECIFIED RETURN\r
501 >\r
502 IFN FT2REL,<\r
503         JRST SNOARG     ;NO ARG SPECIFIED RETURN\r
504 >\r
505         JRST COMERA             ;ILLEGAL CHARACTER\r
506 IFN FT2REL,<\r
507         EXTERN CHKMED\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
511                                 ; TURN UWP OFF.>\r
512         JRST CHKSTR             ;START JOB WITH PC IN USER MODE,\r
513                                 ; IF START ADR IS NON-ZERO\r
514 IFN FT2REL,<\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
518 >\r
519 \f;"REENTER"  - REENTER USER PROGRAM\r
520 \r
521 EXTERNAL JOBREN\r
522 \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
526 \r
527 ; "DDT" - START EXECUTION AT DDT IN USER AREA\r
528 \r
529         EXTERN JOBDDT\r
530 \r
531 DDTGO:  MOVE TAC1,JOBDDT(JDAT)  ;DDT STARTING ADR. IN JOB DATA AREA\r
532                         ; FALL INTO CHSTR\r
533 \r
534 ;ROUTINE TO CHECK TO SEE IF STARTING ADDRESS IS NON-ZERO, AND START USER IF OK\r
535 \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
541 /\r
542 \f\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
548 \r
549 INTERNAL FTDISK\r
550 EXTERNAL STUSER,JOB,PJBSTS,IOWQ,JOBDAC\r
551 \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
555 IFN FTDISK,<\r
556         \r
557         PUSHJ PDP,STOPCK        ;CAN THE JOB STOP?\r
558         JRST DLYCM1             ;NO. DELAY IT.\r
559 >\r
560         PUSHJ PDP,STOP1         ;STOP JOB\r
561 STOP8:  IFE FTTTYSER,<\r
562         JSP TAC,CONMES          ;PRINT "^C CRLF CRFL PERIOS"\r
563         ASCIZ /^C\r
564 /\r
565 >\r
566 IFN FTTTYSER,<  POPJ    PDP,0>\r
567 \r
568 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)\r
569 \r
570 CONTC:                          ;SAME AS CONT\r
571 \r
572 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF\r
573 EXTERNAL JBTSTS\r
574 \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
579 \r
580         ASCIZ /CAN'T CONTINUE\r
581 /\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
587 \r
588 EXTERNAL PCORSZ\r
589 \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
593 IFE FTSWAP,<\r
594         JUMPE TAC1,COR0         ;RELEASE DEVICES IF USER ASKING FOR 0 CORE\r
595 >\r
596 IFN FTSWAP,<\r
597         JUMPE TAC1,COR1         ;ASSIGN JUST MINIMAL CORE AND RELEASE DEVICES\r
598                                 ; IF ASKING FOR 0 CORE\r
599 >\r
600         LSH TAC1,12             ;CONVERT 1K BLOCKS TO WORDS\r
601         \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
606 IFN FTSWAP,<\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
613 >\r
614 \fCOR2:  IFN FTTTYSERM,<\r
615         MOVE DEVDAT,-2(PDP)     ;RESTORE TTY DDB ADR\r
616 >\r
617         PUSHJ PDP,INLMES        ;PRINT ? FOR PATCH\r
618         ASCIZ /?\r
619 /\r
620 COR3:   PUSHJ PDP,PRTSEG        ;PRINT SIZE OF LOW SEG\r
621 IFN FT2REL,<\r
622         EXTERN PRTHGH\r
623         PUSHJ PDP,PRTHGH        ;PRINT SIZE OF HIGH SEG (+0 IF NONE)\r
624                                 ; NOTHING IF NOT 2 REG. MACHINE OR SOFTWARE\r
625 >\r
626         PUSHJ PDP,INLMES\r
627         ASCIZ "/"\r
628 \r
629 IFE FTSWAP,<\r
630         EXTERN CORTAL\r
631         MOVE TAC,CORTAL         ;NO. OF FREE 1K BLOCKS\r
632 >\r
633 IFN FTSWAP,<\r
634         EXTERNAL CORMAX\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
638 >\r
639         PUSHJ PDP,RADX10        ;PRINT NO. OF 1K BLOCKS AVAILABLE\r
640 IFE FTSWAP,<\r
641         JSP TAC,CONMAS\r
642         ASCIZ /K CORE\r
643 /\r
644 >\r
645 IFN FTSWAP,<\r
646         EXTERN VIRTAL\r
647         PUSHJ PDP,INLMES\r
648         ASCIZ /K CORE\r
649 VIR. CORE LEFT =/\r
650         MOVE TAC,VIRTAL         ;PRINT AMOUNT OF FREE SWAP SAPCE LEFT\r
651         JRST RADX10             ;IN DECIMAL\r
652 >\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
656 \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
660 \r
661 SAVE:IFN FT2REL,<\r
662         TLO IOS,NSRBIT          ;SET FLAGE FOR NON-SHARABLE EXT(HGH)\r
663 >\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
667         JRST SGSET\r
668 \r
669 ; "GET DEVICE:FILE-NAME[PROJ.,PROG.] CORE" - SETS UP JOB AREA FROM RETREIVABLE\r
670 \r
671 ;DEVICE AND ASSIGNS CORE.\r
672 \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
676         JRST RUNCM      \r
677                                 ; JOB DATA AREA FOR MONITOR JOB\r
678 \r
679 IFN FTLOGIN,<   ;AUTOMATIC LOGIN AFTER DSK REFESH OR WHEN REFLAG SET\r
680 \r
681 EXTERNAL        REFLAG\r
682 \r
683 LOGREF: MOVEM   TAC,PRJPRG(ITEM)        ;PRJ,PRG NRS. IN REFLAG\r
684         MOVSI   TAC,JLOG\r
685         IORM    TAC,JBTSTS(ITEM)\r
686         SETZM   -1(PDP)                 ;CLEAR ALL FLAGS FOR COMRET\r
687         SETZM   REFLAG                  ;ONLY ONCE\r
688         POPJ    PDP,\r
689 >\r
690 \f;"HELP" -HELP COMMAND\r
691 \r
692 INTERNAL FTLOGIN\r
693 \r
694 IFN FTLOGIN,<   EXTERNAL HELPPP\r
695 HELP1:\r
696         MOVE TAC,HELPPP\r
697         TLN T,JLOG\r
698         JRST    ALOGIN\r
699         POPJ    PDP,\r
700 >\r
701 \r
702 HELP:   IFN FTLOGIN,<\r
703         PUSHJ   PDP,HELP1\r
704 >\r
705         MOVE    TAC,[SIXBIT /HELP/]     ;CUSP NAME\r
706         JRST    ARCOM   ;RUN IT\r
707 \r
708 SYSTAT: IFN FTLOGIN,<\r
709         PUSHJ   PDP,HELP1\r
710 >\r
711         MOVE    TAC,[SIXBIT /SYSTAT/]   ;CUSP NAME\r
712         JRST    ARCOM   ;RUN IT\r
713 \r
714 EXTERNAL JBTSTS,TTYATT\r
715 \r
716 ALOGIN:\r
717 INTERNAL FTLOGIN\r
718 IFN FTLOGIN,<   EXTERNAL PRJPRG\r
719         MOVEM TAC,PRJPRG(ITEM)\r
720         MOVSI TAC,JLOG\r
721         ANDCAM TAC,JBTSTS(ITEM)\r
722 >\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
727         JFCL\r
728 >\r
729         POPJ PDP,\r
730 \fINTERN FTCCL\r
731 \r
732 IFN FTCCL,<\r
733 \r
734 CCLRUN: MOVE    TAC,[SIXBIT /COMPIL/]   ;CUSP NAME\r
735         JRST    ARCOM   ;RUN IT\r
736 >\r
737 ;"LOGIN" - LOGIN COMMAND\r
738 \r
739 INTERNAL FTLOGIN\r
740 IFN FTLOGIN,<\r
741 \r
742 EXTERNAL SYSPP\r
743 \r
744 LOGDET: JSP     TAC,ERRMES\r
745         ASCIZ   /PLEASE KJOB OR DETACH\r
746 /\r
747 CLOGIN: TLNE    T,JLOG          ;FORCE USER TO LOGOUT BEFORE\r
748         JRST    LOGDET          ; LOGGING IN ANEW.\r
749 IFN FTSWAP,<\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
755         JRST CLOG2              ;YES,\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
758 >\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
767         JRST    ARCOM   ;RUN IT\r
768 >\r
769 \f; "R CUSTNAME CORE" - DOES "RUN SYS:CUSPNAME"\r
770 \r
771 RCOM:   MOVEI   TAC,0   ;NO FILE NAME, TTY WILL SUPPLY IT\r
772         JRST    ARCOM1\r
773 \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
777         JRST    RUNCO2\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
782 \r
783 EXTERNAL JOBDA\r
784 \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
790 IFE FTSWAP,<\r
791         JRST COR2               ;NO. PRINT "0K CORE LEFT"\r
792 >\r
793 IFN FTSWAP,<\r
794         JRST DLYCM              ;NO. DELAY COMMAND UNTIL IN CORE\r
795 >\r
796 \f; "ASSIGN DEV:NAME" - ASSIGN DEVICE TO JOB AND GIVE IT LOGICAL NAME\r
797 \r
798 EXTERNAL DEVLST,PJOBN,SYSTAP\r
799 \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
804         JRST    ASSG6\r
805         HLRZ    T1,PRJPRG(ITEM)\r
806         CAIN    T1,1            ;PROJECT NR, 1?\r
807         JRST    ASSG7           ;YES\r
808 ASSG6:\r
809 >\r
810         MOVE T1, TAC1           ;SAVE DEVICE NAME\r
811 IFN FTTTYSER,<\r
812         PUSH    PDP,DEVDAT      ;SAVE TTY\r
813 >\r
814 IFE FTTTYSER,<\r
815 \r
816         PUSH PDP, TAC           ;SAVE INPUT BYTE POINT\r
817 >\r
818         MOVE    TAC,TAC1\r
819         PUSHJ   PDP,DEVPHY\r
820         JRST    ASSG3\r
821         MOVEI   TAC1,ASSCON\r
822         JRST    ASSG4\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
827         JRST ASSG1              ;NO\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
836 \r
837 ASSG1:  CAMN TAC,SYSTAP         ;IS THIS SYSTEM TAPE?\r
838         JRST ASSG2              ;YES\r
839         LDB T, PJOBN            ;SAVE OLD JOB NUMBER FOR THIS DEVICE\r
840         TRZ TAC,-1              ;COMAPRE LEFT HALF ONLY\r
841         CAMN TAC, T1\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
845 \r
846 ASSG2:  HLRZ DEVDAT, DEVSER(DEVDAT)\r
847         JUMPN DEVDAT, ASSG0\r
848 IFN FTTTYSER,<\r
849         POP     PDP,DEVDAT      ;RESTORE TTY DDB\r
850 >\r
851 IFE FTTTYSER,<\r
852         POP PDP, TAC\r
853 >\r
854         JRST NOTDEV             ;PRINT NO SUCH DEVICE\r
855 \r
856 IFN FTLOGIN,<EXTERN STREQ,SYSTAP\r
857 ASSG7:  PUSHJ   PDP,CTEXT1\r
858         JUMPE   TAC1,NOTENF\r
859         SKIPL   STREQ\r
860         JRST    DLYCM1\r
861         MOVEM   TAC1,SYSTAP\r
862         POPJ    PDP,\r
863 >\r
864 \f;ALREADY ASSIGNED TO ANOTHER JOB\r
865 ASSER1:\r
866 IFE FTTTYSER,<\r
867         PDP PDP, TAC\r
868         MOVEI TAC, ASSMS2\r
869         PUSHJ PDP,ERRMES\r
870         LDB TAC, PJOBN\r
871         JRST DECLF              ;PRINT JOB NUMBER CRLF\r
872 >\r
873 IFN FTTTYSER,<\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
878         PUSHJ   PDP,ERRMES\r
879         POP     PDP,TAC ;GET JOB NO. BACK\r
880         JRST    DECLF           ;AND TYPE IT\r
881 >\r
882 \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
886 IFE FTTTYSER,<\r
887         POP PDP,TAC             ;RESTORE INPUT BYTE POINTER\r
888         PUSH PDP,DEVDAT         ;SAVE DDB ADDRESS\r
889 >\r
890 IFN FTTTYSER,<\r
891         EXCH    DEVDAT,0(PDP)   ;GET TTYDDB, SAVE DEVICE DDB\r
892 >\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
896                                 ; BY THIS USER\r
897         JRST ASSG1              ;NO \r
898         MOVEI TAC,LOGERR        ;YES, PRINT ERROR\r
899         MOVE    DEVDAT,-3(PDP)  ;RESTORE TTY DDB\r
900         PUSHJ PDP,ERRMES\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
906 IFN FT2REL,<\r
907         EXTERN 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
910 >\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
914         JSP TAC,CONMES\r
915 \r
916         ASCIZ / ASSIGNED\r
917 /\r
918 \r
919 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE. /\r
920 \f\r
921 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE\r
922 \r
923 INTERNAL NOTDEV\r
924 \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
934 \r
935 NOTDEV:\r
936 DEAER1: MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
937         JSP TAC,ERRMES          ;PRINT NO SUCH DEVICE\r
938 \r
939         ASCIZ /NO SUCH DEVICE\r
940 /\r
941 \r
942 DEAER2: MOVE TAC1,DEVNAM(DEVDAT)        ;PRINT PHYSICAL DEVICE NAME\r
943         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
944         PUSHJ PDP,PRNAME\r
945         JSP TAC,ERRMES\r
946 \r
947         ASCIZ / WASN'T ASSIGNED\r
948 /\r
949 \fINTERNAL FTREASSIGN\r
950 IFE FTREASSIGN,<\r
951 REASSI=UUOERR\r
952 >\r
953 \r
954 IFN FTREASSIGN,<\r
955 \r
956 ;REASSIGN UUO\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
962 \r
963 INTERNAL REASSIGN\r
964 EXTERNAL PUUOAC,JOB\r
965 \r
966 REASSI: LDB UUO,PUUOAC\r
967         HRLI UUO,PROG\r
968         PUSH PDP,@UUO           ;STACK JOB NUMBER TO BE REASSIGNED TO\r
969         AOS UUO\r
970         MOVE TAC1,@UUO          ;DEVICE NAME\r
971         MOVE ITEM,JOB           ;THIS JOB NUMBER\r
972         SOJA UUO,REASS1\r
973 \r
974 ;"REASSIGN DEV:JOB" - REASSIGN DEVICE "DEV" TO JOB "JOB"\r
975 \r
976 REASS:\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
986 \f\r
987 ;ROUTINE COMMON TO REASSIGN UUO AND COMMAND\r
988 \r
989 EXTERNAL JBTSTS,PJOBN,JOBFDV\r
990 \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
997         JRST REASE1             ;NO.\r
998         MOVE TAC,TAC1\r
999         PUSHJ PDP,DEVSRC        ;SEARCH FOR DEV\r
1000         JRST REASE2             ;NOT FOUND\r
1001         LDB TAC,PJOBN\r
1002         CAME TAC,ITEM           ;ASSIGNED TO THIS JOB\r
1003         JRST REASE3             ;NO\r
1004         MOVE TAC,DEVMOD(DEVDAT)\r
1005 \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
1009         JRST REASS3             ;NO.\r
1010         JUMPN UUO,REASS4        ;YES. COMMAND LEVEL?\r
1011         HRL DEVDAT,(PDP)        ;YES. SCHEDULE RELEASE\r
1012         MOVEM DEVDAT,JOBFDV(JDAT)\r
1013         POP PDP,TAC1\r
1014         MOVE DEVDAT,-2(PDP)\r
1015         MOVSI TAC1,TTYRNC       ;SET TTYRNC SO JOB WILL RUN\r
1016         IORM TAC1,-1(PDP)\r
1017         JSP TAC1,MSTART\r
1018         JSP TAC,MONSTR\r
1019         HLRZ TAC,JOBFDV(JDAT)\r
1020         PUSH PDP,TAC\r
1021         HRRZ DEVDAT,JOBFDV(JDAT)\r
1022         MOVE ITEM,JOB\r
1023         SETOM UUO               ;SET FLAG TO STOP JOB\r
1024 REASS4: HRRZ DSER,DEVSER(DEVDAT)\r
1025         HRRZM DEVDAT,JOBFDV(JDAT)\r
1026         MOVE UCHN,USRHCU\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
1032         POP PDP,UCHN\r
1033         SOJGE UCHN,REASS2\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
1038         EXCH ITEM,(PDP)\r
1039         DPB ITEM,PJOBN          ;PUT IN NEW JOB NUMBER\r
1040         POP PDP,ITEM\r
1041         JUMPL UUO,ESTOP\r
1042         POPJ PDP,\r
1043 \r
1044 REASE1: POP PDP,TAC\r
1045         JUMPE UUO,ATT4          ;JOB NEVER WAS INITIATED\r
1046 REASE4: SETZM @UUO              ;CLEAR C(AC)\r
1047         POPJ PDP,\r
1048 \r
1049 REASE2: MOVEI TAC,NOTDEV        ;NO SUCH DEVICE\r
1050 REASE5: POP PDP,TAC1\r
1051         JUMPE UUO,(TAC)\r
1052         AOJA UUO,REASE4\r
1053 \r
1054 REASE3: MOVEI TAC,DEAER2        ;WASN'T ASSIGNED\r
1055         JRST REASE5\r
1056 \r
1057 REASE6: MOVEI TAC,REASE7\r
1058         JRST REASE5\r
1059 REASE7: MOVE TAC1,DEVNAM(DEVDAT)\r
1060         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
1061         PUSHJ PDP,PRNAME\r
1062         JSP TAC,ERRMES\r
1063         ASCIZ / CAN'T BE REASSIGNED\r
1064 /\r
1065 >\r
1066 \fINTERNAL FTATTACH\r
1067 IFN FTATTACH,<\r
1068 \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
1074 \r
1075 INTERNAL ATTACH\r
1076 EXTERNAL TTYATT,JOBN,TTYFND\r
1077 \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
1082 IFN     FTLOGIN, <\r
1083         JRST DEVATT             ;WANTS TO ATTACH A DEVICE\r
1084 >\r
1085 \r
1086 IFE     FTLOGIN, <\r
1087         JRST    ATT1\r
1088 >\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
1095 INTERNAL FTLOGIN\r
1096 IFN FTLOGIN,<\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
1100 \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
1108                                 ; YES\r
1109 >\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
1114 IFN FTTTYSER,<\r
1115         EXTERN TSETBF\r
1116         PUSHJ PDP,TSETBF        ;INITIALIZE TTY INPUT BUFFER\r
1117 >\r
1118         JRST TTYFND             ;ATTACHED, GO SET UP OUTP. BYTE PTR.\r
1119 \f\r
1120 INTERNAL FTLOGIN\r
1121 IFN FTLOGIN,<\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
1137         LDB TAC1,PUNIT          ;\r
1138         TLNE TAC,DVTTY          ;IS IT A TTY?\r
1139         HRRM DEVDAT,TTYTAB(TAC1)        ;SET TRANS TABLE TO POINT TO DDB\r
1140         POP PDP,DEVDAT          ;\r
1141         POPJ PDP,               ;RETURN\r
1142 >\r
1143 \f\r
1144 ATT1:   JSP TAC,ERRMES\r
1145         ASCIZ /ILLEGAL JOB NUMBER\r
1146 /\r
1147 ATT2:   MOVE TAC1,DEVNAM(DEVDAT)        ;[PRINT PHYSICAL NAME\r
1148         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
1149         PUSHJ PDP,PRNAME\r
1150         JSP TAC,ERRMES\r
1151         ASCIZ / ALREADY ATTACHED\r
1152 /\r
1153 ATT3:   JSP TAC,ERRMES\r
1154         ASCIZ /CAN'T ATT TO JOB\r
1155 /\r
1156 ATT4:   JSP TAC,ERRMES\r
1157         ASCIZ /NOT A JOB\r
1158 /\r
1159 ATT5:   JSP TAC,ERRMES\r
1160         ASCIZ /CAN'T ATT DEV\r
1161 /\r
1162 ATT6:   POP PDP,DEVDAT\r
1163         JSP TAC,ERRMES\r
1164         ASCIZ /WASN'T DET\r
1165 /\r
1166 >\r
1167 \fINTERNAL FTATTACH\r
1168 IFN FTATTACH,<\r
1169 \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
1173 \r
1174 EXTERNAL TTYDET\r
1175 INTERNAL FTLOGIN\r
1176 \r
1177 IFE FTLOGIN,<\r
1178 DETACH: JRST TTYDET             ;GO DETACH TTY\r
1179 >\r
1180 \r
1181 IFN FTLOGIN,<\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
1212 TEMP2:\r
1213 IFE FTTTYSER,<  POP PDP,DEVDAT          ;RESTORE TTY DDB\r
1214         JRST ASSER1+1           ;PRINT ERROR MSG. AND RETURN\r
1215 >\r
1216 IFN FTTTYSER,<\r
1217         JRST ASSER1\r
1218 >\r
1219 LOGER1: JSP TAC,ERRMES\r
1220         ASCIZ /CAN'T DET DEV\r
1221 /\r
1222 >>      ;CLOSE BOTH FTLOGIN AND FTATTACH CONDITIONALS.\r
1223 \f;"DAYTIME" - PRINT TIME OF DAY\r
1224 \r
1225 EXTERNAL TIME,THSDAT,MONTAB,JIFMIN\r
1226 \r
1227 DAYTIM:\r
1228 IFN     FTLOGIN, <\r
1229         JUMPE ITEM,DAYTM1\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
1237         IDIVI TAC,^D100\r
1238         IDIVI TAC,^D60          ;\r
1239         ADD TAC,TAC1            ;COMPUTE MINUTES\r
1240         IMULI TAC,JIFMIN        ;COMPUTE JIFFIES\r
1241         MOVEM TAC,TIME          ;AND STORE\r
1242         POPJ PDP,\r
1243 >\r
1244 DAYTM1: MOVE TAC,THSDAT         ;PRINT TODAY'S DATE\r
1245         IDIVI TAC,^D31\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
1248         MOVEI TAC,0\r
1249         DIVI TAC,^D12\r
1250         EXCH TAC,TAC1\r
1251         MOVE TAC,MONTAB(TAC)    ;MONTH\r
1252         DPB TAC,[POINT 21,DAMESS,27]\r
1253         MOVEI TAC,DAMESS\r
1254         PUSHJ PDP,CONMES        ;PRINT DAY\r
1255         MOVEI TAC,^D64(TAC1)\r
1256         PUSHJ PDP,RADX10        ;PRINT YEAR\r
1257         PUSHJ PDP,PRSPC\r
1258         MOVE TAC,TIME           ;PRINT TIME OF DAY\r
1259         JRST PRTIM1\r
1260 \fINTERNAL FTTIME\r
1261 IFN FTTIME,<\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
1266 \r
1267 EXTERNAL RTIME,TTIME,SHFWRD,WDPJIF,JOBN,JBTSTS,CLRWRD,LSTWRD\r
1268 \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
1277 \r
1278 RUN2:   PUSHJ PDP,INLMES        ;PRINT\r
1279 \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
1284         PUSHJ   PDP,INLMES\r
1285         ASCIZ   /ZCOR /\r
1286         MOVE    TAC,CLRWRD\r
1287         IDIVI   TAC,WDPJIF\r
1288         PUSHJ   PDP,PRTIME      ;PRINT TIME SPENT CLEARING CORE\r
1289         PUSHJ   PDP,INLMES\r
1290         ASCIZ   /LOST /\r
1291         MOVE    TAC,LSTWRD\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
1298         ASCIZ /UP   /\r
1299         MOVE TAC,UPTIME\r
1300         JRST PRTIME             ;AND RETURN\r
1301 \r
1302 \fRUN1:\r
1303 IFE FTLOGIN,<\r
1304         MOVEI TAC,0             ;GET SET TO CLEAR INCREMENTAL RUN TIME\r
1305 >\r
1306 IFN FTLOGIN,<\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
1310 >\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
1314 IFN FTKCT,<\r
1315         PUSHJ PDP,PRTIME\r
1316         EXTERN JBTKCT\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
1323 >\r
1324 IFE FTKCT,<\r
1325         JRST PRTIME             ;PRINT IT AND RETURN\r
1326 >\r
1327 >\r
1328 \f;ROUTINE TO LET TTY TALK TO ANY OTHER RING OF TTYS\r
1329 ;       "TALK TTYN"\r
1330 ;       TTYN NEED NEVER HAVE BEEN TYPED ON BEFORE\r
1331 \r
1332 INTERNAL FTTALK\r
1333 \r
1334 IFN FTTALK,<\r
1335 EXTERNAL TTYTLK\r
1336 \r
1337 TALK:   PUSHJ PDP,CTEXT1                ;GET ARGUMENT\r
1338         JUMPE TAC1,TALK2        ;NONE SPECIFIED\r
1339         MOVE TAC,TAC1\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
1343         PUSHJ PDP,TTYTLK\r
1344         JRST TALK1\r
1345         POPJ PDP,\r
1346 \r
1347 TALK2:  MOVSI ITEM,NOINCK       ;SET FLAGS SO RESPONSE WILL PRINT\r
1348         MOVEM ITEM,-1(PDP)\r
1349         JRST NOTENF\r
1350 \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
1354         JSP TAC,ERRMES\r
1355         ASCIZ /BUSY\r
1356 /\r
1357 >\r
1358 \fINTERNAL FTEXAMINE\r
1359 \r
1360 IFN FTEXAMINE,<\r
1361 \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
1366 \r
1367 EXTERNAL TPOPJ,JOBPC\r
1368 \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
1382         PUSHJ PDP,OCTPNT\r
1383         PUSHJ PDP,INLMES        ;PRINT SLASH TAB\r
1384         ASCIZ */        *\r
1385         HLRZ TAC,(PDP)          ;PRINT LEFT HALF\r
1386         PUSHJ PDP,OCTPNT\r
1387         PUSHJ PDP,INLMES        ;PRINT SPACE\r
1388         ASCIZ / /\r
1389         HRRZ TAC,(PDP)          ;PRINT RIGHT HALF\r
1390         PUSHJ PDP,OCTPNT\r
1391         PUSHJ PDP,INLMES        ;PRINT FINAL TAB\r
1392         ASCIZ / /\r
1393         JRST TPOPJ              ;POP PDP,TAC,POPJ PDP,\r
1394 \f\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
1397 \r
1398 EXTERNAL JOBEXM,JOBPFI\r
1399 \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
1416 IFN FT2REL,<\r
1417         EXTERN CHKMED\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
1422 >\r
1423         TRNN TAC1,777760        ;IN USER ACS\r
1424         JRST DCOM1              ;YES\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
1429         JRST DCOMA              ;NO\r
1430 DCOM1:  PUSHJ PDP,DEAT          ;CHECK FOR AC REFERENCE\r
1431         HRLI TAC1,PROG          ;SET FOR RELOCATION\r
1432         MOVEM IOS,@TAC1 \r
1433         POPJ PDP,\r
1434 \r
1435 \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
1440         POPJ PDP,               ;NO\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
1444 \r
1445 DCOMA:\r
1446 IFN FT2REL,<\r
1447         EXTERN HGHDEP\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
1451 >\r
1452 ECOMA:  JSP TAC,ERRMES  ;OUT OF BOUNDS\r
1453         ASCIZ /OUT OF BOUNDS\r
1454 /\r
1455 >\r
1456 \fIFN FTLOGIN,<\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
1460 \r
1461         EXTERN DEVOPR,STATES,OCTPNT\r
1462 \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
1467         CAME    TAC,DEVOPR\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
1471 \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
1475 >\r
1476 ;"BLANK" OR NO ALPHA NUMERIC BEFORE BREAK CHAR COMMAND\r
1477 ;DISPATCHED TO LIKE ANY OTHER COMMAND(0 IN COMMAND TABLE)\r
1478 \r
1479 CBLANK:\r
1480 IFE FTTTYSER,<\r
1481         LDB     TEM,TAC         ;GET BREAK CHARACTER\r
1482         CAIE    TEM,15          ;IS IT A CR\r
1483 >\r
1484 IFN FTTTYSER,<\r
1485         CAIE    TEM,12          ;WAS BREAK A LF\r
1486 >\r
1487         CAIN TEM,";"            ;NO, IS IT SEMI COLON(MONITOR COMMENT)\r
1488         POPJ PDP,               ;YES, IGNORE\r
1489                                 ; FALL IN UNKNOWN COMMAND\r
1490 \r
1491 ;COMMAND NOT IN COMMAND DICECTORY\r
1492 \r
1493 NOCOM:  JRST COMERR     ;NO, APPEND ? TO WHAT HE TYPED IN\r
1494 \fIFN FTFINISH,<\r
1495 ; "FINISH DEVICE" - CLOSES,RELEASE AND DESASSIGNS DEVICE\r
1496 ;JOB MUST HAVE CORE\r
1497 \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
1504         PUSHJ PDP,DEVSRC        \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
1515         PUSH PDP,UCHN\r
1516         CAMN DEVDAT,JOBFDV(JDAT)        ;IS THIS DEV. THE ONE TO RELEASE?\r
1517         XCT UUO                 ;YES, RELEASE IT(AND CLOSE)\r
1518         POP PDP,UCHN\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
1525 >\r
1526 \fIFN FTTIME,<\r
1527 ;"RESOURCES" - PRINT OUT AVAILABLE DEVICES AND FREE BLOCKS ON THE DISK\r
1528 \r
1529 EXTERNAL DEVLST\r
1530 \r
1531 FREDEV:\r
1532 IFN     FTDISK, <\r
1533 EXTERNAL        SATENT,SATXWD,WLBIT,SENTSZ,NUMBIT\r
1534 \r
1535         XOR TAC,TAC             ;INITIALIZE COUNTER\r
1536         HLRE    T2,SATXWD       ;SET INDEX WITH NUMBER OF SAT BLOCKS IN EXISTENCE,\r
1537         MOVNS   T2\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
1549         ASCIZ /. BLKS/\r
1550 >\r
1551 \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
1558 IFE FTDISK,<\r
1559         JUMPE AC2,LOP018        ;SUPPRESS LEADING COMMA IF NO DISK\r
1560 >\r
1561         PUSHJ PDP,INLMES        ;PRINT ,(INSTEAD OF CRLF SO WILL FIT IN 1 BUFFER)\r
1562         ASCIZ /,/\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
1574 >\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
1579 \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
1589 \r
1590 ;ROUTINE TO DELAY A COMMAND\r
1591 \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
1595 \r
1596 EXTERNAL TTYCM,LINSAV\r
1597 \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
1605 \r
1606 DLYCM1: POP     PDP,TAC\r
1607         POP     PDP,TAC1\r
1608         POP     PDP,TAC1\r
1609         PUSH    PDP,CONTC1\r
1610         MOVE    TAC1,LINSAV\r
1611         JRST    TTYCM\r
1612 \f\r
1613 IFN FTDISK,<\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
1619 \r
1620 EXTERNAL DSKDDB,DSKFGS,CPOPJ1\r
1621 \r
1622 STOPCK: MOVEI DEVDAT,DSKDDB\r
1623         MOVSI TAC1,DSKFGS\r
1624 STOPD:  LDB TAC,PJOBN\r
1625         CAIE ITEM,(TAC)         ;ASSIGNED TO THIS JOB?\r
1626         JRST STOPC              ;NO\r
1627         TDNE TAC1,DEVIOS(DEVDAT)        ;YES. FLAG ON?\r
1628         JRST CPOPJ              ;YES. DELAY\r
1629 STOPC:  HLRZ DEVDAT,DEVSER(DEVDAT)\r
1630         MOVSI TAC,446353\r
1631 \r
1632         CAMN TAC,DEVNAM(DEVDAT)\r
1633         JRST STOPD\r
1634         JRST CPOPJ1             ;OK TO STOP\r
1635 >\r
1636 \fSUBTTL COMCSS - COMMON COMMAND SUBROUTINES\r
1637 \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
1643 \r
1644 INTERNAL CTEXT\r
1645 INTERNAL CTEXT1\r
1646 \r
1647 T=BUFPNT                        ;TEMPORARY AC'S\r
1648 T1=BUFWRD\r
1649 T2=UUO\r
1650 \r
1651 CTEXT:  PUSHJ   PDP,SKIPS       ;CALL HERE IF AT START OF LINE\r
1652         SKIPA\r
1653 \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
1657 IFE FTTTYSER,<\r
1658         LDB     TEM,TAC\r
1659         JRST CTEX1\r
1660 CTEX0:  ILDB    TEM,TAC\r
1661 >\r
1662 IFN FTTTYSER,<\r
1663 EXTERN TAKR,GETCHR\r
1664         LDB     TEM,TAKR(DAT)   ;GET LAST CHAR.\r
1665         JRST    CTEX1\r
1666 CTEX0:  PUSHJ   PDP,GETCHR      ;ROUTINE IN SCNSER TO PICK UP CHAR.\r
1667 >\r
1668 \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
1679         CAIL TEM, "0"\r
1680         CAILE TEM, "Z"  ;LETTERS ARE LARGER THEN NOS.\r
1681         JRST CTEXA      ;NEITHER\r
1682         CAILE TEM,"9"\r
1683         CAIL TEM,"A"\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
1688 >\r
1689 IFN FTTTYSER,<\r
1690         CAIN    TEM,":"         ;DEVICE NAME?\r
1691         PUSHJ   PDP,GETCHR      ;YES. SKIP COLON\r
1692         CAIE    TEM,3   ;CONTROL C?\r
1693 \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
1698 >\r
1699 \f;ROUTINE TO IGNORE LEADING SPACES, TABS, AND NULLS\r
1700 ;ALSO CLEARS TAC1\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
1705 \r
1706 INTERNAL SKIPS1,SKIPS\r
1707 \r
1708 IFE FTTTYSER,<\r
1709 SKIPS1:\r
1710 SKIPS:  MOVEI TAC1,0    ;CLEAR TAC1\r
1711         LDB TEM,TAC     ;WAS PRECEDING BREAK A CR?\r
1712         CAIN TEM,15\r
1713         JRST SKIPS2     ;YES. POP SUB. LEVEL UP 1\r
1714 SKIPSA:\r
1715         ILDB    TEM,TAC\r
1716         JUMPE TEM,SKIPSA        ;NULL?\r
1717         CAIE TEM," "    ;SPACE?\r
1718         CAIN TEM, 11\r
1719         JRST SKIPSA\r
1720         CAIN TEM,15     ;CR?\r
1721 SKIPS2: POP PDP,T       ;YES. POP SUB. LEVEL UP ONE\r
1722 >\r
1723 IFN FTTTYSER,<  EXTERNAL GETCHR,SPCHEK,BREAKB,TAKR\r
1724 \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
1732         JRST    SKIPS2  ;NO\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
1736         JRST    SKIPSA  ;YES.\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
1742 >\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
1747 \r
1748 INTERNAL COMERA,COMERP\r
1749 \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
1753 \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
1758 \r
1759 INTERNAL COMERR\r
1760 \r
1761 \r
1762 COMERR:\r
1763 IFN FTTTYSER,<\r
1764 EXTERN OUTCHS,TRESCN,TITAKR,SETBFI,TISYNC\r
1765 \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
1770         JRST    COMER1  ;YES\r
1771         PUSHJ   PDP,OUTCHS      ;NO. TYPE CHAR.\r
1772         JUMPN   TEM,COMERL      ;LOOP IF NOT OUT OF CHARACTERS\r
1773 \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
1777         PUSHJ   PDP,OUTCHS\r
1778 >\r
1779 IFE FTTTYSER,<\r
1780         MOVE    DAT,TAC\r
1781         MOVEI   T,"?"           ;STORE ? ON TOP OF BREAK CHAR.\r
1782         DPB     T,DAT\r
1783 >\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
1787 \r
1788 INTERNAL ERRMES\r
1789 \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
1793 \r
1794 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED\r
1795 ;CALL:  MOVE DAT,BYTE POINTER TO OUTPUT\r
1796 ;       PUSHJ PDP,CRLF\r
1797 \r
1798 INTERNAL CRLF\r
1799 \r
1800                                 ; COMERR SKIPS TO HERE(SEE ABOVE)\r
1801 CRLF:   MOVEI TAC,[ASCII /\r
1802 /]\r
1803 \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
1811 \r
1812 INTERNAL CONMES\r
1813 EXTERNAL TPOPJ\r
1814 \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
1822 IFN FTTTYSER,<\r
1823 EXTERN OUTCHS\r
1824         PUSHJ   PDP,OUTCHS      ;NO. STORE TTY OUTPUT BUFFER\r
1825 >\r
1826 IFE FTTTYSER,<\r
1827         IDPB    TEM,DAT\r
1828 >\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
1834 \r
1835 INTERNAL INLMES\r
1836 \r
1837 INLMES: POP PDP,TAC             ;SETUP PRINT ADRESS FOR CONMES\r
1838         PUSHJ PDP,CONMES        \r
1839         JRST 1(TAC)             ;RETURN TO NEXT LOC AFTER MESSAGE\r
1840 \r
1841 ;ROUTINE TO APPEND ? TO ERROR MESSAGE\r
1842 ;CALL   PUSHJ PDP,PRQM\r
1843 ;       RETURN\r
1844 \r
1845 INTERNAL PRQM\r
1846 \r
1847 PRQM:   MOVEI TEM,"?"\r
1848 IFN FTTTYSER,<\r
1849 \r
1850 EXTERN OUTCHS\r
1851         JRST    OUTCHS\r
1852 >\r
1853 IFE FTTTYSER,<\r
1854         IDPB    TEM,DAT\r
1855         POPJ    PDP,\r
1856 >\r
1857 PRSPC:  MOVEI TAC,[ASCIZ /      /]\r
1858         JRST CONMES\r
1859 \f\r
1860 \r
1861 ;ROUTINE TO PRINT "TOO FEW ARGUMENTS"\r
1862 ;CALL:  MOVE DAT,BYTE POINTER\r
1863 ;       PUSHJ PDP,NOTENF\r
1864 \r
1865 INTERNAL NOTENF\r
1866 \r
1867 NOTENF: JSP TAC,ERRMES\r
1868 \r
1869 ASCIZ /TOO FEW ARGUMENTS\r
1870 /\r
1871 \r
1872 ;ROUTINE TO PRINT A PERIOD\r
1873 ;CALL:  PUSHJ PDP,PRPER\r
1874 \r
1875 INTERNAL PRPER\r
1876 \r
1877 PRPER:  JSP TAC,CONMES\r
1878         ASCIZ /./\r
1879 \f\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
1886 \r
1887 INTERNAL DEASG\r
1888 EXTERNAL PJOBN,CPOPJ1,IPOPJ\r
1889 \r
1890 DEASG:  LDB T, PJOBN            ;WAS DEVICE ASSIGNED TO THIS JOB?\r
1891         CAME T, ITEM\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
1896                                 ; AND ASGHGH\r
1897         SETZM DEVLOG(DEVDAT)    ;CLEAR LOGICAL NAME\r
1898 \r
1899         TRNE TAC1,ASSCON        ;IS DEVICE ASSIGNED BY CONSOLE?\r
1900         AOS -1(PDP)             ;YES, DO OK RETURN\r
1901 IFN FT2REL,<\r
1902         EXTERN ASGHGH\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
1906 >\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
1910 \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
1915 \r
1916 INTERNAL DEASAL,DEASTY\r
1917 EXTERNAL DEVLST\r
1918 \r
1919 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
1928         POPJ PDP,\r
1929 \f\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
1939 \r
1940 INTERNAL OCTIN,OCTIN1,DECIN,DECIN1\r
1941 EXTERNAL CPOPJ1,CPOPJ2\r
1942 \r
1943 C=BUFPNT                        ;CHARACTER AC\r
1944 R=BUFWRD                        ;RADIX AC\r
1945 \r
1946 DECIN1:\r
1947 DECIN:  MOVEI R,12              ;DECIMAL INPUT\r
1948         JRST ANYRIN\r
1949 \r
1950 OCTIN1:\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
1954                                 ; OR THIS 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
1965         JRST CPOPJ2             ;YES.\r
1966         SUBI TEM,60     \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
1970         IMUL TAC1, R\r
1971         ADD TAC1,TEM\r
1972 IFE FTTTYSER,<  ILDB    TEM,TAC ;NEXT CHAR>\r
1973 IFN FTTTYSER,<  PUSHJ   PDP,GETCHR>     ;NEXT CHAR\r
1974         JRST OCT0\r
1975 \fINTERNAL FTLOGIN\r
1976 IFN FTLOGIN,<\r
1977 ;GET PROJECT-PROGRAMMER NUMBERS\r
1978 ;CALL:  MOVE TAC,INPUT BYTE POINTER\r
1979 ;       PUSHJ PDP,PJPGNO\r
1980 ;\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
1985 \r
1986 IFE FTTTYSER,<\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
1992 >\r
1993 \r
1994 IFN FTTTYSER,<\r
1995 PP0:    PUSHJ   PDP,SKIPS1\r
1996 PJPGNO:\r
1997 >\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
2007 \r
2008 PP1:\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
2015         JRST    COMERP\r
2016         PUSHJ   PDP,SKIPS>\r
2017         PUSHJ PDP,OCTIN         ;GET SECOND ARG.-PROG. NO.\r
2018         JRST COMERP             ;\r
2019         JRST COMERP             ;\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
2026 >\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
2032 \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
2036 \r
2037 EXTERNAL JIFMIN,JIFSEC,JIFSC2\r
2038 \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
2042 \r
2043 INTERNAL PRTIME\r
2044 \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
2050         PUSHJ PDP,RADX10\r
2051         PUSHJ PDP,INLMES        ;PRINT "HH:" OR "H:"\r
2052         ASCIZ /:/\r
2053 PR0:    MOVE TAC,TAC1           ;GET MINUTES\r
2054         PUSHJ PDP,PRT2          ;PRINT "MM:"\r
2055         PUSHJ PDP,INLMES\r
2056         ASCIZ /:/\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
2063         IDIVI TAC,JIFSEC\r
2064         CAIL TAC1,JIFSC2        ;ROUND IF GREATER THEN HALF\r
2065         AOS TAC\r
2066         JRST PRT2LF             ;PRINT\r
2067 \fPRTIM1:        IDIVI TAC,JIFMIN        ;\r
2068         IDIVI TAC,^D60          ;HOURS,MINUTES IN TAC,TAC1\r
2069         PUSHJ PDP,PRT2\r
2070         PUSHJ PDP,INLMES        ;PRINT "HH:"\r
2071         ASCIZ /:/\r
2072         MOVE TAC,TAC1\r
2073 PRT2LF: PUSHJ PDP,PRT2          ;PRINT "MM\r
2074         JRST CRLF\r
2075 \r
2076 PRT2:   MOVEI TEM,"0"\r
2077         CAIGE TAC,^D10\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
2083 ;       RETURN\r
2084 ;CALLED AT CLOCK LEVEL FROM CORE (UUO ARG) COMMAND AND SEGCON\r
2085 \r
2086         INTERN PRTSEG\r
2087         EXTERN PCORSZ\r
2088 \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
2092 \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
2097 \r
2098         INTERN SEGSIZ\r
2099         EXTERN CPOPJ\r
2100 \r
2101 SEGSIZ:\r
2102 IFN FTSWAP,<\r
2103         EXTERN IMGIN\r
2104         LDB TAC1,IMGIN          ;SIZE WHEN NEXT SWAPPED IN(IN K)\r
2105         JUMPN TAC1,CPOPJ        ;0 MEANS NOT SWAPPED OUT\r
2106 >\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
2116 \r
2117         EXTERN JOBDA,TPOPJ\r
2118 \r
2119 GETMIN:\r
2120 IFE FTTTYSER,<\r
2121         PUSH PDP,TAC    ;SAVE INPUT BYTE POINTER TO COMMAND\r
2122 >\r
2123 IFN FTTTYSER,<\r
2124         PUSH PDP,DEVDAT         ;SAVE TTY DDB ADR\r
2125 >\r
2126         PUSH PDP,TAC1   ;SAVE DEVICE NAME(GET)\r
2127         PUSH PDP,IOS    ;SAVE DISPATCH ADDRESS(ANYACT USES IOS)\r
2128 IFN FT2REL,<\r
2129         EXTERN KILHGH\r
2130 \r
2131         PUSHJ PDP,KILHGH        ;KILL HIGH SEG\r
2132 >\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
2136         POP PDP,IOS     \r
2137         POP PDP,TAC1            ;RESTORE PUSHED ACS\r
2138 IFN FTTTYSER,<\r
2139         POP PDP,DEVDAT          ;RESTORE TTY DDB ADR\r
2140         POPJ PDP,               ;TAC NOT USER BY FULL DUPLEX SCNSER\r
2141 >\r
2142 IFE FTTTYSER,<\r
2143         JRST TPOPJ              ;RESTORE TAC AND RETURN\r
2144 >\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
2155 \r
2156         INTERN GETWRD\r
2157         EXTERN CPOPJ1\r
2158 \r
2159 GETWRD: HLRZ TAC,PROG           ;LARGEST REL LOC IN LOW SEG\r
2160         CAIGE TAC,(UUO)         ;IS ADR. IN LOW SEG?\r
2161 IFN FT2REL,<\r
2162         EXTERN HGHWRD\r
2163         JRST HGHWRD             ;NO, CHECK IF IN HIGH SEG(ERROR RET IF NO)\r
2164 >\r
2165 IFE FT2REL,<\r
2166         POPJ PDP,               ;NO, ERROR RETURN\r
2167 >\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
2171 \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
2175 \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
2186 \r
2187 ;FOR OPEN UUOS:\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
2191 \r
2192 ;MISC. DATA LOCATIONS:\r
2193 \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
2201                                 ; RH=0\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
2210 ;       PUSHJ PDP,SGSET\r
2211 \r
2212 C=BUFPNT\r
2213 \r
2214 INTERNAL FTLOGIN,FT2REL,FTDISK\r
2215 EXTERNAL JOBCOR,JBTPRG\r
2216 \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
2230 IFN FT2REL,<\r
2231         EXTERN SETEXT           ;ALSO SAVE IT AGAIN IN SGALOW FOR LOW SEG\r
2232                                 ; LOOKUP OR ENTER\r
2233         PUSHJ PDP,SETEXT        ;SET HIGH EXTENSION(SGAHIGH) TO .SHR IF SSAVE OR GET\r
2234                                 ; .HGH IF SAVE(LH IOS=NSRBIT).\r
2235 >\r
2236         SETZM SGADAT(PROG)      ;SET DATE(E+2) TO 0, SO MONITOR WILL USE TODAYS\r
2237 IFN FTLOGIN,<\r
2238         PUSHJ PDP,PJPGNO        ;GET PROJ, PROG. NO.\r
2239         MOVEM AC2,SGAPPN(PROG)  ;STORE 0 IF NO []'S TYPED BY USER\r
2240 >\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
2245         SUBI TAC,1\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
2261 ;       RETURN\r
2262 \r
2263         INTERN GETARG\r
2264         EXTERN JBTPRG,JOBCOR,PUUOAC\r
2265 \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
2270 \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
2279 IFN FT2REL,<\r
2280         EXTERN SETEX1\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
2284 >\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
2291                                 ; IGNORE LH\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
2299 ;ADDRESS\r
2300 \r
2301 INTERNAL SAVJOB,SAVERR\r
2302 EXTERNAL JOB41,JOBS41,JOBDDT,JOBSDD,JOBSV\r
2303 \r
2304 SAVJOB: JSP TAC1,SG1            ;SET UP ACS PROG,PDP,JDAT,ITEM.\r
2305                                 ; RESET DEVICES\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
2311 IFN FT2REL,<\r
2312         EXTERN SAVHGH\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
2317 >\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
2347 \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
2353         AOS     TAC1\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
2376         ASCIZ /JOB SAVED/\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
2384 \f\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
2390 ;JOB DATA AREA:\r
2391 ;JOBPDP, JOBREL\r
2392 \r
2393 INTERNAL GETJOB\r
2394 \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
2398         ASCIZ /JOB SETUP/\r
2399 \r
2400 ;THIS JOB GETS A JOB AREA FROM A RETRIEVAL DEVICE AND STARTS IT UP\r
2401 \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
2405 \r
2406 INTERNAL RUNJOB\r
2407 \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
2413 \f;RUN UUO\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
2419 \r
2420 ;WHERE: D/      DEVICE NAME\r
2421 ;       D+1/    FILE NAME\r
2422 ;       D+2/    FILE EXT OR 0 (LH SIXBIT)\r
2423 ;       D+3/    DATE ETC\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
2427 \r
2428         INTERN URUN\r
2429         EXTERN JOBSA\r
2430 \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
2444 \r
2445 IFN FT2REL,<\r
2446         EXTERN CHKMED\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
2452 >\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
2462 \r
2463         INTERN UGTSEG,UGTERR\r
2464 UGTSEG:\r
2465         \r
2466 IFN FT2REL,<\r
2467         EXTERN UGETHI\r
2468         JRST UGETHI             ;IN SEGCON\r
2469 >\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
2481 ;       IF DISK SYSTEM\r
2482 \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
2486 \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
2490 \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
2494 \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
2502 IFE FT2REL,<\r
2503         OPEN 0,SGAMOD           ;TRY TO ASSIGN DEVICE, SINCE IT MUST BE DONE\r
2504 >\r
2505 IFN FT2REL,<\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
2511 >\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
2516 \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
2529 SG4:\r
2530 IFN FTDISK,<\r
2531         MOVE TAC1,DEVMOD(DEVDAT)        ;RETURN DEVICE CHARACTERISTICS(IF DISK SYS)\r
2532         TLNE TAC1,DVDSK         ;IS THIS DEVICE A DISK?\r
2533 \r
2534         MOVS TAC1,SGAPPN(PROG)  ;YES. MAKE SURE FORTH WORD IS PROJ,PROG NO.\r
2535 >\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
2542         POPJ PDP,\r
2543 \r
2544 ;ERROR ON INIT OR DEVICE SEARCH\r
2545 \r
2546         INTERN SGERRA           ;CALLED FROM SEGCON\r
2547 \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
2556 \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
2566 ;       PUSHJ PDP,GETJB\r
2567 ;       RETURN ONLY IF EVERYTHING OK\r
2568 \r
2569 EXTERNAL JOBCOR,JOB,CPOPJ,JOBS41,JOB41\r
2570 \r
2571 GETJB:\r
2572 IFN FT2REL,<\r
2573         EXTERN GETHGH\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
2579                                 ; LOW FILE NEEDED\r
2580                                 ; EITHER BECUASE NOHIGH SEG\r
2581                                 ; ORHIGH SEG ALSO NEEDS LOW FILE\r
2582 >\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
2593         MOVNS TAC\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
2599 \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
2615                                 ; FALL INTO SGREL\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
2623 \r
2624         EXTERN  USRHCU,USRJDA,JOBSA,JOBDDT,JOBSDD,JOBSD1,JOBSAV,JOBCOR\r
2625         EXTERN  JOBSV,JOBSV3,JOBSVD,JOBSDP\r
2626 \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
2639 \r
2640 ;ROUTINE TO CHECK FOR IO ERRORS(CALLED FROM SEGCON)\r
2641 ;CALL:  MOVE F,DEVICE DATA BLOCK ADDRESS\r
2642 ;   PUSHJ P,SGIOCK\r
2643 ;   RETURN ONLY IF NO ERRORS\r
2644 \r
2645         INTERN  SGIOCK\r
2646 \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
2657 INTERN SGREL\r
2658 \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
2661         PUSH    PDP,T4          ;NO,\r
2662         MOVE    TAC1,DEVMOD(DEVDAT)\r
2663         TLNE    TAC1,DVMTA      ;MAGTAPE?\r
2664         TLNN    DEVDAT,INPB     ;YES, WAS AN INPUT DONE?\r
2665         JRST    SGREL1          ;NO\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
2670         POP     PDP,T4\r
2671 SGREL2:\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
2683 \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
2706         JUMPE TAC,EXPZ\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
2710         JRST EXPND1\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
2720         MOVNS   AC1             ;+N\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
2730 \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
2734         JRST EXPCOR             ;YES.\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
2742         HRRI    AC1,2(AC1)\r
2743         SETZM   -1(AC1)\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
2753 EXPLP3: SOS     AC1\r
2754         CAIGE AC1,JOBSDD(PROG)  ;DON'T STORE DATA BELOW JOBSDD\r
2755         SOSA TAC\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
2764                                 ; FROM THIS USER\r
2765 \f;THIS ROUTINE WILL DELETE ALL DATA FROM A COMPRESSED FILE\r
2766 ;WHICH IS BELOW JOBSOD (PROBABLY WRITTEN BY TENDUMP)\r
2767 \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
2794         SUBI AC3,JOBSVD\r
2795         BLT TAC,@AC3\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
2808 \r
2809         EXTERN JOBSVM\r
2810 \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
2815 \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
2822 \r
2823         INTERN NROOM1           ;CALLED FROM SEGCON\r
2824 \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
2833 ;       NEVER RETURN\r
2834 \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
2844 \f\r
2845 \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
2851 \r
2852         INTERN GETCOR\r
2853 \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
2860 \r
2861 INTERN GETERR\r
2862 \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
2868 \r
2869 ;ROUTINE TO PRINT FILE NOT FOUND ORNEEDS 2 RELOC REG\r
2870 \r
2871 INTERN NOFILE   ;CALLED FROM SEGCON\r
2872 \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
2879         PUSHJ PDP,PRNAME\r
2880         PUSHJ PDP,PRPER         ;PRINT PERIOD\r
2881         HLLZ TAC1,SGAEXT(PROG)  ;PRINT EXTENSION\r
2882         PUSHJ PDP,PRNAME\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
2893 \r
2894         EXTERN JOBPD1,JOBPD3,USRJDA\r
2895 \r
2896 SGRELL:                         ;LOOKUP OR ENTER FAILURE\r
2897 IFN FTDISK,<\r
2898         MOVE TAC1,DEVMOD(DEVDAT)        ;IS THIS DEVICE A DISK?\r
2899         TLNE TAC1,DVDSK\r
2900         HRRZ TAC,SGAEXT(PROG)   ;YES, RETURN DISK SERVICE ERROR CODE\r
2901 >\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
2904 \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
2920 \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
2924         ASCIZ /?\r
2925 /\r
2926 COMEND: END             ;END OF COMCON\r