--- /dev/null
+/MARK SENSE BATCH AND PIP
+/
+/
+/
+/
+/
+/
+/
+//
+/
+/
+/
+/
+/COPYRIGHT (C) 1974, 1975, 1977
+/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
+/
+/
+/
+/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
+/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
+/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
+/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
+/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
+/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
+/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
+/
+/
+/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
+/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
+/EQUIPMRNT COROPATION.
+/
+/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
+/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
+/
+/
+/
+/
+/
+/
+\f/MARK SENSE BATCH AND PIP JANUARY 9, 1974
+/
+/
+/
+/ AUTHOR:
+/ MARK B. ROSENTHAL
+/ DIGITAL EQUIPMENT CORPORATION
+/
+/ VERSION 3A M.H. 28-APR-77
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+
+
+
+
+L7775=CLA CLL CMA RTL
+L7776=CLA CLL CMA RAL
+L7777=CLA CLL CMA
+L0002=CLA CLL CML RTL
+L0001=CLA CLL IAC
+CONTCH=3 /CONTINUATION CHARACTER
+RUBOUT=7 /RUBOUT BITS
+JOBBIT=0200 /BIT POSITION OF $JOB IN COLUMN 1
+EOFCHR=6004 /END OF FILE CARD CHARACTER IS _
+TABCHR=6010 /TAB CHARACTER
+FFCHR=3010 /FORM FEED CHARACTER
+NOCHR=6400 /# CHARACTER
+RCSE=6672 /CARD READER SELECT AND SKIP IF READY
+RCSD=6671 /CARD READER SKIP IF CARD DONE
+RCRD=6674 /CARD READER CLEAR CARD DONE FLAG
+RCSF=6631 /CARD READER SKIP IF DATA READY
+RCRB=6634 /CARD READER READ BINARY
+KCF=6030 /CLEAR KEYBOARD FLAG
+SYSNO=CLA CLL IAC /OS8 DEVICE NUMBER FOR SYS:
+DSKNO=CLA CLL CML RTL /OS8 DEVICE NUMBER FOR DSK:
+FETCH=1
+LOOKUP=2
+ENTER=3
+CLOSE=4
+DECODE=5
+CHAIN=6
+USRIN=10
+USROUT=11
+F0=0
+F1=10
+JSBITS=7746 /JOB STATUS WORD
+
+
+
+*10
+XR1, 0
+XR2, 0
+XRCDR, 0
+XROPT, 0
+
+
+*20
+ERROR=JMS I .; XERR
+CONVRT=JMS I .; XCONVR
+OUT=JMS I .;OUTAD, XOUT
+SAVFLD=JMS I .;XSAVDF
+USR=JMS I .; 200
+KEYWD, 0;0;0;0
+TEMP1, 0
+TEMP2, 0
+TEMP3, 0
+TEMP4, 0
+TEMP5, 0
+OPTCNT, 0 /OUTPUT BUFFER COUNT
+OPTSW, 0 /OUTPUT BUFFER THREE WAY SWITCH
+KEYADR, 0
+KEYVAL, 0
+ERRFLG, 0
+ERRCNT, 0
+CONFLG, 0
+LNCNT, 0
+USRFLG, 0
+OFILE, ZBLOCK 5 /OUTPUT FILE DEVICE, LENGTH, AND NAME
+CDRFLG, -1 /CDRIN TO PASSES LAST CARD IF 0
+BCLSW, 0
+CDREOF, -1
+DEVENT, 0 /ENTRY ADDRESS OF OUTPUT DEVICE HANDLER
+IOERR, 0 /ERROR NUMBER
+VERNO9, ISZ IOERR
+IOER8, ISZ IOERR
+CDRER7, ISZ IOERR
+OPTER6, ISZ IOERR
+OPTER5, ISZ IOERR
+OPTER4, ISZ IOERR
+OPTER3, ISZ IOERR
+OPTER2, ISZ IOERR
+OPTER1, JMP I .+1
+ IOERR1
+
+
+\f*200
+START, ISZ USRFLG;SKP /IS THE USR IN CORE?
+ JMP CD /YES
+ CIF 10;JMS I (7700;USRIN /LOCK USR IN CORE
+CD, L7777 /SET FLAG FOR USR IN CORE
+ DCA USRFLG
+ CIF 10;USR;DECODE;0 /DELETE TENTATIVE FILES
+ TAD (7577 /COPY OUTPUT FILE #1 (NAME AND DEVICE)
+ DCA XR1
+ CDF F1
+ TAD I (7644 /TEST /V SWITCH
+ AND (4
+ SZA CLA
+ JMP VERNO9 /YES - PRINT VERSION NUMBER
+ TAD I XR1
+ SNA /IF NOT SPECIFIED,
+ DSKNO /USE DEVICE DSK:
+ DCA OFILE
+ TAD I XR1
+ SNA /WAS A NAME GIVEN?
+ JMP OPTER1 /NO
+INIT1, DCA OFILE+1
+ TAD I XR1
+ DCA OFILE+2
+ TAD I XR1
+ DCA OFILE+3
+ TAD I XR1
+ DCA OFILE+4
+ TAD (OFILE+1
+ DCA BLOKNO /SET FILE NAME ADDRESS
+ TAD I (7605 /GET SECOND OUTPUT DEVICE SPECIFICATION
+ DCA I (7600 /MOVE TO FIRST FOR SPOOLING IN BATCH
+ CDF
+ TAD BLOKNO /GET ADDRESS OF FILE NAME
+ DCA I (CLOSNM /AND SAVE FOR CALL TO CLOSE
+ TAD (OPTDEV&7600+1 /SET DEVICE HANDLER SPACE
+ DCA DEVHDL
+ TAD OFILE
+ CIF 10;USR;FETCH /FETCH DEVICE HANDLER
+DEVHDL, OPTDEV&7600+1 /2 PAGES
+ JMP OPTER2 /ERROR - CANNOT FETCH HANDLER
+ TAD DEVHDL /MOVE ENTRY ADDRESS
+ DCA DEVENT /TO PAGE ZERO
+ TAD OFILE /ENTER THE FILE NAME AS TENTATIVE
+ CIF 10;USR;ENTER
+BLOKNO, OFILE+1 /FILE NAME, STARTING BLOCK RETURNED HERE
+FILLEN, 0 /RETURNS FILE LENGTH HERE
+ JMP OPTER3 /CANNOT ENTER FILE
+ CIF 10;USR;USROUT /DISMISS THE USR
+ DCA USRFLG /CLEAR USR IN CORE FLAG
+ CDF 10
+ TAD BLOKNO /SAVE STARTING BLOCK NO. FOR BATCH
+ DCA I (7620
+ TAD OFILE /SAVE DEVICE NO. FOR BATCH
+ AND (17
+ DCA I (7617
+ TAD I (7643 /GET OPTIONS
+ CDF F0
+ AND (2100 / /B OR /F
+ SNA
+ DCA I (EOFJMP /IF NEITHER, THEN WE CHAIN TO BATCH
+ CLL RTL /GET /B OUT OF AC
+ SZA CLA /IF AC=0 START WITH BASIC KEYWORDS
+ TAD (FORKEY-BASKEY
+ TAD (BASKEY-15
+ DCA KEYADR
+ JMP I (INIT5
+
+
+PAGE
+\fINIT5, TAD (BPRI2 /TAILOR IT FOR BATCH PROCESSING
+ DCA I (BPRKEY /"PRINT #4,"
+ TAD (BINP2
+ DCA I (BINKEY /"INPUT #3,"
+ TAD (BSTO2
+ DCA I (BSTKEY /"CLOSE# 4\STOP"
+ TAD (BEND2
+ DCA I (BENKEY /"CLOSE #4\END"
+ CDF F1
+ DCA I (CBAS5 /NO JUMP
+ DCA I (DATL48 /NO JUMP
+ TAD (CL2M1A /".R LOADER_*GENIOX"
+ DCA I (CL2SX
+ TAD I (7643 /TEST /I OPTION (INTERACTIVE)
+ AND (10
+ SNA CLA
+ JMP INIT6
+ TAD BASJMP /SET UP FOR FILES 0 & 1
+ DCA I (CBAS5 /SET UP THE JMP
+ TAD BASJM1 /SET UP JUMP
+ DCA I (DATL48
+ TAD (CL2M1 /".R LOADER_*"
+ DCA I (CL2SX
+ CDF F0
+ TAD (BPRI
+ DCA I (BPRKEY
+ TAD (BINP
+ DCA I (BINKEY
+ TAD (BSTO
+ DCA I (BSTKEY
+ TAD (BEND
+ DCA I (BENKEY
+INIT6, CDF 10
+ TAD I (7644 /TEST /T OPTION
+ AND (20
+ SNA CLA
+ TAD (BATLPT-BATTTY
+ TAD (BATTTY
+ CIF CDF F1
+ JMS I (MOVODV
+ TAD I (7645 /TEST /2 OPTION
+ AND (200
+ SNA CLA
+ JMP INIT3
+ TAD (CF2 /FORTRAN 2
+ DCA I (FORADR
+ TAD (CL2
+ DCA I (LOAADR
+ TAD (DATX2
+ JMP INIT4
+INIT3, TAD (CF4 /FORTRAN 4
+ DCA I (FORADR
+ TAD (CL4
+ DCA I (LOAADR
+ TAD (DATX4 /INITIALIZE $DATA
+INIT4, DCA I (DATFTN
+ TAD I (DATFTN
+ DCA I (DATADR
+ TAD (SAVARA
+ DCA I (SAVPNT
+ DCA I (NAMCNT
+ CDF F0
+ DCA BCLSW /NO BCL CARDS YET
+ L7777
+ DCA CDREOF /RESET EOF SWITCH
+ TAD I (BLOKNO /SET STARTING BLOCK NUMBER
+ DCA I (OPTBLK
+ TAD (OPTBUF-1
+ DCA XROPT
+ TAD (-200
+ DCA OPTCNT
+ L7775
+ DCA OPTSW
+ DCA ERRCNT /CLEAR COUNT OF CARDS IN ERROR
+ JMP I (READY
+
+BASJMP, JMP CBAS7&177+INIT5
+BASJM1, JMP DATL49&177+INIT5
+
+
+PAGE
+\fREADY, JMS I (CDRIN /READ A CARD
+ JMP I (EOF /END OF FILE SENSED
+ TAD I XRCDR /GET COLUMN 1
+ DCA KEYWD /SAVE AS KEYWORD BITS
+ TAD XRCDR
+ DCA XR2
+
+
+/TRANSLATE LINE NUMBER
+ TAD (-5
+ DCA TEMP1
+ DCA LNCNT /CLEAR COUNT
+ DCA KEYWD+3 /CLEAR COLUMN 2-6 KEYWORD BITS
+LNLP, TAD I XRCDR /GET LINE NO. COLUMN
+ DCA TEMP2 /SAVE CHAR
+ TAD (6000
+ AND TEMP2 /GET KEYWORD BITS
+ CLL RAL
+ RTL
+ TAD KEYWD+3
+ CLL RTL
+ DCA KEYWD+3
+ TAD (1777
+ AND TEMP2 /GET CHAR
+ SNA
+ JMP LNLPEN /IGNORE BLANKS
+ CONVRT /TRANSLATE
+ JMP LNLPEN /IGNORE RUBOUTS
+ TAD (-"9
+ SMA SZA
+ JMP LNERR /NOT A NUMBER
+ TAD ("9-"0
+ SPA
+ JMP LNERR /NOT A NUMBER
+ TAD ("0
+LNLP1, DCA I XR2 /INSERT CHARACTER IN OUTPUT BUFFER
+ ISZ LNCNT /COUNT THIS CHARACTER
+LNLPEN, ISZ TEMP1 /GOT ALL LINE NUMBER COLUMNS?
+ JMP LNLP /NO - LOOP.
+ JMP I (KEYTRA /GO TRANSLATE KEYWORD
+
+
+LNERR, ERROR
+ JMP LNLP1
+
+
+MAKNA2, 0 /FIELD 1 OUTPUT ROUTINE FOR MAKNAM
+ CIF CDF F1
+ JMS I (MAKNA3
+ JMP I MAKNA2
+
+OOUT2, 0
+ OUT
+ CIF CDF F1
+ JMP I OOUT2
+
+GETCD1, 0
+ TAD I XRCDR
+ CIF CDF F1
+ JMP I GETCD1
+
+/FOR RETURN TO CALLING FIELD
+/PRESERVES AC AND LINK WHILE PUTTING
+/CIF CDF TO DATA FIELD AT ADDRESS
+/SPECIFIED AS FIRST WORD AFTER CALL
+XSAVDF, 0
+ DCA XSAVD1
+ RDF
+ TAD (CIF CDF
+ DCA XSAVD2
+ CDF
+ TAD I XSAVDF
+ ISZ XSAVDF
+ DCA XSAVD3
+ TAD XSAVD2
+ DCA I XSAVD3
+ TAD XSAVD1
+ JMP I XSAVDF
+XSAVD1, 0
+XSAVD2, 0
+XSAVD3, 0
+
+PAGE
+\fXERR, 0
+K7600, 7600
+ TAD ("? /OUTPUT A "?"
+ ISZ ERRFLG /FLAG ERROR ON THIS CARD
+ JMP I XERR
+
+TIME=12
+
+CDRIN, 0 /READ A CARD INTO THE BUFFER
+ SAVFLD;CDRCIF /SAVE DATA FIELD FOR RETURN
+ DCA ERRFLG /CLEAR ERROR FLAG FOR THIS CARD
+ ISZ CDREOF /HAVE WE SEEN EOF?
+ JMP CDRCIF /YES - STILL EOF
+ ISZ CDRFLG /SHOULD WE PASS LAST CARD?
+ JMP REINIT /YES
+CDRIN6, JMS CDRIN5 /RESET TIME OUT COUNTERS
+ TAD (-50 /YES - READ IT INTO THE CDR BUFFER
+ DCA TEMP1 /40 COLUMNS (DECIMAL)
+ TAD (CDRBUF-1
+ DCA XRCDR
+CDRIN3, RCSE /CARD READY?
+ JMP CDRIN4 /TEST TIME OUT
+ JMS CDRIN5 /RESET TIME OUT COUNT
+CDRIN1, JMS KBRD /TEST KEYBOARD (AFTER TIME OUT LOOP)
+ RCSD /CARD DONE?
+ SKP
+ JMP CDRIN7 /YES - TOO FEW COLUMNS
+ RCSF /CHARACTER READY?
+ JMP CDRIN1 /NO - TRY CARD DONE
+ JMS CDRIN5 /RESET TIME OUT COUNT
+ RCRB /YES - READ BINARY
+CDRIN2, DCA I XRCDR /AND STORE IT
+ ISZ TEMP1 /DON'T READ MORE THAN BUFFER CAN HOLD
+ JMP CDRIN1 /TRY CARD DONE AGAIN
+ RCSD /WAIT FOR END OF CARD - OR ELSE!
+ JMP .-1
+ RCRD /IF THIS ISN'T CLEARED,
+ /FORTRAN IV BECOMES VERY UNHAPPY!
+ JMP CDRIN8
+CDRIN7, RCRD /FORTRAN IV AGAIN
+ ISZ TEMP1 /ALLOW ONE COLUMN TOO FEW (EDU30 - 39 COL)
+ JMP CDRER7 /ERROR!
+ DCA I XRCDR
+CDRIN8, TAD (CDRBUF-1 /INIT BUFFER POINTERS AGAIN
+ DCA XRCDR
+ TAD (-50
+ DCA TEMP1
+ TAD (-EOFCHR /TEST FOR FIRST COLUMN=EOFCHR AND REST =0
+EOFLP, TAD I XRCDR /GET NEXT COLUMN
+ SZA CLA
+ JMP REINIT /NON-ZERO - NOT EOF
+ ISZ TEMP1
+ JMP EOFLP /LOOP
+ JMP CDRCIF /END OF FILE CARD
+REINIT, TAD (CDRBUF-1
+ DCA XRCDR
+ ISZ CDRIN /SKIP RETURN IF NOT EOF
+ L7777 /RESET EOF SWITCH
+CDRCIF, 0
+ DCA CDREOF
+ L7777 /SET TO READ A NEW CARD NEXT TIME
+ DCA CDRFLG
+ JMP I CDRIN
+
+CDRIN4, JMS KBRD /TEST TIME OUT
+ JMP CDRIN3 /TRY SELECTING CARD AGAIN
+
+CDRIN5, 0 /RESET TIME OUT
+ DCA TIMOUT
+ TAD (-TIME
+ DCA TIMOU2
+ JMP I CDRIN5
+
+KBRD, 0
+ KSF /KEYBOARD?
+ JMP KBRDTM /NO - TIME
+ KRS /IS IT ^C?
+ AND (177
+ TAD (-3
+ SNA CLA
+ JMP I K7600 /YES - RETURN TO OS-8
+KBRDTM, ISZ TIMOUT /TIMED OUT YET?
+ JMP I KBRD /NO
+ ISZ TIMOU2
+ JMP I KBRD /LIKEWISE
+ KCF /IGNORE ANYTHING TYPED BEFORE THIS
+ TAD (207 /NOTHING - WAKE HIM UP
+ JMS I (TOUT
+ TAD (MSGJAM /IT COULD BE JAMMED
+ DCA TEMP1
+ JMS I (TTYOUT
+KBRD1, KSF /WAIT FOR A CHARACTER OR READER
+ JMP KBRD3
+KBRD2, KRS /GET THE CHAR
+ AND (177 /WITHOUT PARITY
+ TAD (-3 /IS IT ^C?
+ SNA
+ JMP I K7600 /YES - TO MONITOR
+ KCF /IF ^C - LEAVE FLAG SO OS-8 WILL SEE IT. ELSE CLEAR IT
+ TAD (3-32 /IS IT ^Z?
+ SNA CLA
+ JMP CDRCIF /YES - EOF
+ JMP CDRIN6 /GO BACK AND TIME OUT AGAIN
+KBRD3, RCSE /SELECT A CARD?
+ JMP KBRD1 /NO - TRY KEYBOARD
+ TAD (-50 /RESET COUNT
+ DCA TEMP1
+ TAD (CDRBUF-1 /AND POINTER
+ DCA XRCDR
+ JMP CDRIN3+2 /YES - RE-ENTER ROUTINE WITH SUCCESSFUL SELECT
+
+CDRJA1, KSF
+ JMP .-1
+ JMP KBRD2
+
+TIMOUT, 0
+TIMOU2, 0
+
+PAGE
+\fKEYTRA, TAD I XRCDR /GET KEYWORD COLUMN
+ DCA KEYWD+1
+ TAD I XRCDR /DITTO
+ DCA KEYWD+2
+/CONVERT KEYWORD BITS TO NUMBER
+ TAD (KEYWD-1 /POINT INDEX REGISTER TO KEYWORD BUFFER
+ DCA XR1
+ TAD (-4 /SET COUNT OF WORDS
+ DCA TEMP1
+ DCA KEYVAL /ZERO KEYWORD VALUE
+WRDLP, TAD (-14 /SET BIT COUNT
+ DCA TEMP2
+ TAD I XR1 /GET WORD
+BITLP, ISZ KEYVAL /BUMP BIT VALUE
+ CLL RAL /SHIFT INTO LINK
+ SZL /IS THIS ONE ON?
+ JMP KEYFND /YES - KEYWORD FOUND
+ ISZ TEMP2 /COUNT BITS
+ JMP BITLP
+ ISZ TEMP1 /COUNT WORDS
+ JMP WRDLP
+ JMS I (LNOUT /SEND THE LINE NO.
+ JMP I (TEXTRA /ALL BITS OFF - NO KEYWORD
+
+
+KEYBAD, ERROR
+ OUT
+ JMP KEYBLK
+
+
+ TAD I XR1 /GET NEXT WORD
+KEYFND, SZA CLA /TEST THIS WORD
+ JMP KEYBAD /ERROR - MORE THAN ONE KEYWORD MARKED
+ ISZ TEMP1 /COUNT WORDS
+ JMP KEYFND-1 /AND LOOP
+
+/OUTPUT THE KEYWORD
+ TAD KEYVAL /IS IT A BATCH CONTROL LANGUAGE COMMAND?
+ TAD (-14
+ SMA SZA CLA
+ JMP KEYOUT
+ L7777 /FOUND A BCL CARD
+ DCA BCLSW /GENERATE "$END" BEFORE CLOSING FILE
+ CIF CDF F1
+ JMP I (BCLTRA /YES - HANDLE THAT SPECIALLY
+
+
+KEYOUT, JMS I (LNOUT /SEND LINE NUMBER
+ TAD KEYADR
+ TAD KEYVAL
+ DCA TEMP1
+ TAD I TEMP1 /GET ADDRESS OF KEYWORD
+ SNA
+ JMP KEYBAD /IF ZERO - UNUSED KEYWORD
+ DCA TEMP1 /ELSE SAVE IT
+ TAD TEMP1 /IS THIS "INPUT" OR "PRINT
+ TAD (-BPRI2 /BEING FUDGED UNDER BASIC?
+ SNA
+ JMP NOSGN /PRINT - CHECK FOR NUMBER SIGN
+ TAD (BPRI2-BINP2
+ SZA CLA
+ JMP KEYOU5 /NONE - ALL'S WELL
+NOSGN, TAD (-40 /SET COUNT
+ DCA TEMP3
+NOSGN1, TAD I XRCDR /IS NEXT CHAR BLANK?
+ SZA
+ JMP NOSGN2 /NO - IS IT #
+ ISZ TEMP3
+ JMP NOSGN1
+ JMP NOSGN3 /REST IS BLANK
+NOSGN2, TAD (-NOCHR /IS IT "#"?
+ SZA CLA
+ JMP NOSGN3 /NO
+ TAD TEMP1 /YES - USE "INPUT" OR "PRINT"
+ TAD (-BPRI2
+ SZA CLA
+ TAD (BINP-BPRI
+ TAD (BPRI
+ DCA TEMP1
+NOSGN3, TAD (CDRBUF+7
+ DCA XRCDR
+KEYOU5, JMS I (UNPACK /AND OUTPUT KEYWORD
+KEYBLK, TAD (" /INSERT BLANK AFTER KEYWORD
+ OUT
+ JMP I (TEXTRA
+
+
+PAGE
+\fUNPACK, 0 /OUTPUT PACKED 6-BIT ASCII TEXT
+ TAD I TEMP1 /IS FIRST CHAR = 00?
+ AND (7700
+ SZA CLA
+ JMP KEYOU1 /NO - NORMAL 6-BIT TRANSLATE
+ TAD (211 /YES - THIS IS TAB RATHER THAN END
+ OUT /OUTPUT IT
+ JMP KEYOU3 /AND GET SECOND CHARACTER
+KEYOU1, TAD I TEMP1 /GET FIRST CHARACTER
+ CLL RTR
+ RTR
+ RTR
+ JMS KEYOU2 /AND OUTPUT IT
+KEYOU3, TAD I TEMP1 /GET SECOND CHARACTER
+ JMS KEYOU2 /AND OUTPUT IT
+ ISZ TEMP1 /POINT TO NEXT TWO CHARACTERS
+ JMP KEYOU1 /ETC.
+
+KEYOU2, 0
+ AND (77 /MASK FOR THE LOW ORDER BITS
+ SNA
+ JMP I UNPACK /CHARACTER IS 00 - END OF KEYWORD
+ TAD (-37 /<CR>?
+ SNA
+ TAD (215-337 /THIS WILL BE 215 WHEN WE'RE DONE
+ SPA
+ TAD (100
+ TAD (237
+ OUT /OUTPUT THE CHARACTER
+ JMP I KEYOU2
+
+TTYOUT, 0 /USE UNPACK ROUTINE TO PRINT MESSAGE ON TTY
+ TAD (TOUT /SWITCH OUTPUT ROUTINES
+ DCA OUTAD
+ JMS UNPACK
+ TAD (XOUT /RESET OUTPUT ROUTINES
+ DCA OUTAD
+ JMP I TTYOUT /RETURN
+
+
+LNOUT, 0 /OUTPUT THE LINE NUMBER
+ SAVFLD;LNCIF
+ TAD LNCNT /GET NUMBER OF CHARS
+ CMA
+ DCA TEMP1
+ TAD (CDRBUF /START WITH COLUMN 2
+ DCA XR2
+LNOUT1, ISZ TEMP1;SKP /MORE DIGITS?
+ JMP LNOUT2 /NO
+ TAD I XR2;OUT
+ JMP LNOUT1
+LNOUT2, TAD LNCNT /ANY DIGITS?
+ SNA CLA
+ JMP LNCIF
+ TAD (" ;OUT /YES - SUFFIX A BLANK
+LNCIF, 0
+ JMP I LNOUT
+
+
+PAGE
+\f/TRANSLATE TEXT
+TEXTRA, DCA CONFLG /CLEAR CONTINUATION FLAG
+ DCA TEMP1 /CLEAR COUNT OF BLANK CHARACTERS
+ TAD (-40 /32 COLUMNS OF TEXT (DECIMAL)
+ DCA TEMP3
+TEXLP1, TAD I XRCDR
+ SNA /BLANK?
+ JMP TEXBLK /YES - COUNT A BLANK
+ TAD (-CONTCH /CONTINUATION CHARACTER?
+ SNA
+ JMP TEXCON /YES - ENOUGH OF THIS CARD
+ TAD (CONTCH
+ CONVRT /TRANSLATE THE CHARACTER
+ JMP TEXLP2 /RUBOUT? - GET THE NEXT CHARACTER
+ DCA TEMP2 /SAVE THE CHARACTER
+ JMS TEXBOU /OUTPUT THE COUNTED BLANKS
+ TAD TEMP2
+ OUT /OUTPUT THE CHARACTER
+TEXLP2, ISZ TEMP3 /COUNT COLUMNS
+ JMP TEXLP1
+ TAD (215 /OUTPUT A <CR>
+ OUT
+ JMP TEXFIN
+
+
+TEXCON, JMS TEXBOU
+ CLA CMA
+ DCA CONFLG /SET THE CONTINUATION FLAG
+ JMP TEXFIN
+
+
+TEXBLK, ISZ TEMP1 /COUNT THE BLANKS
+ JMP TEXLP2 /GET THE NEXT CHARACTER
+
+
+TEXBOU, 0 /OUTPUT BLANKS
+ TAD TEMP1
+ CMA
+ DCA TEMP1
+TEXBO1, ISZ TEMP1 /MORE BLANKS
+ SKP
+ JMP I TEXBOU /NO - RETURN
+ TAD (" /YES - OUTPUT A BLANK
+ OUT
+ JMP TEXBO1
+
+
+TEXFIN, TAD ERRFLG /DID THIS CARD HAVE AN ERROR?
+ SZA CLA
+ ISZ ERRCNT /YES - COUNT IT
+ JMP I (READY /PROCESS NEXT CARD
+
+
+\f/CARD CODE TO ASCII CONVERSION ROUTINE
+XCONVR, 0 /INPUT 12 BIT CARD CODE - OUTPUT 8 BIT ASCII
+ SAVFLD;XCOCIF /SAVE DATA FIELD FOR RETURN
+ DCA CONVR1 /SAVE 12 BIT CARD CODE
+ TAD (RUBOUT
+ AND CONVR1
+ TAD (-RUBOUT
+ SNA CLA /WAS CHARACTER RUBBED OUT?
+ JMP XCOCIF /YES - RETURN 0 IN AC
+ ISZ XCONVR /NOT RUBBED OUT - SKIP RETURN
+ TAD CONVR1
+ RTL
+ RTL
+ AND (7 /GET ZONE BITS
+ CLL RAL
+ DCA CONVR2 /2*ZONE BITS
+ TAD CONVR2
+ RTL
+ TAD CONVR2 /10*ZONE BITS
+ DCA CONVR2
+ TAD CONVR1
+ RTL
+ RAL
+ AND (7770 /1-9 "PUNCHES"
+ SNA
+ JMP CONVR3 /IF ALL OFF DON'T INCREMENT COUNT
+ CLL RAL /SHIFT NEXT BIT INTO LINK
+ ISZ CONVR2 /COUNT THE BIT
+ SNL
+ JMP .-3 /LOOP IF OFF
+ SZA CLA
+ JMP CONILL /IF REST OF AC IS NOT ZERO - ILLEGAL CHARACTER
+CONVR3, TAD CONVR2 /GET DISPLACEMENT OF CHAR IN TABLE
+ CLL RAR /GET WORD DISPLACEMENT IN AC
+ TAD (TRTAB /ADDRESS OF WORD
+ DCA CONVR2
+ TAD I CONVR2 /GET WORD
+ SZL
+ JMP .+4 /IF DISPLACEMENT WAS ODD, USE LOW ORDER HALF OF WORD
+ RTR
+ RTR
+ RTR
+ AND (77 /MASK FOR LOW PART OF WORD
+ SNA
+ JMP CONVR4 /ZERO IN TABLE IS ILLEGAL CODE (MAYBE)
+ TAD (240
+ JMP XCOCIF /RETURN WITH 8 BIT ASCII IN AC
+CONVR4, TAD CONVR1 /GET 12-BIT CARD CODE
+ TAD (-TABCHR /IS IT A TAB CHAR?
+ SNA
+ JMP CONVR5 /YUP!
+ TAD (TABCHR-FFCHR /HOW ABOUT A FORM FEED?
+ SZA CLA
+ JMP CONILL /NOPE - IT'S REALLY BAD
+ TAD (214-211 /IT'S FORM FEED
+CONVR5, TAD (211 /IT'S TAB
+ JMP XCOCIF
+CONILL, ERROR /SET ERROR FLAG; RETURN "?" IN AC
+XCOCIF, 0
+ JMP I XCONVR
+
+CONVR1, 0
+CONVR2, 0
+
+
+PAGE
+\f/OUTPUT A CHARACTER. RETURNS .+1 IF CHARACTER IS
+/JUST STORED IN BUFFER. RETURNS .+2 IF NO MORE SPACE IN
+/EMPTY. RETURNS .+3 IF BLOCK WAS WRITTEN AND THERE ARE
+/MORE BLOCKS IN THE EMPTY.
+XOUTP, 0 /OUTPUT ROUTINE
+ ISZ OPTSW /THREE WAY SWITCH
+ JMP XOUT1
+ DCA XOUT2 /SAVE CHAR IN TEMP
+ L7777
+ TAD XROPT /BACK UP 2 WORDS
+ DCA XOUT3
+ TAD XOUT2 /GET FIRST HALF OF CHARACTER
+ RTL
+ RTL
+ AND K7400
+ TAD I XOUT3 /ADD IN FIRST CHARACTER
+ DCA I XOUT3
+ ISZ XOUT3
+ TAD XOUT2 /GET SECOND HALF OF CHARACTER
+ RTR
+ RTR
+ RAR
+ AND K7400
+ TAD I XOUT3 /ADD IN SECOND CHARACTER
+ DCA I XOUT3
+ ISZ OPTCNT /IS BUFFER FULL?
+ JMP XOUT6 /NO - RETURN NORMALLY
+ JMS I DEVENT /CALL DEVICE HANDLER
+ 4200 /TWO PAGES OF OUTPUT FROM FIELD 0
+ OPTBUF /BUFFER ADDRESS
+OPTBLK, 0 /BLOCK NUMBER
+ JMP OPTER4 /ERROR DOING OUTPUT
+ ISZ OPTBLK /INCREMENT BLOCK NUMBER
+ TAD (OPTBUF-1 /RESET BUFFER POINTER
+ DCA XROPT
+ TAD (-200 /AND BUFFER LENGTH /2
+ DCA OPTCNT
+ ISZ XOUTP /SKIP RETURN IF BLOCK WRITTEN
+ ISZ I (FILLEN /MORE BLOCKS IN EMPTY?
+ ISZ XOUTP /YES - SKIP AGAIN
+XOUT6, L7775 /RESET 3-WAY SWITCH
+ DCA OPTSW
+ JMP I XOUTP /RETURN
+
+XOUT1, DCA I XROPT /SAVE CHARACTER IN BUFFER
+ JMP I XOUTP
+
+XOUT2, 0
+XOUT3, 0
+
+
+XOUT, 0
+ DCA CLOSLN /SAVE CHAR IN A CONVENIENT TEMP
+ TAD CLOSLN
+ JMS XOUTP /OUTPUT THE CHARACTER
+ SKP
+ JMP OPTER5 /FILLED UP AVAILABLE SPACE BEFORE ^Z
+ TAD CLOSLN /WAS IT <CR>?
+ TAD (-215
+ SZA CLA
+ JMP I XOUT /RETURN
+ TAD (212
+ JMP XOUT+1
+
+
+EOF, DCA KEYVAL /FINISH UP ANY BCL CARD IN PROGRESS
+ DCA CONFLG /ZERO THESE TO GET US AROUND
+ DCA LNCNT /THE TESTS IN BCLHUH
+ CIF CDF F1
+ JMP I (BCLTRA
+EOF2, ISZ BCLSW /WERE THERE ANY BCL CARDS?
+ JMP EOF1 /NO
+ TAD (MEND /YES - SEND "$END"
+ DCA TEMP1
+ JMS I (UNPACK
+EOF1, TAD (32 /^Z
+ JMS XOUTP /OUTPUT CHAR
+ JMP .-1 /BLOCK NOT YET FULL
+K7400, 7400 /BLOCK WRITTEN
+ TAD I (BLOKNO /BLOCK WRITTEN
+ CIA
+ TAD OPTBLK /GET LENGTH OF FILE WRITTEN
+ DCA CLOSLN /SET LENGTH FOR CLOSE
+ ISZ USRFLG;SKP /IS USR IN CORE?
+ JMP EOF3 /YES
+ CIF 10;JMS I (7700;USRIN /BRING IN THE USR
+EOF3, L7777 /SET USR IN CORE FLAG
+ DCA USRFLG
+ TAD OFILE /GET DEVICE NUMBER
+ CIF 10;USR;CLOSE
+CLOSNM, 0 /POINTER TO NAME
+CLOSLN, 0 /LENGTH OF FILE
+ JMP OPTER6
+ TAD CLOSLN
+ CIA
+ RTL
+ RTL
+ AND (7760 /GET MINUS LENGTH IN BITS 0-7
+ CDF 10
+ TAD I (7617
+ DCA I (7617 /SET LENGTH AND DEVICE NO. FOR BATCH
+ CDF
+ JMP I (ERRDEC /CONVERT NUMBER OF ERRORS TO DECIMAL
+
+
+PAGE
+\f/CONVERT NUMBER OF CARDS IN ERROR TO DECIMAL AND TYPE MESSAGE
+ERRDEC, TAD (DECN-1 /START POWERS OF 10 AT 1000
+ DCA XR1
+ TAD (-4
+ DCA TEMP1 /FOUR POWERS OF 10
+ DCA TEMP5 /CLEAR LEADING ZEROES FLAG
+ TAD ERRCNT /SET VALUE
+ DCA TEMP4
+ TAD (TOUT /FUDGE OUTPUT CALL
+ DCA OUTAD
+ JMS CONDEC /CONVERT TO DECIMAL
+ TAD (XOUT /RESTORE OUTPUT CALL
+ DCA OUTAD
+ TAD (NOMES /SET UP TO PRINT "NO"
+ DCA TEMP1
+ TAD TEMP5 /DID WE PRINT A NUMBER?
+ SNA CLA
+ JMS I (TTYOUT /NO - PRINT "NO"
+ TAD (CDMES /PRINT "CARDS IN ERROR"
+ DCA TEMP1
+ JMS I (TTYOUT
+EOFJMP, JMP I (CD /DONE WITH THIS ONE - CALL COMMAND DECODER
+ SYSNO /LOAD SYS: NUMBER FOR LOOKUP
+ CIF 10;USR;LOOKUP
+BATBLK, BATNAM
+ 0
+ JMP IOER8
+ TAD BATBLK
+ DCA CHNBLK
+ L0001
+ DCA I (JSBITS /KEEP USR ACROSS CHAIN
+ CIF 10;USR;CHAIN /NOW CHAIN TO BATCH
+CHNBLK, 0
+
+
+CONDEC, 0 /CONVERT A NUMBER TO DECIMAL
+ SAVFLD;CONCIF /SAVE DATA FIELD FOR RETURN
+DIGLP, TAD I XR1 /GET THIS POWER OF 10
+ DCA TEMP2 /AND SAVE IT
+ DCA TEMP3 /CLEAR THIS DIGIT
+DIGLP1, TAD TEMP4 /GET NUMBER TO BE CONVERTED
+ TAD TEMP2 /DIVIDE BY SUBTRACTING
+ SPA
+ JMP DIGLP2 /WENT NEGATIVE - DONE
+ ISZ TEMP3 /BUMP COUNT
+ DCA TEMP4 /SAVE REDUCED VALUE
+ JMP DIGLP1
+DIGLP2, CLA
+ TAD TEMP3 /GET VALUE OF THIS DIGIT
+ SZA
+ JMP DIGOUT /NOT A ZERO - PRINT IT
+ TAD TEMP5 /IF ZERO - IS IT LEADING?
+ SNA CLA
+ JMP DIGLPE /YES - DON'T PRINT IT
+DIGOUT, ISZ TEMP5 /IF PRINTING, THEN ZEROES ARE NOT LEADING
+ TAD (260 /CONVERT TO ASCII
+ OUT
+DIGLPE, ISZ TEMP1 /LAST DIGIT?
+ JMP DIGLP /NO - LOOP
+CONCIF, 0
+ JMP I CONDEC /RETURN
+
+
+TOUT, 0 /SEND A CHARACTER TO THE TTY
+ TLS
+ TSF
+ JMP .-1
+ TAD (-215 /WAS THE CHARACTER <CR>?
+ SZA CLA
+ JMP I TOUT /NO - RETURN
+ TAD (212 /YES - TYPE A LINE FEED
+ JMP TOUT+1
+
+
+IOERR1, CDF F0
+ CLA /TYPE ERROR MESSAGE
+ TAD IOERR /GET NUMBER
+ CLL RAL
+ TAD (IOETAB-1
+ DCA XR1
+ TAD I XR1 /GET ADDRESS OF MESSAGE
+ DCA TEMP1
+ DCA IOERR /CLEAR ERROR NUMBER
+ JMS I (TTYOUT /PRINT IT
+ TAD I XR1 /GO TO RESTART ADDRESS
+ DCA TEMP1
+ JMP I TEMP1
+
+
+PAGE
+\fOPTDEV, ZBLOCK 400 /TWO PAGES FOR DEVICE HANDLER
+OPTBUF, ZBLOCK 400 /TWO PAGES FOR OUTPUT BUFFER
+CDRBUF, DECIMAL;ZBLOCK 40;OCTAL
+BATNAM, TEXT "BATCH@SV";*.-1
+MEND, TEXT "_$END_"
+NOMES, TEXT "NO"
+CDMES, TEXT " CARDS IN ERROR_"
+MSGJAM, TEXT "LOAD MORE CARDS OR TYPE ^Z_"
+IOEM1, TEXT "NO OUTPUT FILE SPECIFIED_"
+IOEM2, TEXT "CAN'T FETCH DEVICE HANDLER_"
+IOEM3, TEXT "CAN'T ENTER FILE_"
+IOEM4, TEXT "OUTPUT ERROR_"
+IOEM5, TEXT "FILE TOO BIG_"
+IOEM6, TEXT "CAN'T CLOSE FILE_"
+IOEM7, TEXT "CARD IN READER BACKWARDS. TYPE SPACE TO CONTINUE._"
+IOEM8, TEXT /"BATCH.SV" NOT ON SYS: - CAN'T CHAIN_/
+VERM9, TEXT "MSBAT - VERSION 3A_@@@@@@"
+
+IOETAB, IOEM1;START
+ IOEM2;START
+ IOEM3;START
+ IOEM4;START
+ IOEM5;START
+ IOEM6;START
+ IOEM7;CDRJA1
+ IOEM8;7600
+ VERM9;START
+
+ DECIMAL
+DECN, -1000
+ -100
+ -10
+ -1
+ OCTAL
+
+/CHARACTER CODE TRANSLATION TABLE
+TRTAB,
+/0 IN ROWS 12-0
+ 0021 /?1
+ 2223 /23
+ 2425 /45
+ 2627 /67
+ 3031 /89
+/1
+ 2043 /0C
+ 4651 /FI
+ 5457 /LO
+ 6265 /RU
+ 7004 /X$
+/2
+ 1442 /,B
+ 4550 /EH
+ 5356 /KN
+ 6164 /QT
+ 6772 /WZ
+/3
+ 3632 />:
+ 0106 /!&
+ 7540 /]@
+ 0000 /<FORM FEED> ?
+ 0000 /??
+/4
+ 1641 /.A
+ 4447 /DG
+ 5255 /JM
+ 6063 /PS
+ 6671 /VY
+/5
+ 3400 /<?
+ 0000 /??
+ 0000 /??
+ 0000 /??
+ 0000 /??
+/6
+ 3303 /;#
+ 0705 /'%
+ 7337 /[? THE REAL ?
+ 0077 /<TAB> _
+ 0000 /??
+/7
+ 7435 /\=
+ 1315 /+-
+ 1217 /*/
+ 7610 /^(
+ 1102 /)"
+
+
+\f/BASIC KEYWORDS
+BDAT, TEXT "DATA"
+BCAL, TEXT "CALL"
+BCLO, TEXT "CLOSE"
+BDEF, TEXT "DEFINE"
+BCHN, TEXT "CHAIN"
+BDIM, TEXT "DIMENSION"
+BCHG, TEXT "CHANGE"
+BEND, TEXT "END"
+BEND2, TEXT "CLOSE #4\END"
+BFIL, TEXT "FILE"
+BGOS, TEXT "GOSUB"
+BIF, TEXT "IF"
+BINP, TEXT "INPUT"
+BINP2, TEXT "INPUT #3:"
+BLIS, TEXT "LIST"
+BNEX, TEXT "NEXT"
+BOLD, TEXT "OLD"
+BPRI, TEXT "PRINT"
+BPRI2, TEXT "PRINT #4:"
+BREA, TEXT "READ"
+BRES, TEXT "RESTORE"
+BRUN, TEXT "RUN"
+BFOR, TEXT "FOR"
+BGOT, TEXT "GOTO"
+BIFE, TEXT "IF END"
+BLET, TEXT "LET"
+BLIN, TEXT "LINPUT"
+BNEW, TEXT "NEW"
+BON, TEXT "ON"
+BRND, TEXT "RANDOM"
+BOV, TEXT "OVERLAY"
+BREP, TEXT "REPLACE"
+BUNS, TEXT "UNSAVE"
+BREM, TEXT "REMARK"
+BRET, TEXT "RETURN"
+BSAV, TEXT "SAVE"
+BSTO, TEXT "STOP"
+BSTO2, TEXT "CLOSE #4\STOP"
+
+/FORTRAN KEYWORDS
+FCMN, TEXT "@COMMON"
+FASN, TEXT "@ASSIGN"
+FCPX, TEXT "@COMPLEX"
+FBKS, TEXT "@BACKSPACE"
+FCNT, TEXT "@CONTINUE"
+FBKD, TEXT "@BLOCK DATA"
+FDTA, TEXT "@DATA"
+FCAL, TEXT "@CALL"
+FDEF, TEXT "@DEFINE FILE"
+FDO, TEXT "@DO"
+FEND, TEXT "@END"
+FEQU, TEXT "@EQUIVALENCE"
+FFOR, TEXT "@FORMAT"
+FGOT, TEXT "@GO TO"
+FINT, TEXT "@INTEGER"
+FPAU, TEXT "@PAUSE"
+FREAL, TEXT "@REAL"
+FREW, TEXT "@REWIND"
+FSBR, TEXT "@SUBROUTINE"
+FCMT, TEXT "C" /COMMENT
+FDIM, TEXT "@DIMENSION"
+FDBP, TEXT "@DOUBLE PRECISION"
+FEF, TEXT "@END FILE"
+FEXT, TEXT "@EXTERNAL"
+FFUN, TEXT "@FUNCTION"
+FIF, TEXT "@IF"
+FLOG, TEXT "@LOGICAL"
+FREAD, TEXT "@READ"
+FRET, TEXT "@RETURN"
+FSTO, TEXT "@STOP"
+FWRI, TEXT "@WRITE"
+\fBASKEY,
+/COLUMN 7 ROW
+ BDEF /12
+ BIFE /11
+ BLET /0
+ BLIS /1
+ BNEW /2
+ BON /3
+ BOV /4
+ BRND /5
+ BREM /6
+ BRES /7
+ BRUN /8
+BSTKEY, BSTO /9
+/COLUMN 8 ROW
+ BDIM /12
+BINKEY, BINP /11
+ BLIN /0
+ BNEX /1
+ BOLD /2
+ BFIL /3
+BPRKEY, BPRI /4
+ BREA /5
+ BREP /6
+ BRET /7
+ BSAV /8
+ BUNS /9
+/COLUMNS 2-6 COLUMN ROW
+ BCAL /2 12
+BENKEY, BEND /2 11
+ BCLO /3 12
+ BFOR /3 11
+ BCHN /4 12
+ BGOS /4 11
+ BCHG /5 12
+ BGOT /5 11
+ BDAT /6 12
+ BIF /6 11
+
+
+FORKEY,
+/COLUMN 7 /ROW
+ FCAL /12
+ FDEF /11
+ FDO /0
+ FEND /1
+ FEQU /2
+ FFOR /3
+ FGOT /4
+ FINT /5
+ FPAU /6
+ FREAL /7
+ FREW /8
+ FSBR /9
+/COLUMN 8 ROW
+ FCMT /12
+ FDIM /11
+ FDBP /0
+ FEF /1
+ FEXT /2
+ FFUN /3
+ FIF /4
+ FLOG /5
+ FREAD /6
+ FRET /7
+ FSTO /8
+ FWRI /9
+/COLUMN 2-6 COLUMN ROW
+ 0 /2 12
+ 0 /2 11
+ 0 /3 12
+ FCMN /3 11
+ FASN /4 12
+ FCPX /4 11
+ FBKS /5 12
+ FCNT /5 11
+ FBKD /6 12
+ FDTA /6 11
+
+
+\f FIELD 1
+
+
+
+
+
+*17
+
+
+OXR1, 0
+OTEMP1, 0
+CHAR, 0
+PUTPNT, 0
+GETPNT, 0
+DATFTN, 0 /ADDRESS OF FORTRAN $RUN
+GETCHR=JMS I .;XGETCH
+PUTCHR=JMS I .;XPUTCH
+BCLIN=JMS I .;XBCLIN
+OPTION=JMS I .;XOPTIO
+MOV6=JMS I .;XMOV6
+COLNAM=JMS I .;XCOLNA
+OUTNAM=JMS I .;XOUTNA
+ISIT=JMS I .;XISIT
+SEND=JMS I .;XSEND
+TSTCR=JMS I .;XTSTCR
+CDRTRA=JMS I .;BCLTRA+1
+ISNUM=JMS I .;XISNUM
+OUT1=JMS I .;OOUT1
+\f*200
+
+
+/PUT A CHARACTER INTO A 6-BIT BUFFER
+PUTCH1=XGETCH
+PUTCH4=CON628
+XPUTCH, 0
+ TAD (-215 /IF <CR>, IT BECOMES 37
+ SZA
+ TAD (215-337
+ TAD (337
+ AND (77 /AND OFF 6 BITS
+ DCA PUTCH1 /SAVE IT IN A TEMP
+ TAD PUTPNT /GET POINTER TO CHARACTER IN 6-BIT BUFFER
+ ISZ PUTPNT /AND BUMP POINTER
+ CLL RAR /GET WORD DISPLACEMENT
+ TAD I XPUTCH /ADD IN BASE ADDRESS
+ ISZ XPUTCH /BUMP RETURN ADDRESS
+ DCA PUTCH4 /SAVE ADDRESS OF WORD CONTAINING CHAR
+ SZL /LINK HAS FIRST OR LAST HALF INDICATOR
+ JMP PUTCH2
+ TAD PUTCH1 /FIRST HALF - ROTATE CHAR INTO HIGH BITS
+ CLL RTL;RTL;RTL
+ DCA PUTCH1
+ TAD I PUTCH4 /GET ANY CHARACTER ALREADY THERE
+ AND (77
+ JMP PUTCH3
+PUTCH2, TAD I PUTCH4
+ AND (7700 /GET CHARACTER ALREADY THERE
+PUTCH3, TAD PUTCH1 /ADD IN NEW CHARACTER
+ DCA I PUTCH4 /STORE THEM BOTH
+ JMP I XPUTCH /AND RETURN
+
+
+/GET A CHARACTER FROM A 6-BIT BUFFER
+XGETCH, 0
+ TAD XGETCH /MOVE RETURN ADDRESS TO CON628
+ DCA CON628
+ TAD GETPNT /GET POINTER TO CHARACTER
+ ISZ GETPNT /BUMP IT FOR NEXT TIME
+ JMP CON628+1 /ENTER CONVERSION ROUTINE
+
+
+/CONVERT 6-BIT ASCII TO 8-BIT
+/AC HAS POINTER TO CHARACTER
+/ARGUMENT IS BASE ADDRESS OF BUFFER
+CO628X=XGETCH
+CON628, 0
+ CLL RAR /GET WORD DISPLACEMENT IN AC
+ TAD I CON628 /ADD BASE ADDRESS OF BUFFER
+ ISZ CON628 /BUMP RETURN ADDRESS
+ DCA CO628X /SAVE ADDRESS
+ TAD I CO628X /GET WORD CONTAINING CHARACTER
+ SZL /LINK HAS INDICATOR FOR FIRST OR LAST CHAR
+ JMP .+4
+ RTR;RTR;RTR /FIRST CHAR - PUT IN LOW BITS
+ AND (77
+ JMS XSEND3 /GET PROPER 8-BIT REPRESENTATION
+ DCA CHAR /SAVE IT
+ TAD CHAR /RETURN WITH IT IN AC
+ JMP I CON628 /RETURN
+
+
+XSEND3, 0
+ TAD (-37
+ SNA
+ TAD (215-337
+ SPA
+ TAD (100
+ TAD (237
+ JMP I XSEND3
+
+
+GETCDR, 0
+ CIF CDF F0
+ JMS I (GETCD1 /GET A CHAR FROM THE CDR BUFFER
+ JMP I GETCDR
+
+
+OOUT1, 0
+ CIF CDF F0
+ JMS I (OOUT2
+ JMP I OOUT1
+
+
+MOVODV, 0
+ DCA .+2
+ MOV6;0;BATOUT
+ CIF F0 /RETURN DF=1
+ JMP I MOVODV
+
+
+XTSTCR, 0
+ GETCHR;BCLBUF
+ TAD (-215
+ SNA CLA
+ ISZ XTSTCR
+ L7777
+ TAD GETPNT
+ DCA GETPNT
+ JMP I XTSTCR
+
+
+PAGE
+\f/SUBROUTINE OPTION WILL SCAN THE BATCH CONTROL LANGUAGE
+/BUFFER FOR OPTIONS SPECIFIED IN IT'S CALL. AN OPTION IS
+/RECOGNIZED AS ANY ITEM WHICH FOLLOWS A "/". IT'S NAME
+/IS COMPOSED OF ANY CHARACTERS OTHER THAN "/" , "," ,
+/"=",OR <CR>. THE NAME IS TERMINATED BY ANY ONE OF THE
+/PREVIOUS DELIMITERS. IF IT IS TERMINATED BY A "=" AND
+/THE SUBROUTINE CALL INDICATES THAT IT EXPECTS A FILE NAME,
+/THEN THE FILE NAME FOLLOWS THE "=" AND IS TERMINATED BY A
+/"/" , "," , OR <CR>. THE SUBROUTINE CALL IS FOLLOWED BY A
+/POINTER TO A LIST OF ADDRESSES. THIS LIST IS TERMINATED BY
+/A ZERO ENTRY. EACH ENTRY POINTS TO AN OPTION CONTROL
+/BLOCK IN THE FOLLOWING FORM:
+/ OPTION CONTROL WORD
+/ (FILE NAME SPACE IF NEEDED - 6 WORDS)
+/ TEXT "OPTION NAME"
+/
+/THE FORMAT OF THE OPTION CONTROL WORD IS AS FOLLOWS:
+/ BIT 0: ON RETURN THIS BIT WILL BE SET IF
+/ THE OPTION WAS FOUND, AND CLEARED
+/ IF NOT
+/ BIT1: ON RETURN THIS BIT IS SET IF A NAME
+/ WAS GIVEN WITH THE OPTION
+/ BIT 2: SET IF OPTION HAS ALLOCATED 6 WORDS
+/ FOR A POSSIBLE FILE NAME. CLEARED
+/ IF NOT
+/ BITS 6-8: NUMBER OF CHARACTERS -1 OF SHORT
+/ FORM OF OPTION
+/ BITS 9-11: DIFFERENCE BETWEEN SIZES OF
+/ SHORT AND LONG FORMS
+/ THE SUM OF BITS 6-8 AND BITS 9-11
+/ SHOULD TOTAL THE LENGTH OF THE
+/ LONG FORM-1
+/
+/THE FILE NAME SPACE MAY BE INITIALIZED TO SOME DEFAULT
+/DEVICE, NAME, AND EXTENSION.
+/
+XOPTIO, 0
+
+/TURN OFF ALL OPTIONS
+ TAD I XOPTIO /GET ADDRESS OF LIST OF OPTION ADDRESSES
+ DCA OPTLIS /SAVE IT
+OPTIO1, TAD I OPTLIS /GET OPTION ADDRESS
+ ISZ OPTLIS /POINT TO NEXT ONE
+ SNA
+ JMP OPTIO2 /DONE TURNING OFF ALL OPTIONS
+ DCA OPTCTL
+ TAD I OPTCTL /GET OPTION CONTROL WORD
+ AND (1777 /CLEAR FIRST BIT
+ DCA I OPTCTL
+ JMP OPTIO1 /LOOP
+
+/SEARCH BCL BUFFER FOR "/"
+OPTIO2, DCA GETPNT /START AT BEGINNING OF BATCH CONTROL LINE
+OPTIO3, GETCHR;BCLBUF /GET A CHARACTER FROM THE BUFFER
+ ISIT /IS IT "/" OR <CR>?
+ OPTIS3;OPTIS4-1
+ JMP OPTIO3 /NO - KEEP LOOKING
+OPTI3A, TAD GETPNT /YES - SAVE IT'S POSITION
+ DCA OPTBEG
+ TAD I XOPTIO /GET ADDRESS OF LIST AGAIN
+ DCA OPTLIS /AND SAVE IT
+
+/FOUND A "/" - TRY ALL OPTIONS
+OPTIO4, TAD OPTBEG /START COMPARISON OF OPTION WITH CHARACTER AFTER "/"
+ DCA GETPNT
+ TAD I OPTLIS /GET ADDRESS OF OPTION CONTROL WORD
+ ISZ OPTLIS /AND BUMP POINTER FOR NEXT TIME
+ SNA /IS THE LIST ENDED?
+ JMP I (OPTIER /YES - OPTION WAS INVALID
+ DCA OPTCTL /NO - SAVE ADDRESS OF CONTROL WORD
+ TAD I OPTCTL /GET CONTROL WORD
+ RTL
+ SPA CLA /DOES IT HAVE SPACE FOR A FILE NAME
+ TAD (6 /YES - ADD SIZE OF THE SPACE
+ TAD OPTCTL /ADD ADDRESS OF OPTION
+ IAC /BUMP ONE FOR CONTROL WORD
+ DCA OPTTEX /SAVE ADDRESS OF OPTION TEXT
+ TAD I OPTCTL /GET LENGTH FOR UNIQUE OPTION FROM CONTROL WORD
+ RAR;RTR
+ AND (7
+ CMA /NEGATE IT (INCREMENTED BY ONE)
+ DCA OPTCT1 /SAVE IN COUNTER
+ DCA OPTCT2 /ZERO CHARACTER POSITION
+\f/COMPARE OPTION WITH CONTENTS OF BCL BUFFER
+OPTIO5, JMS OPTI6A
+ SZA CLA /ARE THEY THE SAME?
+ JMP OPTIO4 /NO - TRY NEXT OPTION
+ ISZ OPTCT1 /HAVE WE SUCCEEDED FAR ENOUGH FOR IT TO BE UNIQUE?
+ JMP OPTIO5 /NO - KEEP COMPARING
+
+ TAD GETPNT /SAVE CURRENT BUFFER POSITION
+ DCA OPTTM2
+ TAD I OPTCTL /GET REMAINING LENGTH FROM CONTROL WORD
+ AND (7
+ CMA
+ DCA OPTCT1
+OPTIO6, ISZ OPTCT1 /DONE WITH REMAINING CHARACTERS?
+ SKP
+ JMP OPTIO7 /YES - SUCCESS
+ JMS OPTI6A
+ SNA CLA /ARE THEY THE SAME?
+ JMP OPTIO6 /YES - KEEP GOING
+ TAD OPTTM2 /NO - MOVE POINTER BACK TO SHORT FORM
+ DCA GETPNT
+ JMP OPTIO7
+
+OPTI6A, 0
+ TAD OPTCT2
+ ISZ OPTCT2
+ JMS I (CON628
+OPTTEX, 0
+ CIA
+ DCA OPTTM1
+ GETCHR;BCLBUF
+ TAD OPTTM1
+ JMP I OPTI6A
+
+
+OPTRET, ISZ XOPTIO /INCREMENT RETURN ADDRESS
+ DCA GETPNT /SET POINTER TO BEGINNING OF BUFFER
+ JMP I XOPTIO
+
+
+OPTLIS, 0
+OPTCTL, 0
+OPTBEG, 0
+OPTCT1, 0
+OPTCT2, 0
+OPTTM1, 0
+OPTTM2, 0
+
+
+\f/TEST DELIMITER AFTER OPTION
+OPTIO7, GETCHR;BCLBUF /GET NEXT BUFFER CHARACTER
+ ISIT /IS IT "=", "," ,"/", OR <CR>?
+ OPTIS1;OPTIS2-1
+ JMP I (OPTIER /NONE OF THESE
+OPTIO8, TAD I OPTCTL /YES - GET CONTROL WORD
+ RTL
+ SMA CLA /DOES IT TAKE A FILE NAME?
+ JMP I (OPTIER /NO - ERROR
+ TAD OPTCTL /GET ADDRESS OF FILE NAME SPACE
+ IAC
+ DCA .+2
+ COLNAM /AND COLLECT A NAME INTO IT
+OPTTM3, 0
+ JMP I (OPTIER /ERROR RETURN
+ TAD I OPTCTL /TURN ON NAME BIT
+ AND (1777
+ TAD (2000
+ DCA I OPTCTL
+OPTIO9, TAD I OPTCTL /GET CONTROL WORD
+ AND (3777
+ TAD (4000 /TURN ON OPTION FOUND BIT
+ DCA I OPTCTL
+ JMP I (OPTI10
+
+
+PAGE
+\f/ON ERROR, REPORT IT
+OPTIER, TAD I (OPTBEG /OPTION BEGINS AT THIS POSITION
+ JMS OUTERR /OUTPUT THE ERROR
+ OPTERM
+
+/SQUISH THE CURRENT OPTION OUT OF BCL BUFFER
+OPTI10, L7777 /BACK UP OVER "/"
+ TAD I (OPTBEG /POINT TO BEGINNING OF OPTION
+ JMS BCLSQU /SQUISH OUT THIS OPTION
+ L7777
+ TAD I (OPTBEG
+ JMP I (OPTIO2 /GO LOOK FOR MORE OPTIONS
+
+
+\f/SQUISH OUT A PORTION OF THE BCL BUFFER
+/ TAD X /POSITION OF FIRST CHAR OF SQUISH
+/ JMS BCLSQU
+/GETPNT POINTS TO FIRST CHAR SURE TO BE KEPT AFTER
+/SQUISH CHARS. ONE CHAR PRECEDING IT IS TESTED,
+/AND IS KEPT IF IT IS A "/" OR <CR>
+BCLSQU, 0
+ DCA PUTPNT /AC POINTS TO BEGINNING OF AREA TO BE SQUISHED
+ TAD PUTPNT /SAVE THE POINTER
+ DCA OUTERR
+ L7777
+ TAD GETPNT
+ DCA GETPNT /TEST LAST CHAR OF STUFF TO BE SQUISHED
+ GETCHR;BCLBUF
+ ISIT /IS IT "/", OR <CR>?
+ BCLIS1;BCLIS2-1
+BCLSQ1, GETCHR;BCLBUF /GET A CHAR
+ TAD (-215 /IS IT <CR>?
+ SNA CLA
+ JMP BCLSQ3 /YES - DONE
+BCLSQ2, TAD CHAR /RESTORE CHAR
+ PUTCHR;BCLBUF /PUT THE CHAR IN THE BUFFER
+ JMP BCLSQ1 /GET ANOTHER CHAR
+BCLSQ3, TAD (215 /PUT A <CR>
+ PUTCHR;BCLBUF
+ TAD OUTERR /RESTORE POINTER
+ DCA GETPNT
+ JMP I BCLSQU /RETURN
+
+
+/SEND AN ERROR MESSAGE INCLUDING PART OF THE BCL BUFFER
+/TO THE OUTPUT BUFFER
+/ TAD X /POSITION OF FIRST CHAR IN BUFFER TO BE SENT
+/ JMS OUTERR
+/ A /ADDRESS OF ERROR MESSAGE TO PRECEDE IT
+/ /SIX-BIT ASCII
+OUTERR, 0
+ DCA GETPNT /SET BEGINNING OF BCL LINE TO OUTPUT
+ TAD I OUTERR /GET ERROR MESSAGE ADDRESS
+ ISZ OUTERR
+ SEND /PRINT IT
+OUTER1, GETCHR;BCLBUF /GET A CHARACTER
+ ISIT /IS IT "," ,"/", OR <CR>?
+ OUTIS1;OUTIS2-1
+ TAD CHAR /NO - SEND CHAR
+ OUT1
+ JMP OUTER1
+OUTER2, TAD (215
+ OUT1
+ JMP I OUTERR /RETURN
+
+
+/TEST A CHAR AND JUMP IF IN LIST
+/ JMS XISIT
+/ A1 /ADDRESS OF LIST OF NEGATIVE OF CHARS
+/ /TERMINATED BY A POSITIVE OR ZERO
+/ A2-1 /ADDRESS -1 OF LIST OF
+/ /TRANSFER ADDRESSES
+XISIT, 0
+ DCA ISIT1 /SAVE CHAR
+ TAD I XISIT /GET LIST OF CHARS
+ ISZ XISIT
+ DCA ISIT2
+ TAD I XISIT /GET LIST OF ADDRS - 1
+ ISZ XISIT
+ DCA ISIT3
+ISIT4, TAD I ISIT2 /GET THE NEXT CHAR
+ ISZ ISIT2
+ ISZ ISIT3
+ SMA
+ JMP ISIT5 /END OF LIST SIGNALLED BY ENTRY>=0
+ TAD ISIT1 /IS IT THE CHAR?
+ SZA CLA
+ JMP ISIT4 /NO - TRY THE NEXT
+ TAD I ISIT3 /GET SEND ADDRESS
+ DCA XISIT
+ISIT5, CLA
+ JMP I XISIT
+
+ISIT1, 0
+ISIT2, 0
+ISIT3, 0
+
+
+PAGE
+\f/COLLECT A NAME FROM THE BUFFER
+/ JMS XCOLNA
+/ X /ADDRESS OF SPACE TO RECEIVE NAME
+/ JMP ERR /INVALID NAME
+XCOLNA, 0
+ TAD I XCOLNA
+ DCA .+3
+ MOV6;ZER6;0
+ TAD I XCOLNA /ARGUMENT IS ADDRESS TO PUT NAME
+ ISZ XCOLNA
+ DCA COLPU1+2 /SAVE IT FOR USE AS PUTCHR ARG
+ L7776 /SET NAME - EXTENSION SWITCH FOR NAME
+ DCA COLSW
+ TAD (COLIS1 /SET TO COLLECT ANYTHING
+ DCA COLIS3 /I.E. DEVICE, FILE, OR EXTENSION
+ TAD (COLIS2-1
+ DCA COLIS3+1
+ TAD GETPNT /SAVE POINTER TO BEGINNING OF NAME
+ DCA COLNP1
+COLGE1, TAD GETPNT /SAVE POINTER TO BEGINNING OF SECTION
+ DCA COLNP2 /OF NAME
+COLGE2, GETCHR;BCLBUF /GET A CHAR
+ ISIT /IS IT ":",".","/", "," , OR <CR>?
+COLIS3, 0;0
+ JMP COLGE2
+
+COLDEV, JMS COLMOV;0;-4-1 /MOVE 4 CHARS TO POSITION 0
+ ISZ COLIS3 /REMOVE ":" FROM LIST
+ ISZ COLIS3+1
+ JMP COLGE1 /COLLECT NEXT PART OF NAME
+
+COLFIL, JMS COLMOV;4;-6-1 /MOVE 6 CHARS TO POSITION 4
+ ISZ COLSW /NEXT TIME COLLECT EXTENSION
+ TAD (COLIS1+2 /REMOVE "." FROM LIST
+ DCA COLIS3
+ TAD (COLIS2+1
+ DCA COLIS3+1
+ JMP COLGE1 /COLLECT NEXT PART OF NAME
+
+COLEXT, ISZ COLSW /ARE WE COLLECTING NAME OR EXTENSION?
+ JMP COLEX1 /NAME
+ JMS COLMOV;12;-2-1 /MOVE 2 CHARS TO POSITION 12
+ JMP COLEX2
+COLEX1, JMS COLMOV;4;-6-1 /MOVE 6 CHARS TO POSITION 4
+COLEX2, ISZ XCOLNA /NO ERRORS
+ JMP COLEX3
+
+COLERR, CLA
+ TAD COLNP1 /POINT TO BEGINNING OF NAME
+ JMS I (OUTERR /SEND IT AS ERROR MESSAGE
+ COLERM
+COLEX3, TAD COLNP1 /POINT TO BEGINNING OF NAME
+ JMS I (BCLSQU /SQUISH IT OUT
+ JMP I XCOLNA /RETURN
+
+COLMOV, 0
+ TAD I COLMOV /FIRST ARG IS POSITION
+ ISZ COLMOV
+ DCA PUTPNT
+ TAD I COLMOV /SECOND ARG IS COUNT
+ ISZ COLMOV
+ DCA COLCT1
+ TAD CHAR /GET DELIMITER
+ CIA
+ DCA COLCH1 /SAVE FOR TEST
+ TAD CHAR
+ TAD (-"Z
+ DCA COLCH2 /ANOTHER TEST
+ TAD COLNP2 /POINT TO BEGINNING OF THIS PART
+ DCA GETPNT
+COLMV1, GETCHR;BCLBUF /GET NEXT CHAR
+ TAD COLCH1 /SUBTRACT THE DELIMITER
+ SNA
+ JMP I COLMOV /DELIMITER - WE'RE DONE
+ TAD COLCH2 /CHAR-"Z"
+ SMA SZA
+ JMP COLERR /NOT ALPHA-NUMERIC
+ TAD ("Z-"A
+ SMA
+ JMP COLPUT /ALPHABETIC
+ TAD ("A-"9
+ SMA SZA
+ JMP COLERR /NOT NUMERIC
+ TAD ("9-"0
+ SPA
+ JMP COLERR /NOT NUMERIC
+COLPUT, CLA
+ ISZ COLCT1 /HAVE WE USED UP OUR COUNT?
+ JMP COLPU1 /NO - PUT THE CHAR
+ L7777 /YES - SET COUNTER TO SKIP
+ DCA COLCT1
+ JMP COLMV1 /GET NEXT CHAR
+COLPU1, TAD CHAR
+ PUTCHR;0 /PUT THE CHAR IN THE USER SPACE
+ JMP COLMV1 /GET THE NEXT CHAR
+
+
+COLSW, 0 /FILE NAME OR EXTENSION SWITCH
+COLNP1, 0 /POINTER TO BEGINNING OF NAME
+COLNP2, 0 /POINTER TO BEGINNING OF NAME PART
+COLCH1, 0 /TEMP LOC FOR COLMOV
+COLCH2, 0 /DITTO
+COLCT1, 0 /DITTO
+
+PAGE
+\fXMOV6, 0
+ TAD I XMOV6 /GET "FROM" ADDRESS
+ ISZ XMOV6
+ DCA MOV61
+ TAD I XMOV6 /GET "TO" ADDRESS
+ ISZ XMOV6
+ DCA MOV62
+ TAD (-6
+ DCA MOV63
+MOV64, TAD I MOV61
+ DCA I MOV62
+ ISZ MOV61
+ ISZ MOV62
+ ISZ MOV63
+ JMP MOV64
+ JMP I XMOV6 /RETURN
+MOV61, 0
+MOV62, 0
+MOV63, 0
+
+
+XBCLIN, 0
+ DCA PUTPNT /START AT BEGINNING OF BCL BUFFER
+ JMS I (SENDKY /SEND THE KEYWORD
+ DCA MOV61 /CLEAR THE BLANK COUNTER
+BCLIN5, JMS BCLIN3 /GET NEXT CARD AND PUT IT INTO BCL BUFFER
+ JMP BCLIN7+2 /CARD NOT CONTINUED - DONE
+ CIF F0
+ JMS I (CDRIN /READ ANOTHER CARD
+ JMP BCLIN7+2 /EOF
+ TAD (-10
+ DCA BCLIN4
+BCLIN6, JMS I (GETCDR /GET FIRST 8 CHARS
+ SZA CLA /TEST FOR ZERO
+ JMP BCLIN7 /NON-ZERO - ERROR
+ ISZ BCLIN4
+ JMP BCLIN6
+ JMP BCLIN5 /OK - PUT IT IN BUFFER
+
+BCLIN7, CDF F0
+ DCA I (CDRFLG /SET CDRIN TO RETURN THIS CARD AGAIN
+ CDF F1
+ TAD (215 /PUT A <CR>
+ PUTCHR;BCLBUF
+ TAD (215;OUT1
+ DCA GETPNT /SET POINTER TO BEGINNING
+ JMP I XBCLIN /RETURN
+
+BCLIN4, 0
+BCLIN3, 0
+ TAD (-40
+ DCA BCLIN4
+BCLIN9, JMS I (GETCDR /GET NEXT CDR CHAR
+ SNA
+ JMP BCLI13 /BLANK
+ TAD (-CONTCH
+ SNA
+ JMP BCLI10 /CONTINUATION
+ TAD (CONTCH
+ CIF F0
+ JMS I (XCONVR
+ JMP BCLIN8 /RUBOUT
+ DCA XMOV6 /SAVE THE CHAR
+ JMS BCLI14 /SEND THE BLANKS
+ TAD XMOV6
+ OUT1 /SEND IT
+ TAD XMOV6
+ PUTCHR;BCLBUF /PUT IT
+ TAD PUTPNT
+ TAD (-BCLSIZ^2+2 /BCL BUFFER FULL?
+ SMA CLA
+ JMP BCLI11 /FULL - ERROR
+BCLIN8, ISZ BCLIN4 /COUNT COLUMNS
+ JMP BCLIN9 /LOOP
+ JMP I BCLIN3
+BCLI10, ISZ BCLIN3 /SKIP RETURN FOR CONTINUATION
+ DCA MOV61 /CLEAR THE BLANK COUNTER
+ SEND;BCL10E /"_$"
+ TAD (211;OUT1 /<TAB>
+ JMP I BCLIN3 /RETURN
+
+BCLI11, SEND;BCL11E /SEND ERROR
+BCLI12, CIF F0
+ JMS I (CDRIN /GET THE NEXT CARD
+ JMP BCLIN7+2
+ JMS I (GETCDR /GET THE NEXT COLUMN
+ DCA BCLIN4 /SAVE THIS COLUMN
+ TAD (JOBBIT /IS THIS A $JOB CARD?
+ AND BCLIN4
+ SNA CLA
+ JMP BCLI12 /NO - FLUSH TO $JOB
+ TAD (-JOBBIT-1
+ AND BCLIN4
+ SZA CLA
+ JMP BCLI12
+ JMP BCLIN7 /YES - DONE
+
+BCLI13, ISZ MOV61 /ANOTHER BLANK
+ JMP BCLIN8
+
+BCLI14, 0
+ TAD MOV61
+ CMA
+ DCA MOV61
+BCLI15, ISZ MOV61;SKP
+ JMP I BCLI14
+ TAD (" ;OUT1
+ JMP BCLI15
+
+
+
+
+PAGE
+\fBCLTRA, JMP I .+1 /GO FINISH UP LAST BCL COMMAND
+ BCLHUH /HUH? - I.E. WHICH COMMAND WAS IT?
+ CIF CDF F0
+ JMP I (TEXFIN /TO COPY A DECK UNTIL THE NEXT BCL
+ /COMMAND - JMS BCLTRA+1
+
+BCLHU1, 0 /JMS HERE WITH ARG = TRANSFER ADDRESS
+ TAD I BCLHU1 /GET TRANSFER ADDRESS
+ DCA BCLHU1
+ TAD (BCLHUH /ON NEXT BCL CARD - NOTHING TO FINISH
+ DCA BCLTRA+1
+ CIF CDF F0 /FIELD 0!
+ JMP I BCLHU1 /GO GO GO
+
+
+BCLHUH, CDF F0
+ TAD I (KEYVAL /GET KEYWORD VALUE
+ CDF F1
+ TAD (BCLGO /USE IT TO GET TRANSFER ADDRESS
+ DCA OTEMP1
+ TAD I OTEMP1
+ DCA OTEMP1
+ CDF F0
+ TAD I (CONFLG /WAS LAST CARD CONTINUED?
+ CDF F1
+ SZA CLA
+ JMS BCLHU2 /YES - ERROR
+ CDF F0
+ TAD I (LNCNT /DID THIS CARD HAVE A LINE NUMBER?
+ CDF F1
+ SNA CLA
+ JMP I OTEMP1 /YES - GO TO IT!
+ CIF CDF F0
+ JMS I (LNOUT /OUTPUT THE LINE NUMBER
+ JMS BCLHU2 /WHAT'S IT DOING WITH A NUMBER ANYWAY?
+ JMP I OTEMP1 /NOW WE GO.
+
+BCLHU2, 0
+ CDF F0
+ ISZ I (ERRFLG
+ CDF F1
+ SEND;BCLHM1 /"?_"
+ JMP I BCLHU2
+
+
+BCLEOF, JMS BCLHU1;EOF2
+
+
+CERR, JMS BCLHU1;KEYBAD
+
+
+\fXOUTNA, 0
+ TAD I XOUTNA /GET ADDRESS OF NAME
+ ISZ XOUTNA
+ DCA OUTNA2
+ TAD GETPNT /SAVE BUFFER INPUT POINTER
+ DCA OUTNA6
+ DCA OUTNA3 /SET FLAG FOR NO NAME
+ JMS OUTNA4;0;-4 /SEND 4 CHARS FROM POSITION 0
+ TAD OUTNA3
+ SNA CLA
+ JMP .+3 /NO DEVICE - NO ":"
+ TAD (":
+ OUT1
+ JMS OUTNA4;4;-6 /SEND 6 CHARS FROM POSITION 4
+ TAD (12 /SET UP TO GET EXTENSION
+ DCA GETPNT
+ JMS OUTNA1 /GET FIRST CHAR
+ JMP OUTNA5 /NO EXTENSION
+ CLA
+ TAD (".
+ OUT1
+ JMS OUTNA4;12;-2 /SEND 2 CHARS FROM POSITION 12
+OUTNA5, TAD OUTNA6 /RESTORE BUFFER INPUT POINTER
+ DCA GETPNT
+ JMP I XOUTNA
+
+OUTNA1, 0
+ GETCHR
+OUTNA2, 0
+ TAD (-300 /IS IT NULL?
+ SNA
+ JMP I OUTNA1 /YES - DONE
+ ISZ OUTNA1 /SKIP RETURN
+ TAD (300
+ JMP I OUTNA1
+OUTNA3, 0 /NAME PRESENT SWITCH
+
+OUTNA4, 0
+ TAD I OUTNA4 /GET CHAR POSITION
+ ISZ OUTNA4
+ DCA GETPNT
+ TAD I OUTNA4 /GET NO OF CHARS
+ ISZ OUTNA4
+ DCA OUTN41
+OUTN42, JMS OUTNA1 /GET A CHAR
+ JMP I OUTNA4 /NULL - DONE
+ OUT1
+ ISZ OUTNA3 /SET NAME PRESENT
+ ISZ OUTN41
+ JMP OUTN42
+ JMP I OUTNA4 /DONE - RETURN
+OUTN41, 0
+OUTNA6, 0
+
+
+PAGE
+\fXSEND, 0
+ SZA /IF AC =0, ADDRESS IS ARG OF CALL
+ JMP XSEND4
+ TAD I XSEND /GET MESSAGE ADDRESS
+ ISZ XSEND
+XSEND4, DCA OTEMP1
+XSEND1, TAD I OTEMP1
+ CLL RTR;RTR;RTR
+ JMS XSEND2
+ TAD I OTEMP1
+ JMS XSEND2
+ ISZ OTEMP1
+ JMP XSEND1
+
+XSEND2, 0
+ AND (77
+ SNA
+ JMP I XSEND /NULL ENDS MESSAGE
+ JMS I (XSEND3 /GET 8-BIT REPRESENTATION
+ OUT1
+ JMP I XSEND2
+
+
+MAKNAM, 0
+ TAD (DECN /START CONVERSION AT 100
+ CDF F0
+ DCA I (XR1
+ L7775 /CONVERT 3 DIGITS
+ DCA I (TEMP1
+ ISZ NAMCNT /BUMP NAME COUNTER
+ TAD NAMCNT
+ DCA I (TEMP4
+ L0001
+ DCA I (TEMP5 /SAVE LEADING ZEROES
+ TAD (MAKNA2
+ DCA I (OUTAD
+ CDF F1
+ TAD I MAKNAM /MOVE DEFAULT NAME TO OUTPUT AREA
+ DCA .+3
+ MOV6;FILNAM;0
+ TAD I MAKNAM
+ ISZ MAKNAM
+ DCA MAKNA3+2
+ TAD (7 /PUT NUMBER AT POSITION 7-9
+ DCA PUTPNT
+ CIF F0
+ JMS I (CONDEC /OUTPUT NUMBER
+ TAD (XOUT /RESTORE OUTPUT ROUTINE
+ CDF F0
+ DCA I (OUTAD
+ CDF F1
+ JMP I MAKNAM /RETURN
+
+MAKNA3, 0
+ PUTCHR;0
+ CIF CDF F0
+ JMP I MAKNA3
+NAMCNT, 0
+
+
+XISNUM, 0
+ TAD (-"9
+ SMA SZA
+ JMP XISNU1
+ TAD ("9-"0
+ SMA
+ ISZ XISNUM
+XISNU1, CLA
+ JMP I XISNUM
+
+
+SAVNAM, 0
+ TAD SAVPNT
+ DCA SAV1+2 /PUT NAME IN LIST
+ TAD SAVPNT
+ TAD (-SAVTOP /ARE WE AT TOP OF LIST?
+ SNA
+ JMP I SAVNAM /YES - DON'T SAVE NAME
+ TAD (SAVTOP+6
+ DCA SAVPNT /ADVANCE POINTER FOR NEXT TIME
+ TAD I SAVNAM /GET NAME TO SAVE
+ DCA SAV1+1
+ ISZ SAVNAM
+SAV1, MOV6;0;0
+ JMP I SAVNAM
+
+SAVPNT, SAVARA /POINT TO SAVE AREA
+
+
+UNSNAM, 0
+ TAD I UNSNAM
+ ISZ UNSNAM
+ DCA UNSNA1+2 /POINT TO SPACE TO RECEIVE NAME
+ TAD SAVPNT
+ TAD (-6-SAVARA
+ SPA
+ JMP UNSNA2 /EMPTY - RETURN
+ TAD (SAVARA
+ DCA SAVPNT /BACK UP
+ TAD SAVPNT
+ DCA UNSNA1+1 /SET ADDRESS FROM WHICH NAME WILL COME
+UNSNA1, MOV6;0;0
+ ISZ UNSNAM /SKIP RETURN UNLESS EMPTY
+UNSNA2, CLA
+ JMP I UNSNAM
+
+
+PAGE
+\f/
+/
+/ $DECK
+/
+/
+CDECK, BCLIN /GET THE LINE
+ OPTION;CDEOPT /ANALYZE THE OPTIONS
+ TSTCR /END OF LINE?
+ JMP CDECK1 /NO - GET A NAME
+CDECK3, MOV6;CDEDEF;NAME1 /YES - MOVE DEFAULT NAME
+ JMP CDECK2
+CDECK1, COLNAM;NAME1 /COLLECT A NAME
+ JMP CDECK3 /FAIL - BAD NAME
+CDECK2, SEND;CDEM1 /".R PIP_*"
+ OUTNAM;NAME1 /SEND THE NAME
+ SEND;CDEM2 /"<BAT:_"
+ TAD I (OPFOR /WAS "/FOR" SPECIFIED?
+ SMA CLA
+ TAD (BASKEY-FORKEY /NO - USE BASIC
+ TAD (FORKEY-15
+ CDF F0
+ DCA I (KEYADR
+ CDF F1
+ CDRTRA /TRANSLATE THE CARDS
+ SEND;CMEOD /"$EOD_"
+ TAD I (OPNOL /WAS "/NOLIST" SPECIFIED?
+ SPA CLA
+ JMP I (BCLHUH /YES - DONE
+ TAD ("*;OUT1
+ JMS I (PIPOUT;BATOUT /SEND NAME OF LISTING DEVICE
+ TAD ("<;OUT1
+ OUTNAM;NAME1 /SEND NAME OF FILE
+ TAD (215;OUT1
+ JMP I (BCLHUH
+
+
+\f/
+/
+/ $BASIC
+/
+/
+CBAS, BCLIN /GET BCL LINE
+ OPTION;CBAOPT /ANALYZE OPTIONS
+ TSTCR /END OF LINE?
+ JMP CBAS2 /NO - GET NAME
+CBAS1, MOV6;CBATK;NAME1 /MOVE IN BAT:
+ SEND;CBAM1 /.R PIP *PROG.BA<
+ OUTNAM;NAME1 /SEND NAME
+ JMP CONT
+CBAS2, COLNAM;NAME1 /COLLECT THE NAME
+ JMP CBAS1 /FAIL - USE DEFAULT
+CBAS3, SEND;CBAM1 /".R PIP_*PROG.BA<"
+ SEND;CBAM6
+CONT, TAD (215;OUT1
+CBAS5, JMP CBAS7 /SET OR CLOBBERED IN INIT
+ TAD (211;OUT1
+ SEND;CBAM3 /'FILE #0,"DATA.DA"\FILEV #1,"'
+ OUTNAM;BATOUT /"TTY:" OR "LPT:"
+ SEND;CBAM4 /'"_'
+CBAS7, TAD (BASKEY-15
+ CDF F0
+ DCA I (KEYADR /SET KEYWORD LIST
+ CDF F1
+ CDRTRA /TRANSLATE CARDS
+ SEND;CMEOD /"$EOD_"
+ SEND;CBAM7
+ SEND;CBAM5
+ OUTNAM;NAME1
+ SEND;CBAM8
+ TAD I (OPNOL /WAS "/NOLIST SPECIFIED?"
+ SPA CLA
+ JMP CBAS4
+ SEND /SEND AN EOD (MH)
+ CMEOD /(MH)
+ SEND /SEND AN .R PIP * (MH)
+ CDEM1 /(MH)
+ JMS I (PIPOUT;BATOUT
+ SEND;CBAM2 /"<PROG.BA_"
+CBAS4, TAD (DATBAS
+ DCA I (DATADR /SET "$DATA" ROUTINE
+ JMP I (BCLHUH /DONE
+
+
+/
+/
+/ $RUN (AFTER $BASIC)
+/
+/
+DATBAS, BCLIN
+ OPTION;ZER6 /NO OPTIONS
+ SEND;DATBM1 /".R PIP_*DATA.DA<BAT:_"
+ CDRTRA /TRANSLATE THE CARDS
+ SEND;DATBM2 /"$EOD_.R BCOMP_*PROG.BA_"
+ TAD DATFTN /$RUN IS FORTRAN NOW
+ DCA I (DATADR
+ JMP I (BCLHUH /DONE
+
+
+PAGE
+\f/
+/
+/ $FORTRAN (FORTRAN IV)
+/
+/
+CF4, BCLIN /GET BCL LINE
+ OPTION;CF4OPT /ANALYZE OPTIONS
+ TSTCR /END OF LINE?
+ JMP CF42
+CF41, JMS I (MAKNAM;NAME1 /YES - MAKE A NAME
+ JMP CF43
+CF42, COLNAM;NAME1 /NO - COLLECT A NAME
+ JMP CF41 /BAD NAME - MAKE ONE
+CF43, SEND;CF4M1 /".R PIP_*"
+ OUTNAM;NAME1 /SEND THE NAME
+ TAD ("<;OUT1
+ TAD I (OPSRC;RAL /WAS A SOURCE FILE GIVEN
+ SMA CLA
+ JMP CF44 /NO
+ OUTNAM;OPSRC+1 /YES - SEND IT
+ TAD (215;OUT1
+ JMP CF45
+CF44, SEND;CF4M2 /"BAT:_"
+CF45, TAD (FORKEY-15 /FORTRAN CARDS
+ CDF F0
+ DCA I (KEYADR
+ CDF F1
+ CDRTRA /TRANSLATE THE CARDS
+ SEND;CF4M3 /"$EOD_.R F4_*"
+ OUTNAM;NAME1
+ TAD I (OPNOL /WAS "/NOLIST" SPECIFIED?
+ SPA CLA
+ JMP CF46 /YES - DON'T GENERATE LIST FILES
+ TAD (",;OUT1
+ TAD I (OPLIS
+ RAL
+ SPA CLA /WAS A NAME GIVEN?
+ JMP CF47 /YES - GET IT
+ MOV6;BATOUT;OPLIS+1 /NO - GIVE LIST DEV
+CF47, OUTNAM;OPLIS+1 /SEND NAME OF LISTING FILE
+CF46, TAD ("<;OUT1
+ OUTNAM;NAME1
+ TAD I (OPRALF /PRODUCE RALF LISTING?
+ SMA CLA
+ JMP CF48 /NO
+ SEND;CF4M4 /"/F"
+CF48, TAD (215;OUT1
+ TAD (DATF4
+ DCA I (DATADR /SET "$DATA" ADDRESS
+ JMS I (SAVNAM;NAME1 /SAVE NAME FOR "$LOAD"
+ JMP I (BCLHUH /DONE
+
+
+/
+/
+/ $RUN (FORTRAN II)
+/
+/
+DATF2, BCLIN
+ JMS I (CL2S /DO $LOAD STUFF
+ JMP DATL21
+DATL2, BCLIN
+ OPTION;ZER6 /NO OPTIONS IF ALREADY LOADED
+ JMP DATL21
+DATX2, BCLIN
+ JMS I (DATNAM /GET A NAME
+ TAD I (NAMELD /WAS A DEVICE SPECIFIED?
+ SZA CLA
+ JMP DATL21 /YES
+ TAD (0423 /NO - USE "DSK"
+ DCA I (NAMELD
+ TAD (1300
+ DCA I (NAMELD+1
+DATL21, SEND;DTF2M1 /".RUN "
+ OUTNAM;NAMELD
+ TAD (215;OUT1
+ CDRTRA /WITH GENIOX, INPUT IS FROM BATCH STREAM
+ SEND;CMEOD /"$EOD_"
+ TAD DATFTN /$DATA IS NOW FORTRAN
+ DCA I (DATADR
+ JMP I (BCLHUH
+
+
+
+PAGE
+\f/
+/
+/ $LOAD (FORTRAN IV)
+/
+/
+/THIS SUBROUTINE IS USED WITH EITHER A $LOAD OR $RUN
+CL4S, 0
+ OPTION;CL4OPT /ANALYZE OPTIONS
+ SEND;CL4SM1 /".R LOAD_*"
+ TAD I (OPIMAG /WAS "/IMAGE" FILE SPECIFIED
+ RAL
+ SMA CLA
+ JMP CL4S1 /NO
+ MOV6;OPIMAG+1;NAMELD /YES - MOVE NAME
+ JMP CL4S2
+CL4S1, MOV6;CL4DEF;NAMELD /USE DEFAULT NAME
+CL4S2, OUTNAM;NAMELD /SEND THE NAME OF THE IMAGE FILE
+ TAD I (OPLIS /WAS "/LIST" FILE GIVEN?
+ SMA CLA
+ JMP CL4S4
+ TAD I (OPLIS;RAL
+ SPA CLA
+ JMP CL4S3
+ MOV6;BATOUT;OPLIS+1
+CL4S3, TAD (",;OUT1
+ OUTNAM;OPLIS+1
+CL4S4, TAD I (OPSSYM /LIST SYSTEM SYMBOLS?
+ SMA CLA
+ JMP CL4S11 /NO
+ SEND;CL4SM8 /"/S"
+CL4S11, SEND;CL4SM2 /"<_*"
+ TAD I (OPLIB;RAL /WAS "/LIBRARY" FILE SPECIFIED?
+ SMA CLA
+ JMP CL4S5
+ OUTNAM;OPLIB+1 /SEND NAME OF LIBRARY
+ SEND;CL4SM3 /"/L_*"
+CL4S5, TAD I (OPNOA /WAS "/NOAUTO" SPECIFIED?
+ SPA CLA
+ JMP CL4S7 /YES - DON'T BOTHER WITH SAVED NAMES
+CL4S6, JMS I (UNSNAM;NAME1 /GET A SAVED NAME
+ JMP CL4S7 /OUT OF NAMES
+ OUTNAM;NAME1 /SEND IT
+ SEND;CL4SM4 /"/C_*"
+ JMP CL4S6
+CL4S7, TSTCR;SKP /END OF LINE?
+ JMP CL4S10
+ GETCHR;BCLBUF /GET NEXT CHARACTER
+ DCA CHRSAV
+ GETCHR;BCLBUF
+ TAD (-"=
+ SZA CLA
+ JMP CL4S8
+ TAD CHRSAV
+ ISIT;CLIS1;CLIS2-1 /IS IT "L" OR "O"
+CL4S8, L7776
+ TAD GETPNT /BACK UP 2
+ DCA GETPNT
+CL4S9, COLNAM;NAME1
+ JMP CL4S7 /BAD NAME
+ OUTNAM;NAME1 /SEND THE NAME
+ SEND;CL4SM4 /"/C_*"
+ JMP CL4S7
+CL4SL, SEND;CL4SM5 /"/O"
+CL4SO, SEND;CL4SM6 /"_*"
+ L7776
+ TAD GETPNT /BACK 2
+ JMS I (BCLSQU
+ JMP CL4S9
+CL4S10, SEND;CL4SM7 /"$_"
+ DCA I (NAMCNT
+ JMP I CL4S /RETURN
+
+
+/$LOAD
+CL4, BCLIN /GET THE LINE
+ JMS CL4S /ANALYZE IT
+ TAD (DATL4 /SET "$DATA" ADDRESS
+ DCA I (DATADR
+ JMS I (BCLHU1;TEXFIN
+
+CHRSAV, 0
+
+PAGE
+\f/
+/
+/ $RUN (FORTRAN IV) - FORMERLY CALLED $DATA
+/
+/
+/THIS SUBROUTINE IS CALLED FROM DATF4 - THE REAL $RUN PROCESSOR
+DAT4, 0
+ TAD (-12^7 /ZERO OUT CONTROL WORD
+ DCA DEVASC /FOR EACH DEVICE NUMBER
+ TAD (DEVASN-1
+ DCA OXR1
+DEVAS1, DCA I OXR1
+ ISZ DEVASC
+ JMP DEVAS1
+ BCLIN /GET THE INPUT LINE
+DAT41, GETCHR;BCLBUF /GET A CHAR
+DAT411, ISIT;OPTIS3;DATIS1-1 /IS IT "/" OR <CR>?
+ JMP DAT41 /NO
+DAT42, L7777
+ TAD GETPNT /SAVE POINTER TO "/"
+ DCA DEVAST
+ GETCHR;BCLBUF
+ ISNUM
+ JMP DAT411 /IT'S NOT A NUMBER
+ TAD CHAR
+ TAD (-"0
+ CIA
+ DCA DEVASC
+ TAD DEVASC
+ CIA
+ CLL RAL;RTL
+ TAD DEVASC /NUMBER*7
+ TAD (DEVASN
+ DCA DEVASC
+DAT47, GETCHR;BCLBUF /GET ANOTHER CHAR
+ ISIT;DATIS2;DATIS3-1 /IS IT "N","C", OR "="?
+ JMP DAT411 /NO
+DAT44, TAD I DEVASC /"N" SETS BIT 1
+ AND (5777
+ TAD (2000
+ DCA I DEVASC
+ JMP DAT47
+DAT45, TAD I DEVASC /"C" SETS BIT 2
+ AND (6777
+ TAD (1000
+ DCA I DEVASC
+ JMP DAT47
+DAT46, TAD GETPNT /SAVE POINTER TO POSSIBLE NAME
+ DCA DEVASP
+ GETCHR;BCLBUF /GET THE NEXT CHAR
+ ISNUM
+ JMP DAT48 /NOT A NUMBER
+ TAD CHAR /SAVE THE NUMBER
+ DCA DEVASS
+ GETCHR;BCLBUF
+ ISIT;DATIS4;DATIS5-1 /IS IT "," "/" OR <CR>?
+DAT48, TAD DEVASP /RESET NAME POINTER
+ DCA GETPNT
+ TAD I DEVASC /ZERO OUT NUMBER
+ AND (7400
+ DCA I DEVASC
+ TAD DEVASC;IAC /GET POINTER TO DEVICE BLOCK
+ DCA .+2
+ COLNAM;0 /COLLECT NAME
+ JMP DAT49 /BAD NAME
+DAT412, TAD I DEVASC /NAME OR NUM OK - SET BIT 0
+ AND (3777
+ TAD (4000
+ DCA I DEVASC
+DAT49, TAD DEVAST /SQUISH
+ JMS I (BCLSQU
+ JMP DAT41
+DAT410, TAD I DEVASC /ADD NUMBER TO CONTROL WORD
+ AND (7400
+ TAD DEVASS
+ DCA I DEVASC
+ JMP DAT412
+DAT43, JMP I DAT4
+
+
+DEVASP, 0
+DEVASC, 0
+DEVASS, 0
+DEVAST, 0
+
+
+/SEND A NAME AND SEND /T OPTION IF DEVICE IS TTY:
+PIPOUT, 0
+ TAD I PIPOUT /GET ADDRESS OF NAME
+ ISZ PIPOUT
+ DCA PIPPNT
+ OUTNAM /SEND IT
+PIPPNT, 0
+ TAD I PIPPNT /GET CHAR OF DEVICE
+ TAD (-2424 /IS IT "TT"?
+ SZA CLA
+ JMP I PIPOUT /NO
+ ISZ PIPPNT
+ TAD I PIPPNT
+ TAD (-3100 /IS IT "Y@"?
+ SZA CLA
+ JMP I PIPOUT /NO
+ SEND;PIPM1 /"/T"
+ JMP I PIPOUT
+
+
+PAGE
+\f/$RUN (FORTRAN IV)
+DATF4, JMS I (DAT4 /PROCESS DEVICE NUMBER STUFF
+ JMS I (CL4S /DO LOAD STUFF
+ JMP DATL46
+DATL4, JMS I (DAT4
+ OPTION;ZER6 /NO OPTIONS
+ JMP DATL46
+DATX4, JMS I (DAT4 /DO DEVICE NUMBER STUFF
+ JMS DATNAM /COLLECT A NAME
+DATL46, SEND;DTF4M1 /".R PIP_*DATA.DA<BAT:_"
+ CDRTRA /TRANSLATE CARDS
+ SEND;DTF4M2 /"$EOD_.R FRTS_*"
+ OUTNAM;NAMELD /SEND LOADER NAME
+DATL48, JMP DATL49 /ZEROED OR CREATED IN INIT
+ SEND;DTF4M6 /"_*DATA.DA/4_*"
+ OUTNAM;BATOUT
+ SEND;DTF4M7 /"/5"
+ JMP DTL410
+DATL49, SEND;DTF4M8 /"_*/5=4"
+DTL410, SEND;DTF4M3 /"_*"
+ TAD (-12 /TRANSLATE THE DEVICE NUMBERS
+ DCA DATF4C
+ TAD (DEVASN-7
+ DCA DATF4P
+DATL41, TAD (7
+ TAD DATF4P
+ DCA DATF4P
+ TAD I DATF4P
+ SMA CLA /WAS THIS ONE SPECIFIED?
+ JMP DATL47 /NO
+ TAD I DATF4P
+ AND (377 /WAS IT A NUMBER?
+ SNA
+ JMP DATL42
+ DCA CHAR /YES - SAVE IT
+ TAD ("=;OUT1
+ TAD CHAR;OUT1
+ JMP DATL43
+DATL42, TAD DATF4P;IAC /POINT TO NAME
+ DCA .+2
+ OUTNAM;0 /SEND IT
+DATL43, TAD I DATF4P /"N"?
+ RAL
+ SMA CLA
+ JMP DATL44 /NO
+ TAD ("<;OUT1
+DATL44, TAD I DATF4P /"C"?
+ RTL
+ SMA CLA
+ JMP DATL45 /NO
+ SEND;DTF4M4 /"/C"
+DATL45, TAD ("/;OUT1
+ TAD DATF4C
+ TAD ("0+12;OUT1
+ SEND;DTF4M3 /"_*"
+DATL47, ISZ DATF4C
+ JMP DATL41
+ SEND;DTF4M5 /"$_"
+ TAD DATFTN /"$DATA" IS NOW FORTRAN
+ DCA I (DATADR
+ JMP I (BCLHUH
+
+DATF4C, 0
+DATF4P, 0
+
+
+DATNAM, 0
+ OPTION;ZER6 /NO OPTIONS
+ TSTCR;SKP /IS THERE A NAME?
+ JMP DATNO /NO
+ COLNAM;NAMELD /YES - COLLECT IT
+ JMP DATNO /INVALID NAME
+ JMP I DATNAM /RETURN
+DATNO, SEND;DATNO1 /"?NO PROGRAM TO RUN_"
+ JMS I (BCLHU1;TEXFIN
+
+
+PAGE
+\f/
+/
+/ $FORTRAN (FORTRAN II)
+/
+/
+CF2, BCLIN
+ OPTION;CF2OPT /ANALYZE OPTIONS
+ TSTCR /END OF LINE?
+ JMP CF22
+CF21, JMS I (MAKNAM;NAME1 /CREATE A NAME
+ JMP CF23
+CF22, COLNAM;NAME1 /COLLECT A NAME
+ JMP CF21 /FAIL - CREATE A NAME
+CF23, SEND;CF2M1 /".R PIP_*"
+ OUTNAM;NAME1
+ TAD ("<;OUT1
+ TAD I (OPSRC;RAL /WAS A SOURCE FILE GIVEN?
+ SMA CLA
+ JMP CF24 /NO
+ OUTNAM;OPSRC+1
+ TAD (215;OUT1
+ JMP CF25
+CF24, SEND;CF2M2 /"BAT:_"
+CF25, TAD (FORKEY-15 /FORTRAN CARDS
+ CDF F0
+ DCA I (KEYADR
+ CDF F1
+ CDRTRA /TRANSLATE THE CARDS
+ SEND;CF2M3 /"$EOD"
+ TAD I (OPNOL /WAS "/NOLIST" SPECIFIED?
+ SPA CLA
+ JMP CF27
+ SEND;CF2M4 /"_*"
+ TAD I (OPLIS;RAL /WAS A LISTING FILE GIVEN?
+ SPA CLA
+ JMP CF26 /YES
+ MOV6;BATOUT;OPLIS+1 /NO - USE LISTING DEVICE
+CF26, JMS I (PIPOUT;OPLIS+1
+ TAD ("<;OUT1
+ OUTNAM;NAME1
+CF27, SEND;CF2M5 /"_.R FORT_*"
+ OUTNAM;NAME1
+ TAD I (OPNOL /NOLIST?
+ SPA CLA
+ JMP CF28 /YES
+ TAD I (OPSABR /WAS "/SABR" SPECIFIED?
+ SMA CLA
+ JMP CF28 /NO
+ TAD (",;OUT1
+ OUTNAM;OPLIS+1
+CF28, TAD ("<;OUT1
+ OUTNAM;NAME1
+ TAD (215;OUT1
+ TAD (DATF2
+ DCA I (DATADR /ENABLE $DATA
+ JMS I (SAVNAM;NAME1 /SAVE THE NAME FOR $LOAD
+ JMP I (BCLHUH /DONE
+
+
+\f/
+/
+/ $EOD
+/ $MSG
+/
+/
+CEOD,
+CMSG,
+ JMS SENDKY /OUTPUT THE BCL KEYWORD
+ JMS I (BCLHU1;TEXTRA
+
+/
+/
+/ $JOB
+/
+/
+CJOB, TAD (SAVARA /RESET SAVED NAMES
+ DCA I (SAVPNT
+ DCA I (NAMCNT /ZERO MAKNAM COUNTER
+ TAD DATFTN /$RUN IS NOW FORTRAN
+ DCA I (DATADR
+ BCLIN /SEND THE LINE TO THE BATCH STREAM
+ SEND;MJOB1 /".R FOTP_*FIL???.*/D_"
+ JMS I (BCLHU1;TEXFIN
+
+SENDKY, 0
+ CDF F0
+ TAD I (KEYVAL
+ CDF F1
+ TAD (BCLKEY-1
+ DCA OTEMP1
+ TAD I OTEMP1
+ SEND
+ TAD (" ;OUT1
+ JMP I SENDKY
+
+
+PAGE
+\f/
+/
+/ $LOAD (FORTRAN II)
+/
+/
+/THIS SUBROUTINE IS CALLED BY CL2 OR DATF2
+CL2S, 0
+ OPTION;CL2OPT /ANALYZE OPTIONS
+ SEND /".R LOADER_*" OR ".R LOADER_*GENIOX"
+CL2SX, CL2M1 /OR CL2M1A
+ TAD I (OPINP /WAS "/INPUT" SPECIFIED?
+ SMA CLA
+ JMP CL2S1
+ SEND;CL2M3 /"/I"
+CL2S1, TAD I (OPOPT /WAS "/OUTPUT" SPECIFIED?
+ SMA CLA
+ JMP CL2S2
+ SEND;CL2M4 /"/O"
+CL2S2, TAD I (OPTWO /WAS "/TWO" SPECIFIED?
+ SMA CLA
+ JMP CL2S3
+ SEND;CL2M5 /"/H"
+CL2S3, SEND;CL2M6 /"_*"
+ TAD I (OPLIB;RAL /WAS A LIBRARY SPECIFIED?
+ SMA CLA
+ JMP CL2S4
+ OUTNAM;OPLIB+1
+ SEND;CL2M7 /"/L_*"
+CL2S4, TAD I (OPLIS /WAS "/LIST" SPECIFIED?
+ SMA CLA
+ JMP CL2S6
+ TAD I (OPLIS;RAL /WAS A NAME GIVEN?
+ SPA CLA
+ JMP CL2S5 /YES
+ MOV6;BATOUT;OPLIS+1
+CL2S5, OUTNAM;OPLIS+1
+ SEND;CL2M8 /"</M_*"
+CL2S6, TAD I (OPNOA /WAS "/NOAUTO" SPECIFIED?
+ SPA CLA
+ JMP CL2S8
+CL2S7, JMS I (UNSNAM;NAME1 /GET A SAVED NAME
+ JMP CL2S8 /EMPTY
+ OUTNAM;NAME1
+ SEND;CL2M6 /"_*"
+ JMP CL2S7
+CL2S8, TSTCR;SKP /END OF LINE?
+ JMP CL2S9 /YES
+ COLNAM;NAME1
+ OUTNAM;NAME1
+ SEND;CL2M6 /"_*"
+ JMP CL2S8
+CL2S9, SEND;CL2M9 /"$_.SAVE "
+ TAD I (OPIMAG;RAL /WAS AN IMAGE FILE NAME GIVEN?
+ SMA CLA
+ JMP CL2S10 /NO - USE DEFAULT
+ TAD I (OPIMAG+1 /WAS A DEVICE GIVEN?
+ SZA CLA
+ JMP CL2S11 /YES
+ TAD (0423 /"DS"
+ DCA I (OPIMAG+1
+ TAD (1300 /"K"
+ DCA I (OPIMAG+2
+CL2S11, MOV6;OPIMAG+1;NAMELD
+CL2S12, OUTNAM;NAMELD
+ TAD (215;OUT1
+ JMP I CL2S
+
+CL2S10, MOV6;CL2SN2;NAMELD
+ DCA I (NAMCNT
+ JMP CL2S12
+
+
+/$LOAD
+CL2, BCLIN
+ JMS CL2S
+ TAD (DATL2 /$DATA DOES NOT DO LOAD
+ DCA I (DATADR
+ JMS I (BCLHU1;TEXFIN
+
+
+PAGE
+\fBCLBUF, ZBLOCK 400 /SPACE FOR A WHOLE BUNCH OF CONTINUATION CARDS
+BCLSIZ=.-BCLBUF
+SAVARA, ZBLOCK 6^62 /SPACE FOR SAVED NAMES
+SAVTOP=.
+/OPTION LISTS
+CDEOPT, OPBAS;OPFOR;OPNOL;0 /$DECK
+CBAOPT, OPNOL;0 /$BASIC
+CF4OPT, OPSRC;OPNOL;OPLIS;OPRALF;0 /$FORTRAN (F4)
+CL4OPT, OPIMAG;OPLIS;OPLIB;OPNOA;OPSSYM;0 /$LOAD (F4)
+CF2OPT, OPSRC;OPNOL;OPLIS;OPSABR;0 /$FORTRAN (F2)
+CL2OPT, OPINP;OPOPT;OPTWO;OPIMAG;OPLIS;OPLIB;OPNOA;0 /$LOAD (F2)
+/OPTIONS WITHOUT ASSOCIATED FILE NAME
+OPBAS, 0004;TEXT "BASIC" /B
+OPFOR, 0006;TEXT "FORTRAN" /F
+OPNOL, 0023;TEXT "NOLIST";*.-1 /NOL
+OPRALF, 0003;TEXT "RALF";*.-1 /R
+OPNOA, 0023;TEXT "NOAUTO";*.-1 /NOA
+OPSSYM, 0013;TEXT "SSYMB" /SS
+OPSABR, 0012;TEXT "SABR";*.-1 /SA
+OPINP, 0013;TEXT "INPUT" /IN
+OPOPT, 0023;TEXT "OUTPUT";*.-1 /OUT
+OPTWO, 0020;TEXT "TWO" /TWO
+/OPTIONS WITH ASSOCIATED FILE NAME
+OPSRC, 1002;ZBLOCK 6;TEXT "SRC" /S
+OPLIS, 1003;ZBLOCK 6;TEXT "LIST";*.-1 /L
+OPIMAG, 1013;ZBLOCK 6;TEXT "IMAGE" /IM
+OPLIB, 1024;ZBLOCK 6;TEXT "LIBRARY" /LIB
+/FILE NAMES
+NAME1, ZBLOCK 6
+NAMELD, ZBLOCK 6
+BATOUT, ZBLOCK 6
+ZER6, ZBLOCK 6
+BATTTY, TEXT "TTY@@@@@@@@@";*.-1
+BATLPT, TEXT "LPT@@@@@@@@@";*.-1
+CDEDEF, TEXT "@@@@DECK@@@@";*.-1
+CBATK, TEXT "BAT@@@@@@@@@";*.-1
+CL4DEF, TEXT "@@@@PROG@@LD";*.-1
+FILNAM, TEXT "@@@@FIL@@@@@";*.-1
+CL2SN2, TEXT "DSK@PROG@@@@";*.-1
+/SPACE FOR DEVICE ASSIGNMENTS UNDER FORTRAN 4
+DEVASN, ZBLOCK 7^12
+/LISTS FOR ISIT
+CLIS1, -"L;-"O;0
+CLIS2, CL4SL;CL4SO
+DATIS1, DAT42 /"/"
+ DAT43 /<CR>
+DATIS2, -"N;-"C;-"=;0
+DATIS3, DAT44;DAT45;DAT46
+DATIS5, DAT410;DAT410;DAT410
+OPTIS2, OPTIO8 /"="
+ OPTIO9 /","
+ OPTIO9 /"/"
+ OPTIO9 /<CR>
+
+OPTIS4, OPTI3A
+ OPTRET
+
+OPTIS1, -"=
+DATIS4,
+OUTIS1, -",
+OPTIS3,
+BCLIS1, -"/;-215
+/LIST MUST BE TERMINATED BY A POSITIVE WORD
+ 0
+
+COLIS2, COLDEV /":"
+ COLFIL /"."
+ COLEXT /"/"
+ COLEXT /","
+ COLEXT /<CR>
+
+
+COLIS1, -":;-".;-"/;-",;-215
+/TERMINATE LIST WITH POSITIVE WORD
+ 0
+
+BCLIS2, BCLSQ2 /"/"
+ BCLSQ3 /<CR>
+
+OUTIS2, OUTER2 /","
+ OUTER2 /"/"
+ OUTER2 /<CR>
+
+/LIST OF BCL ROUTINE ADDRESSES
+BCLGO, BCLEOF /FOR FINISHING UP BEFORE CLOSING FILE
+ CBAS /$BAS
+FORADR, CF4 /$FOR
+DATADR, DATX4 /$DATA
+LOAADR, CL4 /$LOAD
+ CJOB /$JOB
+ CMSG /$MSG
+ CDECK /$DECK
+ CEOD /$EOD
+ CERR
+ CERR
+ CERR
+ CERR
+/LIST OF BCL KEYWORDS
+BCLKEY, MBAS
+ MFOR
+ MDATA
+ MLOAD
+ MJOB
+ MMSG
+ MDECK
+ MEOD
+/ERROR MESSAGES
+OPTERM, TEXT "?INVALID OPTION: /"
+COLERM, TEXT "?INVALID FILE SPECIFICATION - "
+BCL11E, TEXT "?_BCL LINE TOO LONG_"
+/MESSAGES
+BCLHM1, TEXT "?_"
+BCL10E, TEXT "_$"
+CF4M1,
+CF2M1,
+CDEM1, TEXT ".R PIP_*"
+CDEM2, TEXT "<BAT:_"
+CMEOD, TEXT "$EOD_"
+CBAM1, TEXT ".R PIP"
+ *.-1
+CBAM7, TEXT "_*PROG.BA<"
+CBAM2, TEXT "<PROG.BA"
+ *.-1
+CBAM8, TEXT "_"
+CBAM3, TEXT 'FILE #3:"DATA.DA"\FILEV #4:"'
+CBAM4, TEXT '"_'
+CBAM5, TEXT "PROG.BA,"
+CBAM6, TEXT "BAT:,"
+PIPM1, TEXT "/T"
+DTF4M1,
+DATBM1, TEXT ".R PIP_*DATA.DA<BAT:_"
+DATBM2, TEXT "$EOD_.R BCOMP_*PROG.BA_"
+CF2M2,
+CF4M2, TEXT "BAT:_"
+CF4M3, TEXT "$EOD_.R F4_*"
+CF4M4, TEXT "/F"
+CL4SM1, TEXT ".R LOAD_*"
+CL4SM2, TEXT "<_*"
+CL2M7,
+CL4SM3, TEXT "/L_*"
+CL4SM4, TEXT "/C_*"
+CL4SM5, TEXT "/O"
+DTF4M3,
+CF2M4,
+CL2M6,
+CL4SM6, TEXT "_*"
+DTF4M5,
+CL4SM7, TEXT "$_"
+CL4SM8, TEXT "/S"
+DTF4M2, TEXT "$EOD_.R FRTS_*"
+DTF4M4, TEXT "/C"
+DTF4M6, TEXT "_*DATA.DA/4_*"
+DTF4M7, TEXT "/5"
+DTF4M8, TEXT "_*/5=4"
+DATNO1, TEXT "?NO PROGRAM TO RUN_"
+CF2M3, TEXT "$EOD"
+CF2M5, TEXT "_.R FORT_*"
+CL2M1, TEXT ".R LOADER_*"
+CL2M1A, TEXT ".R LOADER_*GENIOX"
+CL2M3, TEXT "/I"
+CL2M4, TEXT "/O"
+CL2M5, TEXT "/H"
+CL2M8, TEXT "</M_*"
+CL2M9, TEXT "$_.SAVE "
+DTF2M1, TEXT ".RUN "
+MBAS, TEXT "$BASIC"
+MFOR, TEXT "$FORTRAN"
+MJOB1, TEXT ".R FOTP_*FIL???.*/D_"
+MEOD, TEXT "$EOD"
+MJOB, TEXT "$JOB"
+MMSG, TEXT "$MSG"
+MDECK, TEXT "$DECK"
+MLOAD, TEXT "$LOAD"
+MDATA, TEXT "$RUN"
+\f$