A2osX/BIN/STAT.S.txt

290 lines
5.6 KiB
Plaintext
Raw Normal View History

2019-11-25 16:45:21 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/STAT
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ArgIndex .BS 1
ArgFile .BS 1
2020-02-16 20:45:16 +00:00
ZPPtr1 .BS 2
2019-11-25 16:45:21 +00:00
bFormatStr .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size
.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.Filename .DA MSG.Filename
L.MSG.Mode .DA MSG.Mode
L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE
L.FMT.DateTime .DA FMT.DateTime
L.MSG.AMCTimes .DA MSG.AMCTimes
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .3
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .2
jsr CS.RUN.CheckOpt
bcc .1
2020-02-16 20:45:16 +00:00
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
2019-11-25 16:45:21 +00:00
>SYSCALL printf
lda #E.SYN
sec
rts
.2 lda ArgFile
bne .99
lda ArgIndex
sta ArgFile
bra .1
2020-02-16 20:45:16 +00:00
.3 lda ArgFile
2019-11-25 16:45:21 +00:00
beq .99
>SYSCALL ArgV
2020-02-16 20:45:16 +00:00
>PUSHYA
>PUSHW pData
2019-11-25 16:45:21 +00:00
>SYSCALL Stat
bcs .9
jsr CS.RUN.DUMP
bcs .9
lda #0
sec
.9
CS.RUN.RTS rts
*--------------------------------------
CS.RUN.DUMP lda ArgFile
>SYSCALL ArgV
2020-02-14 07:21:56 +00:00
>PUSHYA
>PUSHWI 0 Allocate
2019-11-25 16:45:21 +00:00
>SYSCALL Realpath
bcs CS.RUN.RTS
2020-02-16 20:45:16 +00:00
>STYA ZPPtr1
2019-11-25 16:45:21 +00:00
phx
2020-02-16 20:45:16 +00:00
>PUSHW L.MSG.Filename
>PUSHW ZPPtr1
2019-11-25 16:45:21 +00:00
>PUSHBI 2
>SYSCALL printf
pla
>SYSCALL freemem
jsr Mod2CSTR
2020-02-16 20:45:16 +00:00
>PUSHW L.MSG.Mode
2019-11-25 16:45:21 +00:00
>PUSHEA.G MOD
>PUSHBI 2
>SYSCALL printf
2020-02-16 20:45:16 +00:00
>PUSHW L.MSG.UIDGIDSIZE
2019-11-25 16:45:21 +00:00
>PUSHW.G StatBuf+S.STAT.UID
2020-02-16 20:45:16 +00:00
>PUSHW.G StatBuf+S.STAT.GID
>PUSHL.G StatBuf+S.STAT.SIZE
>PUSHL.G StatBuf+S.STAT.BLOCKS
2019-12-02 07:09:58 +00:00
>PUSHBI 12
2019-11-25 16:45:21 +00:00
>SYSCALL printf
jsr CS.RUN.PrintAMCTime
rts
*--------------------------------------
*--------------------------------------
Mod2CSTR ldy #S.STAT.MODE+1
lda (pData),y
lsr
lsr
lsr
lsr
tax
lda TYPES,x
>STA.G MOD
ldx #0
ldy #S.STAT.MODE
lda (pData),y
ldy #MOD+1
.1 lsr
pha
lda #'-'
bcc .2
lda ACCESS,x
.2 sta (pData),y
iny
pla
inx
cpx #8
bne .1
.3 ldy #S.STAT.MODE+1
lda (pData),y
lsr
lda #'-'
bcc .4
lda ACCESS,x
.4 >STA.G MOD+9
rts
*--------------------------------------
CS.RUN.PrintAMCTime
ldy #TIME.Access-1 Set NODATE as default
jsr CS.RUN.PrintAMCTime.NODATE
ldy #TIME.Mod-1 Set NODATE as default
jsr CS.RUN.PrintAMCTime.NODATE
ldy #TIME.Create-1 Set NODATE as default
jsr CS.RUN.PrintAMCTime.NODATE
>LDA.G StatBuf+S.STAT.ATIME+S.TIME.MONTH
beq .1 Month=0.....invalid date/time
2020-01-18 19:37:32 +00:00
>PUSHEA.G TIME.Access
2019-11-25 16:45:21 +00:00
>PUSHW L.FMT.DateTime
2020-01-18 19:37:32 +00:00
>PUSHEA.G StatBuf+S.STAT.ATIME
2019-11-25 16:45:21 +00:00
>SYSCALL StrFTime
.1 >LDA.G StatBuf+S.STAT.MTIME+S.TIME.MONTH
beq .2 Month=0.....invalid date/time
2020-01-18 19:37:32 +00:00
>PUSHEA.G TIME.Mod
2019-11-25 16:45:21 +00:00
>PUSHW L.FMT.DateTime
2020-01-18 19:37:32 +00:00
>PUSHEA.G StatBuf+S.STAT.MTIME
2019-11-25 16:45:21 +00:00
>SYSCALL StrFTime
.2 >LDA.G StatBuf+S.STAT.CTIME+S.TIME.MONTH
beq .8 Month=0.....invalid date/time
2020-01-18 19:37:32 +00:00
>PUSHEA.G TIME.Create
2019-11-25 16:45:21 +00:00
>PUSHW L.FMT.DateTime
2020-01-18 19:37:32 +00:00
>PUSHEA.G StatBuf+S.STAT.CTIME
2019-11-25 16:45:21 +00:00
>SYSCALL StrFTime
2020-02-16 20:45:16 +00:00
.8 >PUSHW L.MSG.AMCTimes
>PUSHEA.G TIME.Create
2019-11-25 16:45:21 +00:00
>PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Access
>PUSHBI 6
>SYSCALL printf
rts
*--------------------------------------
CS.RUN.PrintAMCTime.NODATE
ldx #$ff
.1 inx
iny
lda MSG.NODATE,x
sta (pData),y
bne .1
rts
*--------------------------------------
CS.QUIT
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
sec
rts
.3 ldy OptionVars,x
lda #$ff
sta 0,y
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "Cc"
OptionVars .DA #bFormatStr,#bFormatStr
TYPES .AS "-dbclssp"
ACCESS .AS "rwxrwxrwx"
2019-12-02 07:09:58 +00:00
MSG.NODATE .AZ "<No-Date>"
FMT.DateTime .AZ "%d-%b-%y %H:%M:%S"
2019-11-25 16:45:21 +00:00
*--------------------------------------
MSG.USAGE .AS "Usage : STAT File\r\n"
2020-01-18 19:37:32 +00:00
.AZ " -C : Format\r\n"
2019-11-25 16:45:21 +00:00
MSG.Filename .AZ "Filename : %s\r\n"
MSG.Mode .AZ "Access : %s\r\n"
2019-12-02 07:09:58 +00:00
MSG.UIDGIDSIZE .AS "UID : %10D\r\n"
.AS "GID : %10D\r\n"
.AS "Size : %10u\r\n"
.AZ "Blocks : %10u\r\n"
2020-02-16 20:45:16 +00:00
MSG.AMCTimes .AS "Created : %s\r\n"
2019-12-02 07:09:58 +00:00
.AS "Modified : %s\r\n"
2020-02-16 20:45:16 +00:00
.AZ "Accessed : %s\r\n"
2019-11-25 16:45:21 +00:00
*--------------------------------------
.DUMMY
.OR 0
DS.START
StatBuf .BS S.STAT
2019-12-02 07:09:58 +00:00
MOD .BS 11 drwxrwxrwx + \0
2019-11-25 16:45:21 +00:00
TIME.Access .BS 20
TIME.Mod .BS 20
TIME.Create .BS 20
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/STAT.S
ASM