BMINDEX866

(George Source)

Macros used: ACROSS, ALTLEN, BBS, BBUS, BFCBX, BMINDEX, BRINDEX, BS, BXE, BXGE, BXL, BXU, CHAIN, DELFCB, DOWN, FASTREWIND, FCBNO2, FFINDEXB, FREEBAX, FREECORE, GEOERR, GETBAX, KEYREC, LF, MBS, MENDAREA, MFREE, MFREEW, MHUNTW, NXFCA, PHOTO, PSTAC, QSTEPC, REINDEX, RINGFILE, SEGENTRY, SETBIT, SETNCORE, SETREP, SETREP2, SETUPCORE, STEP, STEPAGAIN, STF, TESTMOVE, TOPFCA, TOPFCA2, TOPFCB2, TRACE, TRACEIF, TRACEVER, TRANSFCB, UP

BMINDEX866.txt
22FL    #SEG  BMINDEX                     [JUDY BIDGOOD 
22^=    #OPT  K0BMINDEX=K0FILESTORE>K0BMAP>K0RESTORE>K0ALLGEO   
23DW    #LIS  K0BMINDEX 
23YG    #OPT  K6BMINDEX=K6FILESTORE>K6BMAP>K6RESTORE>K6ALLGEO   
24D6          8HBMINDEX 
24XQ          SEGENTRY K1BMINDEX,TGRINP 
25CB          SEGENTRY K2BMINDEX,TBMIN  
25X2          SEGENTRY K3BMINDEX,TMAS   
26BL ...      SEGENTRY K4BMINDEX,REINDEX
26W=          SEGENTRY K11BMINDEX,TGRIN 
27*W    #   
27TG    #     THIS SEGMENT IS THE EARLY MORNING START ROUTINE RESPONSIBLE   
28*6    #     FOR CREATING AND/OR CHECKING THE INDICES OF FILES THAT HAVE   
28SQ    #     A BUILT-IN OR SYSTEM INDEX.   
29#B    #     THE FILE IS OPEN AT THE TOP LEVEL THROUGHOUT. 
29S2    #   
2=?L    #     INDEXED FILES CURRENTLY ARE:- 
2=R=    #           1) DIRECTORIES         - INDEX NUMBER 1 
2?=W    #           2) :MASTER.DICTIONARY  - INDEX NUMBER 2 
2?QG    #           3) :SYSTEM.SERIAL      - INDEX NUMBER 3 
2#=6    #           4) :SYSTEM.INCINDEX    - INDEX NUMBER 4  (PERHAPS). 
2#PQ    #           5) :SYSTEM.OUTPUT   - INDEX NUMBER 5 (PERHAPS)  
2*9B    #           6) :SYSTEM.JOBLIST   - INDEX NUMBER 6   
2*P2    #           7) USER JOBLIST        - INDEX NUMBER 7 
2B8L    #   
2BN=    #     THERE  ARE 2 MAIN ROUTINES.   
2C7W    #   
2CMG    #     THE FIRST IMPLEMENTS THE GRINDEX MACRO.   
2D76    #     THIS IS USED BY GENERAL RESTORE TO CREATE THE INDEX FOR A 
2DLQ    #     DIRECTORY JUST BEFORE CLOSING IT. 
2DRY ...#     THIS ROUTINE HAS BEEN MODIFIED TO AVOID SETTING UP A FI+FSORT 
2D^6 ...#     BLOCK UNLESS THE FILE IS UNORDERED (TO AVOID COREJAMS)
2F6B    #     IT IS ALSO ENTERED BY BACKMAP TO INDEX THE DICTIONARY,ETC.
2FL2    #   
2G5L    #     THERE IS A SPECIAL ENTRY TO INDEX :MASTER FOR GENERAL RESTORE 
2GK=    #   
2H4W    #     THE SECOND ROUTINE STEPS THROUGH THE FILE OPEN AT THE TOP 
2HJG    #     LEVEL CHECKING THAT THE INDEXING IS CORRECT.  
2J46    #   
2JHQ    #   
2K3B    #     USE OF REGISTERS  
2KH2    #   
2L2L    #     AWORK1   (A) LATEST SUB-KEY   
2LG=    #              (B) CT. OF ENTRIES X5
2L^W    #   
2MFG    #     AWORK2   (A) LATEST KEY   
2M^6    #              (B) (NO.OF ELEMENTS-MESH)X5  
2NDQ    #   
2NYB    #     AWORK3   (A) LATEST SUB-SUB-KEY   
2PD2    #              (B) MESH 
2PXL    #              (C) OLD FBLMOD   
2QC=    #   
2QWW    #     AWORK4   B0  : :MASTER BEING INDEXED  
2RBG    #              B1  : BMINDEX ENTRY  
2RW6    #              B2  : FILE NOT (RPT. NOT )TRANSCRIBED TO NEW COPY
2S*Q    #              B3  : CAREFULLY OPENED FILE  
2STB    #              B6  : OUT OF ORDER   
2T*2    #   
2TSL    #              B18-23 = INDEX NUMBER
2W#=    #   
2WRW    #   
2X?G    #     PRESETS   
2XR6    #   
2Y=Q    ZGEOER1 
2YQB          GEOERR   1,WRNGFILE          [WRONG FILE OPEN TO BMINDEX  
2^=2    ZGEOER2 
2^PL          GEOERR   1,SUMS ???          [GRINDEX'S ARITHMETIC GONE WRONG 
329=    ZGEOER3 
32NW          GEOERR   1,INDEX???          [FILE OR INDEX RECORD CORRUPT.   
3572    ZGEOER6 
35LL          GEOERR   1,NO FILE?          [ NEXT FCA NOT THERE 
35MW ...SFACTOR 
35P6 ...[ THIS TABLE IS USED TO ESTIMATE THE SIZE OF THE FSORT BLOCK NEEDED.
35QB ...[ (EACH ENTRY IN THE FSORT IS 5 WORDS LONG). THESE NUMBERS ARE,RESPECTIV
35RL ...[ 5X THE AVERAGE NUMBER OF ENTRIES IN A) DIRECTORIES B)DICTIONARY C)SERI
35SW ...[ D)INCINDEX E) OUTPUT F)SYSTEM.JOBLIST G6USER.JOBLIST. THE FILES INDEX 
35W6 ...[ NUMBER IS USED AS A MODIFIER TO PICK UP THE APPROPRIATE FACTOR. WE THE
35XB ...[ MULTIPLY BY THE FILE'S SIZE IN 1/2K WORDS TO GET THE INITIAL  
35YL ...[ SIZE OF THE FSORT BLOCK.  
35^W ...[   
3636 ...[ FORMAT OF ENTRY IN FSORT BLOCK.   
364B ...[   
365L ...[     WORD 0   KEY  
366W ...[     WORD 1   BLOCK POINTER
3686 ...[     WORD 2   RECORD POINTER   
369B ...[     WORD 3   DESCENDING SUB-KEY.(ZERO IF NONE)
36=L ...[     WORD 4   ASCENDING SUB-KEY.(ZERO IF NONE) 
36?W ...      +40   
36*6 ...      +80   
36BB ...      +425  
36CL ...      +110  
36DW ...      +125  
36G6 ...      +50   
36L^ ...      +35   
36RS ...MASKCOMM
36YM ...                #70201041   
375G    MASKFCOM
37K6          #02042353                    [BITS FOR FCOMM IN NEW FCB.  
384Q    MASKFG1 
38JB          #77452000                    [ BITS FOR FGENERAL1 IN NEW FCA  
3942    MASKFG2                            [ BITS FOR FGENERAL2 IN NEW FCA. 
39HL          #00000014 
3=3=    XIX 
3=GW          +IDENTITEX
3?^Q    XENTABLE       [TABLE OF WORDS,ONE FOR EACH TYPE OF INDEXED FILE,IN 
3#FB                   [INDEX NUMBER ORDER.SET =1 IF THAT TYPE OF FILE HAS  
3#^2                   [MULTI-RECORD ENTRIES
3*DL          +1       [DIR.
3*Y=          +0       [DICT.   
3BCW          +0       [SERIAL. 
3BXG          +0       [INCINDEX.   
3CC6          +1       [SYSOUT. 
3CWQ          +1       [SYSTEM JOBLIST  
3DBB          +1       [USER JOBLIST
3DW2    #   
3F*L    #     SUBROUTINES   
3FT=    #   
3G#W    SKEYREC 
3GSG    [     THIS SUBROUTINE CALCULATES THE KEY OF THE RECORD POINTED TO   
3H#6    [     BY [X3],AND LEAVES THE KEY IN X5. [X2] -> FCB. EXITS+1 IF OK, 
3HRQ    [     OTHERWISE EXITS. CALLED BY X1,OVERWRITES GEN0,GEN1.   
3J?B    [     X0,X1,CORRUPTED   
3JR2          STO   1  GEN1                [PRESERVE LINK   
3K=L          KEYREC   2,,3,(GEN1),5       [CALCULATE KEY,EXIT IF NOT KEYED 
3KQ=    #SKI  K6BMINDEX>699$699 
3L9W          TRACE    5,BM KEY 
3LPG          LDX   1  GEN1 
3M96          EXIT  1  1
3MNQ    #   
3N8B    SETUPFINDEX 
3NN2    [   
3P7L    [     THIS S/R SETS UP AND INITIALISES THE FINDEXF BLOCK.   
3PM=    [     IT EXPECTS [X3] = THE NUMBER OF BLOCKS IN THE FILE.   
3Q6W    [     X6=INDEXNO.   
3QLG    [   
3R66          SBX   7  FX1  
3RKQ          SETNCORE INDEXREC-A1(3),1,FI,FINDEXF  
3S5B    #SKI  K6BMINDEX>299$299 
3SK2          TRACE    3,NO.ENTRS   
3T4L          LDN   0  INDEXREC-A1(3)      [R.H.
3TJ=          STO   0  A1(1)
3TWM ...      LDEX  0  6
3W94 ...      STO   0  INDEXNO(1)          [ INDEX NUMBER OF FILE   
3WHG          LDCT  0  #200 
3X36          STO   0  INDEXID(1)          [ IDENTITY OF RECORD 
3XGQ          ADX   7  FX1  
3Y2B          EXIT  7  0
3YG2    [   
3Y^L    [     QUICK REWIND NOT DISCARDING BLOCKS
3^F=    [   
3^YW    SFASTREWIND 
42DG          FASTREWIND 2  
42Y6          EXIT  7  0
43CQ    #   
43XB    #   
44C2    SFBLOCK 
44WL    [   
45B=    [     CALLED BY X0,X2-> AN FCB, ON EXIT X2-> BLOCK OF TYPE JUST AFTER   
45TW    [     LINK,IF EXIT +2;IF EXIT +1,NO SUCH BLOCK;GEN0 CORRUPTED   
46*G    [   
46T6          STO   0  GEN0                [ LINK   
46Y=P...#SKI  IFS   
473BP...      SFIBLK   2,2,XPLEJ,GEN0   
476GP...#SKI  IFS<1$1   
479LP...(   
47#Q    XFLPJ   
47SB          LDX   2  FPTR(2)  
48#2          BXE   2  CXFI,XFPLEJ  
48RL          LDX   0  ATYPE(2) 
49?=          BXE   0  FILEPLUSFCB,XFPLEJ   
49QW          SMO      GEN0 
4==G          BXU   0  0,XFLPJ             [ J.BACK IF NOT RIGHT BLOCK. 
4=Q6          LDX   0  GEN0 
4?9Q          EXIT  0  2
4?PB    XFPLEJ  
4?^8P...)   
4#92          LDX   0  GEN0 
4#NL          EXIT  0  1
4*8=    #   
4*MW    NXFCB   
4B7G    [   
4BM6    [     SET X2 -> 2ND FCB 
4C6Q    [   
4CLB          STO   0  GEN6 
4D62          FCBNO2   2,2,ZGEOER6         [ ERROI IF NO 2ND FC 
4DKL          BRN      (GEN6)   
4F5=    #   
4FJW    #     THIS ENTRY POINT IS FOR BACKMAP TO CHECK THE INDEXING OF A FILE   
4G4G    #     OPEN @ TOP LEVEL. 
4GJ6    #     IF THE FILE IS UNINDEXED,ENTRY IS MADE TO GRINDEX.
4H3Q    #     IF THE WRONG FILE IS OPEN,OR THE INDEX,OR FILE,IS CORRUPT, A  
4HHB    #     NON-OK REPLY IS GEVEN 
4J32    #   
4JGL    [   
4K2=    TBMIN   
4KFW    [   
4K^G    #SKI  K6BMINDEX>99$99   
4LF6          TRACE    ACOMMUNE9(2),BMINDEXE
4LYQ          LDX   6  ACOMMUNE9(2)        [PARAMETER   
4MDB ...      TOPFCB2  1
4MY2 ...      BXU   1  BFILE,NOTMA         [J IF NOT MASTER 
4NCL ...      ORX   6  GSIGN               [SET SWITCH  
4QB6    NOTMA   
4RT2          LDN   0  #77  
4S#L          ANDX  0  FINFC(1)            [ INDEX NUMBER   
4SS=          BZE   0  MERGEA              [ IF NONE ENTER GRINDEX  
4T?W ...      BXU   0  ACOMMUNE9(2),ZGEOER1 
4TRG ...      LDCT  0  #200                [SET BMINDEX MARKER  
4W?6 ...      ORX   6  0
4WQQ ...      BRN      MERGEA   
4X=B ...[   
5GRB    XERUP   
5GWG ...      SEGENTRY K60BMINDEX   
5G^L ...      BRN      NOQUERY             [NULLED BY RTM PRQUERY SO THAT   
5H4Q ...      DOWN     BMQUESTB,5           [WE ASK "DO YOU WANT A PM"  
5H7W ...NOQUERY 
5H?2          SETREP   UNORDERD 
5HQL ...      UP
5H^# ...[   
5J82 ...[     THIS ENTRY POINT IS FOR THE REINDEX MACRO WHICH PRODUCES A CORRECT
5JBN ...[     INDEX RECORD IN THE ACTIVITY CHAIN IN A FI/FINDEXF BLOCK. IF THE  
5JKB ...[     FILE NEEDS SORTED,THE REPLY 'UNORDERED IS GIVEN & NO BLOCK IS LEFT
5JS4 ...[   
5K2Q ...REINDEX 
5K9D ...[   
5KD6 ...      LDCT  6  #20  
5KLS ...      ORX   6  ACOMMUNE9(2)        [B4=>REINDEX/INDEX NO.   
5KTG ...      TOPFCB2  1
5L48 ...      BRN      MERGEA   
5L=W ...[   
5LFJ ...#     THESE ENTRY POINTS ARE FOR THE GRINDEX MACRO. 
5LNB    #     THIS SORTS THE TOP FILE OPEN,REWRITES THE DIRECTORY ENTRY NAME
5M82    #     RECORD AND INSERTS THE INDEX RECORD.  
5MML    #   
5N7=    #     THE ROUTINE BREAKS DOWN NATURALLY INTO 5 STAGES.  
5N9F ...[   
5N?N ...[     0) TO AVOID SETTING UP A FSORT BLOCK WE ASSUME THE FILE TO
5N*X ...[        BE CORRECTLY ORDERED UNTIL PROVED OTHERWISE & SET UP   
5ND6 ...[        THE FINDEXF DIRECTLY. IF THIS FAILS WE PROCEED AS DESCRIBED
5NG* ...[        BELOW  
5NJJ ...[   
5NLW    #   
5P6G    #     1) FIRSTLY WE MAKE A PASS THROUGH THE FILE REMEMBERING THE KEY
5PL6    #        AND POSITION OF EVERY ENTRY IN A THREE WORD ENTRY IN A FI/FSORT
5Q5Q    #        BLOCK  
5QKB    #   
5R52    #     2) THE NEXT STAGE IS TO SORT THESE THREE WORD ENTRIES INTO
5RJL    #        ASCENDING KEY ORDER.THIS IS DONE USING THE SO-CALLED "SHELLSORT
5S4=    #        ALGORITHM DESCRIBED BY D.L.SHELL,IN THE A.C.M. COMMUNICATIONS  
5SHW    #        VOL.2 NO.7 (1959). THIS ISSUE IS AVAILABLE FROM H.O.L.I.S. THE 
5T3G    #        NOTATION USED IN THE  COMMENTS  WILL FOLLOW THAT USED IN THE   
5TH6    #        ARTICLE.   
5W2Q    #   
5WGB    #     3) THE NEXT STAGE IS TO SET UP A NEW FCB AND FSTACK FOR THE FILE  
5X22    #        AT THE TOP LEVEL.WE HAVE TO BE CAREFUL ABOUT B.S. ALLOCATION   
5XFL    #        FOR THESE FILES.THE B.S.ALLOCATION ALGORITHM CURRENTLY ALLOWS  
5X^=    #        US  TO USE THE UNJAMMER'S "WELL" IF THE TOP FILE IS OPEN IN
5YDW    #        GENERAL+CAREFUL MODES. WE DO AN OPTIONAL GETBAX,AND HOPE WE
5YYG    #        CAN GET ENOUGH B.S. IF WE CAN'T WE GET LESS AND GIVE UP WHEN   
5^D6    #        THE FILE IS FULL. IN PRACTICE,WE CAN PROBABLY GET BY,BUT WE
5^XQ    #        WILL EVENTUALLY HAVE TO COPE WITH THIS PROPERLY.   
62CB    #   
62X2    #     4) WE NOW MOVE ALL THE ENTRIES IN THE OLD FILE INTO THE NEW FILE  
63BL    #        IN THE ORDER IN WHICH THEY OCCUR IN THE FSORT BLOCK, AT THE
63W=    #        SAME TIME SETTING UP THE INDEX RECORD IN A FINDEXB BLOCK.  
64*W    #   
64TG    #     5) THIS HAVING BEEN DONE THE OLD FCB,FSTACK,FMAPP ETC ARE FREED   
65*6    #        AND ITS B.S. FREEBAXED.THE DIR.ENT.IS REWRITTEN,THE FINDEXB
65SQ    #        INSERTED INTO THE ENTRY AND CHAINED AFTER THE NEW FSTACK.  
66#B    #        THE ROUTINE EXITS. 
66S2    #   
67?L    [   
67R=    TMAS                               [ENTRY TO CHECK :MASTER. 
68=W    [   
68QG          LDN   6  INDEXDIR 
69=6          ORX   6  GSIGN               [ SET B0 OF AWK4 & X6.   
69PQ          BRN      MERGE
6=9B    [   
6=P2    TGRIN                              [ENTRY WITH NO PARAMETER.
6?8L    [   
6?N=          LDN   6  INDEXDIR 
6#7W          BRN      MERGE
6#MG    [   
6*76    TGRINP                             [ENTRY WITH A PARAMETER. 
6*LQ    [   
6B6B          LDX   6  ACOMMUNE9(2) 
6BL2    MERGE   
6C5L          TOPFCB2  1                   [ X1 -> FCB  
6CK=    #SKI  K6BMINDEX 
6D4W    (   
6DJG          LDN   0  #77  
6F46          ANDX  0  FINFC(1) 
6FHQ          BNZ   0  ZGEOER1             [ERROR IF ALREADY INDEXED.   
6G3B    )   
6GH2    MERGEA  
6H2L    #SKI  K6BMINDEX>199$199 
6HG=          TRACE    6,GRINDEX
6JFG          STO   6  AWORK4(2)           [ PRESERVE INDEX NUMBER  
6JP# ...STARTAGAIN  
6KDQ          STOZ     AWORK2(2)           [ LATEST KEY FOUND REGISTER. 
6KKY ...      NGN   0  1
6KR6 ...      STO   0  AWORK1(2)           [LATEST SUB-KEY  
6KY# ...      STO   0  AWORK3(2)           [LATEST SUB-SUB-KEY  
6L5G ...      LDX   0  FINFC(1) 
6L=N ...      LDX   6  AWORK4(2)
6LCW ...      ANDN  6  #77  
6LK4 ...      DCH   6  0
6LQ= ...      STO   0  FINFC(1)            [PUT INDEX NO. IN.   
6LXL          LDN   0  4
6MC= ...      ANDX  0  FCOMM(1)            [ B3 OF AWK4 SET IF FILE ORIGINALLY  
6MWW          SRC   0  6                   [OPENED CAREFULLY.   
6NBG          ORS   0  AWORK4(2)
6NW6          LDX   3  FBLMOD(1)
6P*Q          SBN   3  FBLKS-A1            [ X3=NO. KLOX IN FILE
6PF2 ...      BBS      6,AWORK4(2),NEEDFSORT[J IF GRINDEX & UNORDERED   
6PJ= ...      LDN   4  FBLKS               [INITIALIZE FREADBLOCK POINTER   
6PMG ...      BBS      1,AWORK4(2),MPTYBMCH  [J IF BMINDEX CHECK ONLY   
6PQQ ...      CALL  7  SETUPFINDEX  
6PW2 ...      BZE   3  ZENDX               [J IF EMPTY  
6P^= ...      BRN      MERGEB   
6P^W ...MPTYBMCH
6Q2G ...      BNZ   3  MERGEB   
6Q36 ...      SETREP2   OK  
6Q3Q ...      UP
6Q4G ...NEEDFSORT   
6Q7R ...      LDX   1  FX1  
6QG8 ...      SMO      6                   [INDEX NUMBER OF FILE. MULTIPLY THE  
6QSK ...      MPY   3  SFACTOR-1(1)        [SIZE OF FILE BY APPROPRIATE FACTOR  
6R72 ...      ADN   4  1                   [TO GET APPROX. SIZE OF FSORT BLOCK. 
6RFC ...      SETUPCOR 4,1,FI,FSORT        [THIS CAN BE ALTLEN'ED IF
6RRW    #SKI  K6BMINDEX>99-99   
6S?G          TRACE    4,FSORTSZE   
6SR6          LDN   0  1                   [ NECESSARY  
6T=Q          STO   0  A1(1)               [ RECORD HEADER  
6TGJ ...MERGEB  
6TQB          CALL  7  SFASTREWIND     [ REWIND FILE
6W=2    NEXREC  
6W=9 ...      BBS      1,AWORK4(2),YBMIN
6W=D ...      STEP  
6W=M ...      BRN      NEXRECGOT
6W=W ...YBMIN   
6W?7 ...[  GET PTR TO NEXT RECORD - USE QSTEPC RATHER THAN STEP SO THAT 
6W## ...[ BACKMAP CAN INITIATE ITS OWN BACKING STORE TRANSFERS, AND 
6W*F ...[ TAKE ITS OWN ACTION ON READ FAILS AND CORRUPTION. 
6WBL ...[   
6WCR ...      QSTEPC   ,XBACKREAD           [^ IF B.S. TRANSFER REQUIRED
6WDY ...      BRN      NEXRECGOT
6WG5 ...XBACKREAD   
6WH= ...      DOWN     BMCNTRL,5            [INITIATE TRANSFER  
6WJC ...      BRN      NEXREC               [OKAY - GET RECORD PTR  
6WKJ ...      BRN      XERUP               [CORRUPTION DETECTED 
6WLP ...      BRN      XEOF                [END OF FILE 
6WMW ...      BRN      XERUP                [READ FAIL  
6WP3 ...XEOF  STOZ      3   
6WQ8 ...NEXRECGOT   
6WRQ ...      BBS      6,AWORK4(2),NOFINDEXUPD      [J IF GRINDEX & UNORDERED   
6WTW ...      TOPFCA2  1
6WY2 ...      BZE   3  NDFILE              [
6X26 ...      BXE   4  FREADBLOCK(1),MERGEC[J IF NOT END OF FILE OR NEW BLOCK   
6X4= ...NDFILE  
6X6B ...      ADN   4  1                   [INCREMENT BLOCK POINTER 
6X8G ...      TRACEIF  K6BMINDEX,99,299,AWORK2(2),BLOCKKEY  
6X=L ...      BBS      1,AWORK4(2),SFINDEXB [J IF BMINDEX CHECK ONLY
6X#Q ...      MHUNTW   1,FI,FINDEXF 
6XBW ...      SBN   1  FBLKS               [COS X4 IS RELATIVE TO FBLKS 
6XF2 ...      LDX   0  AWORK2(2)
6XH6 ...      SMO      4
6XK= ...      STO   0  INDEXREC-1(1)       [STORE PREVIOUS KEY IN PREVIOUS INDEX
6XMB ...      BNZ   3  MERGEC   
6XPG ...      SETBIT   2,AWORK4(2)         [FILE NOT TRANSCRIBED
6XRL ...      BRN      ZENDX
6XTQ ...SFINDEXB
6XXW ...      FFINDEXB 1,1  
6Y22 ...      SBN   1  FBLKS
6Y46 ...      SMO     4 
6Y6= ...      LDX   0  INDEXREC-1(1)
6Y8B ...      BXU   0  AWORK2(2),XERUP     [KEY WRONG ERROR EXIT
6Y=G ...      BNZ   3  MERGEC   
6Y#L ...OKUP  SETREP2  OK   
6YBQ ...      BRN      UP   
6YDW ...NOFINDEXUPD 
6YH2 ...      BZE   3  SORT                [SORT UNORDERED FILE 
6YK6 ...MERGEC  
6YN6          BRINDEX  AWORK4(2),ZGEOER3,XIDIR,XNO,XNO,XNO,XIOUT,XNO,XNO
6^7Q    XIDIR   
6^MB          LDX   6  EGENN(3)            [CALCULATE SUBKEYS,IF ANY.   
7272          LDX   7  EREELN(3)
72LL          BRN      XIMERGE  
736=    XIOUT   
73KW          LDX   7  GOUTKEY2-A1(3)   
745G          BRN      XJMERGE  
74K6    XNO 
754Q          LDN   7  0
75JB    XJMERGE 
7642          LDN   6  0
76HL    XIMERGE 
773=          TOPFCB2  2                   [ X2 -> FCB  
77GW          CALL  1  SKEYREC             [ X5 =KEY, X0,1 CORRUPT. 
782G          BRN      NEXREC              [ GO FOR 
787N ...      LDX   2  FX2  
78#W ...      BBUS     6,AWORK4(2),NOFSORTUPD         [J UNLESS GRINDEX & OOO   
78G6          MHUNTW   1,FI,FSORT   
78^Q          LDN   0  5                   [ UPDATE R.H.
79FB          ADS   0  A1(1)
79^2          BXGE  4  A1(1),NOALTFSORT    [ J IF ROOM IN FSORT FOR NEXT ENTRY  
7=DL    #SKI  K6BMINDEX>99-99   
7=Y=          TRACE    4,TOOSMALL   
7?CW ...      ADN   4  400                  [ ALTLEN BY 400 EACH TIME -IT'S 
7?XG          LDX   3  1                   [ MORE EFFICIENT.
7#C6          ALTLEN   3,4,FI,FSORT        [ LENGTHEN BLOCK.
7#WQ          MHUNTW   1,FI,FSORT   
7*BB    NOALTFSORT  
7*W2          TOPFCA   2                   [X2 -> FCA   
7B*L          ADN   2  FREADBLOCK          [-> READ PTRS
7BT=          SMO      A1(1)               [
7C#W          LDN   3  A1-5(1)             [ -> START OF 3WD ELEMENT IN FSORT   
7CSG          STO   5  0(3)                [ STORE KEY IN   
7D#6          ADN   3  1                   [ -> AREA FOR READ PTRS  
7DRQ          MOVE  2  2                   [ MOVE IT IN.
7F?B          LDN   0  5
7FR2          LDX   2  FX2  
7G=L          STO   6  2(3)                [ STORE SUB-KEYS 
7GQ=          STO   7  3(3) 
7GXD ...      BRN      NEXREC   
7H4L ...NOFSORTUPD  
7H9W          BXGE  5  AWORK2(2),UPDATLAT  [ J IF KEYS ASCENDING.   
7HPG    NOTORDX 
7J96 ...      BBS      1,AWORK4(2),XERUP   [ERROR EXIT IF BMINDEX CHECK ONLY
7JNQ ...      MFREEW   FI,FINDEXF          [FILE UNORDERED - SCRAP FINDEXF &
7JYJ ...      BBS      4,AWORK4(2),XERUP   [ERROR EXIT IF REINDEX & UNSORTED
7K8B ...      SETBIT   6,AWORK4(2)         [UNORDERED   
7KN2 ...      TOPFCB2  1
7L7L ...      BRN      STARTAGAIN          [ START AGAIN TO DO SORT 
7MLG    UPDATLAT
7N66          BXU   5  AWORK2(2),STOAW31   [J IF KEYS UNEQUAL   
7NKQ          LDX   1  AWORK1(2)           [LAST S/K
7P5B          BXL   1  6,NOTORDX           [J IF LESS THAN NEXT 
7PK2          BXU   6  1,STOAW31           [J IF UNEQUAL
7Q4L          BXL   7  AWORK3(2),NOTORDX   [J IF NEW SS/K LESS THAN OLD 
7QJ=    STOAW31 
7R3W          STO   6  AWORK1(2)           [UPDATE S/K & SS/K REGISTERS 
7RHG          STO   7  AWORK3(2)
7S36    #SKI  K6BMINDEX>699-699 
7SGQ          TRACE    5,UPDATLAT   
7T2B          STO   5  AWORK2(2)           [ AWK2 CONTAINS HIGHEST KEY TO DATE  
7TG2          BRN      NEXREC   
7T^L    #   
8SQ2    #     LAST STAGE : UPDATE DIR.ENT WITH ALL THE NEW INFORMATION  
8T9L    #   
8TP=    #   
8W8W    #   
8WNG    ZEND
8X86          MFREEW   FI,FSORT 
8XMQ    ZENDX   
8XXJ ...      BBS      4,AWORK4(2),OKUP    [EXIT IF REINDEX 
8Y7B          ACROSS  BMXEND,1  
8YM2    UP  
8^6L          CALL  7  SFASTREWIND  
8^L=    UP1 
925W          UP
92KG    #   
9D?2    SORT
9DQL    #   
9F==    #     THIS SECTION OF CODE SORTS THE FSORT BLOCK INTO ORDER BY ASCENDING
9FPW    #     KEY NUMBER.   
9G9G    #   
9GP6    #     THE METHOD USED IS A "SHELL-SORT" (SEE THE REFERENCE QUOTED AT
9H8Q    #     THE HEAD OF THE CHAPTER). 
9HNB    #   
9J82    #     IT IS A CROSS BETWEEN SIFTING AND MERGING BY PAIRS. IT USES LITTLE
9JML    #     CORE(JUST THE FSORT BLOCK),WHICH IS A CHARACTERISTIC OF SIFTING,  
9K7=    #     AND THE TIME TAKEN TO DO THE SORTING IS PROPORTIONAL(BY EXPERIM-  
9KLW    #     ENTAL RESULTS) TO N**1.226(I.E.N RAISED TO THE POWER OF 1.226)
9L6G    #     WHERE N IS THE NUMBER OF ELEMENTS TO BE SORTED.THIS SPEED IS  
9LL6    #     CHARACTERISTIC OF MERGING BY PAIRS.WHERE THE TIME TAKEN IS PRO-   
9M5Q    #     PORTIONAL TO N.LOG(N).ALL OTHER SORTING METHODS TAKE A TIME   
9MKB    #     PROPORTIONAL TO N SQUARED OR N.LOG(R) WHERE R IS THE HIGHEST KEY  
9N52    #     USED.THESE ARE TOO INEFFICIENT FOR US 
9NJL    #   
9P4=    #     WE SORT THE LIST OF ELEMENTS IN THE FSORT BLOCK IN P PASSES,WHERE 
9PHW    #     P IS THE SMALLEST NUMBER SUCH THAT 2**P > OR = N  
9Q3G    #   
9QH6    #     IN THE QTH PASS,WE DIVIDE THE SET OF ELEMENTS INTO Q SUBSETS EACH 
9R2Q    #     WITH [N/2**Q] ELEMENTS,EXCEPT FOR UP-TO-Q-1 MORE,WHICH HAVE   
9RGB    #     ANOTHER 1.
9S22    #     THE U'TH SUBSET CONSISTS OF THE U'TH,U+Q'TH,U+2Q'TH,... ETC   
9SFL    #     ELEMENTS. WE SORT THESE INTO KEY ORDER WITHIN THE SUBSET. 
9S^=    #     HAVING SORTED EACH SUBSET,WE GO TO THE NEXT STEP-SETTING Q TO Q/2 
9TDW    #     AND REPEATING THE PROCESS UNTIL Q=1.  
9TYG    #   
9WD6    #   
9WXQ    #SKI  K6BMINDEX>99$99   
9XCB          TRACE    JTIME,START IX   
9XX2    #SKI  K6BMINDEX<100$100 
9YBL          TRACEVER JTIME,START IX   
9YW=          MHUNTW   3,FI,FSORT   
9^*W          STO   3  GEN6 
9^TG          LDX   2  FX2  
=2*6          LDX   5  A1(3)
=2SQ          SBN   5  1
=3#B          STO   5  AWORK1(2)
=3S2          LDN   4  5
=4?L          DVS   4  4
=4R=          LDX   4  5                   [ IN X4 (& ALSO IN AWORK3)   
=5=W    XFINERMESH  
=5QG          SRL   4  1                   [ FINER MESH = M 
=6=6    #SKI  K6BMINDEX>299$299 
=6PQ          TRACE    4,MESH = 
=79B          BZE   4  SORTED              [ EXIT WHEN PASS COMPLETED.  
=7P2          STO   4  AWORK3(2)           [ PRESERVE MESH  
=88L          SLL   4  2
=8N=          ADX   4  AWORK3(2)           [MULTIPLY BY 5   
=97W          LDX   0  AWORK1(2)           [ NO. OF ENTRIES =N  
=9MG          SBX   0  4
==76          STO   0  AWORK2(2)           [ =K 
==LQ          LDN   6  0                   [ INITIAL VALUE OF J 
=?6B    SETITOJ 
=?L2    #SKI  K6BMINDEX>299$299 
=#5L          TRACE    6,J IS   
=#K=          LDX   5  6                   [ SET I = J  
=*4W    PICKITHENT  
=*JG    #SKI  K6BMINDEX>299$299 
=B46          TRACE    5,I IS   
=BHQ          LDX   3  GEN6 
=C3B          ADX   3  5                   [ (NEARLY) POINTS TO I'TH ENTRY  
=CH2          SMO      4
=D2L          LDX   0  A1+1(3)             [ KEY OF I+M'TH ENTRY
=DG=    #SKI K6BMINDEX>699$699  
=D^W    (   
=FFG          TRACE    A1+1(3),I'TH KEY 
=F^6          TRACE    0,I+M'TH 
=GDQ    )   
=GYB          BXL   0   A1+1(3),XCIANGE    [ JIF NEYS OUT OF ORDER  
=HD2          BXU   0  A1+1(3),STEPJ       [ J IF KEYS NOT EQUAL
=HXL          SMO      4                   [ IF THEX ARE , CF DESCENDING SUB-KEY
=JC=          LDX   0  A1+1+3(3)
=JWW          BXL   0  A1+1+3(3),STEPJ     [ JIF LESS   IE ORDERED  
=KBG          BXU   0  A1+1+3(3),XCIANGE   [ IF EQUAL,CF ASCENDING SUB-SUB-KEYS.
=KW6          SMO      4
=L*Q          LDX   0  A1+1+4(3)
=LTB          BXGE  0  A1+1+4(3),STEPJ  
=M*2    XCIANGE 
=MSL    # NOW INTERCHANGE THE TWO ENTRIES.  
=N#=          LDN   7  A1+1(3)             [ -> I'TH ENTRY  
=NRW          LDN   0  A1+1(3)  
=P?G          ADX   0  4                   [ -> I+M'TH ENTRY
=PR6          LDN   1  GEN0                [ DUMP AREA  
=Q=Q          LDN   2  A1+1(3)             [ -> I'TH ENTRY. 
=QQB          MOVE  0  5                   [ PRESERVE I+M'TH
=R=2          MOVE  7  5                   [ CHANGE I'TH TO I+M'TH  
=RPL          MOVE  1  5                   [ MOVE OLD I+M'TH TO I'TH POSITION.  
=S9=    #SKI  K6BMINDEX>699$699 
=SNW    (   
=T8G          TRACE    2(2),NEW I'TH
=TN6          LDX   2  0
=W7Q          TRACE    2(2),NEWI+MTH
=WMB    )   
=X72          SBX   5  4                   [ RESET I TO I-M 
=XLL          BPZ   5  PICKITHENT          [ JUMP  IF'NEW' I NOT NEGATIVE.  
=Y6=    STEPJ   
=YKW          ADN   6  5                   [ STEP J 
=^5G          LDX   2  FX2  
=^K6          BXL   6  AWORK2(2),SETITOJ   [ JUMP IF J < K  
?24Q          LDX   4  AWORK3(2)           [ PICK UP MESH   
?2JB          BRN      XFINERMESH   
?342    SORTED  
?3HL    #   
?43=    #     WE NOW SET UP A DUMMY FILE IDENTICAL TO THE ONE WE ARE INDEXING   
?4GW    #     EXCEPT FOR THE 'CAREFUL' BIT AND THE FILE & BLOCKS ALTERED BITS.  
?52G    #   
?5G6    #SKI  K6BMINDEX>99$99   
?5^Q          TRACE    JTIME,END IX 
?6FB    #SKI  K6BMINDEX<100$100 
?6^2          TRACEVER JTIME,END IX 
?7DL          TOPFCB2  2                   [ X2 -> FCB  
?7Y=          LDX   7  BSPRE(2)            [ WE GET SOME BLOCKS FOR THE FILE
?8CW          LDX   4  FBLMOD(2)           [ ON THE SAME RESIDENCE AS IT IS 
?8XG          LDX   6  4                   [ CURRENTLY. IF THERE ISN'T ENOUGH   
?9C6          SBN   6  FBLKS-A1-2          [ WE TRY TO GET 1 LESS BLOCK,AND SO  
?=BB    #SKI  K6BMINDEX>199-199 
?=W2          TRACE    6,NO.BLOX
??*L          SETUPCORE 6,3,BSTB,EMPTYB    [ THIS IS NECESSARY AS WE HAVE TO PUT
??T=          STO   6  A1(3)               [ THE FILE ON THE SAME RESIDENCE AS  
?##W          STO   7  A1+1(3)             [ IT MAY BE A SPECIALLY ALLOCATED FIL
?#SG ...      GETBAX
?*#6 ...      SETUPCOR 4,3,FILE,FCB,,1  
?CQ=          LDEX  5  AWORK4(2)           [  INDEX NO. 
?D9W          TOPFCB2  2                   [ FUL.WE SET UP AN FCB NEXT LOOKING  
?DPG ...      STOZ     FBLMOD(3)               [ NEARLY IDENTICAL TO THE OTHER O
?F96          NGS   7  CMOD(3)  
?FNQ ...      LDN   7  FBLMOD(3)
?G8B ...      LDN   0  FBLMOD+1(3)  
?GN2 ...      MOVE  7  BSPRE-FBLMOD-1   
?H7L          ADN   3  FUSER1   
?HM=          ADN   2  FUSER1   
?J6W          MOVE  2  1+FVERSION-FUSER1   [ MOVE IN NAME ETC   
?JLG          SBN   3  FUSER1              [ X3 -> NEW FCB  
?K66          SBN   2  FUSER1              [ X2 -> THE OLD FCB  
?KKQ          LDN   0  FBLKS-A1 
?L5B          STO   0  FBLMOD(3)           [ EMPTY. 
?LK2          LDX   0  BACK1(2)            [ TRANSFER BS HOME(FCB IDENTIFIER).  
?M4L          STO   0  BACK1(3) 
?MJ=          LDX   0  BACK2(2) 
?N3W          STO   0  BACK2(3) 
?NHG          STO   4  FUSEBL(3)           [ BUT BLOX ALLOCATED TO IT.  
?P36          ORS   5  FINFC(3)            [ SET INDEX NO.  
?PGQ          LDX   0  MASKCOMM(1)         [ TRANSFER VITAL BITS OF COMM
?Q2B          ANDX  0  COMM(2)  
?QG2          STO   0  COMM(3)  
?Q^L          LDX   0  MASKFCOM(1)         [ TRANSFER VITAL BITS OF FCOMM   
?RF=          ANDX  0  FCOMM(2) 
?RYW          STO   0  FCOMM(3) 
?SDG          ADN   3  BSPRE               [ MOVE THE BLOCK NOS. IN 
?SY6          MHUNTW   2,BSTB,FULLB        [ FROM THE FULLB.
?TCQ          ADN   2  A1+1 
?TXB          SMO      6
?WC2          MOVE  2  511                 [ & THE B.S.PREFIX.  
?WWL          SETNCORE FELLEN,3,FILE,FSTACK,,1,FELLEN   
?XB=          ADN   3  A1                  [ SET UP AND INITIALISE A FSTACK 
?XTW          NGS   3  FREADWORD(3)        [ BLOCK AND ELEMENT  
?Y*G          NGS   3  FREADBLOCK(3)
?YT6          LDN   0  A1   
?^#Q          NGS   0  FBACKPOINT(3)
?^SB          TOPFCA2  2                   [ OLD FCA; TRANSFER APPROPRIATE  
#2#2          LDX   0  FGENERAL1(2)        [ BITS IN FG1 & FG2. 
#2RL          ANDX  0  MASKFG1(1)   
#3?=          STO   0  FGENERAL1(3) 
#3QW          LDX   0  FGENERAL2(2) 
#4=G          ANDX  0  MASKFG2(1)   
#4Q6          STO   0  FGENERAL2(3) 
#59Q          RINGFILE 3                   [ FCA -> TOP OF FILERING 
#5PB          SBN   3  A1   
#5^8 ...      PSTAC    2,2  
#692P...#SKI  IFS<1$1   
#6DSP...(   
#6NL    XFLPK   
#78=          LDX   2  FPTR(2)             [ SET X2 -> NEXT FCB OR  BASE
#7MW          BXE   2  CXFI,XEK            [ OF FILE CHAIN  
#87G          LDX   0  ATYPE(2) 
#8M6          BXU   0  FILEPLUSFCB,XFLPK
#96Q    XEK 
#9LB    #SKI  K6BMINDEX>299$299 
#=62          TRACE    2,NXFCB  
#=KL          MHUNTW   1,FILE,FCB   
#?5=          STO   1  4
#?CM ...      LDX   2  BPTR(2)  
#?Q4 ...      TRANSFCB 4,ACT,FILE,2  [X2 GIVES THE POSITION IN FILE CHAIN   
##4G          CHAIN    3,4                 [ AFTE_GINVIOUS FCB & ITS FLOTILLA   
##5XP...)   
##7#P...#SKI  IFS   
##8PP...(   
##=6P...      BFCBX    2,2  
##?HP...#SKI  K6BMINDEX>299$299 
###YP...      TRACE    2,NXFCB  
##B*P...      STO   3  4
##CQP...      MHUNTW   3,FILE,FCB          [RING IN FCB,DECHAIN FROM ACT. CHAIN 
##F7P...      FILECHAIN  4,3,2             [& CHAIN FCB AND FSTACK TOGETHER.
##GJP...)   
##J6    #   
#*3Q    #     WE NOW SET UP A FI/FINDEXF BLOCK TO PUT THE INDEX IN AS WE
#*HB    #     CALCULATE IT  
#B32    #   
#BGL          LDX   3  6
#C2=          SBN   3  2                   [ NO. OF BLOX IN FILE.   
#CFW          LDEX  6  AWORK4(2)           [ INDEXNO
#C^G          CALL  7  SETUPFINDEX         [ SET UP THE FINDEXF 
#DF6          LDN   0  FBLKS-A1 
#DYQ          STO   0  AWORK3(2)           [ " OLD FBLMOD". 
#FDB          LDN   0  INDEXREC-A1  
#FY2          STO   0  A1(1)               [ FILE CURRENTLY EMPTY   
#GCL          NGN   4  4                   [ PTR IN FSORT   
#GX=    NEXTFSORT   
#HBW          ADN   4  5                   [ STEP FSORT PTR.
#HWG    XIRSTFS 
#JB6          LDX   2  FX2  
#JTQ          MHUNTW   1,FI,FSORT          [ X1 -> FSORT.   
#K*B          BXE   4  A1(1),NEWFILE       [ J IF REACHED END   
#KT2    #SKI  K6BMINDEX>299$299 
#L#L          TRACE    4,FSORTPTR   
#LS=          ADX   1  4                   [ +A1 -> NEXT ENTRY. 
#M?W          TOPFCA2  2                   [ FCA
#MRG          NXFCA    2,2,ZGEOER6         [ FCA OF F^E & DEPTH 1   
#N?6          LDX   0  A1+1(1)             [ TABULATE IN THE INPUT FILE 
#NQQ          STO   0  FREADBLOCK(2)       [ TO THE POSITION OF THE NEXT
#P=B          LDX   0  A1+2(1)             [ ENTRY TO GO TO THE OUTPUT FILE.
#PQ2          STO   0  FREADWORD(2)        [ FILE.  
#Q9L          LDX   5  A1(1)               [ KEY
#QP=    SAG1
#Q^4 ...      PHOTO    7
#R8W          STEPAGAIN 1                  [ GET PTR. TO RECORD 
#RNG ...NXTAPPEND   
#S86          LDX   6  3                   [ PRESERVE PTR.  
#SMQ    #SKI  K6BMINDEX>699$699 
#T7B          TRACE    FRH(3),OUT RECH  
#W6L          LDEX  1  FRH(3)   
#WL=          STEP     ,0(1)               [ GET APPEND POINTER.
#X5W ...      TESTMOVE 7,NXAP   
#XKG ...      BRN      SAG1 
#Y56 ...NXAP  LDX   7  3
*2H=          LDEX  1  FRH(3)              [ DOESN'T MATTER WHICH X3 PTR
*32W          MOVE  6  0(1)                [ BOTH HAVE R.H. IN BOTTOM 9 BITS.   
*3GG          TOPFCB2  1                   [ X1 -[ FCB  
*426    #SKI  K6BMINDEX>299$299 
*4FQ          TRACE    CMOD(1),END ENT  
*4^B          MHUNTW   3,FI,FINDEXF        [ X3 -> FINDEXF  
*5F2          LDX   0  FBLMOD(1)           [ HAS FBLMOD CHANGED ?   
*5YL          SBX   0  AWORK3(2)           [ (OLD FBLMOD)   
*6D=          BZE   0  NOALTFX1            [ NO.THEN JUMP   
*6XW          ADS   0  AWORK3(2)           [ UPDATE PREVIOUS FBLMOD.
*7CG    #SKI  K6BMINDEX 
*7X6          BCT   0  ZGEOER2             [ ERROR IF CHANGED BY > 1
*8BQ          LDX   6  A1(3)
*8WB          BXL   6  ALOGLEN(3),NOALTFX  [ J IF BLOCK LONG ENOUGH 
*9B2    #SKI  K6BMINDEX 
*9TL          BXU   6  ALOGLEN(3),ZGEOER2  [ ERROR IF NOT LONG ENOUGH   
*=*=          ADN   6  8                   [ ALTLEN BY A LOT
*=SW    #SKI  K6BMINDEX>99$99   
*?#G          TRACE    6,ALT FXB
*?S6          ALTLEN   3,6  
*#?Q          MHUNTW   3,FI,FINDEXF        [ X3 -> FINDEXF  
*#RB    NOALTFX 
**?2          LDN   0  1                   [UPDATE RECORD HEADER.   
**QL          ADS   0  A1(3)
*B==    NOALTFX1
*BPW          SMO      A1(3)
*C9G          STO   5  A1-1(3)             [ UPDATE INDEX NO.   
*CP6    #SKI  K6BMINDEX>199$199 
*D8Q          TRACE    5,BLOCKEY
*DNB    XISITKEYED  
*F82          STEP                         [ STEP TO LAST RECORD IN O/P FILE.   
*FML          TOPFCB2  2                   [ X2 -> FCB. 
*G7=          CALL  1  SKEYREC             [ SET X5 = KEY OF LATEST RECORD  
*GLW          BRN      NXINREC             [ J IF NOT INDEXED.  
*H6G          LDN   0  #77  
*HL6          ANDX  0  FINFC(2) 
*J5Q          ADX   1  0
*JKB          LDX   0  XENTABLE(1)         [ PICK UP TABLE THAT TELLS US WHICH  
*K52          BZE   0  NEXTFSORT           [ TYPES HAVE MULTIRECORD ENTRIES 
*KJL    NXINREC                            [ AND JUMP IF THIS FILE HASN'T   
*L4=          STEP     1                   [ NEXT RECORD IN INPUT FILE  
*LHW          BZE   3  NEXTFSORT           [ J IF E.O.F.
*M3G          TOPFCB2  2                   [ X2 -> FCB  
*M*X ...      PHOTO    7
*MN# ...      KEYREC   2,,3,NXTAPPEND      [IF NOT KEYED REC,EXIT TO APPEND THIS
*N2Q          BRN      NEXTFSORT           [ RECORD,O/W TRY NEXT ENTRY IN FSORT.
*NGB    #  WE NOW HAVE AN INDEXED FILE AT TOP LEVEL AND AN OLD FILE 
*P22    #  TO GET RID OF AT LEVEL 1.
*PFL    NEWFILE 
*P^=          MHUNTW   3,BSTB,FULLB 
*QDW    MHUFUL  
*QYG          CALL  0  NXFCB               [ X2 -> NOXT FCB 
*RD6          LDX   1  FUSEBL(2)
*RXQ          SBN   1  FBLKS-A1-2          [ X1 = TOTAL NUMBER OF BLOCK TO BE   
*SCB                                       [ FREED.NB NOT NECESS SAME  PREFIX.  
*SX2          BXE   1  A1(3),XFULLBIG      [ FCB MAY CONTARE UNUSED BLOX
*TBL    #SKI  K6BMINDEX>99$99   
*TW=          TRACE    1,BL USED
*W*W          LDX   4  1
*WTG          ALTLEN   3,4,BSTB,FULLB   
*X*6          MHUNTW 3,BSTB,FULLB   
*XSQ          STO   4  A1(3)
*Y#B          BRN      MHUFUL   
*YS2    XFULLBIG
*^?L          ADN   3  A1+1 
*^R=          ADN   2  BSPRE
B2=W          MOVE  2  511(1)              [ MOVE + BSPRE   
B2QG          SBN   2  BSPRE
B3=6          SBN   3  A1+1                [ REDATUMISE PTRS.   
B3PQ          LDX   4  2                   [ SAVE   
B49B          LDX   5  FWAITCOUNT(2)
B4P2 ...      LF       2,FFAUTCLCT,6       [X6= COUNT OF AUTOCLOSES 
B58L          LDN   7  1                   [ CT.OF FULLB'S TO BE FREEBAXED  
B5N=          LDCT  0  #40  
B67W          SMO      FX2                 [ J IF FILE WASN'T ORIGINALLY
B6MG          ANDX  0  AWORK4              [ CAREFULLY OPENED   
B776          BZE   0  XLFPM
B7LQ          CALL  0  SFBLOCK             [ IS THERE ANOTHER FULLB IN THE FILE 
B86B    #HAL  BSTB+FULLB,0  
B8L2          BRN      NOFULLB             [ CHAIN? J IF NOT.   
B95L    #SKI  K6BMINDEX>199$199 
B9K=          TRACE    A1(2),FULLB IS   
B=4W          ADN   7  1                   [ 2 FULLB'S  
B=JG          CHAIN    2,FX2               [ CHAIN IN ACT. CHAIN
B?46    NOFULLB 
B?HQ          LDX   2  4                   [ X2 -> FCB  
B#3B          CALL  0  SFBLOCK  
B#H2    #HAL  FILE+FMAPP,0  
B*2L          BRN      ZGEOER1             [ ERROR IF NO FMAPP & CAREFUL
B*G=    YESMAP  
B*^W    #SKI  K6BMINDEX>199$199 
BBFG          TRACE    FBITMOD(2),FMAPP IS  
BB^6          CHAIN    2,FX2               [ CHAIN FMAPP INTO ACTIVITY CHAIN
BCDQ          LDX   3  FPTR(2)                 [ -> FMAPP   
BCYB    SETMAP  
BDD2          LDX   0  ALOGLEN(3)          [ INITIALISE OMAPP   
BDXL          SBN   0  FBITS-A1 
BFC=    #SKI  K6BMINDEX 
BFWW          BZE   0  ZGEOER2             [ J IF EMPTY TO ERROR
BGBG          LDN   1  FBITS(3) 
BGW6    XFLPL   
BH*Q          STOZ     0(1)                [ ZEROISING LOOP 
BHTB          ADN   1  1
BJ*2          BCT   0  XFLPL
BJSL          LDN   0  3                   [ UPDATE FBCOMM  
BK#=          ORS   0  FBCOMM(3)
BKRW          LDX   2  4                   [ -> FCB 
BL?G          FREECORE FPTR(2)             [ FREE FSTACK.   
BLR6    XLFPM   
BM=Q          LDX   2  4                   [ -> FCB 
BMQB          LDX   2  FPTR(2)             [ BLOCK NEXT TO FCB  
BN=2          BXE   2  CXFI,XSEARCHND      [ EXIT FROM LOOP IF END OF CHAIN 
BNPL          LDX   0  ATYPE(2)            [ OR FCB MET 
BP9=          BXE   0  FILEPLUSFCB,XSEARCHND
BPNW    #SKI  K6BMINDEX>199$199 
BQ8G          TRACE    ATYPE(2),FREE BLK
BQN6          FREECORE 2                   [ FREE BLOCK 
BR7Q          BRN      XLFPM
BRMB    XSEARCHND   
BS72 ...      DELFCB 4,FILE 
BSLL          LDCT  0  #40  
BT6=          ANDX  0  AWORK4(2)           [ J IF NOT CAREFUL   
BTKW          BZE   0  XFREEBU  
BW5G          TOPFCB2  2                   [ NEW FCB FOR FILE   
BWK6          STO   5  FWAITCOUNT(2)
BX4Q ...      STF      2,FFAUTCLCT,6       [INSERT COUNT OF AUTOCLOSES  
BXJB          MBS      2,BFALTB,BFALTR     [SET 'FILE AND BLK NOS ALTERED' BITS.
BY42          BS       2,BFCARE            [SET CAREFUL BIT 
BYHL    XLOADFP 
B^3=          LDX   4  2                   [ -> FCB 
B^GW          CALL  0  SFBLOCK             [ FREE ALL FURBS 
C22G    #HAL  FILE+FURB,0   
C2G6          BRN      TRYFUWB1            [ J IF NONE LEFT 
C2^Q          FREECORE 2
C3FB          BRN      XLOADFP  
C3^2    TRYFUWB1
C4DL          LDX   2  4                   [ X2 ->FCB   
C4Y=    TRYFUWB 
C5CW          CALL  0  SFBLOCK             [ WRITE AWAY ALL FUWBS   
C5XG    #HAL  FILE+FUWB,0   
C6C6          BRN      TRYFMAP             [ J IF NONE  
C6WQ          CHAIN    2,FX2
C7BB          WRITEAUT FAIL+FREE,BSBS   
C7W2          TOPFCB2  2                   [ X2 ->FCB   
C8*L          LDX   4  2                   [ X4 -> FCB  
C8T=          BRN      TRYFUWB  
C9#W    TRYFMAP 
C9SG          LDX   2  4                   [ X2 -> FCB  
C=#6          MHUNTW   3,FILE,FMAPP 
C=RQ          CHAIN    3,FPTR(2)           [ CHAIN FMAPP INTO FILE CHAIN
C??B    XFRLP   
C?R2          MHUNTW   2,BSTB,FULLB        [ CHAIN FULLB(S) INTO F.C.   
C#=L          CHAIN    2,3  
C#Q=          BCT   7  XFRLP
C*9W          BRN      ZEND                [ GO TO FINAL STEP.  
C*PG    XFREEBU 
CB96          FREEBAX   
CBNQ          MFREE    BSTB,EMPTYB  
CC8B          BRN      ZEND 
CCN2          MENDAREA 1000-0?,K99BMINDEX   
CD7L    #END
^^^^ ...17127170000200000000
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1