Kernel version 0.8 : FILE/DIR migration in BIN/EDIT

This commit is contained in:
Rémy GIBERT 2016-09-20 18:00:51 +02:00
parent 61e5918375
commit 2ed4cf6587
10 changed files with 195 additions and 137 deletions

Binary file not shown.

Binary file not shown.

View File

@ -550,6 +550,7 @@ Prompt.Save cmp #3
lda (pData),y
beq .11
>SYSCALL SYS.FreeMemA
.11 >LDYA pData
>SYSCALL SYS.NewPStrYA

View File

@ -96,92 +96,39 @@ J.CTRL .DA Ctrl.Invalid
.DA Ctrl.Invalid
.DA 0
*--------------------------------------
CS.INIT stz hFile
stz TmpFilename
stz TmpLen
stz TmpLen+1
lda #$ff
CS.INIT lda #$ff
ldy #bSaved
sta (pData),y
>SYSCALL SYS.GetArgC
cmp #1
beq .1
beq .1 No arg, new file....
lda #1
>SYSCALL SYS.GetArgA
>SYSCALL SYS.GetFullPathYA
stx TmpFilename
>SYSCALL SYS.LoadFileYA
bcs .1
stx hFile
>STYA TmpLen
.1 >LDYA TmpLen
iny
bne .2
inc
.2 >PUSHYA
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .98
>STYA ZPPTR2
txa
ldy #hBuffer
sta (pData),y
lda hFile
beq .7
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
>LDYA TmpLen
>STYA TmpCount
ldy #0
.5 jsr DecTmpCount
beq .6
lda (ZPPTR1),y
sta (ZPPTR2),y
iny
bne .5
inc ZPPTR1+1
inc ZPPTR2+1
bra .5
.6 lda hFile
>SYSCALL SYS.FreeMemA
.7 ldy #FileLen
lda TmpLen
sta (pData),y
iny
lda TmpLen+1
sta (pData),y
lda TmpFilename
ldy #hFileName
sta (pData),y
lda (pPs)
jsr LoadFile
bcc .8 if CS, Failed to load file, keep name, but new file....
.1 >PUSHWI 1 buffer size = 0 (+ 1 for ending 0)
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .9
txa
ldy #hBuffer FileLen already set to 0
sta (pData),y
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
.98 lda hFile
beq .99
>SYSCALL SYS.FreeMemA
sec
.99 rts
.9 rts
*--------------------------------------
CS.RUN ldy #bCancel
lda (pData),y
@ -391,25 +338,81 @@ CS.QUIT ldy #hBuffer
>SYSCALL SYS.CoutA
.9 rts
*--------------------------------------
SaveFile >PUSHWI 0 Aux type
>PUSHBI 4 type=TXT
>PUSHBI $C3 access=RW
LoadFile >PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOPEN.R
ldy #hFileName
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>SYSCALL SYS.MLICreateFile
bcc .1
cmp #$47 File Exists error?
bne .9 no, sec;rts
.1 ldy #hFileName
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.MLIOpenYA
>PUSHYA
>SYSCALL SYS.LoadFile
bcs .9
sta hFile
stx TmpByte
stx hMem
>STYA TmpLen
iny
bne .2
inc +1 for ending zero
.2 >PUSHYA
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .98
>STYA ZPPTR2
txa
ldy #hBuffer
sta (pData),y
lda hMem
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
>LDYA TmpLen
>STYA TmpCount
ldy #0
.5 jsr DecTmpCount
beq .6
lda (ZPPTR1),y
sta (ZPPTR2),y
iny
bne .5
inc ZPPTR1+1
inc ZPPTR2+1
bra .5
.6 lda hMem
>SYSCALL SYS.FreeMemA
.7 ldy #FileLen
lda TmpLen
sta (pData),y
iny
lda TmpLen+1
sta (pData),y
.98 pha
lda hMem
beq .9
>SYSCALL SYS.FreeMemA
pla
sec
.9 rts
*--------------------------------------
SaveFile >PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOPEN.X+SYS.FOPEN.W
ldy #hFileName
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
ldy #FileLen+1
>PUSHB (pData),y
@ -421,21 +424,7 @@ SaveFile >PUSHWI 0 Aux type
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHB hFile
>SYSCALL SYS.MLIWrite
bcs .99
jsr .99
clc
rts
.99 pha
lda hFile
>SYSCALL SYS.MLICloseA
lda TmpByte
>SYSCALL SYS.FreeMemA
pla
.9 sec
>SYSCALL SYS.SaveFile
rts
*--------------------------------------
DecTmpCount lda TmpCount
@ -492,7 +481,7 @@ MSG.HELP >PSTRING "All commands: (* = Not yet implemented)"
.HS 00
EscChars >PSTRING "DBAC"
EscAscii .HS 04080A0B15
hFile .BS 1
hMem .BS 1
TmpFilename .BS 1
TmpByte .BS 1
TmpLen .BS 2

View File

@ -37,20 +37,6 @@ ZPDRV .EQ $80
ZPBIN .EQ $90
ZPLIB .EQ $A0 32 bytes for TCPIP
*--------------------------------------
R.VCPU16 .EQ $F0
R.AX .EQ R.VCPU16
R.AL .EQ R.VCPU16
R.AH .EQ R.VCPU16+$1
R.BX .EQ R.VCPU16+$2
R.BL .EQ R.VCPU16+$2
R.BH .EQ R.VCPU16+$3
R.CX .EQ R.VCPU16+$4
R.CL .EQ R.VCPU16+$4
R.CH .EQ R.VCPU16+$5
R.DX .EQ R.VCPU16+$6
R.DL .EQ R.VCPU16+$6
R.DH .EQ R.VCPU16+$7
*--------------------------------------
* Memory Map
*--------------------------------------
A2osX.SaveSM .EQ $100 Aux
@ -234,6 +220,8 @@ SYS.GetDevByNameYA .EQ $84
SYS.GetDevInfoA .EQ $86
SYS.GetKeyboardEvent .EQ $88
SYS.MKNOD .EQ $8C
SYS.MKFIFO .EQ $8E
*--------------------------------------
SYS.ExecProcessNewEnvYA .EQ $90
SYS.ExecProcessYA .EQ $92
@ -247,11 +235,9 @@ SYS.Sleep .EQ $9C
SYS.CheckPrefixYA .EQ $A0
SYS.FileSearch .EQ $A2
SYS.GetFullPathYA .EQ $A4
SYS.LoadFileYA .EQ $A6
SYS.LoadFile .EQ $A6
SYS.ListDirInitYA .EQ $AA
SYS.ListDirNextA .EQ $AC
SYS.ListDirCloseA .EQ $AE
SYS.SaveFile .EQ $A8
*--------------------------------------
SYS.AddNetCfg .EQ $B0
SYS.SetNetCfg .EQ $B2
@ -281,7 +267,7 @@ 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
SYS.FCLOSE .EQ $E2
SYS.FCLOSEA .EQ $E2
SYS.FREAD .EQ $E4
SYS.FWRITE .EQ $E6
@ -295,13 +281,13 @@ SYS.FEOF .EQ $EE
SYS.REMOVE .EQ $F0
SYS.RENAME .EQ $F2
SYS.OPENDIRYA .EQ $F4
SYS.READDIRA .EQ $F6
SYS.STAT .EQ $F4
SYS.FSTAT .EQ $F6
SYS.CLOSEDIRA .EQ $F8
SYS.MKDIRYA .EQ $FA
SYS.MKNOD .EQ $FC
SYS.MKFIFO .EQ $FE
SYS.OPENDIRYA .EQ $F8
SYS.READDIRA .EQ $FA
SYS.CLOSEDIRA .EQ $FC
SYS.MKDIRYA .EQ $FE
*--------------------------------------
* ProDOS ERROR CODES : $00->$5F
* Lib ERROR CODES : $80->$BF

View File

@ -47,11 +47,13 @@ S.FILEINFO.ACCESS.RN .EQ $40
S.FILEINFO.ACCESS.D .EQ $80
S.FILEINFO.ACCESS.FULL .EQ $C3
S.FILEINFO.TYPE .EQ $04
S.FILEINFO.TYPE.TXT .EQ $04
S.FILEINFO.TYPE.DIR .EQ $0F
S.FILEINFO.TYPE.SYS .EQ $FF
S.FILEINFO.AUXTYPE .EQ $05
S.FILEINFO.TOTALBLOCKS .EQ $05
S.FILEINFO.STORETYPE .EQ $07
S.FILEINFO.STORETYPE.STD .EQ $01
S.FILEINFO.STORETYPE.DIR .EQ $0D
S.FILEINFO.BLOCKSUSED .EQ $08
S.FILEINFO.MODDATE .EQ $0A

View File

@ -13,8 +13,8 @@ AUTO 6
* In :
* PULLW = PATH (PSTR)
* PULLB = MODE
* SYS.FOPEN.R .EQ $01 //Ignored (No ProDOS equivalent)
* SYS.FOPEN.W .EQ $02 //Ignored (No ProDOS equivalent)
* 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
@ -31,18 +31,19 @@ S.FOPEN jsr S.PFTCHECKPATHSTK
>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 #$C3 Yes, Create...
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 #$01 Storage=Standard Files
lda #S.FILEINFO.STORETYPE.STD
sta MLICALL.PARAMS+7
>MLICALL MLICREATE
bcc .10
@ -293,6 +294,16 @@ S.RENAME jsr S.PFTCHECKPATHYA
>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

View File

@ -133,6 +133,42 @@ S.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
.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
*--------------------------------------
* S.LoadFileYA
* in :
* Y,A = FilePath (PSTRING)
@ -192,14 +228,47 @@ S.LoadFileYA jsr S.MLIOpenYA
.99 sec
rts
*--------------------------------------
S.LoadFile.hRef .BS 1
S.LoadFile.hBuf .BS 1
* 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
S.LoadFile.Mem .BS 2
S.LoadFile.Len .BS 2
*--------------------------------------
TmpFileName .BS 16
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.FIO
LOAD SYS/KERNEL.S

View File

@ -101,7 +101,7 @@ KERNEL.SYSCALL .DA S.GetMem $00
.DA S.FileSearch
.DA S.GetFullPathYA
.DA S.LoadFileYA
.DA 0
.DA S.SaveFile
.DA 0
.DA 0
.DA 0
@ -144,12 +144,12 @@ KERNEL.SYSCALL .DA S.GetMem $00
*--------------------------------------
.DA S.REMOVEYA $F0
.DA S.RENAME
.DA S.STAT
.DA S.FSTAT
.DA S.OPENDIRYA
.DA S.READDIRA
.DA S.CLOSEDIRA
.DA S.MKDIRYA
.DA 0
.DA 0
*--------------------------------------
KERNEL.SYSCALL.FLAGS
.DA 0 $00

View File

@ -69,6 +69,8 @@ A2osX.D001 .EQ *
.INB SYS/KERNEL.S.ARG
.INB SYS/KERNEL.S.ENV
.INB SYS/KERNEL.S.EVT
.INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.PS
.EP
A2osX.D001.END .EQ *
*--------------------------------------
@ -91,8 +93,6 @@ A2osX.E000 .EQ *
.INB SYS/KERNEL.S.BIN
.INB SYS/KERNEL.S.DRV
.INB SYS/KERNEL.S.LIB
.INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.PS
*--------------------------------------
.INB SYS/KERNEL.S.PFT
.INB SYS/KERNEL.S.FILE