Kernel version 0.8 : RM command

This commit is contained in:
Rémy GIBERT 2016-10-30 19:19:43 +01:00
parent da799f3f98
commit 88d139c664
7 changed files with 235 additions and 104 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,6 +13,7 @@ AUTO 6
*-------------------------------------- *--------------------------------------
MAX.COL .EQ 4 MAX.COL .EQ 4
MAX.RECURSE .EQ 8 MAX.RECURSE .EQ 8
X.MSG.ENTER .EQ 1
*-------------------------------------- *--------------------------------------
ZPPtr1 .EQ ZPBIN ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2 ZPPtr2 .EQ ZPBIN+2
@ -152,6 +153,9 @@ CS.RUN ldy #bCANCEL
.91 jsr LeaveSubDir .91 jsr LeaveSubDir
bcs .99 bcs .99
jsr BasePath..
.8 clc .8 clc
rts rts

View File

@ -11,6 +11,9 @@ AUTO 6
.INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/A2OSX.I
*-------------------------------------- *--------------------------------------
MAX.RECURSE .EQ 8
X.MSG.ENTER .EQ 0
*--------------------------------------
ZPPtr1 .EQ ZPBIN ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2 ZPPtr2 .EQ ZPBIN+2
*-------------------------------------- *--------------------------------------
@ -27,133 +30,241 @@ CS.START cld
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
*-------------------------------------- *--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR L.MSG.ERR .DA MSG.ERR
L.FullPath .DA FullPath L.STAT .DA STAT
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >SYSCALL GetArgC CS.INIT >SYSCALL GetArgC
sta ArgCount
cmp #1 cmp #1
bne .99 beq .99
lda #1 .1 dec ArgCount
beq .5
lda ArgCount
>SYSCALL GetArgA >SYSCALL GetArgA
>SYSCALL GetFullPathYA >STYA ZPPtr1
stx hFullPath
>SYSCALL ListDirInitYA lda (ZPPtr1)
bcs .98 cmp #2
ldy #hS.LISTDIR bne .4
sta (pData),y
jsr .98 ldy #1
lda (ZPPtr1),y
cmp #'-'
bne .4
lda (pPs) iny
ora #S.PS.F.EVENT Now accept events lda (ZPPtr1),y
sta (pPs)
clc ldx OptionList
rts
.98 pha .2 cmp OptionList,x
lda hFullPath beq .3
>SYSCALL FreeMemA dex
pla bne .2
sec
rts
.99 >LDYA L.MSG.USAGE
>SYSCALL PStrOutYA
lda #SYSMGR.ERRSYN lda #SYSMGR.ERRSYN
sec sec
rts rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
bcs .9
bra .1 scan for any other args
.5 ldy #index
lda (pData),y
beq .99
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintFYA
lda #SYSMGR.ERRSYN
sec
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #bCANCEL CS.RUN ldy #bCANCEL
lda (pData),y lda (pData),y
beq .10 bmi .99
ldy #bSTOP
lda (pData),y
bmi .8
sec jsr GetNextEntry
rts bcs .9
.10 ldy #bSTOP ldy #hFilter
lda (pData),y lda (pData),y
beq .1 beq .4 No filter....
clc
.99 rts
.1 ldy #hS.LISTDIR >SYSCALL GetMemPtrA
lda (pData),y >PUSHYA
>SYSCALL ListDirNextA >PUSHW ZPPtr1
>SYSCALL PStrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.PRODOS.DRIVE
lda (ZPPtr2),y ProDOS Device ?
bne .5
ldy #S.STAT.PRODOS.TYPE
lda (ZPPtr2),y
cmp #$0F Directory ?
bne .6
jmp CS.RUN.DIR
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.FILE
.9 jsr LeaveSubDir
bcs .99 bcs .99
pha ldy #bRecurse
>SYSCALL GetMemPtrA lda (pData),y
>STYA ZPPtr1 bpl .8
lda (ZPPtr1)
pha
and #$0F
sta (ZPPtr1) Adjust Filename len
pla ldy #hBasePath
and #$F0
cmp #$F0 Volume ($F) HEADER ?
beq .8
cmp #$E0 Dir ($E) HEADER ?
beq .8
ldy #hS.LISTDIR
lda (pData),y lda (pData),y
>SYSCALL GetMemPtrA >SYSCALL GetMemPtrA
>STYA ZPPtr2 >PUSHYA
>LDYA L.MSG.DIR
>SYSCALL PrintFYA
ldy #S.LISTDIR.hPATH jsr CS.RUN.DELETE.DIR
lda (ZPPtr2),y jsr CS.RUN.PRINT.RC
>SYSCALL GetMemPtrA
>STYA ZPPtr2
lda (ZPPtr2) jsr BasePath..
tax
tay
.2 lda (ZPPtr2),y .8 clc
sta FullPath,y rts
dey
bne .2
ldy #0 .99 lda #0
.3 inx sec
iny rts
*--------------------------------------
CS.RUN.DEV >PUSHW ZPPtr1
>LDYA L.MSG.FILE
>SYSCALL PrintFYA
bcs .9
ldy #bRecurse
lda (pData),y
bpl .8
jsr CS.RUN.PRINT.FILE
bcs .9
lda #0
clc
jsr CS.RUN.PRINT.RC
>LDYA ZPPtr1
jmp EnterSubDirYA
.8 clc
.9 rts
*--------------------------------------
CS.RUN.DIR ldy #bRecurse
lda (pData),y
bpl .8
ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
sta FullPath,x cmp #'.'
tya beq .8
cmp (ZPPtr1)
bne .3
stx FullPath >LDYA ZPPtr1
jmp EnterSubDirYA
>LDYA L.FullPath .8 clc
>SYSCALL PStrOutYA .9 rts
*--------------------------------------
CS.RUN.FILE jsr CS.RUN.PRINT.FILE
bcs .9
jsr CS.RUN.DELETE.FILE
jsr CS.RUN.PRINT.RC
.9 rts
*--------------------------------------
CS.RUN.PRINT.FILE
>PUSHW ZPPtr1
ldy #hBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.FullPath >LDYA L.MSG.FILE
>SYSCALL MLIDestroyYA >SYSCALL PrintFYA
bcs .5 rts
*--------------------------------------
CS.RUN.DELETE.DIR
jsr CS.RUN.GET.BASE.PATH
bra CS.RUN.DELETE
*--------------------------------------
CS.RUN.DELETE.FILE
jsr CS.RUN.GET.BASE.PATH
>PUSHW ZPPtr1
>PUSHWI UsrBuf256
>SYSCALL PStrCat
CS.RUN.DELETE >LDYAI UsrBuf256
>SYSCALL RemoveYA
rts
*--------------------------------------
CS.RUN.GET.BASE.PATH
ldy #hBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
rts
*--------------------------------------
CS.RUN.PRINT.RC pha
php
bcs .1
>LDYA L.MSG.OK >LDYA L.MSG.OK
>SYSCALL PStrOutYA
bra .8 bra .8
.5 >PUSHA .1 >PUSHA
>LDYA L.MSG.ERR >LDYA L.MSG.ERR
>SYSCALL PStrOutYA
.8 pla .8 >SYSCALL PrintFYA
>SYSCALL FreeMemA bcs .9
clc plp
ldy #bContinue
lda (pData),y
eor #$80
asl
pla
rts
.9 plx
plx
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
@ -194,34 +305,46 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT ldy #hS.LISTDIR CS.QUIT jsr LeaveSubDir
lda (pData),y bcc CS.QUIT
beq .1
>SYSCALL ListDirCloseA ldy #hFilter
.1 ldy #hDirPath
lda (pData),y lda (pData),y
beq .2 beq .3
>SYSCALL FreeMemA >SYSCALL FreeMemA
.2 clc .3 clc
rts rts
*--------------------------------------
.INB BIN/X.CPLSMVRM.S
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG.USAGE >PSTR "Usage : RM [file/Dir, *,? wildcards allowed]\n" *--------------------------------------
MSG.OK >PSTR " [Ok]\n" OptionList >PSTR "CR"
MSG.ERR >PSTR " [%h]\n" OptionVars .DA #bContinue,#bRecurse
hFullPath .BS 1 *--------------------------------------
FullPath .BS 64 MSG.USAGE >CSTR "Usage : RM [File/Dir, *,? wildcards allowed]\n -C : Continue on error\n -R : Recurse subdirectories\n"
MSG.DIR >CSTR "RM Dir :%S..."
MSG.FILE >CSTR "RM File:%S%S..."
MSG.OK >CSTR "[OK]\n"
MSG.ERR >CSTR "[%h]\n"
*--------------------------------------
STAT .BS S.STAT
ArgCount .BS 1
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
hDirPath .BS 1 Index .BS 1
hS.LISTDIR .BS 1 hDIRs .BS MAX.RECURSE
bSTOP .BS 1 hDIRENTs .BS MAX.RECURSE
oDIRENTs .BS MAX.RECURSE*2
hBasePath .BS 1
hFilter .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
bSTOP .BS 1
bContinue .BS 1
bRecurse .BS 1
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -236,9 +236,11 @@ EnterSubDirYA >STYA ZPPtr2 save SUBDIR for StrCat
lda #'/' lda #'/'
sta (ZPPtr1),y sta (ZPPtr1),y
.DO X.MSG.ENTER=1
>PUSHW ZPPtr1 >PUSHW ZPPtr1
>LDYA L.MSG.ENTER >LDYA L.MSG.ENTER
>SYSCALL PrintFYA >SYSCALL PrintFYA
.FIN
>LDYA ZPPtr1 >LDYA ZPPtr1
>SYSCALL OpenDirYA >SYSCALL OpenDirYA
@ -283,11 +285,16 @@ LeaveSubDir ldy #index
dec dec
sta (pData),y sta (pData),y
beq .9 beq .9
clc
ldy #hBasePath rts
.9 sec
rts
*--------------------------------------
BasePath.. ldy #hBasePath
lda (pData),y lda (pData),y
>SYSCALL GetMemPtrA >SYSCALL GetMemPtrA
>STYA ZPPtr1 save full path >STYA ZPPtr1 save full path
lda (ZPPtr1) get len lda (ZPPtr1) get len
@ -303,9 +310,6 @@ LeaveSubDir ldy #index
clc clc
rts rts
.9 sec
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/X.CPLSMVRM.S SAVE BIN/X.CPLSMVRM.S

View File

@ -101,7 +101,7 @@ note : '$VAR' does NOT expand Variable
| LS | Working | -A : Do Not Print . & .. | 0.8 | | LS | Working | -A : Do Not Print . & .. | 0.8 |
| | | -L : long listing with size/date... | 0.8 | | | | -L : long listing with size/date... | 0.8 |
| | | -R : Recurse subdirectories | | | | | -R : Recurse subdirectories | |
| RM | In Progress | -C : Continue On Error | | | RM | Working | -C : Continue On Error | |
| | | -R : Recurse subdirectories | | | | | -R : Recurse subdirectories | |
| CP | In Progress | -C : Continue On Error | | | CP | In Progress | -C : Continue On Error | |
| | | -R : Recurse subdirectories | | | | | -R : Recurse subdirectories | |