A2osX/BIN/LS.S.txt

661 lines
12 KiB
Plaintext
Raw Normal View History

NEW
2019-09-19 15:22:14 +00:00
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
2018-07-20 11:51:08 +00:00
.TF BIN/LS
*--------------------------------------
2018-07-20 11:51:08 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
2018-12-20 07:33:10 +00:00
.INB INC/MLI.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
*--------------------------------------
2019-04-29 15:47:17 +00:00
X.ENTER.SUBDIR .EQ 1
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*--------------------------------------
MAX.COL .EQ 4
*--------------------------------------
2018-12-19 16:45:09 +00:00
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
2019-12-06 13:50:32 +00:00
ZPPW .BS 2
2018-12-19 16:45:09 +00:00
ZS.END
.ED
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
2018-12-19 16:45:09 +00:00
.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
2015-06-03 18:30:57 +00:00
.DA 0
*--------------------------------------
* Relocation Table
2019-10-03 06:25:27 +00:00
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.DEVEXT .DA MSG.DEVEXT
L.MSG.DIR .DA MSG.DIR
L.MSG.ENTER .DA MSG.ENTER
L.MSG.DIREXT .DA MSG.DIREXT
L.MSG.FILE .DA MSG.FILE
L.MSG.FILEEXT .DA MSG.FILEEXT
2019-03-11 15:43:33 +00:00
L.MSG.CRLF .DA MSG.CRLF
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
2019-11-29 15:36:54 +00:00
L.FMT.Date .DA FMT.Date
L.FMT.Time .DA FMT.Time
2019-12-06 13:50:32 +00:00
L.FMT.int16 .DA FMT.int16
L.MSG.Users .DA MSG.Users
L.MSG.Root .DA MSG.Root
.DA 0
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
bcs .6
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
2018-10-21 20:54:07 +00:00
lda #E.SYN
sec
rts
.3 ldy OptionVars,x
lda #$80
sta (pData),y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
2018-12-19 16:45:09 +00:00
bcc .1 scan for any other args
2019-10-03 06:25:27 +00:00
.9 rts
.6 >LDA.G index do we have a Source dir ?
2019-11-29 15:36:54 +00:00
bne .8
2019-07-22 16:28:44 +00:00
ldy #S.PS.hCWD
2016-08-28 20:48:01 +00:00
lda (pPs),y
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
jsr InitSrcDirYA
2019-11-29 15:36:54 +00:00
bcs .9
2020-01-18 19:37:32 +00:00
.8 >PUSHEA.G TIME.SysTime
2019-11-29 15:36:54 +00:00
>SYSCALL time
2019-12-06 13:50:32 +00:00
>LDYAI S.PW
>SYSCALL getmem
bcs .9
>STYA ZPPW
txa
>STA.G hPW
2016-08-17 06:25:58 +00:00
*--------------------------------------
2019-04-30 16:08:47 +00:00
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
bcs .99 I/O error
tay
2019-05-02 09:52:32 +00:00
bne .2 no char
2018-12-19 16:45:09 +00:00
>SYSCALL GetChar
cmp #$03 Ctrl-C
2018-12-19 16:45:09 +00:00
bne .1 Abort....
rts CS
.1 cmp #$13 Ctrl-S
bne .2
>LDA.G bPause
eor #$ff
sta (pData),y
2018-12-19 16:45:09 +00:00
bne CS.RUN.LOOP
.2 >LDA.G bPause
bne CS.RUN.LOOP
jsr GetEntry
bcs .9
2019-04-30 16:08:47 +00:00
jsr FilterMatch
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
2018-12-19 16:45:09 +00:00
jsr CS.RUN.PRINT.DIR
bcs .99
bra .8
.5 jsr CS.RUN.PRINT.DEV
bcs .99
bra .8
.6 jsr CS.RUN.PRINT.FILE
bcs .99
.8 jsr GetNextEntry
bcc .92
.9 ldy #bLong
lda (pData),y
bmi .91
jsr CS.RUN.NewLine
bcs .99
.91 jsr LeaveSubDir
2018-12-19 16:45:09 +00:00
bcs .98
2016-10-30 18:19:43 +00:00
jsr BasePath..
2018-12-19 16:45:09 +00:00
jsr GetNextEntry
.92 jmp CS.RUN.LOOP
.98 lda #0
sec
.99 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.DEV
>LDA.G bLong
bpl CS.RUN.PRINT.DIR
ldy #S.STAT.P.DEVBLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
ldy #S.STAT.BLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
ldy #S.STAT.P.DRIVE
>PUSHB (ZPFileStat),y
dey SLOT
>PUSHB (ZPFileStat),y
>PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 8
>LDYA L.MSG.DEVEXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
ldy #bRecurse
lda (pData),y
bpl .8
>LDYA ZPFileName
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
bcs .9
2018-12-19 16:45:09 +00:00
jmp CS.RUN.ENTER.MSG
2019-10-29 14:47:25 +00:00
.8 clc
.9 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.DIR
>LDA.G bAllmostAll
bmi .10
lda (ZPFileName)
cmp #'.'
2019-03-11 15:43:33 +00:00
bne .10
jmp .5
2019-12-06 13:50:32 +00:00
.10 >LDA.G bLong
bmi .4
2019-03-11 15:43:33 +00:00
>LDA.G bColumn
2019-03-12 14:41:55 +00:00
bmi .23
2019-03-11 16:46:00 +00:00
>LDA.G bFullPath
2019-03-12 14:41:55 +00:00
bpl .22
2019-03-11 16:46:00 +00:00
>PUSHBI 0
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtr
2019-10-03 06:25:27 +00:00
>SYSCALL printf
2019-03-11 16:46:00 +00:00
.23 >LDYA ZPFileName
2019-03-11 15:43:33 +00:00
>SYSCALL puts
2019-03-12 14:41:55 +00:00
bcs .9
>LDA.G bRecurse
bpl .8
lda (ZPFileName)
cmp #'.'
beq .8
>LDYA ZPFileName
jmp EnterSubDirYA
.8 clc
.9 rts
2019-03-11 15:43:33 +00:00
.22 >PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.DIR
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-08-22 15:23:27 +00:00
2019-03-12 14:41:55 +00:00
bcs .9
ldy #0
.1 iny
lda (ZPFileName),y
bne .1
.11 iny
cpy #19
bcs .2
lda #' '
phy
2018-07-18 15:30:42 +00:00
>SYSCALL PutChar
ply
bcc .11
rts
.2 jsr CS.RUN.UpdateColCnt
bcc .5
rts
2019-12-06 13:50:32 +00:00
*--------------------------------------
.4 >PUSHW ZPFileName
jsr CS.RUN.PUSHDATES
jsr CS.RUN.PushGidUid
jsr Mod2CSTR
>PUSHEA.G MOD File Mod
2019-12-06 13:50:32 +00:00
>PUSHBI 12
>LDYA L.MSG.DIREXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-12-19 16:45:09 +00:00
2019-03-12 14:41:55 +00:00
bcs .90
.5 >LDA.G bRecurse
bpl .80
lda (ZPFileName)
cmp #'.'
2019-03-12 14:41:55 +00:00
beq .80
jsr CS.RUN.NewLine
2019-03-12 14:41:55 +00:00
bcs .90
>LDYA ZPFileName
2016-10-30 22:23:18 +00:00
jsr EnterSubDirYA
2019-03-12 14:41:55 +00:00
bcs .90
2018-12-19 16:45:09 +00:00
jmp CS.RUN.ENTER.MSG
2019-03-12 14:41:55 +00:00
.80 clc
.90 rts
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.PRINT.FILE
ldy #bLong
lda (pData),y
2018-08-24 10:20:23 +00:00
bmi .1
2019-03-11 15:43:33 +00:00
>LDA.G bColumn
2019-03-12 14:41:55 +00:00
bmi .23
2019-03-11 15:43:33 +00:00
2019-03-11 16:46:00 +00:00
>LDA.G bFullPath
2019-03-12 14:41:55 +00:00
bpl .22
2019-03-11 16:46:00 +00:00
>PUSHBI 0
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtr
2019-10-03 06:25:27 +00:00
>SYSCALL printf
2019-03-11 16:46:00 +00:00
.23 >LDYA ZPFileName
2019-03-11 15:43:33 +00:00
>SYSCALL puts
rts
.22 >PUSHW ZPFileName
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.FILE
2018-06-21 15:12:10 +00:00
>SYSCALL printf
bcs .9
2018-12-19 16:45:09 +00:00
jmp CS.RUN.UpdateColCnt
2019-12-06 13:50:32 +00:00
*--------------------------------------
.1 >PUSHW ZPFileName
ldy #S.STAT.P.AUXTYPE+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
2018-08-24 10:20:23 +00:00
>PUSHA
dey Type
lda (ZPFileStat),y
jsr FileType2PSTR
2018-08-24 10:20:23 +00:00
>PUSHYA
2019-12-06 13:50:32 +00:00
jsr CS.RUN.PUSHDATES
ldy #S.STAT.SIZE+3
ldx #4
.2 lda (ZPFileStat),y
>PUSHA
dey
dex
bne .2
jsr CS.RUN.PushGidUid
jsr Mod2CSTR
>PUSHEA.G MOD File Mod
>PUSHBI 20
>LDYA L.MSG.FILEEXT
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2018-12-19 16:45:09 +00:00
.9 rts
*--------------------------------------
2019-12-06 13:50:32 +00:00
CS.RUN.PushGidUid
ldy #S.STAT.GID
lda (ZPFileStat),y
beq .1
>LDYA L.MSG.Users
bra .2
.1 >LDYA L.MSG.Root
.2 >PUSHYA
>PUSHW ZPPW
ldy #S.STAT.UID
lda (ZPFileStat),y
>SYSCALL GetPWUID
bcs .3
>PUSHW ZPPW
2019-12-10 14:12:07 +00:00
* clc
2019-12-06 13:50:32 +00:00
rts
.3 ldy #S.STAT.UID+1
lda (ZPFileStat),y
>PUSHA
dey
lda (ZPFileStat),y
>PUSHA
2019-12-10 14:12:07 +00:00
>PUSHBI 2
>PUSHW L.FMT.int16
>LEA.G UID
2019-12-06 13:50:32 +00:00
>SYSCALL sprintf
2019-12-10 14:12:07 +00:00
>PUSHEA.G UID
2019-12-06 13:50:32 +00:00
clc
rts
*--------------------------------------
CS.RUN.PUSHDATES
ldy #TIME.Mod-1 Set NODATE as default
2019-11-29 15:36:54 +00:00
jsr CS.RUN.NODATES.INIT
ldy #TIME.Create-1 Set NODATE as default
2019-11-29 15:36:54 +00:00
jsr CS.RUN.NODATES.INIT
ldy #S.STAT.MTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .1 Month=0.....invalid date/time
2020-01-18 19:37:32 +00:00
>PUSHEA.G TIME.Mod
lda ZPFileStat
clc
adc #S.STAT.MTIME
tay
lda ZPFileStat+1
adc #0
2019-11-29 15:36:54 +00:00
jsr CS.RUN.DATEFMT.SELECT
>SYSCALL StrFTime
2019-11-29 15:36:54 +00:00
.1 ldy #S.STAT.CTIME+S.TIME.MONTH
lda (ZPFileStat),y
beq .2 Month=0.....invalid date/time
2020-01-18 19:37:32 +00:00
>PUSHEA.G TIME.Create
lda ZPFileStat
clc
adc #S.STAT.CTIME
tay
lda ZPFileStat+1
adc #0
2019-11-29 15:36:54 +00:00
jsr CS.RUN.DATEFMT.SELECT
>SYSCALL StrFTime
2019-11-29 15:36:54 +00:00
.2 >PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Create
rts
*--------------------------------------
2019-11-29 15:36:54 +00:00
CS.RUN.NODATES.INIT
ldx #$ff
.1 inx
iny
lda MSG.NODATE,x
sta (pData),y
bne .1
rts
*--------------------------------------
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
2020-01-18 19:37:32 +00:00
>PUSHW ZPPtr1
2019-11-29 15:36:54 +00:00
rts
.9 >PUSHW L.FMT.Date
2020-01-18 19:37:32 +00:00
>PUSHW ZPPtr1
2019-11-29 15:36:54 +00:00
rts
*--------------------------------------
CS.RUN.UpdateColCnt
2018-12-19 16:45:09 +00:00
>INC.G ColCount
cmp #MAX.COL
bne CS.RUN.NewLine.8
lda #0
sta (pData),y
bra CS.RUN.NewLine.1
*--------------------------------------
2018-12-19 16:45:09 +00:00
CS.RUN.NewLine >LDA.G ColCount
beq CS.RUN.NewLine.8
2019-10-03 06:25:27 +00:00
CS.RUN.NewLine.1
2019-03-11 15:43:33 +00:00
>PUSHBI 0
>LDYA L.MSG.CRLF
>SYSCALL printf
rts
CS.RUN.NewLine.8
clc
rts
*--------------------------------------
2016-10-30 22:23:18 +00:00
CS.RUN.ENTER.MSG
ldy #hSrcBasePath
2016-10-30 22:23:18 +00:00
lda (pData),y
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
2016-10-30 22:23:18 +00:00
>PUSHYA
2018-08-22 15:23:27 +00:00
>PUSHBI 2
2016-10-30 22:23:18 +00:00
>LDYA L.MSG.ENTER
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2016-10-30 22:23:18 +00:00
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
2018-08-11 10:57:57 +00:00
>LDA.G hFilter
beq .3
2019-12-06 13:50:32 +00:00
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2018-08-11 10:57:57 +00:00
2019-12-06 13:50:32 +00:00
.3 >LDA.G hPW
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
FileType2PSTR ldy #0
.1 cmp PRODOS.FT.HEX,y
2018-08-24 10:20:23 +00:00
beq .8
iny
cpy #PRODOS.FT.TXT-PRODOS.FT.HEX
bne .1
pha
lsr
lsr
lsr
lsr
2018-08-24 10:20:23 +00:00
ora #$30
cmp #$3A
bcc .2
adc #6
.2 sta PRODOS.FT.DFLT+2
pla
and #$0F
2018-08-24 10:20:23 +00:00
ora #$30
cmp #$3A
bcc .3
adc #6
.3 sta PRODOS.FT.DFLT+3
2019-10-03 06:25:27 +00:00
.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
lsr
lsr
lsr
tax
lda TYPES,x
>STA.G MOD
ldx #0
ldy #S.STAT.MODE
lda (ZPFileStat),y
2019-04-15 05:40:13 +00:00
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 (ZPFileStat),y
lsr
lda #'-'
bcc .4
lda ACCESS,x
.4 >STA.G MOD+9
rts
*--------------------------------------
2018-11-17 17:17:13 +00:00
.INB USR/SRC/BIN/X.FILEENUM.S
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "ACFLRacflr"
2019-03-11 16:46:00 +00:00
OptionVars .DA #bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse,#bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse
*--------------------------------------
MSG.DEVEXT .AZ "/%15s S%dD%d Blocks Used:%5D Total:%5D\r\n"
MSG.DIR .AZ "\e[32m%s/\e[0m"
MSG.ENTER .AZ "Directory:%s\r\n"
2019-12-06 13:50:32 +00:00
MSG.DIREXT .AZ "%s %6s %6s %s %s <dir> \e[32m%s/\e[0m\r\n"
MSG.FILE .AZ "%19s"
2019-12-06 13:50:32 +00:00
MSG.FILEEXT .AS "%s %6s %6s %10u %s %s %S %H %s"
2019-03-11 15:43:33 +00:00
MSG.CRLF .AZ "\r\n"
*--------------------------------------
2019-09-19 15:22:14 +00:00
PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCCFFF
2019-11-29 15:36:54 +00:00
PRODOS.FT.TXT >PSTR "txt"
>PSTR "bin"
>PSTR "asm"
>PSTR "bas"
>PSTR "var"
>PSTR "atk"
>PSTR "pix"
>PSTR "fon"
>PSTR "pak"
>PSTR "sys"
PRODOS.FT.DFLT >PSTR "$ "
2019-12-06 13:50:32 +00:00
MSG.Users .AZ "users"
MSG.Root .AZ "root"
2019-12-06 15:06:08 +00:00
MSG.NODATE .AZ "<no-date>"
2019-11-29 15:36:54 +00:00
FMT.Date .AZ "%d-%b-%y"
FMT.Time .AZ "%H:%M:%S "
2019-12-06 13:50:32 +00:00
FMT.int16 .AZ "%i"
TYPES .AS "-dbclssp"
ACCESS .AS "rwxrwxrwx"
*--------------------------------------
2015-06-03 18:30:57 +00:00
.DUMMY
.OR 0
DS.START
ArgCount .BS 1
2017-10-04 15:12:03 +00:00
MOD .BS 11 drwxrwxrwx0
TIME.Create .BS 20
TIME.Mod .BS 20
2019-11-29 15:36:54 +00:00
TIME.SysTime .BS S.TIME
2019-12-06 13:50:32 +00:00
UID .BS 6
bPause .BS 1
bAllmostAll .BS 1
2019-03-11 15:43:33 +00:00
bColumn .BS 1
2019-03-11 16:46:00 +00:00
bFullPath .BS 1
bLong .BS 1
bRecurse .BS 1
2017-10-04 15:12:03 +00:00
ColCount .BS 1
2019-12-06 13:50:32 +00:00
hPW .BS 1
2017-10-04 15:12:03 +00:00
2018-11-17 17:17:13 +00:00
.INB USR/SRC/BIN/X.FILEENUM.G
DS.END
2015-06-03 18:30:57 +00:00
.ED
*--------------------------------------
MAN
2018-11-17 17:17:13 +00:00
SAVE USR/SRC/BIN/LS.S
ASM