A2osX/BIN/LS.S.txt

880 lines
30 KiB
Plaintext
Raw Normal View History

NEW
2019-09-19 15:22:14 +00:00
AUTO 3,1
2021-07-24 20:42:23 +00:00
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/ls
*--------------------------------------
2021-07-24 20:42:23 +00:00
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
X.ENTER.SUBDIR .EQ 1
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
2021-07-24 20:42:23 +00:00
MAX.COL .EQ 4
*--------------------------------------
2021-07-24 20:42:23 +00:00
.DUMMY
.OR ZPBIN
2018-12-19 16:45:09 +00:00
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
ZPLineBuf .BS 2
ZPPWBuf .BS 2
ArgCount .BS 1
ColCount .BS 1
bPass2 .BS 1
bPause .BS 1
bAllmostAll .BS 1
bColumn .BS 1
bFullPath .BS 1
bLong .BS 1
bRecurse .BS 1
bIsTTY .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
2021-07-24 20:42:23 +00:00
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
2015-06-03 18:30:57 +00:00
*--------------------------------------
* Relocation Table
2019-10-03 06:25:27 +00:00
*--------------------------------------
2021-07-24 20:42:23 +00:00
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
2021-07-24 20:42:23 +00:00
L.MSG.REG .DA MSG.REG
L.MSG.REGEXT .DA MSG.REGEXT
2021-07-24 20:42:23 +00:00
L.MSG.DIR .DA MSG.DIR
L.MSG.DIREXT .DA MSG.DIREXT
2021-07-24 20:42:23 +00:00
L.MSG.BDEV .DA MSG.BDEV
L.MSG.BDEVEXT .DA MSG.BDEVEXT
2021-07-24 20:42:23 +00:00
L.MSG.ENTER .DA MSG.ENTER
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
2021-07-24 20:42:23 +00:00
L.FMT.Date .DA FMT.Date
L.FMT.Time .DA FMT.Time
L.FMT.string6 .DA FMT.string6
2021-07-24 20:42:23 +00:00
L.FMT.int16 .DA FMT.int16
J.CS.RUN.PRINT .DA CS.RUN.PRINT.REG
2021-07-24 20:42:23 +00:00
.DA CS.RUN.PRINT.DIR
.DA CS.RUN.PRINT.CDEV
.DA CS.RUN.PRINT.BDEV
.DA CS.RUN.PRINT.CDEV
.DA CS.RUN.PRINT.CDEV
.DA CS.RUN.PRINT.CDEV
.DA CS.RUN.PRINT.CDEV
.DA 0
*--------------------------------------
2021-07-24 20:42:23 +00:00
CS.INIT clc
rts
2018-12-19 16:45:09 +00:00
*--------------------------------------
2021-07-24 20:42:23 +00:00
CS.RUN stz bIsTTY
jsr CS.RUN.ISATTY
.1 inc ArgCount
lda ArgCount
>SYSCALL ArgV
bcs .6
2020-07-20 15:19:32 +00:00
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
2020-07-20 15:19:32 +00:00
ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
>PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
.3 ldy OptionVars,x
lda #$80
sta $0,y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
bcc .1 scan for any other args
.9 rts
2019-10-03 06:25:27 +00:00
.6 >LDA.G index do we have a Source dir ?
bne .8
2019-11-29 15:36:54 +00:00
ldy #S.PS.hCWD
lda (pPS),y
>SYSCALL GetMemPtr
jsr InitSrcDirYA
bcs .9
.8 >PUSHEA.G TIME.SysTime
>SYSCALL Time
>LDYAI S.PW
>SYSCALL GetMem
bcs .9
>STYA ZPPWBuf
txa
>STA.G hPWBuf
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPLineBuf
txa
>STA.G hLineBuf
2016-08-17 06:25:58 +00:00
*--------------------------------------
CS.RUN.LOOP stz bPass2
.1 ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .99 I/O error
2020-03-17 16:03:32 +00:00
tay
bne .2 no char
2020-03-17 16:03:32 +00:00
>SYSCALL GetChar
cmp #$03 Ctrl-C
beq .99 Abort....
2020-03-17 16:03:32 +00:00
cmp #$13 Ctrl-S
bne .2
lda bPause
eor #$ff
sta bPause
bne .1
2020-03-17 16:03:32 +00:00
.2 bit bPause
bmi .1
2020-03-17 16:03:32 +00:00
jsr GetEntry
bcs .9
2020-03-17 16:03:32 +00:00
jsr FilterMatch
bcs .8 no match, skip....
bit bAllmostAll
bmi .4
2020-03-17 16:03:32 +00:00
lda (ZPFileName)
cmp #'.'
beq .8
2018-12-19 16:45:09 +00:00
.4 ldy #S.STAT.MODE+1
lda (ZPFileStat),y
2020-07-13 19:29:31 +00:00
and #$70
lsr
lsr
lsr
tax
jsr CS.RUN.PRINT.JMP
bcs .99
2018-12-19 16:45:09 +00:00
.8 jsr GetNextEntry
bcc .1
2018-12-19 16:45:09 +00:00
bit bPass2
bmi .9
2018-12-19 16:45:09 +00:00
jsr ResetSrcDir
bcs .99
dec bPass2
bra .1
.9 bit bLong
bmi .91
jsr CS.RUN.NewLine
bcs .99
.91 jsr LeaveSubDir
bcs .98
2016-10-30 18:19:43 +00:00
jsr BasePath..
jsr CS.RUN.ENTER.MSG
bcs .99
jsr GetNextEntry
jmp CS.RUN.LOOP
.98 lda #0
sec
.99 rts
*--------------------------------------
2020-02-29 14:06:28 +00:00
CS.RUN.PRINT.JMP
jmp (J.CS.RUN.PRINT,x)
2020-02-29 14:06:28 +00:00
*--------------------------------------
CS.RUN.PRINT.REG
bit bPass2
bpl .8
bit bLong
bmi .1
bit bColumn
bmi .23
2020-02-29 14:06:28 +00:00
bit bFullPath
bpl .22
jsr CS.RUN.PRINT.SRCPATH
.23 >LDYA ZPFileName
>SYSCALL PutS
rts
2020-02-14 07:21:56 +00:00
.22 >PUSHW L.MSG.REG
>PUSHW ZPFileName
>PUSHBI 2
>SYSCALL PrintF
bcs .9
jmp CS.RUN.UpdateColCnt
.8 clc
.9 rts
2020-02-29 14:06:28 +00:00
*--------------------------------------
.1 >PUSHW L.MSG.REGEXT
jsr Mod2CSTR (2)
2020-07-13 19:29:31 +00:00
jsr CS.RUN.PushUidGid (4)
2020-02-29 14:06:28 +00:00
ldy #S.STAT.SIZE+3
ldx #4
2020-02-29 14:06:28 +00:00
.2 lda (ZPFileStat),y
>PUSHA
dey
dex
bne .2 (4)
jsr CS.RUN.PUSHDATES (4)
2020-02-29 14:06:28 +00:00
ldy #S.STAT.P.TYPE
lda (ZPFileStat),y
jsr FileType2PSTR
>PUSHYA (2)
2020-02-29 14:06:28 +00:00
ldy #S.STAT.P.AUXTYPE+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA (2)
2020-02-14 07:21:56 +00:00
>PUSHW ZPFileName (2)
>PUSHBI 20
>SYSCALL PrintF
bcs .9
jmp CS.RUN.NewLine.1
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.DIR
bit bPass2
bmi .8
bit bLong
bmi .4
bit bColumn
bmi .23
bit bFullPath
bpl .22
2020-02-14 07:21:56 +00:00
jsr CS.RUN.PRINT.SRCPATH
2020-02-14 07:21:56 +00:00
.23 >LDYA ZPFileName
>SYSCALL PutS
bcs .9
bit bRecurse
bpl .8
lda (ZPFileName)
cmp #'.'
beq .8
>LDYA ZPFileName
jmp EnterSubDirYA
.8 clc
.9 rts
2018-08-22 15:23:27 +00:00
.22 >PUSHW L.MSG.DIR
>PUSHW ZPFileName
>PUSHBI 2
>SYSCALL PrintF
bcs .9
2020-02-14 07:21:56 +00:00
ldy #0
2020-02-14 07:21:56 +00:00
.1 iny
lda (ZPFileName),y
bne .1
2020-02-14 07:21:56 +00:00
.11 iny
cpy #19
bcs .2
2020-02-14 07:21:56 +00:00
lda #C.SPACE
phy
>SYSCALL PutChar
ply
bcc .11
rts
2020-02-14 07:21:56 +00:00
.2 jsr CS.RUN.UpdateColCnt
bcc .5
rts
2019-12-06 13:50:32 +00:00
*--------------------------------------
.4 >PUSHW L.MSG.DIREXT
jsr Mod2CSTR
jsr CS.RUN.PushUidGid
jsr CS.RUN.PUSHDATES
>PUSHW ZPFileName
>PUSHBI 12
>SYSCALL PrintF
bcs .90
jsr CS.RUN.NewLine.1
bcs .90
.5 bit bRecurse
bpl .80
lda (ZPFileName)
cmp #'.'
beq .80
jsr CS.RUN.NewLine
bcs .90
>LDYA ZPFileName
jsr EnterSubDirYA
bcs .90
jmp CS.RUN.ENTER.MSG
2020-02-29 14:06:28 +00:00
.80 clc
.90 rts
*--------------------------------------
2020-02-29 14:06:28 +00:00
CS.RUN.PRINT.CDEV
clc
rts
2020-02-29 14:06:28 +00:00
*--------------------------------------
CS.RUN.PRINT.BDEV
bit bPass2
bmi .8
bit bLong
bmi .20
2020-02-29 14:06:28 +00:00
bit bColumn
bmi .23
bit bFullPath
bpl .22
2020-02-29 14:06:28 +00:00
jsr CS.RUN.PRINT.SRCPATH
2020-02-29 14:06:28 +00:00
.23 >LDYA ZPFileName
>SYSCALL PutS
bcs .9
bit bRecurse
bpl .8
lda (ZPFileName)
cmp #'.'
beq .8
>LDYA ZPFileName
jmp EnterSubDirYA
2021-01-12 21:14:13 +00:00
.8 clc
.9 rts
2019-03-11 15:43:33 +00:00
.22 >PUSHW L.MSG.BDEV
>PUSHW ZPFileName
>PUSHBI 2
>SYSCALL PrintF
bcs .9
2019-12-06 13:50:32 +00:00
ldy #0
2019-12-06 13:50:32 +00:00
.1 iny
lda (ZPFileName),y
bne .1
2019-12-06 13:50:32 +00:00
.11 iny
cpy #19
bcs .2
2019-12-06 13:50:32 +00:00
lda #C.SPACE
phy
>SYSCALL PutChar
ply
bcc .11
rts
2019-12-06 13:50:32 +00:00
.2 jsr CS.RUN.UpdateColCnt
* bcc .5
rts
2020-02-29 14:06:28 +00:00
*--------------------------------------
.20 >PUSHW L.MSG.BDEVEXT
>PUSHW ZPFileName
ldy #S.STAT.P.SLOT
>PUSHB (ZPFileStat),y
iny DRIVE
>PUSHB (ZPFileStat),y
2020-02-14 07:21:56 +00:00
ldy #S.STAT.BLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
2020-02-14 07:21:56 +00:00
ldy #S.STAT.P.DEVBLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
>PUSHBI 8
2019-12-06 13:50:32 +00:00
>SYSCALL PrintF
bcs .90
jsr CS.RUN.NewLine.1
bcs .90
2018-12-19 16:45:09 +00:00
bit bRecurse
bpl .80
>LDYA ZPFileName
jsr EnterSubDirYA
bcs .90
jmp CS.RUN.ENTER.MSG
.80 clc
.90 rts
*--------------------------------------
2020-02-14 07:21:56 +00:00
CS.RUN.PRINT.SRCPATH
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 0
>SYSCALL PrintF
rts
2020-02-14 07:21:56 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
CS.RUN.PushUidGid
ldy #S.STAT.UID
lda (ZPFileStat),y
>PUSHA
>PUSHW ZPPWBuf
>SYSCALL GetPWUID
bcs .2
>PUSHEA.G USER
jsr CS.RUN.PushUidGidStr
bra .3
.2 >PUSHEA.G USER
>PUSHW L.FMT.int16
ldy #S.STAT.UID+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
>PUSHBI 2
>SYSCALL SPrintF
.3 ldy #S.STAT.GID
lda (ZPFileStat),y
>PUSHA
>PUSHW ZPPWBuf
>SYSCALL GetGRGID
bcs .5
>PUSHEA.G GROUP
jsr CS.RUN.PushUidGidStr
bra .8
.5 >PUSHEA.G GROUP
>PUSHW L.FMT.int16
ldy #S.STAT.GID+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
>PUSHBI 2
>SYSCALL SPrintF
.8 >PUSHEA.G USER
>PUSHEA.G GROUP
clc
rts
2020-07-13 19:29:31 +00:00
CS.RUN.PushUidGidStr
>PUSHW L.FMT.string6
>PUSHW ZPPWBuf
>PUSHBI 2
>SYSCALL SPrintF
rts
2019-12-06 13:50:32 +00:00
*--------------------------------------
CS.RUN.PUSHDATES
ldy #TIME.Mod-1 Set NODATE as default
jsr CS.RUN.NODATES.INIT
ldy #TIME.Create-1 Set NODATE as default
jsr CS.RUN.NODATES.INIT
ldy #S.STAT.MTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .1 Month=0.....invalid date/time
>PUSHEA.G TIME.Mod
lda ZPFileStat
clc
adc #S.STAT.MTIME
tay
lda ZPFileStat+1
adc #0
jsr CS.RUN.DATEFMT.SELECT
>SYSCALL StrFTime
.1 ldy #S.STAT.CTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .2 Month=0.....invalid date/time
>PUSHEA.G TIME.Create
lda ZPFileStat
clc
adc #S.STAT.CTIME
tay
lda ZPFileStat+1
adc #0
jsr CS.RUN.DATEFMT.SELECT
>SYSCALL StrFTime
.2 >PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Create
rts
*--------------------------------------
2019-11-29 15:36:54 +00:00
CS.RUN.NODATES.INIT
ldx #$ff
2019-11-29 15:36:54 +00:00
.1 inx
iny
lda MSG.NODATE,x
sta (pData),y
bne .1
rts
2019-11-29 15:36:54 +00:00
*--------------------------------------
CS.RUN.DATEFMT.SELECT
>STYA ZPPtr1
ldy #S.TIME.CENTURY
lda (ZPPtr1),y
ldy #TIME.SysTime+S.TIME.CENTURY
cmp (pData),y
bne .9
ldy #S.TIME.YEAR
lda (ZPPtr1),y
ldy #TIME.SysTime+S.TIME.YEAR
cmp (pData),y
bne .9
ldy #S.TIME.MONTH
lda (ZPPtr1),y
ldy #TIME.SysTime+S.TIME.MONTH
cmp (pData),y
bne .9
ldy #S.TIME.DAY
lda (ZPPtr1),y
ldy #TIME.SysTime+S.TIME.DAY
cmp (pData),y
bne .9
.8 >PUSHW L.FMT.Time
>PUSHW ZPPtr1
rts
.9 >PUSHW L.FMT.Date
>PUSHW ZPPtr1
rts
2019-11-29 15:36:54 +00:00
*--------------------------------------
CS.RUN.UpdateColCnt
inc ColCount
lda ColCount
cmp #MAX.COL
bne CS.RUN.NewLine.8
stz ColCount
bra CS.RUN.NewLine.1
*--------------------------------------
2016-10-30 22:23:18 +00:00
CS.RUN.ENTER.MSG
>PUSHW L.MSG.ENTER
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
bcc CS.RUN.NewLine.1
rts
*--------------------------------------
CS.RUN.NewLine lda ColCount
beq CS.RUN.NewLine.8
2020-07-21 05:26:07 +00:00
CS.RUN.NewLine.1
lda #C.CR
>SYSCALL PutChar
lda bIsTTY
beq CS.RUN.NewLine.8
lda #C.LF
>SYSCALL PutChar
2020-07-21 05:26:07 +00:00
CS.RUN.NewLine.8
clc
rts
*--------------------------------------
CS.RUN.ISATTY ldy #S.PS.hStdOut
lda (pPS),y
tax
2021-07-24 20:42:23 +00:00
lda hFDs-1,x
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
beq .9
2021-07-24 20:42:23 +00:00
inc bIsTTY
2021-07-24 20:42:23 +00:00
.9 rts
2016-10-30 22:23:18 +00:00
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
2019-12-06 13:50:32 +00:00
ldy #hFilter
jsr .7
2018-08-11 10:57:57 +00:00
ldy #hPWBuf
jsr .7
ldy #hLineBuf
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
FileType2PSTR ldy #0
.1 cmp PRODOS.FT.HEX,y
beq .8
iny
cpy #PRODOS.FT.TXT-PRODOS.FT.HEX
bne .1
pha
lsr
lsr
lsr
lsr
ora #$30
cmp #'9'+1
bcc .2
adc #6
.2 sta PRODOS.FT.DFLT+1
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .3
adc #6
.3 sta PRODOS.FT.DFLT+2
.8 tya
asl
asl CC
adc L.PRODOS.FT.TXT
tay
lda L.PRODOS.FT.TXT+1
adc #0
rts
*--------------------------------------
Mod2CSTR ldy #S.STAT.MODE+1
lda (ZPFileStat),y
lsr
php C = RU
2020-07-13 19:29:31 +00:00
lsr
lsr
lsr
tax
lda TYPES,x
>STA.G MOD
2020-07-13 19:29:31 +00:00
plp
2020-07-13 19:29:31 +00:00
ldy #S.STAT.MODE
lda (ZPFileStat),y
2019-04-15 05:40:13 +00:00
ldy #MOD+1
ldx #8
2020-07-13 19:29:31 +00:00
.1 pha
lda #'-'
bcc .2
lda ACCESS,x
2020-07-13 19:29:31 +00:00
.2 sta (pData),y
iny
pla
asl
dex
bpl .1
>PUSHEA.G MOD
rts
*--------------------------------------
.INB usr/src/shared/x.fileenum.s
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "ACFLRacflr"
OptionVars .DA #bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse,#bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse
*--------------------------------------
MSG.USAGE .AS "Usage : LS [-A] [-C] [-F] [-L] [-R] [filespec]\r\n"
.AS " -A : Show dot files\r\n"
.AS " -C : List in multiple columns\r\n"
.AS " -F : Show full paths\r\n"
.AS " -L : Use long listing format\r\n"
.AZ " -R : Recursively list subdirectories\r\n"
MSG.REGEXT .AZ "%s %6s %6s %10u %s %s %s %H %s"
MSG.REG .AZ "%19s"
MSG.DIREXT .AZ "%s %6s %6s %s %s <dir> %s"
MSG.DIR .AZ "\e[32m%s/\e[0m"
MSG.BDEVEXT .AZ "/%15s s%dd%d Blocks Used:%5D Total:%5D"
MSG.BDEV .AZ "\e[32m%s/\e[0m"
MSG.ENTER .AZ "Directory:%s"
*--------------------------------------
PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCCFFF
PRODOS.FT.TXT .AZ "txt"
.AZ "bin"
.AZ "asm"
.AZ "bas"
.AZ "var"
.AZ "atk"
.AZ "pix"
.AZ "fon"
.AZ "pak"
.AZ "sys"
PRODOS.FT.DFLT .AZ "$ "
MSG.NODATE .AZ "<no-date>"
FMT.Date .AZ "%d-%b-%y"
FMT.Time .AZ "%H:%M:%S "
FMT.string6 .AZ "%6s"
FMT.int16 .AZ "%6D"
TYPES .AS "-dbclssp"
ACCESS .AS "xwrxwrxwr"
*--------------------------------------
.DUMMY
.OR 0
DS.START
MOD .BS 11 drwxrwxrwx0
USER .BS 7
GROUP .BS 7
2020-07-13 19:29:31 +00:00
TIME.Create .BS 20
TIME.Mod .BS 20
TIME.SysTime .BS S.TIME
hLineBuf .BS 1
hPWBuf .BS 1
2017-10-04 15:12:03 +00:00
.INB usr/src/shared/x.fileenum.g
DS.END .ED
*--------------------------------------
MAN
2020-07-13 19:29:31 +00:00
SAVE usr/src/bin/ls.s
ASM