DDT22.MAC/-AU=DDT22.MAC -11,11 .IDENT /810525/ ;Glenn C. Everhart -118 I$$SD DEFINED, CAUSES DDT22 TO PROCESS ISD DECLARATIONS IN DECUS FORMAT. IF VARIABLE MDLCTL IS NEGATIVE, GLOBAL SECTIONS AND ISD SECTIONS WILL BE NAME-CHECKED. IF IT IS POSITIVE, ONLY ISD RECORDS WILL BE NAME CHECKED. THE VARIABLE "MODULE" WILL CONTAIN THE DESIRED MODULE NAME. IF A NAME RECORD IS SEEN THAT DIFFERS FROM "MODULE" (2 WORDS OF RAD50), DDT WILL READ THE NEXT RECORD OF A SYMBOL TABLE FILE. IT IS ASSUMED THAT THE SYMBOL TABLE FILE INCLUDES THE NAME RECORDS AS WELL AS JUST GLOBAL SYMBOLS (MODULE NAME RECORDS ARE A SUBTYPE IN GSD RECORDS). A MODIFIED "LINKER" ROUTINE IS NEEDED TO PRODUCE THESE, SO THE I$$SD CONDITIONAL SELECTS ALL THESE FEATURES AND WORKS FOR SYMBOL TABLE FILES ONLY. IF VARIABLE "MDLCTL" IN DDT IS 0 (THE INITIAL DEFAULT), THE OLD BEHAVIOR IS UNCHANGED AND NO TEST OF MODULE NAME RECORDS IS MADE. -198 .IIF DF,I$$SD, SM$FIL=0 ;IF WE MUST TREAT ISD'S, MUST DO STB'S -768,768 -5078,5078 CLR CHR1 ; REMEMBER WE HAVEN'T GOT A SYMBOL -5117 .IF DF,I$$SD ; SAVE RECORD TYPE OF OBJECT RECORD SO WE CAN TELL BELOW WHETHER ;WE ARE IN A GSD BLOCKOR AN ISD BLOCK. IN AN ISD BLOCK, WE WILL ;CHECK MODULE NAMES IF MDLCTL IS NONZERO. IN A GSD BLOCK WE WILL ;CHECK MODULE NAMES ONLY IF MDLCTL IS NEGATIVE. GETRT.: .WORD 0 ; TEMP STORAGE FOR RECORD TYPE (ISD/GSD) .ENDC -5124 .IF DF,I$$SD MOV R2,GETRT. ; STORE RECORD TYPE .ENDC -5134,5134 .IF NDF,I$$SD BR 500$ ; 5 ISD .IFF TST MDLCTL ; DOING ISD TYPE ACTIONS? BEQ 500$ ;NO, IGNORE THE ISD BR 100$ ;ELSE TREAT JUST AS A GSD RECORD. NOTE THAT ;INTERNAL STRUCTURE ASSUMED IDENTICAL WITH GSD. .ENDC -5172,5178 BEQ L.999$ ; WHOOPS ... NO SYMBOLS FOR YOU THEN ADD #10,GSDPNT ; GET NEXT GSD ENTRY MOV GSDPNT,R1 ; ADDRESS IN R1 CMP R1,ENDREC ; IS POINTER OUTSIDE RECORD ? BLO L.10$ ; NO .IF DF,I$$SD RECGT.: .ENDC CALL GETREC ; YES, GET NEXT RECORD BCS L1000$ ; OOPS L.10$: -5185,5188 .IF NDF,I$$SD BR GETGSD ; TYPE 0 - MODULE NAME .IFF BR GETNMK ;TYPE 0 - MODULE NAME. COMPARE WITH MDLNAM. .ENDC BR GETGSD ; 1 - CONTROL SECTION NAME .IF NDF,$$ISD .IF NDF,I$$SD BR GETGSD ; 2 - INTERNAL SYMBOL NAME .IFF BR GETGIS ; 2 - INTERNAL SYMBOL NAME .ENDC -5202,5204 999$: L.999$: ;CLR STBFDB ; DON'T USE FILE AGAIN L1000$: SEC ; RTS PC ; QUIT .IF DF,I$$SD GETGIS: TST MDLCTL ; IF ISD STUFF TURNED ON BEQ GETGSD ; THEN... (AND ONLY THEN...) CLC ; ALLOW GSD ENTRIES TO BE SIMULATED BY ISD RTS PC ; ENTRIES. ; IF MDLCTL IS +, THEN FOR ISD BLOCKS ONLY CHECK MODULE NAME FOR BEING SAME ; AS DESIRED MODULE IN GLOBAL 'MDLNAM' WHICH IS ACCESSED AS "MODULE" ; SYMBOLICALLY WITHIN DDT. IF IT IS NEGATIVE HOWEVER, DO THE MODULE NAME ; CHECK EVEN WITHIN GSD RECORDS. FORCE A NEW READ IF THE MODULE NAME ; IS NOT THE ONE DESIRED. GETNMK: TST MDLCTL BEQ GETGSD ;IF NO SPECIAL ISD STUFF, IGNORE MODULE NAME BMI 1$ ;IF MDLCTL IS -, ONLY LOOK AT MDULE. CMP GETRT.,#5 ;INSIDE AN ISD BLOCK? IF NOT, JUST RETURN BNE GETGSD ;INSIDE ISD BLOCK, LOOK AT MODULE NAME 1$: CMP (R1),MDLNAM ;IF NAME MATCHES ALL IS WELL BNE RECGT. ;ELSE FORCE NEW RECORD IN (OR END) CMP 2(R1),MDLNAM+2 BNE RECGT. ;FORCE NEW RECORD IF NOT CORRECT MODULE TO LOOK AT BR GETGSD .ENDC -6125 .IF DF,I$$SD MDLNAM: .RAD50 /.MAIN./ ;MODULE NAME FOR 1ST HALF OF ISD DECLARATIONS MDLCTL: .WORD 0 ;1 IF USING ISD TYPE NAMES, ELSE 0 .ENDC -6400 .IF DF,I$$SD .RAD50 /MODULE/ .WORD MDLNAM ;MODULE NAME FOR ISD DECLARATIONS .RAD50 /MDLCTL/ .WORD MDLCTL ;CONTROL WORD TO SET 1 TO USE ISD TYPE NAMES .ENDC /