A2osX/BIN/X.CPMV.S.txt
Rémy GIBERT bae3f91aab 0.9
2017-01-12 18:43:45 +01:00

400 lines
7.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ldy #bCANCEL
lda (pData),y
bmi .99
ldy #bSTOP
lda (pData),y
bmi .8
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 ?
bne .6
jmp CS.RUN.DIR
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.FILE
.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.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
cmp #'.'
beq .8
jsr CS.RUN.PRINT.DIR
bcs .9
jsr CS.RUN.COPY.DIR
jsr CS.RUN.PRINT.RC
bcs .9
>LDYA ZPPtr1
jmp EnterSubDirYA
.8 clc
.9 rts
*--------------------------------------
CS.RUN.FILE jsr CS.RUN.PRINT.FILE
bcs .9
jsr CS.RUN.COPY.FILE
jsr CS.RUN.PRINT.RC
bcs .9
.DO X.DELETE.SOURCE=1
jsr CS.RUN.DELETE.FILE
jsr CS.RUN.PRINT.RC
bcs .9
.FIN
.9 rts
*--------------------------------------
CS.RUN.PRINT.DIR
jsr CS.RUN.GET.SRC.DST
>LDYA L.MSG.DIR
bra CS.RUN.PRINT
CS.RUN.PRINT.FILE
jsr CS.RUN.GET.SRC.DST
>LDYA L.MSG.FILE
CS.RUN.PRINT >SYSCALL CPrintFYA
rts
CS.RUN.GET.SRC.DST
ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
rts
*--------------------------------------
CS.RUN.COPY.DIR ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
>PUSHW ZPPtr1
>PUSHWI UsrBuf256
>SYSCALL PStrCat
>LDYAI UsrBuf256
>SYSCALL MKDirYA
rts
*--------------------------------------
CS.RUN.COPY.FILE
jsr CS.RUN.MAKE.SRC
clc
rts
*--------------------------------------
.DO X.DELETE.SOURCE=1
*--------------------------------------
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
clc
rts
*--------------------------------------
.FIN
*--------------------------------------
CS.RUN.GET.BASE.PATH
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
rts
*--------------------------------------
CS.RUN.MAKE.SRC ldy #hSrcBasePath
.HS 2C bit abs
CS.RUN.MAKE.DST ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
>PUSHW ZPPtr1
>PUSHWI UsrBuf256
>SYSCALL PStrCat
>LDYAI UsrBuf256
rts
*--------------------------------------
CS.RUN.PRINT.RC 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 ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hStdIn
cmp (pPs),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
ldy #bCANCEL
sta (pData),y
bra .8
.1 cmp #$13 Ctrl-S
bne .8
ldy #bSTOP
lda (pData),y
eor #$FF
sta (pData),y
.8 clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
ldy #hFilter
lda (pData),y
beq .3
>SYSCALL FreeMemA
.3 clc
rts
*--------------------------------------
MAN
SAVE BIN/X.CPMV.S
LOAD BIN/CP.S
ASM