nam ax ttl Simple file manager use /dd/defs/oskdefs.d Edition equ 1 Type_Lang set (FlMgr<<8)+Objct Attr_Rev set (ReEnt+SupStat<<8)+0 psect ax,Type_Lang,Attr_Rev,Edition,0,Entry Entry: dc.w Create-Entry dc.w Open-Entry dc.w MakDir-Entry dc.w ChgDir-Entry dc.w Delete-Entry dc.w Seek-Entry dc.w Read-Entry dc.w Write-Entry dc.w ReadLn-Entry dc.w WritLn-Entry dc.w GetStat-Entry dc.w SetStat-Entry dc.w Close-Entry Create: Open: move.l a1,-(sp) movea.l R$a0(a5),a0 os9 F$PrsNam bcs.s BadName tst.b d0 beq.s OpenIt BadName: movea.l (sp)+,a1 move #E$BPNam,d1 ori #Carry,ccr bra.s OpenEx OpenIt: move.l a1,R$a0(a5) movea.l (sp)+,a1 movea.l PD_DEV(a1),a3 movea.l V$STAT(a3),a2 * Copy information from device descriptor to static storage nop move #SS_Open,d0 moveq #D$PSTA,d1 bsr.s DrvDis moveq #0,d1 OpenEx rts MakDir: ChgDir: Delete: Seek: move #E$UnkSvc,d1 ori #Carry,ccr rts ReadLn: WritLn: move #E$UnkSvc,d1 ori #Carry,ccr rts GetStat: move R$d1+2(a5),d0 cmpi #SS_Opt,d0 beq.s GSttEx moveq #D$GSTA,d1 bsr.s DrvDis GSttEx: rts SetStat: move R$d1+2(a5),d0 cmpi #SS_Opt,d0 beq.s SttEx moveq #D$PSTA,d1 bsr.s DrvDis SttEx: rts Write: move.l R$d1(a5),d0 beq.s WritEx movea.l R$a0(a5),a0 moveq #D$WRIT,d1 bsr.s DrvDis bcs.s WritEx move.l d0,R$d1(a5) WritEx: rts Read: move.l R$d1(a5),d0 beq.s ReadEx move.l R$a0(a5),a0 moveq #D$READ,d1 bsr.s DrvDis bcs.s ReadEx move.l d0,R$d1(a5) ReadEx: rts Close: tst.b PD_CNT(a1) bne.s CloseEx nop CloseEx: rts DrvDis: move sr,-(sp) movem.l d0-d7/a0-a6,-(sp) movea.l PD_DEV(a1),a3 movea.l V$STAT(a3),a2 bra.s Busy20 Busy10: os9 F$IOQu bcc.s Busy20 move sr,15*4(sp) bra.s DrvEx Busy20: move V_BUSY(a2),d0 bne.s Busy10 move PD_CPR(a1),V_BUSY(a2) movem.l (sp),d0 movea.l V$DRIV(a3),a3 add.l M$Exec(a3),d1 move (a3,d1.l),d1 jsr (a3,d1.w) move sr,15*4(sp) move.l d1,R$d1(sp) move.l d0,R$d0(sp) clr V_BUSY(a2) DrvEx: movem.l (sp)+,d0-d7/a0-a6 rtr ends