A2osX/BIN/X.CPMV.S.txt

414 lines
7.3 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
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.ERR .DA MSG.ERR
L.STAT .DA STAT
.DA 0
*--------------------------------------
CS.INIT >SYSCALL GetArgC
sta ArgCount
cmp #1
beq .99
stz ArgIndex
.1 dec ArgCount
beq .7
inc ArgIndex
lda ArgIndex
>SYSCALL GetArgA
>STYA ZPPtr1
lda (ZPPtr1)
cmp #2
bne .4
ldy #1
lda (ZPPtr1),y
cmp #'-'
bne .4
iny
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL CPrintFYA
lda #SYSMGR.ERRSYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 ldy #index
lda (pData),y
bne .5 Already have a Src dir...
>LDYA ZPPtr1
jsr InitSrcDirYA
bcc .1 success, scan for any other args
rts
.5 ldy #hDstBasePath
lda (pData),y
bne .99 we already have a second arg....error!
>LDYA ZPPtr1
jsr InitDstDirYA
bcc .1 success, scan for any other args
rts
.7 ldy #index processed all args
lda (pData),y
beq .99 , no src ? ERROR
ldy #hDstBasePath
lda (pData),y
bne .8 we also have a Dst folder
ldy #S.PS.hPREFIX no dst folder, use actual prefix
lda (pPs),y
>SYSCALL GetMemPtrA
jsr InitDstDirYA
bcs .99
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
*--------------------------------------
CS.RUN >SYSCALL GetC
bcs .1 no char
cmp #$03 Ctrl-C
beq .99 Abort....
cmp #$13 Ctrl-S
bne .1
ldy #bPause
lda (pData),y
eor #$ff
sta (pData),y
bne .8
.1 jsr GetNextEntry
bcs .9
ldy #hFilter
lda (pData),y
beq .4 No filter....
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
>SYSCALL PStrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPPtr2),y
cmp #$0F Directory ?
beq .6
jmp CS.RUN.FILE
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.DIR
.9 jsr LeaveSubDir
bcs .99
ldy #bRecurse
lda (pData),y
bpl .8
.DO X.DELETE.SOURCE=1
jsr CS.RUN.DELETE.DIR
jsr CS.RUN.PRINT.RC
bcs .99
.FIN
jsr BasePath..
.8 clc
rts
.99 lda #0
sec
rts
*--------------------------------------
CS.RUN.DEV >PUSHW ZPPtr1
>LDYA L.MSG.FILE
>SYSCALL CPrintFYA
bcs .9
ldy #bRecurse
lda (pData),y
bpl .8
jsr CS.RUN.PrintFile
bcs .9
lda #0
clc
jsr CS.RUN.PrintErr
>LDYA ZPPtr1
jmp EnterSubDirYA
.8 clc
.9 rts
*--------------------------------------
CS.RUN.DIR ldy #bRecurse
lda (pData),y
bpl .8
ldy #1
lda (ZPPtr1),y
cmp #'.'
beq .8
jsr CS.RUN.PrintDir
bcs .9
jsr CS.RUN.CopyDir
bcs .9
>LDYA ZPPtr1
jmp EnterSubDirYA
.8 clc
rts
.9 jsr CS.RUN.PrintErr
rts
*--------------------------------------
CS.RUN.FILE jsr CS.RUN.PrintFile
bcs .9
jsr CS.RUN.CopyFile
bcs .9
.DO X.DELETE.SOURCE=1
jsr CS.RUN.DelFile
bcs .9
.FIN
.9 jsr CS.RUN.PrintErr
rts
*--------------------------------------
CS.RUN.PrintDir ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.MSG.DIR
>SYSCALL CPrintFYA
rts
*--------------------------------------
CS.RUN.PrintFile
ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.MSG.FILE
>SYSCALL CPrintFYA
rts
*--------------------------------------
CS.RUN.CopyDir ldy #hDstBasePath
jsr CS.RUN.GetFilePath
>LDYAI UsrBuf256
>SYSCALL MKDirYA
rts
*--------------------------------------
CS.RUN.CopyFile ldy #S.STAT.P.AUXTYPE
>PUSHB (ZPPtr2),y
iny
>PUSHB (ZPPtr2),y
ldy #S.STAT.P.TYPE
>PUSHB (ZPPtr2),y
>PUSHBI SYS.FOpen.R
ldy #hSrcBasePath
jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256
>SYSCALL FOpen
bcs .9
ldy #hSrcFile
sta (pData),y
ldy #S.STAT.P.AUXTYPE
>PUSHB (ZPPtr2),y
iny
>PUSHB (ZPPtr2),y
ldy #S.STAT.P.TYPE
>PUSHB (ZPPtr2),y
>PUSHBI SYS.FOpen.W+SYS.FOpen.X
ldy #hDstBasePath
jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256
>SYSCALL FOpen
bcs .9
ldy #hDstFile
sta (pData),y
ldy #hDstFile
lda (pData),y
>SYSCALL FCloseA
ldy #hSrcFile
lda (pData),y
>SYSCALL FCloseA
clc
.9 rts
*--------------------------------------
.DO X.DELETE.SOURCE=1
*--------------------------------------
CS.RUN.DelDir ldy #hSrcBasePath
jsr CS.RUN.GetBasePath
>SYSCALL RemoveYA
rts
*--------------------------------------
CS.RUN.DelFile ldy #hSrcBasePath
jsr CS.RUN.GetFilePath
>SYSCALL RemoveYA
rts
*--------------------------------------
.FIN
*--------------------------------------
CS.RUN.GetFilePath
jsr CS.RUN.GetBasePath
>PUSHW ZPPtr1
>PUSHWI UsrBuf256
>SYSCALL PStrCat
rts
*--------------------------------------
CS.RUN.GetBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
rts
*--------------------------------------
CS.RUN.PrintErr pha
php
bcs .1
>LDYA L.MSG.OK
bra .8
.1 >PUSHA
>LDYA L.MSG.ERR
.8 >SYSCALL CPrintFYA
bcs .9
plp
bcc .81
ldy #bContinue
lda (pData),y
eor #$80
asl
.81 pla
rts
.9 plx
plx
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
ldy #hFilter
lda (pData),y
beq .8
>SYSCALL FreeMemA
.8 clc
rts
*--------------------------------------
MAN
SAVE BIN/X.CPMV.S
LOAD BIN/CP.S
ASM