A2osX/SYS/KERNEL.S.FIO.txt

250 lines
5.0 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.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* PUBLIC
*--------------------------------------
K.CheckPrefixYA >STYA MLICALL.PARAMS+1
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
beq .98
tax
ldy #1
lda (ZPQuickPtr1),y
cmp #'/'
bne .98
cpx #1 "/" allowed for listing online volumes
beq .8
>MLICALL MLIGETFILEINFO
bcs .98 No, invalid path...
lda MLICALL.PARAMS+4 Check file type
cmp #$0F Directory?
bne .98
.8 clc
rts
.98 lda #SYSMGR.ERRIDIR
.99 sec
rts
*--------------------------------------
* K.FileSearch
* in :
* PULLW = PSTR to File Name (PSTRING)
* PULLW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB
* out :
* Y,A = PSTR to FilePath (PSTRING)
* X = hMem to FilePath
*--------------------------------------
K.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA
>PULLYA Get Search list
jsr K.ExpandPStrYA Expand it
bcs .99
stx K.FileSearch.hSrch
>STYA ZPQuickPtr2 expanded search list ;
stz K.FileSearch.Index
.1 stz KrnBuffer256 reset String
ldx #0
ldy K.FileSearch.Index
.2 tya
cmp (ZPQuickPtr2) end of src string ?
beq .3 end of string, try it....
iny
lda (ZPQuickPtr2),y
cmp #';'
beq .3
inx
sta KrnBuffer256,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 (ZPQuickPtr4),y Append Fiename...
inx
sta KrnBuffer256,x
tya
cmp (ZPQuickPtr4)
bne .4
stx KrnBuffer256 set string length
>LDYAI KrnBuffer256
jsr K.MLIGetFileInfoYA
bcs .1 Failed...retry next path...
lda K.FileSearch.hSrch Discard Expanded hSrch list
jsr K.FreeMemA
>LDYAI KrnBuffer256
jmp K.NewPStrYA
.98 lda K.FileSearch.hSrch Discard Expanded hSrch list
jsr K.FreeMemA
lda #SYSMGR.ERRFNF
sec
.99 rts
*--------------------------------------
K.FileSearch.File .BS 2
K.FileSearch.hSrch .BS 1
K.FileSearch.Index .BS 1
*--------------------------------------
* K.GetFullPathYA
* in :
* Y,A = Filename (PSTRING)
* out :
* Y,A = FullPath (PSTRING)
* X = hMem of FullPath
*--------------------------------------
K.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
lda (ZPQuickPtr3)
beq .9
stz KrnBuffer256
ldy #1
lda (ZPQuickPtr3),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 KrnBuffer256
jsr K.PStrCpy
.1 >PUSHW ZPQuickPtr3
>PUSHWI KrnBuffer256
jsr K.PStrCat
>LDYAI KrnBuffer256
jmp K.NewPStrYA
.9 sec
rts
*--------------------------------------
* K.LoadFile
* in :
* PULLW = PATH (Handled by....
* PULLB = MODE ...
* PULLB = TYPE ...
* PULLW = AUXTYPE ...FOPEN)
* out :
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
K.LoadFile jsr K.FOPEN
bcs .9
sta K.LoadFile.hFile
ldx #SYS.FSEEK.END
jsr K.LoadFile.Seek
bcs .99
lda K.LoadFile.hFile
jsr K.FTELLA
bcs .99
>STYA K.LoadFile.Len
phx
plx
bne .98 LEN > 65535 !!???
>PUSHYA push len
>PUSHBI 0
jsr K.GetMem
bcs .99
>STYA K.LoadFile.Mem
stx K.LoadFile.hMem
ldx #SYS.FSEEK.SET
jsr K.LoadFile.Seek
bcs .99
>PUSHW K.LoadFile.Mem
>PUSHW K.LoadFile.Len
>PUSHB K.LoadFile.hFile
jsr K.FREAD
bcs .99
jsr .99
>LDYA K.LoadFile.Len
ldx K.LoadFile.hMem
clc
.9 rts
.98 lda #SYSMGR.ERRFTB
.99 pha
lda K.LoadFile.hFile
jsr K.FCLOSEA
pla
sec
rts
*--------------------------------------
K.LoadFile.Seek >PUSHWI 0
>PUSHWI 0
txa
>PUSHA
>PUSHB K.LoadFile.hFile
jmp K.FSEEK
*--------------------------------------
* PULLW = SrcPtr
* PULLW = SrcLen
* PULLW = PATH (Handled by....
* PULLB = MODE ...
* PULLB = TYPE ...
* PULLW = AUXTYPE ...FOPEN)
*--------------------------------------
K.SaveFile >PULLW K.LoadFile.Mem
>PULLW K.LoadFile.Len
jsr K.FOPEN
bcs .9
sta K.LoadFile.hFile
>PUSHW K.LoadFile.Mem
>PUSHW K.LoadFile.Len
>PUSHB K.LoadFile.hFile
jsr K.FWRITE
bcs .99
jsr .99
clc
rts
.99 pha
lda K.LoadFile.hFile
jsr K.FCLOSEA
pla
sec
.9 rts
*--------------------------------------
K.LoadFile.Filename .BS 2
K.LoadFile.hFile .BS 1
K.LoadFile.hMem .BS 1
K.LoadFile.Mem .BS 2
K.LoadFile.Len .BS 2
K.LoadFile.hRef .BS 1
K.LoadFile.hBuf .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.FIO
LOAD SYS/KERNEL.S
ASM