A2osX/BIN/CHTYP.S.txt

390 lines
6.9 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/BIN/CHTYP
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
*--------------------------------------
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
>SYSCALL GetArg.A
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
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.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
>SYSCALL GetMem.YA
bcs .99
>STYA ZPFullPath
txa
>STA.G hSrcFullPath
clc
rts
*--------------------------------------
2017-10-04 15:12:03 +00:00
CS.RUN >SYSCALL GetChar
bcs .10 no char
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
2017-10-04 15:12:03 +00:00
>LDA.G hFilter
beq .4 No filter....
>SYSCALL GetMemPtr.A
>PUSHYA
>PUSHW ZPFileName
2017-10-04 15:12:03 +00:00
>SYSCALL StrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPFileStat),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPFileStat),y
cmp #$0F Directory ?
bne .6
jmp CS.RUN.DIR
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.FILE
.9 jsr LeaveSubDir
bcs .92
jsr BasePath..
.8 jsr GetNextEntry
.80 clc
rts
.92 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DIR
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
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
>LDYA L.MSG.FILE
>SYSCALL PrintF.YA
bcs .9
ldy #HexFileType
>PUSHB (pData),y
2017-10-04 15:12:03 +00:00
>PUSHW 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
>SYSCALL PrintF.YA
rts
.1 pha
2017-10-04 15:12:03 +00:00
>LDA.G bContinue
bpl .2
pla
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintF.YA
bcs .9
rts
.2 lda #13
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
pla
sec
.9 rts
*--------------------------------------
CS.RUN.GetFilePath
2017-10-04 15:12:03 +00:00
>LDA.G hSrcBasePath
>SYSCALL GetMemPtr.A
>PUSHYA
2017-10-04 15:12:03 +00:00
>PUSHW ZPFullPath
>SYSCALL StrCpy
>PUSHW ZPFileName
2017-10-04 15:12:03 +00:00
>PUSHW ZPFullPath
>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
>SYSCALL FreeMem.A
2017-10-04 15:12:03 +00:00
.1 >LDA.G hSrcFullPath
beq .8
>SYSCALL FreeMem.A
.8 clc
rts
*--------------------------------------
2017-10-04 15:12:03 +00:00
GetHexFileType ldy #$ff
.10 iny
lda (ZPPtr1),y
bne .10
cpy #3
bne .9
2017-10-04 15:12:03 +00:00
lda (ZPPtr1)
cmp #'0'
bne .1
iny
lda (ZPPtr1),y
cmp #'0'
bcc .9
cmp #'9'+1
bcs .9
asl
asl
asl
asl
2017-10-04 15:12:03 +00:00
>STA.G HexFileType
iny
lda (ZPPtr1),y
cmp #'0'
bcc .9
cmp #'9'+1
bcs .9
2017-10-04 15:12:03 +00:00
and #$0F
>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
.9 sec
rts
*--------------------------------------
.INB /A2OSX.SRC/BIN/X.FILEENUM.S
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "CRcr"
OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse
*--------------------------------------
2017-10-04 15:12:03 +00:00
MSG.USAGE >CSTR "Usage : CHTYP [File *,? wildcards allowed] [File type : 0xx (Hexadecimal byte),SYS,TXT....]\r\n -C : Continue on error\r\n -R : Recurse subdirectories\r\n"
MSG.OK >CSTR "[OK]\r\n"
MSG.ERR >CSTR "[%h]\r\n"
MSG.FILE >CSTR "CHTYP File:%S..."
2017-10-04 15:12:03 +00:00
Tmp .BS 1
*--------------------------------------
PRODOS.FT.COUNT .EQ 7
PRODOS.FT.ID .HS 0406FAFCFDE2FF
PRODOS.FT.TXT .AS "TXT"
.AS "BIN"
.AS "S-C"
.AS "BAS"
.AS "VAR"
.AS "ATK"
.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
SAVE /A2OSX.SRC/BIN/CHTYP.S
ASM