.title r$xtra ;+ ; these routines provide additional entry points ; for opening and closing files ;- ap=%5 .psect $r.roi,con,ro,rel,lcl,i .enabl lsb ; ; integer function openf(buf, access, fdb) ; buf=2 access=4 fdb=6 openf:: cmp #read$r,@access(ap) ; READ access? bne 5$ ; NO call open ; open the file br 6$ 5$: call create ; create the file 6$: cmp r0,#err ; error? beq 10$ ; YES call r$gfbk ; get RFDB address in r1 mov r1,@fdb(ap) ; return RFDB address 10$: return ; ; subroutine closef(fdb) ; fdb=2 closef:: mov @fdb(ap),r1 ; RFDB address in r1 call r$clsf ; close the file return ; ; integer function gets(fdb, buf, siz) ; fdb=2 buf=4 siz=6 .mcall get$ gets:: mov @fdb(ap),r1 ; RFDB address get$ r.fdb(r1),buf(ap),@siz(ap) ; get next record bcs 20$ ; c set => error or EOF mov f.nrbd(r0),r0 ; return bytes read br 30$ 20$: mov #eof,r0 ; return EOF 30$: return ; ; integer function getfdb(int) ; int=2 getfdb:: mov @int(ap),r0 ; ratfor unit number == lun call r$gfbk ; get rfdb address in r1 mov #err,r0 ; assume error bcs 40$ ; c set => YES mov r1,r0 ; return RFDB address 40$: return ; ; subroutine puts(fdb, buf, cnt) ; fdb=2 buf=4 cnt=6 .mcall put$ puts:: mov @fdb(ap),r1 ; RFDB address put$ r.fdb(r1),buf(ap),@cnt(ap) ; put the record return .end