TITLE MONGEN - DIALOG PROGRAM TO DEFINE A 10/40 OR 10/50 T.S. CONFIGURATION - V041 SUBTTL T.HASTINGS/TNM/TW/PFC/GDR/KWB/RCC TS 05 MAR 71 VMONGN==040 JOBVER=137 LOC JOBVER EXP VMONGN ;PUT VERSION NUMBER IN JOB DATA AREA ;ALSO OUTPUT-SEE NEXT PAGE RELOC ;HOW MONGEN IS ORGANIZED: ;ALL SYMBOLS FOR CONFIG.MAC ARE DEFINED USING XP MACRO DEFINED IN S.MAC ;XP DEFINES FIRST ARGUMENT TO BE EQUAL TO THE SECOND ARG ;AND DECLARES THE FIRST ARG TO BE INTERVAL ;RULE: ALL SYMBOLS ARE GENERATED ALL THE TIME, NO MATTER HOW DIALOG IS ANSWERED ;WHY - SO USER READING CONFIG+COMMON NEVER NEEDS TO LOOK AT ; MONGEN PROGRAM TO UNDERSTAND MONITOR ;THE ONLY LOCAL STORAGE IN MONGEN IS USED TO STORE ANSWERS ;WHICH DETERMINE WHETHER A SECOND QUESTION IS TO BE ASKED ;THESE TEMP STORAGE HAVE SAME NAME AS THE SYMBOL WHICH THEY ARE ASSOCIATED WITH ;RULE: ALL SYMBOLS WHICH ARE GENERATED BY MONGEN, END IN LETTER N OR NN. ;POLICY: MONGEN IS STUPID AND SIMPLE MINDED. IT KNOWS AS LITTLE ABOUT THE MONITOR ;AS POSSIBLE. IT NEVER ADDS TWO ANSWERS TOGETHER, FOR EXAMPLE. IT ALWAYS GENERATES ;ALL SYMBOLS ALL THE TIME, NO MATTER HOW THE QUESTIONS ARE ANSWERED. THE SYMBOL ;VALUES ARE ALWAYS WHAT THE USER ANSWERED. (AS LONG AS SYNTACTICALLY CORRECT). ;IF DEC OFFERS JUST 2 DIFFERENT FORMS OF A DEVICE ; ONLY ONE QUESTION WILL BE ASKED (EX. DECTAPE - 551 OR TD10). ; HOWEVER TWO SYMBOLS ENDING IN N WILL BE GENERATED. ; THIS IS SO A THIRD DEVICE CAN BE ADDED WITH MINIMAL ; CHANGE TO BOTH MONGEN AND COMMON. ;RULE: ASK RELATED QUESTIONS (EG, 3-WAY BRANCH) SO THAT IF THE FIRST ;ANSWER IS YES, THE SECOND QUESTION IS NOT ASKED. ;RULE: ASK THE QUESTIONS SO THAT YES IS THE CURRENT STANDARD RESPONSE. ;FOR EACH VARIABLE OUTPUT, THERE IS A CORRESPONDING LOCATION IN MONGEN WITH SAME NAME ;ALL SUCH LOCATIONS ARE INITIALLY SET TO 0 WHEN MONGEN IS STARTED ;EACH QUESTION OR SET OF RELATED QUESTIONS HAS THE FOLLOWING FORM: ; ONE OR MORE QUESTIONS FOLLOWED BY OUTPUT OF THE APPROPRIATE MACRO SOURCE. ; THE FIRST QUESTION IN A SEG ARE OF FORM TAG1,TAG2,ECT. ; ALL JUMPS TO OTHER QUESTIONS IN SEG ARE OF FORM TAG1,TAG2, ETC. ; THE OUTPUT SECTION OF A SEG IS LABELED TAGOUT: EVEN THOUGH IT MAY ; NEVER BE JRSTED TO. NOTE: THERE ARE NO OTHER TAGS IN OUTPUT SECTION ; BECAUSE ALL SYMBOLS ARE ALWAYS OUTPUT, SO THERE IS NO BRANCHING IN OUTPUT SECTION. ;ANY TTY OUTPUT ENCLOSED IN []'S WILL BE TYPED ONLY IF LONG DIALOG IS IN EFFECT ;ACS P=17 ;PUSHDOWN POINTER N=1 ;NUMERICAL VALUE OF ASKED QUESTION ;0=N,1=Y, HIGHER NO. IS VALUE OF OCTAL OR DECIMAL ANSWER ;VALUE RETURNED BY ASKYN, ASKOCT,ASKDEC ROUTINES T=2 ;TEMPORARY AC T1=T+1 CH=4 ;CHARACTER AC WD=CH+1 ;WORD AC ;FIRST ARGUMENT PASSED TO OUTXP B=6 ;BYTE POINTER TO INPUT STRING R=7 ;RADIX FOR INPUT CHN=10 CHN1=11 CHN2=12 TTYCHN=0 TOCHN=0 ;TTY OUTPUT CHANNEL FOCHN=1 ;FILE OUTPUT CHANNEL OUTCHN=1 MLON ;MULTI LINE LITERAL MAXCHN=8 ;MAXIMUM NUMBER OF DISK CHANNELS MAXFHU=8 ;MAXIMUM NUMBER OF UNITS ON FIXED HEAD CONTROLLERS MAXDPU=8 ;MAXIMUM NUMBEROF UNITS ON DISK PACK CONTROLLERS MAXMFU=2 ;MAXIMUM NUMBER OF UNITS ON MASS FILE CONTROLLERS ;THE FOLLOWING SIMPLE ROUTINES ARE USED TO ASK QUESTIONS: ;ASKYN - ANSWER -(Y,N,) OR (1,0) ;ASKDEC - ANSWER - DECIMAL NUMBER ;ASKOCT - ANSWER - OCTAL NUMBER ;ASKACZ - ANSWER - LOC ASCSTR...VASCSTR+5(ASCIZ) ;ASKSIX - ANSWER - LOC ASCSTR...ASCSTR=1(ASCIZ)(ONLY 6 CHAR ALLOWED) ;OUTFIL - OUTPUT TO CONFIG.MAC ONLY ;OUTBTH - OUTPUT TO TTY AND CONFIG.MAC(;IS REMOVED BEFORE GOING TO TTY) ;OUTXP - SUBSTITUTES VALUE IN N FOR * IN ASCIZ ;OUTSTR - SUBSTITUTE ASCIZ STRING IN ASCSTR FOR * IN ASCIZ ARG ;OUTTTY - OUTPUT TO TTY ONLY (ERROR MESSAGE) XALL ;DO NOT LIST ASCII EXPANSIONS DEFINE ASCIIZ (A) < XLIST ASCIZ &A & LIST> SUBTTL INITIALIZATION MONGEN: CALLI 0 ;RESET MOVE P,[IOWD 12,PDLIST] SETZM VARBEG MOVE N,[XWD VARBEG,VARBEG+1] BLT N,VAREND ;CLEAR VARIABLE STORAGE INIT TTYCHN,1 SIXBIT /TTY/ XWD TOBUF,TIBUF HALT .-3 MON1: PUSHJ P,OUTTTY ASCIIZ <;TYPE "DEVICE:NAME.EXT" FOR WHERE TO PUT RESULTS OF THIS DIALOG ;CR ASSUMES "DSK:CONFIG.MAC"> PUSHJ P,TTYIN PUSHJ P,GETWRD SETZ N, CAIE CH,":" EXCH WD,N SKIPN WD MOVSI WD,(SIXBIT .DSK.) MOVEM WD,.+2 INIT OUTCHN,1 SIXBIT /DSK/ XWD FOBUF,0 ;INIT OUTPUT DEVICE 'OUTP' JRST .+2 JRST OUTOK ;LOGICAL DEVICE WAS ASSIGNED PUSHJ P,OUTTTY ASCIIZ JRST MON1 ;ASK AGAIN OUTDIR: SIXBIT /CONFIG/ OUTDR1: SIXBIT /MAC/ BLOCK 2 OUTOK: CAIE CH,":" SKIPA WD,N PUSHJ P,GETWRD SKIPN WD MOVE WD,[SIXBIT .CONFIG.] MOVEM WD,OUTDIR CAIE CH,"." PUSHJ P,GETWRD CAIN CH,"." JRST .+3 MOVSI WD,(SIXBIT/MAC/) JRST .+2 PUSHJ P,GETWRD MOVEM WD,OUTDR1 ENTER OUTCHN,OUTDIR JRST ENTERR SUBTTL DETERMIN GENERAL TYPE OF SYSTEM ,ETC. PUSHJ P,OUTFIL ;WRITE ON OUTPUT FILE ONLY ASCIIZ PUSHJ P,OUTBTH ;BOTH TTY AND OUTPUT FILE(AS COMMENT) ASCIIZ <;ANSWER THE FOLLOWING QUESTIONS WITH Y OR N OR A DECIMAL NUMBER> PUSHJ P,ASKYN ASCIIZ <;SHORT DIALOG?[N = LONGER QUESTIONS]> MOVEM N,SHORT ;REMEMBER FOR QUTTTY ROUT. PUSHJ P,ASKYN ASCIIZ <;10/30 SYSTEM TO BE BUILT?[N = 10/40 OR 10/50 SYSTEM]> JUMPN N,.+2 JRST SYSASK+1 PUSHJ P,ASKYN ASCIIZ <;10/40 SYSTEM TO BE BUILT?[N = ASSUME 10/50 SYSTEM]> JUMPN N,SYS1 JRST SYSASK ENTERR: PUSHJ P,OUTTTY ASCIIZ JRST MON1 SYSASK: AOS SYS40N PUSHJ P,ASKYN ;FIND OUT IF 10/40 WITH DISK ASCIIZ <;DISK?> JUMPE N,SYSOUT ;DISK SYSTEM? SYS1: AOS DSKN AOS LOGINN SYSOUT: MOVE N,SYS40N ;DEFINE 10/40 SYSTEM SYMBOL PUSHJ P,OUTXP ASCIIZ MOVEI N,0 ;ASSUME 10/40 SKIPN SYS40N ;10/40 SYSTEM? MOVEI N,1 ;NO, MUST BE 10/50,SET TO 1 PUSHJ P,OUTXP ASCIIZ MOVE N,DSKN PUSHJ P,OUTXP ASCIIZ MOVE N,LOGINN PUSHJ P,OUTXP ASCIIZ SUBTTL SET-UP DISK CONFIGURATION DSKASK: SKIPN N,DSKN ;NEED A DISK? JRST JOBASK ;NO DISK - NO QUESTION PUSHJ P,ASKYN ASCIIZ <;RD10 (BURROUGHS) DISK?[ONE DISK TYPE FOR FILES, ;SAME TYPE FOR SWAPPING OR ONE OTHER TYPE FOR SWAPPING]> MOVEM N,RD10N SYS1A: PUSHJ P,OUTXP ASCIIZ SKIPN N,RD10N ;RD10 REQUESTED? JRST SYS1B ;NO. PUSHJ P,ASKYN ASCIIZ <;RD10 FOR SWAPPING?[N = CAN SWAP ON SOME OTHER TYPE]> MOVEM N,SWPYES SYS1B: PUSHJ P,OUTXP ASCIIZ SKIPN N,DSKN JRST SYS2A PUSHJ P,ASKDEC ASCIIZ <;HOW MANY RP01 OR RP02 (MEMOREX) DISK PACK DRIVES?[0 IF NONE]> SYS2A: MOVEM N,RP10N PUSHJ P,OUTXP ASCIIZ SKIPE N,RP10N SKIPE SWPYES JRST SYS2B ;AVOID QUESTION IF NO RP10 OR ALREADY HAVE SWAP DEV PUSHJ P,ASKYN ASCIIZ <;RP10 FOR SWAPPING?> MOVEM N,SWPYES SYS2B: PUSHJ P,OUTXP ASCIIZ SKIPN N,RP10N JRST SYS3 MOVE N,RP10N SOJE N,SYS2D ;AVOID QUESTION IF ONLY 1 PACK SYS2C: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY PRIVATE DRIVES?> CAML N,RP10N JRST SYS2C SYS2D: MOVNS N ADD N,RP10N SYS3: PUSHJ P,OUTXP ASCIIZ SKIPN N,DSKN JRST SYS3A PUSHJ P,ASKYN ASCIIZ <;RA10 (BRYANT) DISK?> MOVEM N,RA10N SYS3A: PUSHJ P,OUTXP ASCIIZ SETCM N,SWPYES AND N,RA10N ;RA10 AND NO SWAP DEVICE? JUMPE N,SYS3B ;NO. AVOID QUESTION PUSHJ P,ASKYN ASCIIZ <;RA10 FOR SWAPPING?> SYS3B: PUSHJ P,OUTXP ASCIIZ SKIPN N,DSKN JRST SYS4A PUSHJ P,ASKYN ASCIIZ <;DPD (DATA PRODUCTS) DISK?> MOVEM N,DPDN SYS4A: PUSHJ P,OUTXP ASCIIZ SETCM N,SWPYES AND N,DPDN ;DPDN AND NO SWAP DEVICE? JUMPE N,SYS4B ;NO. AVOID QUESTION PUSHJ P,ASKYN ASCIIZ <;DPD FOR SWAPPING?> MOVEM N,SWPYES SYS4B: PUSHJ P,OUTXP ASCIIZ SUBTTL DETERMIN JOB AND APR CONFIGURATION JOBASK: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY JOBS?[ATTACHED AND DETACHED, COUNTING NULL JOB]> JUMPE N,JOBASK CAILE N,^D128 JRST JOBASK JOBOUT: PUSHJ P,OUTXP ASCIIZ MXKASK: PUSHJ P,ASKDEC ASCIIZ <;MAX SIZE OF CORE (IN K) FOR ANY SINGLE USER? ;0 MEANS ALL OF CORE> MXKOUT: PUSHJ P,OUTXP ASCIIZ PDPASK: PUSHJ P,ASKYN ASCIIZ <;PDP-10 PROCESSOR?[N = PDP-6]> PDPOUT: PUSHJ P,OUTXP ASCIIZ RELASK: JUMPE N, REL1 ;PDP-10? PUSHJ P,ASKYN ;YES,ASK ABOUT 2 RELOC SOFTWARE ASCIIZ <;2 RELOCATION REG. SOFTWARE?[Y = MUST HAVE KT10A, ;N = JUST 1 RELOC. REG.]> REL1: PUSHJ P,OUTXP ASCIIZ JUMPE N,REL2 ;SEGN=0 IF PDP-6 OR NOT 2 RELOC. SOFT PUSHJ P,ASKDEC ASCIIZ <;HOW MANY MORE SEGMENTS THAN JOBS?[0 UNLESS YOU ;ANTICIPATE A LOT OF DORMANT SEGMENTS]> REL2: PUSHJ P,OUTXP ASCIIZ DDTASK: PUSHJ P,ASKYN ASCIIZ <;LOAD EXEC DDT?[N = ONLY IF LOADER HAS RUN OUT OF CORE BEFORE]> DDTOUT: PUSHJ P,OUTXP ASCIIZ SYM: PUSHJ P,ASKYN ASCIIZ <;LOAD LOCAL SYMBOLS?[N = ONLY IF LOADER HAS RUN OUT OF ROOM BEFORE]> SYMOUT: MOVEM N,LOCALN ;SAVE ANSWER FOR LATER INSTRUCTION UDTASK: PUSHJ P,ASKYN ASCIIZ <;LOAD USER DDT?[BOTH CAN BE LOADED TOGETHER, ;USE USER DDT FOR PATCHING UNDER TIME SHARING]> UDTOUT: PUSHJ P,OUTXP ASCIIZ NAMASK: PUSHJ P,ASKST2 ;STORE ANSWER IN LOC "ASCSTR" ASCIIZ <;NAME OF THIS SYSTEM (24 CHARS OR LESS)?> NAMOUT: PUSHJ P,OUTSTR ;SUBSTITUTE ANSWER FOR * ASCIIZ > SERASK: PUSHJ P,ASKDEC ;GET SERIAL NUMBER OF KA10 ASCIIZ <;WHAT IS THE SERIAL NUMBER OF YOUR ARITHMETIC PROCESSOR?> SEROUT: PUSHJ P,OUTXP ASCIIZ SETZM ASCSTR ;INITIALIZE THIS CELL DEVASK: PUSHJ P,ASKST2 ;STORE ANSWER IN LOC "ASCSTC" (UP TO SIX CHAR) ASCIIZ <;NAME OF SYSTEM DEVICE?[DTA0 USUAL FOR 10/40 SYSTEM, ;DSK USUAL FOR 10/50 SYSTEM]> SKIPE ASCSTR JRST DEVOUT MOVE WD,[ASCIZ /DSK/] SKIPN DSKN MOVE WD,[ASCIZ /DTA0/] MOVEM WD,ASCSTR DEVOUT: PUSHJ P,OUTSTR ;SUBSTUTITE ANSWER FOR * ASCIIZ > PUSHJ P,OUTFIL ASCIZ &DEFINE SYSDAT < ASCIZ /& CALL N,[SIXBIT /DATE/] IDIVI N,^D12*^D31 ADDI N,^D64 PUSH P,N IDIVI T,^D31 MOVEI N,1(T) MOVEI R,12 PUSHJ P,XPSUB1 MOVEI CH,"-" PUSHJ P,FILPUT MOVEI N,1(T1) PUSHJ P,XPSUB1 MOVEI CH,"-" PUSHJ P,FILPUT POP P,N PUSHJ P,XPSUB1 PUSHJ P,OUTFIL ASCIIZ > SUBTTL SET-UP TTY CONFIGURATION DLSASK: PUSHJ P,ASKYN ASCIIZ <;DATA LINE SCANNER(DC10)?[N = WILL ASK FOR 680 OR 630]> MOVEM N,DLSN JUMPN N,DLSOUT PUSHJ P,ASKYN ASCIIZ <;PDP-8 680 COMMUNICATIONS SYSTEM?[Y = 680I TOO, N = WILL ASK FOR 630]> MOVEM N,CCIN JUMPN N,DLSOUT PUSHJ P,ASKYN ASCIIZ <;630 COMMUNICATION SYSTEM?> MOVEM N,DCSN JUMPE N,DLSASK ;LOOP UNTIL HE SAYS Y TO ONE DLSOUT: MOVE N,DLSN PUSHJ P,OUTXP ASCIIZ MOVE N,CCIN PUSHJ P,OUTXP ASCIIZ MOVE N,DCSN PUSHJ P,OUTXP ASCIIZ TTNASK: SKIPE CCIN ;JUST 680? JRST TTN1 ;YES. NO DC10B,E, OR 632 PUSHJ P,ASKDEC ASCIIZ <;HOW MANY DC10B (OR 632) 8-LINE DATA GROUPS?[ ;1=TTY0-7, 2=TTY0-17, ... , 8=TTY0-77]> MOVEM N,TTGRPN SKIPN BTHN SKIPE DLSN SKIPA JRST TTN1 PUSHJ P,ASKDEC ASCIIZ <;HOW MANY DC10E DATASET CONTROL GROUPS?> MOVEM N,DSGRPN TTN1: SKIPN BTHN SKIPE CCIN SKIPA JRST TTN2 PUSHJ P,ASKOCT ASCIIZ <;HOW MANY (OCTAL) LINES ON YOUR 680(I), INCLUDING ;ITS CONSOLE TELETYPE?> MOVEM N,CCILN TTN2: TTNOUT: MOVE N,TTGRPN PUSHJ P,OUTXP ASCIIZ MOVE N,DSGRPN PUSHJ P,OUTXP ASCIIZ MOVE N,CCILN PUSHJ P,OUTXP ASCIIZ TTNEND: TTYASK: PUSHJ P,OUTBTH ASCIIZ <;ANSWER THE FOLLOWING QUESTIONS ABOUT YOUR TELETYPE LINES: ;[TYPE OCTAL LINE NUMBERS, ONE PER LINE. ;TYPE EXTRA CR WHEN DONE.] > TTY0: PUSHJ P,OUTBTH ASCIIZ <;DATA SET LINES?[PROJECT 1 CAN'T LOGIN, LOGIN RESETS ;LINE TO COMPUTER ECHOING AND NO HARDWARE TABS]> TTY0A: PUSHJ P,TTYIN1 JRST TTY1 PUSHJ P,OUTSTR ASCIIZ JRST TTY0A TTY1: PUSHJ P,OUTBTH ASCIIZ <;LINES WITH HARDWARE TABS?[MONITOR SIMULATES REST WITH SPACES]> TTY1A: PUSHJ P,TTYIN1 JRST TTY2 ;CR PUSHJ P,OUTSTR ASCIIZ JRST TTY1A TTY2: PUSHJ P,OUTBTH ASCIIZ <;REMOTE LINES?[PROJECT 1 CAN'T LOGIN,]> TTY2A: PUSHJ P,TTYIN1 JRST TTY21 ;CR PUSHJ P,OUTSTR ASCIIZ JRST TTY2A TTY21: PUSHJ P,OUTBTH ;ASK ABOUT LOCAL COPY LINES ASCIIZ <;LOCAL COPY LINES? [ECHOING PROVIDED BY TERMINAL RATHER ;THAN BY COMPUTER. OFTEN (INCORRECTLY) CALLED "HALF DUPLEX".]> TTY21A: PUSHJ P,TTYIN1 ;GET A LINE NUMBER JRST TTY3 ;JUST A CARRIAGE RETURN PUSHJ P,OUTSTR ;PUT LINE NUMBER IN THE FILE ASCIIZ JRST TTY21A ;SEE IF ANY MORE LOCAL COPY LINES TTY3: PUSHJ P,OUTBTH ASCIIZ <;HALF DUPLEX LINES?[TWX OR HALF DUPLEX WIRED SCANNER(DC10C)]> TTY3A: PUSHJ P,TTYIN1 JRST TTY4 PUSHJ P,OUTSTR ASCIIZ JRST TTY3A TTY4: PUSHJ P,OUTBTH ASCIIZ <;SLAVES? [NO COMMANDS MAY BE TYPED]> TTY4A: PUSHJ P,TTYIN1 JRST TTY5 PUSHJ P,OUTSTR ASCIIZ JRST TTY4A TTY5: PUSHJ P,OUTBTH ASCIIZ <;LINES WITH HARDWARE FORMFEED? [LEAVE OUT IF USERS WOULD RATHER ;NOT GET FORMFEEDS UNTIL THEY DO TTY FORM COMMAND]> TTY5A: PUSHJ P,TTYIN1 JRST TTY6 PUSHJ P,OUTSTR ASCIIZ JRST TTY5A TTY6: PUSHJ P,OUTBTH ASCIIZ <;LINES WHICH RUN INITIA AT STARTUP?> TTY6A: PUSHJ P,TTYIN1 JRST TTY7 PUSHJ P,OUTSTR ASCIIZ JRST TTY6A TTY7: EDTASK: PUSHJ P,ASKYN ASCIIZ <;COMMON.MAC ALREADY EDITED FOR YOUR TTY CONFIGURATION?[ ;N = WILL ALLOW YOU TO DEFINE NOW]> EDTOUT: PUSHJ P,OUTXP ASCIIZ JUMPN N,TTYEND ;DO NOT ASK QUESTIONS ABOUT TTY IF EDITED DSCASK: SKIPN DSGRPN ;ANY DC10E'S? JRST DSCEND ;NO PUSHJ P,OUTBTH ASCIIZ <;WHAT IS THE CORRESPONDENCE BETWEEN THE DC10E LINES ;AND THE DC10B LINES? TYPE "#,#" FOR EACH DATASET. FIRST # IS ;DC10E LINE, SECOND # IS DC10B LINE.[# IS AN OCTAL NUMBER. ;TYPE ONE #,# PER LINE, EXTRA CR WHEN DONE.]> PUSHJ P,OUTFIL ASCIZ /DEFINE DSASOC < / DSC1: PUSHJ P,TTYIN1 JRST DSC2 ;CR ONLY PUSHJ P,OUTSTR ASCIIZ JRST DSC1 ;LOOP FOR MORE DSC2: PUSHJ P,OUTFIL ASCIZ /> / DSCEND: TTYEND: SUBTTL SET-UP GENERAL PERIPHERAL CONFIGURATION PTRASK: PUSHJ P,ASKYN ASCIIZ <;PT READER?> PTROUT: PUSHJ P,OUTXP ASCIIZ PTPASK: PUSHJ P,ASKYN ASCIIZ <;PT PUNCH?> PTPOUT: PUSHJ P,OUTXP ASCIIZ PLTASK: PUSHJ P,ASKYN ASCIIZ <;PLOTTER?> PLTOUT: PUSHJ P,OUTXP ASCIIZ LPTASK: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY LINE PRINTERS?[0,1 OR 2]> CAILE N,2 JRST LPTASK MOVEM N,LPTN LPTOUT: MOVE N,LPTN PUSHJ P,OUTXP ASCIIZ CDRASK: PUSHJ P,ASKYN ASCIIZ <;CARD READER?> MOVEM N,CDRN JUMPE N,CDROUT CDR1: PUSHJ P,ASKYN ASCIIZ <;CR10?[Y = CR10A TOO, N IF PDP-6 CARD READER]> MOVEM N,CR10N CDROUT: MOVE N,CDRN PUSHJ P,OUTXP ASCIIZ MOVE N,CR10N PUSHJ P,OUTXP ASCIIZ CDPASK: PUSHJ P,ASKYN ASCIIZ <;CARD PUNCH?> CDPOUT: PUSHJ P,OUTXP ASCIIZ DISASK: PUSHJ P,ASKYN ASCIIZ <;DISPLAY?> JUMPE N,DISOUT MOVEM N,DISN DIS1: PUSHJ P,ASKYN ASCIIZ <;TYPE 340?> MOVEM N,T340N DISOUT: MOVE N,DISN PUSHJ P,OUTXP ASCIIZ MOVE N,DISN PUSHJ P,OUTXP ;ASSUME PEN IF DISPLAY ASCIIZ MOVE N,T340N PUSHJ P,OUTXP ASCIIZ DTAASK: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY DECTAPES?[0 TO 8]> JUMPE N,DTAOUT CAILE N,^D8 JRST DTAASK MOVEM N, DTANN DTA1: PUSHJ P,ASKYN ASCIIZ <;TD10 DECTAPE CONTROL?[N = PDP-6 DECTAPE]> MOVE T,DTANN SKIPE N MOVEM T,DTAN SKIPN N MOVEM T,DTCN DTAOUT: MOVE N,DTAN PUSHJ P,OUTXP ASCIIZ MOVE N,DTCN PUSHJ P,OUTXP ASCIIZ MTAASK: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY MAGTAPES?[0 TO 8]> JUMPE N,MTAOUT CAILE N,^D8 JRST MTAASK MOVEM N,MTANN MTA1: PUSHJ P,ASKYN ASCIIZ <;TM-10A CONTROL?[N = WILL ASK TM-10B, THEN PDP-6 MAGTAPES]> JUMPE N,MTA2 MOVE N,MTANN MOVEM N,MTAN JRST MTAOUT MTA2: PUSHJ P,ASKYN ASCIIZ <;TM-10B CONTROL?> JUMPE N,MTA3 MOVE N,MTANN MOVEM N,MTBN JRST MTAOUT MTA3: PUSHJ P,ASKYN ASCIIZ <;PDP-6 MAGTAPE?> JUMPE N,MTAASK ;LOOP UNTIL HE PICKS ONE MOVE N,MTANN MOVEM N,MTCN MTAOUT: MOVE N,MTAN PUSHJ P,OUTXP ASCIIZ MOVE N,MTBN PUSHJ P,OUTXP ASCIIZ MOVE N,MTCN PUSHJ P,OUTXP ASCIIZ PTYASK: PUSHJ P,ASKDEC ASCIIZ <;HOW MANY PSEUDO-TTY'S?[EACH CONCURRENT BATCH NEEDS ONE]> CAILE N,^D64 JRST PTYASK PUSHJ P,OUTXP ASCIIZ SUBTTL DETERMIN MISC. PARAMETERS ASKSYM: PUSHJ P,OUTBTH ASCIIZ <;TYPE "SYMBOL,VALUE" (VALUE IN DECIMAL)[FOR ANY SYMBOLS ;TO BE DEFINED. NEXT QUESTION WILL ASK FOR OCTAL DEFINITION. ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]> PUSHJ P,OUTFIL ;MAKE MACRO CONVERT IN DECIMAL RADIX WHEN COMMON ASS. ASCIIZ GETSYM: PUSHJ P,TTYIN ILDB CH,B CAIN CH,12 JRST SYMDON PUSHJ P,OUTSTR ASCIIZ JRST GETSYM SYMDON: PUSHJ P,OUTFIL ;PSEUDO OP BACK TO OCTAL ASCIIZ ASKSY8: PUSHJ P,OUTBTH ASCIIZ <;TYPE "SYMBOL,VALUE" (VALUE IN OCTAL)[FOR ANY SYMBOLS ;TO BE DEFINED. TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]> GETSY8: PUSHJ P,TTYIN ILDB CH,B CAIN CH,12 JRST OCTDON PUSHJ P,OUTSTR ASCIIZ JRST GETSY8 OCTDON: ASKDEV: PUSHJ P,OUTBTH ASCIIZ <;TYPE "DEVICE-MNEMONIC,CHANNEL"FOR SPECIAL DEVICES[ ;WITH NEITHER CHANNEL SAVE ROUTINE NOR DEVICE DATA BLOCK. ;"DEVICE" MUST BE 3 CHARACTERS OR LESS. ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]> PUSHJ P,OUTFIL ASCIZ /DEFINE SPCINT < / DEV0: PUSHJ P,TTYIN ILDB CH,B CAIN CH,12 ;LF JRST DEV1 PUSHJ P,OUTSTR ASCIIZ < SPASGINT *> JRST DEV0 DEV1: PUSHJ P,OUTFIL ASCIZ />/ PUSHJ P,OUTBTH ASCIIZ <;TYPE "DEVICE-MNEMONIC,CHANNEL,NO.-OF-DEVICES"[ ;FOR SPECIAL DEVICE WITH DEVICE DATA BLOCKS ;"DEVICE" MUST BE 3 CHARS. OR LESS. ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]> PUSHJ P,OUTFIL ASCIZ /DEFINE SPCDDB < / DEV2: PUSHJ P,TTYIN ILDB CH,B CAIN CH,12 JRST DEV3 PUSHJ P,OUTSTR ASCIIZ < SPASGDDB *> JRST DEV2 DEV3: PUSHJ P,OUTFIL ASCIZ />/ PUSHJ P,OUTBTH ASCIIZ <;TYPE "DEVICE-MNEMONIC,CHANNEL,HIGHEST-AC-TO-SAVE[ ;FOR SPECIAL DEVICE WITH CHANNEL SAVE ROUTINES TO SAVE AC'S UP TO ;"HIGHEST-AC-TO-SAVE". "DEVICE" MUST BE 3 CHARS. OR LESS. ;TYPE EXTRA CARRIAGE RETURN WHEN THROUGH.]> PUSHJ P,OUTFIL ASCIZ /DEFINE SPCSAV < / DEV4: PUSHJ P,TTYIN ILDB CH,B CAIN CH,12 JRST DEV5 PUSHJ P,OUTSTR ASCIIZ < SPASGSAV *> JRST DEV4 DEV5: PUSHJ P,OUTFIL ASCIZ />/ REMEND: SUBTTL FINISH OFF THE JOB PUSHJ P,OUTBTH ASCIIZ <;[MONGEN FINISHED ;NEXT YOU MUST ASSEMBLE COMMON WITH MACRO> SKIPN LEVDN JRST ASSEM1 PUSHJ P,OUTBTH ASCIIZ <;AND COMMOD> ASSEM1: PUSHJ P,OUTBTH ASCIIZ <;THEN LOAD IT AND REST OF MONITOR WITH LOADER ;AND FINALLY SAVE IT WITH MONITOR COMMAND SAVE ;[TO ASSEMBLE COMMON, TYPE: ;R MACRO ;DSK:COMMON,LPT:_DSK:S,CONFIG,COMMON> PUSHJ P,OUTBTH ASCIIZ <;TO LOAD NEW MONITOR, TYPE: ;R LOADER> SKIPN LOCALN JRST NOLCLS PUSHJ P,OUTBTH ASCIIZ <;/S> NOLCLS: SKIPN SYS40N ;10/40 SYSTEM? JRST SYS40A ;NO PUSHJ P,OUTBTH ;YES, TYPE PROPER LIBRARY NAME ASCIIZ <;BIN:COMMON,BIN:SYS50/L> JRST SYS40B SYS40A: PUSHJ P,OUTBTH ASCIIZ <;DSK:COMMON,COMMOD,DSK:SYS40/L> SYS40B: PUSHJ P,OUTBTH ASCIIZ <;LPT:_/W/D/A/M/P/G> DDT1: PUSHJ P,OUTBTH ASCIIZ <;TO SAVE MONITOR, TYPE: ;SAVE DSK MONITOR ;] ; END OF CONFIGURATION DEFINITION SUBTTL ;]> MOVEI CH,14 ;OUTPUT FORMFEED FOR END OF CONFIG.MAC FILE PUSHJ P,FILPUT RELEASE OUTCHN, ;RELEASE OUTPUT FILE CALL [SIXBIT /EXIT/] SUBTTL VARIABLE AND PARAMETER STORAGE ;VARIABLE STORAGE TOBUF: BLOCK 3 ;TTY OUTPUT BUFFER HEADER TIBUF: BLOCK 3 ;TTY INPUT BUFFER HEADER FOBUF: BLOCK 3 ;FILE OUTPUT BUFFER HEADER PDLIST: BLOCK 12 RC10S: BLOCK 1 RP10S: BLOCK 1 RA10S: BLOCK 1 ;VARIABLES WHICH ARE ALSO OUTPUT IN CONFIG.MAC ;NONE OF THE VALUES OF THESE VARIABLES ARE USED OUTSIDE OF THE QUESTION IN WHICH THEY ARE ASKED. VARBEG: ;BEGINNING OF AREA TO BE CLEARED SHORT: 0 ;NON-ZERO IF SHORT DIALOG(OMIT STUFF IN []) LEFTBK: 0 ;NON-ZERO IF LEFT BRACKET SEEN SYS40N: 0 ; DSKN: 0 LEVDN: 0 ;LEVEL D VS LEVEL C CHNN: 0 LOGINN: 0 RD10N: 0 ; RP10N: 0 ; RA10N: 0 ; DPDN: 0 ; SWPYES: 0 LOCALN: 0 ; BTHN: 0 ;BOTH 680 AND DC10 DLSN: 0 ; CCIN: 0 ; DCSN: 0 ; TTGRPN: 0 ;GROUPS OF DC10B OR 632 DSGRPN: 0 ;GROUPS OF DC10E CCILN: 0 ;LINES OF 680 CDRN: 0 ; CR10N: 0 ; DISN: 0 ; T340N: 0 ; TVP10N: 0 ; T30N: 0 ; DTANN: 0 ; DTAN: 0 ; DTCN: 0 ; MTANN: 0 ; MTAN: 0 ; MTBN: 0 ; MTCN: 0 ; SPCDEV: 0 ;SET NONZERO IF ANY SPECIAL DEVICES TEMPN: 0 ; TMPN: 0 ; TMPLN: 0 ; LPTN: 0 MOVIEN: 0 ; LOKN: 0 VAREND=.-1 ;END OF AREA TO BE CLEARED SUBTTL SUBROUTINES ;ROUTINE TO WRITE IN-LINE STRING ON OUTPUT FILE ;CALL: PUSHJ P,OUTFIL ; ASCIIZ ; RETURN OUTFIL: MOVE T,(P) PUSHJ P,FILO POP P,CH JRST 1(T) ;ROUTINE TO WRITE OUT-OF-LINE STRING ON OUTPUT FILE ;CALL: MOVEI T,[ASCIZ /MESSAGE/] ; PUSHJ P,FILO ; RETURN FILO: HRLI T,440700 FILOLP: ILDB CH,T JUMPE CH,CPOPJ PUSHJ P,FILPUT JRST FILOLP ;ROUTINE TO OUTPUT AN IN LINE STRING TO BOTH FILE AND TTY ;CALL: PUSHJ P,OUTBTH ; ASCIZ /STRING/ ; RETURN OUTBTH: MOVE T,(P) PUSHJ P,FILO ;FALL INTO OUTTTY ;ROUTINE TO OUTPUT AN IN-LINE STRING TO TTY ;CALL: PUSHJ P,OUTBTH ; ASCIZ /STRING/ ; RETURN OUTTTY: MOVE T,(P) PUSHJ P,TTYO POP P,CH JRST 1(T) ;ROUTINE TO OUTPUT AN OUT-OF-LINE STRING ON TTY ;CALL: MOVEI T,[ASCIZ /STRING/] ; PUSHJ P,TTYO ; RETURN TTYO: HRLI T,440700 TTYOLP: ILDB CH,T JUMPE CH,TTYFIN CAIE CH,"[" ;IS THIS A LEFT BRACKET? JRST TTYO1 ;NO, SKIPE SHORT ;YES, IS SHORT DIALOG WANTED? SETOM LEFTBK ;YES, SET LEFT BRACKET SO OUTPUT SUPPRESSED TTYO1: SKIPE LEFTBK ;OUTPUT SUPPRESSED BECAUSE INSIDE []? JRST TTYO2 ;YES CAIE CH,";" ;NO, DO NOT TYPE ";" ON TTY PUSHJ P,TTYPUT TTYO2: CAIN CH,"]" ;END OF LONG STUFF? SETZM LEFTBK ;YES, TURN OFF TTY SUPPRESS FLAG JRST TTYOLP TTYFIN: OUTPUT TOCHN, CPOPJ: POPJ P, ;ROUTINE TO ASK A QUESTION AND ACCEPT Y OR N (1 OR 0) ;CALL: PUSHJ P,ASKYN ; ASCIZ /QUESTION?/ ; RETURN ASKYN: PUSHJ P,FCRLF ;PUT CRLF IN FILE ONLY HRRZ T,(P) PUSHJ P,FILO YN1: HRRZ T,(P) HRLS (P) PUSHJ P,TTYO AOS T HRRM T,(P) PUSHJ P,TTYIN PUSHJ P,GETWRD MOVEI N,0 CAME WD,[SIXBIT /0/] CAMN WD,[SIXBIT /N/] JRST YNOK CAMN WD,[SIXBIT /NO/] JRST YNOK MOVEI N,1 CAME WD,[SIXBIT /1/] CAMN WD,[SIXBIT /Y/] JRST YNOK CAME WD,[SIXBIT /YES/] JRST YN2 YNOK: PUSHJ P,OUTSTR ASCIIZ <;*> POPJ P, YN2: HLRS (P) JRST YN1 ;ROUTINE TO OUTPUT ON FILE ASCIZ STRING IN ASCSTR ; SUBSTITUTED FOR "*" ;CALL: PUSHJ P,OUTSTR ; ASCIIZ OUTSTR: MOVE T,(P) PUSHJ P,STRO POP P,CH JRST 1(T) STRO: HRLI T,440700 STROLP: ILDB CH,T JUMPE CH,CPOPJ CAIN CH,"*" JRST STRSUB PUSHJ P,FILPUT JRST STROLP STRSUB: PUSH P,T MOVEI T,ASCSTR PUSHJ P,FILO POP P,T JRST FILOLP ;ROUTINE TO SUBSTITUTE OCTAL VALUE OF N FOR * IN STRING ; AND OUTPUT ON FILE ; MOVE N,OCTAL NUMBER ;CALL: PUSHJ P,OUTXP ; ASCIZ /MESSAGE*MESSAGE/ ;RETURN WITH N PRESERVED OUTXP: MOVE T,(P) PUSHJ P,XPO POP P,CH JRST 1(T) XPO: HRLI T,440700 XPOLP: ILDB CH,T JUMPE CH,CPOPJ CAIN CH,"*" JRST XPSUB PUSHJ P,FILPUT JRST XPOLP XPSUB: PUSH P,T PUSH P,N MOVEI R,10 PUSHJ P,XPSUB1 POP P,N POP P,T JRST FILOLP XPSUB1: IDIVI N,(R) HRLM T,(P) JUMPE N,.+2 PUSHJ P,XPSUB1 HLRZ T,(P) MOVEI CH,"0"(T) JRST FILPUT ;ROUTINE TO PUT 1 CHAR IN OUTPUT FILE ;CALL: MOVEI CH,CHAR ; PUSHJ P,FILPUT FILPUT: CAIN CH,15 ;CARRIAGE RETURN? POPJ P,0 ;YES. THROW IT AWAY CAIN CH,12 ;LINE FEED? JRST FILPU1 ;YES. TURN INTO CR-LF FILPU2: SOSG FOBUF+2 OUTPUT FOCHN, IDPB CH,FOBUF+1 POPJ P, FILPU1: MOVEI CH,15 ;OUTPUT A CR PUSHJ P,FILPU2 MOVEI CH,12 ;AND A LINEFEED JRST FILPU2 ;ROUTINE TO PUT 1 CHAR IN OUTPUT TTY ;CALL: MOVEI CH,CHAR ; PUSHJ P,TTYPUT TTYPUT: SOSG TOBUF+2 OUTPUT TOCHN, IDPB CH,TOBUF+1 POPJ P, ;ROUTINE TO ASK FOR A STRING AND DELETE THE CR-LF FROM THE ANSWER ;CALL: PUSHJ P,ASKST2 ASCIIZ ASKST2: PUSHJ P,ASKSTZ PUSHJ P,TTYIN ILDB T,B ASKST4: CAIE T,12 JUMPN T,.-2 DPB CH,B POPJ P, ;ROUTINE TO ASK FOR A STRING ;CALL: PUSHJ PDP,ASKSTR ; ASCIIZ ASKSTR: PUSHJ P,ASKSTZ JRST TTYIN ASKSTZ: PUSHJ P,FCRLF ;PUT CRLF IN FILE ONLY HRRZ T,-1(P) PUSHJ P,FILO HRRZ T,-1(P) PUSHJ P,TTYO AOS T EXCH T,(P) JRST (T) ;ROUTINE TO ACCEPT 1 LINE FROM TTY AND MOVE TO ASCSTR AND ; APPEND A NULL CHAR. ;CALL: PUSHJ P,TTYIN TTYIN: MOVE T,[XWD 440700,ASCSTR] ASCLP: PUSHJ P,TTYGET JRST ASCEND IDPB CH,T JRST ASCLP ASCEND: IDPB CH,T MOVEI CH,0 IDPB CH,T MOVE B,[XWD 440700,ASCSTR] POPJ P, ;ROUTINE TO GET 1 CHAR FROM TTY ;CALL: PUSHJ P,TTYGET ; RETURN1 WITH CR IN AC CH ; RETURN2 WITH ANY OTHER CHAR IN AC CH TTYGET: SOSG TIBUF+2 INPUT TTYCHN, ILDB CH,TIBUF+1 JUMPE CH,TTYGET CAIN CH,15 JRST TTYGET CAIE CH,12 AOS (P) POPJ P, ;ROUTINE TO ACCEPT 1 LINE FROM TTY AND MOVE TO ASCSTR AND APPEND NULL ;SAME AS TTYIN, SKIP RETURN IF NON-BLANK LINE ;CALL: PUSHJ P,TTYIN1 ; BLANK LINE RETURN ; NON-BLANK LINE RETUNR TTYIN1: PUSHJ P,TTYIN ;GET LINE ILDB T,B ;LF? CAIE T,12 AOS (P) ;NO, JRST ASKST4 ;REMOVE CR-LF FROM END OF STRING ;ROUTINE TO GET FIRST 6 CHAR TYPED IN A RETURN AS SIXBIT ; LEFT JUSTIFIED IN AC WD GETWRD: MOVE T,[XWD 440600,WD] MOVEI WD,0 GETWDL: ILDB CH,B JUMPE CH,CPOPJ CAIG CH,15 CAIGE CH,12 SKIPA POPJ P, CAIE CH,":" CAIN CH,"." POPJ P, CAIGE CH,140 TRC CH,40 IDPB CH,T TRNN WD,77 JRST GETWDL POPJ P, ASCSTR: BLOCK 20 ;ASCIZ STRING ;ROUTINE TO ASK A QUESTION AND ACCEPT A DECIMAL ANSWER ;CALL: PUSHJ P,ASKDEC ; ASCIIZ ASKDEC: MOVEI R,12 JRST ASKNUM ASKDC1: MOVEI R,12 JRST ASKNM1 ;ROUTINE TO ASK A QUESTION AND ACCEPT AN OCTAL NUMBER ;CALL: PUSHJ P,ASKOCT ; ASCIZ /QUESTION/ ASKOCT: MOVEI R,10 ASKNUM: PUSHJ P,FCRLF ;PRECEDE WITH CRLF IN FILE ONLY ASKNM1: HRRZ T,(P) PUSHJ P,FILO MOVEI CH,";" PUSHJ P,FILPUT ASKNE: HRRZ T,(P) PUSHJ P,TTYO MOVEI N,0 ASKNL: PUSHJ P,TTYGET JRST ASKNXT CAIL CH,"0" CAIL CH,"0"(R) JRST ASKERR IMUL N,R ADDI N,-"0"(CH) PUSHJ P,FILPUT JRST ASKNL ASKNXT: PUSHJ P,FCRLF POP P,T1 JRST 1(T) ASKERR: PUSHJ P,TTYGET JRST ASKNE JRST .-2 ;ROUTINE TO OUTPUT CRLF IN OUTPUT FILE ;CALL: PUSHJ P,FCRLF ;USED TO SEPARATE QUESTION FROM PREVIOUS MACRO CALL FCRLF: MOVEI CH,15 PUSHJ P,FILPUT MOVEI CH,12 JRST FILPUT END MONGEN