050b588b4f67868be95d09140eaebf426731e139
[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 \f\r
41 INTERNAL COMMAND\r
42 INTERNAL FTLOGIN,FTSWAP,FTTIME\r
43 EXTERNAL COMCNT,TTYCOM,JBTSTS,JOBMAX,JBTDAT,JBTADR,JOBHCU\r
44 EXTERNAL CONFIG,HIGHJB\r
45 EXTERNAL TTYSTR,TTYUSR,TTYATT\r
46 EXTERNAL TTYTAB,PUNIT,TTYATI\r
47 EXTERNAL ADRERR,ANYACT,ASSASG,CORE0,DAMESS,DEVLG,DEVPHY,DEVSRC\r
48 EXTERNAL DLYCOM,ERNAM,ESTOP,GETWD1,GETWDU,KSTOP,CORE1,MONJOB,DECP1\r
49 EXTERNAL MONSTR,MSTART,OCTPNT,PHOLD,PRNAME,RADX10,RELEA5\r
50 EXTERNAL RELEA6,RESET,SETRUN,STOP1\r
51 EXTERNAL STOTAC,UPTIME,USRXIT,USTART,UUOERR\r
52 \r
53 T=BUFPNT        ;TEMPORARY AC'S\r
54 T1=BUFWRD\r
55 T2=UUO\r
56 T3=AC1\r
57 T4=AC2\r
58 COMMAND:PUSHJ PDP,TTYCOM        ;SETUP DEVDAT,DAT,TAC,AND ITEM\r
59                                 ; FOR ANY TTY WHICH HAS TYPED A COMMAND\r
60 COM0:   POPJ PDP,               ;NONE FOUND\r
61         PUSH PDP,DEVDAT         ;SAVE TTY DEVICE DATA BLOCK ADDRESS\r
62         PUSHJ PDP,CTEXT         ;SCAN COMMAND NAME, RETURN IT IN TAC1\r
63         MOVE T,TAC1             ;COPY COMMAND.\r
64         MOVNI T1,1              ;SET MASK ALL ONES\r
65         LSH T1,-6               ;CLEAR OUT ONE MORE CHAR.\r
66         LSH T,6                 ;SHIFT 1 COMMAND CHAR OFF\r
67         JUMPN T,.-2             ;IF NOT END OF COMMAND. GO AROUND\r
68         MOVEI T4,0              ;CLEAR FLAG REGISTER\r
69         MOVSI T,-DISPL          ;SEARCH COMMAND TABLE FOR MATCH\r
70 COMLP:  MOVE T2,COMTAB(T)       ;GET NEXT ENTRY FROM COMMAND TABLE\r
71         TDZ T2,T1               ;MASK OUT CHAR 5\r
72         CAMN TAC1,COMTAB(T)     ;EXACT MATCH?\r
73         JRST COMFND             ;YES, THIS IS IT.\r
74         CAME TAC1,T2            ;MATCH?\r
75         JRST COMNEQ             ;NOT EVEN GOOD MASK\r
76         TROE T4,1               ;MATCHES MASKED, IS THIS FIRST ONE\r
77         TROA T4,2               ;NO, SET 2ND OCCUR FLAG\r
78         MOVE T3,T               ;YES, COPY CURRENT INDEX\r
79 COMNEQ: AOBJN T,COMLP           ;NO, KEEP LOOKING\r
80         CAIN T4,1               ;DID ONE AND ONLY ONE COMMAND MATCH?\r
81         MOVE T,T3               ;YES, GET ITS INDEX\r
82 \f\r
83 COMFND: MOVE TAC1,DISP(T)       ;GET DISPATCH TABLE ENTRY,\r
84         PUSH PDP,TAC1           ;SAVE RH(DISPATCH ADR,+BITS)\r
85         MOVE T,JBTSTS(ITEM)     ;JOB STATUS WORD FOR THIS JOB\r
86 IFN FTLOGIN,<\r
87                 TLNN T,JLOG             ;IS JOB LOGGED IN?\r
88                 TLNE TAC1,NOLOGIN       ;NO, CAN COMMAND PROCEED WITH NO LOGIN?\r
89                 JRST CHKNO              ;YES\r
90                 JSP TAC,COMER           ;NO, TYPE "LOGIN PLEASE"\r
91                 ASCIZ /LOGIN PLEASE\r
92 />\r
93 CHKNO:  JUMPN ITEM,CHKRUN       ;JOB NUMBER ALREADY ASSIGNED?\r
94         TLNE TAC1,NOJOBN        ;NO, DOES THIS COMMAND NEED A JOB NUMBER?\r
95         JRST COMGO              ;NO\r
96         MOVEI ITEM,1            ;YES, SCAN FOR ONE STARTING WITH 1\r
97 NUMLOP: MOVE T,JBTSTS(ITEM)     ;SCAN FOR FREE JOB NO.\r
98         TLNN T,JNA+CMWB         ;THIS NUMBER ASSIGNED?\r
99         JRST NEWJOB             ;NO, SO USE THIS NUMBER\r
100 \r
101         CAIGE ITEM,JOBMAX       ;YES, IS THE MAX. JOB NO.?\r
102         AOJA ITEM,NUMLOP        ;NO, KEEP LOOKING\r
103         JSP TAC,COMER           ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED"\r
104         ASCIZ /JOB CAPACITY EXCEEDED\r
105 /\r
106                                 ; EVEN THROUGH THIS IS A NEW JOB NUMBER\r
107                                 ; IT MAY HAVE CORE ASSIGNED NOW BECAUSE IT WAS DELAYED\r
108                                 ; UNTIL IT COULD BE SWAPPED IN(LOGIN WITH CORE FULL)\r
109 NEWJOB: MOVEI T1,ASSCON         ;SET ASSIGNED BY CONSOLE BIT FOR TTY\r
110         IORM T1,DEVMOD(DEVDAT)  ;SO OTHER JOBS CAN NOT USE\r
111         SETZM DEVLOG(DEVDAT)    ;SET LOGICAL NAME TO ZERO\r
112                                 ; "TTY" IS PUBLIC LOGICAL NAME\r
113 IFN FTTIME,<\r
114         SETZM RTIME(ITEM)       ;CLEAR INCREMENTAL JOB RUNNING TIME\r
115         SETZM TTIME(ITEM)       ;CLEAR TOTAL JOB RUNNING TIME\r
116 >\r
117 IFN FTKCT,<\r
118         EXTERN JBTKCT\r
119         SETZM JBTKCT(ITEM)      ;CLEAR CORE-RUNNING TIME CORE\r
120 >\r
121         CAMLE ITEM,HIGHJB       ;HIGHEST JOB NUMBER ASSIGNED?\r
122         MOVEM ITEM,HIGHJB       ;YES,SAVE IT FOR SCHEDULER SCAN OF JOBS\r
123 \f\r
124 CHKRUN: TLNE    T,RUN           ;RUN BIT ON IN JOB STATUS?\r
125         TLNN    TAC1,NORUN      ;YES, DOES THIS COMMAND REQUIRE A JOB?\r
126         JRST    CHKACT          ;NO\r
127         JSP     TAC,COMER       ;YES.\r
128         ASCIZ   /PLEASE TYPE ^C FIRST\r
129 /\r
130 \r
131 CHKACT:\r
132 \r
133 IFN PROG-JDAT,<\r
134         MOVE JDAT,JBTDAT(ITEM)  ;ADDRESS OF JOB DATA AREA\r
135 >\r
136         MOVE PROG,JBTADR(ITEM)  ;XWD PROTECTION,RELOCATION\r
137 IFN FTSWAP,<\r
138         TLNE TAC1,INCOR!NOTRAN  ;MUST JUST NOT BE SWAPPING OR\r
139                                 ; IF JOB HAS CORE ASSIGNED, MUST IT BE\r
140                                 ; IN PHYSICAL CORE (RATHER THAN DISK OR ON ITS WAY)\r
141         TLNN T,SWP              ;YES, IS JOB ON DISK OR ON ITS WAY?\r
142         JRST CHKCO2             ;NO\r
143         TLNN TAC1,INCOR         ;YES, MUST JOB BE IN CORE?\r
144         JUMPE PROG,CHKCO2       ;NO, IS A SWAP FOR THIS JOB IN PROGRESS?\r
145                                 ; NO, SO COMMAND MUST BE DELAYED\r
146                                 ; (EITHER BECAUSE SWAP IN PROGRESS OR\r
147                                 ; JOB ON DISK AND MUST BE IN PHY CORE)\r
148         HRRI TAC1,DLYCM         ;ASSUME JOB MUST BE IN PHY CORE\r
149                                 ; SO SET TO SWAP JOB IN\r
150         TLNN TAC1,INCOR         ;IS THIS TRUE?\r
151 CHKDLY: HRRI TAC1,DLYCM1        ;NO, JUST DELAY COMMAND UNTIL SWAP OUT OR IN IS FINISHED\r
152         JRST COMDIS             ;AND DISPATCH TO DELAY COMMAND\r
153 CHKCO2: TLNE TAC1,NOACT         ;CAN COMMAND BE PERFORMED WITH ACTIVE DEVICES?\r
154         PUSHJ PDP,RUNCHK        ;NO, RETURN IF JOB STOPPED AND NO ACTIVE DEVICES\r
155 CHKCO1: TLNE TAC1,NOCORE        ;DOES THIS COMMAND NEED CORE?\r
156         JRST COMGO              ;NO, GO DISPATCH\r
157         JUMPN PROG,CHKXPN       ;YES, IS CORE IN MEMORY?\r
158         JSP TAC,COMER           ;NO, PRINT "NO CORE ASSIGNED"\r
159         ASCIZ /NO CORE ASSIGNED\r
160 /\r
161 \f\r
162 CHKXPN: TLNN TAC1,PLSXPN        ;DOES THIS COMMAND NEED CORE TO BE EXPANDED?\r
163         JRST COMGO              ;NO\r
164         HLRE IOS,JOBHCU(JDAT)   ;YES, IS CORE STILL COMPRESSED(SAVE DID NOT GO\r
165                                 ; TO COMPLETION)\r
166         AOJGE IOS,COMGO         ;LH=-2 DURING SAVE, WHEN CORE COMPRESSED\r
167                                 ;LH=-1 DURING SAVE OF HIGH SEG, OR GET OF LOW\r
168                                 ; OR HIGH SEG\r
169         PUSHJ PDP,EXPAND        ;YES, EXPAND CORE FIRST\r
170         JFCL                    ;IGNORE ADDRESS CHECK ERROR, WE TRIED\r
171 IFN FTSWAP,<\r
172         JRST CHKDLY             ;DELAY COMMAND BECAUSE COMMAND DECODER ACS ARE\r
173                                 ; ALL GONE, NEXT TIME JOBHCU WILL BE 0\r
174 >\r
175 \r
176 IFE FTSWAP,<\r
177         HRRI TAC1,DLYCM1                ;DELAY COMMAND TILL NEXT CLOCK TICK\r
178         JRST COMDIS\r
179 >\r
180 \r
181 COMER:  MOVSI TAC1,NOINCK\r
182         MOVEM TAC1,(PDP)\r
183         MOVEI TAC1,CERR         ;CALL ERROR MESSAGE ROUTINE\r
184 \r
185 COMGO:  MOVSI   IOS,CMWRQ\r
186         TLZN    T,CMWB          ;CLEAR CMWB; WAS JONB IN COMM WAIT\r
187         ANDCAM  IOS,(PDP)       ;NO, CLEAR REQUEU BIT IN DISP. FLAGS\r
188         MOVEM   T,JBTSTS(ITEM)\r
189 \r
190 COMDIS: MOVEI IOS,0             ;CLEAR IOS FOR SETTING DISPATCH ADDRESSES\r
191         PUSHJ PDP,(TAC1)        ;DISPATCH TO COMMAND SETUP ROUTINE.\r
192 \f\r
193 ;RETURN FROM COMMAND SETUP ROUTINE\r
194 \r
195 COMRET: POP PDP,T1              ;RESTORE COMMAND FLAGS\r
196         POP PDP,DEVDAT          ;RESTORE TTY DDB ADDRESS.\r
197 IFN FTTTYSER,<\r
198         EXTERN  TITAKR,TISYNC\r
199         LDB     TEM,TITAKR(DEVDAT)      ;GET BREAK CHARACTER\r
200         PUSHJ   PDP,SKPBRK      ;SKIP TO BREAK CHAR\r
201         SOS     TISYNC(DEVDAT)  ;REDUCE LINE COUNT\r
202 >\r
203         MOVSI T,400000\r
204         LDB     TAC,PUNIT\r
205         ANDCAM  T,TTYTAB(TAC)   ;YES. TURN OFF SIGN BIT\r
206         SOS     COMCNT\r
207         JUMPN ITEM,COMRT1       ;DID AN ERROR OCCUR?\r
208         TLNN T1,NOJOBN          ;I.E., ITEM=0 AND NOJOBN=0?\r
209         MOVSI T1,NOINCK+ERRFLG+CMWRQ    ;YES, PRINT ERROR MESSAGE ONLY, AND\r
210                                         ;REQUEUE JOB IF NECESSARY.\r
211 \r
212 COMRT1: MOVE T,JBTSTS(ITEM)     ;JOB STATUS WORD\r
213         TLNN T1,NOINCK          ;SUPPRESS JOB INIT. CHECK?\r
214         TLOE T,JNA              ;NO, IS JOB INIT BIT ALREADY SET?\r
215         JRST PCRLF              ;YES.\r
216         MOVEM T,JBTSTS(ITEM)    ;NO, SO SET IT THIS COMMAND\r
217         PUSHJ PDP,TTYATI        ;ATTACH TTY TO JOB\r
218         JFCL                    ;INGORE IF CAN NOT(SHOULD NEVER HAPPEN)\r
219         PUSHJ PDP,INLMES        ;AND PRINT "JOB "\r
220         ASCIZ /JOB /\r
221         MOVE TAC,ITEM           ;PRINT JOB NUMBER\r
222         PUSHJ PDP,RADX10\r
223         PUSHJ PDP,PRSPC\r
224         MOVEI TAC,CONFIG        ;PRINT SYSTEM CONFIGURATION NAME\r
225         PUSHJ PDP,CONMES\r
226 IFN FTLOGIN, <\r
227         PUSHJ PDP,CRLF\r
228 >\r
229 IFE FTLOGIN, <\r
230         PUSHJ PDP,PRSPC\r
231         PUSHJ   PDP,DAYTM1\r
232 >\r
233 \f\r
234 PCRLF:  TLNE T1,ERRFLG          ;DID AN ERROR OCCUR?\r
235         PUSHJ PDP,PRQM          ;YES. APPEND ?\r
236         TLNN T1,NOCRLF          ;SUPRESS CRLF?\r
237         PUSHJ PDP,CRLF          ;NO\r
238         TLNN T1,NOPER           ;SUPRESS PRINTING PERIOD?\r
239         PUSHJ PDP,PRPER         ;NO\r
240         JUMPE ITEM,PCRLF1       ;JOB DOES NOT RUN IF  ERROR OR NO JOB NO. ASSIGNED\r
241         TLNE T1,TTYRNU          ;JOB TO RUN WHEN TTY FINISHED TYPING?\r
242                                 ; COMMAND RESPONSE (TTY TO USER MODE)?\r
243         PUSHJ PDP,TTYUSR        ;YES, CALL SCANNER ROUTINE\r
244         TLNE T1,TTYRNC          ;NO. JOB TO RUN AND REMAIN IN MONITOR MODE?\r
245         PUSHJ PDP,SETRUN        ;YES, CALL SCANNER ROUTINE\r
246 PCRLF1: TLNN T1,NOMESS          ;IS THERE A MESSAGE?\r
247         PUSHJ PDP,TTYSTR        ;YES. START TTY TYPING IT OUT\r
248 IFN     FTSWAP, <\r
249         EXTERN  PJOBN,REQUE\r
250         LDB     ITEM,PJOBN      ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK\r
251         JUMPE   ITEM,CPOPJ      \r
252         TLNE    T1,CMWRQ        ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR?\r
253 \r
254         JRST    REQUE           ;YES\r
255 >\r
256         POPJ PDP,\r
257 \r
258 IFN FTTTYSER,   <EXTERN SPCHEK,TITAKR,GETCHR,TPOPJ\r
259 \r
260 SKPBRK: PUSH    PDP,TAC\r
261 SKPBR2: PUSHJ   PDP,SPCHEK\r
262         JRST    SKPBR1\r
263         TLNE    TAC,BREAKB      ;IS THIS CHAR THE BREAK?\r
264         JRST    TPOPJ           ;YES, RESTORE TAC, RETURN\r
265 SKPBR1: PUSHJ   PDP,GETCHR      \r
266         JUMPN   TEM,SKPBR2      ;LOOK FURTHER FOR BREAK\r
267         JRST    TPOPJ           ;UNLESS NO MORE CHARS\r
268 >\r
269 \f\r
270 ;TABLE OF CONSOLE COMMANDS\r
271 \r
272 INTERNAL FTATTACH,FTTIME,FTTALK,FTEXAMINE,FTLOGIN,FTREASSIGN\r
273 INTERNAL FTFINISH,FTCCL\r
274 \r
275 ;BITS CHECKED BEFORE DISPATCHING TO COMMAND SETUP ROUTINE\r
276 \r
277 NOCORE=400000   ;NO CORE NEEDED FOR COMMAND\r
278 NOJOBN=200000   ;NO JOB NUMBER NEEDED FOR COMMAND\r
279 NOLOGIN=100000  ;JOB DOES NOT NEED TO BE ALREADY LOGGED IN.\r
280 NOACT=40000     ;COMMAND MUST BE DELAYED IF JOB HAS ACTIVE DEVICES.\r
281 NOTRAN=20000    ;COMMAND MUST BE DELAYED IF SWAPPED TRANSFER IN PROGRESS\r
282 NORUN=10000     ;AN EXPLICIT ^C MUST BE TYPED BY USER BEFORE COMMAND\r
283                 ; IS EXECUTED IF JOB IS RUNNING\r
284                 ; JOB MUST BE SWAPPED IN IF IT HAS LOGICAL CORE\r
285 INCOR=4000      ;USED ONLY BY COMMAND DISPATCH\r
286                 ; DOES NOT APPEAR IN COMMAND TABLE\r
287 INCORE=4000!NOTRAN      ;COMMAND MUST BE DELAYED IF JOB HAS LOGICAL CORE\r
288                 ; WHICH IS ON DISK OR ON ITS WAY IN OR OUT.\r
289                 ; JOB WILL BE SWAPPED IN (SEE DLYCOM)\r
290                 ; AND IS NOT SITTING QUIETLY IN CORE(IE NO SWAPPING TRANSFER)\r
291 PLSXPN=4        ;CORE MUST BE EXPANED IF STILL COMPRESSED BY SAVE NOT GOING\r
292                 ; TO COMPLETION(CONTROL C OR DEVICE OK?)\r
293                 ; MUST BE USED IN CONJUNCTION WITH COMMANDS WHICH\r
294                 ; NEED CORE AND NEED IT IN CORE\r
295 \r
296 ;BITS CHECKED AFTER RETURN FROM COMMAND SETUP ROUTINE\r
297 \r
298 CMWRQ=2000      ;REQUEUE JOB AFTER COMMAND WAIT\r
299 NODATE=1000     ;DON'T PRINT DATE DURING JOB INTERROGATION\r
300 NOINCK=400      ;NO CHECK FOR JOB INITIALIZATION (JNA=0)\r
301 NOCRLF=200      ;NO PRINTING OF CRLF\r
302 NOPER=100       ;NO PRINTING OF PERIOD\r
303 TTYRNU=40       ;SET TTY TO USER MODE AND START JOB\r
304                 ; WHEN COMMAND RESPONSE STOPS TYPING\r
305 TTYRNC=20       ;KEEP TTY IN COMMAND MODE AND START JOB\r
306                 ; WHEN COMMAND RESPONSE STOPS TYPING\r
307 NOMESS=10       ;NO COMMAND RESPONSE EVER, DO NOT CALL TTYSTR\r
308 \r
309                 ;T TAKEN ABOVE BY 'PLSXPN' BIT\r
310 \r
311 ERRFLG=1        ;COMMAND ERROR\r
312 \f\r
313 DEFINE NAMES<\r
314         C START,START,NOPER!TTYRNU!INCORE!NOACT!NORUN\r
315         C HALT,STOP,NOCORE!NOJOBN!NOLOGIN!NOINCK!CMWRQ\r
316         C KJOB,KJOB,NOCORE!NOJOBN!NOINCK!NOLOGIN!NOACT!NORUN!NOPER!NOCRLF!NOMESS!NOTRAN\r
317         C <>,CBLANK,NOCORE!NOJOBN!NOLOGIN!NOINCK!NOCRLF\r
318         C R,RCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN\r
319         C RUN,RUNCOM,NOCORE!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN\r
320         C CORE,CORE,NOCORE!NORUN!CMWRQ!INCORE!NOACT!NOTRAN\r
321         C GET,GET,NOCRLF!NOPER!TTYRNC!NOCORE!NOACT!NORUN!NOTRAN\r
322         C SAVE,SAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN\r
323 IFN FT2REL,<\r
324         C SSAVE,SSAVE,NOCRLF!NOPER!TTYRNC!INCORE!NOACT!NORUN!PLSXPN\r
325 >\r
326         C CONTINUE,CONT,NOPER!TTYRNU!INCORE!NORUN\r
327 IFN FTEXAMINE,<\r
328         C D,DCOM,CMWRQ!INCORE\r
329         C E,ECOM,NOCRLF!CMWRQ!INCORE\r
330 >\r
331         C PJOB,PJOB,NOCORE\r
332         C ASSIGN,ASSIGN,NOCORE\r
333         C DEASSI,DEASSIGN,NOCORE!NOJOBN!NOINCK\r
334         C DDT,DDTGO,NOPER!TTYRNU!INCORE!NORUN!PLSXPN\r
335 IFN FTFINISH,<\r
336         C FINISH,CFINI,TTYRNC!NOACT!INCORE!NORUN\r
337 >\r
338         C REENTER,REENTER,TTYRNU!NOPER!INCORE!NORUN!PLSXPN\r
339         C CSTART,STARTC,TTYRNC!INCORE!NOACT!NORUN!PLSXPN\r
340         C CCONTINUE,CONTC,TTYRNC!INCORE!NORUN\r
341 IFN FTATTACH,<\r
342         C DETACH,DETACH,NOPER+NOCRLF+NOCORE!NOJOBN!NOINCK\r
343         C ATTACH,ATTACH,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
344 >\r
345         C DAYTIME,DAYTIM,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
346 IFN FTTIME,<\r
347         C TIME,RUNTIM,NOCORE!NOLOGIN!NOINCK\r
348 >\r
349         C RESOURCES,FREDEV,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
350 IFN FTLOGIN,<\r
351         C SCHEDULE,SKEDUL,NOCORE!NOJOBN!NOLOGIN!NOINCK\r
352 >\r
353 IFN FTTALK,<\r
354         C TALK,TALK,NOCRLF+NOPER+NOCORE!NOJOBN!NOLOGIN!NOMESS!NOINCK\r
355 >\r
356 IFN FTLOGIN,<\r
357         C LOGIN,CLOGIN,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN\r
358 >\r
359 IFE FTLOGIN,<\r
360         C LOGIN,CPOPJ,NOCORE!NOACT!NORUN!NOTRAN\r
361 >\r
362 IFN FTREASSIGN,<\r
363         C REASSI,REASS,NOCORE!NOACT!INCORE!CMWRQ!NORUN\r
364 >\r
365         C HELP,HELP,NOCORE!NOLOGIN!NOPER!TTYRNU!NOCRLF!NOACT!NORUN!NOTRAN\r
366         C SYSTAT,SYSTAT,NOCORE!NOLOGIN!NOACT!NORUN!NOCRLF!NOPER!TTYRNU!NOTRAN\r
367 IFN FTCCL,<\r
368         C COMPILE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
369         C CREATE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
370         C CREF,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
371         C DEBUG,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
372         C DELETE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
373         C DIRECT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
374         C EDIT,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
375         C EXECUTE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
376         C LIST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
377         C LOAD,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
378         C MAKE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
379         C RENAME,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
380         C TECO,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
381         C TYPE,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
382         C CTEST,CCLRUN,NOCORE!NOPER!TTYRNU!NOCRLF!INCORE!NOACT!NORUN\r
383 >\r
384 >\r
385 \f\r
386 ;GENERATE TABLE OF SIXBIT COMMAND NAMES\r
387 \r
388 DEFINE C(A,B,D) <\r
389         <SIXBIT /A/>\r
390 >\r
391 COMTAB: NAMES\r
392 DISPL=.-COMTAB  ;LENGTH OF TABLE\r
393 \f\r
394 ;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS\r
395 \r
396 DEFINE C(A,B,D) <\r
397 Z       B       (D)\r
398 >\r
399 DISP:   NAMES\r
400 \f\r
401 ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE\r
402 ;WITH FOLLOWING AC'S SET:\r
403 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)\r
404 ;ITEM = JOB NUMBER\r
405 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER\r
406 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND\r
407 ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA\r
408 ;PROG=XWD PROTECTION,RELOCATION; 0 IF NO CORE\r
409 ;IOS=0\r
410 \r
411 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF\r
412 ;NEEDED AND TTY IS STARTED\r
413 \r
414 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE\r
415 ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY\r
416 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET\r
417 ;THE JOB TO A RUNABLE STATUS AND RETURN IMMEDIATELY\r
418 \r
419         EXTERN TTYFNU\r
420 \r
421 COR0:   JUMPE PROG,CPOPJ        ;RETURN IF JOB DOES NOT HAVE CORE\r
422         \r
423         JSP TAC1,MONJOB         ;SET TO RUN MONITOR JOB(PC IN EXEC MODE)\r
424                                 ; RETURN HERE AT UUO LEVEL(NO ACS SET UP)\r
425         MOVEI TAC1,ESTOP        ;PUT ERROR STOP ON END OF PDL\r
426         JSP TAC,MONSTR          ;START MONITOR JOB BY SETTING UP ACS AND\r
427 JOB1:   PUSHJ PDP,RESET         ;RELEASE ALL IO DEVICES ASSIGNED TO THIS JOB\r
428         PUSHJ PDP,TTYFNU        ;FIND TTY FOR THIS JOB(SETUP ITEM WITH JOB NO.)\r
429 IFN FTSWAP,<\r
430         EXTERN ZERSWP,NOCORQ\r
431         PUSHJ PDP,NOCORQ        ;PUT JOB IN NO CORE Q\r
432         PUSHJ PDP,ZERSWP        ;CLEAR SWAP SPACE (IF ANY) FOR LOW SEG\r
433                                 ; AND CLEAR SWP,SHF,IMGIN,IMGOUT FOR LOW SEG\r
434 >\r
435 IFN FT2REL,<\r
436         EXTERN KILHGH\r
437         PUSHJ PDP,KILHGH        ;HIGH SEG FOR THIS USER. RETURN CORE\r
438                                 ; REMOVE HIGH SEG FROM THIS USER LOGICAL ADDRESSING SPACE\r
439                                 ; IF NO OTHER USERS IN CORE ARE USING IT\r
440                                 ; RETURN DISKL SPACE IF NO LONGER SHARABLE HIGH SEG\r
441 >\r
442         MOVEI TAC,0             ;RETURN BOTH PHYSICAL AND LOGICAL CORE\r
443         SOS (PDP)               ;NEGATE SKIP RETURN WHICH CORE1 WILL DO\r
444         JRST CORE1              ;GO DO IT AND RETURN TO CALLER\r
445 \f\r
446 ; "PJOB" PRINT JOB NUMBER OF JOB TTY IS ATTACHED TO\r
447 \r
448 INTERNAL PJOB,DECLF\r
449 \r
450 PJOB:   MOVE TAC,ITEM           ;JOB NO.\r
451 DECLF:  PUSHJ PDP,RADX10        ;PRINT TAC AS DEC. THEN CRLF\r
452         JRST CRLF\r
453 \r
454 ; "KJOB" KILL ATTACHED JOB\r
455 \r
456 EXTERNAL JBTSTS,TTYKILM,CPOPJ\r
457 INTERNAL FTTIME,JOBKL\r
458 \r
459 KJOB:   JUMPE ITEM,JOBKB        ;WAS JOB INITIALIZED?\r
460 IFN     FTLOGIN,<\r
461         TLZN    T,JLOG+JACCT    ;TEST JACCT ALSO IN CASE COMMAND WAS DELAYED\r
462         JRST    KJOB2           ;IF JOB NOT LOGGED IN\r
463         TLO     T,JACCT         ;DISABLE ^C\r
464         MOVEM   T,JBTSTS(ITEM)\r
465 IFN     FTSWAP, <\r
466         PUSHJ   PDP,ALOGN1      ;ATTACH TTY\r
467 >\r
468         MOVSI   TAC,TTYRNU+NOMESS\r
469         XORM    TAC,-1(PDP)     ;SET TTYRNU AND CLEAR NOMESS FOR COMRET\r
470         MOVE    TAC,[SIXBIT /LOGOUT/]   ;NAME OF CUSP\r
471         JRST    ARCOM\r
472 >\r
473 KJOB2:\r
474 IFE FTSWAP+FTLOGIN,<\r
475         JUMPE PROG,JOBKA        ;YES. DOES JOB HAVE CORE IN MEMORY?\r
476 >\r
477         PUSHJ PDP,GETMIN        ;GET MINIMAL JOB AREA ON DISK OR CORE\r
478         JUMPE PROG,DLYCM1       ;DELAY COMMAND IF CORE ASSIGNED ON DISK\r
479         JSP TAC1,MONJOB         ;YES, SCHEDULE MONITOR JOB(PC IN EXEC MODE)\r
480                                 ;RETURN HERE AT UUO LEVEL WHEN SCHEDULED\r
481 JOBKL:  MOVEI TAC1,ESTOP        ;PUT ESTOP ON END OF PDL\r
482         JSP TAC,MONSTR          ;GO SETUP ACS AND PD LIST\r
483         PUSHJ PDP,JOB1          ;FLUSH CORE AFTER RELEASING DEVICES\r
484 JOBKA:\r
485 IFN FTTIME,<\r
486 IFE     FTLOGIN, <\r
487         PUSHJ PDP,PRTTIM        ;PRINT JUST TOTAL RUN TIME\r
488         PUSHJ   PDP,TTYSTR      ;START TTY\r
489 >>\r
490         PUSHJ PDP,DEASTY        ;DEASSIGN ALL BY TTY\r
491         PUSHJ PDP,TTYKIL        ;RETURN TTY TO VIRGIN STATE\r
492         JRST KSTOP              ;CLEAR JOB STATUS WORD AND STOP JOB\r
493 \r
494 ;ERROR IN COMMAND\r
495 \r
496 CERR:   JRST ERRMES\r
497 \r
498 JOBKB:  SETZM   -1(PDP)         ;CLEAR NOJOBN SO COMRET WILL PRINT ERROR MSG.\r
499         JRST    ATT4            ;"NOT A JOB"\r
500 \f\r
501 ; "START L" OR "START" - START AT LOC, L OR STARTING ADDRESS\r
502 INTERNAL FT2REL\r
503 EXTERNAL JOBSA\r
504 \r
505 START:                          ;SAME AS CSTART, DIFF BY COMTAB BITS\r
506                         ; WHICH PUT TTY IN MONITOR OR USER MODE\r
507 \r
508 ; "CSTART L" OR   "CSTART" - START AT LOC. L(TTY IN COMMAND MODE)\r
509 \r
510 STARTC: PUSHJ PDP,OCTIN         ;CONVERT POSSIBLE OCTAL NO ARG.\r
511 IFE FT2REL,<\r
512         SKIPA TAC1,JOBSA(JDAT)  ;NO START ADR. SPECIFIED RETURN\r
513 >\r
514 IFN FT2REL,<\r
515         JRST SNOARG     ;NO ARG SPECIFIED RETURN\r
516 >\r
517         JRST COMERA             ;ILLEGAL CHARACTER\r
518 IFN FT2REL,<\r
519         EXTERN CHKMED\r
520         PUSHJ PDP,CHKMED        ;CHECK TO SEE IF HIGH SEG WHICH IS SHARABLE\r
521                                 ; IF YES, TURN ON USER MODE WRITE PROTECT\r
522                                 ; FOR THIS USER, AND SET MEDDLE BIT SO HE CANNOT\r
523                                 ; TURN UWP OFF.>\r
524         JRST CHKSTR             ;START JOB WITH PC IN USER MODE,\r
525                                 ; IF START ADR IS NON-ZERO\r
526 IFN FT2REL,<\r
527 SNOARG: SKIPA TAC1,JOBSA(JDAT)  ;NO. ARG SPECIFIED, USE START ADR SUPPLIED\r
528                         ; BY PROGRAM END STATEMENT AND STORED BY LINKING LOADER\r
529                         ; SKIP INTO REENTER, START WITH PC IN USER MODE\r
530 >\r
531 \f\r
532 ;"REENTER"  - REENTER USER PROGRAM\r
533 \r
534 EXTERNAL JOBREN\r
535 \r
536 REENTER:MOVE TAC1,JOBREN(JDAT)  ;GET REENTER ADDRESS FORM JOB DATA AREA\r
537         JRST CHKSTR             ;START JOB WITH PC IN USER MODE\r
538                                 ; IF  START ADR IS NON-ZERO\r
539 \r
540 ; "DDT" - START EXECUTION AT DDT IN USER AREA\r
541 \r
542         EXTERN JOBDDT\r
543 \r
544 DDTGO:  MOVE TAC1,JOBDDT(JDAT)  ;DDT STARTING ADR. IN JOB DATA AREA\r
545                         ; FALL INTO CHSTR\r
546 \r
547 ;ROUTINE TO CHECK TO SEE IF STARTING ADDRESS IS NON-ZERO, AND START USER IF OK\r
548 \r
549 CHKSTR: JUMPN TAC1,USTART       ;IS IT NON-ZERO?, IS YES\r
550                                 ; STORE OLD PC IN JOBOPC IN JOB DATA AREA\r
551                                 ; THEN START WITH PC IN USER MODE\r
552         JSP TAC,ERRMES          ;NO, PRINT "NO START ADR"\r
553         ASCII /NO START ADR\r
554 /\r
555 \f\r
556 ; "STOP" OR "<CONTROL>C"\r
557 ;SCANNER ROUTINES DUMMY UP STOP WHEN CONTROL C TYPED IN\r
558 ;STOP MUST BE DELAYED IF THIS JOB IS SYSTEM TAPE USER\r
559 ;AND SYSTEM TAPE IS ACTIVE, OTHERWISE, THE JOB WILL NOT BE\r
560 ;STOPPED WHEN DONE USING THE SYSTEM TAPE.\r
561 \r
562 INTERNAL FTDISK\r
563 EXTERNAL STUSER,JOB,PJBSTS,IOWQ,JOBDAC\r
564 \r
565 STOP:   JUMPE   ITEM,STOP8      \r
566         CAMN ITEM,STUSER        ;IS THIS SYSTEM TAPE USER?\r
567         JRST CFINS              ;YES, DO FINISH SYS COMMAND\r
568 IFN FTDISK,<\r
569         \r
570         PUSHJ PDP,STOPCK        ;CAN THE JOB STOP?\r
571         JRST DLYCM1             ;NO. DELAY IT.\r
572 >\r
573         PUSHJ PDP,STOP1         ;STOP JOB\r
574 STOP8:  IFE FTTTYSER,<\r
575         JSP TAC,CONMES          ;PRINT "^C CRLF CRFL PERIOS"\r
576         ASCIZ /^C\r
577 /\r
578 >\r
579 IFN FTTTYSER,<  POPJ    PDP,0>\r
580 \r
581 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)\r
582 \r
583 CONTC:                          ;SAME AS CONT\r
584 \r
585 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF\r
586 EXTERNAL JBTSTS\r
587 \r
588 CONT:   MOVSI TAC1,JERR\r
589         TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET?\r
590         POPJ PDP,               ;COMMAND DECODER WILL DO REST\r
591         JSP TAC,ERRMES          ;YES, PRINT CANT CONTINUE\r
592 \r
593         ASCIZ /CAN'T CONTINUE\r
594 /\r
595 \f\r
596 ; "CORE  #" - ASSIGNS #*1024 WORDS OF CORE TO JOB\r
597 ; "CORE" WITH NO ARG. WILL PRINT NO OF FREE BLOCKS LEFT\r
598 ;       WITHOUT AFFECTING CURRENT ASSIGNMENT OF CORE\r
599 ;       JOB NOT IN MIDDLE OF SWAPPING\r
600 ;       EITHER ON DISK OR CORE OR NEITHER PLACE\r
601 \r
602 EXTERNAL PCORSZ\r
603 \r
604 CORE:   PUSHJ PDP, DECIN        ;GET NO. OF 1K BLOCKS\r
605         JRST COR3               ;NO ARG. SPECIFIED, JUST TYPE FREE BLOCK LEFT\r
606         JRST COMERA             ;ILLEGAL DECIMAL CHARACTER RETURN\r
607 IFE FTSWAP,<\r
608         JUMPE TAC1,COR0         ;RELEASE DEVICES IF USER ASKING FOR 0 CORE\r
609 >\r
610 IFN FTSWAP,<\r
611         JUMPE TAC1,COR1         ;ASSIGN JUST MINIMAL CORE AND RELEASE DEVICES\r
612                                 ; IF ASKING FOR 0 CORE\r
613 >\r
614         LSH TAC1,12             ;CONVERT 1K BLOCKS TO WORDS\r
615         \r
616         MOVEI TAC,-1(TAC1)      ;HIGHEST RELATIVE ADDRESS=LENGTH-1 OF LOW SEG\r
617         PUSHJ PDP,CORE0         ;TRY TO ASSIGN CORE\r
618         JRST COR2               ;CORE NOT AVAILABLE. GO PRINT MESSAGE\r
619         POPJ PDP,               ;OK RETURN, CORE ASSIGNED ON DISK OF MEMORY\r
620 IFN FTSWAP,<\r
621 ;USER ASKING FOR 0K\r
622 COR1:   JUMPN PROG,COR0         ;GO RELEASE ALL DEVICES IF HE HAS CORE IN MEMORY YET\r
623         PUSHJ PDP,GETMIN        ;NO, CORE ON DISK OR HAS NONE, ASSIGN MINIMAL\r
624                                 ; AREA(FLUSH HIGH SEG TOO) IN CORE OR DISK\r
625         JRST DLYCM              ;AND DELAY COMMAND TILL CORE IS IN MEMORY\r
626                                 ; DLYCM WILL SWAP IT IN.\r
627 >\r
628 \f\r
629 COR2:   IFN FTTTYSERM,<\r
630         MOVE DEVDAT,-2(PDP)     ;RESTORE TTY DDB ADR\r
631 >\r
632         PUSHJ PDP,INLMES        ;PRINT ? FOR PATCH\r
633         ASCIZ /?\r
634 /\r
635 COR3:   PUSHJ PDP,PRTSEG        ;PRINT SIZE OF LOW SEG\r
636 IFN FT2REL,<\r
637         EXTERN PRTHGH\r
638         PUSHJ PDP,PRTHGH        ;PRINT SIZE OF HIGH SEG (+0 IF NONE)\r
639                                 ; NOTHING IF NOT 2 REG. MACHINE OR SOFTWARE\r
640 >\r
641         PUSHJ PDP,INLMES\r
642         ASCIZ "/"\r
643 \r
644 IFE FTSWAP,<\r
645         EXTERN CORTAL\r
646         MOVE TAC,CORTAL         ;NO. OF FREE 1K BLOCKS\r
647 >\r
648 IFN FTSWAP,<\r
649         EXTERNAL CORMAX\r
650         MOVE TAC,CORMAX         ;PRINT MAX. NO. OF BLOCKS IN PHYSICAL CORE\r
651         LSH TAC,-12             ;AVAILABLE TO A SINGLE USER(AS SET\r
652                                 ; BY BUILD AND/OR ONCE)\r
653 >\r
654         PUSHJ PDP,RADX10        ;PRINT NO. OF 1K BLOCKS AVAILABLE\r
655 IFE FTSWAP,<\r
656         JSP TAC,CONMAS\r
657         ASCIZ /K CORE\r
658 /\r
659 >\r
660 IFN FTSWAP,<\r
661         EXTERN VIRTAL\r
662         PUSHJ PDP,INLMES\r
663         ASCIZ /K CORE\r
664 VIR. CORE LEFT =/\r
665         MOVE TAC,VIRTAL         ;PRINT AMOUNT OF FREE SWAP SAPCE LEFT\r
666         JRST RADX10             ;IN DECIMAL\r
667 >\r
668 \f\r
669 ; "SSAVE FILENAM.EXT [PROJ,PROG] CORE"\r
670 ;WORKS LIKE SAVE, EXCEPT THAT HIGH SEG IS SAVED AS SHARABLE(EXT=SHR)\r
671 ;INSTEAD OF NON-SHARABLE(EXT=HGH)\r
672 \r
673 ; "SAVE FILE-NAME[PROJ.,PROG.] CORE" - SAVES JOB AREA ON RETRIEVABLE DEVICE\r
674 ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB\r
675 ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSGINMENTS, AC'S OR PC\r
676 \r
677 SAVE:IFN FT2REL,<\r
678         TLO IOS,NSRBIT          ;SET FLAGE FOR NON-SHARABLE EXT(HGH)\r
679 >\r
680 SSAVE:  HRRI IOS,SAVJOB         ;SETUP TO RUN SAVEJOB (IOS CLEARED BEFORE\r
681         PUSHJ PDP,CTEXT1        ;DISPATCH\r
682         SETZM JBTPRG(ITEM)      ;CLEAR JOB'S PROGRAM NAME FOR ROOM\r
683         JRST SGSET\r
684 \r
685 ; "GET DEVICE:FILE-NAME[PROJ.,PROG.] CORE" - SETS UP JOB AREA FROM RETREIVABLE\r
686 \r
687 ;DEVICE AND ASSIGNS CORE.\r
688 \r
689 GET:    MOVEI IOS,GETJOB        ;SETUP TO RUN GETJOB\r
690         PUSHJ PDP,CTEXT1        ;GET DEVICE NAME\r
691         SETZM   JBTPRG(ITEM)    ;CLEAR NAME FOR RCOM\r
692         JRST RUNCM      \r
693                                 ; JOB DATA AREA FOR MONITOR JOB\r
694 \r
695 IFN FTLOGIN,<   ;AUTOMATIC LOGIN AFTER DSK REFESH OR WHEN REFLAG SET\r
696 \r
697 EXTERNAL        REFLAG\r
698 \r
699 LOGREF: MOVEM   TAC,PRJPRG(ITEM)        ;PRJ,PRG NRS. IN REFLAG\r
700         MOVSI   TAC,JLOG\r
701         IORM    TAC,JBTSTS(ITEM)\r
702         SETZM   -1(PDP)                 ;CLEAR ALL FLAGS FOR COMRET\r
703         SETZM   REFLAG                  ;ONLY ONCE\r
704         POPJ    PDP,\r
705 >\r
706 \f\r
707 ;"HELP" -HELP COMMAND\r
708 \r
709 INTERNAL FTLOGIN\r
710 \r
711 IFN FTLOGIN,<   EXTERNAL HELPPP\r
712 HELP1:\r
713         MOVE TAC,HELPPP\r
714         TLN T,JLOG\r
715         JRST    ALOGIN\r
716         POPJ    PDP,\r
717 >\r
718 \r
719 HELP:   IFN FTLOGIN,<\r
720         PUSHJ   PDP,HELP1\r
721 >\r
722         MOVE    TAC,[SIXBIT /HELP/]     ;CUSP NAME\r
723         JRST    ARCOM   ;RUN IT\r
724 \r
725 SYSTAT: IFN FTLOGIN,<\r
726         PUSHJ   PDP,HELP1\r
727 >\r
728         MOVE    TAC,[SIXBIT /SYSTAT/]   ;CUSP NAME\r
729         JRST    ARCOM   ;RUN IT\r
730 \r
731 EXTERNAL JBTSTS,TTYATT\r
732 \r
733 ALOGIN:\r
734 INTERNAL FTLOGIN\r
735 IFN FTLOGIN,<   EXTERNAL PRJPRG\r
736         MOVEM TAC,PRJPRG(ITEM)\r
737         MOVSI TAC,JLOG\r
738         ANDCAM TAC,JBTSTS(ITEM)\r
739 >\r
740 IFN FTSWAP,<EXTERNAL    TTYATT\r
741 ALOGN1: PUSHJ PDP,TTYATT        ;MAKE SURE TTY IS ATTACHED IN CASE\r
742                                 ; THIS COMMAND MUST BE DELAYED\r
743                                 ; BECAUSE NO CORE YET.\r
744         JFCL\r
745 >\r
746         POPJ PDP,\r
747 \f\r
748 INTERN FTCCL\r
749 \r
750 IFN FTCCL,<\r
751 \r
752 CCLRUN: MOVE    TAC,[SIXBIT /COMPIL/]   ;CUSP NAME\r
753         JRST    ARCOM   ;RUN IT\r
754 >\r
755 ;"LOGIN" - LOGIN COMMAND\r
756 \r
757 INTERNAL FTLOGIN\r
758 IFN FTLOGIN,<\r
759 \r
760 EXTERNAL SYSPP\r
761 \r
762 LOGDET: JSP     TAC,ERRMES\r
763         ASCIZ   /PLEASE KJOB OR DETACH\r
764 /\r
765 CLOGIN: TLNE    T,JLOG          ;FORCE USER TO LOGOUT BEFORE\r
766         JRST    LOGDET          ; LOGGING IN ANEW.\r
767 IFN FTSWAP,<\r
768         EXTERN VIRTAL,LOGSIZ\r
769         MOVE TAC,VIRTAL         ;AMOUNT OF FREE VIRTUAL CORE LEFT\r
770         CAIL TAC,LOGSIZ         ;IS THERE AT LEAST 2K FOR LOGIN?\r
771                                 ; CUSTOMER CAN REDEFINE TO BE BIGGER THAN 2\r
772                                 ; WITH MONGEN DIALOG\r
773         JRST CLOG2              ;YES,\r
774         MOVEI ITEM,0            ;NO, SET JOB NUMBER TO 0 FOR COMMAND DECODER\r
775         JRST COR2               ;AND GO TELL USER AMOUNT OF CORE LEFT\r
776 >\r
777 CLOG2:  SKIPE   TAC,REFLAG      ;REFLAG SET NON-ZERO FOR AUTOMATIC LOGIN?\r
778         JRST    LOGREF          ;YES, LOG USER IN WITHOUT RUNNING CUSP\r
779                                 ; SO HE CAN RELOAD THE DISK AFTER REFRESH\r
780         MOVE TAC,SYSPP          ;SET PRJPRG TO SYSPP\r
781         PUSHJ PDP,ALOGIN        ;AUTOMATIC LOGIN\r
782         MOVSI   TAC,JACCT       ;FLAG LOGIN OR LOGOUT RUNNING AND\r
783         IORM    TAC,JBTSTS(ITEM);DISABLE ^C,\r
784         MOVE    TAC,[SIXBIT /LOGIN/]    ;CUSP NAME\r
785         JRST    ARCOM   ;RUN IT\r
786 >\r
787 \f\r
788 ; "R CUSTNAME CORE" - DOES "RUN SYS:CUSPNAME"\r
789 \r
790 RCOM:   MOVEI   TAC,0   ;NO FILE NAME, TTY WILL SUPPLY IT\r
791         JRST    ARCOM1\r
792 \r
793 ARCOM:  IFN FTTTYSER,<  PUSHJ   PDP,SKPBRK>\r
794 ARCOM1: MOVEM   TAC,JBTPRG(ITEM)        ;STORE FILE NAME\r
795         MOVSI   TAC1,(SIXBIT /SYS/)     ;READ FROM SYS DEVICE\r
796         JRST    RUNCO2\r
797 ; "RUN DEVICE:FILE[PROJ.PROG.] (CORE)"\r
798 ;DOES A CORE,GET,START ALL IN ONE\r
799 ;IF CORE ARG IS MISSING. SIZEIN DIRECTORY IS USED\r
800 ;JOB ON DISK OR IN CORE OR NO CORE, BUT NOT IN MIDDLE OF SWAP\r
801 \r
802 EXTERNAL JOBDA\r
803 \r
804 RUNCOM: PUSHJ PDP,CTEXT1        ;GET DEVICE NAME FROM COMMAND STRING\r
805         SETZM   JBTPRG(ITEM)    ;CLEAR FILE NAME\r
806 RUNCO2:RUNC1:   MOVEI IOS,RUNJOB\r
807 RUNCM:  PUSHJ PDP,GETMIN        ;GET MININAL JOB AREA IN CORE OR DISK\r
808         JUMPN PROG,SGSET        ;WAS CORE ASSIGNED IN MEMORY? IF YES, GO SCANARGS\r
809 IFE FTSWAP,<\r
810         JRST COR2               ;NO. PRINT "0K CORE LEFT"\r
811 >\r
812 IFN FTSWAP,<\r
813         JRST DLYCM              ;NO. DELAY COMMAND UNTIL IN CORE\r
814 >\r
815 \f\r
816 ; "ASSIGN DEV:NAME" - ASSIGN DEVICE TO JOB AND GIVE IT LOGICAL NAME\r
817 \r
818 EXTERNAL DEVLST,PJOBN,SYSTAP\r
819 \r
820 ASSIGN: PUSHJ PDP, CTEXT1       ;GET FIRST ARGUMENT\r
821         JUMPE TAC1, NOTENF      ;NO ARGUEMNT TYPED IF 0\r
822 IFN FTLOGIN,<EXTERN PRJPROG\r
823         CAME    TAC,[SIXBIT .SYS.]\r
824         JRST    ASSG6\r
825         HLRZ    T1,PRJPRG(ITEM)\r
826         CAIN    T1,1            ;PROJECT NR, 1?\r
827         JRST    ASSG7           ;YES\r
828 ASSG6:\r
829 >\r
830         MOVE T1, TAC1           ;SAVE DEVICE NAME\r
831 IFN FTTTYSER,<\r
832         PUSH    PDP,DEVDAT      ;SAVE TTY\r
833 >\r
834 IFE FTTTYSER,<\r
835 \r
836         PUSH PDP, TAC           ;SAVE INPUT BYTE POINT\r
837 >\r
838         MOVE    TAC,TAC1\r
839         PUSHJ   PDP,DEVPHY\r
840         JRST    ASSG3\r
841         MOVEI   TAC1,ASSCON\r
842         JRST    ASSG4\r
843 ASSG3:  MOVEI   TAC1,ASSCON     ;SETUP ASSIGNED BY CONSOLE BIT\r
844         HLRZ DEVDAT, DEVLST\r
845 ASSG0:  MOVE TAC,DEVNAM(DEVDAT)\r
846         CAME T1,DEVNAM(DEVDAT)  ;DOES PHYSICAL NAME MATCH?\r
847         JRST ASSG1              ;NO\r
848 ASSG4:  CAMN T1,[SIXBIT /DSK/]  ;IS THIS A DISC?(IF YES,\r
849         JRST    ASSG5           ;BYPASS CHECK FOR SYSTEM TAPE AND ASSIGN BELOW\r
850         CAMN TAC,SYSTAP         ;IS NEXT DEVICE IN LIST THE SYSTEM TAPE?\r
851         JRST ASSFIN             ;YES, DO NOT ASSIGN. CLEAR DIRECTORY IN CORE BIT\r
852 ASSG5:  PUSHJ   PDP,ASSASG      ;NO, TRY TO ASSGIN DEVICE\r
853         JRST ASSER1             ;ALREADY ASSIGNED TO ANOTHER JOB\r
854         JRST ASSFIN             ;ASSIGNED\r
855 \f\r
856 ;SYSTEM TAPE OR NOT MATCH OF ARG AND PHYSICAL NAME.\r
857 \r
858 ASSG1:  CAMN TAC,SYSTAP         ;IS THIS SYSTEM TAPE?\r
859         JRST ASSG2              ;YES\r
860         LDB T, PJOBN            ;SAVE OLD JOB NUMBER FOR THIS DEVICE\r
861         TRZ TAC,-1              ;COMAPRE LEFT HALF ONLY\r
862         CAMN TAC, T1\r
863         PUSHJ PDP, ASSASG       ;MATCH. TRY TO ASSIGN IT\r
864         JRST ASSG2              ;KEEP LOOKING\r
865         JUMPE T,ASSFIN          ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY UNASSIGNED\r
866 \r
867 ASSG2:  HLRZ DEVDAT, DEVSER(DEVDAT)\r
868         JUMPN DEVDAT, ASSG0\r
869 IFN FTTTYSER,<\r
870         POP     PDP,DEVDAT      ;RESTORE TTY DDB\r
871 >\r
872 IFE FTTTYSER,<\r
873         POP PDP, TAC\r
874 >\r
875         JRST NOTDEV             ;PRINT NO SUCH DEVICE\r
876 \r
877 IFN FTLOGIN,<EXTERN STREQ,SYSTAP\r
878 ASSG7:  PUSHJ   PDP,CTEXT1\r
879         JUMPE   TAC1,NOTENF\r
880         SKIPL   STREQ\r
881         JRST    DLYCM1\r
882         MOVEM   TAC1,SYSTAP\r
883         POPJ    PDP,\r
884 >\r
885 \f\r
886 ;ALREADY ASSIGNED TO ANOTHER JOB\r
887 ASSER1:\r
888 IFE FTTTYSER,<\r
889         PDP PDP, TAC\r
890         MOVEI TAC, ASSMS2\r
891         PUSHJ PDP,ERRMES\r
892         LDB TAC, PJOBN\r
893         JRST DECLF              ;PRINT JOB NUMBER CRLF\r
894 >\r
895 IFN FTTTYSER,<\r
896         LDB     TAC,PJOBN       ;GET JOB NUMBER FOR DEVICE\r
897         POP     PDP,DEVDAT      ;GET DDB FOR TTY\r
898         PUSH    PDP,TAC ;SAVE JOB NO.\r
899         MOVEI   TAC,ASSMS2      ;TYPE ERROR MESSAGE\r
900         PUSHJ   PDP,ERRMES\r
901         POP     PDP,TAC ;GET JOB NO. BACK\r
902         JRST    DECLF           ;AND TYPE IT\r
903 >\r
904 \r
905 ASSMS2: ASCIZ   /ALREADY ASSIGNED TO JOB /\r
906 \f\r
907 ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME\r
908 ASSFIN: SETZM   DEVLOG(DEVDAT)  ;CLEAR LOGICAL NAME\r
909 IFE FTTTYSER,<\r
910         POP PDP,TAC             ;RESTORE INPUT BYTE POINTER\r
911         PUSH PDP,DEVDAT         ;SAVE DDB ADDRESS\r
912 >\r
913 IFN FTTTYSER,<\r
914         EXCH    DEVDAT,0(PDP)   ;GET TTYDDB, SAVE DEVICE DDB\r
915 >\r
916         PUSHJ PDP,CTEXT1        ;GET SECOND ARG, LOGICAL DEVICE NAME\r
917         SKIPE TAC,TAC1          ;IS THERE A LOGICAL NAME SPECIFIED?\r
918         PUSHJ PDP, DEVLG        ;YES, SEE IF IT IS ALREADY IN USE\r
919                                 ; BY THIS USER\r
920         JRST ASSG1              ;NO \r
921         MOVEI TAC,LOGERR        ;YES, PRINT ERROR\r
922         MOVE    DEVDAT,-3(PDP)  ;RESTORE TTY DDB\r
923         PUSHJ PDP,ERRMES\r
924         MOVEI TAC,0             ;CLEAR LOGICAL NAME FOR THIS DEVICE\r
925 ASSF1:  POP PDP,DEVDAT\r
926         MOVEM TAC,DEVLOG(DEVDAT);STORE IN DEVICE DATA BLOCK\r
927         MOVSI TAC1,DVDIRIN      ;CLEAR DIRECTORY IN CORE BIT\r
928         ANDCAB TAC1,DEVMOD(DEVDAT)      ;SETUP TAC1 WITH DEVICE CHARACTERISTICS FOR ASGHGH\r
929 IFN FT2REL,<\r
930         EXTERN ASGHGH\r
931         PUSHJ PDP,ASGHGH        ;GO CHECK IF THIS DEVICE HAS INITIALIZED ANY SHARED SEGMENTS\r
932                                 ; IF YES, CLEAR SEG NAMES SO NO NEW SHARING (DTA,MTA ONLY)\r
933 >\r
934         MOVE TAC1,DEVNAM(DEVDAT)        ;PHYSICAL NAME\r
935         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
936         PUSHJ PDP,PRNAME        ;PRINT IT\r
937         JSP TAC,CONMES\r
938 \r
939         ASCIZ / ASSIGNED\r
940 /\r
941 \r
942 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE. /\r
943 \f\r
944 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE\r
945 \r
946 INTERNAL NOTDEV\r
947 \r
948 DEASSI: JUMPE ITEM,CPOPJ        ;NO-OP IF NO JOB NUMBER\r
949         PUSHJ PDP,CTEXT1        ;GET DEVICE NAME\r
950         JUMPE TAC1,DEASTY       ;NO ARG. IF 0, DEASSIGN ALL BY TTY\r
951         MOVE TAC, TAC1          ;DEVICE NAME\r
952         PUSHJ PDP, DEVSRC       ;SEARCH FOR DEVICE\r
953         JRST DEAER1             ;NOT FOUND\r
954         PUSHJ PDP, DEASG        ;FOUND, DEASSIGN IT\r
955         JRST DEAER2             ;NOT PREVIOUSLY ASSIGNED\r
956         POPJ PDP,               ;DEVICE DEASSIGNED\r
957 \r
958 NOTDEV:\r
959 DEAER1: MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
960         JSP TAC,ERRMES          ;PRINT NO SUCH DEVICE\r
961 \r
962         ASCIZ /NO SUCH DEVICE\r
963 /\r
964 \r
965 DEAER2: MOVE TAC1,DEVNAM(DEVDAT)        ;PRINT PHYSICAL DEVICE NAME\r
966         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
967         PUSHJ PDP,PRNAME\r
968         JSP TAC,ERRMES\r
969 \r
970         ASCIZ / WASN'T ASSIGNED\r
971 /\r
972 \f\r
973 INTERNAL FTREASSIGN\r
974 IFE FTREASSIGN,<\r
975 REASSI=UUOERR\r
976 >\r
977 \r
978 IFN FTREASSIGN,<\r
979 \r
980 ;REASSIGN UUO\r
981 ;CALL   MOVE AC,JOB NUMBER\r
982 ;       MOVE AC+1,SIXBIT /DEVICE/\r
983 ;       CALL AC,[SIXBIT /REASSIGN/]\r
984 ;IF C(AC)=0, JOB HAS NOT BEEN INITIALIZED\r
985 ;IF C(AC+1)=0, DEVICE NOT ASSIGNED TO THIS JOB OR DEVICE IS A TTY\r
986 \r
987 INTERNAL REASSIGN\r
988 EXTERNAL PUUOAC,JOB\r
989 \r
990 REASSI: LDB UUO,PUUOAC\r
991         HRLI UUO,PROG\r
992         PUSH PDP,@UUO           ;STACK JOB NUMBER TO BE REASSIGNED TO\r
993         AOS UUO\r
994         MOVE TAC1,@UUO          ;DEVICE NAME\r
995         MOVE ITEM,JOB           ;THIS JOB NUMBER\r
996         SOJA UUO,REASS1\r
997 \r
998 ;"REASSIGN DEV:JOB" - REASSIGN DEVICE "DEV" TO JOB "JOB"\r
999 \r
1000 REASS:\r
1001         PUSHJ PDP,CTEXT         ;GET DEVICE NAME\r
1002         JUMPE TAC,NOTENF        ;NULL NAME?\r
1003         MOVE UUO,TAC1           ;SAVE IT IN UUO\r
1004         PUSHJ PDP,DECIN1        ;GET NEW JOB NUMBER\r
1005         JRST NOTENF             ;NONE SPECIFIED, DOESN'T RETURN IF ERROR\r
1006         JRST COMERA             ;ILLEGAL CHARACTER\r
1007         PUSH PDP,TAC1           ;PUT JOB NUMBER ON STACK, DEVICE\r
1008         MOVE TAC1,UUO           ;NAME IN TAC1\r
1009         SETZM UUO               ;SET COMMAND SWITCH\r
1010 \f\r
1011 ;ROUTINE COMMON TO REASSIGN UUO AND COMMAND\r
1012 \r
1013 EXTERNAL JBTSTS,PJOBN,JOBFDV\r
1014 \r
1015 REASS1: EXCH ITEM,(PDP)         ;NEW JOB NO. IN ITEM\r
1016         CAILE ITEM,JOBN         ;IS JOB NUMBER OUT OF RANGE\r
1017         JRST REASE2             ;YES, DO NOT REASSIGN\r
1018         MOVE TAC,JBTSTS(ITEM)   ;NEW JOB STATUS\r
1019         EXCH ITEM,(PDP)         ;RESTORE ITEM AND STACK\r
1020         TLNN TAC,JNA            ;DOES NEW JOB EXIST?\r
1021         JRST REASE1             ;NO.\r
1022         MOVE TAC,TAC1\r
1023         PUSHJ PDP,DEVSRC        ;SEARCH FOR DEV\r
1024         JRST REASE2             ;NOT FOUND\r
1025         LDB TAC,PJOBN\r
1026         CAME TAC,ITEM           ;ASSIGNED TO THIS JOB\r
1027         JRST REASE3             ;NO\r
1028         MOVE TAC,DEVMOD(DEVDAT)\r
1029 \r
1030         TLNE TAC,DVTTY          ;IS IT A TTY?\r
1031         JRST REASE6             ;YES. CAN'T BE REASSIGNED\r
1032         TRNN TAC,ASSPRG         ;IS DEVICE INITED?\r
1033         JRST REASS3             ;NO.\r
1034         JUMPN UUO,REASS4        ;YES. COMMAND LEVEL?\r
1035         HRL DEVDAT,(PDP)        ;YES. SCHEDULE RELEASE\r
1036         MOVEM DEVDAT,JOBFDV(JDAT)\r
1037         POP PDP,TAC1\r
1038         MOVE DEVDAT,-2(PDP)\r
1039         MOVSI TAC1,TTYRNC       ;SET TTYRNC SO JOB WILL RUN\r
1040         IORM TAC1,-1(PDP)\r
1041         JSP TAC1,MSTART\r
1042         JSP TAC,MONSTR\r
1043         HLRZ TAC,JOBFDV(JDAT)\r
1044         PUSH PDP,TAC\r
1045         HRRZ DEVDAT,JOBFDV(JDAT)\r
1046         MOVE ITEM,JOB\r
1047         SETOM UUO               ;SET FLAG TO STOP JOB\r
1048 REASS4: HRRZ DSER,DEVSER(DEVDAT)\r
1049         HRRZM DEVDAT,JOBFDV(JDAT)\r
1050         MOVE UCHN,USRHCU\r
1051 \f\r
1052 REASS2: MOVE DEVDAT,USRJDA(UCHN)        ;GET XWD UUO BITS,DDB ADDRESS\r
1053         HRRZ TAC,JOBFDV(JDAT)   ;GET ADDR. OF DDB SAVED BY COMMAND\r
1054         PUSH PDP,UCHN           ;SAVE USER CHANNEL\r
1055         CAIN TAC,(DEVDAT)       ;IS CHOSEN DEVICE ON THHS CHANNEL?\r
1056         PUSHJ PDP,RELEA5        ;YES, RELEASE DEVICE\r
1057         POP PDP,UCHN\r
1058         SOJGE UCHN,REASS2\r
1059         MOVE DEVDAT,JOBFDV(JDAT)\r
1060         MOVE ITEM,JOB           ;CURRENT JOB NUMBER\r
1061 REASS3: MOVEI TAC,ASSCON        ;ASSIGN IT BY CONSOLE\r
1062         IORM TAC,DEVMOD(DEVDAT)\r
1063         EXCH ITEM,(PDP)\r
1064         DPB ITEM,PJOBN          ;PUT IN NEW JOB NUMBER\r
1065         POP PDP,ITEM\r
1066         JUMPL UUO,ESTOP\r
1067         POPJ PDP,\r
1068 \r
1069 REASE1: POP PDP,TAC\r
1070         JUMPE UUO,ATT4          ;JOB NEVER WAS INITIATED\r
1071 REASE4: SETZM @UUO              ;CLEAR C(AC)\r
1072         POPJ PDP,\r
1073 \r
1074 REASE2: MOVEI TAC,NOTDEV        ;NO SUCH DEVICE\r
1075 REASE5: POP PDP,TAC1\r
1076         JUMPE UUO,(TAC)\r
1077         AOJA UUO,REASE4\r
1078 \r
1079 REASE3: MOVEI TAC,DEAER2        ;WASN'T ASSIGNED\r
1080         JRST REASE5\r
1081 \r
1082 REASE6: MOVEI TAC,REASE7\r
1083         JRST REASE5\r
1084 REASE7: MOVE TAC1,DEVNAM(DEVDAT)\r
1085         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
1086         PUSHJ PDP,PRNAME\r
1087         JSP TAC,ERRMES\r
1088         ASCIZ / CAN'T BE REASSIGNED\r
1089 /\r
1090 >\r
1091 \f\r
1092 INTERNAL FTATTACH\r
1093 IFN FTATTACH,<\r
1094 \r
1095 ;"ATTACH DEVNAME" -ATTACHES A PREVIOUSLY PARTITIONED DEVICE\r
1096 ;       NOTE-MUST BE LOGGED IN UNDER [1,1] TO DO THIS\r
1097 ; "ATTACH N [PROJ.,PROG.]" - ATTACH CONSOLE TO JOB N\r
1098 ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -2(PDP)\r
1099 ;BY THE COMMAND DECODER\r
1100 \r
1101 INTERNAL ATTACH\r
1102 EXTERNAL TTYATT,JOBN,TTYFND\r
1103 \r
1104 ATTACH: IFE FTTTYSER,<\r
1105         MOVE AC2,TAC            ;SAVE BYTE POINTER>\r
1106         PUSHJ PDP,DECIN         ;GET JOB NO.\r
1107         JRST NOTENF             ;NOT A NUMBER OR NONE SPECIFIEED\r
1108 IFN     FTLOGIN, <\r
1109         JRST DEVATT             ;WANTS TO ATTACH A DEVICE\r
1110 >\r
1111 \r
1112 IFE     FTLOGIN, <\r
1113         JRST    ATT1\r
1114 >\r
1115         SKIPE TAC1              ;0 IS ILLEGAL\r
1116         CAIL TAC1, JOBN         ;IS JOB NUMBER TOO BIG?\r
1117         JRST ATT1               ;ILLEGAL JOB NUMBER\r
1118         MOVSI T1,JNA            ;HAS THIS JOB NO BEEN ASSIGNED?\r
1119         TDNN T1,JBTSTS(TAC1)\r
1120         JRST ATT4               ;NO, PRINT ERROR\r
1121 INTERNAL FTLOGIN\r
1122 IFN FTLOGIN,<\r
1123         MOVE IOS,TAC1           ;SAVE JOB NO.\r
1124         PUSHJ PDP,PJPGNO        ;GET PROJ,-PROG. NOS. ARG(IF ERROR, PDP SUP LEVEL\r
1125                                 ; OFF 1, PRINT ERROR, AND DO NOT RETRY HERE\r
1126 \r
1127         MOVEM IOS,TAC1          ;RESTORE\r
1128         SKIPN AC2               ;DID USER TYPE IN A PROG,PROG # IN []'S?\r
1129         MOVE AC2,PRJPRG(ITEM)   ;NO. ASSUME PROJ,PROG NUMBER FOR CURRENT JOB\r
1130                                 ; SO USER CAN AVOID TYPEING PROGPROG NO. IF  DOING\r
1131                                 ; FROM 1 JOB TO ANOTHER UNDER SAME PROJ,PROG\r
1132         CAME AC2,PRJPRG(TAC1)   ;IS THIS THE SAME PERSON WHO DETACHED FROM THIS JOB NUMBER?\r
1133         JRST ATT3               ;NO-ERROR\r
1134                                 ; YES\r
1135 >\r
1136         MOVE ITEM,TAC1  ;JOB NUMBER TO ITEM\r
1137         PUSHJ PDP,TTYATT        ;NO, ATTACH TTY\r
1138         JRST ATT2               ;ERROR CAN'T ATTACH\r
1139         MOVEM DEVDAT,-2(PDP)    ;CHANGE DEV DATA BLOCK ADDRESS\r
1140 IFN FTTTYSER,<\r
1141         EXTERN TSETBF\r
1142         PUSHJ PDP,TSETBF        ;INITIALIZE TTY INPUT BUFFER\r
1143 >\r
1144         JRST TTYFND             ;ATTACHED, GO SET UP OUTP. BYTE PTR.\r
1145 \f\r
1146 INTERNAL FTLOGIN\r
1147 IFN FTLOGIN,<\r
1148 DEVATT: IFE FTTTYSER,<\r
1149         MOVE TAC,AC2            ;RESTORE BYTE POINTER>\r
1150         PUSHJ PDP,CTEXT1                ;GET DEVICE ARGUMENT\r
1151         JFCL                    ;SHOULD NEVER RETURN\r
1152         MOVE T,PRJPRG(ITEM)     ;GET PROJ.-PROG. NOS.\r
1153         CAME T,SYSPP            ;PRJPRG = [1,1]?\r
1154         JRST ATT5               ;NO - ERROR\r
1155         MOVE TAC,TAC1           ;YES-SET UP DEVICE NAME\r
1156         PUSH PDP,DEVDAT         ;SAVE DDB FOR THIS TTY\r
1157         PUSHJ PDP,DEVSRC        ;SEARCH FOR DEVICE\r
1158         JRST TEMP1              ;NOT FOUND\r
1159         LDB T,PJOBN             ;GET JOB NUMBER\r
1160         JUMPN T,ATT6            ;IS IT = 0?\r
1161         DPB ITEM,PJOBN          ;SET JOB NUMBER\r
1162         MOVE TAC,DEVMOD(DEVDAT); CHECK TO SEE IF THIS IS A TTY\r
1163         LDB TAC1,PUNIT          ;\r
1164         TLNE TAC,DVTTY          ;IS IT A TTY?\r
1165         HRRM DEVDAT,TTYTAB(TAC1)        ;SET TRANS TABLE TO POINT TO DDB\r
1166         POP PDP,DEVDAT          ;\r
1167         POPJ PDP,               ;RETURN\r
1168 >\r
1169 \f\r
1170 ATT1:   JSP TAC,ERRMES\r
1171         ASCIZ /ILLEGAL JOB NUMBER\r
1172 /\r
1173 ATT2:   MOVE TAC1,DEVNAM(DEVDAT)        ;[PRINT PHYSICAL NAME\r
1174         MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
1175         PUSHJ PDP,PRNAME\r
1176         JSP TAC,ERRMES\r
1177         ASCIZ / ALREADY ATTACHED\r
1178 /\r
1179 ATT3:   JSP TAC,ERRMES\r
1180         ASCIZ /CAN'T ATT TO JOB\r
1181 /\r
1182 ATT4:   JSP TAC,ERRMES\r
1183         ASCIZ /NOT A JOB\r
1184 /\r
1185 ATT5:   JSP TAC,ERRMES\r
1186         ASCIZ /CAN'T ATT DEV\r
1187 /\r
1188 ATT6:   POP PDP,DEVDAT\r
1189         JSP TAC,ERRMES\r
1190         ASCIZ /WASN'T DET\r
1191 /\r
1192 >\r
1193 \f\r
1194 INTERNAL FTATTACH\r
1195 IFN FTATTACH,<\r
1196 \r
1197 ;"DETACH" - DETACH CONSOLE FROM JOB\r
1198 ;"DETACH DEVNAM" - DETACHES DEVICE FROM THE SYSTEM SOFTWAREWISE\r
1199 ;       NOTE - MUST BE LOGGED IN UNDER [1,1] TO DO THIS\r
1200 \r
1201 EXTERNAL TTYDET\r
1202 INTERNAL FTLOGIN\r
1203 \r
1204 IFE FTLOGIN,<\r
1205 DETACH: JRST TTYDET             ;GO DETACH TTY\r
1206 >\r
1207 \r
1208 IFN FTLOGIN,<\r
1209 EXTERNAL PRJPRG,SYSPP,PUNIT,TTYTAB,PJOBN\r
1210 DETACH: PUSHJ PDP,CTEXT1                ;GET ARGUMENT\r
1211         JUMPE TAC1,TTYDET       ;ONLY "DET" TYPED\r
1212         MOVE T,PRJPRG(ITEM)     ;GET PROJ.-PROG. NUMBER\r
1213         CAME T,SYSPP            ;PRJPRG = [1,1]?\r
1214         JRST LOGER1             ;NO-PRINT ERROR MSG.\r
1215         MOVE TAC,TAC1           ;YES-SET UP DEVICE NAME\r
1216         PUSH PDP,DEVDAT         ;SAVE TTY DDB\r
1217         PUSHJ PDP,DEVSRC        ;SEARCH FOR DEVICE\r
1218         JRST TEMP1              ;DEVICE NOT FOUND\r
1219         MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS DSK\r
1220         TLNE TAC,DVDSK          ;IS IT THE DSK?\r
1221         JRST TEMP1              ;YES-PRINT ERROR MSG.\r
1222         MOVEI TAC1,ASSCON       ;FOUND-SET UP ASSIGNED BY CONSOLE\r
1223         PUSHJ PDP,ASSASG        ;TRY TO ASSIGN\r
1224         JRST TEMP2              ;CAN'T ASSIGN\r
1225         TLNE DEVDAT,SYSDEV      ;IS THIS SYSTEM DEVICE?\r
1226         JRST TEMP1              ;YES-PRINT ERROR MSG.\r
1227         XOR T,T                 ;NO-SET TO ZERO\r
1228         DPB T,PJOBN             ;SET JOB NO. TO NULL JOB\r
1229         MOVE TAC,DEVMOD(DEVDAT) ;CHECK TO SEE IF THIS IS A TTY\r
1230         TLNN TAC,DVTTY          ;IS IT A TTY?\r
1231         JRST .+4                ;NO-GO AHEAD\r
1232         LDB TAC,PUNIT           ;YES-SET UPO FOR SCNSER\r
1233         MOVEI TAC1,-1           ;SET LEFT HALVE TO TTYTAB TO -1\r
1234         HRRM TAC1,TTYTAB(TAC)   ;SO THAT SCNSER CHECKS FOR THIS\r
1235         POP PDP,DEVDAT          ;RESTORE TTY DDB\r
1236         POPJ PDP,               ;SUCCESSFUL RETURN\r
1237 \f\r
1238 TEMP1:  POP PDP,DEVDAT          ;RESTORE TTY DDB\r
1239         JRST DEAER1             ;PRINT ERROR MSG. AND RETURN\r
1240 TEMP2:\r
1241 IFE FTTTYSER,<  POP PDP,DEVDAT          ;RESTORE TTY DDB\r
1242         JRST ASSER1+1           ;PRINT ERROR MSG. AND RETURN\r
1243 >\r
1244 IFN FTTTYSER,<\r
1245         JRST ASSER1\r
1246 >\r
1247 LOGER1: JSP TAC,ERRMES\r
1248         ASCIZ /CAN'T DET DEV\r
1249 /\r
1250 \r
1251 >>      ;CLOSE BOTH FTLOGIN AND FTATTACH CONDITIONALS.\r
1252 \r
1253 ;"DAYTIME" - PRINT TIME OF DAY\r
1254 \r
1255 EXTERNAL TIME,THSDAT,MONTAB,JIFMIN\r
1256 \r
1257 DAYTIM:\r
1258 IFN     FTLOGIN, <\r
1259         JUMPE ITEM,DAYTM1\r
1260         PUSHJ PDP,DECIN         ;WAS AN ARGUMENT TYPED?\r
1261         JRST DAYTM1             ;NO, PRINT TIME\r
1262         JRST COMERA             ;ERROR\r
1263         HLRZ TAC,PRJPRG(ITEM)   ;YES\r
1264         CAIE TAC,1              ;IS THIS PROJECT 1?\r
1265         JRST DAYTM1             ;NO, PRINT TIME OF DAY ANYWAY(IGNORE ARG)\r
1266         MOVE TAC,TAC1           ;YES, RESET TIME ACCORDING TO ARGUMENT\r
1267         IDIVI TAC,^D100\r
1268         IDIVI TAC,^D60          ;\r
1269         ADD TAC,TAC1            ;COMPUTE MINUTES\r
1270         IMULI TAC,JIFMIN        ;COMPUTE JIFFIES\r
1271         MOVEM TAC,TIME          ;AND STORE\r
1272         POPJ PDP,\r
1273 >\r
1274 DAYTM1: MOVE TAC,THSDAT         ;PRINT TODAY'S DATE\r
1275         IDIVI TAC,^D31\r
1276         EXCH TAC,TAC1           ;YEAR AND MONTH IN TAC1\r
1277         PUSHJ PDP,DECP1         ;ADD 1 TO DAY(IN TAC) AND PRINT DECIMAL\r
1278         MOVEI TAC,0\r
1279         DIVI TAC,^D12\r
1280         EXCH TAC,TAC1\r
1281         MOVE TAC,MONTAB(TAC)    ;MONTH\r
1282         DPB TAC,[POINT 21,DAMESS,27]\r
1283         MOVEI TAC,DAMESS\r
1284         PUSHJ PDP,CONMES        ;PRINT DAY\r
1285         MOVEI TAC,^D64(TAC1)\r
1286         PUSHJ PDP,RADX10        ;PRINT YEAR\r
1287         PUSHJ PDP,PRSPC\r
1288         MOVE TAC,TIME           ;PRINT TIME OF DAY\r
1289         JRST PRTIM1\r
1290 \f\r
1291 INTERNAL FTTIME\r
1292 IFN FTTIME,<\r
1293 ;"TIME (JOB NO.)" - PRINT TOTAL AND INCREMENTAL RUNNING TIME FOR A JOB\r
1294 ;FOLLOWED BY KILO-CORE TICKS\r
1295 ;"TIME 0" IMPLIES RUNTIME FOR NULL JOB AND THE TOTAL TIME SPENT SHUFFLING USERS\r
1296 ;       IF NO JOB NO. GIVEN-TIME WILL BE FOR CURRENTLY LOGGGED IN JOB NO.\r
1297 \r
1298 EXTERNAL RTIME,TTIME,SHFWRD,WDPJIF,JOBN,JBTSTS,CLRWRD,LSTWRD\r
1299 \r
1300 RUNTIM: PUSHJ PDP,DECIN         ;GETJOB NO. ARG.\r
1301         JRST RUN1               ;NO ARG. GIVEN - LOGGED IN?\r
1302         JRST COMERA             ;ILLEGAL DECIMAL CHARACTER RETURN\r
1303         JUMPE TAC1,RUN2         ;RUNTIME 0 GIVEN\r
1304         CAIL TAC1,JOBN          ;JOB NO. TO BIG?\r
1305         JRST ATT1               ;YES,ILLEGAL JOB. NO.\r
1306         MOVE TAC,TTIME(TAC1)    ;TIME SINCE LAST LOGGIN\r
1307         JRST PRTIME             ;PRINT AND RETURN\r
1308 \r
1309 RUN2:   PUSHJ PDP,INLMES        ;PRINT\r
1310 \r
1311         ASCIZ /SHFL /           ;"SHUFFLING "\r
1312         MOVE TAC,SHFWRD         ;NO. WORDS SHUFFLED\r
1313         IDIVI TAC,WDPJIF        ;NO.WORDS/JIFFY USING BLT\r
1314         PUSHJ PDP,PRTIME        ;PRINT SHUFFLE TIME\r
1315         PUSHJ   PDP,INLMES\r
1316         ASCIZ   /ZCOR /\r
1317         MOVE    TAC,CLRWRD\r
1318         IDIVI   TAC,WDPJIF\r
1319         PUSHJ   PDP,PRTIME      ;PRINT TIME SPENT CLEARING CORE\r
1320         PUSHJ   PDP,INLMES\r
1321         ASCIZ   /LOST /\r
1322         MOVE    TAC,LSTWRD\r
1323         PUSHJ   PDP,PRTIME      ;PRINT TME SPENT "LOST" RUNNING NULL JOB\r
1324         PUSHJ PDP,INLMES        ;PRINT\r
1325         ASCIZ /NULL /           ;"NULL TIME "\r
1326         MOVE TAC,TTIME          ;PRINT NULL JOB RUNNING TIME\r
1327         PUSHJ PDP,PRTIME        ;\r
1328         PUSHJ PDP,INLMES        ;PRINT TOTAL SYSTEM UP TIME\r
1329         ASCIZ /UP   /\r
1330         MOVE TAC,UPTIME\r
1331         JRST PRTIME             ;AND RETURN\r
1332 \f\r
1333 RUN1:\r
1334 IFE FTLOGIN,<\r
1335         MOVEI TAC,0             ;GET SET TO CLEAR INCREMENTAL RUN TIME\r
1336 >\r
1337 IFN FTLOGIN,<\r
1338         MOVSI TAC,JLOG          ;IS JOB LOGGED IN?\r
1339         TDZN TAC,JBTSTS(ITEM)   ;TEST JOB STATUS BITS AND CLEAR TAC ALWAYS\r
1340         JRST NOTENF             ;NO, NEED MORE ARGUMENTS\r
1341 >\r
1342         EXCH TAC,RTIME(ITEM)    ;GET CURRENT INCR. TIME AND CLEAR\r
1343         PUSHJ PDP,PRTIME        ;PRINT TIME SINCE LAST TIME COMM.\r
1344 PRTTIM: MOVE TAC,TTIME(ITEM)    ;GET TOTAL ACCUMULATED TIME\r
1345 IFN FTKCT,<\r
1346         PUSHJ PDP,PRTIME\r
1347         EXTERN JBTKCT\r
1348         PUSHJ PDP,INLMES        ;PRINT "K*CPUSEG=\r
1349         ASCIZ /KILO-CORE-SEC=/\r
1350         MOVE TAC,JBTKCT(ITEM)   ;PRODUCT OF NO. OF K CORE* NO. OF JIFFIES RUN\r
1351         IDIVI TAC,JIFSEC        ;AT THAT SIZE, CONVERT TO KILO CORE SECONDS\r
1352         PUSHJ PDP,RADX10        ;AND PRINT IN DECIMAL\r
1353         JRST CRLF               ;PRINT IRLF\r
1354 >\r
1355 IFE FTKCT,<\r
1356         JRST PRTIME             ;PRINT IT AND RETURN\r
1357 >\r
1358 >\r
1359 \f\r
1360 ;ROUTINE TO LET TTY TALK TO ANY OTHER RING OF TTYS\r
1361 ;       "TALK TTYN"\r
1362 ;       TTYN NEED NEVER HAVE BEEN TYPED ON BEFORE\r
1363 \r
1364 INTERNAL FTTALK\r
1365 \r
1366 IFN FTTALK,<\r
1367 EXTERNAL TTYTLK\r
1368 \r
1369 TALK:   PUSHJ PDP,CTEXT1                ;GET ARGUMENT\r
1370         JUMPE TAC1,TALK2        ;NONE SPECIFIED\r
1371         MOVE TAC,TAC1\r
1372         PUSHJ PDP,DEVSRC        ;SEARCH FOR DEVICE\r
1373         JRST TALK1              ;DEVSRC SHOULD FIND A FREE TTY DDB\r
1374                                 ; EVEN IF TTY NEVER TYPED ON YET\r
1375         PUSHJ PDP,TTYTLK\r
1376         JRST TALK1\r
1377         POPJ PDP,\r
1378 \r
1379 TALK2:  MOVSI ITEM,NOINCK       ;SET FLAGS SO RESPONSE WILL PRINT\r
1380         MOVEM ITEM,-1(PDP)\r
1381         JRST NOTENF\r
1382 \r
1383 TALK1:  MOVE    DEVDAT,-2(PDP)  ;RESTORE TTY DDB\r
1384         MOVSI ITEM,NOINCK       ;SET FLAGS TO PRINT RESPONSE\r
1385         MOVEM ITEM,-1(PDP)\r
1386         JSP TAC,ERRMES\r
1387         ASCIZ /BUSY\r
1388 /\r
1389 >\r
1390 \f\r
1391 INTERNAL FTEXAMINE\r
1392 \r
1393 IFN FTEXAMINE,<\r
1394 \r
1395 ;"EXAMINE LOC" - LOOKS A CONTENTS OF LOC AND PRINTS IN OCTAL\r
1396 ;IF LOC IS MISSING, NEXT LOC IS PRINTED\r
1397 ;IF PREVIOUS WAS E COMMAND, SAME LOC IF PREVIOUS WAS D COMMAND\r
1398 ;TAB. IS PRINTED INSTEAD OF CRLF(LIKE DDT)\r
1399 \r
1400 EXTERNAL TPOPJ,JOBPC\r
1401 \r
1402 ECOM:   SKIPGE JOBEXM(JDAT)     ;WAS PREVIOUS D OR E COMMAND. A D COMMAND?\r
1403         AOS JOBEXM(JDAT)        ;NO, IT WAS AN  E. INCREMENT IN CASE HE TYPES NO ARG\r
1404         HRROS JOBEXM(JDAT)      ;YES, FLAG THAT E HAPPENED LAST(LH=-1)\r
1405         PUSHJ PDP,OCTIN         ;GET OCTAL LOCATION\r
1406         SKIPA TAC,JOBEXM(JDAT)  ;NONE SPECIFIED, USE LAST LOC OF D OR NEXT OF E\r
1407         JRST COMERA             ;ILLEGAL CHARACTER\r
1408         PUSHJ PDP,DEAT          ;CHECK FOR AC REFERENCE AND STORE JOBEXM\r
1409         HRRZ UUO,TAC1           ;IGNORE LH\r
1410         HRLI UUO,PROG   ;SET TO RELOCATE\r
1411         PUSHJ PDP,GETWRD        ;GET WORD FROM LOW OR HIGH SEG\r
1412         JRST ECOMA              ;ERROR, OUT OF BOUNDS\r
1413         PUSH PDP,TAC            ;SAVE CONTENTS OF LOC TO BE PRINTED\r
1414         HRRZ TAC,JOBEXM(JDAT)   ;PRINT LOC BEING EXAMINED\r
1415         PUSHJ PDP,OCTPNT\r
1416         PUSHJ PDP,INLMES        ;PRINT SLASH TAB\r
1417         ASCIZ */        *\r
1418         HLRZ TAC,(PDP)          ;PRINT LEFT HALF\r
1419         PUSHJ PDP,OCTPNT\r
1420         PUSHJ PDP,INLMES        ;PRINT SPACE\r
1421         ASCIZ / /\r
1422         HRRZ TAC,(PDP)          ;PRINT RIGHT HALF\r
1423         PUSHJ PDP,OCTPNT\r
1424         PUSHJ PDP,INLMES        ;PRINT FINAL TAB\r
1425         ASCIZ / /\r
1426         JRST TPOPJ              ;POP PDP,TAC,POPJ PDP,\r
1427 \f\r
1428 ;"DEPOSIT LH RH LOC" - DEPOSITS XWD LH,RH IN LOCATION LOC\r
1429 ;IF LOC IS MISSING. ASSUME NEXT LOC IF PREVIOUS D, SAME LOC IF PREVIOUS E\r
1430 \r
1431 EXTERNAL JOBEXM,JOBPFI\r
1432 \r
1433 DCOM:   PUSHJ PDP,OCTIN         ;GET LH\r
1434         JRST NOTENF             ;NOT ENOUGH ARGUMENTS\r
1435         JRST COMERA             ;ILLEGAL CHARACTER\r
1436         HRLM TAC1,IOS           ;SAVE LH\r
1437         PUSHJ PDP,OCTIN         ;GET RH\r
1438         JRST NOTENF             ;NOT ENOUGH ARGUMENTS\r
1439         JRST COMERA             ;ILLEGAL CHARACTER\r
1440         HRRM TAC1,IOS           ;SVE RH\r
1441         SKIPL JOBEXM(JDAT)      ;WAS PREVIOUS D OR E AN E COMMAND?\r
1442                         ; LH=-1 IF E, LH=0 IF D\r
1443         AOS JOBEXM(JDAT)        ;NO, INCREMENT IN CASE USER TYPED NOT THIRD ARG\r
1444                         ; FOR SUCCESSIVE D'S\r
1445         HRRZS JOBEXM(JDAT)      ;FLAG THAT A D WASDONE LAST(LH=0)\r
1446         PUSHJ PDP,OCTIN         ;GET LOC\r
1447         SKIPA TAC1,JOBEXM(JDAT) ;NOT SPECIFIED, USE LAST OF E OR NEXT OF D\r
1448         JRST COMERA             ;ILLEGAL CHARACTER\r
1449 IFN FT2REL,<\r
1450         EXTERN CHKMED\r
1451         PUSHJ PDP,CHKMED        ;CHECK TO SEE IF HIGH SEG IS SHARABLE\r
1452                                 ; IF YES, SET USER-MODE WRITE PROTECT (UWP) ON\r
1453                                 ; FOR THIS USER, AND SET MEDDLE FOR THIS USER\r
1454                                 ; SO HE CANNOT TURN UWP OFF\r
1455 >\r
1456         TRNN TAC1,777760        ;IN USER ACS\r
1457         JRST DCOM1              ;YES\r
1458         HLRZ TAC,PROG           ;GET PROTECTION\r
1459         CAILE TAC1,JOBPFI       ;NO, GREATER THAN HIGHEST LOC, PROTECTED\r
1460                                 ; FROM IO IN JOB DATA AREA?\r
1461         CAMLE TAC1,TAC          ;IN BOUNDS?\r
1462         JRST DCOMA              ;NO\r
1463 DCOM1:  PUSHJ PDP,DEAT          ;CHECK FOR AC REFERENCE\r
1464         HRLI TAC1,PROG          ;SET FOR RELOCATION\r
1465         MOVEM IOS,@TAC1 \r
1466         POPJ PDP,\r
1467 \f\r
1468 DEAT:   TLZ TAC1,-1             ;CLEAR LH IN CASE THIS IS A SUCCESSIVE E WITH NO ARG\r
1469         HRRM TAC1,JOBEXM(JDAT)  ;STORE FOR NEXT TIME, DO NOT TOUCH LH(D OR E LAST)\r
1470                                 ; YES, WAS JOB STOPPED IN USER MODE?\r
1471         CAIL TAC1,20            ;IS IT AN AC?\r
1472         POPJ PDP,               ;NO\r
1473         MOVE TAC,JOBPC(JDAT)\r
1474         TLNE TAC,USRMOD         ;USER MODE?\r
1475         ADDI TAC1,20            ;YES USER ACS ARE AT 20 INSTEAD OF 0\r
1476 \r
1477 DCOMA:\r
1478 IFN FT2REL,<\r
1479         EXTERN HGHDEP\r
1480         PUSHJ PDP,HGHDEP        ;IS IT IN BOUNDS AND ALLOWED IN HIGH SEG?\r
1481         JRST ECOMA              ;NO, PRINT "OUT OF BOUNDS"\r
1482         POPJ PDP,               ;YES, IOS DEPOSITED, AND JOBEXM UPDATED\r
1483 >\r
1484 ECOMA:  JSP TAC,ERRMES  ;OUT OF BOUNDS\r
1485         ASCIZ /OUT OF BOUNDS\r
1486 /\r
1487 \r
1488 >\r
1489 \f\r
1490 IFN FTLOGIN,<\r
1491 ;"SCHEDULE OCTN" - SETS RH OF STATES TO OCTN, IF TYPED FROM\r
1492 ; THE OPERATOR CONSOLE (C(DEVOPR)), OTHERWISE ILLEGAL\r
1493 ;"SCHEDULE" WITH NO ARGUMENTS TYPES OUT RH OF STATES, LEGAL FOR ALL.\r
1494 \r
1495         EXTERN DEVOPR,STATES,OCTPNT\r
1496 \r
1497 SKEDUL: PUSHJ   PDP,OCTIN       ;GET THE ARGUMENT IF ANY\r
1498         JRST    SKED1           ;NO ARGUMENT\r
1499         JRST    COMERA          ;BAD SYNTAX IN OCTAL NUMBER\r
1500         MOVE    TAC,DEVNAM(DEVDAT) ;AN ARGUMENT. IS THIS THE OPR?\r
1501         CAME    TAC,DEVOPR\r
1502         JRST    COMERR          ;NO, THIS IS ILLEGAL, THEN.\r
1503         HRRM    TAC1,STATES     ;YES. STORE ARGUMENT IN RH OF STATES\r
1504         POPJ    PDP,0           ;RETURN\r
1505 \r
1506 SKED1:  HRRZ    TAC,STATES      ;SCHEDULE WITH NO ARGUMENTS.\r
1507         PUSHJ   PDP,OCTPNT      ;PRINT RH OF STATES.\r
1508         JRST    CRLF            ;AND RETURN WITH A CRLF\r
1509 >\r
1510 ;"BLANK" OR NO ALPHA NUMERIC BEFORE BREAK CHAR COMMAND\r
1511 ;DISPATCHED TO LIKE ANY OTHER COMMAND(0 IN COMMAND TABLE)\r
1512 \r
1513 CBLANK:\r
1514 IFE FTTTYSER,<\r
1515         LDB     TEM,TAC         ;GET BREAK CHARACTER\r
1516         CAIE    TEM,15          ;IS IT A CR\r
1517 >\r
1518 IFN FTTTYSER,<\r
1519         CAIE    TEM,12          ;WAS BREAK A LF\r
1520 >\r
1521         CAIN TEM,";"            ;NO, IS IT SEMI COLON(MONITOR COMMENT)\r
1522         POPJ PDP,               ;YES, IGNORE\r
1523                                 ; FALL IN UNKNOWN COMMAND\r
1524 \r
1525 ;COMMAND NOT IN COMMAND DICECTORY\r
1526 \r
1527 NOCOM:  JRST COMERR     ;NO, APPEND ? TO WHAT HE TYPED IN\r
1528 \f\r
1529 IFN FTFINISH,<\r
1530 ; "FINISH DEVICE" - CLOSES,RELEASE AND DESASSIGNS DEVICE\r
1531 ;JOB MUST HAVE CORE\r
1532 \r
1533         EXTERNAL USRJDA,PUUOAC,JOB,USRHCU,JOBFDV,SYSTAP\r
1534 CFINI:  PUSHJ PDP,CTEXT1        ;GET DEVICE NAME\r
1535         JUMPE TAC1,NOTENF       ;NOT ENOUGH ARG. IF NONE\r
1536         SKIPA TAC,TAC1          ;SEARCH FOR SIXBIT DEVICE NAME\r
1537 CFINS:  MOVE TAC,SYSTAP         ;HERE ON CONTROL C ON SYSTEM TAPE USER\r
1538                                 ; DO A FINISH SYS COMMAND FOR HIM\r
1539         PUSHJ PDP,DEVSRC        \r
1540         JRST NOTDEV             ;PRINT NOT A DEVICE\r
1541         HRRZM DEVDAT,JOBFDV(JDAT)       ;STORE DDB ADR. IN JOB DATA AREA\r
1542         MOVE DEVDAT,-2(PDP)\r
1543         JSP TAC1, MSTART        ;SETUP MONITOR JOB AND RETURN\r
1544                                 ; RETURN HERE AT UUO LEVEL WHEN SCHEDULED\r
1545         JSP TAC,MONSTR          ;SETUP ACS,PROG,JDAT,PDP\r
1546         MOVE UCHN,USRHCU        ;HIGHEST USER IO CHANNEL IN USE\r
1547 FDV1:   HRRZ DEVDAT,USRJDA(UCHN)        ;GET NEXT DEVICE\r
1548         MOVSI UUO,071000        ;SETUP RELEASE UUO\r
1549         DPB UCHN,PUUOAC         ;WITH CHANNEL NO.\r
1550         PUSH PDP,UCHN\r
1551         CAMN DEVDAT,JOBFDV(JDAT)        ;IS THIS DEV. THE ONE TO RELEASE?\r
1552         XCT UUO                 ;YES, RELEASE IT(AND CLOSE)\r
1553         POP PDP,UCHN\r
1554         SOJGE UCHN,FDV1         ;FINISHED?\r
1555         MOVE ITEM,JOB           ;GET JOB NUMBER\r
1556         MOVE DEVDAT,JOBFDV(JDAT)        ;RESET DEVDAT\r
1557         PUSHJ PDP,DEASG         ;DEASSIGN DEVICE\r
1558         JFCL                    ;IGNORE IF NOT ASSIGNED BY CONSOLE\r
1559         JRST ESTOP              ;STOP JOB SO HE CANNOT CONTINUE\r
1560 >\r
1561 \f\r
1562 IFN FTTIME,<\r
1563 ;"RESOURCES" - PRINT OUT AVAILABLE DEVICES AND FREE BLOCKS ON THE DISK\r
1564 \r
1565 EXTERNAL DEVLST\r
1566 \r
1567 FREDEV:\r
1568 IFN     FTDISK, <\r
1569 EXTERNAL        SATENT,SATXWD,WLBIT,SENTSZ,NUMBIT\r
1570 \r
1571         XOR TAC,TAC             ;INITIALIZE COUNTER\r
1572         HLRE    T2,SATXWD       ;SET INDEX WITH NUMBER OF SAT BLOCKS IN EXISTENCE,\r
1573         MOVNS   T2\r
1574         HRRI T1,SATENT          ;GET SATENT ENTRY POINTER\r
1575 LOP05:  HRRZ TAC1,0(T1)         ;GET VALUE\r
1576         TRNE    TAC1,WLBIT      ;IS THIS SPACE WRITE PROTECTED?\r
1577         JRST    LOP06           ;YES, NO FREE BLOCKS IN THE SAT BLOCK.\r
1578         ADDI    TAC,NUMBIT      ;NO, ADD THE FOLLOWING QUANTITY IN THIS SAT\r
1579         SUB     TAC,TAC1        ; RUNNING TOTAL: (TOTAL BLOCKS IN THIS SAT\r
1580                                 ; BLOCK) - (BLOCKS ALREADY IN USE).\r
1581 LOP06:  ADDI T1,SENTSZ          ;BUMP POINTER\r
1582         SOJN T2,LOP05           ;DECREMENT INDEX\r
1583         PUSHJ PDP,RADX10        ;CONVERT TO DECIMAL\r
1584         PUSHJ   PDP,INLMES      ;PRINT\r
1585         ASCIZ /. BLKS/\r
1586 >\r
1587 \r
1588         HRLZ T,DEVLST           ;GET DDB POINTER\r
1589         MOVEI AC2,0             ;SET DEVICE NAME 0 FOR FIRST COMPARE\r
1590 LOP01:  MOVE T1,DEVMOD(T)       ;DEVICE CHARACTERISTICS\r
1591         TRNN T1,ASSCON!ASSPRG   ;DEVICE ASSIGNED BY CONSOLE OR PROGRAM?\r
1592         TLNE T1,DVTTY!DVDSK     ;NO, IS IT A TTY OR DSK?\r
1593         JRST LOP02              ;YES DO NOT PRINT\r
1594 IFE FTDISK,<\r
1595         JUMPE AC2,LOP018        ;SUPPRESS LEADING COMMA IF NO DISK\r
1596 >\r
1597         PUSHJ PDP,INLMES        ;PRINT ,(INSTEAD OF CRLF SO WILL FIT IN 1 BUFFER)\r
1598         ASCIZ /,/\r
1599 LOP018: MOVS AC1,DEVNAM(T)      ;GET DEVICE NAME\r
1600         HLLZ TAC1,AC1           ;ASSUME SAME TYPE AS LAST ONE, PRINT\r
1601                                 ; ONLY RH OF NAME (UNIT NUMBER)\r
1602         CAIN AC2,0(AC1)         ;IS IT REALLY THE SAME?\r
1603         JRST LOP01A             ;YES. PRINT THE UNIT NUMBER,\r
1604         MOVS TAC1,AC1           ;NO. MUST PRINT WHOLE NAME,\r
1605         HRRZ AC2,AC1            ; AND GET THE NEW DEVICE IN FLAG AC.\r
1606 LOP01A: PUSHJ PDP,PRNAME        ;AS BEING FREE\r
1607 LOP02:  HLRZ T,DEVSER(T)        ;GET NEXT DEVICE IN CHAIN\r
1608         JUMPN T,LOP01           ;IS THERE ONE?\r
1609         JRST CRLF               ;NO. DONE, PRINT CR. LF AND THEN POPJ\r
1610 >\r
1611 \f\r
1612 EXTERNAL CPOPJ,STUSER\r
1613 ;ROUTINE TO CHECK FOR ACTIVE DEVICES\r
1614 ;NEVER GET HERE DURING SWAP IN OU OUT\r
1615 ;SINCE COMMAND TABLE SHOULD AHVE NOTRAN BIT ON\r
1616 \r
1617 RUNCHK: CAMN ITEM,STUSER        ;SYSTEM TAPE USER?\r
1618         JRST DLYCM1             ;YES. DELY,BUT DO NOT STOP JOB\r
1619 ACTCHK: JUMPE PROG,ACTCH1       ;DOES JOB HAVE CORE IN MEMORY\r
1620         PUSHJ PDP,ANYACT        ;YES. ARE DEVICES ACTIVE?\r
1621         JRST DLYCM              ;YES. DELAY COMMAND.\r
1622 ACTCH1: MOVE TAC1,-1(PDP)       ;RESTORE COMMAND DISPATCH ADDRESS\r
1623         MOVE DEVDAT,-2(PDP)     ;RESTORE TTY DDB ADDRESS\r
1624         MOVE T,JBTSTS(ITEM)     ;RESTORE JOB STATUS\r
1625 CONTC1: POPJ PDP,COM0\r
1626 \r
1627 ;ROUTINE TO DELAY A COMMAND\r
1628 \r
1629 ;DELAYS COMMAND TO BE EXECUTED WHEN JOB IN CORE MEMORY\r
1630 ;AND CAUSE JOB TO BE SWAPPED IN(COMMAND WAIT BIT IS SET IN JBSTS)\r
1631 ;AND POPD LEVEL UP ONE.\r
1632 \r
1633 EXTERNAL TTYCM,LINSAV\r
1634 \r
1635 DLYCM:  PUSHJ   PDP,DLYCOM      ;SET COMMAND WAIT BIT IN JOB STATUS AND PUT\r
1636                                 ; JOB IN COMMAND WAIT QUEUE\r
1637                                 ; SO JOB IS NOT RUNNABLE ANY MORE\r
1638 ;ROUTINE TO DELAY A COMMAND IF A SWAP OUT OR IN IS IN PROGRESS\r
1639 ;DIFFERS FROM DLYCM IN THAT JOB IS NOT MADE TO BE SWAPPED IN\r
1640 ;REQUIRES OR DELYAING COMMAND IF SYSTEM\r
1641 ;TAPE USER TYPOES ^C (HALT COMMAND)\r
1642 \r
1643 DLYCM1: POP     PDP,TAC\r
1644         POP     PDP,TAC1\r
1645         POP     PDP,TAC1\r
1646         PUSH    PDP,CONTC1\r
1647         MOVE    TAC1,LINSAV\r
1648         JRST    TTYCM\r
1649 \f\r
1650 IFN FTDISK,<\r
1651 ;SEARCH DEVICE CHAIN FOR DSK WITH COUNTS ON\r
1652 ;CALL   MOVE ITEM,JOB NO\r
1653 ;       PUSHJ PDP,STOPCK\r
1654 ;       CAN'T STOP RETURN\r
1655 ;       OK TO STOP RETURN\r
1656 \r
1657 EXTERNAL DSKDDB,DSKFGS,CPOPJ1\r
1658 \r
1659 STOPCK: MOVEI DEVDAT,DSKDDB\r
1660         MOVSI TAC1,DSKFGS\r
1661 STOPD:  LDB TAC,PJOBN\r
1662         CAIE ITEM,(TAC)         ;ASSIGNED TO THIS JOB?\r
1663         JRST STOPC              ;NO\r
1664         TDNE TAC1,DEVIOS(DEVDAT)        ;YES. FLAG ON?\r
1665         JRST CPOPJ              ;YES. DELAY\r
1666 STOPC:  HLRZ DEVDAT,DEVSER(DEVDAT)\r
1667         MOVSI TAC,446353\r
1668 \r
1669         CAMN TAC,DEVNAM(DEVDAT)\r
1670         JRST STOPD\r
1671         JRST CPOPJ1             ;OK TO STOP\r
1672 >\r
1673 \f\r
1674 SUBTTL  COMCSS - COMMON COMMAND SUBROUTINES\r
1675 \r
1676 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING\r
1677 ; IN COMMAND LINE (SIXBIT)\r
1678 ;CALL:  MOVE TAC,BYTE POINTER TO PREVIOUS CHAR.\r
1679 ;       PUSHJ PDP, CTEXT\r
1680 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1\r
1681 \r
1682 INTERNAL CTEXT\r
1683 INTERNAL CTEXT1\r
1684 \r
1685 T=BUFPNT                        ;TEMPORARY AC'S\r
1686 T1=BUFWRD\r
1687 T2=UUO\r
1688 \r
1689 CTEXT:  PUSHJ   PDP,SKIPS       ;CALL HERE IF AT START OF LINE\r
1690         SKIPA\r
1691 \r
1692 CTEXT1: PUSHJ PDP,SKIPS1                ;SKIP LEAD SPACES,TABS,NULLS AND CLEAR TAC1\r
1693                                 ; DO NOT RETURN IF CR WAS PERVIOUS BREAK\r
1694         MOVE T,[POINT 6,TAC1]\r
1695 IFE FTTTYSER,<\r
1696         LDB     TEM,TAC\r
1697         JRST CTEX1\r
1698 CTEX0:  ILDB    TEM,TAC\r
1699 >\r
1700 IFN FTTTYSER,<\r
1701 EXTERN TAKR,GETCHAR\r
1702         LDB     TEM,TAKR(DAT)   ;GET LAST CHAR.\r
1703         JRST    CTEX1\r
1704 CTEX0:  PUSHJ   PDP,GETCHR      ;ROUTINE IN SCNSER TO PICK UP CHAR.\r
1705 >\r
1706 \r
1707 CTEX1:  PUSHJ PDP, CTEX         ;IS IT ALPHANUMERIC\r
1708         TRC TEM,40              ;CONVERT TO SIXBIT\r
1709         TLNE    T,770000        ;SIX CHARS YET?\r
1710         IDPB    TEM,T   ;NO. BUILD WORD \r
1711         JRST CTEX0      ;LOOP FOR MORE\r
1712 \f\r
1713 ;SCAN FOR ALPHANUMERIC CHAR IN TEM\r
1714 CTEX:   CAILE   TEM,"Z"+40      ;GREATER THAN LC Z?\r
1715         JRST    CTEXA           ;YES. NOT SIXBIT.\r
1716         CAIL    TEM,"A"+40      ;LOWER CASE LETTER?\r
1717         TRZ     TEM,40          ;YES. MAKE UPPER CASE.\r
1718         CAIL TEM, "0"\r
1719         CAILE TEM, "Z"  ;LETTERS ARE LARGER THEN NOS.\r
1720         JRST CTEXA      ;NEITHER\r
1721         CAILE TEM,"9"\r
1722         CAIL TEM,"A"\r
1723         POPJ PDP,       ;LETTER OR NUMBER RETURN\r
1724 CTEXA:  IFE FTTTYSER,<\r
1725         POP     PDP,T1  ;REDUCE PDP BY 1 LEVEL\r
1726         POPJ    PDP,    ;AND RETURN\r
1727 >\r
1728 IFN FTTTYSER,<\r
1729         CAIN    TEM,":"         ;DEVICE NAME?\r
1730         PUSHJ   PDP,GETCHR      ;YES. SKIP COLON\r
1731         CAIE    TEM,3   ;CONTROL C?\r
1732 \r
1733         JRST    TPOPJ   ;NO. RETURN ONE LEVEL UP\r
1734 CTXCNC: MOVSI   TAC1,(SIXBIT /HAL/)     ;MAKE PHONY HALT COMMAND\r
1735         MOVSI   TEM,12  ;WITH LF FOR TERMINATION\r
1736         JRST    TPOPJ   ;AND RETURN UP A LEVEL\r
1737 >\r
1738 \f\r
1739 ;ROUTINE TO IGNORE LEADING SPACES, TABS, AND NULLS\r
1740 ;ALSO CLEARS TAC1\r
1741 ;DOES NOT RETURN IF PREVIOUS CHAR. OR NEXT NON-SPACING\r
1742 ;CHAR, IS CR(IE POPS SUBROUTINE LEVEL UP 1 ON RETURN)\r
1743 ;CALL:  MOVE TAC,BYTE POINTER TO PREVIOUS BREAK CHAR.\r
1744 ;       PUSHJ PDP, SKIPS1\r
1745 \r
1746 INTERNAL SKIPS1,SKIPS\r
1747 \r
1748 IFE FTTTYSER,<\r
1749 SKIPS1:\r
1750 SKIPS:  MOVEI TAC1,0    ;CLEAR TAC1\r
1751         LDB TEM,TAC     ;WAS PRECEDING BREAK A CR?\r
1752         CAIN TEM,15\r
1753         JRST SKIPS2     ;YES. POP SUB. LEVEL UP 1\r
1754 SKIPSA:\r
1755         ILDB    TEM,TAC\r
1756         JUMPE TEM,SKIPSA        ;NULL?\r
1757         CAIE TEM," "    ;SPACE?\r
1758         CAIN TEM, 11\r
1759         JRST SKIPSA\r
1760         CAIN TEM,15     ;CR?\r
1761 SKIPS2: POP PDP,T       ;YES. POP SUB. LEVEL UP ONE\r
1762 >\r
1763 IFN FTTTYSER,<  EXTERNAL GETCHR,SPCHEK,BREAKB,TAKR\r
1764 \r
1765 SKIPS:  PUSHJ   PDP,GETCHR      ;GET FIRST CHAR ON LINE\r
1766 SKIPS1: MOVEI   TAC1,0  ;FOR CTEXT, DECIN\r
1767         LDB     TEM,TAKR(DAT)   ;IN CASE TEM CLOBBERED\r
1768         CAIN    TEM,15  ;SKIP TO LF IF CR\r
1769 SKIPSA: PUSHJ   PDP,GETCHR      ;NEXT CHARACTER\r
1770         JUMPE   TEM,SKIPS3      ;POP UP A LEVEL IF NO CHARS\r
1771         PUSHJ   PDP,SPCHEK      ;SPECIAL?\r
1772         JRST    SKIPS2  ;NO\r
1773         TLNE    TAC,BREAKB      ;BREAK?(END OF LINE)\r
1774         JRST    SKIPS3  ;YES. POP UP RETURN\r
1775 SKIPS2: CAIG    TEM,40  ;SPACE OR CONTROL CHAR?\r
1776         JRST    SKIPSA  ;YES.\r
1777         POPJ    PDP,Z   ;NO. RETURN\r
1778 SKIPS3: CAIN    TEM,3   ;^C?\r
1779         JRST    CTXCNC  ;HANDLE IT\r
1780         MOVEI   TEM,12  ;FOR BREAK CONSISTENCY\r
1781         JRST    TPOPJ   ;RETURN ONE LEVEL UP\r
1782 >\r
1783 \f\r
1784 ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT\r
1785 ;CALLED FROM OCTIN, RETURNS TO SECOND LEVEL ON PDL\r
1786 ;CALL:  MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING\r
1787 ;       PUSHJ PDP, COMERA\r
1788 \r
1789 INTERNAL COMERA,COMERP\r
1790 \r
1791 COMERP: POP     PDP,T           ;REMOVE SUB. RETURN BEFORE CALLING COMERA\r
1792 COMERA: IFE FTTTYSER,<  IBP     TAC>\r
1793         IFN FTTTYSER,<  PUSHJ   PDP,GETCHR>     ;MOVE UP, A CH\r
1794 \r
1795 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?"\r
1796 ;AND SET AS OUTPUT\r
1797 ;CALL:  MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING\r
1798 ;       PUSHJ PDP, COMERR\r
1799 \r
1800 INTERNAL COMERR\r
1801 \r
1802 \r
1803 COMERR:\r
1804 IFN FTTTYSER,<\r
1805 EXTERN OUTCHS,TRESCN,TITAKR,SETBFI,TISYNC\r
1806 \r
1807         MOVE    T,TITAKR(DEVDAT)        ;SAVE POSISITION IN SCAN\r
1808         PUSHJ   PDP,TRESCN      ;BACK UP TO START OF COMMAND\r
1809 COMERL: PUSHJ   PDP,GETCHR      ;GET A CHAR FROM COMMAND\r
1810         CAMN    T,TITAKR(DEVDAT)        ;PASS BAD CHAR YET?\r
1811         JRST    COMER1  ;YES\r
1812         PUSHJ   PDP,OUTCHS      ;NO. TYPE CHAR.\r
1813         JUMPN   TEM,COMERL      ;LOOP IF NOT OUT OF CHARACTERS\r
1814 \r
1815 COMER1: PUSHJ   PDP,SETBFI              ;CLEAR ANY MORE TYPEIN\r
1816         AOS     TISYNC(DEVDAT)  ;THIS WILL BE SOS-ED AT COMRET\r
1817         MOVEI   TEM,"?"         ;APPEND ? TO ERRONEOUS WORD\r
1818         PUSHJ   PDP,OUTCHS\r
1819 >\r
1820 IFE FTTTYSER,<\r
1821         MOVE    DAT,TAC\r
1822         MOVEI   T,"?"           ;STORE ? ON TOP OF BREAK CHAR.\r
1823         DPB     T,DAT\r
1824 >\r
1825         TDZA ITEM,ITEM          ;CLEAR JOB NO. AND SKIP INTO CRLF ROUT.\r
1826 \f\r
1827 ;ROUTINE TO PRINT A COMMAND ERROR MESSAGE\r
1828 ;SAME CALL AS CONMES\r
1829 \r
1830 INTERNAL ERRMES\r
1831 \r
1832                                 ; COMERR SKIPS THIS ROUT,(SEE ABOVE)\r
1833 ERRMES: TDZA ITEM,ITEM          ;CLEAR JOB NUMBER TO INDICATE ERROR\r
1834                                 ; SKIP INTO CONMES ROUTINE\r
1835 \r
1836 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED\r
1837 ;CALL:  MOVE DAT,BYTE POINTER TO OUTPUT\r
1838 ;       PUSHJ PDP,CRLF\r
1839 \r
1840 INTERNAL CRLF\r
1841 \r
1842                                 ; COMERR SKIPS TO HERE(SEE ABOVE)\r
1843 CRLF:   MOVEI TAC,[ASCII /\r
1844 /]\r
1845 \r
1846 ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER\r
1847 ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER\r
1848 ;       MOVEI TAC,  ADDRESS OF ASCII MESSAGE\r
1849 ;       PUSHJ PDP, CONMES\r
1850 ; STRING TERMINATED BY NULL\r
1851 ; CONMES DOES NOT START TTY\r
1852 ;CONMS1 - SAME CALLING SEQUENCE A CONMES,EXCEPT LH IS BYTE POINTER \r
1853 \r
1854 INTERNAL CONMES\r
1855 EXTERNAL TPOPJ\r
1856 \r
1857                                 ; ERRMES SKIPS TO HERE\r
1858 CONMES: HRLI TAC,440700         ;FORM ASCIZ BYTE POINTER\r
1859 CONMS1: PUSH PDP,TAC            ;SAVE BYTE POINTER\r
1860 CON0:   ILDB TEM,(PDP)          ;GET NEXT CHAR.\r
1861         JUMPE TEM,TPOPJ         ;IS IT NULL?(IF YES, DO POP TAC, POPJ)\r
1862 TYOINS:         ;TAG FOR THE TYPE OUT INSTRUCTION\r
1863 CONOUT:                         ;EXECUTED FROM REST OF COMCSS TO OUTPUT CHAR\r
1864 IFN FTTTYSER,<\r
1865 EXTERN OUTCHS\r
1866         PUSHJ   PDP,OUTCHS      ;NO. STORE TTY OUTPUT BUFFER\r
1867 >\r
1868 IFE FTTTYSER,<\r
1869         IDPB    TEM,DAT\r
1870 >\r
1871         JRST CON0               ;KEEP GOING\r
1872 \f\r
1873 ;ROUTINE TO PRINT INLINE ASCIZ MESSAGE\r
1874 ;CALL:  PUSHJ PDP,INLMES\r
1875 ;       ASCIZ /THE MESSAGE/\r
1876 ;RETURN TO NEXT LOC AFTER MESSAGE\r
1877 \r
1878 INTERNAL INLMES\r
1879 \r
1880 INLMES: POP PDP,TAC             ;SETUP PRINT ADRESS FOR CONMES\r
1881         PUSHJ PDP,CONMES        \r
1882         JRST 1(TAC)             ;RETURN TO NEXT LOC AFTER MESSAGE\r
1883 \r
1884 ;ROUTINE TO APPEND ? TO ERROR MESSAGE\r
1885 ;CALL   PUSHJ PDP,PRQM\r
1886 ;       RETURN\r
1887 \r
1888 INTERNAL PRQM\r
1889 \r
1890 PRQM:   MOVEI TEM,"?"\r
1891 IFN FTTTYSER,<\r
1892 \r
1893 EXTERN OUTCHS\r
1894         JRST    OUTCHS\r
1895 >\r
1896 IFE FTTTYSER,<\r
1897         IDPB    TEM,DAT\r
1898         POPJ    PDP,\r
1899 >\r
1900 PRSPC:  MOVEI TAC,[ASCIZ /      /]\r
1901         JRST CONMES\r
1902 \f\r
1903 ;ROUTINE TO PRINT "TOO FEW ARGUMENTS"\r
1904 ;CALL:  MOVE DAT,BYTE POINTER\r
1905 ;       PUSHJ PDP,NOTENF\r
1906 \r
1907 INTERNAL NOTENF\r
1908 \r
1909 NOTENF: JSP TAC,ERRMES\r
1910 \r
1911 ASCIZ /TOO FEW ARGUMENTS\r
1912 /\r
1913 \r
1914 ;ROUTINE TO PRINT A PERIOD\r
1915 ;CALL:  PUSHJ PDP,PRPER\r
1916 \r
1917 INTERNAL PRPER\r
1918 \r
1919 PRPER:  JSP TAC,CONMES\r
1920         ASCIZ /./\r
1921 \f\r
1922 ;ROUTINE TO DEASSIGN A DEVICE\r
1923 ;CALL:  MOVE DEVDAT, DEVICE DATA BLOCK\r
1924 ;       MOVE ITEM, JOB NUMBER\r
1925 ;       PUSHJ PDP, DEASG\r
1926 ;       ERROR NOT PREVIOUSLY ASSIGNED\r
1927 ;       OK RETURN WITH DEVICE DEASSIGNED\r
1928 \r
1929 INTERNAL DEASG\r
1930 EXTERNAL PJOBN,CPOPJ1,IPOPJ\r
1931 \r
1932 DEASG:  LDB T, PJOBN            ;WAS DEVICE ASSIGNED TO THIS JOB?\r
1933         CAME T, ITEM\r
1934         POPJ PDP,               ;NO, RETURN\r
1935         PUSH PDP,ITEM           ;SAVE JOB NUMBER\r
1936         MOVSI TAC1,DVDIRI       ;CLEAR DIRECTORY IN CORE BIT\r
1937         ANDCAB TAC1,DEVMOD(DEVDAT)      ;SET DEVICE CHARACTERISTICS FOR TEST\r
1938                                 ; AND ASGHGH\r
1939         SETZM DEVLOG(DEVDAT)    ;CLEAR LOGICAL NAME\r
1940 \r
1941         TRNE TAC1,ASSCON        ;IS DEVICE ASSIGNED BY CONSOLE?\r
1942         AOS -1(PDP)             ;YES, DO OK RETURN\r
1943 IFN FT2REL,<\r
1944         EXTERN ASGHGH\r
1945         PUSHJ PDP,ASGHGH        ;IF DTA OR MTA, CLEAR ANY HIGH SEGMENT NAMES\r
1946                                 ; FROM THIS DEVICE SO NO NEW SHARING\r
1947                                 ; DEVMOD SETUP IN TAC1 ON CALL\r
1948 >\r
1949         MOVEI TAC1,ASSCON       ;SETUP ASSIGNED BE CONSOLE BIT FOR RELEASE\r
1950         PUSHJ PDP,RELEA6        ;CLEAR JOB NO. IN DDB IF DDB NOT NEEDED\r
1951         JRST IPOPJ              ;RESTORE JOB NUMBER AND RETURN\r
1952 \r
1953 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY\r
1954 ;CALL:  MOVE ITEM, JOB NUMBER\r
1955 ;       MOVE DEVDAT,ADR. OF DEVICE NOT TO BE DEASSIGNED\r
1956 ;       PUSHJ PDP, DEASTY\r
1957 \r
1958 INTERNAL DEASAL,DEASTY\r
1959 EXTERNAL DEVLST\r
1960 \r
1961 DEASTY:\r
1962 DEASAL: PUSH PDP,DEVDAT         ;SAVE TTY DDB ADDRESS\r
1963         HLRZ DEVDAT,DEVLST      ;SEARCH ALL DDB'S\r
1964 DEA1:   CAIE DEVDAT,@(PDP)      ;IS THIS DEVICE NOT TO BE DEASSIGNED?\r
1965         PUSHJ PDP, DEASG        ;NO, TRY TO DEASSIGN IT\r
1966         JFCL                    ;IGNORE IF CAN'T\r
1967         HLRZ DEVDAT, DEVSER(DEVDAT)\r
1968         JUMPN DEVDAT, DEA1\r
1969         POP PDP,DEVDAT          ;RESTORE TTY DDB ADDRESS\r
1970         POPJ PDP,\r
1971 \f\r
1972 ;ROUTINE TO REA CONSOLE AND CONVERT ANY RADIX NUMBER\r
1973 ; CALL: MOVE TAC1,  DESIRED RADIX\r
1974 ;       MOVE TAC,  BYTE POINTER TO FIRST CHARACTER\r
1975 ;       PUSHJ PDP, ANYRIN\r
1976 ;       NO ARG. TYPED RETURN, TAC1=0\r
1977 ;       ILLEGAL CHARACTER RETURN\r
1978 ;       NORMAL EXIT     TAC TAC1 CONTAINS NUMBER\r
1979 ;SCAN STOPS ON FIRST OR,DASH,SPACE,OR TAB OR ILLEGAL CHAR.\r
1980 ;SKIPS LEADING SPACES AND TABS\r
1981 \r
1982 INTERNAL OCTIN,OCTIN1,DECIN,DECIN1\r
1983 EXTERNAL CPOPJ1,CPOPJ2\r
1984 \r
1985 C=BUFPNT                        ;CHARACTER AC\r
1986 R=BUFWRD                        ;RADIX AC\r
1987 \r
1988 DECIN1:\r
1989 DECIN:  MOVEI R,12              ;DECIMAL INPUT\r
1990         JRST ANYRIN\r
1991 \r
1992 OCTIN1:\r
1993 OCTIN:  MOVEI R,10              ;OCTAL INPUT\r
1994 ANYRIN: PUSHJ PDP,SKIPS1        ;SKIP LEADING SPACES, TABS, NULLS\r
1995                                 ; DO NOT RETURN IF CR WAS PREVIOUS BREAK\r
1996                                 ; OR THIS BREAK\r
1997 IFE FTTTYSER,<  LDB     TEM,TAC>\r
1998 OCT0:   CAIGE TEM,175           ;ALTMODES(175 OR 176)?\r
1999         CAIN TEM,"["            ;NO. LEFT BRACKET(SO SPACE NOT REQ\r
2000                                 ; BEFORE [P,P] IN ATT AND GET COMMANDS.\r
2001         JRST    CPOPJ2  ;YES. SKIP RETURN\r
2002         CAIE TEM,"-"    ;DASH?\r
2003         CAIG    TEM,400 ;SPACE OR CONTROL CHAR?\r
2004         JRST CPOPJ2             ;YES, ONLY LEGAL TERMINATORS\r
2005         CAIE TEM,","            ;COMMA?\r
2006         CAIN TEM,"]"            ;RIGHT BRACKET?\r
2007         JRST CPOPJ2             ;YES.\r
2008         SUBI TEM,60     \r
2009         JUMPL TEM,CPOPJ1                ;ERROR IF NEG.,REMOVE SUB. RETURN AND PRINT\r
2010         CAML TEM, R             ;OR .GE. RADIX\r
2011         JRST CPOPJ1             ;ERROR, GREATER OR EQUAL TO RADIX\r
2012         IMUL TAC1, R\r
2013         ADD TAC1,TEM\r
2014 IFE FTTTYSER,<  ILDB    TEM,TAC ;NEXT CHAR>\r
2015 IFN FTTTYSER,<  PUSHJ   PDP,GETCHR>     ;NEXT CHAR\r
2016         JRST OCT0\r
2017 \f\r
2018 INTERNAL FTLOGIN\r
2019 IFN FTLOGIN,<\r
2020 ;GET PROJECT-PROGRAMMER NUMBERS\r
2021 ;CALL:  MOVE TAC,INPUT BYTE POINTER\r
2022 ;       PUSHJ PDP,PJPGNO\r
2023 ;\r
2024 ;(AC2)LH _ PROJECT NUMBER\r
2025 ;(AC2)RH _ PROGRAMMER NUMBER\r
2026 ;(AC2) = 0 IF NO [ ]'S TYPED\r
2027 ;THE TERMINAL ] IS OPTIONAL\r
2028 \r
2029 IFE FTTTYSER,<\r
2030 PJPGNO: SKIPA   TAC1,TAC        ;SAVE INPUT BYTE POINTER IN CASE NO\r
2031                                 ; [ ]'S WERE TYPED IN.\r
2032 PP0:    IBP     TAC             ;GET NEXT CHARACTER (2ND TIME THRU LOOP)\r
2033         LDB     TEM,TAC         ;GET CHAR WHICH STOPED PREVIOUS FIELD SCAN\r
2034                                 ; (OR NEXT CHAR ON 2ND TIME THRU LOOP)\r
2035 >\r
2036 \r
2037 IFN FTTTYSER,<\r
2038 PP0:    PUSHJ   PDP,SKIPS1\r
2039 PJPGNO:\r
2040 >\r
2041         CAIN    TEM,"["         ;IS IT A "[" ?\r
2042         JRST    PP1             ;YES, GET PROJECT-PROGRAMMER NUMBERS FROM INSIDE.\r
2043         CAIE    TEM," "         ;NO, IS IT A SPACE ?\r
2044         CAIN    TEM,11          ; OR A TAB?\r
2045         JRST    PP0             ;YES, KEEP LOOKING FOR "[".\r
2046         MOVEI   AC2,0           ;NEITHER SPACE NOT TAB, THUS RETURN A 0 MEANING\r
2047                                 ; NO PROJECT-PROGRAMMER NUMBER ENCOUNTERED.\r
2048 IFE FTTTYSER,<  MOVEM   TAC1,TAC        ;RESTORE ORIGINAL BYTE POINTER.>\r
2049         POPJ    PDP,            ;EXIT.......\r
2050 \r
2051 PP1:\r
2052 IFN FTTTYSER,<  PUSHJ   PDP,SKIPS>\r
2053         PUSHJ PDP,OCTIN ;GET FIRST ARG.-PROJ. NO.\r
2054         JRST COMERP             ;NO ARG. GIVEN\r
2055         JRST COMERP             ;ILLEGAL DECIMAL CHARACTER GIVEN\r
2056         HRL AC2,TAC1            ;ENTER\r
2057 IFN FTTTYSER,<  CAIE    TEM,","\r
2058         JRST    COMERP\r
2059         PUSHJ   PDP,SKIPS>\r
2060         PUSHJ PDP,OCTIN         ;GET SECOND ARG.-PROG. NO.\r
2061         JRST COMERP             ;\r
2062         JRST COMERP             ;\r
2063         HRR AC2,TAC1            ;ENTER\r
2064         PUSHJ PDP,SKIPS1        ;SKIP BLANKS\r
2065         CAIN TEM,"]"            ;IS USUAL ENDING A "]"?\r
2066 IFE FTTTYSER,<IBP TAC>          ;YES, SKIP IT\r
2067 IFN FTTTYSER,<PUSHJ PDP,GETCHR> ;YES, SKIP IT SO FINAL ] IS OPTIONAL\r
2068         POPJ PDP,               ;RETURN RO CALL\r
2069 >\r
2070 \f\r
2071 ;ROUTINE TO PRINT TIME AS HOURS,MINUTES,SECONDS, AND HUNDRETHS\r
2072 ;FORMAT IS HHMM:SS.HH\r
2073 ;CALL:  MOVE TAC,TIME IN JIFFIES(60THS,50THS OR MILLISECONDS)\r
2074 ;       MOVE DAT,OUTPUT TEXT BYTE POINTER\r
2075 ;       PUSHJ PDP,PRTIME\r
2076 \r
2077 ;SCALEING IS DONE USING THE FOLLOWING GLOBAL SYMBOLS DEFINED\r
2078 ;ON THE CONFIGURATION TAPE (IOINI1)\r
2079 ;THUS ANY INSTALLATION MAY HAVE ANY RATE CLOCK\r
2080 \r
2081 EXTERNAL JIFMIN,JIFSEC,JIFSC2\r
2082 \r
2083 ;JIFMIN=NO. OF JIFFIES(CLOCK TICKS) PER MINUTE\r
2084 ;JIFSEC=NO. OF JIRFIES PER SECOND\r
2085 ;JIFSC2=1/2*JIFSEC(USED FOR ROUNDING)\r
2086 \r
2087 INTERNAL PRTIME\r
2088 \r
2089 PRTIME: IDIVI TAC,JIFMIN        ;FORM MINUTES\r
2090         PUSH PDP,TAC1           ;SAVE REMAINDER IN JIFFIES\r
2091         JUMPE TAC,PR1           ;SUPRESS 0 HOURS IN MINUTES\r
2092         IDIVI TAC,^D60          ;HOURS, MINUTES IN TAC,TAC1\r
2093         JUMPE TAC,PR0           ;SUPPRES 0 HOURS\r
2094         PUSHJ PDP,RADX10\r
2095         PUSHJ PDP,INLMES        ;PRINT "HH:" OR "H:"\r
2096         ASCIZ /:/\r
2097 PR0:    MOVE TAC,TAC1           ;GET MINUTES\r
2098         PUSHJ PDP,PRT2          ;PRINT "MM:"\r
2099         PUSHJ PDP,INLMES\r
2100         ASCIZ /:/\r
2101 PR1:    POP PDP,TAC             ;RESTORE SECONDS(IN JIFFIES)\r
2102         IDIVI TAC,JIFSEC        ;JIFFIES PER SECOND\r
2103         PUSHJ PDP,RADX10        ;PRINT SECONDS\r
2104         PUSHJ PDP,PRPER         ;PRINT PERIOD\r
2105         MOVE TAC,TAC1           ;NO OF JIFFIES(HUNDRETHS)\r
2106         IMULI TAC,^D100         ;CONVERT TO HUNDRETHS\r
2107         IDIVI TAC,JIFSEC\r
2108         CAIL TAC1,JIFSC2        ;ROUND IF GREATER THEN HALF\r
2109         AOS TAC\r
2110         JRST PRT2LF             ;PRINT\r
2111 \f\r
2112 PRTIM1: IDIVI TAC,JIFMIN        ;\r
2113         IDIVI TAC,^D60          ;HOURS,MINUTES IN TAC,TAC1\r
2114         PUSHJ PDP,PRT2\r
2115         PUSHJ PDP,INLMES        ;PRINT "HH:"\r
2116         ASCIZ /:/\r
2117         MOVE TAC,TAC1\r
2118 PRT2LF: PUSHJ PDP,PRT2          ;PRINT "MM\r
2119         JRST CRLF\r
2120 \r
2121 PRT2:   MOVEI TEM,"0"\r
2122         CAIGE TAC,^D10\r
2123         XCT CONOUT              ;PUT LEADING 0 IF LESS THEN 10\r
2124         JRST RADX10             ;PRINT REST OF NUMBER\r
2125 \f\r
2126 ;ROUTINE TO PRINT SIZE OF LOGICAL SEGMENT (LOW OR HIGH)\r
2127 ;CALL:  MOVE ITEM, HIGH OR LOW SEG NUMBER\r
2128 ;       PUSHJ PDP,PRT SEG\r
2129 ;       RETURN\r
2130 ;CALLED AT CLOCK LEVEL FROM CORE (UUO ARG) COMMAND AND SEGCON\r
2131 \r
2132         INTERN PRTSEG\r
2133         EXTERN PCORSZ\r
2134 \r
2135 PRTSEG: PUSHJ PDP,SEGSIZ        ;TAC1=SIZE OF HIGH OR LOW SEG\r
2136         MOVE TAC,TAC1           ;RADX10 WANT DEC. NO. IN TAC\r
2137         JRST RADX10             ;PRINT DECIMAL\r
2138 \r
2139 ;ROUTINE TO RETURN SIZE OF HIGH OR LOW SEG\r
2140 ;CALL:  MOVE ITEM,LOW OR HIGH SEG NUMBER\r
2141 ;       PUSHJ PDP,SEGSIZ\r
2142 ;       RETURN WITH SIZE IN K IN TAC1\r
2143 \r
2144         INTERN SEGSIZ\r
2145         EXTERN CPOPJ\r
2146 \r
2147 SEGSIZ:\r
2148 IFN FTSWAP,<\r
2149         EXTERN IMGIN\r
2150         LDB TAC1,IMGIN          ;SIZE WHEN NEXT SWAPPED IN(IN K)\r
2151         JUMPN TAC1,CPOPJ        ;0 MEANS NOT SWAPPED OUT\r
2152 >\r
2153         HLRZ TAC1,JBTADR(ITEM)  ;SIZE-1 LOW LOW OR HIGH SEG IN WORDS IN CORE\r
2154         JUMPE TAC1,CPOPJ        ;IS IT IN CORE?\r
2155         LSH TAC1,-12            ;YES, CONVERT TO #K-1\r
2156         AOJA TAC1,CPOPJ         ;ADD 1 AND RETURN NUMBER OF K\r
2157 \f\r
2158 ;ROUTINE TO ASSIGN A MINIMAL CORE AREA(140 WORDS)\r
2159 ;CALLED FROM CORE,KJOB, AND RUN COMMANDS\r
2160 ;THIS ROUTINE PRESERVES INPUT BYTE POINTER IN TAC\r
2161 ;CALL:  PUSHJ PDP,GETMIN\r
2162 ;       RETURN PROG=0 IF UNSUCCESSFUL OR CORE ASSIGNED ON DISK\r
2163 \r
2164         EXTERN JOBDA,TPOPJ\r
2165 \r
2166 GETMIN:\r
2167 IFE FTTTYSER,<\r
2168         PUSH PDP,TAC    ;SAVE INPUT BYTE POINTER TO COMMAND\r
2169 >\r
2170 IFN FTTTYSER,<\r
2171         PUSH PDP,DEVDAT         ;SAVE TTY DDB ADR\r
2172 >\r
2173         PUSH PDP,TAC1   ;SAVE DEVICE NAME(GET)\r
2174         PUSH PDP,IOS    ;SAVE DISPATCH ADDRESS(ANYACT USES IOS)\r
2175 IFN FT2REL,<\r
2176         EXTERN KILHGH\r
2177 \r
2178         PUSHJ PDP,KILHGH        ;KILL HIGH SEG\r
2179 >\r
2180         MOVEI TAC,JOBDA         ;LENGTH OF JOBDATA AREA\r
2181         PUSHJ PDP,CORE0         ;ASSIGN 140 WORDS ON DISK OR MEMORY\r
2182         JFCL                    ;IGNORE IF CANT(PROG=0)\r
2183         POP PDP,IOS     \r
2184         POP PDP,TAC1            ;RESTORE PUSHED ACS\r
2185 IFN FTTTYSER,<\r
2186         POP PDP,DEVDAT          ;RESTORE TTY DDB ADR\r
2187         POPJ PDP,               ;TAC NOT USER BY FULL DUPLEX SCNSER\r
2188 >\r
2189 IFE FTTTYSER,<\r
2190         JRST TPOPJ              ;RESTORE TAC AND RETURN\r
2191 >\r
2192 \f\r
2193 ;ROUTINE TO GET 1 WORD FORM USER ARE WHICH CAN BE IN LOW OR HIGH SEG\r
2194 ;CALL:  MOVE PROG,[XWD PROT,RELOC FOR LOW SEG]\r
2195 ;       MOVE ITEM,JOB NUMBER\r
2196 ;       HRLI UUO,PROG           ;FOR RELOCATION\r
2197 ;       HRR UUO,USER ADDRESS(IE BEFORE RELOCATION)\r
2198 ;       PUSHJ PDP,GETWRD\r
2199 ;       ERROR RETURN ADDRESS OUT OF BOUNDS\r
2200 ;       OK RETURN, CONTENTS IN AC TAC\r
2201 ;CAN BE CALLED AT CLOCK OR UUO LEVEL\r
2202 ;CALLED FROM E COMMAND,INIT,OPEN AND CALL UUOS\r
2203 \r
2204         INTERN GETWRD\r
2205         EXTERN CPOPJ1\r
2206 \r
2207 GETWRD: HLRZ TAC,PROG           ;LARGEST REL LOC IN LOW SEG\r
2208         CAIGE TAC,(UUO)         ;IS ADR. IN LOW SEG?\r
2209 IFN FT2REL,<\r
2210         EXTERN HGHWRD\r
2211         JRST HGHWRD             ;NO, CHECK IF IN HIGH SEG(ERROR RET IF NO)\r
2212 >\r
2213 IFE FT2REL,<\r
2214         POPJ PDP,               ;NO, ERROR RETURN\r
2215 >\r
2216         MOVE TAC,@UUO           ;YES, GET IT FROM LOW SEG\r
2217         JRST CPOPJ1             ;AND SKIP RETURN\r
2218 \f\r
2219 SUBTTL  SAVGET - SAVE,GET,R,RUN COMMANDS AND RUN,GETSEG UUOS\r
2220 \r
2221 ;SAVGET LOWER CORE LOCATIONS USED FOR UUOS TO MONITOR\r
2222 ;USED IN SAVGET IN APRSER AND SAVGET IN SEGCON\r
2223 ;THESE LOCATIONS ARE DEFINED TO BE IN THE USERS UUO ACS\r
2224 \r
2225 ;FOR LOOKUP,ENTER UUOS:\r
2226         XP SGANAM,0             ;FILE NAME\r
2227         XP SGAEXT,SGANAM+1      ;FILE EXTENSION\r
2228         XP SGADAT,SGANAM+2      ;FILE CREATION DATE+TIME\r
2229         XP SGALEN,SGANAM+3      ;LN=-LENGTH,RH=FIRST LOC-1 DUMPED\r
2230                                 ; OR PROJECT-PROGRAMMER NUMBER(DISK)\r
2231         XP SGAEND,SGALEN+1      ;LAST WORD OF DUMP COMMAND LIST=0(SAVE AND GET)\r
2232         XP SGAREN,SGAEND        ; ALSO FIRST WORD FOR RENAME USED AS DELETE\r
2233         XP SGAPPN,SGAREN+3      ;FOURTH WORD-PLACE TO SAVE PROJECT-PROGRAMEMR\r
2234                                 ; NUMBER USER TYPED\r
2235 \r
2236 ;FOR OPEN UUOS:\r
2237         XP SGAMOD,10            ;IOS MODE WORD FOR OPEN UUO\r
2238         XP SGADEV,SGAMOD+1      ;DEVICE NAME\r
2239         XP SGAHED,SGAMOD+2      ;INPUT-OUTPUT BUFFER HEADER ADDRESSES=0\r
2240 \r
2241 ;MISC. DATA LOCATIONS:\r
2242 \r
2243         XP SGADMP,13            ;DUMP COMMAND IOWD\r
2244         XP SGACOR,14            ;AC FOR CORE UUO'S(HIGHEST USER LOC DESIRED)\r
2245         XP SGANEW,15            ;NEW CORE ASSIGNMENT AS SPECIFIED BY THIRD ARG\r
2246         XP SGAHGH,16            ;LH=EXT TO USE FOR SAVING HIGH SEG\r
2247                                 ; RH=EXT TO DELETE(IE SHRHGH OR HGHSHR)\r
2248         XP SGALOW,17            ;LH=EXT WHICH USER TYPED FOR SAVE OR GET COMMAND\r
2249                                 ; OR .SAV IF HE DIDN'T TYPE AN ARG WITH LEADING PERIOD\r
2250                                 ; RH=0\r
2251 \f\r
2252 ;ROUTINE TO SCAN COMMAND STRING ARGUMENTS FOR SAVE,GET,RUN AND R\r
2253 ;COMAMNDS AND STORE THEM IN JOB DATA AREA WHICH MUST BE IN CORE\r
2254 ;WHEN SGSET IS CALLED FROM COMMAND DECODER\r
2255 ;CALL:  MOVE TAC,INPUT BYTE POINTER\r
2256 ;       MOVE TAC1,SIXBIT DEVICE NAME\r
2257 ;       MOVE DAT,OUTPUT BYTE POINTER\r
2258 ;       MOVE IOS,ADR. OF MONITOR JOB(SAVJOB,GETJOB,RUNJOB)\r
2259 ;       MOVE PROG, ADR. OF JOB AREA\r
2260 ;       PUSHJ PDP,SGSET\r
2261 \r
2262 C=BUFPNT\r
2263 \r
2264 INTERNAL FTLOGIN,FT2REL,FTDISK\r
2265 EXTERNAL JOBCOR,JBTPRG\r
2266 \r
2267 SGSET:  JUMPE TAC1,NOTENF       ;NOT ENOUGH ARE IF NO DEVICE NAME\r
2268         MOVEM TAC1,SGADEV(PROG) ;STORE DEVICE NAME\r
2269         SKIPN  TAC1,JBTPRG(ITEM)        ;GET AUTOMATIC FILENAME, OR\r
2270         PUSHJ PDP, CTEXT1       ;GET FILE NAME FROM COMMAND STRING\r
2271         JUMPE TAC1,NOTENF       ;THERE MUST BE A FILE NAME\r
2272         MOVEM TAC1,SGANAM(PROG) ;STORE FILE NAME\r
2273         MOVEM TAC1,JBTPRG(ITEM) ;SAVE FILE NAME FOR SYSTAT COMMAND\r
2274         MOVEI TAC1,0            ;ASSUME USER DID NOT SPECIFY AN EXTENSION\r
2275                                 ; 0 WILL BE TURNED INTO SAV OR DMP\r
2276 IFE FTTTYSER,<  LDB     TEM,TAC>\r
2277         CAIN    TEM,"." ;IS AN EXTENSION SPECIFIED?\r
2278         PUSHJ PDP,CTEXT ;YES. GET EXTENSION\r
2279         HLLZM TAC1,SGAEXT(PROG) ;STORE IT FOR LOOKUP\r
2280 IFN FT2REL,<\r
2281         EXTERN SETEXT           ;ALSO SAVE IT AGAIN IN SGALOW FOR LOW SEG\r
2282                                 ; LOOKUP OR ENTER\r
2283         PUSHJ PDP,SETEXT        ;SET HIGH EXTENSION(SGAHIGH) TO .SHR IF SSAVE OR GET\r
2284                                 ; .HGH IF SAVE(LH IOS=NSRBIT).\r
2285 >\r
2286         SETZM SGADAT(PROG)      ;SET DATE(E+2) TO 0, SO MONITOR WILL USE TODAYS\r
2287 IFN FTLOGIN,<\r
2288         PUSHJ PDP,PJPGNO        ;GET PROJ, PROG. NO.\r
2289         MOVEM AC2,SGAPPN(PROG)  ;STORE 0 IF NO []'S TYPED BY USER\r
2290 >\r
2291         PUSHJ PDP,DECIN1        ;AMOUNT OF CORE (OPTIONAL THIRD ARG.)\r
2292         JRST SGSET1             ;DOES NOT RETURN IF ERROR. RETURN HERE IF NO ARG.\r
2293         JRST COMERA             ;ILLEGAL CHARACTER\r
2294         LSH TAC,12              ;CONVERT TO HIGHEST REL. LOC.\r
2295         SUBI TAC,1\r
2296 SGSET1: MOVEM TAC1,SGANEW(PROG) ;STORE FOR RUN AND SAVE\r
2297         HRRZ TAC1,IOS           ;SCHEDULE MONITOR JOB   \r
2298                                 ; GUARRANTEE LH OF PC WORD IS 0, SINCE IT WILL\r
2299                                 ; BE ADDED TO STARTING ADDRESS(IF RUN COM)\r
2300         JRST MSTART             ;START JOB WITH PC IN MONITOR MODE\r
2301 \f\r
2302 ;ROUTINE TO PICKUP ARGUMENTS FOR RUN AND GETSET UUOS\r
2303 ;THIS ROUTINE DOES SAME THING AS SGSET, EXCEPT THAT ARGUMENTS ARE\r
2304 ;OBTAINED FROM USER UUO ARGUMENTS INSTEAD OF FROM CONSOLE COMMAND\r
2305 ;THE USERS ARG ARE MOVED TO USER ACS(SGA...), THEREBY CLOBBERING HIS AC$S\r
2306 ;USER AC FIELD AND START PC OFFSET(RUN UUO) ARE SAVED ON PD LIST AT JOBPD3\r
2307 ;THEN LOWER CORE IS SET UP(SG2 CALLED) RESET IS NOT DONE (FOR GETSEGUUO)\r
2308 ;JBTPRG NOT SET FOR LOW SET, SINCE GETSEGUUO SHOULD NOT\r
2309 ;CALL:  MOVE TAC,CONTENTS OF USER AC(ADR. OF 3 WORD ARG LIST)\r
2310 ;       MOVE PROG,JOB RELOCATION\r
2311 ;       PUSHJ PDP,GETARG\r
2312 ;       RETURN\r
2313 \r
2314         INTERN GETARG\r
2315         EXTERN JBTPROG,JOBCORE,PUUOAC\r
2316 \r
2317 GETARG: HRR UUO,TAC             ;MOVE ADR. OF ARG LIST TO UUO\r
2318         EXCH TAC,(PDP)          ;AND PUT ON PD LIST\r
2319         PUSH PDP,TAC            ;MOVE RETURN PC UP ONE IN PD LIST\r
2320         LDB TAC,PUUOAC          ;USER AC FIELD IN RUN OF GETSEG UUO\r
2321 \r
2322         HRRM TAC,-1(PDP)        ;SAVE IN CASE OF ERROR RETURN\r
2323         PUSHJ PDP,GETWDU        ;GET FIRST ARG FROM USER AREA\r
2324         MOVEM TAC,SGADEV(PROG)  ;STORE DEVICE NAME\r
2325         PUSHJ PDP,GETWD1        ;GET NEXT ARG FROM USER ARREA\r
2326         MOVEM TAC,SGANAM(PROG)  ;STORE FILE NAME FOR LOOKUP (DO NOT STORE FOR LOWSEG)\r
2327         PUSHJ PDP,GETWD1        ;GET THIRD ARG(EXTENSION WORD E+1)\r
2328         MOVE TAC1,TAC           ;PUT ARG IN TAC1, SO SMAE AS SGSET RETURN FROM CTEXT\r
2329         MOVEM TAC1,SGAEXT(PROG) ;STORE EXTENSION AND RH FROM USER\r
2330 IFN FT2REL,<\r
2331         EXTERN SETEX1\r
2332         PUSHJ PDP,SETEX1        ;SAVE EXT AGAIN IN SGALOW\r
2333                                 ; SETUP EXT FOR HIGH SEG(SGAHGH="SHR")\r
2334                                 ; SETUP EXTENSION FOR LOW SEG(SGALOW="SAV")\r
2335 >\r
2336         PUSHJ PDP,GETWD1        ;GET FOURTH ARG(DATE WORD)\r
2337         MOVEM TAC,SGADAT(PROG)\r
2338         PUSHJ PDP,GETWD1        ;GET FIFTH USER ARG FROM USER AREA\r
2339         MOVEM TAC,SGAPPN(PROG)  ;STORE PROJECT,PROGRAMMER NO. OR 0\r
2340         PUSHJ PDP,GETWD1        ;SIX ARG FROM USER\r
2341         HRRZM TAC,SGANEW(PROG)  ;STORE CORE ARG OR 0(HIGHEST LOC DESIRED)\r
2342                                 ; IGNORE LH\r
2343         JRST SG2A               ;GO SET UP LOWER CORE AND RETURN\r
2344                                 ; DO NOT DO A RESET\r
2345 \f\r
2346 ;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE\r
2347 ;THIS JOB RUNS IN EXEC MODE AND CALLS IO ROUTINES USING REGULAR UUOS\r
2348 ;NO ATTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBDP, OR AC'S\r
2349 ;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA\r
2350 ;AFTER IT HAS BEEN SAVED IS TO START EXECUTIUON OVER AT THE STARTING\r
2351 ;ADDRESS\r
2352 \r
2353 INTERNAL SAVJOB,SAVERR\r
2354 EXTERNAL JOB41,JOBS41,JOBDDT,JOBSDD,JOBSV\r
2355 \r
2356 SAVJOB: JSP TAC1,SG1            ;SET UP ACS PROG,PDP,JDAT,ITEM.\r
2357                                 ; RESET DEVICES\r
2358         HLRE TAC1,SGADMP(PROG)  ;-NO. OF WORDS TO WRITE\r
2359         PUSHJ PDP,CKIOWD        ;CHECK USER'S CORE ARG(IF ANY) WITH AMOUNT\r
2360                                 ; RETURN ONLY IF 0 OR NOT SMALLER\r
2361         HRRM TAC,JOBCOR(PROG)   ;STORE MAX OF SIZE OF FILE OR CORE ARG\r
2362                                 ; FOR ASSIGNING INITIAL CORE WHEN FILE GOTTEN\r
2363 IFN FT2REL,<\r
2364         EXTERN SAVHGH\r
2365         PUSHJ PDP,SAVHGH        ;INIT DEV,SAVE HIGH SEG, IF ANY, RETURN IF OK\r
2366         JRST SAVFIN             ;HIGH SAVED, BUT NO DATA IN LOW SEG, SO DO\r
2367                                 ; NOT WRITE LOW FILE\r
2368                                 ; SKIP RETURN IF LOW SEG TO BE WRITTEN\r
2369 >\r
2370                                 ; SGALEN, AND SGAEXT RESTORED\r
2371 SAVJB1: OPEN 0,SGAMOD           ;RE INIT DEVICE, SO UGETF WILL SET FIRST FREE\r
2372                                 ; BLOCK BECAUSE NO LOOKUP OR ENTER DONE\r
2373         JRST SGERRA             ;DEVICE NOT AVAILABLE\r
2374         UGETF 0,SGAHED          ;GET FIRST FREE BLOCK(MEANINGFUL ONLY IF DTA)\r
2375                                 ; CAUSE ENTER TO ASSIGN FIRST LOBCK OF FILE\r
2376                                 ; AS LOWEST FREE BLOCK SO TENDMP CAN READ\r
2377         ENTER 0,SGANAM          ;ENTER FILE NAME IN DIRECTORY\r
2378         JRST SAVERR             ;DIRECTORY FULL OR PROTECTION FAILURE\r
2379         MOVE TAC,JOB41(JDAT)    ;SAVE USER UUO HANDLING JSR\r
2380         MOVEM TAC,JOBS41(JDAT)  ;IN UPPER PART OF JOB DATA AREA\r
2381 \f\r
2382         MOVE TAC,JOBDDT(JDAT)   ;SAVE DDT STARTING ADDRESS HIGHER UP IN JOB DATA AREA\r
2383         MOVEM TAC,JOBSDD(JDAT)  ;SO COMPRESS ALWAYS MOVES CODE DOWN\r
2384         HRROS USRHCU            ;FLAG THAT SAVE GET IS UNDER WAY\r
2385                                 ; SO THAT JOBHRL WILL NOT BE MODIFIED BY SETHGH RUOTINE\r
2386                                 ; TO USER'S HIGH SEG RELOCATION INFO. SINCE\r
2387                                 ; IT WILL CONTAIN COMPRESSION IOWD.\r
2388                                 ; COMPRESSION WILL ALWAYS MOVE DOWN\r
2389         HRRZ    TEM,JOBSA(JDAT) ;SAV START ADDRESS FOR 10DMP\r
2390         MOVEI   TAC,JOBSV(PROG) ;POINT TO 1ST DATA WORD\r
2391         MOVE    TAC1,[XWD PROG,JOBSDD] ;IT STARTS AT JOBSDD\r
2392         HLRE ITEM,SGADMP(PROG)  ;IOWD FOR THIS SIZE CORE(-LENGTH TO WRITE)\r
2393         MOVNS ITEM              ;POSITIVE LENGTH\r
2394         ADDI ITEM,JOBSVM        ;ADD IN FIRST LOC-1 TO WRITE=HIGHEST LOC TO WRITE\r
2395                                 ; TO MAKE END TEST\r
2396         HRLI    ITEM,PROG               ;USE PROG FOR RELOCATION\r
2397 CMPLP1: MOVEM   TAC,DAT         ;SAVE 1ST LOC FOR IOWD\r
2398         CAMLE   TAC1,ITEM        ;SEARCH FOR 1ST NON-0 WORD\r
2399         AOJA    TAC,CMPTHR        ;THROUGH\r
2400 \r
2401         SKIPN   @TAC1            ;THIS A DATA WORD?\r
2402         AOJA    TAC1,.-3        ;NO, KEEP LOOKING\r
2403         MOVNI   AC1,1           ;YES, AC1 WILL BE AN IOWD\r
2404         HRLI    AC1,-1(TAC1)    ;1ST LOCATION - 1\r
2405 CMPLP2: PUSH    TAC,@TAC1       ;SAVE A DATA WORD\r
2406         AOS     TAC1\r
2407         CAMGE   TAC1,ITEM       ;AT TOP?\r
2408         SKIPN   @TAC1           ;NO. NEXT WORD NON-0?\r
2409         JRST    .+2             ;NO. THROUGH THIS BLOCK\r
2410         SOJA    AC1,CMPLP2      ;COUNT THE WORD AND CHECK NEXT\r
2411         MOVSM   AC1,(DAT)       ;SAVE IOWD IN FRONT OF BLOCK\r
2412         AOJA    TAC,CMPLP1      ;LOOK FOR NEXT NON-0 BLOCK\r
2413 CMPTHR: HRLI    TEM,254000      ;SET A JRST C(JOBSA)\r
2414         MOVEM   TEM,-1(TAC)     ;AT END OF FILE\r
2415         SUBI    TAC,JOBSV(JDAT) ;COMPUTE WORD COUNT\r
2416         MOVNS   TAC             ;MAKE AN IOWD\r
2417         HRL     TAC,SGADMP(PROG) ;START ADDRESS\r
2418         MOVSM   TAC,SGALEN(PROG) ;IOWD FOR THE OUTPUT UUO\r
2419         MOVEI TAC,-2            ;FLAG THAT CORE HAS BEEN COMPRESSED\r
2420         HRLM TAC,USRHCU         ;KEEP LH NEG. COMMAND DECODER WILL EXPAND\r
2421                                 ; CORE ON START ,ODT,SAVE, REENTER,SSAVE IN CASE\r
2422                                 ; THIS SAE IO DOES NOT GO TO COMPLETION. (CONTROL C\r
2423                                 ; OR  DEVICE FULL, SO THAT CORE DOES NOT GET EXPANDED\r
2424 \f\r
2425         PUSHJ PDP,SGDOA         ;DO OUTPUT,RELEASE,FIND TTY\r
2426         OUTPUT 0,SGALEN         ;OUTPUT UUO EXECUTED BY SGDO\r
2427                                 ; RETURN HERE ONLY IF NO ERRORS\r
2428 SAVFIN: PUSHJ PDP,SGREL         ;RELEASE DEVICE AND FIND TTY\r
2429         JSP TAC,PHOLD           ;PRINT MESSAGE AND STOP JOB\r
2430         ASCIZ /JOB SAVED/\r
2431 SAVERR: MOVEI TAC,PRTERR        ;ERROR CORE IN CASE RUN UUO(PROTECTION ERROR)\r
2432                                 ; CHANGE TO DISK ERROR CODE IF DEV IS DSK\r
2433         PUSHJ PDP,SGRELL        ;CHANGE TO DISK ENTER ERROR CODE IF DSK\r
2434                                 ; RELEASE DEVICE AND RETURN TO USER(IF RUN UUO)\r
2435                                 ; OR FIND TTY=PRINT ?CRLF\r
2436         JSP TAC,PHOLD           ;PRINT MESSAGE AND STOP JOB\r
2437         ASCIZ /DIRECTORY FULL/\r
2438 \f\r
2439 ;THIS JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE\r
2440 ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY\r
2441 ;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR AC'S\r
2442 ;JOBPC IS SET TO STARTING ADDRESS OF JOB\r
2443 ;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN\r
2444 ;JOB DATA AREA:\r
2445 ;JOBPDP, JOBREL\r
2446 \r
2447 INTERNAL GETJOB\r
2448 \r
2449 GETJOB: JSP TAC1,SG1            ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)\r
2450         PUSHJ PDP,GETJB         ;GET THE JOB\r
2451         JSP TAC,PHOLD           ;RETURN ONLY IF EVERYTHING OK\r
2452         ASCIZ /JOB SETUP/\r
2453 \r
2454 ;THIS JOB GETS A JOB AREA FROM A RETRIEVAL DEVICE AND STARTS IT UP\r
2455 \r
2456 ;JOB HAS JUST A JOB DATA AREA ASSIGNED WHEN CONTROL GETS HERE\r
2457 ;THIS MONITOR JOB GETS A JOB AREA FROM A RETRIEVABLE DEVICE\r
2458 ;ASSIGNS CORE AND START\r
2459 \r
2460 INTERNAL RUNJOB\r
2461 \r
2462 RUNJOB: JSP TAC1,SG1            ;SETUP ACS, SETUP LOWER CORE(SGALEN,SGADMP)\r
2463         JRST URUN1              ;LH PF PC WORD=0(MSTART) SO LH OF TAC1=0 AFTER JSP\r
2464                                 ; PUT TAC1 AS FIRST ITEM ON PD LIST(JOBPN1)\r
2465                                 ; LH USED BY SGRELE ON ERROR TO SEE IF FROM USER\r
2466                                 ; AND LH ADDED TO START PC(JOBSA) BY URUN\r
2467 \f\r
2468 ;RUN UUO\r
2469 ;CALL:  MOVE AC,[XWD N,D]\r
2470 ;       CALL AC,[SIXBIT /RUN/]\r
2471 ;       ERROR RETURN            ;UNLESS LH=HALT(PRINT CONSOLE MESS, IF YES)\r
2472 ;       1K OK, TRANSFER TO C(JOBSA)+N FOR NEW PROGRAM\r
2473 ;       USERS ACS CLOBBERED SO CANNOT PASS DATA TO NEW PROGRAM\r
2474 \r
2475 ;WHERE: D/      DEVICE NAME\r
2476 ;       D+1/    FILE NAME\r
2477 ;       D+2/    FILE EXT OR 0 (LH SIXBIT)\r
2478 ;       D+3/    DATE ETC\r
2479 ;       D+4/    PROJECT,PROGRAMMER NO OR 0(CURRENT UFD OR DTA,MTA)\r
2480 ;       D+5/    HIGHEST LOC DESIRED(OR 0) ANALOGOUS TO RUN COMMAND\r
2481 ;               LH IS IGNORED(RATHER THAN ASSIGNING CORE TO HIGH SEG)\r
2482 \r
2483         INTERN URUN\r
2484         EXTERN JOBSA\r
2485 \r
2486 URUN:   PUSHJ PDP,RESET         ;RELEASE DEVICES\r
2487                                 ; WARNING! THIS GOES VERY DEEP IN\r
2488                                 ; PUSHDOWN, SEE MOD 518\r
2489                                 ; (AC UUO PRESERVED IN RESET)\r
2490         MOVE TAC,@UUO           ;RESTORE CONTENTS OF USERS'S CALLING AC\r
2491         PUSHJ PDP,GETARG        ;GET 6 ARGS FROM USER AND STORE\r
2492                                 ; SAVE STARTING ADDRESS INCREMENT(LH OF TAC)\r
2493                                 ; AND USER AC NUMBER(IN CASE OF ERROR RETURN)\r
2494                                 ; SETUP ACS,DEVDAT TO DDB\r
2495         MOVE TAC,SGANAM(PROG)   ;STORE FILE NAME FOR LOW SEG\r
2496         MOVEM TAC,JBTPRG(ITEM)  ;FOR SYSTAT\r
2497 URUN1:  PUSHJ PDP,GETJB         ;GET BOTH LOW AND HIGH SEGMENTS\r
2498         HLRZ TAC1,(PDP)         ;GET STARTING ADDRESS INCREMENT(0 IF RUN COM)\r
2499 \r
2500 IFN FT2REL,<\r
2501         EXTERN CHKMED\r
2502         CAILE TAC1,1            ;IS START INCREMENT 0 OR 1?\r
2503         PUSHJ PDP,CHKMED        ;NO, CHECK TO SEE IF THIS IS SHARABLE SEG\r
2504                                 ; AND IF YES, SET MEDDLE BIT FOR THIS USER\r
2505                                 ; SO UWP CANNOT BE TURNED OFF AND CORE FOR HIGH SEG\r
2506                                 ; CANNOT BE INCREASED OR DECREASED (TAC1 PRESERVED)\r
2507 >\r
2508         ADDB TAC1,JOBSA(JDAT)   ;ADD STARTING ADDRESS TO BOTH\r
2509                                 ; SO THAT <CONTROL>C START WILL START\r
2510                                 ; PROGRAM AT SAME STARTING ADDRESS\r
2511         HRLI TAC1,USRMOD        ;SET USER MODE BIT IN PC\r
2512         PUSH PDP,TAC1           ;PUT ON PD LIST\r
2513         JRST USRXIT             ;AND GO TO RETURN TO USER AS IF FROM UUO\r
2514 \f\r
2515 ;UUO TO GET JUST HIGH SEG AND RETURN TO USER\r
2516 ;CALL IS THE SAME AS FOR RUN UUO EXCEPT THAT OK RETURN IS SKIP RETURN\r
2517 ;IF ERROR RETURN HAS HALT IN LH, STANDARD CONSOLE MESSAGE IS PRINTED AND JOB STOPPED\r
2518 \r
2519         INTERN UGTSEG,UGTERR\r
2520 UGTSEG:\r
2521         \r
2522 IFN FT2REL,<\r
2523         EXTERN UGETHI\r
2524         JRST UGETHI             ;IN SEGCON\r
2525 >\r
2526 UGTERR: MOVEI TAC,ILUERR        ;ILLEGAL UUO ERROR CORE\r
2527         PUSHJ PDP,SGRELE        ;SEE IF USER WANTS ERROR\r
2528         JRST UUOERR             ;NO, PRINT ILLEGAL UUO\r
2529 \f\r
2530 ;ROUTINE TO SETUP ACS, RESET IO, AND SETUP LOWER CORE LOCATIONS\r
2531 ;FOR SAVE AND GET(SGALEN SET IO IOWD OR PP IF DTA OR DSK)\r
2532 ;SGADMP SET TO IOWD FOR THIS SIZE CORE\r
2533 ;CALL:  JSP TAC1,SG1\r
2534 ;       ALWAYS RETURN HERE, UNLESS DEVICE NOT FOUND\r
2535 ;       DEVDAT SETUP TO DEVICE DATA BLOCK(BUT NOT INITED, UNLESS FT2REL=0)\r
2536 ;       SO THAT INIT NOT NECESSARTY IF SEG ALREADY KNOWN(NO DTA QUEUING)\r
2537 ;       DEVICE CHARACTERISTICS WORD(DEVMOD) RETURNED IN AC TAC1\r
2538 ;       IF DISK SYSTEM\r
2539 \r
2540         INTERN SG1,SG3,SG4              ;CALLED FROM SEGCON\r
2541         EXTERN USRDDT,USRREL,JOBSAV,JOBFF,CPOPJ1\r
2542         EXTERN TTYFNU,JOBSVM,IADRCK,SAVDMP\r
2543 \r
2544 SG1:    JSP TAC,MONSTR          ;SETUP PROG.PDP,JDAT,ITEM=JOB NUMBER\r
2545                                 ; PUT TAC1 ON END OF PD LIST(EXEC MODE PC,\r
2546                                 ; SO ERROR MESSAGES WILL ALWAYS PRINT(SEE SGRELE)\r
2547 \r
2548 SG2:    PUSHJ PDP,RESET         ;RELEASE ALL DEVICES\r
2549 SG2A:   MOVEI TAC,DR            ;DUMP MODE 16(DUMP BY RECORDS\r
2550                                 ; IN CASE THIS IS MAGTAPE)\r
2551 \r
2552         MOVEM TAC,SGAMOD(PROG)  ;STORE FOR OPEN UUO\r
2553         SETZM SGAEND(PROG)      ;0 END OF DUMPE MODE COMMAND LIST\r
2554         SETZM SGAREN+1(PROG)    ;FOR DELETE\r
2555         SETZM SGAREN+2(PROG)    ;FOR DELETE\r
2556         HLLZS JOBCOR(JDAT)      ;0 THIRD ARG IN JOBDATA AREA(SO CHKARG WILL\r
2557                                 ; WORD ON FIRST CALL(SAVE AND GET)\r
2558         SETZM SGAHED(PROG)      ;CLEAR BUFFER HEADER ARG, FOR OPEN UUO\r
2559 IFE FT2REL,<\r
2560         OPEN 0,SGAMOD           ;TRY TO ASSIGN DEVICE, SINCE IT MUST BE DONE\r
2561 >\r
2562 IFN FT2REL,<\r
2563         MOVE TAC,SGADEV(PROG)   ;PHYSICAL OR LOGICAL DEVICE NAME\r
2564         PUSHJ PDP,DEVSRC        ;FIND DEVICE AND SETUP DEVDAT TO DDB\r
2565                                 ; DO NOT INIT DEV SINCE IO MAY NOT BE NECESSARY\r
2566                                 ; DO NOT WANT TO WAIT IN DTA SYSTEM\r
2567                                 ; TAPE QUEUE IN 10/40 SYS\r
2568 >\r
2569         JRST SGERRA             ;NOT AVAILABLE\r
2570                                 ;DEVICE INITED(OR FOUND)\r
2571 \f\r
2572 ;COMMON EXIT FROM SAVHGH AND GETHGH ROUTINES(HIGH SEG SAVE AND GET)\r
2573 ;SO THAT SGA... LOCATIONS ARE RESTOREED TO ORIGINAL VALUES FOR LOW SEG\r
2574 \r
2575 SG3:    MOVE TAC,JOBFF(JDAT)    ;FIRST FREE LOC IN JOB(SET FROM LH OF\r
2576                                 ; JOBSA WHICH IS SET BY LOADER\r
2577         MOVEI TAC,-1(TAC)       ;MAKE LAST LOC TO SAVE OR GET(MAKE 0=777777)\r
2578         SKIPN USRDDT            ;USER DDT IN USE(IF YES, SAVE ALL OF CORE\r
2579                                 ; SO HIS SYMBOLS WILL BE INCLUDED\r
2580         PUSHJ PDP,IADRCK        ;NO, ADDRESS TO SMALL OR TO LARGE?\r
2581         MOVE TAC,USRREL         ;YES, DUMP ALL OF CORE RATHER THEN GIVE\r
2582                                 ; ADDRESS CHECK MESSAGE-HIGHEST REL.ADR.\r
2583         MOVNS TAC               ;-HIGHEST ADR TO SAVE TO GET\r
2584         ADDI TAC,JOBSVM         ;LOWER CORE NOT DUMPED\r
2585         HRLI TAC,JOBSVM         ;IE FIRST LOC-1 TO BE DUMPED\r
2586         MOVSM TAC,SGADMP(PROG)  ;STORE IOWD WORD OF THIS SIZE CORE\r
2587 SG4:\r
2588 IFN FTDISK,<\r
2589         MOVE TAC1,DEVMOD(DEVDAT)        ;RETURN DEVICE CHARACTERISTICS(IF DISK SYS)\r
2590         TLNE TAC1,DVDSK         ;IS THIS DEVICE A DISK?\r
2591 \r
2592         MOVS TAC1,SGAPPN(PROG)  ;YES. MAKE SURE FORTH WORD IS PROJ,PROG NO.\r
2593 >\r
2594         MOVSM TAC,SGALEN(PROG)  ;NO. MAKE SURE FORTH WORD IS IOWD FOR DECTAPE\r
2595                                 ; SINCE DECTAPE USES RH TO COMPUTE LENGTH IN K\r
2596                                 ; FOR BOTH SAVE AND GET\r
2597         SKIPN TAC,SGAEXT(PROG)  ;DID USER SPECIFY AN EXTENSION ?\r
2598         MOVSI TAC,SAVDMP        ;NO, USE .SAV OR .DMP\r
2599         MOVEM TAC,SGAEXT(PROG)  ;AND STORE FOR LOOK UP ORENTER\r
2600         POPJ PDP,\r
2601 \r
2602 ;ERROR ON INIT OR DEVICE SEARCH\r
2603 \r
2604         INTERN SGERRA           ;CALLED FROM SEGCON\r
2605 \r
2606 SGERRA: JUMPE DEVDAT,SGERR1     ;WAS DEVICE FOUND, BUT JUST UNAVAILABLE?\r
2607         MOVEM DEVDAT,(PDP)      ;YES, SAVE DDB ADDRESS FOR MESSAGE(ERNAM)\r
2608         MOVEI TAC,DNAERR        ;ERROR CODE IN CASE RUN UUO(DEVICE NOT AVAILABLE)\r
2609         PUSHJ PDP,SGRELE        ;RETURN TO USER IF RUN UUO\r
2610                                 ; OR FIND TTY AND PRINT ?CRLF\r
2611         PUSHJ PDP,ERNAM         ;PRINT DEVICE NAME USING (PDP)\r
2612         JSP TAC,PHOLD           ;START TTY AND STOP JOB\r
2613         ASCIZ / NOT AVAILABLE/\r
2614 \r
2615 SGERR1: MOVEI TAC,NSDERR        ;ERROR CODE IN CASE RUN UUO(NO SUCH DEVICE)\r
2616         PUSHJ PDP,SGRELE        ;RETURN TO USER IF RUN UUO\r
2617                                 ; OR FIND TTY AND PRINT ?CRLF\r
2618         JSP TAC,PHOLD           ;START TTY AND STOP JOB\r
2619         ASCIZ /NO SUCH DEVICE/\r
2620 \f\r
2621 ;ROUTINE TO GET FILE FROM DEVICE(LOW AND/OR HIGH)\r
2622 ;CALL:  ACS JDAT,PROG,PDP,DEVDAT SETUP\r
2623 ;       MOVE ITEM,JOB NUMBER\r
2624 ;       IFN FTDISK,<MOVE TAC1,DEVMOD(DEVDAT)    ;DEVICE CHAR.>\r
2625 ;       PUSHJ PDP,GETJB\r
2626 ;       RETURN ONLY IF EVERYTHING OK\r
2627 \r
2628 EXTERNAL JOBCOR,JOB,CPOPJ,JOBS41,JOB41\r
2629 \r
2630 GETJB:\r
2631 IFN FT2REL,<\r
2632         EXTERN GETHGH\r
2633         PUSHJ PDP,GETHGH        ;SEE IF HIGH SEG ALREADY EXISTS AND BEING SHARED\r
2634                                 ; IF NOT, TRY TO LOOKUP AND READ IN HIGH FILE\r
2635                                 ; IF .SHR DOESN'T EXIST, TRY .HGH, IF NEITHER-SKIP RETURN\r
2636                                 ; TAC1=DEVMOD(DEVDAT) IF DISK(DEV CHAR.)\r
2637         JRST LOWFIN             ;HIGH SEG NOW IN CORE AND NO LOW FILE NEEDED\r
2638                                 ; LOW FILE NEEDED\r
2639                                 ; EITHER BECUASE NOHIGH SEG\r
2640                                 ; ORHIGH SEG ALSO NEEDS LOW FILE\r
2641 >\r
2642         LOOKUP 0,SGANAM         ;LOOKUP LOW SEG FILE(EXT=SAV,DMP OR LOW(IF HIGH SEG\r
2643                                 ; REQUIRES LOW SEG AND USER DID NOT TYPE EXT)\r
2644                                 ; MODE=SAVMOD SO DECTAPE SERVICE WILL RETURN\r
2645                                 ; IOWD IN E+3(TEMPORARY)\r
2646         JRST NOFILE             ;GO PRINT FILE.EXT NOT FOUND\r
2647         HLRE TAC1,SGALEN(PROG)  ;-NO. OF WORDS IN FILE\r
2648         PUSHJ PDP,CKIOWD        ;CHECK USER'S SUPPLIED CORE ARG TO MAKE SURE NOT\r
2649                                 ;TOO SMALL, RETURN LARGER OF FILE SIZE OR CORE ARG\r
2650         PUSHJ PDP,GETCOR        ;OK, TRY TO GET CORE\r
2651         MOVE TAC1,DEVMOD(DEVDAT)        ;DEVICE CHARACTERISTICS\r
2652         MOVNS TAC\r
2653         ADDI TAC,JOBSVM         ;-WORD COUNT FOR ALL USERS CORE\r
2654         TLNE TAC1,DVMTA         ;MAG TAPE?\r
2655         HRLM TAC,SGALEN(PROG)   ;YES, USE USER-SPECIFIED CORE ARGUMENT\r
2656         HRRZS JOBPD1(JDAT)      ;TURN OFF USER MODE PC FLAG IN CASE THIS\r
2657                                 ;IS A RUN UUO,SO ERRORS WILL NOT TRY TO RETURN\r
2658 \r
2659         PUSHJ PDP,SGDO          ;READ IN FILE INTO LOW SEGMENT\r
2660         INPUT 0,SGALEN          ;EXECUTED FROM SGDO\r
2661         MOVE TAC,JOBS41(JDAT)   ;RESTORE USER UUO JSR LOC\r
2662         MOVEM TAC,JOB41(JDAT)   ;SAVED BY SAVE\r
2663 LOWFIN: HRRZ TAC,JOBCOR(JDAT)   ;CORE ARG FROM PREVIOUS SAVE(THIS MONITOR\r
2664                                 ; ALWAYS STORES SOMETHING)\r
2665         SKIP TAC                ;IS THIS AN OLD FORMAT FILE WITH NO CORE ARG TO SAVE?\r
2666         MOVE TAC,USRREL         ;YES, USE ASSIGNMENT MADE WEN LOW FILE READ IN\r
2667         PUSHJ PDP,CKSARG        ;RETURN ONLY IF USER'S SUPLLIED ARG IS 0 OR NOT\r
2668                                 ; SMALLER THAN SAVE CORE ARG. RETURN LARGER\r
2669         PUSHJ PDP,GETCOR        ;TRY TO GET THIS AMOUNT OF CORE\r
2670         MOVE TAC,USRREL         ;HIGHEST LOC ASSIGNED TO LOW SEG\r
2671         HRRM TAC,JOBCOR(JDAT)   ;SET INITIAL CORE ASSIGNMENT IN JOB DATA AREA FOR\r
2672                                 ; USER TO USE TO RESET CORE TO INITIAL SETTING WHEN\r
2673                                 ; PROGRAM IS RESTARTED\r
2674                                 ; FALL INTO SGREL\r
2675 ;ROUTINE TO RELEASE DEVICE AND FIND TTY\r
2676 INTERN SGREL\r
2677 \r
2678 SGREL:  SKIPN   DEVDAT,USRJDA   ;HAS CHANNEL BEEN RELEASED ALREADY?\r
2679         JRST    SGREL2          ;YES, FIND TTY AND WAIT FOR OUTPUT TO FINISH\r
2680         PUSH    PDP,T4          ;NO,\r
2681         MOVE    TAC1,DEVMOD(DEVDAT)\r
2682         TLNE    TAC1,DVMTA      ;MAGTAPE?\r
2683         TLNN    DEVDAT,INPB     ;YES, WAS AN INPUT DONE?\r
2684         JRST    SGREL1          ;NO\r
2685         CLOSE   0,CLSOUT        ;YES, CLOSE MTA INPUT\r
2686         STATO   0,IOTEND+IODEND ;AT END OF APTE?\r
2687         MTAPE   0,16            ;NO SKIP TO EOF\r
2688 SGREL1: RELEASE 0,              ;NO RELEASE DEVICE\r
2689         POP     PDP,T4\r
2690 SGREL2:\r
2691         JRST    TTYFNU          ;FIND TTY FOR CURRENT USER\r
2692 \f\r
2693 ;ROUTINE TO EXECUTE DUMP MODE COMMAND LIST SETUP IN SGALEN(R)\r
2694 ;AND CHECK FOR ERRORS. USED ONLY TO READ LOW FILE.\r
2695 ;CALL:  PUSHJ P,SGDO\r
2696 ;       INPUT 0,SGALEN OR OUTPUT 0,SGALEN\r
2697 ;       OK RETURN(NO ERRORS)\r
2698 ;SGDOA CALLED FROM SAVE, IT HAS ALREADY SET LH OF USRHCU=-2\r
2699 ;TO INDICATE CORE IS COMPRESSED\r
2700 \r
2701         EXTERN  USRHCU,USRJDA,JOBSA,JOBDDT,JOBSDD,JOBSD1,JOBSAV,JOBCOR\r
2702         EXTERN  JOBSV,JOBSV3,JOBSVD,JOBSDP\r
2703 \r
2704 SGDO:   HRROS   USRHCU          ;SET LH OF USRCHU-1 AS A FLAG TO INDICATE SAVE GET\r
2705                                 ; LOW FILE IO IN PROGRESS, SO MONITOR WILL\r
2706                                 ; NOT STORE HIGH SEG PROTECTION IN JOBHRL WHICH\r
2707                                 ; HAS IOWD FOR ZERO COMPRESSION\r
2708 SGDOA:  XCT  @(PDP)             ;EXECUTE INPUT OR OUTPUT UUO\r
2709         MOVE    ITEM,JOB                ;READ INTO PROTECTED PART OF JOB DATA AREA\r
2710         PUSHJ   PDP,EXPAND      ;EXPAND CORE IMAGE\r
2711         JRST    ADRERR          ;ADDRESS CHECK, PRINT MESSAGE AND STOP JOB\r
2712         MOVE    TAC1,JOBDDT(PROG) ;COPY DDT STARTING ADR\r
2713         MOVEM   TAC1,USRDDT     ;INTO MONITOR PROTECTED AREA(IN CASE THIS IS GET)\r
2714         SETZM   USRHCU          ;FLAG THAT SAVE-GET IO FINISHED AND CORE EXPANDED\r
2715         AOS (PDP)               ;SKIP OVER UUO IN CALLING SEQUENCE\r
2716 \r
2717 ;ROUTINE TO CHECK FOR IO ERRORS(CALLED FROM SEGCON)\r
2718 ;CALL:  MOVE F,DEVICE DATA BLOCK ADDRESS\r
2719 ;   PUSHJ P,SGIOCK\r
2720 ;   RETURN ONLY IF NO ERRORS\r
2721 \r
2722         INTERN  SGIOCK\r
2723 \r
2724 SGIOCK: MOVE T4,DEVIOS(DEVDAT) ;IO STATUS WORD FOR THIS DEVICE\r
2725         TRNN T4,IOBKTL!IODTER!IODERR!IOIMPM   ;ANY ERRORS ON SAVE-GET DEVICE?\r
2726         POPJ PDP,               ;NO, GIVE OK RETURN\r
2727         MOVEI TAC,TRNERR        ;YES, ERROR CODE IN CASE THIS IS RUN UUO\r
2728                                 ; (TRANSMISSION ERROR)\r
2729         PUSHJ PDP,SGRELE        ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO\r
2730                                 ; OF FIND TTY AND PRINT ?CRLF\r
2731         JSP TAC,PHOLD           ;START TTY AND STOP JOB\r
2732         ASCIZ /TRANSMISSION ERROR/\r
2733 \f\r
2734 ;ROUTINE TO EXPAND CORE AFTER A SAVE(LOW SEG ONLY)\r
2735 ;CALL:  MOVE DEVDAT,DEVICE ADR.\r
2736 ;       MOVE PROG,JOBADR.\r
2737 ;       MOVE ITEM,JOB NUMBER\r
2738 ;       PUSHJ PDP,EXPAND\r
2739 ;       ERROR RETURN, ADR, CHECK, OR NEED CORE BUT NOT CURRENT USER(COMMAND\r
2740 ;                       DECODER EXPANDING AFTER USER HAS REDUCED CORE)\r
2741 ;       OK RETURN, CORE EXPANDED\r
2742 ;CALLED FROM SAVE AND COMMAND DECODER\r
2743 ;START,CSTART,DDT,REENTER,SAVE,SSAVE COMMANDS IF CORE STILL COMPRESSED\r
2744 \r
2745 EXPAND: HLRE AC3,SGALEN(PROG)   ;-LENGTH OF FILE\r
2746         MOVNS AC3               ;-LENGTH OF FILE\r
2747         ADDI AC3,JOBSVM         ;ADD FIRST LOC-1 TO FORM HIGHEST LEGAL ADR.\r
2748         HRLI AC3,PROG           ;PUT PROG IN LH FOR COMPARE\r
2749                                 ; AC3 SET FOR ADDRESS CHECKING BELOW\r
2750         SKIPL   TAC,JOBSV(PROG) ;IF FIRST LOC IS POSITIVE\r
2751         JRST    SGDO1           ;OLD FORMAT, SO DONT EXPAND\r
2752         HRRZS   TAC             ;LOOK AT 1ST WORD OF FILE\r
2753         CAILE   TAC,JOBDDT      ;IS IT BELOW JOBJDA?\r
2754         JRST    EXPND1           ;NO. NEW COMPRESSED FORMAT\r
2755         CAIE    TAC,JOBSAV      ;IS JOBDDT THE DATA WORD?\r
2756         JRST EXPND1             ;NO. EXPAND\r
2757         SKIPN JOBSV3(JDAT)      ;IS THE SAVE FILE FROM CONVERT?\r
2758                                 ; CONVERT DOES NOT ZERO COMPRESS\r
2759                                 ; IT JUST WRITES ENTIRE FILE WITHH 1 IOWD IN FRONT\r
2760         SOJA AC3,SGDO1          ;YES, GO BLT DATA DOWN AS IF OLD DISK SAVE FILE\r
2761                                 ; (NON-COMPRESSED)\r
2762         HRROI   TAC,JOBSD1      ;YES. CHANGE TO IOWD 1,JOBSDD\r
2763         EXCH    TAC,JOBSV(PROG) ;ZEP, THE IOWD IS FIXED\r
2764         HLRES TAC               ;WORD COUNT OF IOWD\r
2765         AOJE TAC,EXPND1         ;JUST 1 DATA WORD - THROUGH\r
2766         MOVSI TAC,1(TAC)        ;MAKE IOWD N-2,JOBSAV\r
2767         JUMPE TAC,EXPZ\r
2768         HRRI TAC,JOBSAV         ;SO NEXT DATA WDS WILL BE SKIPPED\r
2769         MOVEI TAC1,JOBSV(PROG)\r
2770         MOVEM TAC,2(TAC1)       ;STORE IN COMPRESSED DATA\r
2771         JRST EXPND1\r
2772 EXPZ:   MOVSI TAC,-2\r
2773         HLLM TAC,JOBSV(PROG)\r
2774 \f\r
2775 ;COME HERE TO DO THE ACTUAL EXPANSION OF A FILE\r
2776 EXPND1: MOVE TAC,[XWD PROG,JOBSV] ;IT WAS READ INTO JOBSV\r
2777         MOVE    TAC,@TAC        ;FIRST IOWD\r
2778 EXPLP1: HRRZ    AC1,TAC1        ;ADDRESS OF IOWD\r
2779         CAIGE   AC1,JOBSAV      ;LEGAL?\r
2780         AOJA    AC1,TOOLOW      ;NO. DELETE DATA WHICH IS TO LOW\r
2781         HLRE    AC1,TAC1        ;YES. GET WORDCOUNT\r
2782         MOVNS   AC1             ;+N\r
2783         HRLM    AC1,TAC1        ;CONVERT IOWD TO +N IN LH\r
2784         ADDI    TAC,1(AC1)       ;ADDRESS OF NEXT IOWD.\r
2785         CAMLE   TAC,AC3         ;IN BOUNDS?\r
2786         JRST    SGDOER          ;NO. COMPLAIN\r
2787         ADDI    TAC1,(AC1)      ;YES. CHANGE RH OF IOWD\r
2788         EXCH    TAC1,@TAC       ;MAKE IT XWD +N,A+N-1 AFTER DATA BLOCK\r
2789         JUMPL   TAC1,EXPLP1     ;CONTINUE IF NEXT THING IS AN IOWD\r
2790         PUSH    PDP,TAC         ;SAVE DATA LOCATION\r
2791         HRRZ    TAC,@TAC          ;TOP REAL LOCATION NEEDED\r
2792 \r
2793         TRO     TAC,1777        ;MAKE IT NK-1\r
2794 \r
2795         HLRZ TAC1,PROG          ;PRESENT SIZ OF LOW SEG\r
2796         CAMG TAC,TAC1           ;IS THERE ENOUGH?\r
2797         JRST EXPCOR             ;YES.\r
2798         CAME ITEM,JOB           ;NO, IS TIS THE CURENT JOB?\r
2799         JRST SGDOER             ;NO, GIVE ERRROR RETURN, MUST BE COMMAND DECODER\r
2800                                 ; DOING EXPAND AFTER USER HAS REDUECED CORE\r
2801         PUSHJ   PDP,GETCOR      ;YES. GET IT\r
2802 EXPCOR: POP     PDP,TAC1\r
2803         MOVEI   AC1,@TAC1        ;TOP  DATA LOC\r
2804         HRLI    AC1,1(AC1)      ;SET TO ZERO TO TOP OF CORE\r
2805         HRRI    AC1,2(AC1)\r
2806         SETZM   -1(AC1)\r
2807         HRLI    TAC,PROG        ;RELOCATE TOP LOC OF JOB\r
2808         BLT     AC1,@TAC        ;ZAP, CORE IS 0 FROM HERE ...\r
2809         HRROI   TAC,@TAC1       ;FORM DATA POINTER\r
2810 EXPLP2: HRRZ    AC1,(TAC)       ;TO DATA POINTER\r
2811         ADDI    AC1,(PROG)      ;RELOCATE\r
2812         HLRZ    AC2,(TAC)       ;WORD COUNT\r
2813         SUBI    TAC1,1(AC2)     ;POINT TAC1 TO PREVIOUS IOWD\r
2814         SETZM   (TAC)           ;ZERO THIS IOWD\r
2815         SOSA    TAC             ;POINT TO DATA\r
2816 EXPLP3: SOS     AC1\r
2817         CAIGE AC1,JOBSDD(PROG)  ;DON'T STORE DATA BELOW JOBSDD\r
2818         SOSA TAC\r
2819         POP     TAC,(AC1)       ;MOVE A DATA WORD\r
2820         SETZM   1(TAC)          ;ZERO WHERE IT CAME FROM\r
2821         SOJG    AC2,EXPLP3              ;LOOP IF MORE DATA\r
2822         CAMLE   TAC1,[XWD PROG,JOBSV] ;THROUGH?\r
2823         JRST    EXPLP2          ;NO, DO NEXT BLOCK\r
2824         EXCH    AC2,JOBSDD(PROG) ;YES, ZERO JOBSDD\r
2825         MOVEM AC2,JOBDDT(JDAT)  ;SET USER DDT STR ADR\r
2826         JRST SGDO2              ;AND SETUP USRDDT IN MONITOR PROTECTED\r
2827                                 ; FROM THIS USER\r
2828 \f\r
2829 ;THIS ROUTINE WILL DELETE ALL DATA FROM A COMPRESSED FILE\r
2830 ;WHICH IS BELOW JOBSOD (PROBABLY WRITTEN BY TENDUMP)\r
2831 \r
2832 TOOLOW: HLRE    AC2,@TAC        ;WORDCOUNT OF OFFENDING IOWD\r
2833         SUB     AC1,AC2         ;ADDRESS+N\r
2834         CAIG    AC1,JOBSDD      ;IS ANY DATA IN IT LEGAL?\r
2835         AOJA    TAC,NXIOWD      ;NO, TEST NEXT IOWD\r
2836         SUBI    AC1,JOBSDD      ;YES, NUMBER OF WORDS TO KEEP\r
2837         MOVNS   AC2             ;TOTAL NUMBER OF WORDS\r
2838         SUB     AC2,AC1         ;NUMBER OF WORDS TO DROP\r
2839         HRLS    AC2             ;INTO BOTH HALVES\r
2840         ADD     AC2,@TAC        ;NEW IOWD FOR ONLY GOOD DATA\r
2841         ADDI    TAC,(AC2)       ;POINT TAC TO LAST BAD DATA LOC\r
2842         MOVEM   AC2,@TAC        ;STORE UPDATED IOWD OVER IT\r
2843         JRST    IOWBLT          ;GO BLT OVER BAD DATA\r
2844 NXIOWD: SUB     TAC,AC2         ;POINT TAC TO NEXT IOWD\r
2845         HRRZ    AC1,@TAC        ;GET ADDRESS\r
2846         CAIGE   AC1,JOBSD1      ;LEGAL?\r
2847         AOJA    AC1,TOOLOW      ;NO, AT LEAST PART OF THE DATA IS LOW\r
2848 IOWBLT: MOVSI   TAC,@TAC        ;YES, KEEP THE ENTIRE IOWD DATA\r
2849         HRRI    TAC1,JOBSV(PROG) ;TAC1 IS A BLT POINTER\r
2850         SUBI    TAC,JOBSV       ;RH OF TAC IS AMOUNT BEING DELETED\r
2851         SUBI    AC3,(TAC)       ;AC3 POINTS TO TOP OF DATA READ IN-(N)\r
2852         BLT     TAC1,@AC3       ;MOVE ONLY GOOD DATA DOWN\r
2853         JRST    EXPND1          ;GO EXPAND THE GOOD DATA\r
2854 \f\r
2855 SGDO1:  MOVEI TAC,JOBDDT(PROG)  ;MOVE EVERYTHING DOWN )MUST BE NON-COMPRESSED DSK FILE\r
2856         HRLI TAC,JOBSVD(TAC)    ;OR CONVERT SAVE FILE\r
2857         SKIPGE JOBSV(JDAT)      ;IS THIS CONVERT FILE(FIRST WORD IS IOWD)?\r
2858         HRLI TAC,JOBSDP(TAC)    ;YES, ALSO SKIP OVER IOWD\r
2859         SUBI AC3,JOBSVD\r
2860         BLT TAC,@AC3\r
2861 SGDO2:  AOSA (PDP)              ;SET FOR OK RETURN\r
2862 SGDOER: POP PDP,TAC\r
2863         SETZM JOBHCU(JDAT)      ;CLEAR LH AND SET HIGHEST USER CHAN, IN\r
2864                                 ; USE TO 0(WHERE IT SHOULD BE ANYWAY)\r
2865         POPJ PDP,               ;ERROR RETURN OR OK RETURN\r
2866 \f\r
2867 ;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK TO SEE IF 0\r
2868 ;OR GREATER THAN OR EQUAL TO IOWD USED TO SAVE OR GET FILE\r
2869 ;CALL:  HLRE TAC1,-NO. OF WORDS IN FILE\r
2870 ;       PUSHJ PDP,CKIOWD\r
2871 ;       RETURN WITH LARGER OF 2 POSITIVE NOS. IN TAC(1777 ORED IN)\r
2872 ;       DO NOT RETURN IF CORE ARG SUPLLIED BY USER IS TOO SMALL\r
2873 ;CALLED FROM SAVE AND GET\r
2874 \r
2875         EXTERN JOBSVM\r
2876 \r
2877 CKIOWD: MOVEI TAC,JOBSVM        ;FIRST LOC-1 READ OR WRITTEN IN USER AREA\r
2878         HRRM TAC,SGALEN(PROG)   ;RESTORE RH TO JOBSAV AFTER LOOKUP\r
2879         SUB TAC,TAC1            ;HIGHEST LOC=FIRST LOC-1+LENGTH OF FILE\r
2880                                 ; FALL INOT CHSARG\r
2881 \r
2882 ;ROUTINE TO CHECK USER SUPPLIED CORE ARG AND CHECK IF 0\r
2883 ;OR GREATER THAN OR EQUAL TO CORE ARG FOR PREVIOUS SAVE\r
2884 ;CALL:  HRRZ TAC,JOBCOR(JDAT)   ;WRITTEN WHEN FILE SAVED\r
2885 ;       PUSHJ PDP,CKSARG\r
2886 ;       RETURN WITH LARGER OF 2 IN AC TAC, ONLY IF USER ARG NOT TOO SMALL\r
2887 ;CALLED ONLY FROM GET AFTER JOB DATA AREA LOADED FROM FILE(JOBCOR) OR HIGH SEG\r
2888 \r
2889         INTERN NROOM1           ;CALLED FROM SEGCON\r
2890 \r
2891 CKSARG: IORI TAC,1777           ;MAKE SURE 1K-1\r
2892         CAMG TAC,SGANEW(PROG)   ;IS USER SUPPLIED CORE ARG BIGGER?\r
2893         SKIPA TAC,SGANEW(PROG)  ;YES, RETURN IT\r
2894         SKIPN SGANEW(PROG)      ;NO, DID USER SUPPLY ONE\r
2895         POPJ PDP,               ;NO, RETURN LARGER OF TWO\r
2896 ;ROUTINE TO PRINTE #K OF CORE NEEDED\r
2897 ;CALL:  MOVE TAC,HIGHEST REL. USER ADR.\r
2898 ;       PUSHJ PDP, NROOM1\r
2899 ;       NEVER RETURN\r
2900 \r
2901 NROOM1: PUSH PDP,TAC            ;YES, ERROR, USER'S SUPPLIED CORE ARG TOO SMALL\r
2902 NOROOM: MOVEI TAC,NECERR        ;ERROR CODE IN CASE THIS IS RUN UUO(NOT ENOUGH CORE)\r
2903         PUSHJ PDP,SGRELE        ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO\r
2904                                 ; OR FIND TTY AND PRINT ?CRLF\r
2905         HRRZ TAC,(PDP)          ;GET AMOUNT OF CORE REQUESTED\r
2906         LSH TAC,-12             ;CONVERT TO NO. OF 1K BLOCKS-1\r
2907         PUSHJ PDP,DECP1         ;ADD 1 TO TAC AND PRINT DECIMAL\r
2908         JSP TAC,PHOLD           ;START TTY ADN STOP JOB\r
2909         ASCIZ /K OF CORE NEEDED/\r
2910 \f\r
2911 ;ROUTINE TO ASSIGN CORE FOR LOW  AND HIGH SEG\r
2912 ;CALL:  MOVE PROG,LOW SEG RELOCATION\r
2913 ;       HRR TAC,HIGHEST LOC DESIRED\r
2914 ;       PUSHJ PDP,GETCORE\r
2915 ;       RETURN ONLY IF ASSIGNED\r
2916 \r
2917         INTERN GETCOR\r
2918 \r
2919 GETCOR: HRRZM TAC,SGACOR(PROG)  ;SOTRE CORE ARG FOR CORE UUO IN USER AC\r
2920         PUSH PDP,TAC            ;SAVE IN CASE OF ERROR\r
2921         CALLI SGACOR,11         ;DO CORE UUO\r
2922         JRST NOROOM             ;NOT AVAILABLE, PRINT ERROR AND AMOUNT TRYING FOR\r
2923         JRST TPOPJ              ;OK, REMOVE TAC FROM PD LIST AND RETURN\r
2924 \f\r
2925 ;ROUTINE TO PRINT NOT A SAVE FILE IF WRONG FORMAT FILE DETECTED\r
2926 \r
2927 INTERN GETERR\r
2928 \r
2929 GETERR: MOVEI TAC,NSFERR        ;ERROR CODE IN CASE THIS IS RUN UUO(NOT SAVE FILE)\r
2930         PUSHJ PDP,SGRELE        ;RELEASE DEVICE AND ERROR RETURN TO USER IF RUN UUO\r
2931                                 ; OR FIND TTY AND PRINT ?CRLF\r
2932         JSP TAC,PHOLD           ;START TTY AND STOP JOB\r
2933         ASCIZ /NOT A SAVE FILE/\r
2934 \r
2935 ;ROUTINE TO PRINT FILE NOT FOUND ORNEEDS 2 RELOC REG\r
2936 \r
2937 INTERN NOFILE   ;CALLED FROM SEGCON\r
2938 \r
2939 NOFILE: MOVEI TAC,FNFERR        ;ERROR CODE IN CASE THIS IS RUN UUO(FILE NOT FOUND\r
2940                                 ; CHANGE ERROR CODE TO DISK ERROR CODE IF DEV IS DSK\r
2941         PUSHJ PDP,SGRELL        ;RETURN DISK LOOKUP OR ENTER ERROR CODE IF DSK  \r
2942                                 ; RELEASE DEVICE AND ERROR RETURN TO USER IF HE WANTED\r
2943                                 ; OR FIND TTY AND PRINT ?CRLF\r
2944         MOVE TAC1,SGANAM(PROG)  ;PRINT FILE NAME\r
2945         PUSHJ PDP,PRNAME\r
2946         PUSHJ PDP,PRPER         ;PRINT PERIOD\r
2947         HLLZ TAC1,SGAEXT(PROG)  ;PRINT EXTENSION\r
2948         PUSHJ PDP,PRNAME\r
2949         JSP TAC,PHOLD           ;START TTY AND STOP JOB\r
2950         ASCIZ / NOT FOUND/\r
2951 \f\r
2952 ;ROUTINE TO RELEASE DEVICE ON AN ERROR AND CHECK TO SEE\r
2953 ;IF THIS IS A MONITOR COMMAND OR USER UUO\r
2954 ;IF USER UUO, GIVE ERROR RETURN TO USER UNLESS THERE IS A HALT\r
2955 ;IN LH OF EROR RETURN WORD, IN WHICH CASE FIND TTY, PRINT ?CRLF\r
2956 ;AND RETURN TO CALLER SO CAN ADD MORE INFO TO ERROR MESSAGE AND STOP JOB\r
2957 ;CALL:  MOVEI TAC,ERROR CODE(DEFINED IN S.MAC)\r
2958 ;       PUSHJ PDP,SGRELE\r
2959 ;DO NOT RETURN TO CALLER IF USER WANTS ERROR RETURN ON RUN AND GETSEG UUOS\r
2960 \r
2961         EXTERN JOBPD1,JOBPD3,USRJDA\r
2962 \r
2963 SGRELL:                         ;LOOKUP OR ENTER FAILURE\r
2964 IFN FTDISK,<\r
2965         MOVE TAC1,DEVMOD(DEVDAT)        ;IS THIS DEVICE A DISK?\r
2966         TLNE TAC1,DVDSK\r
2967         HRRZ TAC,SGAEXT(PROG)   ;YES, RETURN DISK SERVICE ERROR CODE\r
2968 >\r
2969 SGRELE: MOVE TAC1,JOBPD1(JDAT)  ;GET FIRST PC ON PD LIST\r
2970         TLNN TAC1,USRMOD        ;IS IT IN USER MODE(IE USER UUO)?\r
2971 \r
2972         JRST SGRLE1             ;NO. MUST BE MONITOR COMMAND OR CALLED OVERLAYED\r
2973                                 ; RELEASE DEVICE, FIND TTY, AND RETURN TO CALLED\r
2974         PUSH PDP,TAC            ;SAVE ERROR CORE\r
2975         HRR UUO,TAC1            ;ADDRESS OF RETURN AFTER RUN OF GETSEG UUO\r
2976         PUSHJ PDP,GETWDU        ;GET ERROR RETURN WORD FROM RUN OR GETSEG UUO\r
2977         HLRZ TAC1,TAC           ;GET OP CODE\r
2978         POP PDP,TAC             ;RESTORE ERROR CODE\r
2979         CAIN TAC1,(HALT)        ;IS LH HALT?\r
2980         JRST SGRLE1             ;YES, RELEASE DEVICE,FIND TTY, AND RETURN TO CALLER\r
2981         HRR UUO,JOBPD3(JDAT)    ;NO, AC NUMBER OF RUN OR GETSEG UUO\r
2982         PUSHJ PDP,STOTAC        ;STORE ERROR NUMBER IN USER AC\r
2983         SKIPE USRJDA+0          ;DO NOT RELEASE CHANNEL 0 IF NOT INITED YET\r
2984                                 ; UUO HANDLER DOES NOT ALLOW THIS FROM EXEC MODE\r
2985         RELEAS 0,               ;RELEASE DEVICE(IF INITED)\r
2986         JRST USRXIT             ;AND RETURN TO USER TO HANDLE ERROR\r
2987 \r
2988 SGRLE1: PUSHJ PDP,SGREL         ;RELEASE DEVICE AND FIND TTY\r
2989         JSP TAC,CONMES          ;PRINT ?CRLF AND RETURN TO CALLER\r
2990                                 ; WHO WILL PRINT REST OF ERROR MESSAGE AND STOP JOB\r
2991         ASCIZ /?\r
2992 /\r
2993 COMEND: END             ;END OF COMCON\r
2994 \r