.TITLE GSDDEC ; ROUTINE TO DECODE GSD RECORD ENTRIES IN OBJECT FILES ; ; GLOBALS DEFINED HERE .GLOBL GSDDEC PSECAD XFRADD HBUF2 ; ; GLOBALS DEFINED ELSEWHERE .GLOBL FLWORD DS.GSD PSCBUF HBUF1 OUTBUF .GLOBL STRPSC RECBF2 RECSET TXTRAN BLNKIT .GLOBL STRPSC HBUFL OUTFDB FILFDB ; ; DEFINE MACROS USED HERE .MACRO QIOEXE ADD,LEN .MCALL PUT$ CALL TOFC PUT$ #OUTFDB,ADD,LEN .ENDM QIOEXE .MACRO BLNKLN ADD,LEN MOV ADD,R0 MOV LEN,R1 JSR PC,BLNKIT .ENDM BLNKLN .MACRO R5ASCL ADR,RAD50 MOV ADR,R0 MOV RAD50,R1 .GLOBL $C5TA JSR PC,$C5TA .ENDM R5ASCL .MACRO CBASCL ADR,NUM,FLAG,ROUTIN MOV ADR,R0 MOV NUM,R1 MOV FLAG,R2 .GLOBL ROUTIN JSR PC,ROUTIN .ENDM CBASCL ; ; MACRO CALLS .MCALL FDOF$L ; DEFINE VARIOUS SYMBOLS LOCALLY FDOF$L ;FDB OFFSETS ; ; DATA STORAGE AREA XFRADD: .WORD 0 ;TRANSFER ADDRESS PSECAD: .WORD 0 ;POINTER TO NEXT PSECT STORAGE BFNAM: .WORD 0 ;ADDRESS OF TEXT BEFORE NAME AFNAM: .WORD 0 ;ADDRESS OF TEXT AFTER NAME AFPROC: .WORD 0 ;ADDRESS OF ROUTINE FOR FURTHER PROCESSING .NLIST BEX HBUF2: .BYTE 14 ;FORMFEED TITLE: .ASCIZ <11>/.TITLE/<11> CSECT: .ASCIZ <11>/.CSECT/<11> PCOM: .ASCIZ <11>/;MAX LEN = / IDENT: .ASCIZ <11>/.IDENT/<11><57> IDENT1: .ASCIZ ;/; INTSYM: .ASCIZ /;INTERNAL SYMBOL "/ VALUE: .ASCIZ /" VALUE = / XFERAD: .ASCIZ /;TRANSFER ADDRESS IN PSECT "/ OFFSET: .ASCIZ /" OFFSET = / GLOBL: .ASCIZ <11>/.GLOBL/<11> EQUAL: .ASCIZ /==/ DOTEQ: .ASCIZ /==.+/ PSECT: .ASCIZ <11>/.PSECT/<11> ;PSECT ATTRIBUTES FOR BITS 0,1,....7 ;OF THE ATTRIBUTES BYTE. FIRST ATTRIBUTE ;OF EACH PAIR IS IF BIT IS OFF ATTLST: .BYTE 0 ;LOW SPEED MEMORY .ASCIZ /,HIGH/ ;HIGH SPEED MEMORY .BYTE 0 ;NORMAL PSECT .ASCIZ /,SGA/ ;REFERENCES SGA .ASCIZ /,CON/ ;CONCATENATED .ASCIZ /,OVL/ ;OVERLAYED .BYTE 0 ;RESERVED .BYTE 0 ;RESERVED .ASCIZ /,RW/ ;READ/WRITE .ASCIZ /,RO/ ;READ-ONLY .ASCIZ /,ABS/ ;ABSOLUTE .ASCIZ /,REL/ ;RELOCATABLE .ASCIZ /,LCL/ ;LOCAL .ASCIZ /,GBL/ ;GLOBAL .ASCIZ /,I/ ;INSTRUCTIONS .ASCIZ /,D/ ;DATA .EVEN .LIST BEX GSDDEC: BIT #DS.GSD,FLWORD ;CHECK FOR FLAG SET BNE GSD001 ;IF SET, SKIP SETUP MOV #PSCBUF,PSECAD ;PSECAD CONTAINS ADD FOR NEXT PSECT NAME MOV #1,XFRADD ;DEFAULT IS SUBROUTINE BIS #DS.GSD,FLWORD ;SET BIT SO SKIP THIS NEXT TIME QIOEXE #HBUF2,#1 ;PRINT FORMFEED QIOEXE #HBUF1,HBUFL ;OUTPUT HEADER LINE GSD001: BLNKLN #OUTBUF,#80. ;INIT LINE WITH BLANKS MOVB 5(R4),R3 ;TYPE BYTE IN R3 ASL R3 ;USE IT FOR INDEX JMP @GSDTBL(R3) GSDTBL: .WORD T0 .WORD T1 .WORD T2 .WORD T3 .WORD T4 .WORD T5 .WORD T6 T0: MOV #TITLE,BFNAM CLR AFNAM CLR AFPROC BR GSDCOM T1: MOV #CSECT,BFNAM MOV #PCOM,AFNAM MOV #-1,AFPROC ;-1 -> CONVERT VALUE BR GSDCOM T2: MOV #INTSYM,BFNAM MOV #VALUE,AFNAM MOV #-1,AFPROC BR GSDCOM T3: MOV #XFERAD,BFNAM MOV #OFFSET,AFNAM MOV #XFSTOR,AFPROC BR GSDCOM T4: BITB #10,4(R4) ;IS THIS SYMBOL DEFINED HERE BNE 1$ ;IF SO, BRANCH MOV #GLOBL,BFNAM CLR AFNAM CLR AFPROC BR GSDCOM 1$: BITB #40,4(R4) ;IS SYMBOL ABS OR REL BNE 2$ ;IF REL, BRANCH CLR BFNAM MOV #EQUAL,AFNAM 3$: MOV #-1,AFPROC BR GSDCOM 2$: CLR BFNAM MOV #DOTEQ,AFNAM BR 3$ T5: MOV #PSECT,BFNAM CLR AFNAM MOV #PSECPR,AFPROC BR GSDCOM T6: MOV #IDENT,BFNAM MOV #IDENT1,AFNAM ;ADD TRAILING "/" CLR AFPROC BR GSDCOM GSDCOM: MOV #OUTBUF,R5 MOV #4,R0 ;SET UP TO PUT 4$: MOVB #11,(R5)+ ;4 TABS IN FRONT OF LINE SOB R0,4$ MOV BFNAM,R0 BEQ 1$ MOV #40,R1 ;ALLOW FOR MAX STRING LEN JSR PC,TXTRAN 1$: R5ASCL R5,(R4)+ R5ASCL R0,(R4)+ MOV R0,R5 ;UPDATE R5 MOV AFNAM,R0 ;ANYTHING AFTER NAME BEQ 2$ ;IF NO, SKIP MOV #40,R1 ;SET FOR MAX LEN JSR PC,TXTRAN ;IF SO, PUT IT IN 2$: MOV AFPROC,R0 ;ANY MORE PROCESSING BEQ 3$ ;IF NOT, SKIP BIT #1,R0 ;ODD? (-1) BNE VALFIN ;IF SO, FINISH WITH VALUE JMP (R0) ;GO TO ROUTINE 3$: CMP (R4)+,(R4)+ ;BUMP PAST FLAG AND TYPE BR FINISH ;AND GO TO FINAL PROCESSING VALFIN: TST (R4)+ CBASCL R5,(R4)+,#1,$CBOMG MOV R0,R5 ;UPDATE R5 FINISH: SUB #OUTBUF,R5 ;LEN OF LINE IN R5 QIOEXE #OUTBUF,R5 ;PRINT LINE MOV R4,R0 ;ARE WE AT END SUB #RECBF2,R0 ;OF GSD LINE? CMP R0,FILFDB+F.NRBD BGE 1$ ;IF NOT, GO DO MORE JMP GSD001 1$: JMP RECSET ;ELSE GET NEXT RECORD XFSTOR: MOV 2(R4),XFRADD ;STORE TRANSFER ADDRESS BR VALFIN ;AND FINISH LINE PSECPR: JSR PC,STRPSC ;STORE PSECT INFO MOVB (R4),R3 ;FLAGS IN R3 MOV #ATTLST,R0 ;ASCII LIST OF ATTRIBUTES IN R0 MOV #8.,R2 ;EIGHT POSSIBLE BITS 1$: MOV #5,R1 ;MAX LEN OF ASCII ROR R3 ;GET NEXT BIT IN 'C' BCS 2$ ;IF SET DO SECOND ASCII OUTPUT JSR PC,TXTRAN ;ELSE DO FIRST JSR PC,SKIP ;AND SKIP SECOND BR 3$ 2$: JSR PC,SKIP JSR PC,TXTRAN 3$: SOB R2,1$ MOV #14,R1 MOV #PCOM,R0 JSR PC,TXTRAN ;PUT IN FINAL COMMENT WITH LENGTH BR VALFIN SKIP: TSTB (R0)+ BEQ 1$ BR SKIP 1$: RTS PC .END