Files
A2osX/BIN/ATTR.S.txt

455 lines
7.6 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.

NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/attr
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
X.ENTER.SUBDIR .EQ 0
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
X.RESET.SRC.DIR .EQ 0
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
ZPFullPath .BS 2
ArgIndex .BS 1
bWrite .BS 1
AttrAND .BS 1
AttrORA .BS 1
bContinue .BS 1
bRecurse .BS 1
bPause .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #2 BIN Layout Version 2
.DA #0
.DA #0
.DA CS.END
.DA ID.END
.DA DS.END
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.SIG
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIRDUMP .DA MSG.DIRDUMP
L.MSG.FILEDUMP .DA MSG.FILEDUMP
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN lda #S.FI.A.FULL+S.FI.A.B+S.FI.A.I
sta AttrAND
.10 inc ArgIndex
lda ArgIndex
>LIBC ArgV
bcs .8
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
beq .1
cmp #'+'
bne .4
.1 jsr CS.RUN.CheckSwitch
bcc .10
.9 >LDYA L.MSG.USAGE
>LIBC PutS
lda #E.SYN
sec
.99 rts
*--------------------------------------
.4 >LDA.G pSrcBasePath+1
bne .9
>LDYA ZPPtr1
jsr X.InitSrcDirYA
bcc .10
rts
.8 >LDA.G pSrcBasePath+1
beq .9
>LDYAI 256
>LIBC Malloc
bcs .99
>STYA ZPFullPath
*--------------------------------------
CS.RUN.LOOP >SLEEP
jsr X.CheckCtrl
bcs .99
bvs CS.RUN.LOOP Pause...
jsr X.GetEntry
bcs CS.RUN.LEAVE
ldy #S.STAT.MODE+1
lda (ZPFileStat),y
and #$70
bne .5 REG file ?
jsr CS.RUN.FILE
bcc CS.RUN.NEXT
rts
.5 cmp /S.STAT.MODE.DIR DIR ?
bne .9
.6 jsr CS.RUN.DIR
bcc CS.RUN.NEXT
rts
.9 lda #MLI.E.UNSUPST
sec
.99 rts
*--------------------------------------
CS.RUN.NEXT jsr X.GetNextEntry
bcc CS.RUN.LOOP
CS.RUN.LEAVE jsr X.LeaveSubDir
bcs .90
jsr X.BasePath..
jmp CS.RUN.NEXT
.90 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DIR lda (ZPFileName)
cmp #'.'
bne .1
ldy #1
lda (ZPFileName),y
beq .8
cmp #'.'
bne .1
iny
lda (ZPFileName),y
beq .8
.1 jsr X.IncludeMatch
bcs .8
jsr CS.RUN.GetFilePath
bcs .9
bit bWrite
bpl .2
>SS
>PUSHW L.MSG.DIR
>PUSHW ZPFullPath
>PUSHBI 2
>LIBC PrintF
>SR
bcs .9
jsr CS.RUN.SetAttr
bcc .7
rts
.8 clc
.9 rts
.2 >SS
>PUSHW L.MSG.DIRDUMP
jsr Access2CSTR
>PUSHW ZPFullPath
>PUSHBI 4
>LIBC PrintF
>SR
bcs .9
.7 bit bRecurse
bpl .8
>LDYA ZPFileName
jmp X.EnterSubDirYA
*--------------------------------------
CS.RUN.FILE jsr X.IncludeMatch
bcs .8
jsr CS.RUN.GetFilePath
bcs .9
bit bWrite
bpl .2
>SS
>PUSHW L.MSG.FILE
>PUSHW ZPFullPath
>PUSHBI 2
>LIBC PrintF
>SR
bcs .9
jmp CS.RUN.SetAttr
.2 >SS
>PUSHW L.MSG.FILEDUMP
jsr Access2CSTR
>PUSHW ZPFullPath
>PUSHBI 4
>LIBC PrintF
>SR
.9 rts
.8 clc
rts
*--------------------------------------
CS.RUN.SetAttr >SS
>PUSHW ZPFullPath
ldy #S.STAT.P.ACCESS
lda (ZPFileStat),y
and AttrAND
ora AttrORA
>PUSHA
>LIBC SetAttr
>SR
bcs .1
>LDYA L.MSG.OK
>LIBC PutS
rts
.1 tay
>SS
>PUSHW L.MSG.ERR
tya
>PUSHA
>PUSHBI 1
>LIBC PrintF
>SR
lda bContinue
eor #$80
asl
pla
rts
*--------------------------------------
CS.RUN.GetFilePath
>SS
>PUSHW ZPFullPath
>PUSHW.G pSrcBasePath
>LIBC StrCpy
>SR
>SS
>PUSHW ZPFullPath
>PUSHW ZPFileName
>LIBC StrCat
>SR
rts
*--------------------------------------
CS.RUN.CheckSwitch
ldy #2
lda (ZPPtr1),y
bne .4
lda (ZPPtr1)
cmp #'-'
bne .9
dey
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
.9 sec
rts
.3 ldy OptionVars,x
lda #$80
sta $0,y
clc
rts
*--------------------------------------
.4 iny
lda (ZPPtr1),y
bne .9
>LDYA ZPPtr1
>LIBC StrUpr
ldx #AttrMask-AttrList2-1
.5 ldy #1
lda (ZPPtr1),y
cmp AttrList1,x
bne .6
iny
lda (ZPPtr1),y
cmp AttrList2,x
beq .7
.6 dex
bpl .5
sec
rts
.7 sec
ror bWrite
lda (ZPPtr1)
cmp #'-'
beq .8
lda AttrMask,x
tsb AttrORA
clc
rts
.8 lda AttrMask,x
trb AttrAND
clc
rts
*--------------------------------------
Access2CSTR ldy #S.STAT.P.ACCESS
lda (ZPFileStat),y
ldy #ATTR+15
ldx #15
.1 lsr
pha
bcc .2
lda ATTRS,x
sta (pData),y
dex
dey
lda ATTRS,x
sta (pData),y
bra .3
.2 lda #'-'
sta (pData),y
dex
dey
sta (pData),y
.3 pla
dey
dex
bpl .1
>PUSHEA.G ATTR
rts
*--------------------------------------
CS.SIG sec
rts
*--------------------------------------
CS.QUIT jsr X.Quit
.1 >LDYA ZPFullPath
beq .8
>LIBC Free
.8 clc
rts
*--------------------------------------
.INB usr/src/shared/x.checkctrl.s
.INB usr/src/shared/x.fileenum.s
*--------------------------------------
CS.END .EQ *
*--------------------------------------
OptionList .AS "CRcr"
OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse
AttrList1 .AS "DRBIWR"
AttrList2 .AS "EENNRD"
AttrMask .DA #S.FI.A.D,#S.FI.A.RN,#S.FI.A.B,#S.FI.A.I,#S.FI.A.W,#S.FI.A.R
*--------------------------------------
ATTRS .AS "DeReBn----InWrRd"
*--------------------------------------
MSG.USAGE .CS "Usage : ATTR File(s) (*,? wildcards allowed)\r\n"
.CS " -C : Continue on error\r\n"
.CS " -R : Recurse subdirectories\r\n"
.CS "+|-De : Destroy enable\r\n"
.CS "+|-Re : Rename enable\r\n"
.CS "+|-Bn : Backup needed\r\n"
.CS "+|-In : Invisible\r\n"
.CS "+|-Wr : Write enable\r\n"
.CZ "+|-Rd : Read enable\r\n"
*--------------------------------------
MSG.OK .CZ "[OK]"
MSG.ERR .CZ "[%h]\r\n"
MSG.DIRDUMP .CZ "%s %s/\r\n"
MSG.FILEDUMP .CZ "%s %s\r\n"
MSG.DIR .CZ "Dir :%s..."
MSG.FILE .CZ "File:%s..."
*--------------------------------------
ID.END .EQ *
*--------------------------------------
.DUMMY
.OR 0
ATTR .BS 17
.INB usr/src/shared/x.fileenum.g
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/attr.s
ASM