A2osX/SYS/KERNEL.S.FS.txt

315 lines
6.3 KiB
Plaintext
Raw Normal View History

2020-06-30 10:40:19 +00:00
NEW
AUTO 3,1
*--------------------------------------
2020-06-30 14:30:14 +00:00
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
2020-06-30 10:40:19 +00:00
bpl .1
2020-06-30 14:30:14 +00:00
lda #S.FI.ST.STD
jsr IO.MLI.CREATE
bcs IO.OPEN.RTS
2020-06-30 10:40:19 +00:00
2020-06-30 14:30:14 +00:00
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
2020-06-30 10:40:19 +00:00
dex
2020-06-30 14:30:14 +00:00
bpl .1
2020-06-30 10:40:19 +00:00
2020-06-30 14:30:14 +00:00
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
2020-07-13 19:29:31 +00:00
.9
FS.OPEN.RTS rts
2020-07-10 13:59:56 +00:00
*--------------------------------------
FS.Stat bit CORE.FSID
2020-07-13 19:29:31 +00:00
bmi FS.StatEX
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
>MLICALL MLIGETFILEINFO
bcs FS.OPEN.RTS
2020-07-10 13:59:56 +00:00
2020-07-16 14:53:35 +00:00
jsr FS.ClrStat
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
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
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
ldx #FS.GFI.Cnt
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
.3 ldy FS.GFI.Src-1,x
2020-07-10 13:59:56 +00:00
lda K.MLI.PARAMS,y
2020-07-13 19:29:31 +00:00
ldy FS.Stat.Dst-1,x
2020-07-10 13:59:56 +00:00
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
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.StatEX >MLICALL MLIGETFILEINFOEX
bcs FS.OPEN.RTS
>LDYAI K.MLI.PARAMS+3
>STYA ZPPtr3
*--------------------------------------
2020-07-16 14:53:35 +00:00
FS.DirEnt2Stat jsr FS.ClrStat
2020-06-30 10:40:19 +00:00
lda (ZPPtr3)
and #$F0
cmp #$D0 Vol Hdr, Dir Hdr or Dir ?
bcc .1
2020-06-30 14:30:14 +00:00
2020-06-30 10:40:19 +00:00
lda /S.STAT.MODE.DIR
sta K.S.STAT+S.STAT.MODE+1
2020-07-13 19:29:31 +00:00
.1 ldx #FS.DirEnt.Cnt
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
.2 ldy FS.DirEnt.Src-1,x
2020-06-30 10:40:19 +00:00
lda (ZPPtr3),y
2020-07-13 19:29:31 +00:00
ldy FS.Stat.Dst-1,x
2020-06-30 10:40:19 +00:00
sta K.S.STAT,y
dex
bne .2
2020-06-30 14:30:14 +00:00
2020-07-13 19:29:31 +00:00
ldy #S.FIEX.ACCESS
lda (ZPPtr3),y
jsr FS.Access2Mode
ldy #S.FIEX.ACL
2020-06-30 10:40:19 +00:00
lda (ZPPtr3),y
2020-07-13 19:29:31 +00:00
cmp #$57
bne .7
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
ldy #S.FIEX.ACL.UID
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.UID
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
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
2020-06-30 10:40:19 +00:00
ldx #K.S.STAT+S.STAT.CTIME
jsr SHARED.PTime2StatAX
2020-07-13 19:29:31 +00:00
lda #S.FIEX.MTIME
2020-06-30 10:40:19 +00:00
ldx #K.S.STAT+S.STAT.MTIME
jmp SHARED.PTime2StatAX
*--------------------------------------
2020-07-16 14:53:35 +00:00
FS.ClrStat ldx #S.STAT-1
2020-07-13 19:29:31 +00:00
.1 stz K.S.STAT,x
dex
bpl .1
lda CORE.FSID
sta K.S.STAT+S.STAT.FSID
2020-06-30 10:40:19 +00:00
rts
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.Mode2Access clc
rts
*--------------------------------------
FS.Access2Mode and #S.FI.A.FULL
2020-06-30 10:40:19 +00:00
cmp #S.FI.A.FULL
beq .7
2020-07-13 19:29:31 +00:00
lda #S.STAT.MODE.XU
2020-06-30 10:40:19 +00:00
.HS 2C BIT ABS
2020-07-13 19:29:31 +00:00
.7 lda #S.STAT.MODE.FU
2020-06-30 10:40:19 +00:00
.8 sta K.S.STAT+S.STAT.MODE
2020-07-13 19:29:31 +00:00
lda /S.STAT.MODE.RU
tsb K.S.STAT+S.STAT.MODE+1 preserve DIR
2020-06-30 10:40:19 +00:00
rts
*--------------------------------------
SHARED.PTime2StatAX
clc
adc ZPPtr3
tay
lda ZPPtr3+1
adc #0
SHARED.PTime2StatYAX
>PUSHYA
>PUSHB /K.S.STAT
txa
>PUSHA
>SYSCALL2 PTime2Time
rts
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
2020-06-30 10:40:19 +00:00
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
2020-07-13 19:29:31 +00:00
FS.GFI.Cnt .EQ *-FS.GFI.Src
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
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
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
2020-06-30 10:40:19 +00:00
.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