.TITLE RECFIL ; ; SUBROUTINE RECFIL.MAC ; TO FILL IN RECORD BUFFERS (TXT AND RLD) AND ; DIRECT FURTHER PROCESSING ; .TITLE RECFIL ; ; GLOBAL SYMBOLS DEFINED HERE .GLOBL RECFIL TXTSET .GLOBL BUFTRN ; ; GLOBAL SYMBOLS DEFINED ELSEWHERE .GLOBL RECINP RECBF2 FILFDB FLWORD RLDPTR .GLOBL DS.NRL DS.NTX DS.RLD DS.TXT DS.END .GLOBL DS.TCN DS.RCN TXTBUF TXTLEN RLDBUF .GLOBL RLDLEN FORLST DISOUT PCOLD .GLOBL FILFDB PCLOAD TXTPTR RLDFIN EOMPRC ; ; GLOBAL TRAP SYMBOLS .GLOBL TE.RTP ; ; MACRO CALLS ; .MCALL FDOF$L ; ; MACROS DEFINED HERE ; ;MACRO FOR OFFSET TRANSFER OF ONE BUFFER TO ANOTHER .MACRO BUFTRA LENO,ADDO,LENI,ADDI,OFF MOV ADDO,R0 MOV ADDI,R1 MOV LENI,R2 SUB OFF,R2 ADD OFF,R1 MOV R2,LENO JSR PC,BUFTRN .ENDM BUFTRA ; ; UTILITY ROUTINES DEFINED HERE ; ; ROUTINE TO TRANSFER A BUFFER ; ON CALL: ; R0 CONTAINS OUTPUT BUFFER ADDRESS ; R1 CONTAINS INPUT BUFFER ADDRESS ; R2 CONTAINS BYTE COUNT FOR TRANSFER ; ON RETURN: ; R0 AND R1 POINT PAST END OF RESPECTIVE BUFFERS ; R2 = 0 BUFTRN: TST R2 BEQ 1$ 2$: MOVB (R1)+,(R0)+ SOB R2,2$ 1$: RTS PC ; ; MAIN BODY OF CODE ; .CSECT FDOF$L ;DEFINE OFFSETS LOCALLY RECFIL: BIT #DS.RLD,FLWORD ;DO WE HAVE RLD COMMANDS BEQ 1$ ;WITHOUT ANY TEXT? BIT #DS.TXT,FLWORD ;IF SO, FINISH BNE 1$ ;UP JSR PC,RLDFIN ;RLD RECORD BIC #DS.RLD!DS.RCN,FLWORD ;AND CLEAR FLAGS BR RECFIL ;AND TRY AGAIN 1$: BIT #DS.NRL,FLWORD ;DOES BUFFER HAVE UNUSED RLD RECORD BNE RLDFIL ;IF SO, GO SEE ABOUT USING IT BIT #DS.NTX,FLWORD ;UNUSED TEXT RECORD BNE TXTFIL ;GO SEE ABOUT USING IT BIT #DS.END,FLWORD ;HAS END BEEN REACHED PREVIOUSLY BEQ READIN ;IF NOT READ IN ANOTHER RECORD BIT #DS.TXT!DS.RLD!DS.TCN!DS.RCN,FLWORD ;ANY MORE PROCESSING BNE GODISS ;IF SO, GO DO IT BR ENDMOD ;IF NOT, PRINT END MESSAGE RLDFIL: BIT #DS.RLD,FLWORD ;IS RLD BUFFER FULL BNE GODISS ;IF SO, BETTER PROCESS BUFTRA RLDLEN,#RLDBUF,FILFDB+F.NRBD,#RECBF2,#2 BIS #DS.RLD,FLWORD ;RLD BUFFER NOW FULL BIC #DS.NRL,FLWORD ;FILE BUFFER EMPTY BIT #DS.RCN,FLWORD ;IN CONTINUATION? BNE RECFIL ;IF SO, GO BACK MOV #RLDBUF,RLDPTR ;INIT. RLD POINTER BR RECFIL ;SEE IF ANY MORE FILL NEEDED TXTFIL: BIT #DS.TXT,FLWORD ;IS TEXT BUFFER FULL BNE GODISS ;IF SO, GO PROCESS MOV RECBF2+2,PCLOAD ;SET UP LOAD ADDRESS BUFTRA TXTLEN,#TXTBUF,FILFDB+F.NRBD,#RECBF2,#4 BIS #DS.TXT,FLWORD ;TEXT BUFFER FULL BIC #DS.NTX,FLWORD ;FILE BUFFER EMPTY BIT #DS.TCN,FLWORD ;IN CONTINUATION? BNE RECFIL ;IF SO, GO BACK MOV #TXTBUF,TXTPTR ;INIT. TXT POINTER BR RECFIL READIN: JSR PC,RECINP ;READ IN A RECORD MOV RECBF2,R0 ;RECORD TYPE IN R0 CMP R0,#3 ;IS IT TEXT BGT 1$ ;IF GREATER THAN 3 BRANCH BEQ 2$ ;IF TEXT, SET FLAG TRAP TE.RTP ;LESS THAN 3 = ERROR 2$: BIS #DS.NTX,FLWORD ;FILE BUFFER HAS TEXT BR RECFIL ;GO BACK AND SEE WHAT'S TO DO 1$: CMP R0,#4 ;RLD RECORD? BNE 3$ ;TRY FOR SOMETHING BIS #DS.NRL,FLWORD ;FILE BUFFER HAS RLD BR RECFIL ;WHAT NEXT? 3$: CMP R0,#5 ;IF ISD, SKIP BEQ READIN ;AND GET ANOTHER RECORD CMP R0,#6 ;LAST CHANCE - END OF MODULE? BEQ 4$ ;IF SO, OK TRAP TE.RTP ;SORRY CHARLIE 4$: BIS #DS.END,FLWORD ;WHEW! JMP RECFIL ;SEE WHAT'S LEFT ENDMOD: JMP EOMPRC ;PRINT OUT END MESSAGE GODISS: RTS PC ;GO DISASSEMBLE .END