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