INFCB.MAC;3/au/-bf=[13,10]INFCB.MAC;1 -96,99,/;DLE001/ mov #.hdbuf,r1 ; Point to header buffer mov h.fnum(r1),(R0)+ ; Move a bunch of stuff mov h.fseq(r1),(R0)+ ; Move a bunch of stuff mov h.flev(r1),(R0)+ ; Move a bunch of stuff movb h.prog(r1),(R0)+ ; Move a bunch of stuff movb h.proj(r1),(R0)+ ; Move a bunch of stuff mov h.fpro(r1),(R0)+ ; Move a bunch of stuff mov h.ucha(r1),(R0)+ ; Move a bunch of stuff -106,107,/;DLE001/ ASSUME M.ESQN,4 MOVB m.esqn(R1),F.FSQN-F.LBN(R0) ; SET UP FILE SEGMENT NUMBER -119,136,/;DLE001/ CLR -(sp) ; Set up a counter BISB (R1),(sp) ; (sp)=NO. OF WORDS OF RTRV PTRS IN USE BEQ 30$ ; BRANCH IF FILE IS EMPTY mov r0,r1 ; Set up for next routine call .gtrtp ; Point R0 at the map area ; ; R0 points to the mapping pointers in the header ; R1 is a pointer to the accumulators for the block count ; R2,R3 are scratch ; (sp) is the count of the map pointers in words ; We will put the msb of the lbn on the stack for each pass 150$: dec (sp) ; Count these words mov (r0)+,r2 ; Fetch pointer in header block bmi 152$ ; Three or four word pointer ? ; it's a two word pointer here mov r2,r3 ; Set up for extent and MSB bic #177400,r2 ; Set extent count bic #140377,r3 ; Fetch the msb of lbn swab r3 ; Place into lower part dec (sp) ; Count these words mov r3,-(sp) ; Save msb of lbn mov (r0)+,r3 ; Fetch lsb br 160$ ; ; This is a three or four word entry 152$: bit #40000,r2 ; Find out if three or four bne 154$ ; If bit on then four word ; We have a three word entry bic #140000,r2 ; Remove type field dec (sp) ; Count this word mov (r0)+,r3 ; Fetch lsb of lbn dec (sp) mov (r0)+,-(sp) ; msb of lbn br 160$ ; Finish up in exit routine ; ; This is a four word entry 154$: dec (sp) ; Count previous word mov (r0)+,r2 ; Fetch extent LSB dec (sp) ; Count this word mov (r0)+,r3 ; Fetch lsb of lbn dec (sp) mov (r0)+,-(sp) ; msb of lbn ; ; Any more pointers in the header? ; 160$: BITB #UC.CON,.HDBUF+H.UCHA ; IS FILE CONTIGUOUS? BEQ 20$ ; BRANCH IF NOT MOV (sp),-6(R1) ; MOVE HIGH ORDER BITS OF FIRST LBN MOV r3,-4(R1) ; LOW ORDER WORD OF FIRST LBN 20$: tst (sp)+ ; Clear off stack INC R2 ; R3=NO. OF BLOCK IN THIS RETRIEVAL POIN ADD R2,(R1) ; ADD INTO F.SIZE IN FCB ADC -2(R1) ; tst (sp) ; Test if any pointers left in header bgt 150$ ; Loop to process next extent ; ; Restore everything and return ; 30$: tst (sp)+ ; Clear off stack of word counter MOV (SP)+,R0 ; RESTORE FCB ADDRESS /