A2osX/SYS/KERNEL.S.FIO.txt

278 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*/--------------------------------------
* # FileSearch
* Search a file in the provided PATH list
* And return, if found, the full path to it.
* ## In:
* PUSHW = Ptr to Search Path (PSTR) %LIB%;/SYS/SLIB
* PUSHW = Ptr to File Name (PSTR)
* ## Out:
* CC : success
* Y,A = PSTR to FilePath (PSTR)
* X = hMem to FilePath
* CS : not found
*\--------------------------------------
K.FileSearch >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA
>PULLYA Get Search list
>SYSCALL ExpandPStrYA Expand it (SYSCALL to BNK1)
bcs .99
stx .98+1
>STYA ZPPtr3 ZPPtr2 trashed by K.STAT !!! expanded search list ;
stz K.FileSearch.Index
.1 stz KrnBuf256 reset String
ldx #0
ldy K.FileSearch.Index
.2 tya
cmp (ZPPtr3) end of src string ?
beq .3 end of string, try it....
iny
lda (ZPPtr3),y
cmp #';'
beq .3
inx
sta KrnBuf256,x
bra .2
.3 txa
beq .98 String is empty....nothing to try
sty K.FileSearch.Index save current index
ldy #0
.4 iny
lda (ZPPtr4),y Append Fiename...
inx
sta KrnBuf256,x
tya
cmp (ZPPtr4)
bne .4
stx KrnBuf256 set string length
>PUSHWI K.S.STAT
>PUSHWI KrnBuf256
jsr K.STAT
bcs .1 Failed...retry next path...
jsr .98 Discard Expanded hSrch list
bra K.GetFullPathYA.NewStr
.98 lda #$ff SELF MODIFIED : Discard Expanded hSrch list
jsr K.FreeMemA
lda #MLI.ERR.FNOTFND
sec
.99 rts
*--------------------------------------
K.FileSearch.Index .BS 1
*/--------------------------------------
* # GetFullPathYA
* ## In :
* Y,A = Filename (PSTR)
* ## Out :
* CC : success
* Y,A = FullPath (PSTR)
* X = hMem of FullPath
* CS : A = Error Code
*\--------------------------------------
K.GetFullPathYA >STYA ZPPtr3 Ptr1 & 2 used by StrCpy
lda (ZPPtr3)
beq K.GetFullPathYA.9
stz KrnBuf256
ldy #1
lda (ZPPtr3),y
cmp #'/' full path starting with '/'?
beq .1 yes, do not append to current prefix
ldy #S.PS.hPREFIX
lda (pPs),y
jsr K.GetMemPtrA
>PUSHYA
>PUSHWI KrnBuf256
>SYSCALL PStrCpy
.1 >PUSHW ZPPtr3
>PUSHWI KrnBuf256
>SYSCALL PStrCat
K.GetFullPathYA.NewStr
>LDYAI KrnBuf256
>SYSCALL NewPStrYA
rts
K.GetFullPathYA.9
sec
rts
*/--------------------------------------
* # LoadFile
* ## In:
* PUSHW = AUXTYPE (Handled by....
* PUSHB = TYPE ...
* PUSHB = MODE ...
* PUSHW = PATH ...FOpen)
* ## Out:
* Y,A = File Length
* X = hMem of Loaded File
*\--------------------------------------
K.LoadFile lda (pStack) read PTR.LO on top of stack
pha
ldy #1
lda (pStack),y read PTR.HI on top of stack
pha
>PUSHWI K.S.STAT
pla
ply
>PUSHYA
jsr K.Stat
bcs .10
lda K.S.STAT+S.STAT.SIZE+3
ora K.S.STAT+S.STAT.SIZE+2
bne .11
>PUSHW K.S.STAT+S.STAT.SIZE push len
>PUSHBI 0
jsr K.GetMem
bcs .10
>STYA K.LoadFile.Mem
stx K.LoadFile.hMem
jsr K.FOpen
bcs .9
sta K.LoadFile.hFile
>PUSHW K.LoadFile.Mem
>PUSHW K.S.STAT+S.STAT.SIZE
>PUSHB K.LoadFile.hFile
jsr K.FRead
bcs .97
phy
pha Save Bytes read
jsr .99
pla
ply
ldx K.LoadFile.hMem
clc
.9 rts
.11 lda #SYSMGR.ERRFTB
.10 pha
>POP 6
pla
sec
rts
.97 pha
lda K.LoadFile.hMem
jsr K.FreeMemA
pla
.99 pha
lda K.LoadFile.hFile
jsr K.FCloseA
pla
sec
rts
*--------------------------------------
K.LoadFile.hFile .BS 1
K.LoadFile.hMem .BS 1
K.LoadFile.Mem .BS 2
*/--------------------------------------
* # SaveFile
* ## In:
* PUSHW = SrcPtr
* PUSHW = SrcLen
* PUSHW = AUXTYPE (Handled by....
* PUSHB = TYPE ...
* PUSHB = MODE ...
* PUSHW = PATH ...FOpen)
*\--------------------------------------
K.SaveFile jsr K.FOpen
bcs .9
sta .90+1
>PUSHA
jsr K.FWrite
bcs .99
jsr .99
clc
rts
.99 pha
.90 lda #$ff
jsr K.FCloseA
pla
sec
rts
.9 pha
>POP 4 Discard SrcPtr & SrcLen
pla
sec
rts
*/--------------------------------------
* # ChTyp
* ## In:
* PUSHB = TYPE
* PUSHW = PATH
*\--------------------------------------
K.ChTyp jsr PFT.CheckPathSTK
>PULLW K.MLI.PARAMS+1
>PULLB .1+1
>MLICALL MLIGETFILEINFO
bcs .9
.1 lda #$ff
sta K.MLI.PARAMS+S.FILEINFO.TYPE
>MLICALL MLISETFILEINFO
.9 rts
*/--------------------------------------
* # ChMod
* ## In:
* PUSHW = MODE
* PUSHW = PATH
*\--------------------------------------
K.ChMod
sec
rts
*/--------------------------------------
* # ChOwn
* ## In:
* PUSHW = UID
* PUSHW = PATH
*\--------------------------------------
K.ChOwn
sec
rts
*/--------------------------------------
* # ChGrp
* ## In:
* PUSHW = GID
* PUSHW = PATH
*\--------------------------------------
K.ChGrp
sec
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.FIO
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM