~~ I>~~~~~~~~ q~~~~a ; ; ; ACTION PROGRAMS ; ;  INSERT ;  EXTRACT ;  REPLACE ;  ANALYZE ; ; ; ; 1 INSRT: FCALL   ;TRANSFER THE HEADER RECORD RWHDR LDA 0,IPTIM  ;IF NO INPUT MASTER LDA 1,IPTLC  ; OR SPECIFIED LOGICAL RECORDS SUB# 0,1,SNR JMP QUIKI  ;MAKE A "QUICK" INSERT ;  THIS CODE CHECKS THE UFL FOR ALL ENTRIES WITH LRL ; POINTERS WHICH POINT BELOW THE LRL. THIS CONDITION ; INDICATES AN UPDATE FILE(S) WHICH IS TO BE INSERTED ; AT THE BEGINNING OF THE OUTPUT FILE. LDA 0,IPTUC STA 0,TMP0,3 LDA 2,.UFL INSL5: LDA 0,.LRL LDA 1,UFLLP,2 SUBZ# 0,1,SZC  ;SKIP IF 1 < 0 JMP INSL4 LDA 0,UFLBP,2 FCALL COPUF SUB 0,0 STA 0,UFLLP,2 STA 0,UFLBP,2 INSL4: INC 2,2 INC 2,2 DSZ TMP0,3 JMP INSL5 INSL0: FCALL   ;READ THE NEXT TITLE BLOCK RDNLR FRET   ;EOF => DONE JSR @.SVTTL  ;SAVE TITLE FOR ERROR MESS. FCALL   ;SEARCH FOR AN LR MATCH LRSER JMP INSL3 MOV 1,3 LDA 0,LRLW1,3 MOV 0,0,SZR  ;TEST FOR 'B' SWITCH JMP INSL1 FCALL   ;FOUND - COPY THIS L. RECORD COPLR INSL1: FCALL   ;SEARCH THE UFL FOR APPROPRIATE UFSER   ; ENTRY(S) JMP INSL2  ;NO MORE, THEN THIS LR IS SATIS-    ; FIED FCALL   ;FOUND - COPY THIS UPDATE F. TO COPUF   ; THE OUTPUT MASTER SUB 0,0 STA 0,UFLBP,2 STA 0,UFLLP,2 JMP INSL1  ;LOOK FOR ANOTHER INSL2: SUB 0,0  ;DELETE THIS LRL ENTRY MOV 1,2 LDA 1,LRLW1,2 MOV 1,1,SNR JMP .+3 FCALL COPLR   ;COPY L.R. IF 'B' SWITCH IS SET STA 0,LRLW0,2 STA 0,LRLW1,2 JMP INSL0  ;CONTINUE INSL3: FCALL   ;COPY THIS LOGICAL RECORD AND COPLR   ; CONTINUE JMP INSL0 QUIKI: LDA 2,.UFL  ;QUICK INSERT QUIK0: LDA 0,UFLBP,2 ;COPY EACH UFL ENTRY TO THE FCALL   ; OUTPUT MASTER COPUF INC 2,2 INC 2,2 DSZ IPTUC  ; ....UNTIL THE ENTRY EXPIRES JMP QUIK0 LDA 0,IPTIM  ;IF THE INPUT MASTER DOES NOT MOV 0,0,SNR  ; EXIST ... FRET   ;THEN YOU'RE DONE QUIK1: FCALL   ; OTHERWISE... RDNLR   ;READ AND COPY LOGICAL RECORDS FRET   ;UNTIL AN EOF FCALL COPLR JMP QUIK1 .SVTTL: SVTTL ;SAVE TITLE ; ; 1 DLETE: FCALL   ;TRANSFER THE HEADER RECORD RWHDR DLET0: FCALL   ;READ NEXT LOGICAL RECORD RDNLR FRET   ;EOF => DONE JSR @.SVTTL  ;SAVE TITLE FOR ERROR MESS FCALL   ;SEARCH FOR AN LRL MATCH LRSER JMP DLET1  ;NOT FOUND FCALL   ;FOUND - ADVANCE THE INPUT MAS- ADVLR   ; TER ONE LOGICAL RECORD SUB 0,0  ;ZERO THIS LRL ENTRY MOV 1,2 STA 0,LRLW0,2 STA 0,LRLW1,2 JMP DLET0  ;CONTINUE DLET1: FCALL   ;DOESN'T MATCH, THEN COPY IT COPLR JMP DLET0 ;MERGE LIBRARIES AND OUTPUT A SINGLE MASTER 2 MRGE: FCALL RWHDR   ;COPY HEADER ISZ IPTUC LDA 1,.UFL STA 1,TMP,3 SUBZL 1,1 STA 1,TMP1,3 MRG0: FCALL RDNLR   ;READ NEXT LOGICAL RECORD JMP MRG1  ;LIBRARY END JSR @.SVTTL  ;SAVE TITLE OF L.R LDA 0,TTLFLG MOV# 0,0,SZR JMP MRG2  ;LIST TITLES FCALL COPLR   ;COPY L.R JMP MRG0  ;GOTO NEXT L.R. MRG1: LDA 0,IPTUC DSZ IPTUC  ;ANY MORE? MOV 0,0,SNR FRET   ;DONE, CLEAN-UP .SYSTM .CLOSE IMC  ;CLOSE INPUT FILE JSR @.FERR LDA 2,TMP,3 LDA 0,UFLBP,2 STA 0,.IBBP  ;ERROR POINTER SUB 1,1 .SYSTM .OPEN IMC JSR @.FERR ISZ TMP,3 ISZ TMP,3 LDA 0,.OCC  ;SAVE OUTPUT CHANNEL STA 1,.OCC  ;CLEAR OUTPUT CHANNEL FCALL RWHDR   ;READ PAST HEADRE STA 0,.OCC  ;RESTORE OUTPUT CHANNEL JMP MRG0  ;NEXT L.R. MRG2: LDA 3,FSP DSZ TMP1,3 JMP .+6 LDA 0,.CRBP  ;EXTRA CR EVERY 10TH TITLE JSR @.WRSM LDA 0,C12 STA 0,TMP1,3 JMP .+3  ;NO SPACES LDA 0,.BLBP JSR @.WRSM LDA 0,.TTLP  ;TITLE POINTER JSR @.WRSM LDA 0,.CRBP JSR @.WRSM FCALL ADVLR   ;ADVANCE A RECORD JMP MRG0  ;GO TO NEXT RECORD C12: 12 ;CREATE FILES OF THE SAME NAME S ;AS IN THE L.R.LIST AND COPY THEM 1 XTRCT: FCALL RWHDR   ;TRANSFER HEADER XTRL0: FCALL RDNLR   ;READ NEXT L.R FRET   ;DONE, CLEAN-UP JSR SVTTL FCALL LRSER   ;SEARCH FOR MATCH JMP XTRL1  ;NOT FOUND LDA 2,OFILE  ;OUTPUT FILE STA 2,.OCC STA 1,TMP,3 LDA 0,.IBBP  ;CREATE FILE INC 0,0 JSR @.LDBT MOV 1,1,SZR JMP .-3 MOV 0,1 LDA 0,.RBBP  ;WITH NAME TITLE.RB FCALL MOVE LDA 0,.IBBP SUB 1,1 .SYSTM .CREAT JMP XTRL2  ;FILE ALREADY EXISTS .SYSTM .OPEN OMC JSR @.FERR FCALL COPLR   ;COPY L.R .SYSTM .CLOSE OMC JSR @.FERR SUB 0,0 XTRL3: LDA 2,TMP,3 SUB 3,3 STA 3,LRLW0,2 STA 3,LRLW1,2 STA 3,.OCC MOV 0,0,SNR JMP XTRL0  ;CLOSE OUTPUT FILE,GOTO NEXT L.R XTRL1: FCALL ADVLR   ;ADVANCE TO NEXT L.R. JMP XTRL0  ;REPEAT XTRL2: LDA 0,XSTBP JSR @.MESS LDA 0,.IBBP JSR @.MESS LDA 0,.CRBP JSR @.MESS ADC 0,0 JMP XTRL3 XSTBP: XSTM*2 ;FILE ALREADY EXISTS OFILE: OMC ; ; 1 REPLC: FCALL   ;TRANSFER THE HEADER RECORD RWHDR REPL0: FCALL   ;READ NEXT LOGICAL RECORD RDNLR FRET   ;EOF => DONE JSR SVTTL  ;SAVE TITLE FOR ERROR MESS. FCALL   ;SEARCH FOR AN LRL MATCH LRSER JMP REPL1  ;NOT FOUND STA 1,TMP0,3 ;TMP0 = POINTER TO THE LRL ENTRY FCALL   ;FIND THE ASSOCIATED UPDATE FILE UFSER JSR @.E110  ;THIS ONE SHOULDN'T HAPPEN FCALL   ;COPY THE UPDATE FILE TH THE COPUF   ; OUTPUT FILE FCALL   ;ADVANCE THE INPUT MASTE ONE ADVLR   ; LOGICAL RECORD SUB 0,0 STA 0,@TMP0,3 ;ZERO THE LRL ENTRY ISZ TMP0,3 STA 0,@TMP0,3 JMP REPL0 REPL1: FCALL   ;COPY THE INPUT MASTER ONE LOGI- COPLR   ; CAL RECORD JMP REPL0 ;SAVE TITLE STRING SVTTL: STA 3,@.SB LDA 2,.CBP LDA 0,RLBW0,2 MOVS 0,0 LDA 3,.OBBP MOVZR 3,3 STA 0,0,3 LDA 0,RLBW1,2 MOVS 0,0 STA 0,1,3 MOV 3,1 LDA 0,.TTLP STA 0,.IBBP FCALL CR50A LDA 2,SPCE SVT0: FCALL LDBT MOV# 1,1,SZR SUB 2,1,SNR JMP SVT1 INC 0,0 JMP SVT0 SVT1: SUB 1,1 FCALL STBT LDA 3,@.SB JMP 0,3 SPCE: " .TTLP: TTLE*2 ;TITLE POINTER ;COMPARE UPTO FIVE NONZERO CHARACTERS OF TWO STRINGS ;RETURN NEXT TO CALL IF THEY MATCH ;SKIP A LINE IF THEY DO NOT ;BYTE POINTERS IN AC0 AND AC1 ;ENTRY AT COMT RESRICTS COMPARISON TO 5 CHARACTERS 3 COMT: LDA 2,C5 JMP COMP+1 FSAV 3 COMP: SUB 2,2 STA 0,TMP,3  ;SAVE BYTE POINTERS STA 1,TMP+1,3 STA 2,TMP+2,3 LDA 2,FOSP,3 LOOP: DSZ TMP+2,3 JMP .+2 FRET JSR @.GBYTE  ;LOAD A BYTE FROM 1. TMP-FZD MOVZ 1,0,SNR  ;CHECK FOR NULL MOVO 0,0  ;YES,SET CARRY JSR @.GBYTE  ;LOAD A BYTE FROM 2. TMP+1-FZD MOV# 1,1,SNR  ;CHECK FOR NULL JMP NULL SUB# 0,1,SNR  ;CHAR.S MATCH? JMP LOOP JMP NOMAT NULL: MOV 0,0,SNC NOMAT: ISZ FRTN,2 FRET ; ; ; LOGICAL RECORD SEARCH ; ;  AC1 - LRL ENTRY POINTER (RETURNED) ; ;  CONDITIONAL RETURNW