mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-05 23:30:15 +00:00
FILE/DIR API (Work In Progress)
This commit is contained in:
parent
ddfad8ff84
commit
fe5b0ac0bf
@ -29,14 +29,14 @@ pDrv .EQ $18
|
||||
pPs .EQ $1A
|
||||
pDev .EQ $1C
|
||||
pEvent .EQ $1E
|
||||
|
||||
*--------------------------------------
|
||||
* $3A-$3F ProDOS Block Device Drivers Main
|
||||
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
|
||||
*--------------------------------------
|
||||
ZPDRV .EQ $80
|
||||
ZPBIN .EQ $90
|
||||
ZPLIB .EQ $A0 32 bytes for TCPIP
|
||||
*--------------------------------------
|
||||
* !!!!!!! RESERVED APPLESOFT.I !!!!!!!
|
||||
* $5E -> $C8
|
||||
*--------------------------------------
|
||||
R.VCPU16 .EQ $F0
|
||||
R.AX .EQ R.VCPU16
|
||||
R.AL .EQ R.VCPU16
|
||||
@ -297,51 +297,10 @@ SYS.MKDIRYA .EQ $FA
|
||||
SYS.MKNOD .EQ $FC
|
||||
SYS.MKFIFO .EQ $FE
|
||||
*--------------------------------------
|
||||
S.FINFO.ACCESS .EQ $00
|
||||
S.FINFO.TYPE .EQ $01
|
||||
S.FINFO.AUXTYPE .EQ $02
|
||||
S.FINFO.STORETYPE .EQ $04
|
||||
S.FINFO.BLOCKSUSED .EQ $05
|
||||
S.FINFO.MODDATE .EQ $07
|
||||
S.FINFO.MODTIME .EQ $09
|
||||
S.FINFO.CREATEDATE .EQ $0B
|
||||
S.FINFO.CREATETIME .EQ $0D
|
||||
S.FINFO .EQ $0F
|
||||
*--------------------------------------
|
||||
* ProDOS ERROR CODES : $00->$5F
|
||||
* Lib ERROR CODES : $80->$BF
|
||||
* Kernel ERROR CODES : $C0->$FF
|
||||
*--------------------------------------
|
||||
*$00 - No Error
|
||||
*$01 - Bad Call Number
|
||||
*$04 - Bad Parameter Count
|
||||
*$25 - Interrupt Table Full
|
||||
*$27 - I/O Error
|
||||
*$28 - No Device Connected
|
||||
*$2B - Write Protected
|
||||
*$2E - Disk Switched
|
||||
*$40 - Invalid Pathname
|
||||
*$42 - Maximum Number of Files Open
|
||||
*$43 - Invalid Reference Number
|
||||
*$44 - Directory Not Found
|
||||
*$45 - Volume Not Found
|
||||
*$46 - File Not Found
|
||||
*$47 - Duplicate File Name
|
||||
*$48 - Volume Full
|
||||
*$49 - Directory Full
|
||||
*$4A - Incompatible File Format
|
||||
*$4B - Unsupported Storage Type
|
||||
*$4C - End of File, No More Data
|
||||
*$4D - Beyond EOF
|
||||
*$4E - File Access Error, File Locked
|
||||
*$50 - File Already Open
|
||||
*$51 - Directory Structure Damaged
|
||||
*$53 - Invalid Parameter
|
||||
*$55 - Too Many Volumes
|
||||
*$56 - Bad Buffer Address
|
||||
*$57 - Duplicate Volume
|
||||
*$5A - File Structure Damaged
|
||||
*--------------------------------------
|
||||
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
||||
MEMMGR.ERROOH .EQ $FE Out Of Handle Error
|
||||
*--------------------------------------
|
||||
@ -549,8 +508,10 @@ S.STAT.MTIME .EQ 26 DWORD
|
||||
S.STAT.CTIME .EQ 30 DWORD
|
||||
S.STAT.BLOCKS .EQ 34 DWORD
|
||||
S.STAT.BLKSIZE .EQ 38 WORD
|
||||
S.STAT.TYPE .EQ 40
|
||||
S.STAT.AUXTYPE .EQ 41
|
||||
*
|
||||
S.STAT .EQ 40
|
||||
S.STAT .EQ 43
|
||||
*--------------------------------------
|
||||
* S.FILE for FOPEN,FREAD......
|
||||
*--------------------------------------
|
||||
@ -574,7 +535,8 @@ S.FILE.PRODOS .EQ 4
|
||||
* S.DIR for OpenDir,ReadDir,CloseDir
|
||||
*--------------------------------------
|
||||
S.DIR.HANDLER .EQ 0
|
||||
|
||||
S.DIR.F .EQ 1
|
||||
S.DIR.F.NOMORE .EQ $80
|
||||
S.DIR.PRODOS.REF .EQ 2
|
||||
S.DIR.PRODOS.IOBUF .EQ 3
|
||||
|
||||
@ -583,10 +545,9 @@ S.DIR.PRODOS .EQ 4
|
||||
*--------------------------------------
|
||||
* S.DIRENT for ReadDir
|
||||
*--------------------------------------
|
||||
S.DIRENT.STAT .EQ 0
|
||||
S.DIRENT.NAME .EQ S.STAT
|
||||
*
|
||||
S.DIRENT.PRODOS .EQ S.STAT+16 PSTR (LEN+15 MAX)
|
||||
S.DIRENT.NAME .EQ 0
|
||||
* Variable size
|
||||
S.DIRENT.STAT .EQ S.STAT
|
||||
*--------------------------------------
|
||||
S.PFT.PATH .EQ 0
|
||||
S.PFT.HANDLER .EQ 23
|
||||
|
@ -39,6 +39,55 @@ MLIGETEOF .EQ $D1
|
||||
MLISETBUF .EQ $D2
|
||||
MLIGETBUF .EQ $D3
|
||||
*--------------------------------------
|
||||
S.FILEINFO.ACCESS .EQ $03
|
||||
S.FILEINFO.ACCESS.R .EQ $01
|
||||
S.FILEINFO.ACCESS.W .EQ $02
|
||||
S.FILEINFO.ACCESS.B .EQ $20
|
||||
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.AUXTYPE .EQ $05
|
||||
S.FILEINFO.TOTALBLOCKS .EQ $05
|
||||
S.FILEINFO.STORETYPE .EQ $07
|
||||
S.FILEINFO.BLOCKSUSED .EQ $08
|
||||
S.FILEINFO.MODDATE .EQ $0A
|
||||
S.FILEINFO.MODTIME .EQ $0C
|
||||
S.FILEINFO.CREATEDATE .EQ $0E
|
||||
S.FILEINFO.CREATETIME .EQ $10
|
||||
*
|
||||
S.FILEINFO .EQ $12
|
||||
*--------------------------------------
|
||||
*$00 - No Error
|
||||
*$01 - Bad Call Number
|
||||
*$04 - Bad Parameter Count
|
||||
*$25 - Interrupt Table Full
|
||||
*$27 - I/O Error
|
||||
*$28 - No Device Connected
|
||||
*$2B - Write Protected
|
||||
*$2E - Disk Switched
|
||||
*$40 - Invalid Pathname
|
||||
*$42 - Maximum Number of Files Open
|
||||
*$43 - Invalid Reference Number
|
||||
*$44 - Directory Not Found
|
||||
*$45 - Volume Not Found
|
||||
*$46 - File Not Found
|
||||
*$47 - Duplicate File Name
|
||||
*$48 - Volume Full
|
||||
*$49 - Directory Full
|
||||
*$4A - Incompatible File Format
|
||||
*$4B - Unsupported Storage Type
|
||||
*$4C - End of File, No More Data
|
||||
*$4D - Beyond EOF
|
||||
*$4E - File Access Error, File Locked
|
||||
*$50 - File Already Open
|
||||
*$51 - Directory Structure Damaged
|
||||
*$53 - Invalid Parameter
|
||||
*$55 - Too Many Volumes
|
||||
*$56 - Bad Buffer Address
|
||||
*$57 - Duplicate Volume
|
||||
*$5A - File Structure Damaged
|
||||
*--------------------------------------
|
||||
MLI.ERR.BADCALL .EQ $01
|
||||
MLI.ERR.BADCNT .EQ $04
|
||||
MLI.ERR.IRQFULL .EQ $25
|
||||
@ -56,7 +105,6 @@ MLI.ERR.DUPFILE .EQ $47
|
||||
MLI.ERR.OVERRUN .EQ $48
|
||||
MLI.ERR.VOLFULL .EQ $49
|
||||
MLI.ERR.EOF .EQ $4C
|
||||
|
||||
*--------------------------------------
|
||||
MLI .EQ $BF00
|
||||
JSPARE .EQ $BF03
|
||||
@ -97,21 +145,19 @@ LEVEL .EQ $BF94
|
||||
BUBIT .EQ $BF95
|
||||
SPARE1 .EQ $BF96
|
||||
MACHID .EQ $BF98
|
||||
*--------------------------------------
|
||||
MACHID.TYPE .EQ %11001000
|
||||
MACHID.TYPE.II .EQ %00000000
|
||||
MACHID.TYPE.IIp .EQ %01000000
|
||||
MACHID.TYPE.IIe .EQ %10000000
|
||||
MACHID.TYPE.IIc .EQ %10001000
|
||||
MACHID.TYPE.III .EQ %11000000
|
||||
MACHID.RAM .EQ %00110000
|
||||
MACHID.RAM.128 .EQ %00110000
|
||||
MACHID.RAM.64 .EQ %00100000
|
||||
MACHID.RAM.48 .EQ %00010000
|
||||
MACHID.SPARE .EQ %00000100
|
||||
MACHID.COL80 .EQ %00000010
|
||||
MACHID.CLK .EQ %00000001
|
||||
*--------------------------------------
|
||||
MACHID.TYPE .EQ %11001000
|
||||
MACHID.TYPE.II .EQ %00000000
|
||||
MACHID.TYPE.IIp .EQ %01000000
|
||||
MACHID.TYPE.IIe .EQ %10000000
|
||||
MACHID.TYPE.IIc .EQ %10001000
|
||||
MACHID.TYPE.III .EQ %11000000
|
||||
MACHID.RAM .EQ %00110000
|
||||
MACHID.RAM.128 .EQ %00110000
|
||||
MACHID.RAM.64 .EQ %00100000
|
||||
MACHID.RAM.48 .EQ %00010000
|
||||
MACHID.SPARE .EQ %00000100
|
||||
MACHID.COL80 .EQ %00000010
|
||||
MACHID.CLK .EQ %00000001
|
||||
SLTBYT .EQ $BF99
|
||||
PFIXPTR .EQ $BF9A
|
||||
MLIACTV .EQ $BF9B
|
||||
|
@ -74,81 +74,162 @@ hDIR .BS 1
|
||||
S.READDIRA jsr S.PFTCHECKDIRA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #S.DIR.F
|
||||
lda (ZPQuickPtr1),y
|
||||
and #S.DIR.F.NOMORE
|
||||
bne .9
|
||||
|
||||
ldy #S.DIR.PRODOS.REF
|
||||
lda (ZPQuickPtr1),y
|
||||
beq S.READDIRA.ROOT
|
||||
jmp S.READDIRA.DIR
|
||||
|
||||
S.READDIRA.ROOT >PUSHWI 256 Get Buffer for ONLINE call
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr2
|
||||
stx hONLINE
|
||||
stz MLICALL.PARAMS+1
|
||||
>STYA MLICALL.PARAMS+2
|
||||
>MLICALL MLIONLINE
|
||||
bcs .98
|
||||
.9 lda #0
|
||||
sec CS,A=0 no more entry
|
||||
S.READDIRA.RTS rts
|
||||
|
||||
lda #1 Ending 0
|
||||
S.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
||||
>LDYAI KrnBuffer256
|
||||
>STYA MLICALL.PARAMS+2
|
||||
>STYA ZPQuickPtr2 For PASS #2
|
||||
>MLICALL MLIONLINE
|
||||
bcs S.READDIRA.RTS
|
||||
|
||||
lda #1 +1 for Ending 0
|
||||
sta BufSize
|
||||
stz BufSize+1
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda (ZPQuickPtr2),y
|
||||
.1 lda KrnBuffer256,y
|
||||
and #$0F
|
||||
beq .2
|
||||
|
||||
sec Add Filelen +1
|
||||
adc BufSize
|
||||
sta BufSize
|
||||
lda #0
|
||||
sec Add Filelen +1
|
||||
adc BufSize
|
||||
sta BufSize
|
||||
bcc .11
|
||||
inc BufSize+1
|
||||
|
||||
lda #S.STAT
|
||||
.11 lda #S.STAT
|
||||
adc BufSize
|
||||
sta BufSize
|
||||
lda /S.STAT
|
||||
adc BufSize+1
|
||||
sta BufSize+1
|
||||
|
||||
inx
|
||||
bcc .12
|
||||
inc BufSize+1
|
||||
|
||||
.12 inx
|
||||
|
||||
.2 tya
|
||||
clc
|
||||
adc #16
|
||||
tay
|
||||
bcc .1
|
||||
bcc .1 loop until 256 bytes scanned
|
||||
|
||||
txa
|
||||
beq .99 A=0, CS no more DIRENT
|
||||
beq S.READDIRA.RTS A=0, CS no more DIRENT
|
||||
|
||||
sta EntryCount
|
||||
|
||||
>PUSHW BufSize
|
||||
>PUSHBI 0
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
bcs S.READDIRA.RTS
|
||||
stx hDIRENT
|
||||
>STYA ZPQuickPtr3
|
||||
>STYA ZPQuickPtr4
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda (ZPQuickPtr2),y
|
||||
.3 lda (ZPQuickPtr2)
|
||||
and #$0F
|
||||
beq .2
|
||||
beq .88
|
||||
tay
|
||||
tax
|
||||
sta (ZPQuickPtr3)
|
||||
inc
|
||||
sta VolName Build a string with leading / for GetFileInfo
|
||||
|
||||
.4 lda (ZPQuickPtr2),y
|
||||
sta (ZPQuickPtr3),y
|
||||
sta VolName+1,y
|
||||
dey
|
||||
bne .4
|
||||
lda #'/'
|
||||
sta VolName+1
|
||||
|
||||
lda #0 A=0, CS no more DIRENT
|
||||
|
||||
.98 pha
|
||||
lda hONLINE
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
txa
|
||||
sec
|
||||
.99 rts
|
||||
adc ZPQuickPtr3
|
||||
sta ZPQuickPtr3
|
||||
bcc .41
|
||||
inc ZPQuickPtr3+1
|
||||
|
||||
.41 >LDYAI VolName
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETFILEINFO
|
||||
bcs .80
|
||||
|
||||
lda MLICALL.PARAMS+S.FILEINFO.ACCESS
|
||||
cmp #S.FILEINFO.ACCESS.FULL
|
||||
bne .5
|
||||
|
||||
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
|
||||
bra .6
|
||||
|
||||
.5 and #S.FILEINFO.ACCESS.R
|
||||
beq .6
|
||||
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
|
||||
|
||||
.6 ldy #S.STAT.MODE
|
||||
sta (ZPQuickPtr3),y
|
||||
|
||||
ldy #S.STAT.BLOCKS
|
||||
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
||||
sta (ZPQuickPtr3),y
|
||||
iny
|
||||
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
||||
sta (ZPQuickPtr3),y
|
||||
ldy #S.STAT.BLKSIZE+1
|
||||
lda #2 Block size is $200 for ProDOS
|
||||
sta (ZPQuickPtr3),y
|
||||
|
||||
.80 lda ZPQuickPtr3
|
||||
clc
|
||||
adc #S.STAT
|
||||
sta ZPQuickPtr3
|
||||
bcc .88
|
||||
inc ZPQuickPtr3+1
|
||||
|
||||
.88 lda ZPQuickPtr2
|
||||
clc
|
||||
adc #16
|
||||
sta ZPQuickPtr2
|
||||
bcc .89
|
||||
inc ZPQuickPtr2+1
|
||||
.89 dec EntryCount
|
||||
bne .3
|
||||
|
||||
lda #0
|
||||
sta (ZPQuickPtr3) Ending 0
|
||||
|
||||
ldy #S.DIR.F
|
||||
lda #S.DIR.F.NOMORE
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldx hDIRENT
|
||||
>LDYA ZPQuickPtr4
|
||||
clc
|
||||
rts
|
||||
|
||||
S.READDIRA.DIR
|
||||
ldx #3
|
||||
ldy #S.STAT.TYPE
|
||||
|
||||
.7 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
|
||||
sta (ZPQuickPtr3),y
|
||||
iny
|
||||
dex
|
||||
bne .7
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -177,7 +258,10 @@ S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
|
||||
rts
|
||||
*--------------------------------------
|
||||
hONLINE .BS 1
|
||||
hDIRENT .BS 1
|
||||
BufSize .BS 2
|
||||
EntryCount .BS 1
|
||||
VolName .BS 17
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.DIR
|
||||
|
Loading…
x
Reference in New Issue
Block a user