Added base source
[retro-software/dec/tops10/v4.5.git] / src / mongen.mac
1 TITLE MONGEN - DIALOG PROGRAM TO DEFINE A 10/40 OR 10/50 T.S. CONFIGURATION - V041\r
2 SUBTTL T.HASTINGS/TNM/TW/PFC/GDR/KWB/RCC   TS  05 MAR 71\r
3 VMONGN==040\r
4 \r
5 JOBVER=137\r
6         LOC JOBVER\r
7         EXP VMONGN\r
8                                 ;PUT VERSION NUMBER IN JOB DATA AREA\r
9                                         ;ALSO OUTPUT-SEE NEXT PAGE\r
10         RELOC\r
11 \r
12 ;HOW MONGEN IS ORGANIZED:\r
13 ;ALL SYMBOLS FOR CONFIG.MAC ARE DEFINED USING XP MACRO DEFINED IN S.MAC\r
14 ;XP DEFINES FIRST ARGUMENT TO BE EQUAL TO THE SECOND ARG\r
15 ;AND DECLARES THE FIRST ARG TO BE INTERVAL\r
16 \r
17 ;RULE:  ALL SYMBOLS ARE GENERATED ALL THE TIME, NO MATTER HOW DIALOG IS ANSWERED\r
18 ;WHY - SO USER READING CONFIG+COMMON NEVER NEEDS TO LOOK AT\r
19 ; MONGEN PROGRAM TO UNDERSTAND MONITOR\r
20 \r
21 ;THE ONLY LOCAL STORAGE IN MONGEN IS USED TO STORE ANSWERS\r
22 ;WHICH DETERMINE WHETHER A SECOND QUESTION IS TO BE ASKED\r
23 ;THESE TEMP STORAGE HAVE SAME NAME AS THE SYMBOL WHICH THEY ARE ASSOCIATED WITH\r
24 \r
25 ;RULE:  ALL SYMBOLS WHICH ARE GENERATED BY MONGEN, END IN LETTER N OR NN.\r
26 ;POLICY:  MONGEN IS STUPID AND SIMPLE MINDED.  IT KNOWS AS LITTLE ABOUT THE MONITOR\r
27 ;AS POSSIBLE. IT NEVER ADDS TWO ANSWERS TOGETHER, FOR EXAMPLE.  IT ALWAYS GENERATES\r
28 ;ALL SYMBOLS ALL THE TIME, NO MATTER HOW THE QUESTIONS ARE ANSWERED.  THE SYMBOL\r
29 ;VALUES ARE ALWAYS WHAT THE USER ANSWERED.  (AS LONG AS SYNTACTICALLY CORRECT).\r
30 ;IF DEC OFFERS JUST 2 DIFFERENT FORMS OF A DEVICE\r
31 ; ONLY ONE QUESTION WILL BE ASKED (EX. DECTAPE - 551 OR TD10).\r
32 ; HOWEVER TWO SYMBOLS ENDING IN N WILL BE GENERATED.\r
33 ; THIS IS SO A THIRD DEVICE CAN BE ADDED WITH MINIMAL\r
34 ; CHANGE TO BOTH MONGEN AND COMMON.\r
35 ;RULE:  ASK RELATED QUESTIONS (EG, 3-WAY BRANCH) SO THAT IF THE FIRST\r
36 ;ANSWER IS YES, THE SECOND QUESTION IS NOT ASKED.\r
37 ;RULE:  ASK THE QUESTIONS SO THAT YES IS THE CURRENT STANDARD RESPONSE.\r
38 ;FOR EACH VARIABLE OUTPUT, THERE IS A CORRESPONDING LOCATION IN MONGEN WITH SAME NAME\r
39 ;ALL SUCH LOCATIONS ARE INITIALLY SET TO 0 WHEN MONGEN IS STARTED\r
40 ;EACH QUESTION OR SET OF RELATED QUESTIONS HAS THE FOLLOWING FORM:\r
41 ; ONE OR MORE QUESTIONS FOLLOWED BY OUTPUT OF THE APPROPRIATE MACRO SOURCE.\r
42 ; THE FIRST QUESTION IN A SEG ARE OF FORM TAG1,TAG2,ECT.\r
43 ; ALL JUMPS TO OTHER QUESTIONS IN SEG ARE OF FORM TAG1,TAG2, ETC.\r
44 ; THE OUTPUT SECTION OF A SEG IS LABELED TAGOUT:  EVEN THOUGH IT MAY\r
45 ; NEVER BE JRSTED TO.  NOTE:  THERE ARE NO OTHER TAGS IN OUTPUT SECTION\r
46 ; BECAUSE ALL SYMBOLS ARE ALWAYS OUTPUT, SO THERE IS NO BRANCHING IN OUTPUT SECTION.\r
47 \r
48 \r
49 ;ANY TTY OUTPUT ENCLOSED IN []'S WILL BE TYPED ONLY IF LONG DIALOG IS IN EFFECT\r
50 \f;ACS\r
51 P=17                            ;PUSHDOWN POINTER\r
52 N=1                             ;NUMERICAL VALUE OF ASKED QUESTION\r
53                                 ;0=N,1=Y, HIGHER NO. IS VALUE OF OCTAL OR DECIMAL ANSWER\r
54                                 ;VALUE RETURNED BY ASKYN, ASKOCT,ASKDEC ROUTINES\r
55 T=2                             ;TEMPORARY AC\r
56 T1=T+1\r
57 CH=4                            ;CHARACTER AC\r
58 WD=CH+1                         ;WORD AC\r
59                                 ;FIRST ARGUMENT PASSED TO OUTXP\r
60 B=6                             ;BYTE POINTER TO INPUT STRING\r
61 R=7                             ;RADIX FOR INPUT\r
62 CHN=10\r
63 CHN1=11\r
64 CHN2=12\r
65 TTYCHN=0\r
66 TOCHN=0                         ;TTY OUTPUT CHANNEL\r
67 FOCHN=1                         ;FILE OUTPUT CHANNEL\r
68 OUTCHN=1\r
69 \r
70 MLON            ;MULTI LINE LITERAL\r
71 \r
72 \r
73 MAXCHN=8        ;MAXIMUM NUMBER OF DISK CHANNELS\r
74 \r
75 MAXFHU=8        ;MAXIMUM NUMBER OF UNITS ON FIXED HEAD CONTROLLERS\r
76 MAXDPU=8        ;MAXIMUM NUMBEROF UNITS ON DISK PACK CONTROLLERS\r
77 MAXMFU=2        ;MAXIMUM NUMBER OF UNITS ON MASS FILE CONTROLLERS\r
78 \r
79 ;THE FOLLOWING SIMPLE ROUTINES ARE USED TO ASK QUESTIONS:\r
80 ;ASKYN - ANSWER -(Y,N,) OR (1,0)\r
81 ;ASKDEC - ANSWER - DECIMAL NUMBER\r
82 ;ASKOCT - ANSWER - OCTAL NUMBER\r
83 ;ASKACZ - ANSWER - LOC ASCSTR...VASCSTR+5(ASCIZ)\r
84 ;ASKSIX - ANSWER - LOC ASCSTR...ASCSTR=1(ASCIZ)(ONLY 6 CHAR ALLOWED)\r
85 ;OUTFIL - OUTPUT TO CONFIG.MAC ONLY\r
86 ;OUTBTH - OUTPUT TO TTY AND CONFIG.MAC(;IS REMOVED BEFORE GOING TO TTY)\r
87 ;OUTXP - SUBSTITUTES VALUE IN N FOR * IN ASCIZ\r
88 ;OUTSTR - SUBSTITUTE ASCIZ STRING IN ASCSTR FOR * IN ASCIZ ARG\r
89 ;OUTTTY - OUTPUT TO TTY ONLY (ERROR MESSAGE)\r
90 \r
91 \r
92 XALL                            ;DO NOT LIST ASCII EXPANSIONS\r
93 \r
94 DEFINE ASCIIZ (A)\r
95 <\r
96         XLIST\r
97         ASCIZ &A\r
98 &\r
99         LIST>\r
100 \f       SUBTTL  INITIALIZATION\r
101 MONGEN: CALLI 0                         ;RESET\r
102         MOVE    P,[IOWD 12,PDLIST]\r
103         SETZM VARBEG\r
104         MOVE N,[XWD VARBEG,VARBEG+1]\r
105         BLT N,VAREND                    ;CLEAR VARIABLE STORAGE\r
106 \r
107         INIT TTYCHN,1\r
108         SIXBIT /TTY/\r
109         XWD TOBUF,TIBUF\r
110         HALT .-3\r
111 MON1:   PUSHJ P,OUTTTY\r
112         ASCIIZ <;TYPE "DEVICE:NAME.EXT<CR>" FOR WHERE TO PUT RESULTS OF THIS DIALOG\r
113 ;CR ASSUMES "DSK:CONFIG.MAC">\r
114         PUSHJ P,TTYIN\r
115         PUSHJ   P,GETWRD\r
116         SETZ    N,\r
117         CAIE    CH,":"\r
118         EXCH    WD,N\r
119         SKIPN   WD\r
120         MOVSI   WD,(SIXBIT .DSK.)\r
121         MOVEM   WD,.+2\r
122         INIT OUTCHN,1\r
123         SIXBIT /DSK/\r
124         XWD FOBUF,0             ;INIT OUTPUT DEVICE 'OUTP'\r
125         JRST .+2\r
126         JRST OUTOK              ;LOGICAL DEVICE WAS ASSIGNED\r
127         PUSHJ P,OUTTTY\r
128         ASCIIZ <DEVICE NOT AVAILABLE>\r
129         JRST MON1               ;ASK AGAIN\r
130 \r
131 OUTDIR: SIXBIT  /CONFIG/\r
132 OUTDR1: SIXBIT  /MAC/\r
133         BLOCK   2\r
134 \r
135 OUTOK:  CAIE    CH,":"\r
136         SKIPA   WD,N\r
137         PUSHJ   P,GETWRD\r
138         SKIPN   WD\r
139         MOVE    WD,[SIXBIT .CONFIG.]\r
140         MOVEM   WD,OUTDIR\r
141         CAIE    CH,"."\r
142         PUSHJ   P,GETWRD\r
143         CAIN    CH,"."\r
144         JRST    .+3\r
145         MOVSI   WD,(SIXBIT/MAC/)\r
146         JRST    .+2\r
147         PUSHJ   P,GETWRD\r
148         MOVEM   WD,OUTDR1\r
149         ENTER   OUTCHN,OUTDIR\r
150         JRST ENTERR\r
151 \f       SUBTTL  DETERMIN GENERAL TYPE OF SYSTEM ,ETC.\r
152         PUSHJ P,OUTFIL          ;WRITE ON OUTPUT FILE ONLY\r
153         ASCIIZ <SUBTTL  CONFIG - CONFIGURATION DEFINITION FILE OUTPUT BY MONGEN DIALOG\r
154 \r
155 \r
156 >\r
157         PUSHJ P,OUTBTH          ;BOTH TTY AND OUTPUT FILE(AS COMMENT)\r
158         ASCIIZ <;ANSWER THE FOLLOWING QUESTIONS WITH Y OR N OR A DECIMAL NUMBER>\r
159         PUSHJ P,ASKYN\r
160         ASCIIZ <;SHORT DIALOG?[N = LONGER QUESTIONS]>\r
161         MOVEM   N,SHORT         ;REMEMBER FOR QUTTTY ROUT.\r
162         PUSHJ P,ASKYN\r
163         ASCIIZ <;10/30 SYSTEM TO BE BUILT?[N = 10/40 OR 10/50 SYSTEM]>\r
164         JUMPN N,.+2\r
165         JRST    SYSASK+1\r
166         PUSHJ P,ASKYN\r
167         ASCIIZ <;10/40 SYSTEM TO BE BUILT?[N = ASSUME 10/50 SYSTEM]>\r
168         JUMPN N,SYS1\r
169         JRST    SYSASK\r
170 \r
171 ENTERR: PUSHJ P,OUTTTY\r
172         ASCIIZ <ENTER FAILURE>\r
173         JRST MON1\r
174 \fSYSASK:        AOS     SYS40N\r
175         PUSHJ P,ASKYN                   ;FIND OUT IF 10/40 WITH DISK\r
176         ASCIIZ <;DISK?>\r
177         JUMPE N,SYSOUT                  ;DISK SYSTEM?\r
178 SYS1:   AOS SYS50N\r
179         AOS DSKN\r
180         AOS LOGINN\r
181 SYSOUT: MOVE N,SYS40N                   ;DEFINE 10/40 SYSTEM SYMBOL\r
182         PUSHJ P,OUTXP\r
183         ASCIIZ <XP SYS40N,*>\r
184         MOVEI N,SYS50N  \r
185         PUSHJ P,OUTXP\r
186         ASCIIZ <XP SYS50N,*>\r
187         MOVE N,DSKN\r
188         PUSHJ P,OUTXP\r
189         ASCIIZ <XP DSKN,*>\r
190         MOVE N,LOGINN\r
191         PUSHJ P,OUTXP\r
192         ASCIIZ <XP LOGINN,*>\r
193 \r
194 \f       SUBTTL  SET-UP DISK CONFIGURATION\r
195 DSKASK: SKIPN N,DSKN            ;NEED A DISK?\r
196         JRST    JOBASK          ;NO DISK - NO QUESTION\r
197 \r
198         PUSHJ P,ASKYN\r
199         ASCIIZ <;RD10 (BURROUGHS) DISK?[ONE DISK TYPE FOR FILES,\r
200 ;SAME TYPE FOR SWAPPING OR ONE OTHER TYPE FOR SWAPPING]>\r
201         MOVEM N,RD10N\r
202 SYS1A:  PUSHJ P,OUTXP\r
203         ASCIIZ <XP RD10N,*>\r
204         SKIPN N,RD10N           ;RD10 REQUESTED?\r
205         JRST SYS1B              ;NO.\r
206         PUSHJ P,ASKYN\r
207         ASCIIZ <;RD10 FOR SWAPPING?[N = CAN SWAP ON SOME OTHER TYPE]>\r
208         MOVEM N,SWPYES\r
209 SYS1B:  PUSHJ P,OUTXP\r
210         ASCIIZ <XP RDSWPN,*>\r
211         SKIPN N,DSKN\r
212         JRST SYS2A\r
213         PUSHJ P,ASKDEC\r
214         ASCIIZ  <;HOW MANY RP01 OR RP02 (MEMOREX) DISK PACK DRIVES?[0 IF NONE]>\r
215 SYS2A:  MOVEM N,RP10N\r
216         PUSHJ P,OUTXP\r
217         ASCIIZ <XP RP10N,*>\r
218         SKIPE   N,RP10N\r
219         SKIPE SWPYES\r
220         JRST SYS2B              ;AVOID QUESTION IF NO RP10 OR ALREADY HAVE SWAP DEV\r
221         PUSHJ P,ASKYN\r
222         ASCIIZ <;RP10 FOR SWAPPING?>\r
223         MOVEM N,SWPYES\r
224 SYS2B:  PUSHJ P,OUTXP\r
225         ASCIIZ <XP RPSWPN,*>\r
226 \f       SKIPN N,RP10N\r
227         JRST SYS3\r
228         MOVE N,RP10N\r
229         SOJE N,SYS2D            ;AVOID QUESTION IF ONLY 1 PACK\r
230 SYS2C:  PUSHJ P,ASKDEC\r
231         ASCIIZ <;HOW MANY PRIVATE DRIVES?>\r
232         CAML N,RP10N\r
233         JRST SYS2C\r
234 SYS2D:  MOVNS N\r
235         ADD N,RP10N\r
236 SYS3:   PUSHJ P,OUTXP\r
237         ASCIIZ <DPCPNO=*>\r
238 \f       SKIPN N,DSKN\r
239         JRST SYS3A\r
240         PUSHJ P,ASKYN\r
241         ASCIIZ <;RA10 (BRYANT) DISK?>\r
242         MOVEM N,RA10N\r
243 SYS3A:  PUSHJ P,OUTXP\r
244         ASCIIZ <XP RA10N,*>\r
245         SETCM N,SWPYES\r
246         AND N,RA10N                     ;RA10 AND NO SWAP DEVICE?\r
247         JUMPE N,SYS3B                   ;NO. AVOID QUESTION\r
248         PUSHJ P,ASKYN\r
249         ASCIIZ <;RA10 FOR SWAPPING?>\r
250 SYS3B:  PUSHJ P,OUTXP\r
251         ASCIIZ <XP RASWPN,*>\r
252         SKIPN N,DSKN\r
253         JRST SYS4A\r
254         PUSHJ P,ASKYN\r
255         ASCIIZ <;DPD (DATA PRODUCTS) DISK?>\r
256         MOVEM N,DPDN\r
257 SYS4A:  PUSHJ P,OUTXP\r
258         ASCIIZ <XP DPDN,*>\r
259         SETCM N,SWPYES\r
260         AND N,DPDN                      ;DPDN AND NO SWAP DEVICE?\r
261         JUMPE N,SYS4B                   ;NO. AVOID QUESTION\r
262         PUSHJ P,ASKYN\r
263         ASCIIZ <;DPD FOR SWAPPING?>\r
264         MOVEM N,SWPYES\r
265 SYS4B:  PUSHJ P,OUTXP\r
266         ASCIIZ <XP DPSWPN,*>\r
267 \f       SUBTTL  DETERMIN JOB AND APR CONFIGURATION\r
268 JOBASK: PUSHJ P,ASKDEC\r
269         ASCIIZ <;HOW MANY JOBS?[ATTACHED AND DETACHED, COUNTING NULL JOB]>\r
270         JUMPE   N,JOBASK\r
271         CAILE   N,^D128\r
272         JRST    JOBASK\r
273 JOBOUT: PUSHJ P,OUTXP\r
274         ASCIIZ <XP JOBN,*>\r
275 \r
276 MXKASK: PUSHJ   P,ASKDEC\r
277         ASCIIZ  <;MAX SIZE OF CORE (IN K) FOR ANY SINGLE USER?\r
278 ;0 MEANS ALL OF CORE>\r
279 MXKOUT: PUSHJ   P,OUTXP\r
280         ASCIIZ  <XP COREN,*>\r
281 \r
282 PDPASK: PUSHJ P,ASKYN\r
283         ASCIIZ <;PDP-10 PROCESSOR?[N = PDP-6]>\r
284 PDPOUT: PUSHJ P,OUTXP\r
285         ASCIIZ <XP PDP10N,*>\r
286 \r
287 RELASK: JUMPE N, REL1                   ;PDP-10?\r
288         PUSHJ P,ASKYN                   ;YES,ASK ABOUT 2 RELOC SOFTWARE\r
289         ASCIIZ <;2 RELOCATION REG. SOFTWARE?[Y = MUST HAVE KT10A,\r
290 ;N = JUST 1 RELOC. REG.]>\r
291 REL1:   PUSHJ P,OUTXP\r
292         ASCIIZ <XP KT10AN,*>\r
293 \r
294         JUMPE N,REL2                    ;SEGN=0 IF PDP-6 OR NOT 2 RELOC. SOFT\r
295         PUSHJ P,ASKDEC\r
296         ASCIIZ <;HOW MANY MORE SEGMENTS THAN JOBS?[0 UNLESS YOU\r
297 ;ANTICIPATE A LOT OF DORMANT SEGMENTS]>\r
298 REL2:   PUSHJ P,OUTXP\r
299         ASCIIZ <XP SEGN,*>\r
300 \r
301 DDTASK: PUSHJ P,ASKYN\r
302         ASCIIZ <;LOAD EXEC DDT?[N = ONLY IF LOADER HAS RUN OUT OF CORE BEFORE]>\r
303 DDTOUT: PUSHJ P,OUTXP\r
304         ASCIIZ <XP DDTN,*>\r
305 \r
306 SYM:    PUSHJ P,ASKYN\r
307         ASCIIZ <;LOAD LOCAL SYMBOLS?[N = ONLY IF LOADER HAS RUN OUT OF ROOM BEFORE]>\r
308 SYMOUT: MOVEM N,LOCALN                  ;SAVE ANSWER FOR LATER INSTRUCTION\r
309 UDTASK: PUSHJ P,ASKYN\r
310         ASCIIZ <;LOAD USER DDT?[BOTH CAN BE LOADED TOGETHER,\r
311 ;USE USER DDT FOR PATCHING UNDER TIME SHARING]>\r
312 UDTOUT: PUSHJ P,OUTXP\r
313         ASCIIZ <XP UDDTN,*>\r
314 NAMASK: PUSHJ P,ASKST2                  ;STORE ANSWER IN LOC "ASCSTR"\r
315         ASCIIZ <;NAME OF THIS SYSTEM (24 CHARS OR LESS)?>\r
316 NAMOUT: PUSHJ P,OUTSTR                  ;SUBSTITUTE ANSWER FOR *\r
317         ASCIIZ <DEFINE SYSNAM\r
318 <       ASCIZ \*\>>\r
319 SERASK: PUSHJ   P,ASKDEC        ;GET SERIAL NUMBER OF KA10\r
320         ASCIIZ <;WHAT IS THE SERIAL NUMBER OF YOUR ARITHMETIC PROCESSOR?>\r
321 SEROUT: PUSHJ   P,OUTXP\r
322         ASCIIZ <XP APRSN,*>\r
323         SETZM ASCSTR                    ;INITIALIZE THIS CELL\r
324 DEVASK: PUSHJ P,ASKST2                  ;STORE ANSWER IN LOC "ASCSTC" (UP TO SIX CHAR)\r
325         ASCIIZ <;NAME OF SYSTEM DEVICE?[DTA0 USUAL FOR 10/40 SYSTEM,\r
326 ;DSK USUAL FOR 10/50 SYSTEM]>\r
327         SKIPE   ASCSTR\r
328         JRST    DEVOUT\r
329         MOVE    WD,[ASCIZ /DSK/]\r
330         SKIPN   DSKN\r
331         MOVE    WD,[ASCIZ /DTA0/]\r
332         MOVEM   WD,ASCSTR\r
333 DEVOUT: PUSHJ P,OUTSTR                  ;SUBSTUTITE ANSWER FOR *\r
334         ASCIIZ <DEFINE SYSDEV\r
335 <       SIXBIT "*">>\r
336 \f       PUSHJ   P,OUTFIL\r
337         ASCIZ   &DEFINE SYSDAT\r
338 <       ASCIZ /&\r
339         CALL    N,[SIXBIT /DATE/]\r
340         IDIVI   N,^D12*^D31\r
341         ADDI    N,^D64\r
342         PUSH    P,N\r
343         IDIVI   T,^D31\r
344         MOVEI   N,1(T)\r
345         MOVEI   R,12\r
346         PUSHJ   P,XPSUB1\r
347         MOVEI   CH,"-"\r
348         PUSHJ   P,FILPUT\r
349         MOVEI   N,1(T1)\r
350         PUSHJ   P,XPSUB1\r
351         MOVEI   CH,"-"\r
352         PUSHJ   P,FILPUT\r
353         POP     P,N\r
354         PUSHJ   P,XPSUB1\r
355         PUSHJ   P,OUTFIL\r
356         ASCIIZ  </>>\r
357 \r
358 \f       SUBTTL  SET-UP TTY CONFIGURATION\r
359         PUSHJ P,ASKYN\r
360         ASCIIZ <;DATA LINE SCANNER(DC10)?[N = WILL ASK FOR 680 OR 630]>\r
361         MOVEM N,DLSN\r
362         JUMPN N,DLSOUT\r
363         PUSHJ P,ASKYN\r
364         ASCIIZ <;PDP-8 680 COMMUNICATIONS SYSTEM?[Y = 680I TOO, N = WILL ASK FOR 630]>\r
365         MOVEM N,CCIN\r
366         JUMPN N,DLSOUT\r
367         PUSHJ P,ASKYN\r
368         ASCIIZ <;630 COMMUNICATION SYSTEM?>\r
369         MOVEM N,DCSN\r
370         JUMPE N,DLSASK                  ;LOOP UNTIL HE SAYS Y TO ONE\r
371 DLSOUT: MOVE N,DLSN\r
372         PUSHJ P,OUTXP\r
373         ASCIIZ <XP DLSN,*>\r
374         MOVE N,CCIN\r
375         PUSHJ P,OUTXP\r
376         ASCIIZ <XP CCIN,*>\r
377         MOVE N,DCSN\r
378         PUSHJ P,OUTXP\r
379         ASCIIZ <XP DCSN,*>\r
380 \fTTNASK:        SKIPE CCIN              ;JUST 680?\r
381         JRST TTN1               ;YES. NO DC10B,E, OR 632\r
382         PUSHJ P,ASKDEC\r
383         ASCIIZ <;HOW MANY DC10B (OR 632) 8-LINE DATA GROUPS?[\r
384 ;1=TTY0-7, 2=TTY0-17, ... , 8=TTY0-77]>\r
385         MOVEM N,TTGRPN\r
386         SKIPN BTHN\r
387         SKIPE DLSN\r
388         SKIPA\r
389         JRST TTN1\r
390         PUSHJ P,ASKDEC\r
391         ASCIIZ <;HOW MANY DC10E DATASET CONTROL GROUPS?>\r
392         MOVEM N,DSGRPN\r
393 TTN1:   SKIPN BTHN\r
394         SKIPE CCIN\r
395         SKIPA\r
396         JRST TTN2\r
397         PUSHJ P,ASKOCT\r
398         ASCIIZ <;HOW MANY (OCTAL) LINES ON YOUR 680(I), INCLUDING\r
399 ;ITS CONSOLE TELETYPE?>\r
400         MOVEM N,CCILN\r
401 TTN2:\r
402 TTNOUT: MOVE N,TTGRPN\r
403         PUSHJ P,OUTXP\r
404         ASCIIZ <XP TTGRPN,*>\r
405         MOVE N,DSGRPN\r
406         PUSHJ P,OUTXP\r
407         ASCIIZ <XP DSGRPN,*>\r
408         MOVE N,CCILN\r
409         PUSHJ P,OUTXP\r
410         ASCIIZ <XP CCILN,*>\r
411 TTNEND:\r
412 \fTTYASK:        PUSHJ P,OUTBTH\r
413         ASCIIZ <;ANSWER THE FOLLOWING QUESTIONS ABOUT YOUR TELETYPE LINES:\r
414 ;[TYPE OCTAL LINE NUMBERS, ONE PER LINE.\r
415 ;TYPE EXTRA CR WHEN DONE.]\r
416 >\r
417 TTY0:   PUSHJ P,OUTBTH\r
418         ASCIIZ <;DATA SET LINES?[PROJECT 1 CAN'T LOGIN, LOGIN RESETS\r
419 ;LINE TO COMPUTER ECHOING AND NO HARDWARE TABS]>\r
420 TTY0A:  PUSHJ P,TTYIN1\r
421         JRST TTY1\r
422         PUSHJ P,OUTSTR\r
423         ASCIIZ <XP DSD*,1>\r
424         JRST TTY0A\r
425 \r
426 TTY1:   PUSHJ P,OUTBTH\r
427         ASCIIZ <;LINES WITH HARDWARE TABS?[MONITOR SIMULATES REST WITH SPACES]>\r
428 TTY1A:  PUSHJ P,TTYIN1\r
429         JRST TTY2               ;CR\r
430         PUSHJ P,OUTSTR\r
431         ASCIIZ <XP TAB*,1>\r
432         JRST TTY1A\r
433 \r
434 TTY2:   PUSHJ P,OUTBTH\r
435         ASCIIZ <;REMOTE LINES?[PROJECT 1 CAN'T LOGIN,]>\r
436 TTY2A:  PUSHJ P,TTYIN1\r
437         JRST TTY21              ;CR\r
438         PUSHJ P,OUTSTR\r
439         ASCIIZ <XP RMT*,1>\r
440         JRST TTY2A\r
441 \r
442 TTY21:  PUSHJ P,OUTBTH          ;ASK ABOUT LOCAL COPY LINES\r
443         ASCIIZ <;LOCAL COPY LINES? [ECHOING PROVIDED BY TERMINAL RATHER\r
444 ;THAN BY COMPUTER. OFTEN (INCORRECTLY) CALLED "HALF DUPLEX".]>\r
445 TTY21A: PUSHJ P,TTYIN1          ;GET A LINE NUMBER\r
446           JRST TTY3             ;JUST A CARRIAGE RETURN\r
447         PUSHJ P,OUTSTR          ;PUT LINE NUMBER IN THE FILE\r
448         ASCIIZ <XP LCP*,1>\r
449         JRST TTY21A             ;SEE IF ANY MORE LOCAL COPY LINES\r
450 \r
451 TTY3:   PUSHJ P,OUTBTH\r
452         ASCIIZ <;HALF DUPLEX LINES?[TWX OR HALF DUPLEX WIRED SCANNER(DC10C)]>\r
453 TTY3A:  PUSHJ P,TTYIN1\r
454         JRST TTY4\r
455         PUSHJ P,OUTSTR\r
456         ASCIIZ <XP HLF*,1>\r
457         JRST TTY3A\r
458 \fTTY4:  PUSHJ P,OUTBTH\r
459         ASCIIZ <;SLAVES? [NO COMMANDS MAY BE TYPED]>\r
460 TTY4A:  PUSHJ P,TTYIN1\r
461         JRST TTY5\r
462         PUSHJ P,OUTSTR\r
463         ASCIIZ <XP SLV*,1>\r
464         JRST TTY4A\r
465 TTY5:   PUSHJ P,OUTBTH\r
466         ASCIIZ <;LINES WITH HARDWARE FORMFEED? [LEAVE OUT IF USERS WOULD RATHER\r
467 ;NOT GET FORMFEEDS UNTIL THEY DO TTY FORM COMMAND]>\r
468 TTY5A:  PUSHJ P,TTYIN1\r
469         JRST TTY6\r
470         PUSHJ P,OUTSTR\r
471         ASCIIZ <XP FRM*,1>\r
472         JRST TTY5A\r
473 TTY6:   PUSHJ P,OUTBTH\r
474         ASCIIZ <;LINES WHICH RUN INITIA AT STARTUP?>\r
475 TTY6A:  PUSHJ P,TTYIN1\r
476         JRST TTY7\r
477         PUSHJ P,OUTSTR\r
478         ASCIIZ <XP INI*,1>\r
479         JRST TTY6A\r
480 TTY7:\r
481 \r
482 EDTASK: PUSHJ P,ASKYN\r
483         ASCIIZ <;COMMON.MAC ALREADY EDITED FOR YOUR TTY CONFIGURATION?[\r
484 ;N = WILL ALLOW YOU TO DEFINE NOW]>\r
485 EDTOUT: PUSHJ P,OUTXP\r
486         ASCIIZ <XP EDITN,*>\r
487         JUMPN N,TTYEND  ;DO NOT ASK QUESTIONS ABOUT TTY IF EDITED\r
488 \r
489 \fDSCASK:        SKIPN DSGRPN            ;ANY DC10E'S?\r
490         JRST DSCEND             ;NO\r
491         PUSHJ P,OUTBTH\r
492         ASCIIZ <;WHAT IS THE CORRESPONDENCE BETWEEN THE DC10E LINES\r
493 ;AND THE DC10B LINES? TYPE "#,#" FOR EACH DATASET. FIRST # IS\r
494 ;DC10E LINE, SECOND # IS DC10B LINE.[# IS AN OCTAL NUMBER.\r
495 ;TYPE ONE #,# PER LINE, EXTRA CR WHEN DONE.]>\r
496 \r
497 \r
498         PUSHJ P,OUTFIL\r
499         ASCIZ /DEFINE DSASOC <\r
500 /\r
501 DSC1:   PUSHJ P,TTYIN1\r
502         JRST DSC2               ;CR ONLY\r
503         PUSHJ P,OUTSTR\r
504         ASCIIZ <GENLIN *>\r
505         JRST DSC1               ;LOOP FOR MORE\r
506 DSC2:   PUSHJ P,OUTFIL\r
507         ASCIZ />\r
508 /\r
509 DSCEND:\r
510 TTYEND:\r
511 \f       SUBTTL  SET-UP GENERAL PERIPHERAL CONFIGURATION\r
512 PTRASK: PUSHJ P,ASKYN\r
513         ASCIIZ <;PT READER?>\r
514 PTROUT: PUSHJ P,OUTXP\r
515         ASCIIZ <PTRN==*         ;NOT GLOBAL BECAUSE OF DSKSER USE>\r
516 \r
517 PTPASK: PUSHJ P,ASKYN\r
518         ASCIIZ <;PT PUNCH?>\r
519 PTPOUT: PUSHJ P,OUTXP\r
520         ASCIIZ <XP PTPN,*>\r
521 \r
522 PLTASK: PUSHJ P,ASKYN\r
523         ASCIIZ <;PLOTTER?>\r
524 PLTOUT: PUSHJ P,OUTXP\r
525         ASCIIZ <XP PLTN,*>\r
526 \r
527 LPTASK: PUSHJ P,ASKDEC\r
528         ASCIIZ <;HOW MANY LINE PRINTERS?[0,1 OR 2]>\r
529         CAILE   N,2\r
530         JRST    LPTASK\r
531         MOVEM N,LPTN\r
532 LPTOUT: MOVE N,LPTN\r
533         PUSHJ P,OUTXP\r
534         ASCIIZ <XP LPTN,*>\r
535 \r
536 CDRASK: PUSHJ P,ASKYN\r
537         ASCIIZ <;CARD READER?>\r
538         MOVEM N,CDRN\r
539         JUMPE N,CDROUT\r
540 CDR1:   PUSHJ P,ASKYN\r
541         ASCIIZ <;CR10?[Y = CR10A TOO, N IF PDP-6 CARD READER]>\r
542         MOVEM N,CR10N\r
543 CDROUT: MOVE N,CDRN\r
544         PUSHJ P,OUTXP\r
545         ASCIIZ <XP CDRN,*>\r
546         MOVE N,CR10N\r
547         PUSHJ P,OUTXP\r
548         ASCIIZ <XP CR10N,*>\r
549 CDPASK: PUSHJ P,ASKYN\r
550         ASCIIZ <;CARD PUNCH?>\r
551 CDPOUT: PUSHJ P,OUTXP\r
552         ASCIIZ <XP CDPN,*>\r
553 \fDISASK:        PUSHJ P,ASKYN\r
554         ASCIIZ <;DISPLAY?>\r
555         JUMPE N,DISOUT\r
556         MOVEM N,DISN\r
557 DIS1:   PUSHJ P,ASKYN\r
558         ASCIIZ <;TYPE 340?>\r
559         MOVEM N,T340N\r
560 DISOUT: MOVE N,DISN\r
561         PUSHJ P,OUTXP\r
562         ASCIIZ <XP DISN,*>\r
563         MOVE    N,DISN\r
564         PUSHJ P,OUTXP           ;ASSUME PEN IF DISPLAY\r
565         ASCIIZ <XP PENN,*>\r
566         MOVE N,T340N\r
567         PUSHJ P,OUTXP\r
568         ASCIIZ <XP T340N,*>\r
569 \fDTAASK:        PUSHJ P,ASKDEC\r
570         ASCIIZ <;HOW MANY DECTAPES?[0 TO 8]>\r
571         JUMPE N,DTAOUT\r
572         CAILE   N,^D8\r
573         JRST    DTAASK\r
574         MOVEM N, DTANN\r
575 DTA1:   PUSHJ P,ASKYN\r
576         ASCIIZ <;TD10 DECTAPE CONTROL?[N = PDP-6 DECTAPE]>\r
577         MOVE T,DTANN\r
578         SKIPE N\r
579         MOVEM T,DTAN\r
580         SKIPN N\r
581         MOVEM T,DTCN\r
582 DTAOUT: MOVE N,DTAN\r
583         PUSHJ P,OUTXP\r
584         ASCIIZ <XP DTAN,*>\r
585         MOVE N,DTCN\r
586         PUSHJ P,OUTXP\r
587         ASCIIZ <XP DTCN,*>\r
588 \fMTAASK:        PUSHJ P,ASKDEC\r
589         ASCIIZ <;HOW MANY MAGTAPES?[0 TO 8]>\r
590         JUMPE N,MTAOUT\r
591         CAILE   N,^D8\r
592         JRST    MTAASK\r
593         MOVEM N,MTANN\r
594 MTA1:   PUSHJ P,ASKYN\r
595         ASCIIZ <;TM-10A CONTROL?[N = WILL ASK TM-10B, THEN PDP-6 MAGTAPES]>\r
596         JUMPE N,MTA2\r
597         MOVE N,MTANN\r
598         MOVEM N,MTAN\r
599         JRST MTAOUT\r
600 \r
601 MTA2:   PUSHJ P,ASKYN\r
602         ASCIIZ <;TM-10B CONTROL?>\r
603         JUMPE N,MTA3\r
604         MOVE N,MTANN\r
605         MOVEM N,MTBN\r
606         JRST MTAOUT\r
607 \r
608 MTA3:   PUSHJ P,ASKYN\r
609         ASCIIZ <;PDP-6 MAGTAPE?>\r
610         JUMPE N,MTAASK          ;LOOP UNTIL HE PICKS ONE\r
611         MOVE N,MTANN\r
612         MOVEM N,MTCN\r
613 MTAOUT: MOVE N,MTAN\r
614         PUSHJ P,OUTXP\r
615         ASCIIZ <XP MTAN,*>\r
616         MOVE N,MTBN\r
617         PUSHJ P,OUTXP\r
618         ASCIIZ <XP MTBN,*>\r
619         MOVE N,MTCN\r
620         PUSHJ P,OUTXP\r
621         ASCIIZ <XP MTCN,*>\r
622 PTYASK: PUSHJ P,ASKDEC\r
623         ASCIIZ <;HOW MANY PSEUDO-TTY'S?[EACH CONCURRENT BATCH NEEDS ONE]>\r
624         CAILE   N,^D64\r
625         JRST    PTYASK\r
626         PUSHJ P,OUTXP\r
627         ASCIIZ <XP PTYN,*>\r
628 \f       SUBTTL  DETERMIN MISC. PARAMETERS\r
629 \fASKSYM:        PUSHJ   P,OUTBTH\r
630         ASCIIZ  <;TYPE "SYMBOL,VALUE" (VALUE IN DECIMAL)[FOR ANY SYMBOLS\r
631 ;TO BE DEFINED.  NEXT QUESTION WILL ASK FOR OCTAL DEFINITION.\r
632 ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]>\r
633         PUSHJ P,OUTFIL          ;MAKE MACRO CONVERT IN DECIMAL RADIX WHEN COMMON ASS.\r
634         ASCIIZ <RADIX 10>\r
635 GETSYM: PUSHJ   P,TTYIN\r
636         ILDB    CH,B\r
637         CAIN    CH,12\r
638         JRST    SYMDON\r
639         PUSHJ   P,OUTSTR\r
640         ASCIIZ  <XP *>\r
641         JRST    GETSYM\r
642 SYMDON: PUSHJ P,OUTFIL          ;PSEUDO OP BACK TO OCTAL\r
643         ASCIIZ <RADIX 8>\r
644 \r
645 ASKSY8: PUSHJ   P,OUTBTH\r
646         ASCIIZ  <;TYPE "SYMBOL,VALUE" (VALUE IN OCTAL)[FOR ANY SYMBOLS\r
647 ;TO BE DEFINED.  TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]>\r
648 GETSY8: PUSHJ   P,TTYIN\r
649         ILDB    CH,B\r
650         CAIN    CH,12\r
651         JRST    OCTDON\r
652         PUSHJ   P,OUTSTR\r
653         ASCIIZ  <XP *>\r
654         JRST    GETSY8\r
655 OCTDON:\r
656 \fASKDEV:        PUSHJ   P,OUTBTH\r
657         ASCIIZ  <;TYPE "DEVICE-MNEMONIC,CHANNEL"FOR SPECIAL DEVICES[\r
658 ;WITH NEITHER CHANNEL SAVE ROUTINE NOR DEVICE DATA BLOCK.\r
659 ;"DEVICE" MUST BE 3 CHARACTERS OR LESS.\r
660 ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]>\r
661         PUSHJ   P,OUTFIL\r
662         ASCIZ   /DEFINE SPCINT\r
663 <\r
664 /\r
665 DEV0:   PUSHJ P,TTYIN\r
666         ILDB CH,B\r
667         CAIN CH,12              ;LF\r
668         JRST DEV1\r
669         PUSHJ P,OUTSTR\r
670         ASCIIZ <        SPASGINT *>\r
671         JRST DEV0\r
672 \r
673 DEV1:   PUSHJ P,OUTFIL\r
674         ASCIZ />/\r
675         PUSHJ P,OUTBTH\r
676         ASCIIZ <;TYPE "DEVICE-MNEMONIC,CHANNEL,NO.-OF-DEVICES"[\r
677 ;FOR SPECIAL DEVICE WITH DEVICE DATA BLOCKS\r
678 ;"DEVICE" MUST BE 3 CHARS. OR LESS.\r
679 ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]>\r
680         PUSHJ P,OUTFIL\r
681         ASCIZ /DEFINE SPCDDB\r
682 <\r
683 /\r
684 DEV2:   PUSHJ P,TTYIN\r
685         ILDB CH,B\r
686         CAIN CH,12\r
687         JRST DEV3\r
688         PUSHJ P,OUTSTR\r
689         ASCIIZ <        SPASGDDB *>\r
690         JRST DEV2\r
691 DEV3:   PUSHJ P,OUTFIL\r
692         ASCIZ />/\r
693 \f       PUSHJ P,OUTBTH\r
694         ASCIIZ <;TYPE "DEVICE-MNEMONIC,CHANNEL,HIGHEST-AC-TO-SAVE[\r
695 ;FOR SPECIAL DEVICE WITH CHANNEL SAVE ROUTINES TO SAVE AC'S UP TO\r
696 ;"HIGHEST-AC-TO-SAVE".  "DEVICE" MUST BE 3 CHARS. OR LESS.\r
697 ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]>\r
698         PUSHJ P,OUTFIL\r
699         ASCIZ /DEFINE SPCSAV\r
700 <\r
701 /\r
702 DEV4:   PUSHJ P,TTYIN\r
703         ILDB CH,B\r
704         CAIN CH,12\r
705         JRST DEV5\r
706         PUSHJ P,OUTSTR\r
707         ASCIIZ <        SPASGSAV *>\r
708         JRST DEV4\r
709 DEV5:   PUSHJ P,OUTFIL\r
710         ASCIZ />/\r
711 \r
712 REMEND:\r
713 \f       SUBTTL  FINISH OFF THE JOB\r
714         PUSHJ P,OUTBTH\r
715         ASCIIZ  <;[MONGEN FINISHED\r
716 ;NEXT YOU MUST ASSEMBLE COMMON WITH MACRO>\r
717         SKIPN   LEVDN\r
718         JRST    ASSEM1\r
719         PUSHJ   P,OUTBTH\r
720         ASCIIZ  <;AND COMMOD>\r
721 ASSEM1: PUSHJ   P,OUTBTH\r
722         ASCIIZ  <;THEN LOAD IT AND REST OF MONITOR WITH LOADER\r
723 ;AND FINALLY SAVE IT WITH MONITOR COMMAND SAVE\r
724 \r
725 ;[TO ASSEMBLE COMMON, TYPE:\r
726 ;R MACRO\r
727 ;DSK:COMMON,LPT:_DSK:S,CONFIG,COMMON>\r
728         PUSHJ   P,OUTBTH\r
729         ASCIIZ  <;TO LOAD NEW MONITOR, TYPE:\r
730 ;R LOADER>\r
731         SKIPN   LOCALN\r
732         JRST    NOLCLS\r
733         PUSHJ   P,OUTBTH\r
734         ASCIIZ  <;/S>\r
735 NOLCLS: SKIPN SYS40N            ;10/40 SYSTEM?\r
736         JRST SYS40A             ;NO\r
737         PUSHJ P,OUTBTH          ;YES, TYPE PROPER LIBRARY NAME\r
738         ASCIIZ <;BIN:COMMON,BIN:SYS50/L>\r
739         JRST SYS40B\r
740 \r
741 SYS40A: PUSHJ   P,OUTBTH\r
742         ASCIIZ  <;DSK:COMMON,COMMOD,DSK:SYS40/L>\r
743 SYS40B: PUSHJ P,OUTBTH\r
744         ASCIIZ <;LPT:_/W/D/A/M/P/G>\r
745 DDT1:   PUSHJ P,OUTBTH\r
746         ASCIIZ <;TO SAVE MONITOR, TYPE:\r
747 ;SAVE DSK MONITOR\r
748 ;]\r
749 ;       END OF CONFIGURATION DEFINITION\r
750         SUBTTL\r
751 ;]>\r
752         MOVEI CH,14             ;OUTPUT FORMFEED FOR END OF CONFIG.MAC FILE\r
753         PUSHJ P,FILPUT\r
754         RELEASE OUTCHN,         ;RELEASE OUTPUT FILE\r
755         CALL [SIXBIT /EXIT/]\r
756 \f       SUBTTL  VARIABLE AND PARAMETER STORAGE\r
757 ;VARIABLE STORAGE\r
758 TOBUF:  BLOCK 3                 ;TTY OUTPUT BUFFER HEADER\r
759 TIBUF:  BLOCK 3                 ;TTY INPUT BUFFER HEADER\r
760 FOBUF:  BLOCK 3                 ;FILE OUTPUT BUFFER HEADER\r
761 \r
762 PDLIST: BLOCK   12\r
763 \r
764 RC10S:  BLOCK   1\r
765 RP10S:  BLOCK   1\r
766 RA10S:  BLOCK   1\r
767 \f;VARIABLES WHICH ARE ALSO OUTPUT IN CONFIG.MAC\r
768 ;NONE OF THE VALUES OF THESE VARIABLES ARE USED OUTSIDE OF THE QUESTION IN WHICH THEY ARE ASKED.\r
769 VARBEG:                 ;BEGINNING OF AREA TO BE CLEARED\r
770 SHORT:  0                       ;NON-ZERO IF SHORT DIALOG(OMIT STUFF IN [])\r
771 LEFTBK: 0                       ;NON-ZERO IF LEFT BRACKET SEEN\r
772 SYS40N: 0                       ;\r
773 DSKN:   0\r
774 LEVDN:  0                       ;LEVEL D VS LEVEL C\r
775 CHNN:   0\r
776 LOGINN: 0\r
777 RD10N:  0                       ;\r
778 RP10N:  0                       ;\r
779 RA10N:  0                       ;\r
780 DPDN:   0                       ;\r
781 SWPYES: 0\r
782 LOCALN: 0                       ;\r
783 BTHN:   0                       ;BOTH 680 AND DC10\r
784 DLSN:   0                       ;\r
785 CCIN:   0                       ;\r
786 DCSN:   0                       ;\r
787 TTGRPN: 0                       ;GROUPS OF DC10B OR 632\r
788 DSGRPN: 0                       ;GROUPS OF DC10E\r
789 CCILN:  0                       ;LINES OF 680\r
790 CDRN:   0                       ;\r
791 CR10N:  0                       ;\r
792 DISN:   0                       ;\r
793 T340N:  0                       ;\r
794 TVP10N: 0                       ;\r
795 T30N:   0                       ;\r
796 DTANN:  0                       ;\r
797 DTAN:   0                       ;\r
798 DTCN:   0                       ;\r
799 MTANN:  0                       ;\r
800 MTAN:   0                       ;\r
801 MTBN:   0                       ;\r
802 MTCN:   0                       ;\r
803 SPCDEV: 0                       ;SET NONZERO IF ANY SPECIAL DEVICES\r
804 TEMPN:  0                       ;\r
805 TMPN:   0                       ;\r
806 TMPLN:  0                       ;\r
807 LPTN:   0\r
808 MOVIEN: 0                       ;\r
809 LOKN:   0\r
810 VAREND=.-1                      ;END OF AREA TO BE CLEARED\r
811 \f       SUBTTL  SUBROUTINES\r
812 ;ROUTINE TO WRITE IN-LINE STRING ON OUTPUT FILE\r
813 ;CALL:  PUSHJ P,OUTFIL\r
814 ;       ASCIIZ <MESSAGE>\r
815 ;       RETURN\r
816 \r
817 OUTFIL: MOVE T,(P)\r
818         PUSHJ P,FILO\r
819         POP P,CH\r
820         JRST 1(T)\r
821 \r
822 \r
823 \r
824 ;ROUTINE TO WRITE OUT-OF-LINE STRING ON OUTPUT FILE\r
825 ;CALL:  MOVEI T,[ASCIZ /MESSAGE/]\r
826 ;       PUSHJ P,FILO\r
827 ;       RETURN\r
828 \r
829 FILO:   HRLI T,440700\r
830 FILOLP: ILDB CH,T\r
831         JUMPE CH,CPOPJ\r
832         PUSHJ P,FILPUT\r
833         JRST FILOLP\r
834 \r
835 ;ROUTINE TO OUTPUT AN IN LINE STRING TO BOTH FILE AND TTY\r
836 ;CALL:  PUSHJ P,OUTBTH\r
837 ;       ASCIZ /STRING/\r
838 ;       RETURN\r
839 \r
840 OUTBTH: MOVE T,(P)\r
841         PUSHJ P,FILO\r
842                                 ;FALL INTO OUTTTY\r
843 ;ROUTINE TO OUTPUT AN IN-LINE STRING TO TTY\r
844 ;CALL:  PUSHJ P,OUTBTH\r
845 ;       ASCIZ /STRING/\r
846 ;       RETURN\r
847 \r
848 OUTTTY: MOVE T,(P)\r
849         PUSHJ P,TTYO\r
850         POP P,CH\r
851         JRST 1(T)\r
852 \f;ROUTINE TO OUTPUT AN OUT-OF-LINE STRING ON TTY\r
853 ;CALL:  MOVEI T,[ASCIZ /STRING/]\r
854 ;       PUSHJ P,TTYO\r
855 ;       RETURN\r
856 \r
857 TTYO:   HRLI T,440700\r
858 TTYOLP: ILDB CH,T\r
859         JUMPE CH,TTYFIN\r
860         CAIE CH,"["             ;IS THIS A LEFT BRACKET?\r
861         JRST TTYO1              ;NO,\r
862         SKIPE SHORT             ;YES, IS SHORT DIALOG WANTED?\r
863         SETOM LEFTBK            ;YES, SET LEFT BRACKET SO OUTPUT SUPPRESSED\r
864 TTYO1:  SKIPE LEFTBK            ;OUTPUT SUPPRESSED BECAUSE INSIDE []?\r
865         JRST TTYO2              ;YES\r
866         CAIE CH,";"             ;NO, DO NOT TYPE ";" ON TTY\r
867         PUSHJ P,TTYPUT\r
868 TTYO2:  CAIN CH,"]"             ;END OF LONG STUFF?\r
869         SETZM LEFTBK            ;YES, TURN OFF TTY SUPPRESS FLAG\r
870         JRST TTYOLP\r
871 \r
872 TTYFIN: OUTPUT TOCHN,\r
873 CPOPJ:  POPJ P,\r
874 \f;ROUTINE TO ASK A QUESTION AND ACCEPT Y OR N (1 OR 0)\r
875 ;CALL:  PUSHJ P,ASKYN\r
876 ;       ASCIZ /QUESTION?/\r
877 ;       RETURN\r
878 \r
879 ASKYN:  PUSHJ P,FCRLF           ;PUT CRLF IN FILE ONLY\r
880         HRRZ T,(P)\r
881         PUSHJ P,FILO\r
882 YN1:    HRRZ T,(P)\r
883         HRLS    (P)\r
884         PUSHJ P,TTYO\r
885         AOS     T\r
886         HRRM    T,(P)\r
887         PUSHJ P,TTYIN\r
888         PUSHJ P,GETWRD\r
889         MOVEI N,0\r
890         CAME WD,[SIXBIT /0/]\r
891         CAMN WD,[SIXBIT /N/]\r
892         JRST YNOK\r
893         CAMN WD,[SIXBIT /NO/]\r
894         JRST YNOK\r
895         MOVEI N,1\r
896         CAME WD,[SIXBIT /1/]\r
897         CAMN WD,[SIXBIT /Y/]\r
898         JRST YNOK\r
899         CAME WD,[SIXBIT /YES/]\r
900         JRST YN2\r
901 YNOK:   PUSHJ P,OUTSTR\r
902         ASCIIZ <;*>\r
903         POPJ P,\r
904 \r
905 YN2:    HLRS    (P)\r
906         JRST    YN1\r
907 \f;ROUTINE TO OUTPUT ON FILE ASCIZ STRING IN ASCSTR\r
908 ; SUBSTITUTED FOR "*"\r
909 ;CALL:  PUSHJ P,OUTSTR\r
910 ;       ASCIIZ <MESSAGE*MESSAGE>\r
911 OUTSTR: MOVE T,(P)\r
912         PUSHJ P,STRO\r
913         POP P,CH\r
914         JRST 1(T)\r
915 \r
916 STRO:   HRLI T,440700\r
917 STROLP: ILDB CH,T\r
918         JUMPE CH,CPOPJ\r
919         CAIN CH,"*"\r
920         JRST STRSUB\r
921         PUSHJ P,FILPUT\r
922         JRST STROLP\r
923 \r
924 STRSUB: PUSH P,T\r
925         MOVEI T,ASCSTR\r
926         PUSHJ P,FILO\r
927         POP P,T\r
928         JRST FILOLP\r
929 \f;ROUTINE TO SUBSTITUTE OCTAL VALUE OF N FOR * IN STRING\r
930 ; AND OUTPUT ON FILE\r
931 ;       MOVE N,OCTAL NUMBER\r
932 ;CALL:  PUSHJ P,OUTXP\r
933 ;       ASCIZ /MESSAGE*MESSAGE/\r
934 ;RETURN WITH N PRESERVED\r
935 \r
936 OUTXP:  MOVE T,(P)\r
937         PUSHJ P,XPO\r
938         POP P,CH\r
939         JRST 1(T)\r
940 \r
941 XPO:    HRLI T,440700\r
942 XPOLP:  ILDB CH,T\r
943         JUMPE CH,CPOPJ\r
944         CAIN CH,"*"\r
945         JRST XPSUB\r
946         PUSHJ P,FILPUT\r
947         JRST XPOLP\r
948 \r
949 XPSUB:  PUSH P,T\r
950         PUSH P,N\r
951         MOVEI   R,10\r
952         PUSHJ P,XPSUB1\r
953         POP P,N\r
954         POP P,T\r
955         JRST    FILOLP\r
956 XPSUB1: IDIVI   N,(R)\r
957         HRLM    T,(P)\r
958         JUMPE N,.+2\r
959         PUSHJ P,XPSUB1\r
960         HLRZ T,(P)\r
961         MOVEI CH,"0"(T)\r
962         JRST FILPUT\r
963 \f;ROUTINE TO PUT 1 CHAR IN OUTPUT FILE\r
964 ;CALL:  MOVEI CH,CHAR\r
965 ;       PUSHJ P,FILPUT\r
966 \r
967 FILPUT: CAIN    CH,15           ;CARRIAGE RETURN?\r
968         POPJ    P,0             ;YES. THROW IT AWAY\r
969         CAIN    CH,12           ;LINE FEED?\r
970         JRST    FILPU1          ;YES. TURN INTO CR-LF\r
971 FILPU2: SOSG FOBUF+2\r
972         OUTPUT FOCHN,\r
973         IDPB CH,FOBUF+1\r
974         POPJ P,\r
975 \r
976 FILPU1: MOVEI   CH,15           ;OUTPUT A CR\r
977         PUSHJ   P,FILPU2\r
978         MOVEI   CH,12           ;AND A LINEFEED\r
979         JRST    FILPU2\r
980 \r
981 ;ROUTINE TO PUT 1 CHAR IN OUTPUT TTY\r
982 ;CALL:  MOVEI CH,CHAR\r
983 ;       PUSHJ P,TTYPUT\r
984 \r
985 TTYPUT: SOSG TOBUF+2\r
986         OUTPUT TOCHN,\r
987         IDPB CH,TOBUF+1\r
988         POPJ P,\r
989 \f;ROUTINE TO ASK FOR A STRING AND DELETE THE CR-LF FROM THE ANSWER\r
990 ;CALL:  PUSHJ   P,ASKST2\r
991         ASCIIZ  <QUESTION>\r
992 \r
993 ASKST2: PUSHJ   P,ASKSTZ\r
994         PUSHJ   P,TTYIN\r
995         ILDB    T,B\r
996 ASKST4: CAIE    T,12\r
997         JUMPN   T,.-2\r
998         DPB     CH,B\r
999         POPJ    P,\r
1000 \r
1001 ;ROUTINE TO ASK FOR A STRING\r
1002 ;CALL:  PUSHJ PDP,ASKSTR\r
1003 ;       ASCIIZ <QUESTION>\r
1004 \r
1005 ASKSTR: PUSHJ   P,ASKSTZ\r
1006         JRST    TTYIN\r
1007 \r
1008 \r
1009 ASKSTZ: PUSHJ P,FCRLF           ;PUT CRLF IN FILE ONLY\r
1010         HRRZ T,-1(P)\r
1011         PUSHJ P,FILO\r
1012         HRRZ T,-1(P)\r
1013         PUSHJ P,TTYO\r
1014         AOS     T\r
1015         EXCH    T,(P)\r
1016         JRST    (T)\r
1017 \f;ROUTINE TO ACCEPT 1 LINE FROM TTY AND MOVE TO ASCSTR AND\r
1018 ; APPEND A NULL CHAR.\r
1019 ;CALL:  PUSHJ P,TTYIN\r
1020 \r
1021 TTYIN:  MOVE T,[XWD 440700,ASCSTR]\r
1022 ASCLP:  PUSHJ P,TTYGET\r
1023         JRST ASCEND\r
1024         IDPB CH,T\r
1025         JRST ASCLP\r
1026 \r
1027 ASCEND: IDPB    CH,T\r
1028         MOVEI CH,0\r
1029         IDPB CH,T\r
1030         MOVE B,[XWD 440700,ASCSTR]\r
1031         POPJ P,\r
1032 \r
1033 ;ROUTINE TO GET 1 CHAR FROM TTY\r
1034 ;CALL:  PUSHJ P,TTYGET\r
1035 ;       RETURN1 WITH CR IN AC CH\r
1036 ;       RETURN2 WITH ANY OTHER  CHAR IN AC CH\r
1037 \r
1038 TTYGET: SOSG TIBUF+2\r
1039         INPUT TTYCHN,\r
1040         ILDB CH,TIBUF+1\r
1041         JUMPE   CH,TTYGET\r
1042         CAIN    CH,15\r
1043         JRST    TTYGET\r
1044         CAIE CH,12\r
1045         AOS (P)\r
1046         POPJ P,\r
1047 \r
1048 \r
1049 ;ROUTINE TO ACCEPT 1 LINE FROM TTY AND MOVE TO ASCSTR AND APPEND NULL\r
1050 ;SAME AS TTYIN, SKIP RETURN IF NON-BLANK LINE\r
1051 ;CALL:  PUSHJ P,TTYIN1\r
1052 ;       BLANK LINE RETURN\r
1053 ;       NON-BLANK LINE RETUNR\r
1054 \r
1055 TTYIN1: PUSHJ P,TTYIN           ;GET LINE\r
1056         ILDB T,B                ;LF?\r
1057         CAIE T,12\r
1058         AOS (P)         ;NO,\r
1059         JRST ASKST4             ;REMOVE CR-LF FROM END OF STRING\r
1060 \f;ROUTINE TO GET FIRST 6 CHAR TYPED IN A RETURN AS SIXBIT\r
1061 ; LEFT JUSTIFIED IN AC WD\r
1062 \r
1063 GETWRD: MOVE T,[XWD 440600,WD]\r
1064         MOVEI WD,0\r
1065 GETWDL: ILDB CH,B\r
1066         JUMPE CH,CPOPJ\r
1067         CAIG    CH,15\r
1068         CAIGE   CH,12\r
1069         SKIPA\r
1070         POPJ    P,\r
1071         CAIE    CH,":"\r
1072         CAIN    CH,"."\r
1073         POPJ    P,\r
1074         CAIGE   CH,140\r
1075         TRC CH,40\r
1076         IDPB    CH,T\r
1077         TRNN WD,77\r
1078         JRST GETWDL\r
1079         POPJ P,\r
1080 ASCSTR: BLOCK 20                ;ASCIZ STRING\r
1081 \r
1082 ;ROUTINE TO ASK A QUESTION AND ACCEPT A DECIMAL ANSWER\r
1083 ;CALL:  PUSHJ P,ASKDEC\r
1084 ;       ASCIIZ <QUESTION>\r
1085 \r
1086 ASKDEC: MOVEI R,12\r
1087         JRST ASKNUM\r
1088 ASKDC1: MOVEI   R,12\r
1089         JRST    ASKNM1\r
1090 \f;ROUTINE TO ASK A QUESTION AND ACCEPT AN OCTAL NUMBER\r
1091 ;CALL:  PUSHJ P,ASKOCT\r
1092 ;       ASCIZ /QUESTION/\r
1093 \r
1094 ASKOCT: MOVEI R,10\r
1095 ASKNUM: PUSHJ P,FCRLF           ;PRECEDE WITH CRLF IN FILE ONLY\r
1096 ASKNM1: HRRZ T,(P)\r
1097         PUSHJ P,FILO\r
1098         MOVEI   CH,";"\r
1099         PUSHJ   P,FILPUT\r
1100 ASKNE:  HRRZ T,(P)\r
1101         PUSHJ P,TTYO\r
1102         MOVEI N,0\r
1103 ASKNL:  PUSHJ P,TTYGET\r
1104         JRST    ASKNXT\r
1105         CAIL CH,"0"\r
1106         CAIL CH,"0"(R)\r
1107         JRST ASKERR\r
1108         IMUL N,R\r
1109         ADDI N,-"0"(CH)\r
1110         PUSHJ   P,FILPUT\r
1111         JRST ASKNL\r
1112 ASKNXT: PUSHJ P,FCRLF\r
1113         POP     P,T1\r
1114         JRST    1(T)\r
1115 ASKERR: PUSHJ   P,TTYGET\r
1116         JRST    ASKNE\r
1117         JRST    .-2\r
1118 \r
1119 \r
1120 \r
1121 ;ROUTINE TO OUTPUT CRLF IN OUTPUT FILE\r
1122 ;CALL:  PUSHJ P,FCRLF\r
1123 ;USED TO SEPARATE QUESTION FROM PREVIOUS MACRO CALL\r
1124 \r
1125 FCRLF:  MOVEI CH,15\r
1126         PUSHJ P,FILPUT\r
1127         MOVEI CH,12\r
1128         JRST FILPUT\r
1129 \f       END     MONGEN\r
1130 \r
1131 \f\r