NEW AUTO 3,1 *-------------------------------------- IO.OPEN.REG >MLICALL MLIGETFILEINFO bcc .10 Already Exists bit IO.Open.FLAGS Create if not exists ? bpl .9 No, return MLI error ldx #2 Yes, Create... .1 lda IO.Open.TYPE,x sta K.MLI.PARAMS+4,x File type,Aux type dex bpl .1 lda #S.FI.ST.STD jsr FS.CREATE bcs .9 .10 ldx #0 jsr IO.MkFD bcs .9 jsr FS.OPEN bcs .99 lda IO.Open.FLAGS bit #O.WRONLY beq .20 Write mode ? and #O.APPEND Append ? bne .11 yes, go to end of file stz K.MLI.PARAMS+2 stz K.MLI.PARAMS+3 stz K.MLI.PARAMS+4 >MLICALL MLISETEOF no, reset size to 0 bra .21 .11 >MLICALL MLIGETEOF bcs .99 >MLICALL MLISETMARK .21 bcs .99 .20 lda IO.Open.FLAGS and #O.TEXT Text Mode ? beq .8 lda #$FF sta K.MLI.PARAMS+2 lda #C.CR sta K.MLI.PARAMS+3 >MLICALL MLINEWLINE bcs .99 .8 lda IO.hFD .9 rts .99 pha Save Error Code lda IO.hFD jsr K.Close pla sec rts *-------------------------------------- IO.READ.REG ldx #MLIREAD .HS 2C BIT ABS *-------------------------------------- IO.WRITE.REG ldx #MLIWRITE ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 >PULLW K.MLI.PARAMS+2 >PULLW K.MLI.PARAMS+4 lda #4 Param Count = 4 for MLIREAD & MLIWRITE jsr GP.MLICall bcs .9 >LDYA K.MLI.PARAMS+6 .9 *IO.WRITE.REG.RTS rts *-------------------------------------- FS.CLOSE.REG FS.CLOSE.DIR ldy #S.FD.REG.REF lda (pFD),y beq .1 sta K.MLI.PARAMS+1 >MLICALL MLICLOSE * bcs IO.WRITE.REG.RTS .1 ldy #S.FD.REG.IOBUF lda (pFD),y beq .2 jsr K.FreeMem .2 lda IO.hFD jmp K.FreeMem *-------------------------------------- FS.EOF.REG >MLICALL MLIGETMARK bcs .9 ldy #2 .1 lda K.MLI.PARAMS+2,y sta ACC32,y dey bpl .1 >MLICALL MLIGETEOF bcs .9 ldy #2 .2 lda K.MLI.PARAMS+2,y eor ACC32,y bne .8 FALSE dey bpl .2 lda #$ff TRUE * clc rts .8 lda #0 * clc .9 rts *-------------------------------------- FS.CREATE sta K.MLI.PARAMS+7 Storage Type ldx #3 .1 lda DATELO,x sta K.MLI.PARAMS+8,x Create Date/Time dex bpl .1 lda #S.FI.A.FULL sta K.MLI.PARAMS+3 Access >MLICALL MLICREATE rts *-------------------------------------- FS.OPEN >LDYAI 1024 get a ProDOS IOBUF ldx #S.MEM.F.ALIGN jsr MEM.GetMem.YAX bcs .9 >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call txa ldy #S.FD.REG.IOBUF sta (pFD),y >MLICALL MLIOPEN bcs .9 lda K.MLI.PARAMS+5 get ref_num ldy #S.FD.REG.REF sta (pFD),y sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based * clc .9 FS.OPEN.RTS rts *-------------------------------------- FS.FSTAT.A >PUSHA FS.FSTAT >PUSHWI K.S.STAT ldx #SYS.FStat jsr PFT.CheckNode2 bcs .9 ldy #2 lda (pStack),y tax lda OF.Table.hPath-1,x jsr K.GetMemPtr jsr PFT.YAToMLIPATH jsr FS.Stat.203 bcs .9 lda (pFD) #S.FD.T bne .9 ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 >MLICALL MLIGETEOF ldx #2 .1 lda K.MLI.PARAMS+2,x sta K.S.STAT+S.STAT.SIZE,x dex bpl .1 .9 >RET 3 *-------------------------------------- FS.STAT.YA >PUSHYA >PUSHWI K.S.STAT ldx #SYS.Stat jsr PFT.CheckPath2 bcs .9 jsr FS.Stat.203 .9 >RET 4 *-------------------------------------- FS.Stat bit CORE.FSID bmi FS.Stat.FX FS.Stat.203 >MLICALL MLIGETFILEINFO bcs FS.Stat.RTS jsr FS.ClrStat lda K.MLI.PARAMS+S.FI.T cmp #S.FI.T.DIR bne .1 lda /S.STAT.MODE.DIR sta K.S.STAT+S.STAT.MODE+1 .1 lda K.MLI.PARAMS+S.FI.A sta K.S.STAT+S.STAT.P.ACCESS ldx #FS.GFI.Cnt .3 ldy FS.GFI.Src-1,x lda K.MLI.PARAMS,y ldy FS.Stat.Dst-1,x sta K.S.STAT,y dex bne .3 >LDYAI K.MLI.PARAMS+S.FI.CDATE ldx #K.S.STAT+S.STAT.CTIME jsr FS.PTime2StatYAX >LDYAI K.MLI.PARAMS+S.FI.MDATE ldx #K.S.STAT+S.STAT.MTIME jmp FS.PTime2StatYAX FS.Stat.RTS rts *-------------------------------------- FS.Stat.FX >MLICALL MLIGETFILEINFOEX bcc .1 cmp #MLI.E.BADCALL beq FS.Stat.203 Apple WS CARD rts .1 >LDYAI K.MLI.PARAMS+3 >STYA ZPPtr3 *-------------------------------------- FS.DirEnt2Stat jsr FS.ClrStat lda (ZPPtr3) and #$F0 cmp #$D0 Vol Hdr, Dir Hdr or Dir ? bcc .1 lda /S.STAT.MODE.DIR sta K.S.STAT+S.STAT.MODE+1 .1 ldx #FS.DirEnt.Cnt .2 ldy FS.DirEnt.Src-1,x lda (ZPPtr3),y ldy FS.Stat.Dst-1,x sta K.S.STAT,y dex bne .2 ldy #S.FIEX.ACCESS lda (ZPPtr3),y sta K.S.STAT+S.STAT.P.ACCESS ldy #S.FIEX.ACL lda (ZPPtr3),y cmp #$57 bne .7 ldy #S.FIEX.ACL.UID lda (ZPPtr3),y sta K.S.STAT+S.STAT.UID ldy #S.FIEX.ACL.GID lda (ZPPtr3),y sta K.S.STAT+S.STAT.GID ldy #S.FIEX.ACL.MOD lda (ZPPtr3),y tsb K.S.STAT+S.STAT.MODE iny lda (ZPPtr3),y tsb K.S.STAT+S.STAT.MODE+1 .7 lda #S.FIEX.CTIME ldx #K.S.STAT+S.STAT.CTIME jsr FS.PTime2StatAX lda #S.FIEX.MTIME ldx #K.S.STAT+S.STAT.MTIME jmp FS.PTime2StatAX *-------------------------------------- FS.ClrStat ldx #S.STAT-1 .1 stz K.S.STAT,x dex bpl .1 lda CORE.FSID sta K.S.STAT+S.STAT.FSID rts *-------------------------------------- FS.PTime2StatAX clc adc ZPPtr3 tay lda ZPPtr3+1 adc #0 FS.PTime2StatYAX >PUSHYA >PUSHB /K.S.STAT txa >PUSHA >SYSCALL2 PTime2Time rts *-------------------------------------- FS.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1 .DA #S.FI.UBLKS,#S.FI.UBLKS+1 FS.GFI.Cnt .EQ *-FS.GFI.Src *-------------------------------------- FS.DirEnt.Src .DA #S.FIEX.T,#S.FIEX.AUXTYPE,#S.FIEX.AUXTYPE+1 .DA #S.FIEX.BLKUSED,#S.FIEX.BLKUSED+1 .DA #S.FIEX.EOF,#S.FIEX.EOF+1,#S.FIEX.EOF+2 FS.DirEnt.Cnt .EQ *-FS.DirEnt.Src *-------------------------------------- FS.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 .DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2 *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.fs LOAD usr/src/sys/kernel.s ASM