.TITLE ORCP1 .IDENT /V01.7/ ; ; ORCAM - PASS 1 ; ; PROCESS GSD RECORDS ; READS ENTRIES FROM .OBJ INTO OBJLIN ; WRITES INTERMEDIATE CODE TO .TMP FROM MACPS ; ; MODIFICATIONS RECORD: ; ===================== ; V01.3 CJD 5-May-83 ; Output .ENABL LC after header, now displaying LC letters ; ; V01.4 CJD 12-Aug-85 ; Add user-defined PSECT typing support, from [VAX83C.EVERHART.DGTETC] ; (correcting it to find names < 6 chars). ; Check for invalid record types before doing indexed jumps out of range. ; Use UNsigned branch after CMP with OBJLEN, for safety. ; ; V01.7 CJD 1-Oct-86 ; Save PSECT number in ASNUM if .ASECT, for special ORCSUB processing. ; Minor efficiency enhancements. ; DEFINE MACRO: ; .MACRO FTAB JSR PC,TAB8 .ENDM FTAB ; ; ; .PSECT ORCDAT,RW,D ASCWK: .BLKB 10 .EVEN .PSECT ORCP1:: GETLIN: MOV #OBJLIN,R1 MOV #OBJLEN,R2 JSR PC,RD$OBJ BCC RDOK RTS PC ; ERROR RETURN ; RDOK: MOV #OBJLIN,R1 MOV (R1)+,R0 ; GET RECORD TYPE BLE GETLIN ; Ignore if <=0 ;V01.4 CMP R0,#6 ;V01.4 BHI GETLIN ; or > 6 ;V01.4 ASL R0 JMP @GSDREC-2(R0) ; GSD: MOV #MACLIN,R2 CMP R1,OBJLEN BHIS GETLIN ;V01.4 MOVB 5(R1),R0 CMP R0,#6 ; Check for anything we can't handle ;V01.4 BHI 10$ ;V01.4 ASL R0 JMP @GSDTYP(R0) ; Can't handle type 7 (mapped array) or 10 (completion routine) ;V01.4 10$: MOV #ERR18,MESNO ; Err no 18 ;V01.4 JSR PC,MOCALL ;V01.4 BR GETLIN ; Try again ;V01.4 TITLE: ; GSD type 0 MOV #HEADER+2,R0 JSR PC,R50ASC ; CONVERT TO ASCII IN HEADING CMP (R1)+,(R1)+ ; POINT TO NEXT GSD ITEM MOV #-1,MACPS MOV #-1,MACLC FTAB MOV #".T,(R2)+ MOV #"IT,(R2)+ MOV #"LE,(R2)+ MOV #" ,(R2)+ MOV #HEADER+2,R3 .REPT 3 MOV (R3)+,(R2)+ ;V01.7 .ENDR JSR PC,WR$SCR ;V01.3 MOV #MACLIN,R2 ;V01.3 MOV #ENLC,R3 ; .ENABL LC ;V01.3 MOV #10.,R0 ;V01.3 20$: MOVB (R3)+,(R2)+ ;V01.3 SOB R0,20$ ;V01.3 JMP OPGSDL ; CSECT: ; GSD type 1 TST (R1) ; CHECK FOR A BLANK CSECT BNE 10$ TST 2(R1) BNE 20$ MOVB #40,4(R1) ; IF YES - SET UP ATTRIBUTES BR 100$ ; AND PROCESS AS PSECT 10$: CMP (R1),#127401 ; CHECK FOR NAME ". ABS." BNE 20$ CMP 2(R1),#7624 BNE 20$ MOVB #104,4(R1) ; IF YES - SET UP ATTRIBUTES BR 100$ ; AND PROCESS AS PSECT 20$: MOVB #144,4(R1) ; OTHERWISE NAMED CSECT 100$: BR PSECT ; PROCESS THE PSECT ; XFRADD: ; GSD type 3 MOV #XFR,R5 MOV (R1)+,(R5)+ ; SAVE PSECT NAME MOV (R1)+,(R5)+ TST (R1)+ MOV (R1)+,(R5)+ ; AND OFFSET JMP GSD ; GSNAM: ; GSD type 4 BIT #10,4(R1) ; REFERENCE OR DEFINITION? BNE 5$ ADD #8.,R1 ; IGNORE REFERENCES BR 20$ 5$: .IF DF O$$FLP CMP (R1),#126423 ; IS IT "$$$$$X" ? BNE 7$ CMP 2(R1),#126371 BLT 7$ CMP 2(R1),#126437 BGT 7$ INC FLIPS ; INSERT ENTRY IN FLIP TABLE MOV FLIPS,R0 ASH #2,R0 ADD #FLIPS-2,R0 MOV PSECTS,(R0)+ MOV 6(R1),(R0) ADD #8.,R1 BR 20$ 7$: .ENDC ; DF O$$FLP ; CMP GLOBS,#GLOMAX BGE 30$ INC GLOBS MOV GLOBS,R0 ASH #3,R0 ADD #GLOBS-6,R0 .REPT 4 ;V01.7 MOV (R1)+,(R0)+ .ENDR ;V01.7 MOV PSECTS,-4(R0) 20$: JMP GSD ; 30$: BIT #OV$GLO,$OVSTS ; GLOBAL BNE STEPJ ;V01.4 MOV #ERR14,MESNO ; TELL USER JSR PC,MOCALL BIS #OV$GLO,$OVSTS STEPJ: JMP STEP ;V01.4 ; PSECT: ; GSD type 5 CMP PSECTS,#PSEMAX BGE 20$ INC PSECTS MOV PSECTS,R0 CMP (R1),#127401 ; Is it . ABS.? ;V01.7 BNE 5$ ; No ;V01.7 CMP 2(R1),#7624 ;V01.7 BNE 5$ ;V01.7 CMPB 4(R1),#104 ; Of right default type for .ASECT? ;V01.7 BNE 5$ ;V01.7 MOV R0,ASNUM ; Yes, save PSECT number of .ASECT ;V01.7 5$: ASL R0 CLR PSECLC-2(R0) ; SET CURRENT LC TO ZERO ASL R0 ASL R0 ADD #PSECTS-6,R0 .REPT 4 ;V01.7 MOV (R1)+,(R0)+ .ENDR ;V01.7 ; CHECK THAT THIS IS NOT IN OUR LIST OF MODIFIABLE ;V01.4 ; PSECTS AND FIX UP I/D BIT IF IT IS. ;V01.4 TST SWITCH ;V01.4 BEQ 300$ ;IF NOTHING SET INTO BUFFERS, NO TEST ;V01.4 MOV R0,-(SP) ;V01.4 MOV R1,-(SP) ;V01.4 MOV R2,-(SP) ;V01.4 MOV R3,-(SP) ;V01.4 MOV R4,-(SP) ;V01.4 MOV R5,-(SP) ;V01.4 MOV R0,R2 ;V01.4 SUB #10,R2 ;POINTER OUR PSECT ENTRY WITH R2 ;V01.4 MOV #ASCWK,R0 ;V01.4 MOV R2,R1 ;GET NAME IN ASCII ;V01.4 JSR PC,R50ASC ;CONVERTS HERE ;V01.4 ; Make trailing spaces into nulls, like CSI does ;V01.4 270$: CMPB -(R0),#<' > ; Space? ;V01.4 BNE 271$ ; No, done ;V01.4 CLRB (R0) ; Yes, change to a null ;V01.4 CMP R0,#ASCWK ; Done last? ;V01.4 BHI 270$ ; No, look at previous one ;V01.4 271$: MOVB 4(R2),R5 ;V01.4 BPL 280$ ;BIT 7 WAS OFF IF PL ;V01.4 BIC #177600,R5 ;CLR BIT 7 IF IT WAS SET ;V01.4 BR 281$ ;V01.4 280$: BIS #200,R5 ;SET BIT 7 IF IT WAS CLR ;V01.4 281$: ;V01.4 BITB #200,4(R2) ;SEE IF I SPACE NOW (0) OR D SPACE (1) ;V01.4 BEQ 150$ ;IF EQ, I SPACE SO SEE IF WE LOOK AT D'S ;V01.4 BIT #SW.IN,SWITCH ;GOT ANY INSTRUCTION PSECTS TO TEST? ;V01.4 BEQ 299$ ;V01.4 MOV #IP1,R0 ;V01.4 BR 290$ ;V01.4 150$: BIT #SW.OUT,SWITCH ;V01.4 BEQ 299$ ;V01.4 MOV #DP1,R0 ;V01.4 290$: ;V01.4 ;HERE LOOK THRU UP TO 8 6-BYTE BUFFERS TO SEE IF PSECTNAME IS THERE ;V01.4 ; IF SO, SAVE BIT APPROPRIATELY ;V01.4 ; (R5 HAS WHAT TO SAVE) ;V01.4 JSR PC,330$ ;V01.4 299$: MOV (SP)+,R5 ;V01.4 MOV (SP)+,R4 ;V01.4 MOV (SP)+,R3 ;V01.4 MOV (SP)+,R2 ;V01.4 MOV (SP)+,R1 ;V01.4 MOV (SP)+,R0 ;V01.4 300$: JMP GSD ;V01.4 ; SEARCH SUBROUTINE ;V01.4 330$: MOV R0,-(SP) ;V01.4 MOV R3,-(SP) ;V01.4 ; R0 IS AREA TO SEARCH ;V01.4 ; R2 IS BASE OF SAVED PSECT AREA ;V01.4 ; ASCWK HAS ASCII PSECT NAME (6 CHARS) ;V01.4 ; NOTE WE AREN'T TOO CAREFUL ABOUT SPACES... ;V01.4 MOV #8.,R3 ;V01.4 331$: CMP (R0),ASCWK ;V01.4 BNE 332$ ;V01.4 CMP 2(R0),ASCWK+2 ;V01.4 BNE 332$ ;V01.4 CMP 4(R0),ASCWK+4 ;V01.4 BNE 332$ ;V01.4 ; WOW WE FOUND IT. ;V01.4 MOVB R5,4(R2) ;STORE DESIRED I/D FLAG ;V01.4 BR 333$ ;V01.4 332$: ADD #6,R0 ;PASS THIS ENTRY IN CSI VALUE TABLE ;V01.4 SOB R3,331$ ;V01.4 333$: MOV (SP)+,R3 ;V01.4 MOV (SP)+,R0 ;V01.4 RTS PC ;V01.4 ; 20$: BIT #OV$PSE,$OVSTS ; PSECT BNE STEP MOV #ERR15,MESNO ; TELL USER JSR PC,MOCALL BIS #OV$PSE,$OVSTS BR STEP ; IDENT: ; GSD type 6 MOV #-1,MACPS MOV #-1,MACLC FTAB MOV #".I,(R2)+ MOV #"DE,(R2)+ MOV #"NT,(R2)+ MOV #" ,(R2)+ MOVB #'/,(R2)+ MOV R2,R0 JSR PC,R50ASC ; CONVERT TO ASCII CMP (R1)+,(R1)+ ; POINT TO NEXT GSD ITEM MOV R0,R2 ; UPDATE MACRO LINE POINTER MOVB #'/,(R2)+ OPGSDL: JSR PC,WR$SCR JMP GSD STEP: ADD #8.,R1 JMP GSD ; EOG: CLC ; SHOW SUCCESSFUL RTS PC ; RETURN ; ; .PSECT ORCDAT,D .NLIST BEX GSDREC: .WORD GSD,EOG,GETLIN,GETLIN,GETLIN,EOG GSDTYP: .WORD TITLE,CSECT,STEP,XFRADD,GSNAM,PSECT,IDENT ; 0 1 2 3 4 5 6 .END