A2osX/SYS/KERNEL.S.FIO.txt

276 lines
5.7 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
2015-03-14 21:48:35 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* PUBLIC
*--------------------------------------
2015-06-03 18:30:57 +00:00
S.CheckPrefixYA >STYA MLICALL.PARAMS+1
2015-03-14 21:48:35 +00:00
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
beq .98
tax
ldy #1
lda (ZPQuickPtr1),y
cmp #'/'
bne .98
cpx #1 "/" allowed for listing online volumes
beq .8
2015-06-03 18:30:57 +00:00
>MLICALL MLIGETFILEINFO
2015-03-14 21:48:35 +00:00
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
*--------------------------------------
* S.FileSearch
* in :
2016-08-17 06:25:58 +00:00
* PULLW = PSTR to File Name (PSTRING)
* PULLW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB
2015-03-14 21:48:35 +00:00
* out :
2016-08-17 06:25:58 +00:00
* Y,A = PSTR to FilePath (PSTRING)
* X = hMem to FilePath
2015-03-14 21:48:35 +00:00
*--------------------------------------
2016-08-17 06:25:58 +00:00
S.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA
>PULLYA Get Search list
jsr S.ExpandPStrYA Expand it
bcs .99
stx S.FileSearch.hSrch
>STYA ZPQuickPtr2 expanded search list ;
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
stz S.FileSearch.Index
.1 stz KrnBuffer256 reset String
ldx #0
2016-06-07 06:10:18 +00:00
2016-08-17 06:25:58 +00:00
ldy S.FileSearch.Index
2016-06-07 06:10:18 +00:00
2016-08-17 06:25:58 +00:00
.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 S.FileSearch.Index save current index
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
ldy #0
2016-06-07 06:10:18 +00:00
2016-08-17 06:25:58 +00:00
.4 iny
lda (ZPQuickPtr4),y Append Fiename...
inx
sta KrnBuffer256,x
tya
cmp (ZPQuickPtr4)
bne .4
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
stx KrnBuffer256 set string length
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
>LDYAI KrnBuffer256
2016-06-07 06:10:18 +00:00
jsr S.MLIGetFileInfoYA
2016-08-17 06:25:58 +00:00
bcs .1 Failed...retry next path...
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
lda S.FileSearch.hSrch Discard Expanded hSrch list
2015-03-14 21:48:35 +00:00
jsr S.FreeMemA
2016-08-17 06:25:58 +00:00
>LDYAI KrnBuffer256
jmp S.NewPStrYA
.98 lda S.FileSearch.hSrch Discard Expanded hSrch list
2015-03-14 21:48:35 +00:00
jsr S.FreeMemA
lda #SYSMGR.ERRFNF
sec
2016-08-17 06:25:58 +00:00
.99 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2016-08-17 06:25:58 +00:00
S.FileSearch.File .BS 2
S.FileSearch.hSrch .BS 1
2016-08-17 06:25:58 +00:00
S.FileSearch.Index .BS 1
*--------------------------------------
* S.GetFullPathYA
* in :
* Y,A = Filename (PSTRING)
* out :
* Y,A = FullPath (PSTRING)
* X = hMem of FullPath
*--------------------------------------
S.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 S.GetMemPtrA
>PUSHYA
>PUSHWI KrnBuffer256
jsr S.PStrCpy
.1 >PUSHW ZPQuickPtr3
>PUSHWI KrnBuffer256
jsr S.PStrCat
>LDYAI KrnBuffer256
jmp S.NewPStrYA
.9 sec
rts
*--------------------------------------
* S.LoadFile
* in :
* PULLW = PATH (Handled by....
* PULLB = MODE ...
* PULLB = TYPE ...
* PULLW = AUXTYPE ...FOPEN)
* out :
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
S.LoadFile jsr S.FOPEN
bcs .9
sta S.LoadFile.hFile
jsr S.FSTATA
>PUSHW S.LoadFile.Mem
>PUSHW S.LoadFile.Len
>PUSHB S.LoadFile.hFile
jsr S.FREAD
bcs .99
jsr .99
clc
rts
.99 pha
lda S.LoadFile.hFile
jsr S.FCLOSEA
pla
sec
.9 rts
*--------------------------------------
2016-06-07 06:10:18 +00:00
* S.LoadFileYA
2015-03-14 21:48:35 +00:00
* in :
2016-06-07 06:10:18 +00:00
* Y,A = FilePath (PSTRING)
2015-03-14 21:48:35 +00:00
* out :
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
2016-08-17 06:25:58 +00:00
S.LoadFileYA jsr S.MLIOpenYA
bcc .10
2016-08-17 06:25:58 +00:00
rts
2015-06-03 18:30:57 +00:00
.10 sta S.LoadFile.hRef save ref_num
stx S.LoadFile.hBuf save Prodos Buffer for freemem
2015-03-14 21:48:35 +00:00
jsr S.MLIGetEOFA
bcs .98
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
phx Larger than 64k?
plx
beq .1 File too big!!!!
lda #SYSMGR.ERRFTB
bra .98
2015-06-03 18:30:57 +00:00
.1 >STYA S.LoadFile.Len save Length
2015-03-14 21:48:35 +00:00
>PUSHYA Push Length for S.GetMem
>PUSHBI 0
jsr S.GetMem
bcs .98
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
>STYA S.LoadFile.Mem
stx S.LoadFile.hMem save Segment hMem
>PUSHW S.LoadFile.Len Push Length for S.MLIRead
2016-08-17 06:25:58 +00:00
>PUSHW S.LoadFile.Mem Push PTR
>PUSHB S.LoadFile.hRef Push ref_num
2015-03-14 21:48:35 +00:00
jsr S.MLIRead
bcs .97
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
jsr .98 Close File....
2016-03-13 21:47:19 +00:00
>LDYA S.LoadFile.Len Return File Length...
ldx S.LoadFile.hMem ...and hMem to Caller
2015-03-14 21:48:35 +00:00
clc
rts
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
.97 pha
lda S.LoadFile.hMem
2015-03-14 21:48:35 +00:00
jsr S.FreeMemA freemem because of failed load
pla
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
.98 pha
lda S.LoadFile.hRef
2015-03-14 21:48:35 +00:00
jsr S.MLICloseA
lda S.LoadFile.hBuf
2015-03-14 21:48:35 +00:00
jsr S.FreeMemA ProDOS IO Buffer
pla
2015-06-03 18:30:57 +00:00
2016-08-17 06:25:58 +00:00
.99 sec
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
* PULLW = SrcPtr
* PULLW = SrcLen
* PULLW = PATH (Handled by....
* PULLB = MODE ...
* PULLB = TYPE ...
* PULLW = AUXTYPE ...FOPEN)
*--------------------------------------
S.SaveFile >PULLW S.LoadFile.Mem
>PULLW S.LoadFile.Len
jsr S.FOPEN
bcs .9
sta S.LoadFile.hFile
>PUSHW S.LoadFile.Mem
>PUSHW S.LoadFile.Len
>PUSHB S.LoadFile.hFile
jsr S.FWRITE
bcs .99
jsr .99
clc
rts
.99 pha
lda S.LoadFile.hFile
jsr S.FCLOSEA
pla
sec
.9 rts
*--------------------------------------
S.LoadFile.Filename .BS 2
S.LoadFile.hFile .BS 1
S.LoadFile.hMem .BS 1
2016-08-17 06:25:58 +00:00
S.LoadFile.Mem .BS 2
S.LoadFile.Len .BS 2
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
SAVE SYS/KERNEL.S.FIO
2015-03-14 21:48:35 +00:00
LOAD SYS/KERNEL.S
ASM