RGDFS . DEFINE REGISTERS . THIS SECTION OF CODE FOLLOWS THE CHAIN OF SUBPROGRAMS . AND ENTRY STATEMENTS AND BUILDS UP A HEADER BLOCK . FOR A SYMBOL TABLE TO BE ATTACHED TO THE RELOCATABLE . ELEMENT. THE FORMAT OF THE CHAIN IS AS FOLOWS . WORD 1 SYM OF NAME BACKWARD LINK . WORD 2 FLAGS FOR TYPE OF ENTITY . WORD 3 BEGINNING OF PROGRAM ITEM . WORD 4 ENTRY POINT OF PROGRAM . WORD 4 FIRST EXECUTABLE INSTRUCTION . WORD 6 JUMP TO BOTTOM OF PROGRAM . WORD 7 FORWARD LINK . IN WORD 2 S3 HAS THE FOLLOWING VALUES . 1 IS FOR SUBROUTINE . 2 IS FOR ENTRY . 3 IS FOR FUNCTION . THE FORMAT OF THE HEADER BLOCK IS AS FOLLOWS . WORD 1 $$SYMT . WORD 2 NAME OF ELEMENT . WORD 3 PART OF WORD 2 . WORD 4 NUMBER OF ROUTINES . FOLLOWING IS A SHORT DESCRIPTION OF MATERIAL FOR EACH SECTION . WORD 1 NAME . WORD 2 H1 FIRST EXECUTABLE INSTRUCTION . WORD 3 H2 ENTRY POINT FOR ENTITY . WORD 4 H1 NUMBER OF ENTRIES IN LABEL TABLE . WORD 4 H2 START OF LABEL ENTRIES . WORD 5 H1 NUMBER OF IDENTIFIERS IN TABLE . WORD 5 H2 START OF IDENTIFIER TABLE . THIS SECTION PRODUCES THE HEADER FOR THE SYMBOL TABLE TO BE . WRITTEN OUT AS PART OF THE RELOCATABLE ELEMENT HEADER EQU VI560+200 TB EQU VI560 TC EQU VI560+100 ZSYM* S,H2 B11,ZXIT TZ CRFL J ZXIT L A0,CRPRO . TYPE OF PROGRAM TNE,M A0,3 . TEST FOR BLOCK DATA J ZXIT L B9,(1,HEADER+5) . HEADLINK L,H1 B8,EPPTR . USED TO INDEX LIST OF ENTRIES L B7,(1,0) . STORES STARTS OF ENTITIES L,M A11,0,B9 SZ HEADER+4 L A0,CRPRO JNZ A0,A . NOT A MAIN PROGRAM . PREPARE A DUMMY BLOCK FOR MAIN PROGRAM L A0,('MAIN ') S A0,0,B9 L,H2 A0,CRISYM . FIRST SYM ENTRIES FOR ROUTINES S A11,TC,B7 SZ TB,B7 S,H1 A0,TB,*B7 L A0,HEADER+4 A,M A0,1 S A0,HEADER+4 L,H2 A0,CREP S A0,1,B9 . STARTING ADDRESS L,M A0,LC1 L A0,CRSTC1,A0 S,H1 A0,1,B9 S,H1 A0,2,B9 SZ 2,B9 SZ 3,B9 SZ 4,B9 A,M B9,5 TNZ,M 0,B8 . TEST IF ONLY A MAIN PROGRAM J B A . L,H2 A0,7,B8 . SYM PTR OF FUNCTION NAME L,S3 A2,1,B8 TE,M A2,2 L,M A11,0,B9 S A11,TC,B7 S,H2 B8,TB,B7 S,H1 A0,TB,*B7 . L,H1 A0,0,B8 L A4,0,A0 S A4,0,B9 . NAME OF ROUTINE L A4,3,B8 S A4,2,B9 . ENTRY POINT L A4,4,B8 S A4,1,B9 . FIRST EXECUTABLE INSTRUCTION SZ 3,B9 . COUNTS ENTRIES IN VARIABLE TABLE SZ 4,B9 . COUNTS ENTRIES IN LABEL TABLE L A0,HEADER+4 . INCREMENTS NUMBER OF ENTRIES A,M A0,1 S A0,HEADER+4 L,H2 B8,6,B8 A,M B9,5 . ADVANCE TO NEXT BLOCK TZ,M 0,B8 J A B L,M A0,LC7 S A0,LCN . SET FOR DRUM COUNTER SZ BSTC1,A0 SZ,H1 VI219 SZ XTF SZ FSTPAS L A1,LRSTC1,A0 S A1,SVDRUM . SAVE RELATIVE LOCATION S A1,RELBAS . SAVE FOR RELATIVE POSISTION IN BLOCK A,M A1,0,B9 . LEAVE SPACE FOR HEADER AN,M A1,HEADER S,H1 B9,SVDRUM S A1,LRSTC1,A0 L A0,CRSYM AN,M A0,4 SZ TB,B7 S,H1 A0,TB,B7 . SET FINAL BOUNDARY . THIS SECTION RUNS DOWN THE SYUMBOL TABLE AND TRANSFERS . THE VARIABLE ENTRIES TO THE RELOCATABLE. THEN A SECOND . PASS IS MADE AND ALL OF THE LABELS ARE TRANSFERED. AT . THE BEGINNING A TABLE WAS CONSTRUCTED THAT CONTAINS THE . FIRST SYMBOL TABLE ADDRESS FOR EACH INTERNAL ROUTINE. C L B4,(1,0) . INDEXES TABLE OF SECTION STARTS L B9,(HEADER+5) L A12,HEADER+4 . NUMBER OF SECTIONS SZ,S2 SYMBRK L,H1 A1,SYMBRK+1 . FIRST BREAK POINT S A1,SYMB L A2,(4,0) A,H1 A2,TB,B4 . FIRST SYM ENTRY AT START OF BLOCK SZ VFLAG L A0,LCN L A4,LRSTC1,A0 AN,H2 A4,RELBAS S,H2 A4,4,B9 . RELATIVE START OF IDENT L B6,A2 L,S2 A5,SYMBRK L,H2 A4,SYMB SECLOOP S B6,SECSRT . SAVE START OF SECTION FOR LABELS S B4,SECSR4 S,H2 A4,ZSYMB S,H1 A5,ZSYMB SZ B10 . COUNTS NUMBER IN EACH SECTION LOOP A,M B6,4 LOZZ L A2,B6 L,M A15,0,A2 TNE,H2 A15,CRSYM J ZXX . ALL DONE TNE,H2 A15,SYMB J XYY . END OF BREAK TNE,H1 A15,TB+1,B4 J XZZ . END OF SECTION TNZ VFLAG J XV . LOOK FOR IDENTIFIER L,H1 A4,2,A2 AND,M A4,0777 TNE,M A5,0207 J LABEL TE,M A5,0107 J LOOP J LABEL . THIS ROUTINE BUILDS UP A LABEL REFERENCE FOR ROR . THE FORMAT OF THESE ENTRIES IS AS FOLLOWS . H1 IS BINARY VALUE OF LABEL . H2 IS ADDRESS ASSIGNED TO LABEL LABEL L A0,0,B6 . LABEL IN CHARACTERS TN A0 . IF NO NAME EDITED LEAVE OUT J LOOP S A0,VI04 . LABEL IN CHARACTERS L,H2 A1,CRSTC1 S A1,VI09 L,M B11,$+3 S,H2 B11,VI507 J VTST SZ VI04 L,H2 A0,1,B6 S,H2 A0,VI04 . RELATIVE STORAGE ASSIGNMENT L,H1 A0,1,B6 AND,M A0,07777 S A1,VI09 . COUNTER TO RELOCATE BY A,M B10,1 . INCREMENT NUMBER OF ENTRIES L,M B11,$+3 S,H2 B11,VI507 J VTST J LOOP . LABEL ENTRY MADE . THIS ROUTINE SETS UP A TABLE FOR ROR TO PUT OUT THE ENTRIES . FOR A SINGLE SYMBOL TABLE ENTRY. B6 IS POINTING AT SYMBOL . TABLE ENTRY VAR L A0,0,B6 TNE A0,('$LGIF$') J LOOP L,M A1,0,B6 . SYMBOL TABLE POINTER TNE,H2 A1,N5RGFB . POINTER TO CALLING SEQUENCE J LOOP . SKIP THESE VARIABLES AND A0,(07700,0) . TEST FOR DOLLAR SIGN TNE A1,(04700,0) . SECOND CHARACTER J VARDOL VARDLA . RETURN FROM PROCESSING DOLLAR SIGN S A0,VI04 . NAME OF ENTRY L,S3 A0,2,B6 AND,M A0,7 TNE,M A1,5 J VARD SSL A0,3 L,S2 A1,2,B6 TOP,M A1,020 JZ A0,LOOP . LEAVE OUT UNTYPED VARIABLES L,H1 A0,1,B6 AND,M A0,07777 TG,M A1,512 J LOOP . COUNTER OUT OF RANGE...SKIP L,H2 A1,CRSTC1 S A1,VI09 . COUNTER TO RELOCATE BY L,M B11,$+3 S,H2 B11,VI507 J VTST L,H1 A0,1,B6 AND,M A0,07777 S A1,VI09 . COUNTER TO RELOCATE BY SZ VI04 L,H2 A0,1,B6 S,H2 A0,VI04 . RELATIVE STORAGE ASSIGNMENT L,M A2,1 S,S1 A2,VI04 . MARK FOR TYPE OF RELOCATION VARC L,S2 A0,2,B6 AND,M A0,7 TEP,M A0,010 . TEST FOR FUNCTION SZ A1 S,S2 A1,VI04 . NUMBER OF DIMENSINS S A1,A15 . SAVE FOR JGD COUNT S A0,VI18BT A,M B10,1 L,S3 A0,2,B6 S,S3 A0,VI04 L,M B11,$+3 S,H2 B11,VI507 J VTST TNZ A15 J LOOP . NO DIMENSION INFORMATION TO ATTACH . . THIS SECTION PLACES THE DIMENSION INFORMATION INTO THE SYMBOL . TABLE. THIS DIMENSION INFORMATION IMMEDIATELY FOLLOWS THE MODE . WORD. THERE ARE THREE TYPES OF DIMENSION INFORMATION . AS SHOWN BY S1 OF THE DIMENSION WORD . S1 IS ZERO THEN H2 IS ACTUAL DIMENSION . S1 IS ONE THEN H2 IS ADDRESS OF DIMENSION . S1 IS TWO THEN H2 IS ADDRESS OF ADDRESS OF DIMENSION L,H2 B5,3,B6 . POINTS AT DIMENSION A B5,(1,0) DR JGD A15,DRL J LOOP . END OF ENTRY FOR SINGLE IDENTIFIER DRL L,S1 A0,0,B5 TNE,M A0,1 J DC . DIMENSION IS CONSTANT L A1,0,B5 . SYM PTR TO VARIABLE DIMENSION SZ VI04 L,M A0,1 S,S1 A0,VI04 . SHOW DIMENSION IS VARIABLE S A0,VI18BT . FORCE 18 BIT RELOCATION L,S3 A2,2,A1 AND,M A2,7 TNE,M A3,5 J DX . DIMENSION WAS DUMMY ARGUMENT L,H1 A2,1,A1 AND,M A2,07777 . STORAGE CLASS S A3,VI09 L,H2 A2,1,A1 . S,H2 A2,VI04 . RELATIVE STORAGE ASSIGNMENT DRA L,M B11,$+3 S,H2 B11,VI507 J VTST DB A,M B5,1 . GET NEXT DIMENSION J DR VARDOL DSL A0,36 L A0,(' ') LDSC A0,12 . SKIP FIRST TWO CHARACTERS TNE A1,(' ') . PARANOID CASE ONLY F$ J VARBLC VARBLB AND A1,(0770000,0) TE A2,(050000,0) J VARBLC LSSC A1,6 J VARBLB VARBLC LDSC A0,24 . ADD LAST FOR CHARACTERS J VARDLA DX . DIMENSION WHICH ARE DUMMY ARGUMENTS COME OUT HERE L,H2 A0,0,B5 . PREPARE ONE WORD ENTRY LMJ B7,DUMARG . FOR DUMMY ARGUMENT J DRA DC SZ VI04 L,H2 A2,0,B5 . VALUE OF DIMENSION TZ,S2 0,B5 L A2,0,A2 . GET PARAMETER VALUE S,H2 A2,VI04 L,H2 A1,CRSTC1 S A1,VI09 . SHOW ABSOLUTE RELOCATION L,M B11,DB S,H2 B11,VI507 J VTST XYY L,S2 A3,SYMBRK A,M A3,1 S,S2 A3,SYMBRK L,H1 A4,SYMBRK+1,A3 S A4,SYMB L A4,SYMBRK,A3 A,M A4,3 SSL A4,2 LSSL A4,2 LXM B6,A4 J LOZZ . THIS SECTION PROCESSES DUMMY ARGUMENTS. THIS CODE ASSUMES THAT . THE LOWER HALF OF THE THIRD WORD OF THE SYMBOL TABLE WILL HAVE . AN INDICATION AS TO WHERE THE DUMMY ARGYMENT IS . UPPER THREE BITS ZERO TEMP CALL BY VALUE . UPPER THREE BITS ONE TEMP CALL BY NAME . UPPER THREE BITS TWO INSTRUCTION IBANK . UPPER THREE BITS FOUR INSTRUCTION DBANK VARD L,H2 A1,CRSTC1 S A1,VI09 . COUNTER TO RELOCATE BY L,M B11,$+3 S,H2 B11,VI507 J VTST L,M A0,0,B6 LMJ B7,DUMARG J VARC DUMARG L,H2 A1,2,A0 SZ VI04 AND A1,(077777) S,H2 A2,VI04 JZ A1,DUMA . NON REFERENCED DUMMY ARGUMENT AND A1,(0200000) JNZ A2,DUMB . CODE IN IBANK AND A1,(0400000) JNZ A2,DUMC . CODE IN DBNAK AND A1,(0100000) JNZ A2,DUMD . INDIRIECT TEMP REFERENCE . CALL BY VALUE GIVE TEMP LOCATION L,M A4,1 DUME S,S1 A4,VI04 L,M A0,LC3 L,H2 A4,VI04 AN,M A4,1 A,H2 A4,SVLRST+2 S,H2 A4,VI04 L,H2 A4,CRSTC1,A0 S A4,VI09 J 0,B7 DUMA L A4,CRSTC1 . ABSOLUTE RELOCATION S A4,VI09 J 0,B7 . CALL BY NAME INSTRUCTION IN IBANK DUMB L,M A0,LC1 DUMBA L A4,CRSTC1,A0 S A4,VI09 L,M A4,2 . FLAG FOR INDIRECT REF S,S1 A4,VI04 J 0,B7 DUMC L,M A0,LC8 J DUMBA DUMD L,M A4,2 S,S1 A4,VI04 J DUME XZZ AX,M B4,1 . SKIP TO NEXT TABLE L,H2 A0,TB,B4 . POINTER TO SUBROUTINE CHAIN JZ A0,XZZJ L,S3 A0,1,A0 . FLAG FOR TYPE OF ENTRY TNE,M A0,2 . AN ENTRY STATEMENT DOES NOT BOUND CODE J LOZZ XZZJ TZ VFLAG J XZZA S,H1 B10,4,B9 L,M A0,1 . SET FOR LABELS S A0,VFLAG L A0,LCN L A1,LRSTC1,A0 AN,H2 A1,RELBAS S,H2 A1,3,B9 . RELATIVE START OF LABELS TZ A1 . TEST FOR VOID SECTION J XZZQ AN,M B9,5 L,H2 A1,3,B9 . GET START OF PREVIOUS SECTION A,M B9,5 S,H2 A1,3,B9 . SET AS START OF THIS SECTION XZZQ L B6,SECSRT L B4,SECSR4 L,H2 A4,ZSYMB L,H1 A5,ZSYMB S,S2 A5,SYMBRK S,H2 A4,SYMB J SECLOOP . GO BACK AND MAKE PASS FOR LABELS XV L,H1 A5,2,A2 AND,M A5,7 TNE,M A6,5 J VAR JZ A6,VAR J LOOP XZZA S,H1 B10,3,B9 . NUMBER OF ENTRIES IN LABEL TABEL SZ VFLAG L A0,LCN L A1,LRSTC1,A0 AN,H2 A1,RELBAS TNZ A1 L,H2 A1,4,B9 . START STAR OF LAST SECTION FORWARD S,H2 A1,9,B9 . SET IDENTIFIERS IN NEXT SECTION L B9,TC,B4 AN,M B6,4 . RESET TO VARIABLE WHICH CAUSED SWITCH L,S2 A5,SYMBRK L,H2 A4,SYMB J SECLOOP ZXX TZ FSTPAS J ZXIT L,M A0,LC7 L A2,LRSTC1,A0 . SAVE LENGTH OF TABLE L,H2 A1,SVDRUM . RESTORE RELATIVE ADDRESS AT S A1,LRSTC1,A0 . START OF SYMBOL TABLE S,H2 A2,SVDRUM . SAVE MAXIMUM SIZE AN A2,A1 L A1,(0774700,0) . CONTROL WORD AT START OF TABLE S A1,HEADER L A1,('$$$SYT') S A1,HEADER+1 DL A4,PARTBL+29 . RELOCATBLE OUTPUT NAME TNZ A4 DL A4,PARTBL+3 . INPUT SYMBOLLIC NAME DS A4,HEADER+2 L,H1 B9,SVDRUM AN,M B9,HEADER S,H2 A2,HEADER L B4,(1,HEADER) ZZQ L,M B10,4 L A0,0,*B4 . OUTPUT HEADER BLOCK S A0,VI04 L A0,CRSTC1 S A0,VI09 L,M B11,$+3 S,H2 B11,VI507 J VI500 JGD B10,ZZQ+1 AN,M B9,5 L B7,(1,TB) . NOW OUTPUT EACH SECTION ZZQ1 L A0,0,*B4 . OUTPUT NAME S A0,VI04 L A0,CRSTC1 S A0,VI09 L,H2 B8,0,*B7 L,M B11,$+3 S,H2 B11,VI507 J VI500 L A0,0,*B4 . FIRST EXECUTABLE CODE S A0,VI04 L,H1 A0,VI04 . STORAGE COUNTER S A0,VI09 L,M A0,0 TZ,M 0,B8 L,S3 A0,1,B8 S,H1 A0,VI04 L,M B11,$+3 S,H2 B11,VI507 J VI500 L A0,0,*B4 . ENTRY POINT S A0,VI04 L,H1 A0,VI04 S A0,VI09 . STORAGE CLASS L,M B11,$+3 S,H2 B11,VI507 J VI500 L A0,0,*B4 . LABEL CONTROL WORD S A0,VI04 L A0,CRSTC1 S A0,VI09 L,M B11,$+3 S,H2 B11,VI507 J VI500 L A0,0,*B4 . VARIABLE CONTROL WORD S A0,VI04 L A0,CRSTC1 S A0,VI09 L,M B11,$+3 S,H2 B11,VI507 J VI500 AN,M B9,5 TP B9 J ZZ2 TZ,M 0,B9 J ZZQ1 ZZ2 L,M A0,1 S A0,FSTPAS J C VTST TZ FSTPAS J VI500 L A0,LCN L A1,LRSTC1,A0 A,M A1,1 S A1,LRSTC1,A0 J *VI507 $(2) VFLAG +0 . ZERO WHEN PROCESSING VARIABLES FSTPAS +0 . FIRST/SECOND PASS FLAG SECSRT +0 . CONTAINS START OF CURRENT SECTION SECSR4 +0 . CONTAINS B4 AT START OF SECTION SVDRUM +0 . RELATIVE DRUM ADDRESS AT START OF TABLE SYMB +0 . USED IN MARKING SYMBOL TABLE BREAKS ZSYMB +0 . SAVES BOUNDARY CONDITIONS FOR JUMP BACK ZXIT J $-$ RELBAS +0 . START OF SYMBOL TABLE UNDER GROUP 8 END