{{htmlmetatags>metatag-description:(ICL George 3 and George 4 GIN macro: SEGNAMES)}}
====== SEGNAMES ======
(GIN Macro)
**Defined in:** [[george:source:MACINTLUDES|MACINTLUDES]]
**Used in:**
H^8= [??? SEGNAMES SECT DIAG FGN 9 DOC
H^MW #MAC SEGNAMES [M.C.D. MANN AND J.T. WIFFEN
J27G [
J2M6 [
J36Q [ **************
J3LB [ * SEGNAMES *
J462 [ **************
J4KL [
J55= [
J5JW [ WILL OUTPUT TO PRINTER AND/OR TAPE PUNCH A LIST OF SEGMENTS WITH
J64G [ THE CORRESPONDING VALUES OF KSEGMENT.
J6J6 [ PRINTER FORMAT DISPLACED 6 CHARS RIGHT:
J73Q [ 1 ABANDON 2 ALAS 3 ALASB 4 AM
J7HB [ 7 ANALYSEB ETC.
J832 [ TAPE PUNCH FORMAT:
J8GL [ 0001ABANDON ^*^ ^ ^ 0002ALAS ^*^ ^ ^ 0003ALASB ^*^ ^ ^ 0004AM
J92= [ %A=LP MEANS PRINT ONLY; %A=TP MEANS PUNCH ONLY.
J9FW [
J9^G #STR %B
J=F6 #STR
J=YQ #LIS 0
J?DB #STR %B
J?Y2 #LIS %B
J#CL #FRL
J#X= #INT
J*BW #ORD
J*WG #STR TP,%A
JBB6 (
JBTQ TITLE 40HLIST OF SEGMENT NUMBERS (K IDENTIFIERS)
JC*B POS +0 [POSITION REACHED IN PRINT LINE
JCT2 )
JD#L #STR LP,%A
JDS= (
JF?W NL 8H^*^ ^ ^ [NEWLINE NULL NULL NULL
JFRG STOP 4H^4^
JG?6 TERM 4H****
JGQQ SNUM +0
JH=B SNAME 0,0
JHQ2 PUNCH 1:8,0,12,+SNUM
JJ9L PNEWL 1:0,0,8,+NL
JJP= PSTOP 1:0,0,2,+STOP
JK8W RUN 1:16,0,128,0
JKNG )
JL86 M22 #17777777
JLMQ SEGCT 0
JM7B SP1 16
JMM2 SPACE 4H
JN6L WORK0 0
JNL= WORK1 0
JP5W X0 0
JPKG X3 0
JQ56 X6 0
JQJQ [ END OF VARIABLES
JR4B [
JRJ2 #STR TP,%A
JS3L (
JSH= NULIN CALL 5 18?+2]+20] [BUFLPSW: GET A PRINT BUFFER
JT2W LDX 1 18?+1]+62 [PICK UP ITS ADDRESS
JTGG LDN 2 1(1) [AND SECOND WORD
JW26 LDX 5 SPACE [SPACEFILL PRINT BUFFER
JWFQ STO 5 0(1)
JW^B MOVE 1 29
JXF2 EXIT 0 0
JXYL )
JYD= [ HERE IS THE ENTRY POINT
JYXW NTRY STO 0 X0
J^CG #STR TP,%A
J^X6 (
K2BQ CALL 3 18?+2]+5] [THROW PAPER
K2WB CALL 0 NULIN
K3B2 LDN 0 TITLE [MOVE IN TITLE LINE
K3TL MOVE 0 10
K4*= CALL 3 18?+2]+19] [PRINT TITLE
K4SW CALL 3 18?+2]+10] [AND BLANK LINE
K5#G CALL 3 18?+2]+10] [TWICE
K5S6 )
K6?Q #STR LP,%A
K6RB (
K7?2 TPTRY ALLO 0 1 [ASK FOR *TP0
K7QL LDX 0 9
K8== BPZ 0 OKTP
K8PW 4H74TP [SUSWT: 2HTP
K99G BRN TPTRY
K9P6 OKTP PERI 0 RUN [32 CM OF BLANKS
K=8Q PERI 0 PNEWL [NEWLINE
K=NB )
K?82 LDN 6 18?+4]+29] [GET COUNT OF SEGMENT ENTRY CHAINS
K?ML LDN 7 0 [ZEROISE COUNT OF SEGMENTS
K#7= LDX 1 18?+3]+70 [GET POSITION OF FIRST FREE WORD
K#LW NCHAN LDX 3 18?+4]+30 [GET POINTER TO FIRST SEGMENT CHAIN
K*6G SBN 3 1 [ADJUST FOR BCT
K*L6 ADX 3 6 [GET NEXT CHAIN
KB5Q LDX 3 0(3) [GET FIRST WORKFILE ADDRESS
KBKB BZE 3 NUCHN [J IF CHAIN EMPTY FOR NEXT
KC52 NXENT LDN 0 4(1) [GET MORE CORE
KCJL TXL 0 18?+3]+69 [CHECK WE HAVEN'T RUN OUT
KD4= BCC NOLOC [J IF WE HAVE
KDHW SERCH CALL 0 18?+2]+6] ["FIND" - LOOK UP SEGMENT ENTRY
KF3G LDX 0 4(3) [PICK UP SEGMENT DATUM - ZERO FOR
KFH6 BNZ 0 NCHAP [CHAPTERS - IGNORE IF NOT
KG2Q LDX 0 1(3) [PICK UP SEGMENT NAME, ONE WORD AT A
KGGB STO 0 2(1) [TIME, AND TRANSFER IT TO THE ENTRY
KH22 LDX 0 2(3) [IN THE SORTING BUFFER IN LOCAL
KHFL STO 0 3(1) [WORKING STORAGE. CLEAR THE REST OF
KH^= STOZ 0(1) [THE ENTRY: WORD 0 HOLDS THE VALUE,
KJDW STOZ 1(1) [WORD 1 IS IGNORED EXCEPT WHILE SORT
KJYG ADN 1 4 [IS IN PROGRESS. KEEP COUNT OF CORE
KKD6 ADN 7 1 [USED AND SEGMENTS NOTED. PICK UP
KKXQ NCHAP LDX 3 0(3) [THE FORWARD POINTER, IGNORE THE
KLCB ANDX 3 M22 ["SEGMENT COMPILED" BIT, AND JUMP
KLX2 BNZ 3 NXENT [BACK UNLESS WE'VE REACHED ENDOFCHAIN
KMBL NUCHN BCT 6 NCHAN [J UNLESS ALL SEGMENTS COLLECTED
KMW= STOZ X3 [SET "LAST BATCH" SWITCH
KN*W [ NOW WE MUST LOOK UP THE VALUE OF KSEGMENT FOR EACH SEGT.
KNTG [ WHICH WE HAVE FOUND TO EXIST
KP*6 VALUE STO 7 SEGCT [STORE COUNT OF SEGMENTS
KPSQ NXK SBN 1 4 [ADJUST CORE POINTER
KQ#B STO 1 WORK0 [AND SAVE IT
KQS2 LDN 6 8 [SET COUNT OF CHARACTERS
KR?L LDX 0 SPACE [SPACEFILL IDENTIFIER STORAGE AREA
KRR= STO 0 18?+1]+7
KS=W STO 0 18?+1]+8
KSQG STO 0 18?+1]+9
KT=6 LDN 2 18?+1]+7 [PICK UP DESTINATION ADDRESS
KTPQ LDN 0 #53 [PICK UP LETTER K
KW9B STO 0 18?+1]+57
KWP2 DCH 0 0(2) [PUT IN THE NAME OF THE IDENTIFIER
KX8L NXCH BCHX 2 £ [STEP OUTMOD
KXN= LDCH 0 2(1) [PICK UP CHARACTER FROM SEGMENT NAME
KY7W TXU 0 SP1 [IS IT SPACE - TERMINATES THE NAME
KYMG BCC NDNAM [J IF IT IS
K^76 DCH 0 0(2) [TRANSFER ONE CHARACTER
K^LQ BCHX 1 £ [STEP INMOD
L26B BCT 6 NXCH [JUMP BACK
L2L2 NDNAM LDN 5 12 [CALCULATE LENGTH OF NAME IN WORDS
L35L SBX 5 6 [CHARACTERS+3
L3K= SRL 5 2 [SHIFT TO WORDS
L44W STO 5 18?+1]+56 [SAVE SIZE OF NAME
L4JG SRC 5 6 [PUT IN TOP 6 BITS
L546 STO 5 18?+1]+55 [AND SAVE AGAIN
L5HQ CALL 0 18?+2]+1] [CALL "FINDIT" AND
L63B BRN NSUCH [J IF NO SUCH IDENTIFIER
L6H2 LDX 1 WORK0 [PICK UP CORE ADDRESS REACHED
L72L LDX 0 1(3) [PICK UP VALUE OF IDENTIFIER
L7G= STO 0 0(1) [AND STORE AS KEY FOR SORT
L7^W NS1 TXU 1 18?+3]+70 [HAVE WE GOT BACK TO THE BEGINNING?
L8FG BCS NXK [J IF NOT
L8^6 [ HERE WE SORT THE RECORDS IN ORDER OF INCREASING K-NUMBER.
L9DQ LDX 7 SEGCT [NUMBER OF SEGMENTS
L9YB SLL 7 2 [SHIFT TO GIVE SIZE OF AREA
L=D2 STO 7 18?+7]+7 [STORE SIZE
L=XL LDX 7 18?+3]+70 [PICK UP START OF AREA
L?C= STO 7 18?+7]+10
L?WW ADX 7 18?+7]+7 [ADD ITS LENGTH
L#BG STO 7 18?+7]+11 [STORE END ADDRESS
L#W6 LDN 7 4 [PICK UP ENTRY SIZE
L**Q STO 7 18?+7]+8
L*TB STOZ 18?+7]+9 [RELATIVE POSITION OF KEY
LB*2 CALL 0 18?+2]+14] [SORT ROUTINE
LBSL #STR TP,%A
LC#= (
LCRW LDN 5 0 [START PRINTER ON NEW LINE
LD?G STO 5 POS
LDR6 )
LF=Q LDX 4 SEGCT [GET COUNT OF SEGMENTS
LFQB LDX 2 18?+3]+70 [GET START OF AREA
LG=2 STO 2 WORK0
LGPL NLINE STO 4 WORK1
LH9= LDX 0 0(2) [PICK UP K-VALUE
LHNW BZE 0 ZERO [J IF ZERO - IRRELEVANT
LJ8G #STR TP,%A
LJN6 (
LK7Q LDX 5 POS
LKMB BNZ 5 NOTFL [J IF PRINTER LINE NOT FULL
LL72 CALL 0 NULIN [NEW LINE
LLLL LDN 5 6 [6 ENTRIES PER LINE
LM6= NOTFL SBN 5 1 [DECREASE
LMKW STO 5 POS
LN5G LDX 2 WORK0
LNK6 LDX 5 0(2) [PICK UP VALUE
LP4Q CALL 2 18?+2]+9] [DECIMALISE IT
LPJB LDN 1 1(1) [INCREASE X1
LQ42 LDX 2 WORK0 [PICK UP CORE ADDRESS AGAIN
LQHL LDN 0 2(2)
LR3= MOVE 0 2
LRGW ADN 1 4 [UPDATE BUFFER POSITION
LS2G LDX 5 POS [PICK UP NUMBER DONE
LSG6 BNZ 5 NPT [J IF LINE NOT FULL
LS^Q CALL 3 18?+2]+19]
LTFB LDX 2 WORK0
LT^2 NPT
LWDL )
LWY= #STR LP,%A
LXCW (
LXXG PERI 0 PNEWL [PUNCH NEWLINE
LYC6 LDX 0 0(2) [PICK UP NUMBER
LYWQ STO 0 SNUM
L^BB LDX 0 2(2) [AND NAME
L^W2 STO 0 SNAME
M2*L LDX 0 3(2)
M2T= STO 0 SNAME+1
M3#W PERI 0 PUNCH [PUNCH A BLOCK
M3SG )
M4#6 ZERO ADN 2 4 [UPDATE POSITION IN PICK-UP BUFFER
M4RQ STO 2 WORK0
M5?B LDX 4 WORK1 [HAVE WE FINISHED?
M5R2 BCT 4 NLINE
M6=L #STR TP,%A
M6Q= (
M79W LDX 5 POS
M7PG BZE 5 PTD [J IF LAST LINE ALREADY PRINTED
M896 CALL 3 18?+2]+19] [IF NOT, PRINT IT
M8NQ PTD
M98B )
M9N2 LDX 3 X3 [DID WE GET RID OF ALL OF THEM?
M=7L BNZ 3 RSTRT [J IF NOT TO GET SOME MORE
M=M= #STR TP,%A
M?6W CALL 3 18?+2]+5] [THROW PAPER
M?LG #STR LP,%A
M#66 (
M#KQ PERI 0 PNEWL [PUNCH NEWLINE
M*5B LDX 0 TERM [PICK UP TERMINATOR
M*K2 STO 0 SNUM [STORE IN BUFFER
MB4L LDN 0 4 [PUT LENGTH IN CONTROL AREA
MBJ= STO 0 PUNCH+2
MC3W PERI 0 PUNCH [PUNCH TERMINATOR
MCHG PERI 0 PNEWL [PUNCH NEWLINE
MD36 PERI 0 PNEWL
MDGQ PERI 0 RUN [RUN OUT
MF2B PERI 0 PSTOP [STOP CHARACTER
MFG2 PERI 0 RUN [RUNOUT
MF^L SUSB 0 1 [WAIT TILL FINISHED
MGF= REL 0 1 [RELEASE *TP0
MGYW )
MHDG LDX 0 X0 [PICK UP LINK
MHY6 EXIT 0 0 [RETURN CONTROL TO GIN
MJCQ [
MJXB NOLOC STO 3 X3 [IF LOCALSTORAGE RUNS OUT, SAVE WHERE
MKC2 STO 6 X6 [WE'VE GOT TO
MKWL BRN VALUE [AND GET VALUES SO FAR
MLB= [
MLTW RSTRT [RESTART EXTRACTION AFTER PARTIAL LISTING
MM*G #STR TP,%A
MMT6 CALL 3 18?+2]+10] [PRINT BLANK LINE
MN#Q LDX 3 X3 [RESTORES POINTERS
MNSB LDX 6 X6
MP#2 LDN 7 0
MPRL LDX 1 18?+3]+70
MQ?= BRN SERCH
MQQW [
MR=G NSUCH LDX 1 WORK0
MRQ6 BRN NS1
MS9Q #EXT
MSPB #DEF 21?=NTRY [REMEMBER ENTRY POINT
MT92 #FRL [ALLOW USE OF ALL WORKING STORAGE
MTNL #JUM 21?
MW8= #LIS 20?
MWMW #NOR