{{htmlmetatags>metatag-description:(ICL George 3 and George 4 GIN macro: SEGINDEX)}}
====== SEGINDEX ======
(GIN Macro)
**Defined in:** [[george:source:MACINTLUDES|MACINTLUDES]]
**Used in:**
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