.title dopen ;+ ; integer function dopen(ext, desc) ;- ap=%5 ext=2 desc=4 .psect $r.roi,con,ro,rel,lcl,i .enabl lsb dopen:: call r$gffb ; get free RFDB address in r1 bcs 100$ ; c set => ERROR mov r1,-(sp) ; save RFDB address add #r.name,r1 ; now have address of filename mov r1,-(sp) ; save for later mov ext(ap),r0 ; source address 10$: movb (r0)+,(r1)+ ; copy character bne 10$ ; until EOS mov (sp)+,r0 ; address of filespec mov (sp)+,r2 ; RFDB address sub #12.,sp ; build dspt on stack mov sp,r1 ; address of dspt call r$dspt ; fill it in mov r2,r1 ; RFDB address in correct place mov r.fdb(r1),r0 ; FDB address mov sp,f.dspt(r0) ; pointer to dspt clr f.dfnb(r0) ; no default name block call r$pars ; parse the directory spec rol r3 ; save c bit add #12.,sp ; restore stack ror r3 ; restore c bit bcs 100$ ; c set => invalid directory spec bic #rf.clo,(r1) ; RFDB in use bis #rf.dir,(r1) ; opened by opendr mov r1,@desc(ap) ; return RFDB address as desc mov #ok,r0 return 100$: mov #err,r0 return .end