A2osX/SYS/KERNEL.S.FILE.txt

318 lines
6.7 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
*--------------------------------------
* For All SYS.xxxx calls, X = #SYSCall
* Must be kept in X before calling
* S.PFTCheckXYZ
*--------------------------------------
* S.FOPEN
* In :
* PULLW = PATH (PSTR)
* PULLB = MODE
* SYS.FOPEN.R .EQ $01 if R and !exists -> ERROR
* SYS.FOPEN.W .EQ $02 if W and !exists -> CREATE
* SYS.FOPEN.A .EQ $04 Append
* SYS.FOPEN.T .EQ $08 Open/Append in Text mode
* SYS.FOPEN.X .EQ $80 Create if not exists
* PULLB = TYPE
* PULLW = AUXTYPE
* Out :
* CC : A = hFILE
* CS : A = EC
*--------------------------------------
S.FOPEN jsr S.PFTCHECKPATHSTK
>PULLW MLICALL.PARAMS+1
>PULLB S.FOPEN.MODE
>PULLB S.FOPEN.TYPE
>PULLW S.FOPEN.AUXTYPE
>MLICALL MLIGETFILEINFO
>DEBUG
bcc .10 Already Exists
bit S.FOPEN.MODE Create if not exists ?
bpl .9 No, return MLI error
lda #S.FILEINFO.ACCESS.FULL Yes, Create...
sta MLICALL.PARAMS+3 Access
lda S.FOPEN.TYPE
sta MLICALL.PARAMS+4 File type
>LDYA S.FOPEN.AUXTYPE
>STYA MLICALL.PARAMS+5 Aux type
lda #S.FILEINFO.STORETYPE.STD
sta MLICALL.PARAMS+7
>MLICALL MLICREATE
bcc .10
.9 rts
.10 >PUSHWI S.FILE.PRODOS
>PUSHBI S.MEM.F.INIT0
jsr S.GetMem
bcs .99
>STYA ZPQuickPtr1
stx hFILE
>PUSHWI 1024 get a ProDOS IOBUF
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr S.GetMem
bcs .98
>STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FILE.PRODOS.IOBUF
sta (ZPQuickPtr1),y
>MLICALL MLIOPEN
bcs .98
lda MLICALL.PARAMS+5 get ref_num
ldy #S.FILE.PRODOS.REF
sta (ZPQuickPtr1),y
sta MLICALL.PARAMS+1 Next MLI Calls are REF_NUM based
lda S.FOPEN.MODE
and #SYS.FOPEN.A Append ?
beq .20
>MLICALL MLIGETEOF
bcs .98
>MLICALL MLISETMARK
bcs .98
.20 lda S.FOPEN.MODE
and #SYS.FOPEN.T Text Mode ?
beq .30
lda #$FF
sta MLICALL.PARAMS+2
lda #$0D
sta MLICALL.PARAMS+3
>MLICALL MLINEWLINE
.30 lda hFILE
clc
rts CC
.98 pha save MLI error
jsr S.FCLOSEA.1
pla get back MLI error
sec
.99 rts
*--------------------------------------
S.FOPEN.MODE .BS 1
S.FOPEN.TYPE .BS 1
S.FOPEN.AUXTYPE .BS 2
hFILE .BS 1
*--------------------------------------
* S.FCLOSEA
* In :
* A = hFILE
*--------------------------------------
S.FCLOSEA jsr S.PFTCHECKFILEA
sta hFILE
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
S.FCLOSEA.1 ldy #S.FILE.PRODOS.REF
lda (ZPQuickPtr1),y
beq .1
sta MLICALL.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FILE.PRODOS.IOBUF
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
.2 lda hFILE
jsr S.FreeMemA
rts
*--------------------------------------
* S.FREAD
* In :
* PULLB = hFILE
* PULLW = Bytes To Read
* PULLW = Dest Ptr
* Out :
* Y,A = Bytes Read
*--------------------------------------
S.FREAD jsr S.PFTCHECKFILESTK
>PULLA
jsr FIL.SetupPrt1A
>PULLW MLICALL.PARAMS+4
>PULLW MLICALL.PARAMS+2
>MLICALL MLIREAD
bcs .9
>LDYA MLICALL.PARAMS+6
.9 rts
*--------------------------------------
* S.FWRITE
* In :
* PULLB = hFILE
* PULLW = Bytes To Write
* PULLW = Src Ptr
* Out :
* Y,A = Bytes Written
*--------------------------------------
S.FWRITE jsr S.PFTCHECKFILESTK
>PULLA
jsr FIL.SetupPrt1A
>PULLW MLICALL.PARAMS+4
>PULLW MLICALL.PARAMS+2
>MLICALL MLIWRITE
bcs .9
>LDYA MLICALL.PARAMS+6
.9 rts
*--------------------------------------
* S.FFLUSHA
* In :
* A = hFILE
*--------------------------------------
S.FFLUSHA jsr S.PFTCHECKFILEA
jsr FIL.SetupPrt1A
>MLICALL MLIFLUSH
rts
*--------------------------------------
* S.FSEEK
* In :
* PULLB = hFILE
* PULLB = From
* PULLW = OffsetLo
* PULLW = OffsetHi
*--------------------------------------
S.FSEEK jsr S.PFTCHECKFILESTK
>PULLA
jsr FIL.SetupPrt1A
>PULLB S.FSEEK.FROM
>PULLW S.FSEEK.OFFSET
>PULLW S.FSEEK.OFFSET+2
lda S.FSEEK.FROM
beq .3
cmp #SYS.FSEEK.CUR
bne .1
>MLICALL MLIGETMARK
bcs .9
bcc .2
.1 cmp #SYS.FSEEK.END
bne .3
>MLICALL MLIGETEOF
bcs .9
.2 lda MLICALL.PARAMS+2
adc S.FSEEK.OFFSET
sta MLICALL.PARAMS+2
lda MLICALL.PARAMS+3
adc S.FSEEK.OFFSET+1
sta MLICALL.PARAMS+3
lda MLICALL.PARAMS+4
adc S.FSEEK.OFFSET+2
sta MLICALL.PARAMS+4
bcs .99 Offset out of range!
.3 >MLICALL MLISETMARK
.9 rts
.99 lda #SYSMGR.ERRFTB
sec
rts
*--------------------------------------
S.FSEEK.FROM .BS 1
S.FSEEK.OFFSET .BS 4
*--------------------------------------
* S.FTELLA
* In :
* A = hFILE
* Out :
* Y,A,X = Offset
*--------------------------------------
S.FTELLA jsr S.PFTCHECKFILEA
S.FTELLA.1 jsr FIL.SetupPrt1A
>MLICALL MLIGETMARK
bcs .9
>LDYA MLICALL.PARAMS+2
ldx MLICALL.PARAMS+4
.9 rts
*--------------------------------------
* S.FEOFA
* In :
* A = hFILE
* Out :
* CC :
* A=0 EOF
* A !=0 NOT EOF
* CS :
*--------------------------------------
S.FEOFA jsr S.PFTCHECKFILEA
jsr FIL.SetupPrt1A
jsr S.FTELLA.1
bcs .9
>STYA S.FEOFA.MARK
stx S.FEOFA.MARK+2
>MLICALL MLIGETEOF
bcs .9
sec
lda MLICALL.PARAMS+2
sbc S.FEOFA.MARK
bne .8
lda MLICALL.PARAMS+3
sbc S.FEOFA.MARK+1
bne .8
lda MLICALL.PARAMS+4
sbc S.FEOFA.MARK+2
.8 clc
.9 rts
S.FEOFA.MARK .BS 3
*--------------------------------------
* S.REMOVEYA
*--------------------------------------
S.REMOVEYA jsr S.PFTCHECKPATHYA
>STYA MLICALL.PARAMS+1
>MLICALL MLIDESTROY
rts
*--------------------------------------
* S.RENAME
* In :
* PULLW = Old Name
* PULLW = New Name
*--------------------------------------
S.RENAME jsr S.PFTCHECKPATHYA
>PULLW MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+2
>MLICALL MLIRENAME
rts
*--------------------------------------
S.STAT jsr S.PFTCHECKPATHYA
rts
*--------------------------------------
S.FSTAT jsr S.PFTCHECKFILEA
rts
*--------------------------------------
FIL.SetupPrt1A jsr S.GetMemPtrA
>STYA ZPQuickPtr1
ldy #S.FILE.PRODOS.REF
lda (ZPQuickPtr1),y
sta MLICALL.PARAMS+1
rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.FILE
LOAD SYS/KERNEL.S
ASM