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