MOUNT2.MAC;4/au/-bf=[13,10]MOUNT2.MAC;1 -11,11,/;DLE001/ $VERSION x0403 -123,133,/;DLE001/ call .gtrtp ; Point R0 at the map area movb .hdbuf+m.use,r1 ; Fetch number of map words BIC #177400,R1 ; clear high just in case BEQ 180$ ; Can't see why this should ever happen MOV R1,-(SP) ; Save number of map words ; ; R0 points to the mapping pointers in the header ; R1 is the number of map words in map area ; R2,R3 are scratch ; R4 Point to the VCB ; 150$: dec (sp) ; Count these words mov (r0)+,r1 ; Fetch pointer in header block bmi 152$ ; Three or four word pointer ? ; it's a two word pointer here mov r1,r2 ; Set up for extent and MSB bic #177400,r1 ; Set extent count bic #140377,r2 ; Fetch the msb of lbn swab r2 ; Place into lower part dec (sp) ; Count these words mov (r0)+,r3 ; Fetch lsb br 160$ ; ; This is a three or four word entry 152$: bit #40000,r1 ; Find out if three or four bne 154$ ; If bit on then four word ; We have a three word entry bic #140000,r1 ; Remove type field dec (sp) ; Count this word mov (r0)+,r3 ; Fetch lsb of lbn dec (sp) mov (r0)+,r2 ; msb of lbn br 160$ ; Finish up in exit routine ; ; This is a four word entry 154$: bic #140000,r1 ; Clear type field dec (sp) ; Count previous word mov (r0)+,r1 ; Fetch extent LSB dec (sp) ; Count this word mov (r0)+,r3 ; Fetch lsb of lbn dec (sp) mov (r0)+,r2 ; msb of lbn ; ; Any more pointers in the header? ; 160$: tst (sp) ; Test if any pointers left in header bgt 150$ ; Loop to process next extent ; ; Restore everything and return ; 170$: TST (SP)+ ; Pop off header pointer count 180$: MOVB r2,V.SBLB(R4) ; Get high order LBN MOVB R1,V.SBSZ(R4) ; Put block count in VCB MOV r3,V.SBLB+2(R4) ; Get low order LBN -160,,/;DLE001/ ; need to multiply by cluster factor here -168,,/;DLE001/ /