mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-09 14:55:05 +00:00
Kernel version 0.8 : DIR API work in progress, JMP table reorg
This commit is contained in:
parent
2762254eef
commit
951b7b3ea3
@ -164,10 +164,12 @@ SYS.FreeStockObject .EQ $0E
|
||||
SYS.NewPStrYA .EQ $10
|
||||
SYS.PStrCpy .EQ $12
|
||||
SYS.PStrCat .EQ $14
|
||||
SYS.PStrUprYA .EQ $16
|
||||
SYS.PStrMatch .EQ $16
|
||||
|
||||
SYS.PStrUprYA .EQ $18
|
||||
SYS.PStrLwrYA .EQ $1A
|
||||
|
||||
SYS.PStr2StrArrayYA .EQ $1A
|
||||
SYS.PStr2StrArrayYA .EQ $1E
|
||||
*--------------------------------------
|
||||
SYS.LoadDrvYA .EQ $20
|
||||
SYS.LoadLibYA .EQ $22
|
||||
@ -190,10 +192,10 @@ SYS.UnsetEnvYA .EQ $3E
|
||||
*--------------------------------------
|
||||
SYS.MLICreateFile .EQ $40
|
||||
|
||||
SYS.MLICreateDirYA .EQ $44
|
||||
|
||||
SYS.MLIDestroyYA .EQ $48
|
||||
SYS.MLIRename .EQ $4A
|
||||
|
||||
|
||||
|
||||
SYS.MLISetFileInfo .EQ $4C
|
||||
|
||||
|
||||
@ -219,7 +221,7 @@ SYS.MLISetEOF .EQ $6C
|
||||
SYS.MLIGetEOFA .EQ $70
|
||||
SYS.MLISetBuf .EQ $72
|
||||
SYS.MLIGetBuf .EQ $74
|
||||
SYS.MLIGetTime .EQ $76
|
||||
|
||||
|
||||
SYS.MLIAllocIRQ .EQ $78
|
||||
SYS.MLIDeallocIRQ .EQ $7A
|
||||
@ -512,8 +514,8 @@ 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.TYPE .EQ 40 BYTE
|
||||
S.STAT.AUXTYPE .EQ 41 WORD
|
||||
*
|
||||
S.STAT .EQ 43
|
||||
*--------------------------------------
|
||||
@ -543,8 +545,11 @@ S.DIR.F .EQ 1
|
||||
S.DIR.F.NOMORE .EQ $80
|
||||
S.DIR.PRODOS.REF .EQ 2
|
||||
S.DIR.PRODOS.IOBUF .EQ 3
|
||||
|
||||
S.DIR.PRODOS .EQ 4
|
||||
S.DIR.PRODOS.EL .EQ 4
|
||||
S.DIR.PRODOS.EPB .EQ 5
|
||||
S.DIR.PRODOS.FC .EQ 6
|
||||
*
|
||||
S.DIR.PRODOS .EQ 8
|
||||
* no S.DIR
|
||||
*--------------------------------------
|
||||
* S.DIRENT for ReadDir
|
||||
|
@ -47,9 +47,12 @@ 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.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.DIR .EQ $0D
|
||||
S.FILEINFO.BLOCKSUSED .EQ $08
|
||||
S.FILEINFO.MODDATE .EQ $0A
|
||||
S.FILEINFO.MODTIME .EQ $0C
|
||||
|
@ -219,20 +219,251 @@ S.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
||||
>LDYA ZPQuickPtr4
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
||||
lda (ZPQuickPtr1),y
|
||||
sta MLICALL.PARAMS+1
|
||||
|
||||
S.READDIRA.DIR
|
||||
ldx #3
|
||||
ldy #S.STAT.TYPE
|
||||
>PUSHWI 512 Get a 512 bytes buffer for reading dir...
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
stx S.READDIRA.hMem
|
||||
|
||||
.7 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
|
||||
sta (ZPQuickPtr3),y
|
||||
iny
|
||||
dex
|
||||
bne .7
|
||||
>STYA MLICALL.PARAMS+2 For reading
|
||||
|
||||
pha
|
||||
tya
|
||||
* clc CC from S.GetMem
|
||||
adc #4 Skip 4 bytes linked list
|
||||
tay
|
||||
pla
|
||||
adc #0
|
||||
|
||||
>STYA ZPQuickPtr2 PTR to Buffer for PASS #1
|
||||
>STYA ZPQuickPtr3 PTR to Buffer for PASS #2
|
||||
|
||||
>LDYAI 512
|
||||
>STYA MLICALL.PARAMS+4
|
||||
>MLICALL MLIREAD Read A block from directory
|
||||
bcs .98
|
||||
|
||||
ldy #S.DIR.PRODOS.EL Check if first run....
|
||||
lda (ZPQuickPtr1),y
|
||||
bne .2 no, we have all we need....
|
||||
|
||||
ldy #$23+3
|
||||
.1 lda (ZPQuickPtr2),y Get EntryLength.... From Block
|
||||
sta EntryLength-$23,y
|
||||
dey
|
||||
bpl .1
|
||||
bra .4
|
||||
|
||||
.98 pha
|
||||
lda S.READDIRA.hMem
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.2 ldy #S.DIR.PRODOS.EL+3
|
||||
|
||||
.3 lda(ZPQuickPtr1),y get this session parameters from S.DIR
|
||||
sta EntryLength-S.DIR.PRODOS.EL,y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
.4 ldx EntryCount
|
||||
cpx EntryPerBlock
|
||||
|
||||
lda EntryCount+1
|
||||
sbc #0
|
||||
bcc .5 We have less than EPB to read
|
||||
ldx EntryPerBlock
|
||||
|
||||
.5 stx EntryCountIB
|
||||
stz EntryCount2Return
|
||||
|
||||
lda #1 For Ending 0
|
||||
sta BufSize
|
||||
stz BufSize+1
|
||||
|
||||
* pass #1 compute BufSize.....
|
||||
|
||||
.51 lda (ZPQuickPtr2) X = EntryCount In This Block
|
||||
beq .7 Free slot....goto next
|
||||
|
||||
jsr S.READDIR.CHK
|
||||
|
||||
.7 lda ZPQuickPtr2
|
||||
clc
|
||||
adc EntryLength
|
||||
sta ZPQuickPtr2
|
||||
bcc .71
|
||||
inc ZPQuickPtr2+1
|
||||
|
||||
.71 dex
|
||||
bne .51
|
||||
|
||||
* pass #2 Fill Buffer...
|
||||
|
||||
>PUSHW BufSize Get a BufSize bytes buffer for storing results
|
||||
>PUSHBI S.MEM.F.INIT0 make sure 0 fiiled
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
stx S.READDIRA.hDIR
|
||||
>STYA ZPQuickPtr4
|
||||
|
||||
.72 jsr DecEntryCount
|
||||
bcc .80 no more file to list...
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
beq .78
|
||||
|
||||
jsr S.READDIRA.ADD
|
||||
|
||||
.78 lda ZPQuickPtr3
|
||||
clc
|
||||
adc EntryLength
|
||||
sta ZPQuickPtr3
|
||||
bcc .79
|
||||
inc ZPQuickPtr3+1
|
||||
|
||||
.79 dec EntryCountIB
|
||||
beq .72
|
||||
|
||||
.80
|
||||
* lda #0 S.MEM.F.INIT0 already did this
|
||||
* sta (ZPQuickPtr4) Ending 0
|
||||
|
||||
ldy #S.DIR.PRODOS.EL+3
|
||||
.8 lda EntryLength-S.DIR.PRODOS.EL,y Store back this session prameters to S.DIR
|
||||
sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bpl .8
|
||||
|
||||
jsr .98 Discard READBUFFER
|
||||
|
||||
lda S.READDIRA.hDIR
|
||||
tax
|
||||
jsr S.GetMemPtrA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.READDIR.CHK tay save LEN
|
||||
|
||||
and #$F0 get storage_type
|
||||
cmp #$E0 directory header ?
|
||||
bne .1
|
||||
|
||||
inc EntryCount2Return yes, return 2 ".."
|
||||
lda #S.STAT+3 add "#.." string + S.STAT
|
||||
jsr S.READDIRA.AddBufSize
|
||||
bra .2 go add "." Entry
|
||||
|
||||
|
||||
.1 cmp #$F0 Volume header ?
|
||||
bne .3
|
||||
|
||||
.2 lda #S.STAT+2 add "#." string + S.STAT
|
||||
bra .4
|
||||
|
||||
.3 tya
|
||||
and #$F get filename len
|
||||
sec Add 1 for LEN
|
||||
adc #S.STAT
|
||||
|
||||
.4 jsr S.READDIRA.AddBufSize
|
||||
inc EntryCount2Return
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.READDIRA.ADD and #$F0
|
||||
cmp #$F0 Volume header ?
|
||||
bne .10
|
||||
|
||||
lda #1
|
||||
jsr S.READDIRA.AddToBuf
|
||||
lda #'.'
|
||||
jsr S.READDIRA.AddToBuf
|
||||
|
||||
ldy #$25 total_blocks
|
||||
lda (ZPQuickPtr3),y
|
||||
tax
|
||||
iny
|
||||
lda (ZPQuickPtr3),y
|
||||
|
||||
ldy #S.STAT.BLOCKS+1
|
||||
sta (ZPQuickPtr4),y
|
||||
dey
|
||||
txa
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
.10 cmp #$E0 directory header ?
|
||||
bne .20
|
||||
|
||||
lda #2
|
||||
jsr S.READDIRA.AddToBuf
|
||||
lda #'.'
|
||||
jsr S.READDIRA.AddToBuf
|
||||
jsr S.READDIRA.AddToBuf
|
||||
|
||||
|
||||
|
||||
|
||||
.20 cmp #$D0 directory ?
|
||||
bne .30
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
and #$0F get filename len
|
||||
tax
|
||||
jsr S.READDIRA.AddToBuf
|
||||
ldy #1
|
||||
|
||||
.21 lda (ZPQuickPtr3),y
|
||||
jsr S.READDIRA.AddToBuf
|
||||
iny
|
||||
dex
|
||||
bne .21
|
||||
|
||||
|
||||
.30
|
||||
|
||||
.80 lda ZPQuickPtr4
|
||||
clc
|
||||
adc #S.STAT
|
||||
sta ZPQuickPtr4
|
||||
bcc .8
|
||||
inc ZPQuickPtr4+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
S.READDIRA.AddBufSize
|
||||
clc
|
||||
adc BufSize
|
||||
sta BufSize
|
||||
bcc .9
|
||||
inc BufSize+1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.READDIRA.AddToBuf
|
||||
sta (ZPQuickPtr4)
|
||||
inc ZPQuickPtr4
|
||||
bne .8
|
||||
inc ZPQuickPtr4+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
DecEntryCount lda EntryCount
|
||||
sec
|
||||
sbc #1
|
||||
sta EntryCount
|
||||
bcs .9 CS, 0 or more
|
||||
lda EntryCount+1
|
||||
sbc #0
|
||||
sta EntryCount+1 CC, we reached $ffff
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.READDIRA.hMem .BS 1
|
||||
S.READDIRA.hDIR .BS 1
|
||||
*--------------------------------------
|
||||
* In :
|
||||
* A = hDIR
|
||||
*--------------------------------------
|
||||
@ -259,19 +490,24 @@ S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
|
||||
*--------------------------------------
|
||||
S.MKDIRYA jsr S.PFTCHECKPATHYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
lda #$C3
|
||||
sta MLICALL.PARAMS+3 Access
|
||||
lda #$0F
|
||||
sta MLICALL.PARAMS+4 type=Directory
|
||||
lda #$0D Storage=Linked List
|
||||
sta MLICALL.PARAMS+7
|
||||
lda #S.FILEINFO.ACCESS.FULL
|
||||
sta MLICALL.PARAMS+S.FILEINFO.ACCESS
|
||||
lda #S.FILEINFO.TYPE.DIR
|
||||
sta MLICALL.PARAMS+S.FILEINFO.TYPE
|
||||
lda #S.FILEINFO.STORETYPE.DIR
|
||||
sta MLICALL.PARAMS+S.FILEINFO.STORETYPE
|
||||
>MLICALL MLICREATE
|
||||
rts
|
||||
*--------------------------------------
|
||||
hONLINE .BS 1
|
||||
hDIRENT .BS 1
|
||||
BufSize .BS 2
|
||||
EntryCount .BS 1
|
||||
EntryLength .BS 1
|
||||
EntryPerBlock .BS 1
|
||||
EntryCount .BS 2
|
||||
EntryCountIB .BS 1
|
||||
EntryCount2Return .BS 1
|
||||
|
||||
VolName .BS 17
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -198,432 +198,6 @@ S.LoadFile.hMem .BS 1
|
||||
S.LoadFile.Mem .BS 2
|
||||
S.LoadFile.Len .BS 2
|
||||
*--------------------------------------
|
||||
* S.ListDirInitYA
|
||||
* in :
|
||||
* Y,A = PSTR /DIR,/DIR/*.?s
|
||||
* out :
|
||||
* A = hMem of Dir Listing
|
||||
*--------------------------------------
|
||||
S.ListDirInitYA >STYA ZPQuickPtr3 Store path
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
tay
|
||||
ldx #0
|
||||
|
||||
.1 lda (ZPQuickPtr3),y reverse read path until '/' found
|
||||
cmp #'/'
|
||||
beq .2
|
||||
inx
|
||||
dey
|
||||
bne .1
|
||||
|
||||
.2 stx TmpFileName store file pattern len in buffer
|
||||
txa
|
||||
beq .4 no pattern ?
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
tay
|
||||
|
||||
.3 lda (ZPQuickPtr3),y
|
||||
sta TmpFileName,x
|
||||
dey
|
||||
dex
|
||||
bne .3
|
||||
|
||||
tya
|
||||
sta (ZPQuickPtr3) remove pattern from path
|
||||
|
||||
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
||||
>PUSHBI S.MEM.F.INIT0 reset all bytes
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
|
||||
stx S.ListDirInitYA.hDir
|
||||
>STYA ZPQuickPtr4 Store LISTDIR Struct
|
||||
|
||||
>LDYA ZPQuickPtr3
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATH
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
lda TmpFileName
|
||||
beq .5
|
||||
>LDYAI TmpFileName
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATTERN
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
.5 lda (ZPQuickPtr3)
|
||||
cmp #1 length = 1 ? ('/')
|
||||
bne .6
|
||||
|
||||
jsr S.ListDirInitAV
|
||||
bcs .98
|
||||
lda S.ListDirInitYA.hDir
|
||||
rts
|
||||
|
||||
.6 jsr S.ListDirInitAD
|
||||
bcs .98
|
||||
lda S.ListDirInitYA.hDir
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda S.ListDirInitYA.hDir Discard S.LISTDIR
|
||||
jsr S.ListDirCloseA
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitYA.hDir .BS 1
|
||||
*--------------------------------------
|
||||
S.ListDirInitAV >PUSHWI 256
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>PUSHYA push buffer for online call
|
||||
txa
|
||||
sta (ZPQuickPtr4) save hONLINE buffer
|
||||
>PUSHBI 0 All devices
|
||||
jsr S.MLIOnline
|
||||
bcs .98
|
||||
ldy #S.LISTDIR.ONLINEPTR
|
||||
|
||||
* lda #0 make index point first Entry
|
||||
* sta (ZPQuickPtr4),y
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 lda (ZPQuickPtr4)
|
||||
jsr S.FreeMemA
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitAD
|
||||
* lda #0
|
||||
* sta (ZPQuickPtr4) reset hONLINE
|
||||
|
||||
>LDYA ZPQuickPtr3 Open DIR
|
||||
jsr S.MLIOpenYA
|
||||
bcs .99
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
sta (ZPQuickPtr4),y save ref_num
|
||||
txa
|
||||
ldy #S.LISTDIR.hIOBUF
|
||||
sta (ZPQuickPtr4),y save ProDOS IO buffer hMem
|
||||
|
||||
>PUSHWI 512 get Read buffer
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
txa
|
||||
ldy #S.LISTDIR.hREADBUF save Read Buffer hMem
|
||||
sta (ZPQuickPtr4),y
|
||||
jsr S.ListDirReadBlock
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #$23 get entry_length
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EL
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$24 get entry_per_block
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EPB
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$25 get File_count LO
|
||||
lda (ZPQuickPtr1),y
|
||||
clc
|
||||
adc #1 Add 1 for VOL/DIR Header
|
||||
ldy #S.LISTDIR.FC
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$26 get File_count HI
|
||||
lda (ZPQuickPtr1),y
|
||||
adc #0
|
||||
ldy #S.LISTDIR.FC+1
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
* ldy #S.LISTDIR.FI
|
||||
* lda #0
|
||||
* sta (ZPQuickPtr4),y
|
||||
* iny
|
||||
* sta (ZPQuickPtr4),y set FI to $0000
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.DirListNextA
|
||||
* A = S.LISTDIR hMEM
|
||||
* out :
|
||||
* A = hMem To Dir Entry
|
||||
*--------------------------------------
|
||||
S.ListDirNextA jsr S.GetMemPtrA Get PTR to S.LISTDIR
|
||||
>STYA R.CX
|
||||
lda (R.CX) Online Data?
|
||||
beq S.ListDirNextAD no,list files
|
||||
*--------------------------------------
|
||||
S.ListDirNextAV jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 ZPQuickPtr1 = Online DATA
|
||||
.10 ldy #S.LISTDIR.ONLINEPTR
|
||||
lda (R.CX),y
|
||||
cmp #16
|
||||
beq .9
|
||||
|
||||
inc
|
||||
sta (R.CX),y
|
||||
dec
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
|
||||
lda (ZPQuickPtr1),y
|
||||
and #$0F
|
||||
beq .10
|
||||
|
||||
sta TmpFileName
|
||||
ldx #0
|
||||
.1 iny
|
||||
inx
|
||||
lda (ZPQuickPtr1),y
|
||||
sta TmpFileName,x
|
||||
cpx TmpFileName
|
||||
bne .1
|
||||
|
||||
>PUSHWI 16
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
ldy #15
|
||||
.2 lda TmpFileName,y
|
||||
sta (ZPQuickPtr2),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda (ZPQuickPtr2) Mark Record as "VOL"
|
||||
ora #$C0
|
||||
sta (ZPQuickPtr2)
|
||||
|
||||
txa Get back hMem of Volume.Name
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirNextAD stz S.ListDirNext.hRec Reset Return Record hMem
|
||||
ldy #S.LISTDIR.FI File Index = File count ?
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.FC
|
||||
cmp (R.CX),y
|
||||
bne .1
|
||||
ldy #S.LISTDIR.FI+1
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.FC+1
|
||||
cmp (R.CX),y
|
||||
bne .1
|
||||
sec yes, exit no more file
|
||||
rts
|
||||
*--------------------------------------
|
||||
.1 ldy #S.LISTDIR.EIB Entry Index in block = Entry per block ?
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.EPB
|
||||
cmp (R.CX),y
|
||||
bne .2
|
||||
jsr S.ListDirReadBlock
|
||||
bcc .3
|
||||
rts
|
||||
*--------------------------------------
|
||||
.2 ldy #S.LISTDIR.hREADBUF
|
||||
lda (R.CX),y
|
||||
jsr S.GetMemPtrA
|
||||
.3 >STYA R.AX R.AX = READ BUFFER
|
||||
ldy #S.LISTDIR.BLKPTR
|
||||
lda (R.CX),y
|
||||
clc
|
||||
adc R.AX
|
||||
sta R.AX
|
||||
iny
|
||||
lda (R.CX),y
|
||||
adc R.AX+1
|
||||
sta R.AX+1
|
||||
|
||||
lda (R.AX) Is is a deleted file ? (storage_type=0)
|
||||
and #$F0
|
||||
beq .5
|
||||
|
||||
cmp #$F0 Volume header ?
|
||||
beq .30 yes, do not filter
|
||||
cmp #$E0 Directory header ?
|
||||
beq .30 yes, do not filter
|
||||
|
||||
ldy #S.LISTDIR.hPATTERN any filter ?
|
||||
lda (R.CX),y
|
||||
beq .30
|
||||
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA push Filter PTR
|
||||
|
||||
lda (R.AX)
|
||||
and #$0F
|
||||
sta TmpFileName
|
||||
tay
|
||||
.31 lda (R.AX),y
|
||||
sta TmpFileName,y
|
||||
dey
|
||||
bne .31
|
||||
|
||||
>PUSHWI TmpFileName push Filename PTR
|
||||
jsr S.PStrMatch
|
||||
bcs .5 no match
|
||||
|
||||
.30 ldy #S.LISTDIR.EL Get Entry length
|
||||
lda (R.CX),y
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get an entry_length buffer
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>STYA R.BX R.BX = DEST RECORD
|
||||
stx S.ListDirNext.hRec
|
||||
|
||||
ldy #S.LISTDIR.EL
|
||||
lda (R.CX),y
|
||||
tay
|
||||
dey
|
||||
.4 lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
dey
|
||||
bpl .4
|
||||
|
||||
.5 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.BLKPTR
|
||||
clc
|
||||
adc (R.CX),y
|
||||
sta (R.CX),y
|
||||
iny
|
||||
lda (R.CX),y
|
||||
adc #0
|
||||
sta (R.CX),y
|
||||
|
||||
lda (R.AX)
|
||||
and #$E0 is storage_type = $F or $E ?
|
||||
cmp #$E0 yes, do NOT increase FI
|
||||
bne .6
|
||||
|
||||
ldy #S.LISTDIR.FI Increase FILE INDEX
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
bne .6
|
||||
iny
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
|
||||
.6 lda S.ListDirNext.hRec
|
||||
bne .8
|
||||
jmp S.ListDirNextAD Nothing to return, start over for next file entry
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.ListDirReadBlock
|
||||
* In :
|
||||
* CX = LISTDIR
|
||||
* Out :
|
||||
* Y,A = READ BUFFER
|
||||
*--------------------------------------
|
||||
S.ListDirReadBlock
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
lda (R.CX),y get ref_num
|
||||
sta MLICALL.PARAMS+1
|
||||
ldy #S.LISTDIR.hREADBUF
|
||||
lda (R.CX),y get READ BUFFER
|
||||
jsr S.GetMemPtrA
|
||||
>STYA MLICALL.PARAMS+2
|
||||
>LDYAI 512
|
||||
>STYA MLICALL.PARAMS+4
|
||||
>MLICALL MLIREAD
|
||||
bcs .9
|
||||
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
|
||||
lda #4
|
||||
sta (R.CX),y
|
||||
iny
|
||||
lda #0
|
||||
sta (R.CX),y
|
||||
ldy #S.LISTDIR.EIB set EIB to 0
|
||||
sta (R.CX),y
|
||||
>LDYA MLICALL.PARAMS+2
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.ListDirNext.hRec .BS 1
|
||||
*--------------------------------------
|
||||
* S.DirListCloseA
|
||||
* in :
|
||||
* A = hS.LISTDIR
|
||||
*--------------------------------------
|
||||
S.ListDirCloseA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
jsr S.MLICloseA
|
||||
bcs * If Close Failed, we cannot free IOBUF
|
||||
|
||||
.1 ldy #S.LISTDIR.hIOBUF
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
jsr S.FreeMemA
|
||||
|
||||
.2 ldy #S.LISTDIR.hREADBUF
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .3
|
||||
jsr S.FreeMemA
|
||||
|
||||
.3 ldy #S.LISTDIR.hONLINE
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .4
|
||||
jsr S.FreeMemA
|
||||
|
||||
.4 ldy #S.LISTDIR.hPATTERN
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .5
|
||||
jsr S.FreeMemA
|
||||
|
||||
.5 ldy #S.LISTDIR.hPATH
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .6
|
||||
jsr S.FreeMemA
|
||||
|
||||
.6 pla
|
||||
jsr S.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TmpFileName .BS 16
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -12,18 +12,18 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
||||
.DA S.GetMemPtrA
|
||||
.DA S.GetMemByIDA
|
||||
.DA S.GetMemByNameYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA S.LoadStockObjectYA
|
||||
.DA S.GetStockObjectA
|
||||
.DA S.FreeStockObject
|
||||
*--------------------------------------
|
||||
.DA S.NewPStrYA $10
|
||||
.DA S.PStrCpy
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrMatch
|
||||
.DA S.PStrUprYA
|
||||
.DA 0
|
||||
.DA S.PStrLwrYA
|
||||
.DA 0
|
||||
.DA S.PStr2StrArrayYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.LoadDrvYA $20
|
||||
.DA S.LoadLibYA
|
||||
@ -45,17 +45,17 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
||||
*--------------------------------------
|
||||
.DA S.MLICreateFile $40
|
||||
.DA 0
|
||||
.DA S.MLICreateDirYA
|
||||
.DA 0
|
||||
.DA S.MLIDestroyYA
|
||||
.DA S.MLIRename
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA S.MLISetFileInfo
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.MLIGetFileInfoYA $50
|
||||
.DA S.MLIOnline
|
||||
.DA 0
|
||||
.DA S.MLISetPrefixYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA S.MLIGetPrefixYA
|
||||
.DA 0
|
||||
@ -65,19 +65,19 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
||||
.DA S.MLIRead
|
||||
.DA S.MLIWrite
|
||||
.DA S.MLICloseA
|
||||
.DA S.MLIFlushA
|
||||
.DA S.MLISetMark
|
||||
.DA S.MLIGetMarkA
|
||||
.DA S.MLISetEOF
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.MLIGetEOFA $70
|
||||
.DA S.MLISetBuf
|
||||
.DA S.MLIGetBuf
|
||||
.DA S.MLIGetTime
|
||||
.DA S.MLIAllocIRQ
|
||||
.DA S.MLIDeallocIRQA
|
||||
.DA S.MLIReadBlock
|
||||
.DA S.MLIWriteBlock
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.GetDevByIDA $80
|
||||
.DA 0
|
||||
@ -102,9 +102,9 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
||||
.DA S.GetFullPathYA
|
||||
.DA S.LoadFileYA
|
||||
.DA 0
|
||||
.DA S.ListDirInitYA
|
||||
.DA S.ListDirNextA
|
||||
.DA S.ListDirCloseA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA 0 $B0
|
||||
.DA 0
|
||||
@ -174,10 +174,10 @@ KERNEL.SYSCALL.FLAGS
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA $80
|
||||
.DA $80
|
||||
.DA $80
|
||||
.DA $80
|
||||
*--------------------------------------
|
||||
.DA 0 $30
|
||||
.DA 0
|
||||
|
@ -405,6 +405,12 @@ S.GetMemByNameYA
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.LoadStockObjectYA
|
||||
*--------------------------------------
|
||||
S.GetStockObjectA
|
||||
*--------------------------------------
|
||||
S.FreeStockObject
|
||||
*--------------------------------------
|
||||
S.SetLoMem
|
||||
clc
|
||||
rts
|
||||
|
@ -12,28 +12,10 @@ S.MLICreateFile >PULLW MLICALL.PARAMS+1
|
||||
>PULLB MLICALL.PARAMS+4 File type
|
||||
>PULLW MLICALL.PARAMS+5 Aux type
|
||||
lda #$01 Storage=Standard Files
|
||||
bra S.MLICreate
|
||||
*--------------------------------------
|
||||
S.MLICreateDirYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
lda #$C3
|
||||
sta MLICALL.PARAMS+3 Access
|
||||
lda #$0F
|
||||
sta MLICALL.PARAMS+4 type=Directory
|
||||
lda #$0D Storage=Linked List
|
||||
S.MLICreate sta MLICALL.PARAMS+7
|
||||
sta MLICALL.PARAMS+7
|
||||
>MLICALL MLICREATE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIDestroyYA >STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIDESTROY
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIRename >PULLW MLICALL.PARAMS+3
|
||||
>PULLW MLICALL.PARAMS+1
|
||||
>MLICALL MLIRENAME
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLISetFileInfo
|
||||
*--------------------------------------
|
||||
S.MLISetFileInfo
|
||||
@ -70,11 +52,6 @@ S.MLIOnline >PULLB MLICALL.PARAMS+1
|
||||
>MLICALL MLIONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLISetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLISETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIGetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETPREFIX
|
||||
@ -162,28 +139,6 @@ S.MLICloseA sta MLICALL.PARAMS+1
|
||||
>MLICALL MLICLOSE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIFlushA sta MLICALL.PARAMS+1
|
||||
>MLICALL MLIFLUSH
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLISetMark
|
||||
*--------------------------------------
|
||||
* S.MLIGetMarkA
|
||||
* in :
|
||||
* A = ref_num
|
||||
* out :
|
||||
* Y,A,X = EOF
|
||||
*--------------------------------------
|
||||
S.MLIGetMarkA sta MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETMARK
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+2
|
||||
ldx MLICALL.PARAMS+4
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.MLISetEOF
|
||||
*--------------------------------------
|
||||
* S.MLIGetEOF
|
||||
* in :
|
||||
* A = ref_num
|
||||
@ -198,32 +153,6 @@ S.MLIGetEOFA sta MLICALL.PARAMS+1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.MLISetBuf clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIGetBuf clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIGetTime >MLICALL MLIGETTIME
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIAllocIRQ >PULLW MLICALL.PARAMS+2
|
||||
>MLICALL MLIALLOCIRQ
|
||||
bcs .9
|
||||
lda MLICALL.PARAMS+1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.MLIDeallocIRQA
|
||||
sta MLICALL.PARAMS+1
|
||||
>MLICALL MLIDEALLOCIRQ
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIReadBlock clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIWriteBlock clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.MLI
|
||||
LOAD SYS/KERNEL.S
|
||||
|
@ -93,30 +93,6 @@ S.PStrCat >PULLW ZPQuickPtr2 save DST
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrUpr
|
||||
* IN:
|
||||
* Y,A = PTR to String (PSTRING)
|
||||
* OUT:
|
||||
* Uppercased String in Buffer
|
||||
*--------------------------------------
|
||||
S.PStrUprYA >STYA ZPQuickPtr1
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
|
||||
cmp #'a'
|
||||
bcc .2
|
||||
cmp #'z'+1
|
||||
bcs .2
|
||||
eor #$20
|
||||
sta (ZPQuickPtr1),y
|
||||
.2 dey
|
||||
bne .1
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrMatch
|
||||
* IN:
|
||||
* PULLB = PTR to String (PSTRING)
|
||||
@ -191,6 +167,36 @@ S.PStrMatch >PULLW ZPQuickPtr2 pull String
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrUprYA
|
||||
* S.PStrLwrYA
|
||||
* IN:
|
||||
* Y,A = PTR to String (PSTRING)
|
||||
* OUT:
|
||||
* Uppercased/lowercased String in Buffer
|
||||
*--------------------------------------
|
||||
S.PStrUprYA ldx #0
|
||||
.HS 2C bit abs
|
||||
S.PStrLwrYA ldx #2
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
cmp S.PstrUprLwr,x
|
||||
bcc .2
|
||||
cmp S.PstrUprLwr+1,x
|
||||
bcs .2
|
||||
eor #$20
|
||||
sta (ZPQuickPtr1),y
|
||||
.2 dey
|
||||
bne .1
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.PstrUprLwr .AS "azAZ"
|
||||
*--------------------------------------
|
||||
* S.PStr2StrArrayYA
|
||||
* In :
|
||||
* Y,A = PTR to String
|
||||
|
@ -77,6 +77,7 @@ A2osX.D001.END .EQ *
|
||||
A2osX.D002 .EQ *
|
||||
.PH $D000
|
||||
.INB SYS/KERNEL.S.REL
|
||||
.INB SYS/KERNEL.S.TIME
|
||||
.EP
|
||||
A2osX.D002.END .EQ *
|
||||
*--------------------------------------
|
||||
@ -93,7 +94,6 @@ A2osX.E000 .EQ *
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
.INB SYS/KERNEL.S.PS
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.TIME
|
||||
.INB SYS/KERNEL.S.PFT
|
||||
.INB SYS/KERNEL.S.FILE
|
||||
.INB SYS/KERNEL.S.DIR
|
||||
|
Loading…
Reference in New Issue
Block a user