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