{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: PMCRABS860)}} ====== PMCRABS860 ====== (George Source) **Macros used:** [[george:macro:ADDRESS|ADDRESS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:ENDLIST|ENDLIST]], [[george:macro:JBUSY|JBUSY]], [[george:macro:MASK|MASK]], [[george:macro:MOVX|MOVX]], [[george:macro:ON|ON]], [[george:macro:PMBSADD|PMBSADD]], [[george:macro:PMCORES|PMCORES]], [[george:macro:PMDLGET|PMDLGET]], [[george:macro:PMESSAGE|PMESSAGE]], [[george:macro:PMOVE|PMOVE]], [[george:macro:PMSUBSREAD|PMSUBSREAD]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SWAP|SWAP]], [[george:macro:TEST|TEST]] 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