SEGINDEX

(GIN Macro)

Defined in: MACINTLUDES

Used in:

SEGINDEX.mac.txt
 D4MW    #MAC  SEGINDEX                     [M.C.D. MANN AND J.T. WIFFEN 
 D57G    [   
 D5M6    [   
 D66Q    [     **************
 D6LB    [     *  SEGINDEX  *
 D762    [     **************
 D7KL    [   
 D85=    [   
 D8JW    [     SEGINDEX  
 D94G    [   
 D9J6    [     WILL PRODUCE AN INDEX OF SEGMENTS IN ALPHABETICAL ORDER WITH THEIR
 D=3Q    [     PAGE NUMBERS IN THE LISTING, PROVIDED THAT
 D=HB    [     1     35?+0] IS AT LEAST 6 (THIS IS %A OF #ITEM)  
 D?32    [     2     GIN VERSION IS 510 OR LATER 
 D?GL    [   
 D#2=    #DEF  20?=1?
 D#FW    #STR  %A                           [LISTING LEVEL   
 D#^G    #STR
 D*F6    #LIS  0 
 D*YQ    #STR  %A
 DBDB    #LIS  %A
 DBY2    #FRL
 DCCL    #INT
 DCX=    #ORD
 DDBW    TITLE          28HSEGMENT PAGE NUMBER INDEX 
 DDWG    NOTENUF1       52HINSUFFICIENT CORESTORE FOR FULL SORT: PARTIAL INDEX   
 DFB6                   8HFOLLOWS
 DFTQ    NOTENUF2       20HEND OF PARTIAL INDEX  
 DG*B    MISSING        8HMISSING
 DGT2    SPACE          4H   
 DH#L    X0             +0   
 DHS=    X3             +0   
 DJ?W    X6             +0   
 DJRG    M22            #17777777
 DK?6    SEGCT          +0   
 DKQQ    SEGCT1         +0   
 DL=B    XINITIAL       +0   
 DLQ2    POSITION       +0   
 DM9L    NULIN CALL  5  18?+2]+20]   
 DMP=          LDX   1  18?+1]+62
 DN8W          LDN   2  1(1) 
 DNNG          LDX   5  SPACE
 DP86          STO   5  0(1) 
 DPMQ          MOVE  1  29   
 DQ7B          EXIT  0  0
 DQM2    NTRY  STO   0  X0                  [SAVE INTERLUDE LINK 
 DR6L          CALL  3  18?+2]+5]           [START NEW PAGE  
 DRL=          CALL  0  NULIN               [GET BUFFER  
 DS5W          LDN   0  TITLE               [INSERT HEADING  
 DSKG          MOVE  0  7
 DT56          CALL  3  18?+2]+19]          [PRINT HEADING   
 DTJQ          CALL  3  18?+2]+10]          [AND A BLANK LINE
 DW4B          CALL  3  18?+2]+10]          [AND ANOTHER 
 DWJ2          LDX   1  18?+3]+70           [GET START OF AVAILABLE STORAGE  
 DX3L          LDN   7  0                   [SEGMENT COUNT   
 DXH=          LDN   6  18?+4]+29]          [NUMBER OF SEGMENT CHAINS
 DY2W    NCHAN LDX   3  18?+4]+30           [BASE OF SEGMENT CHAIN AREA  
 DYGG          SBN   3  1                   [ADJUST FOR BCT  
 D^26          ADX   3  6
 D^FQ          LDX   3  0(3)                [PICK UP POINTER 
 D^^B          BZE   3  NUCHN               [J IF CHAIN EMPTY
 F2F2    NXENT LDN   0  4(1)                [CHECK WE'VE NOT RUN OUT OF CORE 
 F2YL          TXL   0  18?+3]+69
 F3D=          BCC      NOLOC               [WE'VE RUN OUT SO PRINT WHAT WE HAVE 
 F3XW    SERCH CALL  0  18?+2]+6]           [FIND
 F4CG          LDX   2  0(3) 
 F4X6          LDCT  4  128  
 F5BQ          ANDX  4  2
 F5WB          BZE   4  MISS1               [J IF NOT VET COMPILED   
 F6B2          LDX   4  5(3)                [PICK UP PAGE NUMBER 
 F6TL    STPGN STO   4  3(1)                [STORE   
 F7*=          LDN   0  1(3)                [COPY NAME AND VERSION   
 F7SW          MOVE  0  3
 F8#G          ADN   1  4                   [UPDATE CORE POINTER 
 F8S6          ADN   7  1                   [COUNT SEGMENTS  
 F9?Q          LDX   3  2
 F9RB          ANDX  3  M22  
 F=?2          BNZ   3  NXENT               [J IF MORE ON CHAIN  
 F=QL    NUCHN BCT   6  NCHAN               [J UNLESS ALL GOT
 F?==          STOZ     X3                  [SET FINISHED MARKER 
 F?PW    SORT  STO   7  SEGCT               [SAVE COUNT OF SEGMENTS  
 F#9G          SLL   7  2                   [MULTIPLY BY 4   
 F#P6          STO   7  18?+7]+7            [SAVE SORT PARAMETERS: LENGTH
 F*8Q          LDX   7  18?+3]+70
 F*NB          STO   7  18?+7]+10           [START OF AREA   
 FB82          ADX   7  18?+7]+7 
 FBML          STO   7  18?+7]+11           [END OF AREA 
 FC7=          LDN   7  4
 FCLW          STO   7  18?+7]+8            [ITEM LENGTH 
 FD6G          STOZ     18?+7]+9            [KEY POSITION
 FDL6          CALL  0  18?+2]+14]          [SORT THE ENTRIES
 FF5Q          LDX   4  SEGCT               [GET COUNT OF SEGMENTS   
 FFKB          LDX   1  18?+3]+70
 FG52    NLINE STO   1  POSITION 
 FGJL          STO   4  SEGCT1   
 FH4=          LDCH  0  0(1)                [PICK UP FIRST LETTER OF SEGMENT NAME
 FHHW          TXU   0  XINITIAL            [SAME AS LAST?   
 FJ3G          BCC      SAME                [J IF SO 
 FJH6          STO   0  XINITIAL 
 FK2Q          CALL  3  18?+2]+10]          [PRINT BLANK LINE
 FKGB    SAME  CALL  0  NULIN               [GET BUFFER  
 FL22          ADN   2  2                   [X2 WORD 3 OF LINE   
 FLFL          LDX   1  POSITION 
 FL^=          MOVE  1  3                   [INSERT NAME AND VERSION 
 FMDW          LDX   5  3(1)                [PICK UP PAGE NUMBER 
 FMYG          LDN   1  5(2)                [X1 WORD 8 OF LINE   
 FND6          BNG   5  MISS2               [J IF SEGMENT NOT COMPILED   
 FNXQ          CALL  2  18?+2]+9]           [CONVERT TO DECIMAL  
 FPCB    PRINT CALL  3  18?+2]+19]          [PRINT LINE  
 FPX2          LDN   1  4                   [STEP POINTER TO POSITION IN WS  
 FQBL          ADX   1  POSITION 
 FQW=          LDX   4  SEGCT1   
 FR*W          BCT   4  NLINE               [GET NEXT LINE   
 FRTG          LDX   3  X3                  [DID WE SORT THEM ALL?   
 FS*6          BNZ   3  RSTRT               [J IF NOT FINISHED   
 FSSQ          CALL  3  18?+2]+5]           [THROW PAPER 
 FT#B          LDX   0  X0   
 FTS2          EXIT  0  0                   [EXIT: ALL DONE  
 FW?L    RSTRT CALL  3  18?+2]+10]          [BLANK LINE  
 FWR=          CALL  0  NULIN               [PRINT COMMENT   
 FX=W          LDN   0  NOTENUF2 
 FXQG          MOVE  0  5
 FY=6          CALL  3  18?+2]+19]   
 FYPQ          CALL  3  18?+2]+10]   
 F^9B          LDX   3  X3                  [RESTORE POINTERS FOR COLLECTION 
 F^P2          LDX   6  X6   
 G28L          LDN   7  0
 G2N=          LDX   1  18?+3]+70
 G37W          BRN      SERCH               [GET NEXT SEGMENT ENTRY  
 G3MG    MISS2 LDX   0  MISSING             [INSERT COMMENT FOR MISSING SEGMENT  
 G476          STO   0  0(1) 
 G4LQ          LDX   0  MISSING+1
 G56B          STO   0  1(1) 
 G5L2          BRN      PRINT
 G65L    MISS1 NGN   4  1                   [NEGATIVE PAGE NO. FOR UNCOMPILED SEG
 G6K=          BRN      STPGN
 G74W    NOLOC STO   3  X3                  [SAVE X3: WE'VE NO SPACE LEFT SO MUST
 G7JG          STO   6  X6                  [DO PARTIAL PRINT
 G846          CALL  0  NULIN
 G8HQ          LDN   0  NOTENUF1 
 G93B          MOVE  0  15   
 G9H2          CALL  3  18?+2]+19]   
 G=2L          CALL  3  18?+2]+10]   
 G=G=          BRN      SORT 
 G=^W    #EXT
 G?FG    #DEF  21?=NTRY  
 G?^6    #FRL                               [GET MAXIMUM SPACE   
 G#DQ    #JUM  21?   
 G#YB    #LIS  20?   
 G*D2    #NOR
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1