A2osX/BIN/CHTYP.S.txt

403 lines
6.9 KiB
Plaintext
Raw Normal View History

NEW
2019-05-02 09:52:32 +00:00
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
2018-07-23 15:28:42 +00:00
.TF BIN/CHTYP
*--------------------------------------
2018-07-23 15:28:42 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
2018-12-20 07:33:10 +00:00
.INB INC/MLI.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
*--------------------------------------
2019-04-30 16:08:47 +00:00
X.ENTER.SUBDIR .EQ 0
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPFileName .EQ ZPBIN+4
ZPFileStat .EQ ZPBIN+6
2017-10-04 15:12:03 +00:00
ZPFullPath .EQ ZPBIN+8
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
2017-10-04 15:12:03 +00:00
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #10 ZP
.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.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
2017-10-04 15:12:03 +00:00
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0
*--------------------------------------
2017-10-04 15:12:03 +00:00
CS.INIT
.1 >INC.G ArgCount
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
2017-10-04 15:12:03 +00:00
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
2017-10-04 15:12:03 +00:00
ldy #1
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
2018-08-23 15:16:20 +00:00
.99 >PUSHBI 0
>LDYA L.MSG.USAGE
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-10-21 20:54:07 +00:00
lda #E.SYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 ldy #index
lda (pData),y
bne .5
>LDYA ZPPtr1
jsr InitSrcDirYA
bcc .1
rts
.5 ldy #HexFileType
lda (pData),y
bne .99
jsr GetHexFileType
bcs .99
bra .1
.7 ldy #index processed all args
lda (pData),y
beq .99 , no src ? ERROR
ldy #HexFileType
lda (pData),y
beq .99 we also have a TYPE
2017-10-04 15:12:03 +00:00
>LDYAI 256
2018-07-20 11:51:08 +00:00
>SYSCALL getmem
2017-10-04 15:12:03 +00:00
bcs .99
>STYA ZPFullPath
txa
>STA.G hSrcFullPath
clc
rts
*--------------------------------------
2019-03-19 16:52:08 +00:00
CS.RUN ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
bcs .99
tay
2019-05-02 09:52:32 +00:00
bne .10
2019-03-19 16:52:08 +00:00
>SYSCALL GetChar
bcs .99
cmp #$03 Ctrl-C
beq .92 Abort....
cmp #$13 Ctrl-S
bne .10
2017-10-04 15:12:03 +00:00
>LDA.G bPause
eor #$ff
sta (pData),y
bne .80
2017-10-04 15:12:03 +00:00
.10 >LDA.G bPause
bne .80 Pause...
jsr GetEntry
bcs .9
2019-04-30 16:08:47 +00:00
jsr FilterMatch
bcs .8 no match, skip....
2019-04-30 16:08:47 +00:00
ldy #S.STAT.P.DRIVE
lda (ZPFileStat),y ProDOS Device ?
2018-08-24 10:20:23 +00:00
bne CS.RUN.DEV
ldy #S.STAT.P.TYPE
lda (ZPFileStat),y
cmp #$0F Directory ?
2018-08-24 10:20:23 +00:00
bne CS.RUN.FILE
jmp CS.RUN.DIR
.9 jsr LeaveSubDir
bcs .92
jsr BasePath..
.8 jsr GetNextEntry
.80 clc
rts
.92 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DIR
CS.RUN.DEV
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.FILE jsr CS.RUN.GetFilePath
2017-10-04 15:12:03 +00:00
>PUSHW ZPFullPath
2018-08-23 15:16:20 +00:00
>PUSHBI 2
>LDYA L.MSG.FILE
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
ldy #HexFileType
>PUSHB (pData),y
2018-09-05 15:22:46 +00:00
>LDYA ZPFullPath
>SYSCALL ChTyp
jsr CS.RUN.CheckErr
2017-10-04 15:12:03 +00:00
>LDA.G bRecurse
bpl .8
2017-10-04 15:12:03 +00:00
lda (ZPFileName)
cmp #'.'
beq .8
>LDYA ZPFileName
jsr EnterSubDirYA
rts
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.CheckErr bcs .1
>LDYA L.MSG.OK
2018-08-23 15:16:20 +00:00
>SYSCALL puts
rts
.1 pha
>PUSHA
2018-08-23 15:16:20 +00:00
>PUSHBI 1
>LDYA L.MSG.ERR
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-11-28 11:39:33 +00:00
>LDA.G bContinue
eor #$80
asl
pla
2018-11-28 11:39:33 +00:00
rts
*--------------------------------------
CS.RUN.GetFilePath
2017-10-04 15:12:03 +00:00
>LDA.G hSrcBasePath
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
>PUSHYA
2017-10-04 15:12:03 +00:00
2018-07-20 14:10:10 +00:00
>LDYA ZPFullPath
2017-10-04 15:12:03 +00:00
>SYSCALL StrCpy
>PUSHW ZPFileName
2018-07-16 05:52:52 +00:00
>LDYA ZPFullPath
2017-10-04 15:12:03 +00:00
>SYSCALL StrCat
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
2017-10-04 15:12:03 +00:00
>LDA.G hFilter
beq .1
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2017-10-04 15:12:03 +00:00
.1 >LDA.G hSrcFullPath
beq .8
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2017-10-04 15:12:03 +00:00
.8 clc
rts
*--------------------------------------
2017-10-04 15:12:03 +00:00
GetHexFileType ldy #$ff
.10 iny
lda (ZPPtr1),y
bne .10
2019-03-19 16:52:08 +00:00
2017-10-04 15:12:03 +00:00
cpy #3
bne .9
2017-10-04 15:12:03 +00:00
lda (ZPPtr1)
cmp #'0'
bne .1
2019-03-19 16:52:08 +00:00
ldy #1
lda (ZPPtr1),y
2019-03-19 16:52:08 +00:00
jsr IsDigit16
bcs .9
asl
asl
asl
asl
2017-10-04 15:12:03 +00:00
>STA.G HexFileType
2019-03-19 16:52:08 +00:00
ldy #2
lda (ZPPtr1),y
2019-03-19 16:52:08 +00:00
jsr IsDigit16
bcs .9
2017-10-04 15:12:03 +00:00
>ORA.G HexFileType
sta (pData),y
clc
rts
.1 ldx #0
>LDYA L.PRODOS.FT.TXT
>STYA ZPPtr2
2017-10-04 15:12:03 +00:00
.2 ldy #2
.21 lda (ZPPtr1),y
cmp #'a'
2017-10-04 15:12:03 +00:00
bcc .4
cmp #'z'+1
2017-10-04 15:12:03 +00:00
bcs .4
eor #$20
2017-10-04 15:12:03 +00:00
.4 cmp (ZPPtr2),y
bne .5
dey
2017-10-04 15:12:03 +00:00
bpl .21
lda PRODOS.FT.ID,x
2017-10-04 15:12:03 +00:00
>STA.G HexFileType
clc
rts
2017-10-04 15:12:03 +00:00
.5 clc
lda ZPPtr2
adc #3
sta ZPPtr2
lda ZPPtr2+1
adc #0
sta ZPPtr2+1
inx
cpx #PRODOS.FT.COUNT
bne .2
2019-03-19 16:52:08 +00:00
.9 sec
rts
*---------------------------------------
IsDigit16 cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'F'+1
bcc .1
cmp #'a'
bcc .9
cmp #'f'+1
bcs .9
eor #$20
.1
* clc
sbc #'A'-11 cc so A->10 (11-CC)
clc
.8 and #$0F
rts
.9 sec
rts
*--------------------------------------
2018-11-17 17:17:13 +00:00
.INB USR/SRC/BIN/X.FILEENUM.S
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "CRcr"
OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse
*--------------------------------------
MSG.USAGE .AS "Usage : CHTYP [File *,? wildcards allowed] [File type]\r\n"
.AS " File types : 0xx (Hexadecimal byte),SYS,TXT...\r\n"
.AS " -C : Continue on error\r\n"
.AZ " -R : Recurse subdirectories\r\n"
2018-08-23 15:16:20 +00:00
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"
MSG.FILE .AZ "CHTYP File:%S..."
*--------------------------------------
2018-08-24 10:20:23 +00:00
PRODOS.FT.COUNT .EQ 6
PRODOS.FT.ID .HS 0406FAFCFDFF
PRODOS.FT.TXT .AS "TXT"
.AS "BIN"
2018-08-24 10:20:23 +00:00
.AS "ASM"
.AS "BAS"
.AS "VAR"
.AS "SYS"
*--------------------------------------
.DUMMY
.OR 0
DS.START
2017-10-04 15:12:03 +00:00
ArgCount .BS 1
hFullPath .BS 1
hSrcFullPath .BS 1
STAT .BS S.STAT
Index .BS 1
hDIRs .BS X.MAX.RECURSE
hDIRENTs .BS X.MAX.RECURSE
oDIRENTs .BS X.MAX.RECURSE*2
hSrcBasePath .BS 1
hFilter .BS 1
bPause .BS 1
bContinue .BS 1
bRecurse .BS 1
HexFileType .BS 1
DS.END
.ED
*--------------------------------------
MAN
2018-11-17 17:17:13 +00:00
SAVE USR/SRC/BIN/CHTYP.S
ASM