NEW AUTO 3,1 *-------------------------------------- IO.OPEN.REG >MLICALL MLIGETFILEINFO bcc IO.OPEN.REG.E Already Exists bit IO.Open.FLAGS Create if not exists ? bpl IO.OPEN.RTS 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 IO.MLI.CREATE bcs IO.OPEN.RTS IO.OPEN.REG.E ldx #0 jsr IO.MkFD bcs IO.OPEN.RTS jsr IO.MLI.OPEN bcs UNISTD.Open.ERR 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 UNISTD.Open.ERR >MLICALL MLISETMARK .21 bcs UNISTD.Open.ERR .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 UNISTD.Open.ERR .8 lda IO.hFD IO.OPEN.RTS rts UNISTD.Open.ERR 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 *-------------------------------------- IO.CLOSE.REG IO.CLOSE.DIR ldy #S.FD.REG.REF lda (pFD),y beq .1 sta K.MLI.PARAMS+1 >MLICALL MLICLOSE .1 ldy #S.FD.REG.IOBUF lda (pFD),y beq .2 jsr K.FreeMem .2 lda IO.hFD jmp K.FreeMem *-------------------------------------- IO.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 *-------------------------------------- IO.MLI.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 *-------------------------------------- IO.MLI.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.Stat bit CORE.FSID bmi FS.Stat.FX >MLICALL MLIGETFILEINFO bcs FS.OPEN.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 jsr FS.Access2Mode 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 SHARED.PTime2StatYAX >LDYAI K.MLI.PARAMS+S.FI.MDATE ldx #K.S.STAT+S.STAT.MTIME jmp SHARED.PTime2StatYAX *-------------------------------------- FS.Stat.FX >MLICALL MLIGETFILEINFOEX bcs FS.OPEN.RTS >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 jsr FS.Access2Mode 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 SHARED.PTime2StatAX lda #S.FIEX.MTIME ldx #K.S.STAT+S.STAT.MTIME jmp SHARED.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.Access2Mode and #S.FI.A.FULL cmp #S.FI.A.FULL beq .7 lda #S.STAT.MODE.XU .HS 2C BIT ABS .7 lda #S.STAT.MODE.FU .8 sta K.S.STAT+S.STAT.MODE lda /S.STAT.MODE.RU tsb K.S.STAT+S.STAT.MODE+1 preserve DIR rts *-------------------------------------- SHARED.PTime2StatAX clc adc ZPPtr3 tay lda ZPPtr3+1 adc #0 SHARED.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