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