A2osX/BIN/STAT.S.txt
2020-08-25 12:56:00 +02:00

327 lines
6.1 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/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
ZPPtr1 .BS 2
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.Access .DA MSG.Access
L.MSG.Mod .DA MSG.Mod
L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE
L.FMT.DateTime .DA FMT.DateTime
L.MSG.CMATimes .DA MSG.CMATimes
.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
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
.2 lda ArgFile
bne .99
lda ArgIndex
sta ArgFile
bra .1
.3 lda ArgFile
beq .99
>SYSCALL ArgV
>PUSHYA
>PUSHW pData
>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
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs CS.RUN.RTS
>STYA ZPPtr1
phx
>PUSHW L.MSG.Filename
>PUSHW ZPPtr1
>PUSHBI 2
>SYSCALL PrintF
pla
>SYSCALL FreeMem
jsr Access2CSTR
>PUSHW L.MSG.Access
>PUSHEA.G ATTR
>PUSHBI 2
>SYSCALL PrintF
jsr Mod2CSTR
>PUSHW L.MSG.Mod
>PUSHEA.G MOD
>PUSHBI 2
>SYSCALL PrintF
>PUSHW L.MSG.UIDGIDSIZE
>PUSHW.G StatBuf+S.STAT.UID
>PUSHW.G StatBuf+S.STAT.GID
>PUSHL.G StatBuf+S.STAT.SIZE
>PUSHL.G StatBuf+S.STAT.BLOCKS
>PUSHBI 12
>SYSCALL PrintF
jsr CS.RUN.PrintAMCTime
rts
*--------------------------------------
Access2CSTR ldy #S.STAT.P.ACCESS
lda (pData),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
rts
*--------------------------------------
Mod2CSTR ldy #S.STAT.MODE+1
lda (pData),y
lsr
php
lsr
lsr
lsr
tax
lda TYPES,x
>STA.G MOD
plp
ldx #8
ldy #S.STAT.MODE
lda (pData),y
ldy #MOD+1
.1 pha
lda #'-'
bcc .2
lda ACCESS,x
.2 sta (pData),y
iny
pla
asl
dex
bpl .1
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
>PUSHEA.G TIME.Access
>PUSHW L.FMT.DateTime
>PUSHEA.G StatBuf+S.STAT.ATIME
>SYSCALL StrFTime
.1 >LDA.G StatBuf+S.STAT.MTIME+S.TIME.MONTH
beq .2 Month=0.....invalid date/time
>PUSHEA.G TIME.Mod
>PUSHW L.FMT.DateTime
>PUSHEA.G StatBuf+S.STAT.MTIME
>SYSCALL StrFTime
.2 >LDA.G StatBuf+S.STAT.CTIME+S.TIME.MONTH
beq .8 Month=0.....invalid date/time
>PUSHEA.G TIME.Create
>PUSHW L.FMT.DateTime
>PUSHEA.G StatBuf+S.STAT.CTIME
>SYSCALL StrFTime
.8 >PUSHW L.MSG.CMATimes
>PUSHEA.G TIME.Create
>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
ATTRS .AS "DeReBn----InWrRd"
TYPES .AS "-dbclssp"
ACCESS .AS "xwrxwrxwr"
MSG.NODATE .AZ "<No-Date>"
FMT.DateTime .AZ "%d-%b-%y %H:%M:%S"
*--------------------------------------
MSG.USAGE .AS "Usage : STAT File\r\n"
.AZ " -C : Format\r\n"
MSG.Filename .AZ "Filename : %s\r\n"
MSG.Access .AZ "Access : %s\r\n"
MSG.Mod .AZ "Mod : %s\r\n"
MSG.UIDGIDSIZE .AS "UID : %10D\r\n"
.AS "GID : %10D\r\n"
.AS "Size : %10u\r\n"
.AZ "Blocks : %10u\r\n"
MSG.CMATimes .AS "Created : %s\r\n"
.AS "Modified : %s\r\n"
.AZ "Accessed : %s\r\n"
*--------------------------------------
.DUMMY
.OR 0
DS.START
StatBuf .BS S.STAT
ATTR .BS 17
MOD .BS 11 drwxrwxrwx + \0
TIME.Access .BS 20
TIME.Mod .BS 20
TIME.Create .BS 20
DS.END
.ED
*--------------------------------------
MAN
SAVE usr/src/bin/stat.s
ASM