{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: FINDFS867)}}
====== FINDFS867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CLOSEWR|CLOSEWR]], [[george:macro:DOWN|DOWN]], [[george:macro:EXOFILE|EXOFILE]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FSHSKIP|FSHSKIP]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GEOSTOP|GEOSTOP]], [[george:macro:HUNT2|HUNT2]], [[george:macro:HUNTW|HUNTW]], [[george:macro:LADDP|LADDP]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFINDSU|MFINDSU]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:OPENST|OPENST]], [[george:macro:READST|READST]], [[george:macro:RELST|RELST]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETALLOC|SETALLOC]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETUPCORE|SETUPCORE]], [[george:macro:TESTREP|TESTREP]], [[george:macro:TESTREPNOT|TESTREPNOT]], [[george:macro:UNLOCKSU|UNLOCKSU]], [[george:macro:UP|UP]]
22FL #SEG FINDFS70 [FRANK BLUNDELL
22^= #LIS K0FINDFS
23DW # (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982
23YG 8HFINDFS
24D6 #
24XQ # THIS CHAPTER SETS UP THE ALFTABLE AND FDTABLE IN THE
25CB # INDEX CHAIN
25X2 # INFORMATION ABOUT THE FILES IS OBTAINED FROM A BSTB/FSTAB
26BL # BLOCK SET UP BY FSTABLE
26W= # FORMAT OF RECORDS:-
27*W #
27TG #
28*6 # WORD0 ]
28SQ # 1 ] 12 CHARACTER FILENAME
29#B # 2 ]
29S2 # 3 B0-B5 DEVICE TYPE (6,9,13,25 (7?))
2=?L # B6 SWAP FILE BIT
2=R= # B7-B17 NOT USED
2?=W # B18-B23 LOGICAL FILE NUMBER
2?QG # 4 B6-B23 SERIAL NUMBER IF SPECIFIED AND DISC
2#=6 # ZERO IF DRUM
2#PQ #
2*9B #
2*P2 SEGENTRY K1FINDFS,QK1FINDFS
2B8L #
2BN= #
2C7W XERR1 +24
2CMG 24HNO FILESTORE DESCRIPTION
2D76 XN1 #77000000
2DLQ XSUITA +FIFSFAS [ >1 FILE AREA
2F6B XSUITB +FIFSFIC [FIC SEPARATED FROM FILE AREA
2FL2 XSUITC +FIFSRET [RETENTION PEROOD NOT EXPIRED
2G5L XSUITD +FIFSSYF [SYFLE BIT SET
2GK= XSUITE +FIFSBUCK [BUCKET > 1 BLOCK
2H4W #
2HJG #
2J46 #
2JHQ XR1 LDX 1 FX1
2K3B GEOSTOP XERR1(1) [NO FILESTORE
2KH2 #
2L2L #
2LG= QK1FINDFS
2L^W MHUNTW 1,BSTB,FSTAB
2MFG STOZ AWORK1(2) [USED FOR FDTABLE ALTLEN COUNT
2M^6 LDX 0 FIRSS+3(1)
2NDQ BZE 0 XR1 [JUMP IF NO FILESTORE
2NYB LDN 6 0
2PD2 LDN 7 0
2PXL Z2 SMO 7
2QC= LDX 0 FIRSS+3(1) [CALCULATE CORE REQUIRED
2QWW BZE 0 Z3 [NO MORE
2RBG LDX 4 0 [FOR ALFTABLE,FDTABLE
2RW6 ANDN 4 #77 [LFN
2S*Q SRL 0 18 [TYPE
2STB ADN 6 3
2T*2 SBN 0 9
2TSL BZE 0 Z1 [JUMP IF 1964 DRUM
2W#= SBN 0 16
2WRW BZE 0 Z1 [JUMP IF 2851 DRUM
2X?G ADN 6 3
2XR6 Z1 ADN 7 FIRLEN
2Y=Q BRN Z2
2YQB Z3 SETUPCORE 6,3,BSTB,FDTABLE
2^=2 ADN 4 1
2^PL SLL 4 1
329= SETUPCORE 4,3,BSTB,ALFTABLE
32NW NGN 1 1 [SET ALL WORDS -VE
338G STO 1 A1(3)
33N6 ADX 1 4
347Q LDN 4 A1+1(3)
34MB ADN 3 A1
3572 MOVE 3 0(1)
35LL SETNCORE GEXDLEN,3,EWDAS,GEXD
366= LDN 6 0 [USED FOR FDTABLE POINTER
36KW LDN 7 0 [USED FOR MEND AREA POINTER
375G Z4 MHUNTW 1,BSTB,FSTAB
37K6 SMO 7
384Q LDX 0 FIRSS+3(1)
38JB BZE 0 XEND [JUMP-NO MORE DESCRIPTIONS
3942 SRL 0 18
39HL SBN 0 6
3=3= BZE 0 T1
3=GW SBN 0 7
3?2G BZE 0 T1 [JUMP IF DISC
3?G6 #
3?^Q #
3#FB # DRUM PART
3#^2 #
3*DL SETNCORE BBUFF+129-A1,3,EWDAS,FDRUM
3*Y= MHUNTW 1,BSTB,FSTAB
3BCW SMO 7
3BXG LDX 0 FIRSS+3(1)
3CC6 SMO FX1
3CWQ ANDX 0 XN1
3DBB STO 0 AGTYPE(3)
3DW2 ADN 3 ANAME
3F*L SMO 7
3FT= LDN 2 FIRSS(1)
3G#W MOVE 2 3 [MOVE IN FILENAME
3GSG U9 DOWN FINDRUM,1 [FIND THE FILE
3H#6 TESTREPNOT OK,S1 [JUMP IF ERROR
3HRQ MHUNTW 3,EWDAS,FDRUM
3J?B MHUNTW 2,BSTB,FDTABLE
3JR2 MHUNTW 1,BSTB,FSTAB
3K=L LDX 0 AGTYPE(3)
3KQ= SMO 6
3L9W STO 0 A1(2) [TYPE
3LPG LDX 0 EXBSP+1(3)
3M96 SMO 6
3MNQ STO 0 A1+1(2) [DATUM
3N8B LDX 0 EXBSP+2(3)
3NN2 SMO 6
3P7L STO 0 A1+2(2) [LENGTH
3PM= SMO 7
3Q6W LDX 4 FIRSS+3(1)
3QLG ANDN 4 #77
3R66 MHUNTW 1,BSTB,ALFTABLE [CHECK IF FILE USED BEFORE
3RKQ R2 LDX 5 A1(1)
3S5B BNG 5 R1 [NON EXISTANT
3SK2 ANDN 5 #7777
3T4L SMO 5
3TJ= LDX 0 A1+1(2)
3W3W SMO 6
3WHG TXU 0 A1+1(2)
3X36 BCS R1 [JUMP IF DATUM DIFFERENT
3XGQ LDX 0 A1(1)
3Y2B SRL 0 12
3YG2 ANDN 0 #1777 [CHECK BSUN
3Y^L TXU 0 EXBSP(3)
3^F= BCC S4 [JUMP - FILE USED BEFORE
3^YW R1 ADN 1 2
42DG BCT 4 R2
42Y6 MHUNTW 1,BSTB,FSTAB
43CQ LDX 4 EXBSP(3) [B.SUN
43XB SLL 4 12
44C2 DSA 6 4 [FDTABLE POINTER
44WL LDCT 0 4 [GET SWAP BIT
45B= SMO 7
45TW ANDX 0 FIRSS+3(1)
46*G SLL 0 5
46T6 ORX 4 0
47#Q SMO 7
47SB LDX 0 FIRSS+3(1)
48#2 LDX 5 0
48RL SRL 0 18 [X0= TYPE
49?= ANDN 5 #77 [X5= LFN
49QW LDX 2 EXBSP+2(3) [LENGTH
4==G SBN 0 25
4=Q6 BZE 0 R3 [JUMP IF 2851
4?9Q SRL 2 7 [SHIFT TO BLOCKLETS
4?PB R3 STO 5 BLMP
4#92 SLL 5 1
4#NL [SET UP ALFTABLE ENTRY
4*8= MHUNTW 1,BSTB,ALFTABLE
4*MW SMO 5
4B7G STO 4 A1(1)
4BM6 SMO 5
4C6Q STO 2 A1+1(1)
4CLB ADN 7 FIRLEN [UPDATE POINTERS
4D62 ADN 6 3
4DKL SETALLOC ADRDLIST(3)
4F5= FREECORE 3
4FJW BRN Z4 [BACK FOR NEXT ONE
4G4G #
4GJ6 # DISC PART
4H3Q #
4HHB T1 SETNCORE FDCELLS-A1,3,EWDAS,EXOF
4J32 MHUNTW 1,BSTB,FSTAB
4JGL LDN 0 BOPEN+BSPEC
4K2= STO 0 EXMARK(3) [SET OPEN MARKERS
4KFW STOZ FIP+4(3) [GENERATION NUMBER
4K^G LDN 5 FIP(3)
4LF6 SMO 7
4LYQ LDN 4 FIRSS(1)
4MDB MOVE 4 3 [MOVE IN FILENAME
4MY2 SMO 7
4NCL LDX 4 FIRSS+4(1)
4NX= BZE 4 T2 [JUMP IF NOT SPECIFIED
4PBW STO 4 ASUSN(3)
4PWG LDN 0 BSERL+BSUPP
4QB6 ORS 0 EXMARK(3)
4QTQ T2 DOWN EXOPEN,1 [OPEN FILE
4R*B TESTREPNOT OK,S2
4RT2 MHUNTW 3,EWDAS,EXOF
4S#L [START CHECKS ON FILE
4SS= LDEX 0 FIP+5(3)
4T?W SBN 0 1
4TRG BNZ 0 S3FAREA [MUST BE ONLY ONE FILE AREA
4W?6 LDX 0 FDCELLS(3)
4WQQ TXU 0 ASUSN(3)
4X=B BCS S3ASFIC [FILE AREA MUST BE ON SAME UNIT AS FI
4XQ2 LDX 0 FIP+7(3)
4Y9L SRL 0 12 [RETENTION PERIOD
4YP= ADX 0 FIP+6(3) [DATE WRITTEN
4^8W LDX 4 EDATE
4^NG TXL 4 FIP+6(3) [CURRENT DATE < DATE LAST WRITTEN
5286 BCS RPMISS [J IF SO TO MISS RP CHECKS
52MQ TXL 4 0
537B BCS S3RETN [RETENTION PERIOD NOT EXPIRED
53M2 RPMISS
546L LDCT 0 #100
54L= ANDX 0 FIP+5(3)
555W BNZ 0 S3SYFLE [SYFLE BIT SET
55KG LDX 0 FIP+8(3)
5656 ANDN 0 #77 [BUCKET SIZE
56JQ SBN 0 1
574B BNZ 0 S3BUCK [BUCKET NOT ONE.
57J2 LDN 1 BCCB [CHECK IF THIS FILE SPECIFIED BEFORE
583L T4 LDX 1 BPTR(1)
58H= TXU 1 CXCC
592W BCC T3 [END OF CHAIN
59GG LDX 0 BACK2(1)
5=26 BZE 0 T3 [NO1MORE EXOFS
5=FQ LDX 0 ASUSN(1)
5=^B TXU 0 ASUSN(3)
5?F2 BCS T4 [JUMP IF SERIAL NUMBERS DIFFERENT
5?YL LDX 0 HOME(1)
5#D= TXU 0 HOME(3)
5#XW BCS T4 [JUMP IF BS HOMES DIFFERENT
5*CG BRN S4 [FILE USED TWICE
5*X6 T3 LDX 0 EDATE [UPDATE FIP
5BBQ STO 0 FIP+6(3) [DATE WRITTEN
5BWB LDX 0 FIP+4(3)
5CB2 ANDN 0 #7777 [VERSION NUMBER
5CTL ADN 0 1
5D*= DSA 0 FIP+4(3)
5DSW FSHSKIP B,T9
5F#G (
5FS6 LDX 2 3
5G?Q MHUNTW 3,EWDAS,GEXD
5GRB OPENST ASUSN(2) [OPEN UNIT
5H?2 READST HOME(2),T5 [READ DOWN FIP CELL
5HQL TESTREP OK,T7 [JUMP IF OK
5J== TESTREP EXFAIL,S5 [OR FAIL
5JPW T8 GEOERR 1,FSTRAN
5K9G T7 LDX 1 ECOR(3)
5KP6 T5 MHUNTW 2,EWDAS,EXOF
5L8Q ADN 1 2
5LNB LDN 0 FIP(2)
5M82 MOVE 0 15 [MOVE IN NEW FIP
5MML CLOSEWR W,HOME(2) [REWRITE FIP CELL AND CLOSE UNIT
5N7= TESTREP OK,T6 [JUMP IF OK
5NLW TESTREPNOT EXFAIL,T8
5P6G BRN S5
5PL6 T6 MHUNTW 3,EWDAS,EXOF
5Q5Q T9
5QKB )
5R52 LDN 0 1
5RJL STO 0 COPEN(3) [COUNT OF OPENS=1
5S4= LDCT 0 #500
5SHW STO 0 EXMARK(3) [OPEN FOR WRITING AND SYSTEM BITS
5T3G MFINDSU 1,ASUSN(3)
5TH6 MHUNTW 2,BSTB,FDTABLE
5W2Q [START REORGANISING FDCELL
5WGB LDX 5 ABSUN(1) [GET BSUN FOR LATER
5X22 LDX 4 HUNIT(1) [AND D.L. PTR
5XFL LDX 0 HTYPE(1)
5X^= SMO 6
5YDW STO 0 A1(2)
5YYG LDX 0 FDCELLS+1(3)
5^D6 ADX 0 ASUBASE(1) [START OF UNIT
5^XQ SMO 6
62CB STO 0 A1+1(2)
62X2 LDN 0 FDCELLS+2(3)
63BL SMO 6
63W= LDN 1 A1+2(2)
64*W MOVE 0 3
64TG NGNC 0 1
65*6 SMO 6
65SQ ANDS 0 A1+3(2)
66#B LDX 0 FDCELLS(3)
66S2 SMO 6
67?L STO 0 A1+5(2)
67R= LDX 2 4
68=W LDCT 0 #400
68QG LADDP 2,1
69=6 ORS 0 BSUNIT2(1) [SET 'IN USE BY SYSTEM' BIT
69PQ LDX 4 FDCELLS+5(3)
6=9B SBN 4 1
6=P2 EXOFILE 3 [CHAIN IN EXOF
6?8L LDX 3 ASUSN(3)
6?N= UNLOCKSU 3
6#7W RELST 3
6#MG MHUNTW 3,BSTB,ALFTABLE
6*76 SLL 5 12
6*LQ DSA 6 5 [FDTABLE POINTER
6B6B MHUNTW 1,BSTB,FSTAB
6BL2 LDCT 0 4 [SWAP BIT
6C5L SMO 7
6CK= ANDX 0 FIRSS+3(1)
6D4W SLL 0 5
6DJG SMO 7
6F46 LDX 2 FIRSS+3(1)
6FHQ ANDN 2 #77
6G3B STO 2 BLMP [LFN
6GH2 SLL 2 1
6H2L ORX 5 0
6HG= SMO 2
6H^W STO 5 A1(3) [SET UP ALFTABLE
6JFG SMO 2
6J^6 STO 4 A1+1(3)
6KDQ ADN 7 FIRLEN [UPDATE POINTERS
6KYB ADN 6 6
6LD2 BRN Z4
6LXL #
6MC= #
6MWW #
6NBG # NO MORE FILES
6NW6 # RECHAIN BLOCKS IN INDEX CHAIN ,ALTLEN IF NECESSARY
6P*Q #
6PTB #
6Q*2 XEND MHUNTW 3,BSTB,ALFTABLE
6QSL LDX 4 BLMP
6R#= ADN 4 1
6RRW SLL 4 1
6S?G TXL 4 ALOGLEN(3)
6SR6 BCC XE2 [JUMP IF RIGHT LENGTH
6T=Q ALTLEN 3,4
6TQB MHUNTW 3,BSTB,ALFTABLE
6W=2 XE2 CHAIN 3,BINDEX+1
6WPL MHUNTW 3,BSTB,FDTABLE
6X9= SMO FX2
6XNW NGX 4 AWORK1
6Y8G BZE 4 XE1 [JUMP IF NO FILES LOST
6YN6 ADX 4 ALOGLEN(3)
6^7Q ALTLEN 3,4
6^MB MHUNTW 3,BSTB,FDTABLE
7272 XE1 CHAIN 3,BINDEX+1
72LL MHUNT 3,EWDAS,GEXD
736= FREECORE 3
73KW MHUNTW 1,BSTB,FSTAB
745G FREECORE 1
74K6 LDN 0 1
754Q ADS 0 BLMP [BLMP CONTAINS HIGHEST LFN +1
75JB #SKI CRAB
7642 (
76HL
773= [ THE FOLLOWING SECTION IMPLEMENTS AN ENHANCEMENT TO AID POSTMORTEM
77GW [ FACILITIES. AT EMS THE LARGEST SWAP FILE IS LOCATED AND TWO
782G [ POINTERS INITIALISED. JSWAPDR WILL POINT TO THE DEVICE RECORD OF
78G6 [ THIS FILE, AND JSWAPFD WILL POINT TO THE FILE DESCRIPTION RELAT-
78^Q [ -ING TO THE SWAP FILE (IN THE FDTABLE)
79FB [
79^2 LDN 7 6 [MODIFIER INSIDE ALFTABLE
7=DL LDN 6 0 [X6 HOLDS SIZE OF LARGEST FILE
7=Y= HUNT2 3,BSTB,ALFTABLE,BINDEX
7?CW XA1 SMO 7
7?XG LDX 0 A1(3) [NEXT RECORD
7#C6 BNG 0 XA2 [MEANINGLESS IF NEGATIVE
7#WQ SLL 0 1 [SWAP BIT
7*BB BPZ 0 XA2 [JUMP IF NOT SET
7*W2 SMO 7
7B*L LDX 1 A1+1(3) [SIZE OF SWAP FILE
7BT= TXL 1 6 [COMPARE WITH LARGEST SO FAR
7C#W BCS XA2 [JUMP IF X6>X1
7CSG LDX 5 0 [RETAIN MODIFIER TO THIS RECORD
7D#6 LDX 6 1 [RETAIN SIZE
7DRQ XA2 ADN 7 2 [UPDATE MODIFIER
7F?B TXL 7 ALOGLEN(3) [TEST FOR END OF ALFTABLE
7FR2 BCS XA1
7G=L LDX 0 5
7GQ= SRL 5 1
7H9W ANDN 5 #7777
7HPG ADN 5 A1
7J96 STO 5 JSWAPFD [PTR TO FILE DESCRIPTION
7JNQ SRL 0 13
7K8B ANDN 0 #1777 [ISOLATE BSUN
7KN2 MPY 0 ASBSAB
7L7L NGX 1 1
7LM= ADX 1 BBAC
7M6W ADX 1 ASBSAB [GET PTR TO BSA
7MLG XA4 LDX 0 CPPTR(1) [LOAD PTR TO DEVICE RECORD
7N66 STO 0 JSWAPDR
7NKQ [
7P5B [
7PK2 )
7Q4L HUNTW 3,EWDAS,EWMESS
7QJ= BNG 3 XE3
7R3W FREECORE 3
7RHG #SKI JPSCF
7S36 #SKI
7SGQ XE3 UP
7T2B #SKI JPSCF
7TG2 XE3 ACROSS BRADSPLT,1
7T^L #
7WF= #
7WYW # FILE NOT SUITABLE FOR FILESTORE
7XDG # OR FILE USED TWICE
7XY6 # OUTPUT APPROPRIATE MESSAGE AND GO BACK FOR NEXT FIE
7YCQ #
7YXB S3FAREA
7^C2 SMO FX1
7^WL LDX 3 XSUITA
82B= BRN S3AB
82TW S3ASFIC
83*G SMO FX1
83T6 LDX 3 XSUITB
84#Q BRN S3AB
84SB S3RETN
85#2 SMO FX1
85RL LDX 3 XSUITC
86?= BRN S3AB
86QW S3SYFLE
87=G SMO FX1
87Q6 LDX 3 XSUITD
889Q BRN S3AB
88PB S3BUCK
8992 SMO FX1
89NL LDX 3 XSUITE
8=8= #
8=MW S3AB STO 3 AWORK2(2)
8?7G DOWN FSERR,1
8?M6 #
8#6Q # UP FROM FSERR WHEN FILE NOT AVAILABLE
8#LB #
8*62 S3AC
8*KL LDX 4 ACOMMUNE9(2) [ADJUST AWORK1 WITH AMOUNT
8B5= ADS 4 AWORK1(2) [CORE TO REMOVE FDTABLE
8BJW ADN 7 FIRLEN
8C4G BRN Z4
8CJ6 #
8D3Q S4 DOWN FSERR,2
8DHB BRN S3AC
8F32 #
8FGL # FAILURE TO OPEN FILE,OR FAIL WHILST REWRITING FIP
8G2= #
8GFW #
8G^G #
8HF6 #
8HYQ S5 DOWN FSERR,3
8JDB BRN S3AC [UP
8JY2 BRN U8 [UPPLUS 1
8KCL #
8KX= # NOT OK REPLY FROM FINDRUM
8LBW #
8LWG S1 TESTREPNOT NOTFOUND,S2A
8MB6 DOWN FSERR,7
8MTQ BRN S3AC [UP
8N*B BRN U8 [UPPLUS 1
8NT2 S2A GEOERR 1,WRNGREP
8P#L S2 TESTREPNOT EXFAIL,S2A
8PS= DOWN FSERR,4
8Q?W BRN S3AC
8QRG #
8R?6 # UPPLUS 1 FROM FSERR WHEN FILE IS AVAILABLE
8RQQ #
8S=B U8
8SQ2 MHUNTW 1,BSTB,FSTAB
8T9L SMO 7
8TP= LDX 0 FIRSS+3(1)
8W8W SRL 0 18
8WNG SBN 0 6 [EDS
8X86 BZE 0 T2
8XMQ SBN 0 7 [EDS
8Y7B BZE 0 T2
8YM2 BRN U9 [DRUMS
8^6L MENDAREA 30,K99FINDFS
8^L= #END
^^^^ ...554175650001