A2osX/SYS/KERNEL.S.DIR.txt

281 lines
5.4 KiB
Plaintext
Raw Normal View History

2016-08-24 15:42:33 +00:00
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* In :
* X = #SYSCall
* Y,A = PATH (PSTR)
* Out :
* CC : Y,A = PTR to S.DIR
* CS : A = EC
*--------------------------------------
S.OPENDIRYA jsr S.PFTCHECKPATHYA
2016-09-01 15:42:38 +00:00
>STYA ZPQuickPtr2
>STYA MLICALL.PARAMS+1 For MLIOPEN
2016-08-28 20:48:01 +00:00
2016-09-01 15:42:38 +00:00
>PUSHWI S.DIR.PRODOS
>PUSHBI S.MEM.F.INIT0
jsr S.GetMem
bcs .9
>STYA ZPQuickPtr1
stx hDIR
lda (ZPQuickPtr2)
cmp #1 One char ?
bne .7 No, Go open dir....
tay Y=1
lda (ZPQuickPtr2),y
cmp #'/' Root required ?
beq .8 Yes, Go for ONLINE Call (S.DIR.PRODOS.REF=0)
lda #SYSMGR.ERRSYN
sec
.9 rts
.7 >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.DIR.PRODOS.IOBUF
sta (ZPQuickPtr1),y
>MLICALL MLIOPEN
bcs .98
lda MLICALL.PARAMS+5 get ref_num
ldy #S.DIR.PRODOS.REF
sta (ZPQuickPtr1),y
2016-08-24 15:42:33 +00:00
2016-09-01 15:42:38 +00:00
.8 lda hDIR
2016-08-24 15:42:33 +00:00
clc
rts
2016-09-01 15:42:38 +00:00
.98 pha save MLI error
jsr S.CLOSEDIRA.1
pla get back MLI error
sec
.99 rts
*--------------------------------------
hDIR .BS 1
2016-08-24 15:42:33 +00:00
*--------------------------------------
* In :
* A = hDIR
2016-08-24 15:42:33 +00:00
* Out :
2016-09-01 15:42:38 +00:00
* CC : X = hDIREND, Y,A = PTR to S.DIRENT
* CS : A = EC, A = 0 : no more entry
2016-08-24 15:42:33 +00:00
*--------------------------------------
S.READDIRA jsr S.PFTCHECKDIRA
2016-09-01 15:42:38 +00:00
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
2016-09-02 15:14:24 +00:00
ldy #S.DIR.F
lda (ZPQuickPtr1),y
and #S.DIR.F.NOMORE
bne .9
2016-09-01 15:42:38 +00:00
ldy #S.DIR.PRODOS.REF
lda (ZPQuickPtr1),y
2016-09-02 06:09:44 +00:00
beq S.READDIRA.ROOT
jmp S.READDIRA.DIR
2016-09-01 15:42:38 +00:00
2016-09-02 15:14:24 +00:00
.9 lda #0
sec CS,A=0 no more entry
S.READDIRA.RTS rts
S.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
>LDYAI KrnBuffer256
2016-09-01 15:42:38 +00:00
>STYA MLICALL.PARAMS+2
2016-09-02 15:14:24 +00:00
>STYA ZPQuickPtr2 For PASS #2
2016-09-01 15:42:38 +00:00
>MLICALL MLIONLINE
2016-09-02 15:14:24 +00:00
bcs S.READDIRA.RTS
2016-09-01 15:42:38 +00:00
2016-09-02 15:14:24 +00:00
lda #1 +1 for Ending 0
2016-09-01 15:42:38 +00:00
sta BufSize
stz BufSize+1
ldy #0
2016-09-02 15:14:24 +00:00
.1 lda KrnBuffer256,y
2016-09-01 15:42:38 +00:00
and #$0F
beq .2
2016-09-02 15:14:24 +00:00
sec Add Filelen +1
2016-09-01 15:42:38 +00:00
adc BufSize
sta BufSize
2016-09-02 15:14:24 +00:00
bcc .11
inc BufSize+1
2016-08-24 15:42:33 +00:00
2016-09-02 15:14:24 +00:00
.11 lda #S.STAT
2016-09-01 15:42:38 +00:00
adc BufSize
sta BufSize
2016-09-02 15:14:24 +00:00
bcc .12
inc BufSize+1
.12 inx
2016-09-01 15:42:38 +00:00
.2 tya
clc
2016-09-01 15:42:38 +00:00
adc #16
tay
2016-09-02 15:14:24 +00:00
bcc .1 loop until 256 bytes scanned
2016-09-01 15:42:38 +00:00
txa
2016-09-02 15:14:24 +00:00
beq S.READDIRA.RTS A=0, CS no more DIRENT
2016-09-01 15:42:38 +00:00
2016-09-02 15:14:24 +00:00
sta EntryCount
2016-09-01 15:42:38 +00:00
>PUSHW BufSize
2016-09-02 15:14:24 +00:00
>PUSHBI S.MEM.F.INIT0
2016-09-01 15:42:38 +00:00
jsr S.GetMem
2016-09-02 15:14:24 +00:00
bcs S.READDIRA.RTS
stx hDIRENT
2016-09-01 15:42:38 +00:00
>STYA ZPQuickPtr3
2016-09-02 06:09:44 +00:00
>STYA ZPQuickPtr4
2016-09-02 15:14:24 +00:00
.3 lda (ZPQuickPtr2)
2016-09-02 06:09:44 +00:00
and #$0F
2016-09-02 15:14:24 +00:00
beq .88
tay
tax
sta (ZPQuickPtr3)
inc
sta VolName Build a string with leading / for GetFileInfo
2016-09-02 06:09:44 +00:00
2016-09-02 15:14:24 +00:00
.4 lda (ZPQuickPtr2),y
sta (ZPQuickPtr3),y
sta VolName+1,y
dey
bne .4
lda #'/'
sta VolName+1
2016-09-01 15:42:38 +00:00
2016-09-02 15:14:24 +00:00
txa
2016-09-01 15:42:38 +00:00
sec
2016-09-02 15:14:24 +00:00
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
2016-09-02 06:09:44 +00:00
S.READDIRA.DIR
2016-09-02 15:14:24 +00:00
ldx #3
ldy #S.STAT.TYPE
.7 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
sta (ZPQuickPtr3),y
iny
dex
bne .7
2016-09-02 06:09:44 +00:00
clc
rts
2016-08-24 15:42:33 +00:00
*--------------------------------------
* In :
* A = hDIR
2016-08-24 15:42:33 +00:00
*--------------------------------------
S.CLOSEDIRA jsr S.PFTCHECKDIRA
2016-09-01 15:42:38 +00:00
sta hDIR
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
lda (ZPQuickPtr1),y
beq .1
sta MLICALL.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.DIR.PRODOS.IOBUF
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
.2 lda hDIR
jsr S.FreeMemA
clc
2016-08-24 15:42:33 +00:00
rts
*--------------------------------------
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
>MLICALL MLICREATE
rts
*--------------------------------------
2016-09-01 15:42:38 +00:00
hONLINE .BS 1
2016-09-02 15:14:24 +00:00
hDIRENT .BS 1
2016-09-01 15:42:38 +00:00
BufSize .BS 2
2016-09-02 15:14:24 +00:00
EntryCount .BS 1
VolName .BS 17
2016-08-24 15:42:33 +00:00
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.DIR
LOAD SYS/KERNEL.S
ASM