~~ I>~~~~~~~~ q~~~~~~a  ; ; .TITL LIBEDT .ENT AFSE .EXTN FCALL,FRET,FQRET,FRCAL .EXTN FSAV .EXTD .CPYARG ; ; EQUIVALENCES (TABLES) ; ; IPT DISPLACEMENTS .ZREL IPT: .BLK 20 IPTIM= IPT+0 ;BYTE POINTER TO MASTER INPUT FILE IPTOM= IPT+1 ;BYTE POINTER TO MASTER OUTPUT FILE IPTDK= IPT+2 ;DISPATCH KEY (-2,-1,0,1,2,3) -> (A,D,I&N,R,X,M) IPTUF= IPT+3 ;POINTER TO CURRENT UFL ENTRY IPTLR= IPT+4 ;POINTER TO CURRENT LRL ENTRY IPTEA= IPT+5 ;EXPECTED ARGUMENT SPECIFIER IPTUC= IPT+6 ;UFL ENTRY COUNT IPTLC= IPT+7 ;LRL ENTRY COUNT IPTLF= IPT+10 ;BYTE POINTER TO LISTING FILE IPTSS= IPT+11 ;BYTE POINTER TO NEXT UNALLOCATED STRING STORAGE ; LRL DISPLACEMENTS LRLW0= 0 ;RADIX 50 SYMBOL WORD 0 LRLW1= 1 ;RADIX 50 SYMBOL WORD 1 LRLEL= 2 ;LRL ENTRY LENGTH LRLEC= 40 ;LRL ENTRY COUNT ;UFL DISPLACEMENTS UFLBP= 0 ;BYTE POINTER TO THE UPDATE FILE NAME UFLLP= 1 ;POINTER TO THE CORRESPONDING LRL ENTRY UFLEL= 2 ;UFL ENTRY LENGTH UFLEC= 40 ;UFL ENTRY COUNT ;RELOCATABLE BLOCK DISPLACEMENTS RLBBT= 0 ;RLB BLOCK TYPE RLBWC= 1 ;RLB WORD COUNT RLBRF= 2 ;RLB RELOCATABLE FLAGS RLBCS= 5 ;RLB CHECKSUM RLBW0= 6 ;RLB RADIX 50 WORD 0 RLBW1= 7 ;RLB RADIX 50 WORD 1 RLBEQ= 10 ;RLB EQUIVALENCE RLBDA= 6 ;RLB DATA ADDRESS ;INPUT PARAMETER SWITCHES UF= 1B15 ;UPDATE FILE OM= 1B14 ;OUTPUT MASTER IM= 1B13 ;INPUT MASTER KY= 1B12 ;DISPATCH KEY LF= 1B11 ;LISTING FILE EOF= 1B10 ;END OF FILE LR= 1B9 ;LOGICAL RECORD LRAT= 1B8 ;LOGICAL RECORD WITH "A" SWITCH (TRANSLATED) LRA= 1B0 ;LOGICAL RECORD WITH "A" SWITCH LRB= 1B1 ;LOGICAL RECORD WITH 'B' SWITCH AM= 1B12 ;ANALYZE MULTIPLE SWRD0= 0 ;SWITCH WORD 0 SWRD1= 1 ;SWITCH WORD 1 ;CHANNEL ASSIGNMENTS UIC= 0 ;USER INTERVENTION MFC= 1 ;MESSAGE FILE CFC= 2 ;COMMAND FILE IMC= 2 ;INPUT MASTER OMC= 3 ;OUTPUT MASTER UFC= 4 ;UPDATE FILE LFC= 5 ;LISTING FILE ; SYMBOL TABLE SYMW0= 0 ;WORD 0 SYMW1= 1 ;WORD 1 SYMCE= 20 ;= AUTO INC REG 0 TMP0= FTSTR TMP1= TMP0+1 TMP2= TMP1+1 TMP3= TMP2+1 TMP4= TMP3+1 TMP5= TMP4+1 PRM0= TMP0 PRM1= TMP1 PRM2= TMP2 PRM3= TMP3 PRM4= TMP4 PRM5= TMP5 NMAX= 404 ; ; .ZREL ; DEFINE THE ACTION ROUTINE POINTERS .CBP: CB  ;CURRENT BLOCK POINTER .NBP: NB  ;NEXT BLOCK POINTER .UCBP: UCB ;UPDATE CURRENT BLOCK POINTER .UNBP: UNB ;UPDATE NEXT BLOCK POINTER .ICC: .BLK 1 ;INPUT CHANNEL CODE (CURRENT) .LRL: LRL  ;LOGICAL RECORD LIST .UFL: UFL  ;UPDATE FILE LIST .OCC: .BLK 1 ;OUTPUT CHANNEL CODE ;DEFINE THE BUFFER POINTERS .IBBP: IB*2  ;INPUT BUFFER BYTE POINTER .SBBP: SB*2  ;SWITCH BUFFER BYTE POINTER .OBBP: OB*2  ;OUTPUT BUFFER BYTE POINTER .SB: SB ; DEFINE THE MISCELLANEOUS POINTERS .FLTYP: 0 ;FILE TYPE FOR ERROR MESSAGE AFSE: SEND+200-FFEL .COMP: COMP-2 ;COMPARE STRINGS .CLNU: CLNUP-2  ;CLEANUP ROUTINE .MESS: MESS-2 ;MESAGE OUTPUT .SYSRT: SYSRT ;SYSTEM RETURN .LBEND: LBEND-2 ;OUTPUT LIBRARY END .WRSM: WRSM-2 .ESTR: ESTR*2  ;END OF STRING .LEBL: LEBL*2  ;LIBRARY END BLOCK OMDFL: 0 ;DEFAULT OUTPUT MASTER ZRELC: 0 ;TOTAL ZREL COUNT NRELC: 0 ;TOTAL NREL COUNT TTLFLG = ZRELC ;TITLE FLAG IN MEGE ; DEFINE SPECIAL RELOCATABLE BLOCK TYPES DBLK: 2*400  ;DATA BLOCK ENBLK: 3*400  ;ENTRY BLOCK XDBLK: 4*400  ;EXTERNAL DISPLACEMENT XNBLK: 5*400  ;EXTERNAL NORMAL SBLK: 6*400  ;START BLOCK TBLK: 7*400  ;TITLE BLOCK ISBLK: 10*400  ;INTERNAL (LOCAL) SYMBOL BLOCK LSBLK: 11*400  ;LIBRARY START BLOCK LEBLK: 12*400  ;LIBRARY END BLOCK ;DEFINE THE SYMBOL TABLE PARAMETERS SYMRC: .BLK 1 ;SYM. TAB. RUNNING COUNT SYMEC: .BLK 1 ;SYM. TAB. ELEMENT COUNT SYMTC: .BLK 1 ;SYM. TAB. TOTAL ELEMENT COUNT .SYM: .BLK 1 ;POINTER TO START OF SYMBOL TABLE ZRDWC: .BLK 1 ;ZREL WORD COUNT NRDWC: .BLK 1 ;NREL WORD COUNT ABDC: .BLK 1 ;ABS DATA COUNT ;DEFINE THE TEXT POINTERS .BLBP: 2*BLNK ;BLANKS .TBP: 2*TITL ;TITLE TYPE .ZRM: 2*ZRM ;ZREL MESSAGE (MUST BE ADJACENT TO ".NRM" .NRM: 2*NRM ;NREL MESSAGE .CRBP: 2*CR ;CARRIAGE RETURN .FFBP: 2*FF  ;FORM FEED .ADM: 2*ADM ;ABS DATA MESSAGE .XDBP: 2*XD ;X-DISP. TYPE .XNBP: 2*XN ;X-NORM. TYPE .ENBP: 2*EN ;ENTRY NORMAL TYPE .EDBP: 2*ED ;ENTRY DISPLACEMENT TYPE .UPBP: 2*UPFL ;UNDEFINED, PHASE FLAGS .PBP: 2*PFL ;PHASE FLAGS .MBP: 2*MFL ;MULTIPLY DEFINED FLAGS .RBBP: 2*RB ;".RB" FILE EXTENSION .LBBP: 2*LB ;".LB" FILE EXTENSION .HMBP: 2*HM ;HASH MARK (END OF I. M. FILE) ; DEFINE THE BINARY CONSTANTS C2: 2 C3: 3 C4: 4 C5: 5 C5N: -5 C6: 6 C7: 7 C13: 13 C14: 14 C15: 15 C37: 37 C50: 50 C71: 71 C100: 100 C113: 113 ; ; DEFINE THE ERROR ROUTINE POINTERS ; .E12: E12 .E26: E26 .E100: E100 .E105: E105 .E110: EA8 ;BLOCK ERROR .E113: E113 .AE2: EA2 ;UNEXPECTED ARGUMENT .AE3: EA3 ;INVALID SWITCH .AE6: EA6 ;NOT A LFE COMMAND ; .FERR: FERR .EA8: EA8 ;BLOCK ERROR ERRIN: .BLK 1 ;STORE ERROR CODE HERE ; ; .NREL INIT: LDA 3,INIC1  ;INITIALIZE THE STACK LDA 0,INIC0 STA 0,QSP STA 3,FSP    ;INITIALIZE THE TABLES SUB 0,0 STA 0,TTLFLG ;CLEAR TITLE FLAG STA 0,FLGT,3 STA 0,IPTIM STA 0,IPTOM STA 0,IPTDK STA 0,IPTUC STA 0,IPTLC STA 0,IPTLF STA 0,@.UFL LDA 1,INIC2 STA 1,IPTUF LDA 1,INIC3 STA 1,IPTLR LDA 1,INIC4 STA 1,IPTSS LDA 1,INIC5 STA 1,IPTEA LDA 0,INIC6  ;INITIALIZE THE FILES .SYSTM  ;RESET .RESE JSR @.FERR SUB 1,1  ; LEAVE CHARACTERISTICS AS IS .SYSTM .OPEN MFC JSR @.FERR .SYSTM   ;ALSO THE DEFAULT LIST FILE .OPEN LFC JSR @.FERR LDA 0,INIC7 .SYSTM .OPEN CFC JSR @.FERR LDA 0,.IBBP  ; LDA 1,C4 .SYSTM .RDS CFC  ;ALSO READ PAST THE SWITCHES JSR @.FERR JMP CMDRE ; CONSTANTS INIC0: LFESS+200+FAC2 ;FIXED STACK ENTRY LENGTH INIC1: LFESS+200 INIC2: UFL-1 ;UPDATE FILE LIST ADDRESS INIC3: LRL-1 ;LOGICAL RECORD LIST ADDRESS INIC4: STRGS*2 ;STRING STORAGE ADDRESS INIC5: OM ;INITIAL EXPECTED PARAMETERS INIC6: TTON*2 ;BYTE POINTER TO MESSAGE FILE INIC7: CMFN*2 ;BYTE POINTER TO COMMAND FILE ; ; 0 CMDRE: FCALL   ;READ A PARAMETER RDPAR LDA 0,IPTEA  ;AC0 = EXPECTED ARG SPECIFIER LDA 1,CMDC1  ;PASS OM AND LF AND 0,1,SZR JMP CMDL0-1 LDA 1,FAC1,3 MOV 1,1,SNR  ;IF THE PARAM. WAS UNFLAGGED.... LDA 1,CMDC0  ; IT MUST BE ONE OF THESE AND 0,1,SNR JSR @.AE2  ;ARGUMENT ERROR LDA 2,.ADT  ;DISPATCH TO THE APPROPRIATE CMDL0: MOVZR 1,1,SZC  ; STORE ARGUMENT ROUTINE JMP CMDL1 INC 2,2 JMP CMDL0 CMDL1: LDA 2,0,2 FRCAL JMP CMDRE  ;AN EOF INTERRUPTS THIS LOOP CMDC0: UF+LR+IM+KY CMDC1: LF+OM ;LISTIN FILE AND OUTPUT MASTER .ADT: ADT   ;ARGUMENT DISPATCH TABLE ADDRESS ADT: SUF   ;THESE ROUTINES STORE THE SOF   ; RESPECTIVE ARGUMENT TYPES SIM SKY SLF FERR SLR SLR ; ; ; READ PARAMETER ; ;  ARGUMENTS: ; ;   AC1 - ARGUMENT SPECIFIER (RETURNED) ;   ".IBBP" - BYTE POINTER TO STRING ; ;  ACTION: ; ;   (0) READ THE NEXT "COM.CM" STRING ;   (1) READ THE STRING'S SWITCHES INTO A ;    WORD BOUNDED BUFFER ;   (2) CHECK FOR SWITCHES SET ;    (A) IF ILLEGAL, EXIT THROUGH ;     ARGUMENT ERROR' ;    (B) IF LEGAL, STORE IN THE ;     CALLER'S FRAME ;    (C) IF NONE, STORE LIKEWISE ;   (3) RETURN TO CALLER ; ; ; ; 0 RDPAR: LDA 0,.IBBP  ;STEP (0) FCALL RDLINE LDA 0,.SBBP  ;STEP (1) LDA 1,C4 .SYSTM .RDS CFC JSR @.FERR MOVZR 0,3  ;STEP (2) LDA 2,RDPC0 LDA 1,SWRD0,3 AND 1,2,SZR JMP RDPL0  ; (B) LDA 1,SWRD1,3 SUB 1,2,SZR  ; (C) JSR @.AE3  ;SOME INVALID SWITCH WAS SET (A) RDPL0: LDA 3,FSP LDA 3,FOSP,3 MOVL 2,1,SNC  ;TRANSLATE 'A' AND'B' MOVL 1,1,SZC LDA 2,RDPC1 STA 2,FAC1,3 FRET   ;STEP (3) RDPC0: LRA+LF+OM+AM+LRB RDPC1: LRAT ; ; 0 SIM: FCALL   ;STORE THE STRING IN THE ASSTR   ; STRING STORAGE AREA STA 0,IPTIM  ;SET IPTIM SIM0: INC 0,0  ;EXISTS. IF NOT JSR @.LDBT MOV 1,1,SZR JMP SIM0 MOV 0,1 LDA 0,.LBBP FCALL MOVE LDA 0,IPTIM FCALL FECHK JMP SIM4 SIM1: LDA 1,IPTDK  ;TEST KEY LDA 0,SIMC3 MOV 1,1,SNR JMP SIM2  ;'I' LDA 0,SIMC1 ADCZL 3,3 SUB# 1,3,SNR JMP SIM3  ;'A' COMOL 3,3 SUB# 1,3,SZR LDA 0,SIMC0 JMP SIM2 SIM3: LDA 1,IPTUC  ;UNLESS THE KEY IS "A" MOV 1,1,SNR  ;FOR "A", LR = EXPECTED ARG. LDA 0,SIMC2  ;FOR "A/M", UF = " " SIM2: STA 0,IPTEA FRET SIM4: MOV 1,0 LDA 1,C3 SUB 1,0 SUB 1,1 JSR @.STBT LDA 0,IPTIM FCALL FECHK   ;CHECK WITHOUT EXTENSION JSR @.E12  ;ERROR, NO IM FILE JMP SIM1  ;FOUND SIMC0: LR ;'D','R' => LOGICAL RECORD SIMC1: UF+EOF ;'A/M','M','T' => UPDATE FILE OR END OF FILE SIMC2: LR+EOF ;'A' => LOGICAL RECORD OR END OF FILE SIMC3: UF+LRAT ;'I' => LOGICAL RECORD OR UPDATE FILE ; ; 0 SOF: FCALL   ;STORE THE STRING IN THE ASSTR   ; STRING STORAGE AREA STA 0,IPTOM LDA 0,@.SB  ;DEFAULT FILE? ADC 1,1 MOV 0,0,SNR STA 1,OMDFL  ;SET FLAG LDA 0,SOFC0  ; APPROPRIATELY STA 0,IPTEA FRET SOFC0:LF ;IN STANDARD COMMAND LINE LISTING FILE  ;FOLLOWS OUTPUT MASTER ; ; 0 SKY: LDA 0,.IBBP  ;LOAD THE ASCII CHARACTER FCALL LDBT LDA 2,KEY0  ;POINT TO TABLE OF KEYS ADCZL 3,3  ;ASSUME 'A' SKYL2: LDA 0,0,2 SUB# 1,0,SNR JMP SKYL0 MOVL 0,0,SZC  ;TEST FOR ILLEGAL KEY JMP @.AE6  ;NOT A LFE COMMAND INC 3,3 INC 2,2 JMP SKYL2 SKYL0: MOVZR 3,0,SNC MOV 3,3,SNR JMP SKYL3 MOVZR 0,0,SNC JMP SKYL4 SUB 0,0  ;NO O.M FOR 'A' AND 'X' STA 0,IPTOM MOVL# 3,3,SZC JMP SKYL1  ;IF 'A' CHECK FOR /M SKYL3: LDA 0,C5 SUB# 3,0,SZR  ;TITLE LISTING? JMP .+3  ;NO LDA 3,C3  ;YES,TREAT AS IF 'M' STA 0,TTLFLG ;SET TITLE FLAG LDA 0,SKYC0 SKYL5: STA 3,IPTDK STA 0,IPTEA FRET SKYL4: SUB 3,3 LDA 0,SKYC1 JMP SKYL5 SKYL1: LDA 0,@.SB  ;TEST SWITCH MOV 0,0,SNR JMP SKYL3 LDA 1,MSW SUB# 0,1,SZR JSR @.AE3  ;ILLEGAL SWITCH ISZ IPTUC  ;INCREMENT UPDATE COUNT IF /M JMP SKYL3 KEY0: .+1 "A ;ANALYZE "D ;DELETE "I ;INSERT "R ;REPLACE "X ;EXTRACT LIBRARY ROUTINES "M ;MERGE LIBRARIES "N ;MAKE A NEW LIBRARY "T ;TITLE LIST -1 SKYC0: IM SKYC1: UF MSW: AM ; ; 0 SLR: FCALL ASSTR  ;COPY TITLE ISZ IPTLC ISZ IPTLR STA 0,@IPTLR ;SAVE BYTE POINTER ISZ IPTLR LDA 0,@.SB LDA 1,LREA2  ;TEST FOR 'B' AND 0,1,SZR SUBZL 1,1 STA 1,@IPTLR ;SET 'B' FLAG LDA 0,IPTDK LDA 1,LREA0  ;ASSUME 'I','R',OR 'M' MOVZR 0,0,SZR LDA 1,LREA1  ;NO, 'A','D' OR 'X' STA 1,IPTEA FRET LREA0: UF ;I,R OR M LREA1: LR+EOF ;A,D OR X LREA2: LRB ;'B' SWITCH ; ; 0 SUF: FCALL   ;STORE THE STRING IN THE ASSTR   ; STRING STORAGE REGION ISZ IPTUF  ;STORE THE RETURNED BYTE POINTER STA 0,@IPTUF ; ON THE UFL SUF0: INC 0,0 JSR @.LDBT  ;BUMP BYTE POINTER MOV 1,1,SZR  ;UNTIL NULL JMP SUF0 MOV 0,1 LDA 0,.RBBP  ;TEST WITH ".RB" EXTENSION LDA 3,IPTDK  ;OR WITH '.LB' IF MOVL# 3,3,SNC  ;KEY IS 'A' MOVZR# 3,3,SEZ  ;OR 'M' LDA 0,.LBBP FCALL MOVE LDA 0,@IPTUF FCALL FECHK JMP SUF1  ;TRY WITH NO EXTENSION SUF2: LDA 3,IPTDK  ;INPUT MASTER MAY NOT LDA 1,C2  ;MATCH UPDATE FILE ADC# 1,3,SZR  ;EXCEPT FOR 'A' ,'M' AND 'T' ADD# 1,3,SNR JMP SUF20 LDA 1,IPTIM JSR @.COMP JMP SUFE0 SUF20: ISZ IPTUF LDA 0,IPTLR  ;STORE THE LRL ENTRY POINTER STA 0,@IPTUF  ; ON THIS UFL ENTRY DSZ @IPTUF ISZ IPTUC  ;INCREMENT UFL ENTRY COUNT SUF3: LDA 0,IPTDK  ;CHECK THE DISPATCH KEY IN ORDER LDA 1,SUFC2 MOVL# 0,0,SZC JMP SUFL0 MOVZR# 0,0,SEZ JMP SUFL0 LDA 1,SUFC0  ; TO SET THE NEXT EXPECTED MOV# 0,0,SZR  ; ARGUMENT CELL LDA 1,SUFC1 SUFL0: STA 1,IPTEA FRET SUFC0: UF+LRAT+EOF ;UF => UF,LRA FOR KEY OF "I" SUFC1: LR+EOF  ;UF => LR FOR KEY OF "R" SUFC2: UF+EOF ;CHECK FOR UPDATE WITHOUT EXTENSION ;AC1 POINTS TO END OF STRING SUF1: MOV 1,0 LDA 1,C3 SUB 1,0 SUB 1,1 JSR @.STBT  ;STORE BACK NULL LDA 0,@IPTUF ;POINT TO STRING FCALL FECHK   ;CHECH FOR FILE JMP SUFER  ;STILL NOT FOUND,ERROR JMP SUF2  ;FOUND ;IF UPDATE FILE DOES NOT EXIST ;SKIP IT AND IF KEY IS 'R' SO ALSO THE CORRESPONDING ;LOGICAL RECORD SUFE0: LDA 0,.AE1M JMP .+2 SUFER: LDA 0,.AE5M  ;SEND ERROR MESSAGE JSR @.MESS LDA 0,@IPTUF JSR @.MESS LDA 0,.CRBP JSR @.MESS LDA 0,@IPTUF STA 0,IPTSS DSZ IPTUF LDA 0,IPTDK SUBZL 1,1 SUB# 0,1,SZR JMP SUF3 LDA 0,@IPTLR STA 0,IPTSS DSZ IPTLR DSZ IPTLR DSZ IPTLC MOV 0,0  ;NO-OP JMP SUF3 .AE5M: 2*AE5M ;ERROR MESS. U.F. NOT FOUND .AE1M: 2*AE1M ;ERROR MESS. I.M MATCHES AN U.F ; ; 0 SLF: LDA 0,@.SB ;TEST FOR PRESENCE OF MOV 0,0,SNR  ;A LISTING FILE. JMP SLF0  ;IF THERE IS ONE, FCALL   ;STORE THE STRING IN THE ASSTR   ; STRING STORAGE REGION STA 0,IPTLF  ;STORE THE BYTE POINTER IN IPTLF SLF0: LDA 1,SLFC1 STA 1,IPTEA FRET SLFC1: KY ; ; ; ALLOCATE AND STORE STRING ; ;  ARGUMENTS: ; ;   AC0 - B. P. TO THE STORED STRING (RE- ;    TURNED) ;   .IBBP - BYTE POINTER TO THE STRING TO ;    BE MOVED ;   IPTSS - BYTE POINTER TO NEXT AVAILABLE ;    STRING STORAGE (BEFORE) ;    UPDATED (AFTER) ; ; 0 ASSTR: LDA 0,.IBBP  ;AC0 POINTS TO "FROM" STORAGE LDA 1,IPTSS  ;AC1 POINTS TO "TO" STRING STA 1,FAC0,2 FCALL   ;MOVE THE STRING MOVE MOV 1,0  ;STORE A NULL AT THE END SUB 1,1 JSR @.STBT INCZR 0,0 INCL 0,0 JSR @.STBT INC 0,0 STA 0,IPTSS  ;UPDATE IPTSS LDA 1,.ESTR SUBZ# 0,1,SNC JSR @.E113  ;STRING TOO LONG FRET ; ; CMEOF: LDA 0,IPTEA  ;IS AN "EOF" LEGAL NOW? LDA 1,CMEC0 AND 1,0,SNR  ; YES JSR @.E100  ; NO JMP CHINI  ;INITIALIZE CHANNELS CMEC0: EOF ; ; 0 RDLINE: .SYSTM   ;READ THE LINE AND STORE A NULL .RDL CFC  ; BYTE AT THE END OF THE LINE JMP RDLL0 STA 1,FAC1,2 ADD 1,0 SUB 1,1 FCALL STBT FRET RDLL0: LDA 1,RDLC0  ;IF ERROR RETURN SUB# 1,2,SZR  ; EITHER "EOF" (SIGNALED) JSR @.FERR  ; OR FATAL ERROR JMP CMEOF RDLC0: 6  ;"EOF" ERROR RETURN ; ; ERROR HANDLERS ; E100: LDA 2,C100  ;LOAD SPECIAL ERROR CODES JMP FERR E105: LDA 0,.A12B  ;CHECKSUM ERROR IN U.F. ISZ .FLTYP  ;CHECK IF L.R LDA 0,.A11B JMP EAOUT E113: LDA 2,C113 JMP FERR E26: LDA 0,.A10B JMP EAOUT E12: MOV 0,2 LDA 0,.A5BP JSR @.MESS MOV 2,0 JSR @.MESS LDA 0,.CRBP JSR @.MESS JMP @.SYSRT 0   ;IN CASE IT'S EVER "CALLED" FERR: STA 2,ERRIN  ;STORE THE ERROR CODE LDA 0,.LEBL  ;OUTPUT A LIB END BLOCK LDA 1,C14  ; TO THE OUTPUT FILE LDA 2,.OCC MOV 2,2,SZR  ; (IF IT EXISTS) JSR @.LBEND CMEL0: LDA 2,ERRIN  ;TAKE "ERTN" WITH THE ERROR .SYSTM   ; CODE IN AC2 .ERTN JMP . EA2: LDA 0,.A2BP JMP EAOUT EA3: LDA 0,.A3BP JMP EAOUT EA4: LDA 0,.A4BP JMP EAOUT EA6: LDA 0,.A6BP JMP EAOUT EA8: LDA 0,.A8BP  ;ASSUME BLOCK ERROR IN U.F. ISZ .FLTYP  ;CHECK IF L.R LDA 0,.A9BP  ;IF SO POINT TO CORR. MESS. EAOUT: JSR @.MESS LDA 0,.IBBP JSR @.MESS  ;OUTPUT STRING FROM COMMAND LINE LDA 0,.CRBP JSR @.MESS LDA 2,.OCC LDA 1,C14 LDA 0,.LEBL  ;LIBRARY END BLOCK MOV 2,2,SZR JSR @.LBEND SYSRT: .SYSTM .RTN JMP . FSAV 0 MESS: .SYSTM .WRL MFC JMP .+1 FRET FSAV 0 LBEND: LDA 2,FAC2,2 .SYSTM .WRS CPU JMP .+1 FRET .A2BP: 2*AE2M .A3BP: 2*AE3M .A4BP: 2*AE4M .A5BP: 2*AE5M .A6BP: 2*AE6M  ;NOT A LFE COMMAND MESSAGE .A8BP: 2*AE8M ;ILLEGAL BLOCK IN AN U.F. .A9BP: 2*AE9M ;ERROR MESS. ILLEGAL BLOCK IN L.R. .A10B: 2*AE10M ;SYMBOL TABLE OVFL .A11B: 2*AE11M ;CHECKSUM ERROR IN L.R .A12B: 2*AE12M ;CHECKSUM ERROR IN UPDATE FILE ; ; ; FILE EXISTS CHECK ; ;  ARGUMENTS:; ;   AC0 - BYTE POINTER TO FILENAME ; ;  CONDITIONAL RETURNS: ; ;   FCALLING LOC. + 1 => FILE DOESN'T EXIST ;   FCALLING LOC. + 2 => FILE EXISTS ; ; -1   ;OPEN AND CLOSE THE FILE FECHK: ADC 1,1  ; DON'T DO ANYTHING TO FILE .SYSTM   ; BUMP THE RETURN LOCATION IF .OPEN 7  ; SUCCESSFUL JMP .+2 ISZ FRTN,2 .SYSTM .CLOSE 7 FQRET FQRET ; ; ; CHANNEL INITIALIZATION ; ;  CHANNEL ASSIGNMENTS ; ;   UIC (0) - $TTI (USER INTERVENTION) ;   MFC (1) - $TTO (MESSAGE FILE) ;   CFC (2) - COM.CM ;   IMC (2) - INPUT MASTER ;   OMC (3) - OUTPUT MASTER ;   UFC (4) - UPDATE FILE ;   LFC (5) - LISTING FILE ; ;  CHINI: .SYSTM   ;CLOSE COM.CM .CLOSE CFC JSR @.FERR LDA 0,IPTIM  ;OPEN THE INPUT MASTER LDA 2,CHIC0 MOV 0,0,SNR JMP CHIL0  ; ....UNLESS NONEXISTENT SUB 1,1  ; LEAVE CHARACTERISTICS ALONE .SYSTM .OPEN CPU JSR @.FERR STA 2,.ICC CHIL0: INC 2,2 LDA 3,TTLFLG ;TEST FOR TITLE LISTING MOV# 3,3,SZR  ;NO OUTPUT FILE JMP CHIL1  ;NEEDED FOR IT LDA 3,IPTDK  ;TEST FOR 'A' AND 'X' LDA 0,C2  ;WHICH ALSO DO NOT NEED ADD# 0,3,SZR  ;O.M SUB# 0,3,SNR JMP CHIL1  ; LDA 0,IPTOM  ;CREATE AND OPEN THE OUTPUT LDA 3,OMDFL  ;DEFAULT OUTPUT? MOV 3,3,SZR JMP CHIL4  ; ....UNLESS NONEXISTENT CHIL3: .SYSTM .CREAT JSR @.FERR .SYSTM .OPEN CPU JSR @.FERR STA 2,.OCC CHIL1: LDA 0,IPTLF  ;CREATE AND OPEN THE LISTING INC 2,2 INC 2,2  ; FILE MOV 0,0,SNR JMP CHIL2  ; ....UNLESS NONEXISTENT .SYSTM .CREAT JSR @.FERR .SYSTM   ;CLOSE, THEN OPEN .CLOSE LFC JSR @.FERR .SYSTM .OPEN CPU JSR @.FERR CHIL2: LDA 2,IPTDK  ;DISPATCH TO THE ACTION SUB- LDA 3,.DT  ; PROGRAM ADD 2,3 LDA 2,0,3 LDA 0,IPTIM STA 0,.IBBP  ;ERROR POINTER SUB 0,0  ;SET FILE TYPE L.R STA 0,.FLTYP ;FOR ERROR MESSAGES FRCAL JSR @.CLNUP JMP @.SYSRT ;OUTPUT CAUTION MESSAGE THAT ;A DEFAULT OUTPUT IS USED CHIL4: LDA 0,.NOOF JSR @.MESS LDA 0,IPTOM JSR @.MESS LDA 0,.CRBP JSR @.MESS LDA 0,IPTOM JMP CHIL3 CHIC0: IMC  ;INPUT MASTER CHANNEL # .DT: .+3  ;DISPATCH TABLE ANALZ DLETE INSRT REPLC XTRCT MRGE .NOOF: NOOMF*2 ;'NO OUTPUT FILE' MESSAGE .EOT ;END OF TAPE 1 *U*U*U*UH!mM