22FL #OPT K6FILEMAP=K6ALLGEO>K6FILESTORE 22^= #OPT K0FILEMAP=K0ALLGEO>K0FILESTORE 23DW #LIS K0FILEMAP 23YG #SEG FILEMAP [ TONY HAMILTON 24D6 8HFILEMAP 24XQ [ 25CB SEGENTRY K1FILEMAP,XMAPBINS 25X2 SEGENTRY K21FILEMAP,ZMAPBINS 26BL # 26W= # USE OF WORKING SPACE 27*W # AWORK1 =NO OF BITS TO BE INSERTED 27TG # AWORK2 =NO OF BIT BEFORE WHICH BITS ARE TO BE INSERTED 28*6 # AWORK3 =FILE DEPTH 28SQ NOBITS 29#B NOBIT 29S2 GEOERR 1,MAPBIT?? [PARAMETERS FOR MAPBIN WRONG. 2=?L MODBIT 2=R= GEOERR 1,FMAPP??? [NO FMAPP BLOCK. 2?=W SFMAP 2?QG #HAL FILE+FMAPP,0 2#=6 # 2#PQ # MAPBIN INSERTS [EXEC1] BITS BEFORE THE [EXEC2]TH BIT IN THE 2*9B # FMAPP BLOCK OF THE FILE AT DEPTH [EXEC3].THESE BITS ARE SET. 2*P2 # 2B8L # WE VALIDATE THE PARAMETERS,FIND THE FMAPP BLOCK,UPDATE FBCOMM & 2BN= # FBITMOD,AND ALTLEN THE FMAPP BLOCK IF NECESSARY. 2C7W # 2CMG # IN THE COMMENTS WE USE THE FOLLOWING TERMINOLOGY: 2D76 # 2DLQ # "THE INSERT BIT" IS THE BIT BEFORE WHICH WE ARE INSERTING THE 2F6B # NEW BIT 2FL2 # 2G5L # WN IS THE WORD IN WHICH THE INSERT BIT IS IN ON ENTRY 2GK= # BN IS THE BIT IN WN WHICH IS THE INSERT BIT (RANGE 1-24) 2H4W # WNM IS THE WORD IN WHICH THE INSERT BIT ENDS UP IN 2HJG # BNM IS THE BIT IN WNM WHERE THE INSERT BIT ENDS UP. 2J46 # W1 IS THE INITIAL SIZE OF THE MAP IN WORDS -1 2JHQ # W2 IS THE FINAL SIZE OF THE MAP IN WORDS-1 2K3B # 2KH2 SFINDMAP 2L2L # REQUIRES AWORK3 TO HOLD FILE DEPTH 2LG= # GIVES X1->MAP 2L^W # X0 DESTROYED X7=LINK 2MFG SMO FX2 2M^6 LDX 0 AWORK3 2NDQ SXFCB 0,1 [GET X1->FCB 2NYB LDX 1 FPTR(1) 2PD2 SFLOOP 2PXL LDX 1 FPTR(1) 2QC= BXE 1 CXFI,MODBIT 2QWW LDX 0 ATYPE(1) 2RBG BXE 0 FILEPLUSFCB,MODBIT 2RW6 SMO FX1 2S*Q TXU 0 SFMAP 2STB BCS SFLOOP [CHECK FOR FMAP 2T*2 EXIT 7 0 2TSL [ 2W#= ZMAPBINS [TOP LEVEL FILE 2WRW [ 2X?G STOZ AWORK3(2) 2XR6 BRN MERJMAP 2Y=Q [ 2YQB XMAPBINS 2^=2 [ 2^PL LDX 6 ACOMMUNE9(2) [PICK UP FILE DEPTH 329= BPZ 6 POS [J.UNLESS NEGATIVE DEPTH GIVEN 32NW FILENUMB 0 [GET X0=NO OF FILES OPEN 338G ADX 6 0 33N6 POS 347Q STO 6 AWORK3(2) [SET POSITIVE FILE DEPTH 34MB MERJMAP 3572 LDX 0 ACOMMUNE7(2) 35LL BZE 0 NOBITS [ERROR IF NONE OR TOO MANY 366= BXGE 0 BSBS,NOBITS 36KW STO 0 AWORK1(2) [SET NO. OF BITS TO BE INSERTED 375G LDX 0 ACOMMUNE8(2) 37K6 BZE 0 NOBITS 384Q BXGE 0 BSBS,NOBITS [ERROR IF NONE OR TOO MANY 38JB #SKI K6FILEMAP>99$99 3942 TRACE 0,BIT INS 39HL STO 0 AWORK2(2) [SET BIT ADDRESS 3=3= CALL 7 SFINDMAP 3=GW #SKI K6FILEMAP>299$299 3?2G BLOCKTRA 1,FMAP1 3?G6 LDN 5 3 3?^Q ORS 5 FBCOMM(1) [SET CAREFUL MODE MARKER FOR CLOSE 3#FB LDX 5 FBITMOD(1) 3#^2 #SKI K6FILEMAP>99$99 3*DL TRACE 5,FBITMOD 3*Y= BNG 5 MODBIT [ERROR IF NEGATIVE 3BCW BXGE 5 BSBS,NOBITS [ERROR IF TOO LARGE 3BD2 ...#SKI 1 [CORRECTION FOR B3932: REPLACES REST OF CHAPTER 3BD6 ...( 3BD= ...[ THIS METHOD ROUNDS UP THE NUMBER OF BITS TO BE INSERTED(N) TO A MULTIP 3BDB ...[OF 24. THEN DOES MAPBDELS IN A LOOP TO DELETE THE EXTRA BITS 3BDG ...[ W IS THE ADDRESS RELATIVE TO FBITS OF THE WORD CONTAINING THE 1ST NEW 3BDL ...[ D IS THE ADDRESS RELATIVE TO FBITS OF THE LAST WORD IN THE EXTENDED MA 3BDQ ...[ X IS NUMBER OF BITS IN W BEFORE INSERT POSITION 3BDW ...[ AWORK4 HOLDS THE ROUNDING FACTOR 3BF2 ...# NOTE WELL: WE DO NOT USE B0 OF FBITS.[FBITMOD]= NO OF BLOCKS IN 3BF6 ...# THE FILE,I.E. THE NUMBER OF SIGNIFICANT BITS.THUS WHEN WE DIVIDE 3BF= ...# [FBITMOD]BY 24,IF IT IS AN EXACT MULTIPLE,THE LAST BIT GOES INTO 3BFB ...# THE LAST WORD ON ITS OWN. 3BFG ... ADN 5 1 3BFL ... BXL 5 AWORK2(2),MODBIT [ERROR IF AWORK2>FBITMOD+1 3BFQ ... STOZ AWORK4(2) 3BFW ... LDX 6 AWORK1(2) [N 3BG2 ... TRACEIF K6FILEMAP,199,199,6,FILEMAPN 3BG6 ... LDN 5 24 3BG= ... DVS 5 5 [X6 HAS NUMBER OF WHOLE WORDS 3BGB ... BZE 5 ROUNDNUMBER [J IF NO REMAINDER 3BGG ... ADN 6 1 [ROUND UP X6 3BGL ... SBN 5 24 3BGQ ... NGX 5 5 [GET ROUNDING FACTOR 3BGW ... ADS 5 AWORK1(2) [ROUND UP N 3BH2 ... STO 5 AWORK4(2) [SAVE ROUNDING FACTOR 3BH6 ...ROUNDNUMBER 3BH= ... TRACEIF K6FILEMAP,99,199,6,FILEMAPP 3BHB ... LDX 5 AWORK1(2) 3BHG ... ADX 5 FBITMOD(1) [NEW SIZE OF MAP IN BITS 3BHL ... STO 5 FBITMOD(1) [UPDATE FBITMOD 3BHQ ... TRACEIF K6FILEMAP,99,,5,FBITMODN 3BHW ... LDN 4 24 3BJ2 ... DVS 4 4 [X5=D 3BJ6 ... TRACEIF K6FILEMAP,99,199,5,FILEMAPD 3BJ= ... SMO 5 3BJB ... LDN 4 FBITS-A1+1 [REQUIRED LOGICAL LENGTH 3BJG ... BXE 4 ALOGLEN(1),NOALTLEN [J IF BLOCK BIG ENOUGH 3BJL ... LDX 3 1 [FMAPP ADDRESS 3BJQ ... ALTLENG 3,4,SFMAPP 3BJW ... CALL 7 SFINDMAP 3BK2 ...NOALTLEN 3BK6 ...#SKI K6FILEMAP>199$199 3BK= ...( 3BKB ... LDX 0 ALOGLEN(1) 3BKG ... ADN 0 2 3BKL ... BLOCKTRA 1,BEFORE,0 3BKQ ...) 3BKW ... LDX 4 AWORK2(2) [POSITION FOR INSERT 3BL2 ... LDN 3 24 3BL6 ... DVS 3 3 [X4=W: X3=X 3BL= ... TRACEIF K6FILEMAP,99,199,3,FILEMAPX 3BLB ... TRACEIF K6FILEMAP,99,199,4,FILEMAPW 3BLL ... LDX 7 5 3BLQ ... SBX 7 6 3BLW ... SBX 7 4 [D-P-W 3BM2 ... BZE 7 NOWORDMOVE [W IS LAST WORD OF MAP 3BM6 ... BNG 7 NDOFFILE [J IF APPEND &N A MULTIPLE OF 24 3BM= ... LDX 2 5 3BMB ... SBX 2 6 [D-P 3BMG ... STO 1 GEN1 [SAVE FMAPP ADDRESS 3BML ...MOVEWORD 3BMQ ... SMO 2 [D-P 3BMW ... LDX 0 FBITS(1) [OLD LAST WORD 3BN2 ... SMO 5 [D 3BN6 ... STO 0 FBITS(1) [NEW LAST WORD 3BN= ... BCT 1 £ [STEP BACK TO PREVIOUS WORD 3BNB ... BCT 7 MOVEWORD [LOOP ON D-P-W 3BNG ... LDX 1 GEN1 [RECOVER FMAPP ADDRESS 3BNL ...NOWORDMOVE 3BNQ ... SMO 4 [W 3BNW ... LDX 0 FBITS(1) [LOAD [W] 3BP2 ... NGN 7 1 [#77777777 3BP6 ... SLC 70 0(3) [ MOVE X BITS INTO X7 3BP= ... SRC 7 0(3) [MOVE X BITS TO TOP 3BPB ... SRC 0 0(3) [MOVE DISPLACED BITS TO BOTTOM OF X0 3BPG ... SMO 4 3BPL ... STO 7 FBITS(1) [REPLACE W WITH X BITS + 1'S 3BPQ ... NGN 7 1 3BPW ...NEWWORD 3BQ2 ... SMO 4 3BQ6 ... STO 7 FBITS+1(1) [INSERT EXTRA WORDS 3BQ= ... BUX 1 £ [STEP FORWARD 3BQB ... BCT 6 NEWWORD [LOOP ON COUNT OF P 3BQG ... SMO 4 3BQL ... STO 0 FBITS(1) [OVERWRITE LAST WORD WITH OVERFLOW FR 3BQQ ...XTRA 3BQW ... LDX 2 FX2 3BR2 ... LDX 7 AWORK4(2) 3BR6 ... BZE 7 UP [NO DELETES TO DO 3BR= ...NEXTMAPBDEL 3BRB ... SXFCB AWORK3(2),3 3BRG ... MAPBDEL AWORK2(2),3 3BRL ... BCT 7 NEXTMAPBDEL 3BRQ ...UP 3BRW ...#SKI K6FILEMAP>199$199 3BS2 ...( 3BS6 ... CALL 7 SFINDMAP 3BS= ... LDX 0 ALOGLEN(1) 3BSB ... ADN 0 2 3BSG ... BLOCKTRA 1,AFTER,0 3BSL ...) 3BSQ ... UP 3BSW ...NDOFFILE [APPEND CASE ONLY & X=0 3BT2 ... BNZ 3 (GEOERR) 3BT6 ... NGN 7 1 3BT= ...NDAPPEND 3BTB ... SMO 4 3BTG ... STO 7 FBITS(1) [STORE P WORDS STARTING FROM W 3BTL ... BUX 1 £ 3BTQ ... BCT 6 NDAPPEND 3BTW ... BRN XTRA 3BW2 ...[ 3BW6 ...SFMAPP 3BW= ... LDX 3 1 [ALTLENG LINK 3BWB ... CALL 7 SFINDMAP 3BWG ... LDX 2 1 3BWL ... EXIT 3 0 3BWQ ...) 3BWW ...#SKI 0 3BX2 ...( 3BXG ADN 5 2 3CC6 BXL 5 AWORK2(2),MODBIT 3CWQ SBN 5 2 3DBB LDX 3 AWORK1(2) [PICK UP NO.OF BITS TO BE INSERTED 3DW2 ADX 3 5 3F*L STO 3 FBITMOD(1) [UPDATE TOTAL 3FT= # 3G#W # NOTE WELL: WE DO NOT USE B0 OF FBITS.[FBITMOD]= NO OF BLOCKS IN 3GSG # THE FILE,I.E. THE NUMBER OF SIGNIFICANT BITS.THUS WHEN WE DIVIDE 3H#6 # [FBITMOD]BY 24,IF IT IS AN EXACT MULTIPLE,THE LAST BIT GOES INTO 3HRQ # THE LAST WORD ON ITS OWN. 3J?B # THUS W1 & W2 ARE ALWAYS ONE LESS THAN THE NUMBER OF WORDS IN THE 3JR2 # MAP 3K=L # (I'M ONLY WRITING THIS DOWN BECAUSE I GOT IT WRONG. DMB) 3KQ= # 3L9W LDN 2 24 3LPG DVS 2 2 [CALC W2 = FINAL LENGTH OF MAP - 1 3M96 LDN 4 24 3MNQ DVS 4 4 [CALC W1=INITIAL LENGTH OF MAP-1 3N8B LDX 2 FX2 3NN2 TXU 3 5 3P7L BCC NOALTLEN [J.UNLESS FMAP NEEDS LENGTHENING 3PM= LDX 7 1 3Q6W #SKI K6FILEMAP>99$99 3QLG TRACE 3,NGN MAP 3R66 ALTLEND 7,FBITS-A1+1(3) 3RKQ CALL 7 SFINDMAP [RESET X1->MAP 3S5B NOALTLEN 3SK2 # 3T4L # WE NOW EXTEND THE MAP 3TJ= # 3W3W # WE SHALL ILLUSTRATE THE CODE BY THREE EXAMPLES (WHICH ARE REASON- 3WHG # ABLY SIMILAR) 3X36 # 3XGQ # THE EXAMPLES ARE: 3Y2B # INSERTING (A) SIX BITS ) BEFORE I (THE INSERT BIT) IN A BIT 3YG2 # (B) 30 BITS > PATTERN WE SHALL REPRESENT BY:- 3Y^L # (B) 54 BITS ) XXXXXXXXIYYYYYYYYYYYYYYY 3^F= # 3^YW LDX 7 AWORK2(2) [PICK UP THE BIT NUMBER FOR INSERT 42DG LDX 2 5 [SAVE W1 IN X2 42Y6 SMO FX2 43CQ LDX 5 AWORK1 [PICK UP NO.OF BIT TO BE INSERTED. 43XB ADX 5 7 [ADD ON BIT ADDR FOR INSERT 44C2 # 44WL # WE HAVE TO MOVE A PATTERN OF BITS ALONG TO MAKE ROOM FOR THE 45B= # NEW ONES. WN,BN IS THE ADDRESS OF THE INSERT BIT,THE FIRST OF 45TW # THOSE TO BE MOVED,AND WNM,BNM IS THE ADDRESS IT IS TO BE MOVED 46*G # TO 46T6 # 47#Q LDN 6 24 [CALC BN AND WN IN X6 AND X7 47SB DVS 6 6 48#2 LDN 4 24 48RL DVS 4 4 [CALC BNM AND WNM IN X4 AND X5 49?= NGN 0 1 49QW SBX 5 7 4==G #SKI K6FILEMAP>99$99 4=Q6 TRACE 5,NEWWORDS 4?9Q # THE TWO ADDRESS MAY BE IN THE SAME WORD(CASE A), 4?PB BZE 5 NODIFF [J.IF NEW BITS FIT IN ONE WORD 4#92 SBN 5 1 4#NL # OR IN ADJACENT WORDS(CASE B), 4*8= BZE 5 ONEDIFF [J.IF NEW BITS EXTEND OVER 1 WORD 4*MW [BOUNDARY ONLY 4B7G # OR IN NONADJACENT WORDS(CASE C). 4BM6 ADN 7 1(1) [SET UP X7 FOR TEST IN LOOP 4C6Q # 4CLB # [X7] IS NOW AN ABSOLUTE ADDRESS OF THE 1ST WORD AFTER THE ONE 4D62 # CONTAINING THE INSERT BIT( I.E WN +1) 4DKL # 4F5= ADX 2 1 [ADD ON FMAP POINTER TO W1 4FJW MSKLOOPA 4G4G # 4GJ6 # THIS CODE MOVES DOWN THE BIT PATTERN FROM THE WORD AFTER THE ONE 4H3Q # CONTAINING THE INSERT BIT (I E WN+1) BY ENOUGH WORDS TO FIT IN ALL 4HHB # THE EXTRA BITS. 4J32 # 4JGL LDX 0 FBITS(2) [PICK UP NEXT WORD DOWN 4K2= SMO 5 4KFW STO 0 FBITS(2) [AND MOVE IN FORWARD BY WNM-WN-1 4K^G TXU 2 7 [J.OUT WHEN X2=WN+FMAP+1 4LF6 BCC XFINA 4LYQ SBN 2 1 4MDB BRN MSKLOOPA 4MY2 XFINA 4NCL # 4NX= # WE NOW FILL IN THE WNM-WN-1 WORDS OF GAP WE HAVE CREATED WITH BITS 4PBW # (I.E -1'S ) 4PWG # 4QB6 NGN 0 1 [SET UP MASK OF BITS 4QTQ SBX 7 1 [[X7]= WN+1. 4R*B ADX 5 7 [[X5]= WNM. 4RT2 SBN 7 1 [RESET X7 TO WN 4S#L ADX 5 1 [AND X5 TO FMAP+WNM FOR TEST IN LOOP 4SS= MSKLOOPB 4T?W STO 0 FBITS(2) [SET BITS IN NEXT WORD 4TRG ADN 2 1 4W?6 TXU 2 5 [J.OUT WHEN GAP IS FILLED 4WQQ BCS MSKLOOPB 4X=B # 4XQ2 # WE SHOULD NOW HAVE REDUCED THE "ADJACENT" & "NON-ADJACENT" CASES 4Y9L # TO SIMILARITY (I.E. CASE B & C ARE NOW SIMILAR. 4YP= # 4^8W # REENTRY POINT FOR"ADJACENT"CASE. 4^NG # 5286 SMERJONE 52MQ # 537B # [X7] = WN,[X5]=WNM,[X6]=BN,[X7]=BNM. 53M2 # 546L # WE NOW SET UP X1 TO CONTAIN THE NEW MASK FOR WORD'WN'; I.E WITH 54L= # ALL BITS BEFORE THE INSERT BIT AS BEFORE, THEN AS MANY SET BITS 555W # AS WE CAN FIT IN.X0 CONTAINS THE COMPLEMENTARY PATTERN. 55KG # 5656 # IN OUR EXAMPLE (CASES B & C ). 56JQ # 574B # [X1] = XXXXXXXX1111111111111111 57J2 # [X0] = 11111111IYYYYYYYYYYYYYYY 583L # 58H= LDX 2 1 [SET X2->FMAP 592W SMO 7 59GG LDX 1 FBITS(2) [PICK UP WN 5=26 SBN 6 24 5=FQ NGX 6 6 [SET X6=24-BN 5=^B SMO 6 5?F2 SRC 1 0 5?YL SMO 6 5#D= SLC 01 0 [PICK UP BITS AT END OF WORD (BN ON) 5#XW ADX 6 4 [RESET X6 TO Q= 24+BNM-BN 5*CG BRN MERJALL 5*X6 # 5BBQ # THE BITS ARE TO BE MOVED TO AN ADJACENT WORD (CASE B). 5BWB # WE READJUST THE POINTERS AND REENTER THE CODE FOR CASE C (OF 5CB2 # WHICH CASE B IS A DEGENERATE EXAMPLE 5CTL # 5D*= ONEDIFF 5DSW ADX 5 7 [RESET X5 TO WN 5F#G ADX 5 1 [AND ADD IN FMAP POINTER 5FS6 BRN SMERJONE 5G?Q NODIFF 5GRB # 5H?2 # CASE A . IN THIS ENTRY,THE TO-BE-INSERTED BITS ALL FIT INTO THE 5HQL # SAME WORD. 5J== # 5JPW #SKI K6FILEMAP>99$99 5K9G TRACE 4,NODIFF 5KP6 ADX 5 7 [RESET X5 TO WNM=WN 5L8Q LDX 2 1 [PICK UP ->FMAP 5LNB ADN 5 1(1) [SET X5=FMAP+WN+1 5M82 SMO 7 5MML LDX 1 FBITS(2) [PICK UP WN 5N7= SMO 6 5NLW SLC 01 0 [SHIFT BN 5P6G SBX 4 6 5PL6 SMO 4 5Q5Q SLC 0 0 [SHIFT BNM-BN 5QKB ADX 4 6 5R52 SMO 4 5RJL SRC 01 0 [SHIFT BNM 5S4= SBX 4 6 5SHW SMO 4 5T3G SLC 0 0 [SHIFT BNM-BN 5TH6 LDX 6 4 [SET X6=Q=BNM-BN 5W2Q # 5WGB # IN OUR EXAMPLE NOW : 5X22 # 5XFL # [X1]= XXXXXXXX111111IYYYYYYYYY 5X^= # [X0]= 111111111111111111YYYYYY 5YDW # 5YYG MERJALL 5^D6 # 5^XQ # ALL CASES MERGE HERE. X0 CONTAINS THE BIT PATTERN LEFT OVER FROM 62CB # WN AFTER WE'VE INSERTED THE BITS. 62X2 # WE STORE THE CONTENTS OF X1 IN WN 63BL # X6 CONTAINS THE NUMBER OF BITS OVERFLOWED FROM WN WHICH WE HAVE TO 63W= # MOVE INTO WNM+1. 64*W # 64TG #SKI K6FILEMAP>99$99 65*6 ( 65SQ TRACE 0,OVERFLOW 66#B TRACE 1,NEWFBITS 66S2 ) 67?L SMO 7 67R= STO 1 FBITS(2) [RE-STORE NEW WN 68=W ADN 3 1(2) [SET X3=FMAP+W2+1 FOR TEST 68QG LDX 2 5 [PICK X2=FMAP+WNM 69=6 # 69PQ # WE PICK UP WNM+1 IN X1,MOVE IN [X6] BITS FROM X0,AND PRESERVE THE 6=9B # BITS MOVED OUT IN X0. WE STORE X1 BACK IN WNM+1,AND RECURSE THIS 6=P2 # PROCESS UNTIL THE END 6?8L # 6?N= MOVELOOP 6#7W #SKI K6FILEMAP>99$99 6#MG TRACE 6,RESTALNG 6*76 TXU 2 3 6*LQ BCC XDONE [J.OUT WHEN END OF BLOCK REACHED 6B6B LDX 1 FBITS(2) [PICK UP NEXT WORD IN MAP 6BL2 SMO 6 6C5L SRC 01 0 [SHIFT BY Q 6CK= STO 1 FBITS(2) [STORE NEW VERSION 6D4W ADN 2 1 6DJG SMO 6 6F46 SLC 0 0 [RESET MASK FOR NEXT TIME 6FHQ BRN MOVELOOP 6G3B XDONE 6GH2 #SKI K6FILEMAP>299$299 6H2L ( 6HG= CALL 7 SFINDMAP 6H^W BLOCKTRA 1,FMAPEND 6JFG ) 6J^6 UP 6KDQ [ 6KNJ ...) 6KYB MENDAREA 20,K99FILEMAP 6LD2 #END ^^^^ ...51145334000900000000