{{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