10 22FL SEG RAND,,FILE 4 22_= [ 20 23DW [ THIS CHAPTER IMPLEMENTS THE RANDOM ACCESS MACROS READED & WRITED. 7 23YG [ REF G.I.M. 5.6 4 24D6 [ 18 24XQ SEGENTRY K1RAND,READED [READED MACRO ENTRY POINT 18 25CB SEGENTRY K2RAND,WRITED [WRITED MACRO ENTRY POINT 4 25X2 [ 21 26BL FILETRAN [SUBROUTINES FOR FILEAUTW & FILEREAD 4 26W= [ 21 27*W SEEKFULLB [GET POINTER TO FULLB IN FILE CHAIN IN X1 GIVEN X2->FCB 19 27TG [ EXIT+0 IF NOT FOUND: EXIT+1 IF FOUND: LINK X7 15 28*6 [ X0 DESTROYED: X2-X6 UNALTERED 15 28SQ LDX 1 FPTR(2) [X1->FSTACK 5 29#B SFULLB 16 29S2 LDX 1 FPTR(1) [X1->NEXT BLOCK 19 2=?L BXE 1 CXFI,(7) [EXIT OF END OF FILE CHAIN 9 2=R= LDX 0 ATYPE(1) 16 2?=W BXE 0 FFSFCB,(7) [EXIT IF NEXT FCB 17 2?QG BXU 0 FFSFULLB,SFULLB [GO BACK IF NOT FULLB 18 2#=6 LDX 0 A1+1(1) [PICK UP RESIDENCE NUMBER 18 2#PQ BXU 0 BSPRE(2),SFULLB [GO BACK IF WRONG FULLB 13 2*9B EXIT 7 1 [OK 4 2*P2 [ 4 2B8L [ 5 2BN= READED 18 2C7W [ [ENTRY FROM READED MACRO 4 2CMG [ 16 2D76 LDN 4 0 [=> READED MACRO 19 2DLQ LDX 7 ACOMMUNE7(2) [%C= TRANSFER LENGTH IN WORDS 21 2F6B JMBS OKM,FILERING(2),BAMREAD,BAMREADR,BAMWRITE,BAMGEN,BAMCLEAN 20 2FL2 BRN (GEOERR) [FILE NOT OPEN IN SUITABLE MODE 4 2G5L [ 5 2GK= WRITED 18 2H4W [ [ENTRY FROM WRITED MACRO 4 2HJG [ 19 2J46 LDN 4 1 [X4 NON-ZERO => WRITED MACRO 21 2JHQ JMBAC (GEOERR),FILERING(2),BAMWRITE,BAMGEN [J UNLESS OPEN FOR R 4 2K3B [ 4 2KH2 OKM 16 2L2L LDX 5 ACOMMUNE8(2) [BUCKET NUMBER 7 2LG= SBN 5 1 20 2L_W BNG 5 (GEOERR) [BUCKET NUMBER NEGATIVE OR ZERO 20 2MFG LDX 3 ACOMMUNE9(2) [BUCKET SIZE (MUST BE 1,2 OR 4) 15 2M_6 SRL 3 1 [=> 0,1 OR 2 20 2NDQ SLL 5 7(3) [CONVERT BUCKET NUMBER TO WORDS 18 2NYB LDEX 6 5 [X6 HAS ODD BLOCKLETS*128 15 2PD2 SRL 5 GSBSLOG [BLOCK MOD. 21 2PXL SRC 6 9 [BLOCKLET MOD TO B0/1 FOR FILETRAN 7 2QC= TOPFCB2 2 21 2QWW ADN 5 FBLKS [TURN BLOCK MOD INTO FREADBLOCK FORMA 7 2RBG LDX 0 5 18 2RW6 SBN 0 A1 [TURN INTO FBLMOD FORMAT 21 2S*Q BXL 0 FUSEBL(2),ZEC2 [J IF WITHIN LIMIT OF ALLOCATED BLOCK 7 2STB ADN 0 1 20 2T*2 LDX 1 FSIZE(2) [MAXIMUM PERMITTED SIZE IN BLOCKS 9 2TSL ADN 1 FBLKS-A1 17 2W#= BXGE 1 0,ZEC1 [J IF MAY GET BLOCKS 9 2WRW SETREP OVERFILE 5 2X?G UP 4 2XR6 [ 4 2Y=Q [ 4 2YQB ZEC1 18 2_=2 BZE 4 ZEC5 [J IF READED - NORIT CASE 7 2_PL LDX 7 0 19 329= SBX 0 FUSEBL(2) [GIVES EXTRA BLOCKS REQUIRED 8 32NW SMO FX2 9 338G STO 0 AWORK2 7 33N6 LDX 3 2 21 347Q ALTLEN 3,7 [ENSURE ROOM FOR EXTRA BLOCKS IN FCB 9 34MB LDX 3 AWORK2(2) 19 3572 SBX 5 3 [->LAST USED BLOCK POSITION 20 35LL ADN 5 1 [->FIRST UNUSED BLOCK POSITION 18 366= ADN 3 2 [FOR EMPTYB RECORD HEADER 11 36KW SETUPCOR 3,1,BSTB,EMPTYB 8 375G STO 3 A1(1) 4 37K6 [ 18 384Q MOVED [LOOP BACK LABEL IF FILE COPIED DURING GETBAX 4 38JB [ 7 3942 TOPFCB2 2 9 39HL LDX 7 BSPRE(2) 18 3=3= STO 7 A1+1(1) [RESIDENCE NO. IN EMPTYB 6 3=GW GETBAX 7 3?2G TOPFCB2 2 16 3?G6 BXE 7 BSPRE(2),ZEC11 [J IF NOT COPIED 15 3?_Q FREEBAX [GIVE IT BACK 10 3#FB MHUNTW 1,BSTB,EMPTYB 18 3#_2 BRN MOVED [FILE MOVED : TRY AGAIN 4 3*DL [ 5 3*Y= ZEC11 10 3BCW MHUNTW 1,BSTB,FULLB 16 3BXG ADN 1 A1+2 [X1->NEW BLOCKS 16 3CC6 ADX 2 5 [X5->SPACE IN FCB 17 3CWQ MOVE 1 510(3) [[X3]-2 BLOCKS MOVED 8 3DBB SBN 1 A1+2 14 3DW2 FREECORE 1 [FULLB 7 3F*L TOPFCB2 2 16 3FT= SBN 3 2 [NO OF NEW BLOCKS 18 3G#W JBC NOTCARE,2,BFCARE [J UNLESS CAREFUL FILE 9 3GSG LDX 0 FBLMOD(2) 17 3H#6 SBN 0 BSPRE-A1 [POSN TO INSERT BITS 19 3HRQ MAPBIN 0,,3 [EXTEND FMAPP BY [X3] BITS 7 3J?B TOPFCB2 2 5 3JR2 NOTCARE 16 3K=L ADS 3 FUSEBL(2) [UPDATE FUSEBL 17 3KQ= LDX 0 FUSEBL(2) [FOR FBLMOD UPDATE 7 3L9W ADX 5 3 19 3LPG SBN 5 1 [RECOVER FREADBLOCK POINTER 9 3M96 BRN UPCUBS 4 3MNQ [ 4 3N8B ZEC2 21 3NN2 BXL 0 FBLMOD(2),ZEC40 [J IF WITHIN LIMIT OF WRITTEN BLOCKS 18 3P7L BZE 4 ZEC5 [J IF READ - NORIT CASE 7 3PM= ADN 0 1 5 3Q6W UPCUBS 18 3QLG SBX 0 FBLMOD(2) [GIVES FBLMOD INCREMENT 7 3R66 LDX 3 0 17 3RKQ INCRECUB FORCED,,3 [UPDATE CUBS FORCIBLY 7 3RTJ ... TOPFCB2 2 16 3S5B ADS 3 FBLMOD(2) [UPDATE FBLMOD 4 3SK2 [ 5 3T4L ZEC40 21 3TJ= ADX 5 6 [ADD BLOCKLET MOD INTO FREADBLOCK POI 15 3W3W BZE 4 READ [J IF READ 11 3WHG MBS 2,BFALTR,BFALTB 16 3X36 JBC NOTCAREFUL,2,BFCARE [J UNLESS CAREFUL 21 3XGQ BNZ 6 WRONGCARE [J IF NOT STARTING ON BLOCK BOUNDARY 10 3Y2B MHUNTW 3,FILE,FRWB 10 3YG2 LDX 0 ALOGLEN(3) 20 3Y_L BXE 0 BSBS,WHOLEBLOCK [J IF NOT WHOLE BLOCK TRANSFER 6 3_F= WRONGCARE 20 3_YW GEOERR 1,CAREFUL? [CODE CAN ONLY DEAL WITH SIMPLE 21 42DG [CASES. SUFFICIENT FOR IDF UPDATING 21 42Y6 [WHICH IS ONLY CAREFUL RANDOM FILE 20 43CQ [(LEXICON HAS OWN UPDATE CODE) 6 43XB WHOLEBLOCK 18 44C2 LDX 3 5 [FREADBLOCK TYPE POINTER 17 44WL SBN 3 BSPRE [GET BL NO REL BSPRE 16 45B= MAPBCH 3,2 [CHECK FMAPP BIT 19 45TW BNZ 0 NOTCAREFUL [J IF BLOCK ALREADY SWAPPED 7 46*G TOPFCB2 2 16 46T6 CALL 7 SEEKFULLB [GET X1->FULLB 16 47#Q BRN SETUPFULLB [J IF NOT FOUND 10 47SB LDX 7 ALOGLEN(1) 7 48#2 ADN 7 1 7 48RL LDX 6 1 20 49?= ALTLEN 6,7 [LENGTHEN BY 1 FOR SWAPPED BLOCK 9 49QW BRN TRYAGAIN 4 4==G [ 6 4=Q6 SETUPFULLB 19 4?9Q SETNCORE 3,1,BSTB,FULLB [REDTAPE+1 FOR SWAPPED BLOCK 7 4?PB LDN 0 2 19 4#92 STO 0 A1(1) [RECORD HEADER(=NO BLOCKS) 7 4#NL TOPFCB2 2 9 4*8= LDX 0 BSPRE(2) 16 4*MW STO 0 A1+1(1) [RESIDENCE NUMBER 9 4B7G LDX 0 FFSFMAPP 5 4BM6 SFMAPP 17 4C6Q LDX 2 FPTR(2) [NEXT BLOCK FROM FCB 17 4CLB BXU 0 ATYPE(2),SFMAPP [J BACK UNLESS FMAPP 20 4D62 CHAIN 1,2 [CHAIN NEW FULLB ON FPTR OF FMAPP 4 4DKL [ 5 4F5= TRYAGAIN 7 4FJW TOPFCB2 2 9 4G4G LDX 6 BSPRE(2) 7 4GJ6 GETBACK 6 21 4H3Q LDX 7 ACOMMUNE7(2) [LOAD BLOCK NO OBTAINED BY GETBACK 7 4HHB TOPFCB2 2 20 4J32 BXE 6 BSPRE(2),UNCHANGED [J UNLESS COPYFILE HAS MOVED FILE 15 4JGL FREEBACK 6,7 [GIVE IT BACK 9 4K2= BRN TRYAGAIN 4 4KFW [ 6 4K_G UNCHANGED 7 4LF6 SMO 5 18 4LYQ LDX 6 0(2) [PICK UP OLD BLOCK NUMBER 7 4MDB SMO 5 18 4MY2 STO 7 0(2) [REPLACE WITH NEW BLOCK 9 4NCL CALL 7 SEEKFULLB 18 4NX= BRN (GEOERR) [WAS THERE A MOMENT AGO! 8 4PBW SMO A1(1) 21 4PWG STO 6 A1(1) [PUT SWAPPED BLOCK ON END OF RECORD 7 4QB6 LDN 0 1 18 4QTQ ADS 0 A1(1) [INCREMENT RECORD HEADER 17 4R*B MAPBSE 3,2 [MARK BLOCK SWAPPED 4 4RT2 [ 6 4S#L NOTCAREFUL 4 4SS= [ 15 4T?W MHUNTW 3,FILE,FRWB [FIND BUFFER 17 4TRG LDX 6 ALOGLEN(3) [PICK UP DATA LENGTH 21 4W?6 CHAIN 3,FX2 [CHAIN BUFFER IN FRONT OF ACTIVITY 14 4WQQ ... FILEAUTW ,FREE+FAIL,EX6,5,,,NOCHECK 8 4X=B BRN OVER 4 4XQ2 [ 4 4Y9L READ 12 4YP= ... FILEREAD ,FAIL,EX7,5,,,NOCHECK 16 4_8W MHUNTW 1,BSTB,BREAD [FIND READ BUFFER 16 4_NG NAME 1,FILE,FRRB [ & RENAME IT 4 5286 OVER 8 52MQ SETREP2 OK 5 537B UP 4 53M2 [ 4 546L [ 19 54L= ZEC5 [BUCKET NUMBER WITHIN FILE BUT BLOCK NOT WRITTEN 21 555W SETUPCOR 7,1,FILE,FRRB [SET UP BUFFER OF REQUESTED LENGTH 8 55KG SETREP2 NORIT 16 5656 STOZ A1(1) [ & ZEROISE IT 8 56JQ ADN 1 A1 8 574B LDN 2 1(1) 7 57J2 SMO 7 15 583L MOVE 1 511 [[X7]-1 WORDS 5 58H= UP 4 592W [ 4 59GG #END 6 ____ ...544745000001