PMCRABS860

(George Source)

Macros used: ADDRESS, CHAIN, ENDLIST, JBUSY, MASK, MOVX, ON, PMBSADD, PMCORES, PMDLGET, PMESSAGE, PMOVE, PMSUBSREAD, SEGENTRY, SWAP, TEST

PMCRABS860.txt
22FL    #OPT           K0PMCRABS=0  
22^=    #LIS           K0PMCRABS>K0POST>K0ALLGEO
23DW    #   
23YG ...#SEG  PMCRABS860                    [M.C.D. MANN
24D6    #   
24XQ    #   
25CB ...#          THIS SEGMENT CHECKS THE CONSISTENCY OF   
25X2    #          GEORGE'S VARIABLE CORE   
26BL    #   
26W=    #          IT IS USED ONLY IN CONJUNCTION WITH THE SEGMENT  
27*W    #          PMBRKCHS 
27TG    #   
28*6    #   
28SQ    #   
29#B    #   
29S2                   8HPMCRABS
2=?L    #   
2=R=    #                                  ENTRY POINT TABLE
2?=W    #   
2?QG    #   
2#=6     SEGENTRY K1PMCRABS,XK1PMCRABS  
2#PQ     SEGENTRY K2PMCRABS,XK2PMCRABS  
2*9B    #   
2*P2    TABCHAN 
2B8L    #HAL   0,BFREE                     [ TABLE GIVING INFO ON CHAINS
2BN=    #HAL   1,BCAFREZ
2C7W    #HAL   2,BCHAP  
2CMG    #HAL   3,BJOBQ  
2D76    #HAL   4,BHTEMP 
2DLQ    #HAL   5,BHLSQ  
2F6B    #HAL   6,BMISC  
2FL2    #HAL   7,BFILE  
2G5L    #HAL   8,BHALF  
2GK=    #HAL   9,BOLC   
2H4W    #HAL  10,BINDEX 
2HJG    #HAL  11,BCONSOUT   
2J46    #HAL  12,BCCB   
2JHQ    #HAL  13,BLF
2K3B    #SKI  IPL   
2KH2    (   
2L2L ...#HAL  14,BIPLS  
2LG= ...#HAL  15,BIPLR  
2MFG    )   
2M^6    #SKI  G4
2NDQ    (   
2NSF ...#HAL  16,BUSAGE 
2P88 ...#HAL  17,BSUD   
2QQ^ ...#HAL  23,BOBJPROG   
2QWW    )   
2RBG ...#HAL  22,BSJC   
2RF5 ...#SKI  G3
2RHN ...(   
2RL? ...#UNS  ECS   
2RNW ...#HAL  24,BOBJUNUSE  
2RRF ...)   
2RW4 ...[   
2RYM ...[ MEND POINT FOR SFC MACRO:-THIS INCLUDES NEW CHAINS FTEM &FAST 
2S3= ...[   
2S5T ...      SEGENTRY   K90PMCRABS 
2S8D ...      +0,+0      [SET TO 25,BFTEMP &26,BF64 BY SFC ON MACRO 
2S?3 ...#HAL  #6124,FX2 
2S*Q    WORKST  
2STB ...#HAL  #0225,0   
2T*2    NAMCHAN                            [ TABLE OF CHAIN MNEMONICS   
2TSL                   40HFREEFROZCHAPJOBQTEMPHLSQMISCFILEHALFOFFL  
2W#= ...               40HINDXCONSCARTLISTIPLSIPLRUSAGPUREFPAGPTAB  
2WRW ...               28HACTCWORKJRNLOPCHFPBCFTEMFAST  
2X?G    MESS           44HPMBRKCHS:- INSUFFICIENT SPACE ON SWAP FILE,   
2XR6                   16HCRABS ABANDONED   
2Y=Q    XHEAD          49H    MAP OF CORE BLOCKS ARRANGED IN PHYSICAL ORDER 
2YQB    TITLES  
2^=2    #REP           4
2^PL                   4H   
329=                   50H   ADDRESS      TYPE/SUBTYPE           CHAIN - ROW
32NW                   38H   LOCKED  FROZEN    ASIZE     ALOGLEN
338G    XGAPMESS       47H ***  NON-CONTIGUOUS BLOCKS    GAP          ***   
33N6    XOVERMESS      28H***  OVERLAPPING BLOCKS  ***  
347Q    NOTLISTED      16H0NOT LISTED 0000  
34MB    XFCCRUPT       32HFIXED CORE DUBIOUS SEE ADDRESS
3572    REPBASE        +0                  [ STORE FOR TABCHAN REPLACED BASES   
35LL    XTABEND        +WORKST-TABCHAN     [ ADDRESS OF  END OF TABCHAN 
366=    XLESS          4H <<<   
36KW    MASK           #770000             [ USED TO GET NAMCHAN POINTER
375G    MASK0          #37777777            [ BIT 0 
37K6    MASK01         #17777777
384Q    MASK1          #57777777            [ BIT 1 
38JB    MASK0123       #03777777            [ BIT 0123  
3942    MASK014        #15777777       [ BIT 014
39HL    MULTQUERY      +1                  [ SET TO ZERO IF BUFSIZE=CRABL*INTEGE
3=3=    SWITCH         +0                  [ CRAB BUFFER SWITCH 
3=GW    SW             +0                  [ SWITCH FOR XCRABWRITE  
3?2G    ZBUFSTX        +ZBUFST             [ END OF SEGMENT 
3?G6    XCRABSTART     +ZBUFST             [ START OF CURRENT BUFFER
3?^Q    ZCRABBUFF      +ZBUFST             [ POINTER WITHIN CURRENT CRAB BUFFER 
3#FB    XCRABCOUNT     +0                  [ NO OF CRABS SET UP 
3#^2    XLENGTH        +0                  [ LENGTH OF BUFFER OCCUPIED BY CRABS 
3*DL    PERBUFF        +0                  [ NO OF CRABS PER BUFFER 
3*Y=    ROWCNT         +0                  [ ROWCOUNT    THIS CHAIN 
3BCW    XBLOCKCNT      +0                  [ BLOCKS THIS ROW
3BXG    STARTCNT       +1                  [ USED TO KEEP NIN ZERO INITIAL ROWCN
3CC6    SABS           +0                  [ START ADDRESS ON BACKING STORE 
3CWQ    SHIFTS         +0                  [ NO OF WXECUTIONS - 1 OF XCRABWRITE 
3DBB    XCNT           +128                [ O OF WORDS IN CRAB BUFFER  
3DW2    XCNTLAST       +0                  [ LENGHT OF LAST BUFFER  
3F*L    TABPNT         -1                  [ TABCHAN POSITION MARKER
3FT=    WAY            +1                  [ DIRECTION OF SEARCH
3G#W    WWAY           +1                  [ DIRECTION OF SEARCH IN WFANAL  
3GSG    XSTEP          +0                  [ ADDRESS OF LAST BLOCK  
3H#6    XSTEPWF        +0                  [ ADDRESS OF LAST BLOCK SEARCH IN WF 
3HRQ    XBACK          +0                  [ BACKWARD POINTER STORE 
3J?B    XBACKWF        +0                   [ BACKWARD POINTER STORE IN WFANAL  
3JR2    XCHAINBASE     +0                  [ BASE OF CHAIN  
3K=L    MESH           +0                  [ M FOR SHELL SORT   
3KQ=    ZK             +0                  [ K FOR SHELL SORT   
3L9W    SCRAB          +0                  [ START ADDRESS OF BUFFER
3LPG                                       [ OVERWRITING VARIABLE CORE  
3M96    XCRABBUFF                          [ SWAP AREA  
3MNQ    #REP  CRABL 
3N8B                   +0   
3NN2    STARTTAB      +0                   [ START OF TYPE AND SUBTYPE  
3P7L                                      [  TABLES IN VARIABLE CORE
3PM=    XCRABVOL       +0               [ SIZE OF CRAB AREA ON SWAP FILE
3Q6W    VCVOL            +0               [ SIZE OF VARIABLE CORE TO BE 
3QLG                                      [  SAVED = XCRABVOL+ZLPMT 
3R66    SNEXT          +0                  [ START OF NEXT CORE BLOCK (XCRABOUT)
3RKQ    TABI           +0                  [ SUBTYPE POINTER
3S5B    THREE          +3   
3SK2    X512           +512 
3T4L    XCRABL         +CRABL              [ CRABLENGTH 
3TJ=    STACTRING      +BACT+ACTRING       [ ADDRESS OF START OF ACT. RING  
3W3W    XBACT          +BACT
3WHG    XCPAT          +CPAT/#100          [ CPAT TYPE WORD 
3X36    ZLPMT          +0   
3XGQ    XLPMTYPES      +0   
3Y2B    #SKI  G4
3YG2    (   
3^F=    XBPTAB         +BPAGTAB 
3^YW ...PTAB           #230000             [ NAMCHAN POINTER FOR PTAB   
42DG    )   
42Y6    XLINK0         +0                  [ LINK ACC 0  STORAGE
43CQ    XLINK7         +0                  [ LINK ACC 7  STORAGE/X6 FOR K2PMCRAB
43XB    XLINKXCH       +0                  [ LINK STORE FOR XCHAINANAL  
44C2    XLINKWF        +0                  [ LINK STORE FOR  WFANAL 
44WL    #   
45B=    #   
45TW    #   
46*G    #      SUBROUTINE EXITS FOR 
46T6    #             XCRABSET  
47#Q    #             MOVEUP
47SB    #             XCRABOUT  
48#2    #             XVCREST   
48RL    #      ALL PASS THIS POINT  
49?=    #   
49QW    XEXIT0  
4==G          LDX   0  XLINK0(1)
4=Q6          EXIT  0  0
4?9Q    #   
4?PB    #   
4#92    #   
4#NL    #                        SUBROUTINE MINMAX  
4*8=    #   
4*MW    #                        SETS UP AREA OF CORE CORRUPTED 
4B7G    #   
4BM6    #                        LINK  X7   
4C6Q    #                        ON ENTRY X2 CONTAINS CURRENT CORRUPTED ADDRESS 
4CLB    #   
4D62    #                        ON EXIT
4DKL    #                        X245  UNDEFINED
4F5=    #   
4FJW    #   
4G4G    MINMAX  
4GJ6          TXL   2  ENDFIX              [ CURRENT ADDRESS = BACT  OR WITHIN F
4H3Q          BCS      (7)                 [ EXIT IF SO 
4HHB          SMO      FXPM1
4J32          LDX   5  CRABMIN  
4JGL          SMO      FXPM1
4K2=          LDX   4  CRABMAX  
4KFW          BNG   5  M3                  [ J IF FIRST ENTRY   
4K^G          TXL   5  2                   [ ADD > MIN ?
4LF6          BCS      M2                  [ J IF Y 
4LYQ          BPZ   4  M3                  [ J IF NOT SECOND ENTRY  
4MDB          SMO      FXPM1
4MY2          STO   5  CRABMAX             [ STORE PREVIOUS MIN INTO MAX
4NCL    M3    SMO      FXPM1
4NX=          STO   2  CRABMIN             [ STORE ADD IN MIN   
4PBW          BRN      (7)  
4PWG    M2    BNG   4  M6                  [ J IF SECOND ENTRY  
4QB6          TXL   4  2                   [ ADD > MAX ?
4QTQ          BCC      (7)  
4R*B    M6    SMO      FXPM1
4RT2          STO   2  CRABMAX             [ STORE ADD INTO MAX 
4S#L          BRN      (7)  
4SS=    #   
4T?W    #   
4TRG    #   
4W?6    #   
4WQQ    #                        SUBROUTINE VALID   
4X=B    #   
4XQ2    #                        GETS NEXT BLOCK AND VALIDATES POINTERS 
4Y9L    #                        SETS UP ADDRESSES OF CHAIN BREAKS  
4YP=    #   
4^8W    #                        LINK X0
4^NG    #   
5286    #                        ON EXIT X234567 UNDEFINED  
52MQ    #   
537B    #   
53M2    VALID   
546L          LDX   2  XSTEP(1)            [ GET ADDRESS OF NEXT BLOCK  
54L=          LDX   3  TABPNT(1)
555W          LDX   4  TABCHAN(3)   
55KG          BPZ   4  NOT1STFX2           [ J IF 1ST BLOCK FX2 SEARCH  
5656          LDCT  7  #020                [ SET  B4
56JQ          ORS   7  TABCHAN(3)   
574B          LDX   4  MASK0(1) 
57J2          ANDS  4  TABCHAN(3)          [ UNSET B0   
583L          LDX   3  0(2) 
58H=          LDX   7  1(3) 
592W          STO   7  XBACK(1) 
59GG          STO   3  REPBASE(1)   
5=26          STO   3  XCHAINBASE(1)
5=FQ          LDX   3  TABPNT(1)
5=^B    NOT1STFX2   
5?F2          LDX   6  WAY(1)   
5?YL          BPZ   6  VA2                 [ J IF FORWARD CHAINING  
5#D=          LDX   2  0(2) 
5#XW          LDX   5  1(2)                [ LOAD FPTR  
5*CG          LDX   7  0(2)                [ LOAD BPTR  
5*X6          ADN   2  BPTR 
5BBQ          STO   2  XSTEP(1) 
5BWB          SBN   2  BPTR 
5CB2          BRN      VA1  
5CTL    VA2   LDX   2  0(2) 
5D*=          LDX   5  0(2)                [ GET NEXT BLOCK FPTR
5DSW          LDX   7  1(2)                [ LOAD BPTR  
5F#G          STO   2  XSTEP(1)            [ RESET XSTEP
5FS6    VA1   TXU   5  XCHAINBASE(1)
5G?Q          BCS      NOTENDCHAIN         [ J IF ADDRESS NOT BASE OF CHAIN 
5GRB    XEXIT2  
5H?2          EXIT  0  2                   [ EXIT FOR END OF CHAIN  /DOUBLE BREA
5HQL    NOTENDCHAIN 
5J==          TXU   7  XBACK(1) 
5JPW          BCS      PRINVALID           [ J IF CHAIN BREAK   
5K9G          TXL   5  ENDFIX   
5KP6          BCS      PTSFC
5L8Q          PMCORES  5,PRINVALID         [ VALIDATE POINTER   
5LNB    POKX  STO   2  XBACK(1)            [ RESET XBACK
5M82          EXIT  0  0
5MML    PTSFC   
5MRH ...      LDCT  7  #010                [ARE WE SEARCHING ACTIVITY CHAIN 
5MXD ...      ANDX  7  TABCHAN(3)   
5N3* ...      BZE   7  PRINVALID           [NO  
5N7=          TXU   5  XBACT(1) 
5NLW          BCC      POKX 
5P6G    PRINVALID   
5PL6          CALL  7  MINMAX              [ SET UP BREAK ADDRESSES 
5Q5Q          BNG   6  XEXIT2              [ J IF DOUBLE BREAK  
5QKB          NGS   6  WAY(1)              [ SET BACKWARDS INDICATOR
5R52          EXIT  0  1                   [ EXIT FOR FIRST CHAIN BREAK 
5RJL    #   
5S4=    #   
5SHW    #   
5T3G    #   
5TH6    #                        SUBROUTINE  VALIDINIT  
5W2Q    #   
5WGB    #                        LINK  X0   
5X22    #   
5XFL    #                        ON ENTRY REQUIRES  
5X^=    #                              X3  POINTER TO TABCHAN ENTRY 
5YDW    #                              X4  TABCHAN ENTRY
5YYG    #   
5^D6    #                        ON EXIT
5^XQ    #                              X2,3,4,5  ARE CORRUPTED  
62CB    #   
62X2    #   
63BL    VALIDINIT   
63W=          LDX   5  4
64*W          SLC   5  4
64TG          BPZ   5  NOTREPADD           [ J IF NOT REPLACED ADDRESS FOR BASE 
65*6          LDX   2   REPBASE(1)  
65SQ          BRN      XCONTINUE
66#B    NOTREPADD   
66S2          LDN   2  0
67?L          DSA   4   2   
67R=    XCONTINUE   
68=W          STO   2  XCHAINBASE(1)
68QG          STO   2  XBACK(1) 
69=6          LDX   5  WAY(1)   
69PQ          BNG   5  SBACK
6=9B          LDX   5  FPTR(2)  
6=P2          TXU   5  2
6?8L          BCC      (0)                 [ END OF CHAIN -- EXIT   
6?N=          PMCORES  5,PCRUPT            [ FPTR O.K. ?
6#7W          TXL   5  ENDFIX   
6#MG          BCS      PCRUPT              [ DOES NOT POINT TO VARIABLE CORE
6*76    POK   STO   2  XSTEP(1)            [ SET XSTEP  
6*LQ          EXIT  0  1                   [ NORMAL EXIT
6B6B    PCRUPT  
6BL2          BNG   4  ZFX2CRUPT           [ FX2 SEARCH 
6C5L          TXL   2  ENDFIX              [ BASE WITHIN FC 
6CK=          BCC      SBACKX   
6D4W          LDCT  4  #100                [ SET B2 FOR USE BY XCHANBRK 
6DJG          ORS   4  TABCHAN(3)   
6F46    SBACKY  
6FHQ          LDX   6  WAY(1)              [ ALRESDY BACKWARDS  
6G3B          BNG   6  (0)                 [ DOUBLE BREAK EXIT  
6GH2          NGS   6  WAY(1)              [ SET BACKWARDS  
6H2L    SBACK LDX   5  BPTR(2)  
6HG=          PMCORES  5,PCRUPT            [ BPTR O.K. ?
6H^W          TXU   5  XCHAINBASE(1)
6JFG          BCC      (0)  
6J^6          TXL   5  ENDFIX              [ POINTS TO FC ? 
6KDQ          BCS      PCRUPT              [ DOUBLE BREAK IN BASE PAIR  
6KYB          ADN   2  BPTR                [ SET XSTEP  
6LD2          STO   2  XSTEP(1) 
6LXL          EXIT  0  1                   [ NORMAL EXIT
6MC=    SBACKX  
6MWW          CALL  7  MINMAX              [ NON FC BASE - SET UP ADDRESSESS
6NBG          BRN      SBACKY   
6NW6    ZFX2CRUPT   
6P*Q          TXU   5  XBACT(1) 
6PTB          BCC      POK  
6Q*2          LDX   5  XBACT(1)            [ SET B3 AND OVERWRITE   
6QSL          DSA   5  4                   [  ADDRESS WITH +BACT
6R#=          ANDX  4  MASK0123(1)  
6RRW          LDCT  5  #040 
6S?G          ORS   5  4
6SR6          STO   4  TABCHAN(3)   
6T=Q          BRN      NOTREPADD           [ TRY AGAIN  
6TQB    #   
6W=2    #   
6WPL    #   
6X9=    #   
6XNW    #                        SUBROUTINE  XCRABSET   
6Y8G    #   
6YN6    #                   TO CREATE CRABS AND WRITE AWAY FULL CRAB BUFFERS
6^7Q    #   
6^MB    #                        LINK X0
7272    #   
72LL    #                        ACC5  2,3,6,7  ARE DESTROYED   
736=    #   
73KW    #   
745G    #   
74K6    XCRABSET
754Q          LDX   3  XSTEP(1)            [ GET NEXT CORE BLOCK
75JB          LDX   3  0(3) 
7642          TXU   3  XBACT(1)            [ J  IF NOT BLANKET ACTIVITY 
76HL          BCS      NOTBACT  
773=          LDX   7  MASK1(1)            [ CLEAR B1 OF TABCHAN NTRY   
77GW          LDX   3  TABPNT(1)
782G          ANDS  7  TABCHAN(3)   
78G6          EXIT  0  0
78^Q    NOTBACT 
79FB          LDX   2  ZCRABBUFF(1)        [ LOAD BUFFER POINTER
79^2          STO   3  0(2)                [ STORE  ADDRESS 
7=DL    #SKI  G4
7=Y=    (   
7?CW          LDX   7  XCHAINBASE(1)
7?XG          TXU   7  XBPTAB(1)
7#C6 ...      BCS      NOTFPAG  
7*W2    YESPTAB 
7B*L          LDN   7  1024 
7BT=          STO   7  1(2) 
7C#W          STOZ     2(2) 
7CSG          STOZ     3(2) 
7D#6          STOZ     4(2) 
7DRQ          BRN      SET5MOD2 
7F?B    NOTFPAG 
7FR2    )   
7G=L          LDX   7  ASIZE(3) 
7GQ=          ANDX  7  MASK01(1)           [ CLEAR TOP 2 BITS   
7H9W          STO   7  1(2)                [        ASIZE   
7HPG          LDX   7  ALOGL(3) 
7J96          STO   7  2(2)                [        ALOGL   
7JNQ          LDX   7  AFLAG(3) 
7K8B          STO   7  3(2)                [        AFLAG   
7KN2          LDX   7  ATYPE(3) 
7L7L          STO   7  4(2)                [        ATYPE   
7LM=    #SKI  G4
7M6W    SET5MOD2
7MLG          LDX   3  TABPNT(1)
7N66          LDX   7  TABCHAN(3)   
7NKQ ...      ANDX  7  MASK(1)  
7NM^ ...      LDX    6  7   
7NQ8 ...      SRL   6  12   
7NSC ...      SBN   6  25   
7NWL ...      BZE   6  PHREE     [IGNORE INCOMPATIBLE SIZE & LOGLEN 
7NYT ...      SBN   6  1         [FOR FREE BLOCKS   
7P34 ...      BZE   6  PHREE
7P5B          LDN   6  2
7P*8 ...      SLL   6  12   
7PK2          TXL   7  6
7Q4L          BCC      NOTFREE  
7Q9S ...PHREE   
7QC3 ...      LDCT  6  #400 
7QPD ...      STO   6  2(2) 
7R3W    NOTFREE 
7RHG          LDX   6  ROWCNT(1)
7S36          DSA   6  7
7SGQ          STO   7  5(2)                [ STORE MNEMONIC/ROWCNT  
7T2B          ADN   2  CRABL
7TG2          STO   2  ZCRABBUFF(1)        [ UPDATE POSITION IN BUFFER  
7T^L          SBX   2  XCRABSTART(1)
7WF=          ADN   2  CRABL-1             [ ALLOW FOR EXACT FIT
7WYW          TXL   2  XCNT(1)             [ GET ROOM LEFT IN BUFFER
7XDG          BCS      (0)                 [ J IF TOO FULL  
7XY6          STO   0  XLINK0(1)           [ WRITE AWAY CURRENT BUFFER  
7YCQ          CALL  7  XCRABWRITE   
7YXB          BRN      XEXIT0              [ NORMAL RETURN  
7^C2    #   
7^WL    #   
82B=    #   
82TW    #   
83*G    #                        SUBROUTINE XCRABWRITE  
83T6    #   
84#Q    #      ENTRY XCRABWRITE  WRITES AWAY FULL CRAB BUFFERS (AUTONOMOUSLY)   
84SB    #                        INCREMENTS XCRABCOUNT  
85#2    #                        INCREMENTS B/S ADDRESS AND SWAPS BUFFERS   
85RL    #   
86?=    #      ENTRY XCRABWRITE1 WRITE  AWAY ANY CRAB BUFFER (AUTONOMOUSLY) 
86QW    #                        INCREMENTS XCRABCOUNT  
87=G    #                        INCRFMENTS B/S ADDRESS 
87Q6    #   
889Q    #   
88PB    #                        ON EXIT X023 ARE UNDEFINED 
8992    #                        LINK  X7   
89NL    #   
8=8=    XCRABWRITE  
8=MW          LDX   3  PERBUFF(1)          [ LOAD COUNT OF CRABS PER FULL BUFFER
8?7G          ADS   3  XCRABCOUNT(1)       [ INCREMENT COUNT
8?M6          LDN   3  1
8#6Q          ADS   3  SHIFTS(1)           [ INCREMENT COUNT FOR MOVEUP ROUTONE 
8#LB    WRITE STO   7  XLINK7(1)           [ STORE LINK 
8*62 ...      PMBSADD  SWAP,1,XCNT(1),XCRABSTART(1),SABS(1),AUTO,XBSWAPF
8*KL ...      LDX   1  FXPM2
8C4G          LDX   3  XCNT(1)             [ INCREMENT B/S ADDRESS  
8CJ6          ADS   3  SABS(1)  
8D3Q          LDX   0  SW(1)
8DHB          BNZ   0  XOUT 
8F32          LDX   3  SWITCH(1)           [ SWAP BUFFERS   
8FGL          ERX   3  XCNT(1)  
8G2=          STO   3  SWITCH(1)
8GFW          ADX   3  ZBUFSTX(1)          [ REST BUFFER POINTERS   
8G^G          STO   3  ZCRABBUFF(1)        [         POSITION IN
8HF6          STO   3  XCRABSTART(1)       [         START OF   
8HYQ    XOUT  LDX   7  XLINK7(1)           [ RETURN 
8JDB          EXIT  7  0
8JY2    XCRABWRITE1 
8KCL          LDX   3  ZCRABBUFF(1)        [ CALCULATE NO. OF CRABS 
8KX=          SBX   3  XCRABSTART(1)
8LBW          STO   3  XCNTLAST(1)         [ LENGHR OF LAST TRANSFER
8LWG          BZE   3  (7)  
8MB6          DVS   2  XCRABL(1)
8MTQ          ADS   3  XCRABCOUNT(1)       [ INCREMENT COUNT
8N*B          LDN   3  1
8NT2          STO   3  SW(1)
8P#L          BRN      WRITE
8PS=    #   
8Q?W    #   
8QRG    #   
8R?6    #   
8RQQ    #                  SUBROUTINE XCHAINANAL
8S=B    #   
8SQ2    #                   SEARCHES THRU CHAINS
8T9L    #                   VALIDATES POINTERS  
8TP=    #                   SETS UP CRABS FOR EACH CORE BLOCK   
8W8W    #                   WRITES CRABS AWAY TO B/S
8WNG    #   
8X86    #                   EXIT 0 IS NORMAL EXIT   
8XMQ    #                    BUT IF FAULTS IN SWAP-FILE ARE FOUND A 
8Y7B    #                    DIRECT RE-ENTRY TO JPMSEG IS MADE  
8YM2    #   
8^6L    #                    ALL ACCS ARE UNDEFINED ON EXIT 
8^L=    #   
925W    XCHAINANAL  
92KG          STO   0  XLINKXCH(1)         [ STORE LINK 
9356    YA    LDN   0  1                   [ INITIALISE DIRECTION   
93JQ          STO   0  WAY(1)   
944B          LDX   3  TABPNT(1)           [ GET TABLE ENTRY ADDRESS
94J2          ADN   3  1
953L          STO   3  TABPNT(1)
95H=          LDX   4  TABCHAN(3)          [ GET TABLE ENTRY
95R4 ...      BZE   4  YA   [IGNORE ZERO ENTRIES(SFC OFF CASE)  
962W          LDX   5  XTABEND(1)   
96GG          TXL   3  5                   [ J IF END OF TABLE REACHED  
9726          BCS      YXXX 
97FQ          LDX   0  XLINKXCH(1)  
97^B          EXIT  0  0
98F2    YXXX  LDX   6  STARTCNT(1)  
98YL          STO   6  ROWCNT(1)           [ RESET ROWCNT   
99D=    YC    STOZ     XBLOCKCNT(1)        [ RESET BLOCKCOUNT   
99XW          CALL  0  VALIDINIT           [ CHECK BASE OF CHAIN
9=CG          BRN      YYA                 [ CHAIN EMPTY OR DOUBLE BREAK IN BASE
9=X6                                       [                            PAIR
9?BQ    YB    CALL  0  XCRABSET            [ SET UP CRAB
9?WB          LDX   3  TABPNT(1)
9#B2          LDN   6  1
9#TL          ADS   6  XBLOCKCNT(1)        [ UPDATE BLOCKCOUNT  
9**=          LDX   4  TABCHAN(3)   
9*SW          ANDX  4  MASK(1)  
9B#G          LDN   6  6
9BS6    #SKI  G4
9C?Q    (   
9CRB          TXU   4  PTAB(1)             [ J IF N PTAB
9D?2          BCS      NOTPTAB  
9DQL          LDN   6  3                   [ SET BLOCK PER ROW = 3  
9F==    )   
9FPW    NOTPTAB 
9G9G          TXU   6  XBLOCKCNT(1) 
9GP6          BCS      ROWNOTFULL          [ J IF ROW NOT FULL  
9H8Q          STOZ     XBLOCKCNT(1)        [ RESET BLOCKCNT 
9HNB          LDN   6  1
9J82          ADS   6  ROWCNT(1)           [ AND ROWCNT 
9JML    ROWNOTFULL  
9K7=          CALL  0  VALID               [ STEP AND VALIDATE NEXT BLOCK   
9KLW          BRN      YB                  [ OK EXIT
9L6G          BRN      YD                  [ EXIT FOR 1ST BREAK 
9LL6    YYA   LDX   4  TABCHAN(3)          [ EXIT FOR DOUBLE BREAK/END OF CHAIN 
9M5Q          SLC   4  1
9MKB          BNG   4  NOTFNDBLANK         [ J IF B1 OF ENTRY SET   
9N52          BRN      YA   
9NJL    NOTFNDBLANK 
9P4=          NGS   6  WAY(1)   
9PHW          SRC   4  1
9Q3G          LDX   5  XBACT(1) 
9QH6          DSA   5  4                   [ OVERWRITE ENTRY WITH +BACT 
9R2Q          LDX   5  MASK014(1)   
9RGB          ANDS  5  4                   [ UNSET B01  
9S22          STO   4  TABCHAN(3)   
9SFL    YD    LDX   4  XBLOCKCNT(1) 
9S^=          BZE   4  NOTINC   
9TDW          LDN   4  1
9TYG          ADS   4  ROWCNT(1)           [ INCREMENT ROWCNT   
9WD6    NOTINC  
9WXQ          LDX   4  TABCHAN(3)   
9XCB          BRN      YC   
9XX2    #   
9YBL    #   
9YW=    #   
9^*W    #   
9^TG    #                   SUBROUTINE  WFANAL  
=2*6    #   
=2SQ    #                   SETS UP CRABS FOR WORKFILE BLOCKS   
=3#B    #   
=3S2    #   
=4?L    #                   LINK X = 0  
=4R=    #   
=5=W    #                   ON EXIT ALL XS MAY BE UNDEFINED 
=5QG    #   
=6=6    #   
=6PQ    #   
=79B    #   
=7P2    #   
=88L    #   
=8N=    WFANAL  
=97W          STO   0  XLINKWF(1)          [ STORE LINK 
=9MG    W1    LDX   3  STACTRING(1) 
==76          LDX   6  WWAY(1)  
==LQ          BRN      W3                  [ SKIP BACKWARD POINTER CHECK
=?6B    PTRUGG  
=?L2          BPZ   6  W1A                 [ EXIT IF ALREADY BACKWARDS  
=#5L    W1B   LDX   0  XLINKWF(1)   
=#K=          EXIT  0  0
=*4W    W1A   NGS   6  WWAY(1)             [ SET BACKWARD CHAINING INDICATOR
=*JG          BRN      W1                  [ START BACKWARD CHAINING
=B46    W2    LDX   3  XSTEPWF(1)   
=BHQ          LDX   6  WWAY(1)  
=C3B          LDX   2  0(3)                [ GET RELEVANT BPTR  
=CH2          BNG   6  W2X  
=D2L          LDX   2  1(3) 
=DG=    W2X   TXU   2  XBACKWF(1)          [ TEST BACKWARD POINTER  
=D^W          BCS      PTRUGG              [ J IF INVALID   
=FFG    W3    STO   3  XBACKWF(1)          [ SAVE FOR NEXT TIME 
=F^6          LDX   2  1(3)                [ GET RELEVANT FORWARD POINTER   
=GDQ          BNG   6  W3X  
=GYB          LDX   2  0(3) 
=HD2    W3X   TXU   2  STACTRING(1)        [ END OF RING QUERY  
=HXL          BCC      W1B                 [ J IF ALL DONE  
=JC=          PMCORES  2,PTRUGG            [ POINTS WITHIN GEORGE CORE  
=JWW          TXL   2  ENDFIX              [ WITHIN FIXED CORE QUERY
=KBG          BCS      PTRUGG              [ J IF Y TO EXCEPTION ROUTINE
=KW6          STO   2  XSTEPWF(1)          [ THIS ONE IS NOW CURRENT BLOCK  
=L*Q          SBN   2  ACTRING  
=LTB          LDCH  7  ATYPE(2)            [ CPAT ??
=M*2          TXU   7  XCPAT(1) 
=MSL          BCS      W2   
=N#=          LDN   3  WORKST-TABCHAN-1(1) [ SET UP TABPNT  
=NRW          STO   3  TABPNT(1)
=P?G          LDN   4  BWORKRING(2)        [ SET UP 'CAHIN BASE'
=PR6          STO   4  REPBASE(1)   
=Q=Q          LDN   5  NAMCHAN-TABCHAN(1)  [ SET UP XTABEND 
=QQB          STO   5  XTABEND(1)   
=R=2          CALL  0  XCHAINANAL          [ CRAB THE WORKFILE RING 
=RPL          LDX   0  XBLOCKCNT(1) 
=S9=          BZE   0  W2   
=SNW          LDX   0  ROWCNT(1)
=T8G          ADN   0  1                   [ RESET ROWCNT   
=TN6          STO   0  STARTCNT(1)         [ PRESET STARTCNT
=W7Q          BRN      W2   
=WMB    #   
=X72    #   
=XLL    #   
=Y6=    #   
=YKW    #                   SUBROUTINE  MOVEUP  
=^5G    #   
=^K6    #                   TO REMOVE GAPS AT END OF CRAB BUFFERS   
?24Q    #                   IN ORDER TO MAKE THE CRABS CONTIGUOUS IN CORE   
?2JB    #   
?342    #                   LINK  X0
?3HL    #   
?43=    #                   ACC 024567 ARE UNDEFINED ON EXIT
?4GW    #   
?52G    #   
?5G6    #   
?5^Q    MOVEUP  
?64J ...#SKI  G3
?67B ...      LDX   6  FCORES   
?6=8 ...#SKI  G4
?6GL ...      LDX   6  FVARST   
?6^2          STO   6  SCRAB(1) 
?7DL          STO   0  XLINK0(1)
?7Y=          LDX   7  MULTQUERY(1) 
?8CW          BZE   7  XEXIT0              [ EXIT IF CRABL MULTIPLE OF BUFF SIZE
?8XG          LDX   5  SHIFTS(1)
?9C6          BZE   5  XEXIT0              [ EXIT IF ONLY ONE BUFFER WRITTEN AWY
?9WQ          LDX   7  SCRAB(1)            [ START ADDRESS OF VC CRAB AREA  
?=BB    MOVEA ADX   7  XLENGTH(1)   
?=W2          ADX   6  XCNT(1)             [ GET LENGTH OF BUFFER   
??*L          BCT   5  MOVEB               [ SET SHIFTS TO ALLOW FOR SHORT LAST 
??T=                                       [                              SHIFT 
?##W          LDX   4  XCNTLAST(1)  
?#SG          BZE   4  XEXIT0   
?*#6          MOVX     XCNTLAST(1)         [ LAST BUFFER .. MOVE SHORTER
?*RQ          BRN      XEXIT0              [ GO BACK TO HOME
?B?B    MOVEB MOVX     XCNT(1)             [ MOVE LOTS OF WORDS 
?BR2          BRN      MOVEA
?C=L    #   
?CQ=    #   
?D9W    #   
?DPG    #   
?F96    #                             SUBROUTINE SHELLSORT  
?FNQ    #   
?G8B    #                          REF. ACM COMMUNICATIONS  
?GN2    #                              VOL. 2   NO. 7   
?H7L    #   
?HM=    #                           ON ENTRY ONLY ACC 1 NEED BE DEFINED 
?J6W    #                           ON EXIT  ONLY ACC 1 IS STILL DEFINED
?JLG    #   
?K66    #                           ACC 5 IS USED FOR  I
?KKQ    #                           ACC 6 IS USED FOR  J
?L5B    #                           ACC 7 IS THE LINK ACC   
?LK2    #   
?M4L    #                     THE AREA STARTING  XCRABBUFF IS   
?MJ=    #                     USED WHEN SWAPPING  CRABS 
?N3W    #   
?NHG    #   
?P36    #   
?PGQ    SHELLSORT   
?Q2B          LDX   4  XCRABCOUNT(1)       [ GET N  
?QG2    MESHHALVE   
?Q^L          SRL   4  1                   [  GET M = [M/2] 
?RF=          BZE   4  (7)                 [  M=0?  
?RYW          STO   4  MESH(1)  
?SDG          LDX   0  XCRABCOUNT(1)
?SY6          SBX   0  4
?TCQ          STO   0  ZK(1)               [  K=N-M 
?TXB          LDN   6  0                   [  J=0   
?WC2    SETI  LDX   5  6                   [  I=J   
?WWL    TEST  LDX   3  SCRAB(1) 
?XB=          LDX   2  5
?XTW          MPA   2  XCRABL(1)           [  GET ADDRESS OF ITH KEY IN X3  
?Y*G          LDX   4  0(3)                [  GET ITH KEY IN X4 
?YT6          LDX   0  3                   [  ITH KEY IN X0 
?^#Q          LDX   2  MESH(1)  
?^SB          MPA   2  XCRABL(1)           [  GET ADD OF (I+M)TH KEY IN X3  
#2#2          TXL   4  0(3)                [  J  IF  R(I)  < OR =  R(I+M)   
#2RL          BCS      STEPJ
#3?=          LDX   2  3                   [  STORE  AWAY  F(I+M)   
#3QW          LDN   3  XCRABBUFF(1) 
#4=G          MOVE  2  CRABL
#4Q6 ...      LDX   3  2                   [  MOVE  F(I) TO F(I+M)  
#59Q          LDX   2  0
#5PB          MOVE  2  CRABL
#692          LDN   2  XCRABBUFF(1)        [  MOVE  F(I+M)  TO  F(I)
#6NL          LDX   3  0
#78=          MOVE  2  CRABL
#7MW          SBX   5  MESH(1)             [  I =I-M
#87G          BPZ   5  TEST                [  CONTINUE ORDERING SUBSET ?
#8M6    STEPJ ADN   6  1                   [  J=J+1 
#96Q          LDX   4  MESH(1)             [  RESET X4 IN CASE OF JUMP  
#9LB          TXU   6  ZK(1)               [  J=K ? 
#=62          BCC      MESHHALVE
#=KL          BRN      SETI 
#?5=    #   
#?JW    #   
##4G    #   
##J6    #   
#*3Q    #                        SUBROUTINE  XCRABOUT   
#*HB    #   
#B32    #                   TO OUTPUT FORMATTED CRABS   
#BGL    #   
#C2=    #                   USES LINK X0
#CFW    #   
#C^G    #                   ON EXIT ALL ACCS ARE UNDEFINED  
#DF6    #   
#DYQ    #   
#FDB    #   
#FY2    XCRABOUT
#GCL          STO   0  XLINK0(1)           [ STORE LINK 
#GX=          CALL  7  (JPRINT)              [ THROW UP PAGE
#HBW          PMESSAGE XHEAD(1),13         [ MAIN HEADING   
#HWG          CALL  7  (JPRINT2)
#JB6          PMESSAGE TITLES(1),27        [ SUBTITLES  
#JTQ          CALL  7  (JPRINT2)
#K*B          LDX   2  XCRABCOUNT(1)       [ GET NO.OF CRABS
#KT2          BZE   2  XEXIT0              [ J IF NONE  
#L#L    #SKI G3 
#LS=          ENDLIST  7
#M?W    #SKI  G4
#MRG          LDX   7  BINDEX   
#N?6          STO   7  SNEXT(1)            [ PRESET START ADDRESS FOR GAP TEST  
#NQQ    XLOOP CALL  7  (JUP)                 [ START THE FORMATTING 
#P=B                   +20  
#PQ2          LDX   3  SCRAB(1)            [ PRESET START OF INDIVIDUAL CRAB
#Q9L          LDX   5  0(3)                [ GET ADDRESS OF BLOCK   
#QP=          TXU   5  SNEXT(1) 
#R8W          BCC      XBLOCKFIT           [ J IF BLOCK FITS LAST BLOCK 
#RNG          TXL   5  SNEXT(1) 
#S86          BCS      XOVERLAP            [ J IF OVERLAP WITH LAST BLOCK   
#SMQ          LDN   6  XGAPMESS(1)         [ OTHERWISE THERE MUST BE A GAP  
#T7B          LDX   7  JPMOD
#TM2          MVCH  6  47                  [ PUT MESSAGE INTO BUFFER
#W6L          CALL  7  (JUP)
#WL=                   +35  
#X5W          STO   5  0                   [ CALCULATE GAP  
#XKG          SBX   5  SNEXT(1) 
#Y56          STO   0  SNEXT(1)            [ RESET SNEXT TO GIVE FIT NEXT TIME  
#YJQ          CALL  7  (JDECN)               [ PUT GAP INTO BUFFER  
#^4B          CALL  7  (JPRINT2)             [ PRINT THE LINE   
#^J2          CALL  7  (JPRINT1)
*23L          BRN      XLOOP               [ HAVE ANOTHER  TRY  
*2H=    XOVERLAP
*32W          STO   5  SNEXT(1)            [ RESET SNEXT TO GIVE FIT NEXT TIME  
*3GG          PMESSAGE XOVERMESS(1),7      [ OVERLAP MESSAGE OUTPUT 
*426          CALL  7  (JPRINT1)
*4FQ          BRN      XLOOP               [ HAVE ANOTHER TRY   
*4^B    XBLOCKFIT   
*5F2          CALL  7  (JDECN)               [ PUT START ADDRESS INTO BUFFER
*5YL          CALL  7  (JUP)
*6D=                   +6   
*6XW          LDX   3  SCRAB(1)            [ GET THE BLOCK'S ATYPE WORD 
*7CG          LDCH  2  4(3)                [ BITS 0-5   
*7X6          MPY   2  THREE(1)            [ GET MNEMONIC FROM PMTYPES  
*8BQ          ADX   3  STARTTAB(1)  
*8WB          LDX   4  JPMOD
*9B2          LDN   6  #20  
*9TL          LDN   2  8
*=5D ...      LDX   7  2(3)           [GET SUBTYPE PTR  
*=*=    XLOOPSP 
*=SW          LDCH  5  0(3) 
*?#G          TXU   5  6
*?S6 ...      BCC      XNOSP
*#?Q          MVCH  3  1
*#RB          BCT   2  XLOOPSP  
**?2 ...XNOSP BNG   7  T2   
*D8Q          BZE   7  T2   
*DNB          STO   7  TABI(1)  
*F82          LDN   7  31                  [ INSERT / INTO BUFFER   
*FML          LDX   3  4                   [ GET UPDATED JPMOD  
*G7=          DCH   7  0(3) 
*GLW          BCHX  3  £
*H6G          STO   3  JPMOD
*HL6          LDX   2  SCRAB(1)            [ GET THE BLOCK'S ATYPE WORD 
*J5Q          BCHX  2  £                   [ BITS 6-11  
*JKB          LDCH  7  4(2) 
*K52          LDXC  4  TABI(1)             [ GET THE SUBTYPE ENTRY FROM PMTYPE  
*KJL          BCS      T3                  [ J IF B0 WAS SET
*L4=          BZE   4  T3                  [ J IF NOW ZERO  
*LHW          STOZ     3                   [ GET ADDRESS OF SUBTYPE TABLE RQRD. 
*M3G          SRC   34 12   
*MH6          SRL   3  12   
*N2Q          ADX   3  STARTTAB(1)  
*NGB    T5    LDCH  6  0(3)                [ SEARCH FOR THIS SUBTYPE
*P22          TXU   6  7
*PFL          BCC      T4                  [ J IF FOUND 
*P^= ...      ADN   3  3
*QDW ...      SBN   4  3
*QYG          BNZ   4  T5                  [ CONTINUE SEARCH
*R4C ...#   
*R8# ...#      TO MOVE 'NOT LISTED ' INTO THE BUFFER
*R#9 ...#   
*RD6    T7    LDN   3  NOTLISTED(1)        [ NOTFOUND OR TYPE WRONG ?!? 
*RXQ ...      BCHX  3  £                    [X3 POINTS TO THE 1ST CHAR OF 'NOT L
*SCB          LDX   4  JPMOD
*SX2 ...      MVCH  3  11                   [MOVE 'NOT LISTED' INTO BUFFER  
*TBL          BRN      T2   
*TDJ ...#   
*TGG ...#      TO MOVE SUBTYPE MNEMONIC INTO THE BUFFER 
*TJD ...#   
*TLB ...T4    BCHX  3  £                    [X3 POINTS TO THE 1ST CHAR OF SUBTYP
*TN# ...      LDX   4  JPMOD
*TQ= ...      MVCH  3  7                    [MOVE SUBTYPE MNEMONIC INTO BUFFER  
*TS8 ...      BRN      T2   
*TW=    T3    BNZ   7  T7                  [ J FOR ?!? SUBTYPE  
*W*W    T2    LDX   7  JLPMOD   
*WTG          STO   7  JPMOD
*X*6          CALL  7  (JUP)                 [ CONTINUE FORMATTING  
*XSQ                   +58  
*Y#B          LDX   3  SCRAB(1)            [ GET THE ROW/POINTER WORD FROM CRAB 
*YS2          LDX   2  5(3) 
*^?L          LDN   5  0
*^R=          DSA   2  5                   [ PUT ROWCNT INTO X5 
B2=W          SRL   2  12                  [ PUT TABCHAN POINTER INTO X2
B2QG          SMO      FXPM2
B3=6          LDX   0  NAMCHAN(2)          [ PUT MNEMONIC INTO X0   
B3PQ          CALL  7  (JDECN)               [ PUT ROWCNT INTO BUFFER   
B49B          CALL  7  (JUP)                 [ RESET BUFFER POINTER 
B4P2                   -10  
B58L          STOZ     6                   [ MOVE MNEMONIC INTO BUFFER  
B5N=          LDX   7  JPMOD
B67W          MVCH  6  4
B6MG          CALL  7  (JUP)                 [ CONTINUE FORMATTING  
B776                   +18  
B7LQ          LDX   3  SCRAB(1)            [ GET THE AFLAG WORD OF BLOCK
B86B          LDX   5  3(3) 
B8L2          ANDN  5  #12                 [ MASK OUT ALL BUT  B20 AND B22  
B95L          SLL   5  20                  [ GET B20 TO B0  
B9K=          BPZ   5  NOTLOCK             [ J IF NOT A LOCKED BLOCK
B=4W          LDX   2  JPMOD
B=JG          LDN   7  #54  
B?46          DCH   7  0(2)                [ PUT A 'L' INTO BUFFEE  
B?HQ    NOTLOCK 
B#3B          CALL  7  (JUP)                 [ CONTINUE FORMATTING  
B#H2                   +7   
B*2L          SLL   5  2                   [ GET B22 TO B0  
B*G=          BPZ   5  NOTFROZ             [ J IF NOT A FROZEN BLOCK
B*^W          LDX   2  JPMOD
BBFG          LDN   7  #46  
BB^6          DCH   7  0(2)                [ PUT A 'F' INTO BUFFER  
BCDQ    NOTFROZ 
BCYB          CALL  7  (JUP)
BDD2                   +7   
BDXL          LDX   3  SCRAB(1)            [ GET BLOCK'S ASIZE WORD 
BFC=          LDX   5  1(3) 
BFWW          CALL  7  (JDECN)               [ PUT SIZE INTO BUFFER 
BGBG          LDX   3  SCRAB(1) 
BGNX ...      LDXC  6  2(3)                [ GET BLOCK'S ALOGLEN WORD   
BH3# ...      BCS      XLENOK   
BH*Q          ADN   6  9
BHTB          TXL   5  6                   [ J IF ASIZE > ALOGLEN + 9  IE OK
BJ*2          BCC      XLENOK   
BJSL          LDN   2  XLESS(1)            [ INSERT  <<< INTO BUFFER
BK#=          LDX   3  JPMOD
BKRW          MVCH  2  4
BL?G    XLENOK  
BLR6          CALL  7  (JUP)                 [ CONTINUE FORMATTING  
BM=Q                   +5   
BMQB          LDX   3  SCRAB(1)            [ GET ALOGLEN BACK   
BN=2 ...      LDXC  5  2(3) 
BNPL          CALL  7  (JDECN)               [ PUT ALOGLEN INTO BUFFER  
BP9=          CALL  7  (JPRINT1)             [ ! PRINT THE LINE !   
BPNW          LDX   0  XCRABCOUNT(1)       [ DECREMENT COUNT
BQ8G          SBN   0  1
BQN6          STO   0  XCRABCOUNT(1)
BR7Q          LDX   3  SCRAB(1) 
BRMB          LDX   5  0(3) 
BS72          ADX   5  1(3) 
BSLL          STO   5  SNEXT(1)            [ CALCULATE SUPPOSED START OF NEXT BK
BT6=          ADN   3  CRABL               [ INCREMENT POINTER FOR NEXT CRAB
BTKW          STO   3  SCRAB(1) 
BW5G          BNZ   0  XLOOP               [ ANY MORE TO DO ?   
BWK6          BRN      XEXIT0              [ AND RETURN 
BX4Q    #   
BXJB    #   
BY42    #   
BYHL    #   
B^3=    #                   SUBROUTINE  XVCREST 
B^GW    #   
C22G    #                   TO RESTORE VARIABLE CORE FROM THE SWAP FILE 
C2G6    #   
C2^Q    #                   LINK X0 
C3FB    #   
C3^2    XVCREST 
C4DL          STO   0  XLINK0(1)            [ SAVE LINK 
C4ND ...#SKI  G3
C4Y=          PMBSADD  SWAP,0,VCVOL(1),FCORES,SABS(1)   
C4^^ ...#SKI  G4
C576 ...      PMBSADD  SWAP,0,VCVOL(1),FVARST,SABS(1)   
C5CW          LDN   7  1
C5XG          SMO      FXPMDR   
C6C6          STO   7  JVARCRUPT           [ UNSET  MT FAIL SWITCH  
C6WQ          LDX   7  JSWAPDR  
C7BB          SMO      FXPM1
C7W2          LDN   6  JSWAPDRST
C838 ...XBUSY   
C88B ...      JBUSY 7,XBUSY 
C8*L          MOVE  6  K53-K50              [ RESTORE SWAP FILE DEVICE RECORD   
C8KD ...      LDX   1  FXPM2
C8T=          BRN      XEXIT0   
C9#W    #   
C9SG    #   
C=#6    #   
C=RQ    #   
C??B    #   
C?R2    #   
C#=L    #                   SUBROUTINE  XCHANBRK
C#Q=    #   
C*9W    #                   TO PRINT AREAS OF CORE AROUND CHAIN BREAKS  
C*PG    #   
CB96    #                   LINK X0 - NOT USED SINCE DIRECT RETURN  
CBNQ    #   
CC8B    #                   ALL ACCS UNDEFINED ON EXIT  
CCN2    #   
CD7L    XCHANBRK
CDM=          STO   0  XLINK0(1)
CF6W          LDN   2  WORKST(1)
CFLG          STO   2  XTABEND(1)   
CG66          LDN   2  TABCHAN-1(1)        [ SET  TABCHAN POINTER   
CGKQ    ZA    ADN   2  1
CH5B          TXL   2  XTABEND(1)   
CHK2          BCC      XEXIT0              [ J IF TABLE FINISHED
CJ4L          LDCT  6  #140                [ GRAB BITS 2 AND 3  
CJJ=          ANDX  6  0(2) 
CK3W          BZE   6  ZA                  [ EITHER B2/3 SET ?  
CKHG          LDX   5  0(2)                [ Y -> LOAD WHOLE ENTRY  
CL36          SLL   6  2                   [ CHECK B2   
CLGQ          BPZ   6  ZB                  [ J IF NOT SET   
CM2B          STO   6  XLINKXCH(1)         [ SAVE X6
CMG2          ANDN  5  #7777               [ GRAB ADDRESS   
CM^L          CALL  0  XDUBOUT             [ OUTPUT MESSAGE 
CNF=          LDX   6  XLINKXCH(1)         [ RECOVER X6 
CNYW    ZB    SLL   6  1                   [ CHECK B3   
CPDG          BPZ   6  ZA                  [ J IF NOT SET   
CPY6          LDN   5  FX2                 [ GET ADDRESS OF +FX2
CQCQ          CALL  0  XDUBOUT             [ OUTPUT MESSAGE 
CQXB          BRN      ZA                  [ GET NEXT TABCHAN NTRY  
CRC2    XDUBOUT                            [ ROUTINE TO OUTPUT 'FIXED CORE..'   
CRWL          LDN   3  XFCCRUPT(1)  
CSB=          LDX   4  JLPMOD   
CSTW          MOVE  3  8                   [ PUT MESSAGE INTO BUFFER
CT*G          CALL  7  (JUP)
CTT6                   +33  
CW#Q          CALL  7  (JDECN)               [ PUT ADDRESS INTO BUFFER  
CWSB          CALL  7  (JPRINT2)             [ PRINT IT 
CX#2          EXIT  0  0
CXRL    #   
CY?=    #   
CYQW    #   
C^=G    #   
C^Q6    #                                      MAIN ENTRY POINT 
D29Q    #   
D2PB    #   
D392    #   
D3NL    XK1PMCRABS  
D48=    #   
D4MW          LDX   1  FXPM2
D4RR ...      SMO      FXPMDR   
D4XN ...      LDX   3  BEGINCRAB
D53K ...      STO   3  SABS(1)  
D57G    #   
D5M6    #     CALCULATE TOTAL LENGTH OF TYPE/SUBTYPE TABLES 
D66Q    #   
D6LB          PMDLGET  PMTYPES,6,3  
D762          STO   3  XLPMTYPES(1)        [ LENGTH OF TYPES ONLY   
D7KL          PMDLGET  PMSUBSC,7,3  
D85=          SBX   7  6
D8JW          ADX   7  3
D94G          STO   7  ZLPMT(1)            [ LENGTH OF TYPES AND SUBTYPES   
D9J6    #   
D=3Q    #     DATUMISE ADDRESSES
D=HB    #   
D?32          ADS   1  ZBUFSTX(1)   
D?GL          ADS   1  XCRABSTART(1)
D#2=          ADS   1  TABPNT(1)
D#FW          ADS   1  XTABEND(1)   
D#^G          ADS   1  ZCRABBUFF(1) 
D*F6    #   
D*YQ    #     SET UP CRAB BUFFERS   
DBDB    #   
DBY2          LDX   5  ENDFIX   
DCCL          SBX   5  ZBUFSTX(1)   
DCX=          SRL   5  1                   [ GET HALF REMAINING SPACE   
DDBW          DVS   4  XCNT(1)  
DDWG          MPY   5  XCNT(1)  
DFB6          STO   6  XCNT(1)             [ GET HIGHEST MULTIPLE OF 128 WORDS  
DFTQ          LDN   4  CRABL
DG*B          DVS   5  4
DGT2          STO   6  PERBUFF(1)          [ CALCULATE CRABS PER BUFFER 
DH#L          BNZ   5  NOTMULT  
DHS=          STOZ     MULTQUERY(1)        [ SET FOR EXACT MULTIPLE 
DJ?W    NOTMULT 
DJRG          MPY   6  4
DK?6          STO   7  XLENGTH(1)          [ GET ABTUAL LENGHT OCCUPIED 
DKC3 ...      SMO      FXPM1
DKGY ...      LDX   0  BINDEXCONT   
DKLT ...      STO   0  BINDEX   
DKQQ          CALL  0  XCHAINANAL          [ CRAB NORMAL CHAINS + ACTIVITY CHAIN
DKWM ...      SMO      FXPM1
DL2J ...      LDN   0  CCTABLESTRE-A1   
DL6F ...      STO   0  BINDEX   
DL=B          CALL  0  WFANAL              [ CRAB WORKFILE RINGS
DLQ2          CALL  7  XCRABWRITE1         [ WRITE AWAY LAST BUFFER 
DM9L          LDX   7  SABS(1)  
DMBS ...      SMO      FXPMDR   
DMJ2 ...      SBX   7  BEGINCRAB
DMP=          STO   7  XCRABVOL(1)  
DN8W          ADX   7  ZLPMT(1)            [ CALCULATE CRABAREA+SIZE OF(PMTYPE5+
DNNG          STO   7  VCVOL(1) 
DNXK ...#SKI  G3
DP6N ...      PMBSADD  SWAP,1,VCVOL(1),FCORES,SABS(1),,XBSWAPF  [ WRITE AWAY VAR
DP*R ...#SKI  G4
DQ34 ...      PMBSADD  SWAP,1,VCVOL(1),FVARST,SABS(1),,XBSWAPF  [ WRITE AWAY VAR
DR6L          LDX   1  FXPM2
DRL=          SMO      FXPMDR   
DS5W          LDX   7  JVARCRUPT
DSKG          SMO      FXPMDR   
DT56          NGS   7  JVARCRUPT           [ SET MT SWITCH IN CASE OF MT FAILURE
DTJQ    #   
DW4B    #     READ TYPE AND SUBTYPE TABLES INTO VARIABLE CORE FOLLOWING 
DWJ2    #     AREA RESERVED FOR CRABS   
DX3L    #   
DXH=          LDX   0  XCRABVOL(1)  
DXR4 ...#SKI  G3
DY2W          ADX   0  FCORES   
DY4K ...#SKI  G4
DY9Q ...      ADX   0  FVARST   
DYGG          STO   0  STARTTAB(1)         [ CALC. START ADDRESS OF PMTYPES 
D^26          ADX   0  XLPMTYPES(1)        [ CALC. START ADDRESS OF OMSUBSA 
D^FQ          PMSUBSREAD                   [ READ SUBTYPES INTO CORE
D^^B          LDX   1  FXPM2
F2F2          PMOVE    PMTYPES,STARTTAB(1) [ READ TYPES INTO CORE   
F2YL          LDX   1  FXPM2
F3D=    #   
F3XW    #     READ CRABS FROM SWAPFILE INTO VARIABLE CORE   
F4CG    #   
F4G5 ...      SMO      FXPMDR   
F4JN ...      LDX   0  BEGINCRAB
F4M# ...#SKI  G3
F4X6          PMBSADD  SWAP,0,XCRABVOL(1),FCORES,0  
F4YT ...#SKI  G4
F562 ...      PMBSADD  SWAP,0,XCRABVOL(1),FVARST,0  
F5BQ          LDX   1  FXPM2
F8S6    #   
F9?Q          CALL  0  MOVEUP              [ GET RID OF END OF BUFFER GAPS  
F9RB          CALL  7  SHELLSORT           [ SORT THE CRABS INTO ADDRESS SEQUENC
F=?2          CALL  0  XCRABOUT            [ OUTPUT FORMATTED CRABS 
F=QL          CALL  0  XVCREST             [ RESTORE CORRUPTION 
F=S3 ...#   
F=TD ...#     RESET BINDEX AND JAFDTP TO IT'S ORIGINAL VALUE
F=WT ...#   
F=Y= ...      SMO      FXPM1
F=^M ...      LDX   0  BINDEXCONT   
F?34 ...      STO   0  BINDEX   
F?4F ...      SMO      FXPM1
F?5W ...      LDX   0  AFDTPDUMP
F?7? ...      SMO      FXPMDR   
F?8N ...      STO   0  JAFDTP   
F?==          CALL  0  XCHANBRK            [ ANY FIXED CORE WRONG ?,
F?PW          LDX   1  FXPM1
F#9G          EXIT  1  K2PMBRKCHS          [ BYE-BYE
F#P6    #   
F*8Q    #     ROUTINE TO ABANDON CRABS IF SWAPFILE TOO SMALL
F*NB    #   
FB82    XBSWAPF 
FBML          LDX   1  FXPM2
FC7=          PMESSAGE MESS(1),15          [ OUTPUT EXPLANATION 
FC9F ...      SMO      FXPM1
FC?N ...      LDX   0  BINDEXCONT   
FC*X ...      STO   0  BINDEX   
FCD6 ...      SMO      FXPM1
FCG* ...      LDX   0  AFDTPDUMP
FCHT ...      SMO      FXPMDR   
FCK* ...      STO   0  JAFDTP   
FCLW          BRN      (JPMSEG)            [ AND QUIT.  
FD6G    #   
FDL6    #   
FF5Q    #         THIS ENTRY POINT IS USED IF MT FAIL OCCURS WHEN VC
FFKB    #         IS IN A CORRUPTED STATE   
FG52    #   
FGJL    #   
FH4=    XK2PMCRABS  
FHHW          LDX   1  FXPM2
FJ3G          STO   6  XLINK7(1)
FJH6          CALL  0  XVCREST  
FJK4 ...      SMO      FXPM1
FJM2 ...      LDX   0  BINDEXCONT   
FJNY ...      STO   0  BINDEX   
FJQW ...      SMO      FXPM1
FJSS ...      LDX   0  AFDTPDUMP
FJWQ ...      SMO      FXPMDR   
FJYN ...      STO   0  JAFDTP   
FK2Q ...      LDX   6  XLINK7(1)
FKGB          EXIT  6  0                   [ RETURN TO PMDUMPA  
FL22    ZBUFST  
FLFL    #END
^^^^ ...053676030028