A2osX/BIN/DU.S.txt

464 lines
16 KiB
Plaintext
Raw Normal View History

2021-06-11 17:25:09 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/du
*--------------------------------------
.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
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
ZPPW .BS 2
hLineBuf .BS 1
ZPLineBuf .BS 2
bPass2 .BS 1
bDirLevel .BS 1
bIsTTY .BS 1
2021-06-11 17:25:09 +00:00
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 #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
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
2021-07-26 13:45:29 +00:00
.DA CS.DOEVENT
2021-06-11 17:25:09 +00:00
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.REG1 .DA MSG.REG1
L.MSG.REG2 .DA MSG.REG2
L.MSG.DIRSUMM .DA MSG.DIRSUMM
L.MSG.BDEV .DA MSG.BDEV
L.MSG.BDEVEXT .DA MSG.BDEVEXT
L.MSG.CWD .DA MSG.CWD
J.CS.RUN.PRINT .DA CS.RUN.PRINT.REG
.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
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
2021-07-26 13:45:29 +00:00
CS.RUN
2021-07-04 23:45:06 +00:00
stz bIsTTY
jsr CS.RUN.ISATTY
2021-07-04 23:45:06 +00:00
.1 stz bDirLevel
>INC.G ArgCount
2021-06-11 17:25:09 +00:00
>SYSCALL ArgV
bcs .6
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
ldx #OptionVars-OptionList-1
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
.2 cmp OptionList,x
beq .3
dex
bpl .2
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
>PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
.3 ldy OptionVars,x
lda #$80
sta (pData),y
bra .1
.4 >LDYA ZPPtr1
jsr InitSrcDirYA
bcc .1 scan for any other args
.9 rts
.6 >LDA.G index do we have a Source dir ?
bne .8
ldy #S.PS.hCWD
lda (pPS),y
>SYSCALL GetMemPtr
jsr InitSrcDirYA
bcs .9
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
.8 >PUSHEA.G TIME.SysTime
>SYSCALL Time
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
>LDYAI S.PW
>SYSCALL GetMem
bcs .9
>STYA ZPPW
txa
>STA.G hPW
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPLineBuf
stx hLineBuf
*--------------------------------------
CS.RUN.LOOP
stz bPass2
2021-06-11 17:25:09 +00:00
.1 ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcc .2
rts I/O error
2021-06-11 17:25:09 +00:00
.2 tay
bne .3 no char
2021-06-11 17:25:09 +00:00
>SYSCALL GetChar
cmp #$03 Ctrl-C
beq .99 Abort....
cmp #$13 Ctrl-S
bne .3
2021-06-11 17:25:09 +00:00
>LDA.G bPause
eor #$ff
sta (pData),y
bne .1
.3 >LDA.G bPause
2021-06-11 17:25:09 +00:00
bne .1
jsr GetEntry First entry
bcs .9
jsr FilterMatch Filter filename
bcs .8 no match, skip....
lda (ZPFileName)
cmp #'.'
beq .8
.4 ldy #S.STAT.MODE+1
lda (ZPFileStat),y
and #$70
lsr
lsr
lsr
tax
jsr CS.RUN.PRINT.JMP
bcs .99
.8 jsr GetNextEntry Next entry
bcc .1 If there is one, go again
bit bPass2
bmi .9
jsr ResetSrcDir
bcs .99
dec bPass2
2021-07-26 13:45:29 +00:00
bra .1
2021-06-11 17:25:09 +00:00
.9 >LDA.G bSummary
bne .91
jsr CS.RUN.PrintDirSumm
jsr CS.RUN.PrintCwd
2021-07-26 13:45:29 +00:00
jsr CS.RUN.NewLine
2021-06-11 17:25:09 +00:00
.91 dec bDirLevel
jsr LeaveSubDir "cd .."
bcs .97 This means we are done
2021-06-11 17:25:09 +00:00
jsr BasePath.. Prune pathname
jsr GetNextEntry Get next entry
jmp CS.RUN.LOOP Go again
.97 >LDA.G bSummary
beq .98
inc bDirLevel
jsr CS.RUN.PrintDirSumm
jsr CS.RUN.PrintCwd
2021-06-11 17:25:09 +00:00
jsr CS.RUN.NewLine
.98 lda #0
2021-06-11 17:25:09 +00:00
sec
.99 rts
*--------------------------------------
CS.RUN.PRINT.JMP
jmp (J.CS.RUN.PRINT,x)
*--------------------------------------
CS.RUN.PRINT.REG bit bPass2
2021-06-11 17:25:09 +00:00
bmi .1
clc
rts
.1 ldx bDirLevel X is loop ctr bDirLevel..0
.2 >LEA.G BlkCounters
>STYA ZPPtr1
ldy #S.STAT.BLOCKS+3 Read 32-bit number of blocks
lda (ZPFileStat),y
pha And push to stack
dey
lda (ZPFileStat),y
pha
dey
2021-06-11 17:25:09 +00:00
lda (ZPFileStat),y
pha
dey
lda (ZPFileStat),y
pha
txa Get loop counter
asl x2
asl x2 again
tay
pla Do 32-bit add
2021-06-11 17:25:09 +00:00
clc
adc (ZPPtr1),y LSB
sta (ZPPtr1),y
pla
iny
adc (ZPPtr1),y
sta (ZPPtr1),y
2021-06-11 17:25:09 +00:00
pla
iny
adc (ZPPtr1),y
sta (ZPPtr1),y
pla
iny
adc (ZPPtr1),y MSB
sta (ZPPtr1),y
dex Decrement loop counter
cpx #$ff Stop if -1
bne .2
2021-06-11 17:25:09 +00:00
>LDA.G bAllFiles
beq .8
>PUSHW L.MSG.REG1
ldy #S.STAT.BLOCKS+3
ldx #4
.3 lda (ZPFileStat),y
2021-06-11 17:25:09 +00:00
>PUSHA
dey
dex
bne .3 (4)
>PUSHBI 4
2021-06-11 17:25:09 +00:00
>SYSCALL PrintF
2021-07-26 13:45:29 +00:00
bcs .9
2021-06-11 17:25:09 +00:00
jsr CS.RUN.PrintCwd
>PUSHW L.MSG.REG2
>PUSHW ZPFileName (2)
>PUSHBI 2
>SYSCALL PrintF
bcs .9
jmp CS.RUN.NewLine
.8 clc
.9 rts
*--------------------------------------
CS.RUN.PRINT.DIR bit bPass2
bmi .8
lda (ZPFileName)
cmp #'.'
beq .8
inc bDirLevel
2021-06-11 17:25:09 +00:00
>LDYA ZPFileName
jmp EnterSubDirYA
.8 clc
.9 rts
*--------------------------------------
CS.RUN.PRINT.CDEV clc
rts
*--------------------------------------
CS.RUN.PRINT.BDEV bit bPass2
bmi .8
>PUSHW L.MSG.BDEVEXT
>PUSHW ZPFileName
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
ldy #S.STAT.P.SLOT
>PUSHB (ZPFileStat),y
iny DRIVE
>PUSHB (ZPFileStat),y
ldy #S.STAT.BLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
ldy #S.STAT.P.DEVBLOCKS+1
>PUSHB (ZPFileStat),y
dey
>PUSHB (ZPFileStat),y
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
>PUSHBI 8
>SYSCALL PrintF
bcs .9
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
jsr CS.RUN.NewLine
bcs .9
inc bDirLevel
2021-06-11 17:25:09 +00:00
>LDYA ZPFileName
jsr EnterSubDirYA
bcs .9
.8 clc
.9 rts
*--------------------------------------
CS.RUN.PrintDirSumm >LEA.G BlkCounters
>STYA ZPPtr1
lda bDirLevel
asl
asl
clc
adc ZPPtr1
sta ZPPtr1
lda #$00
adc ZPPtr1+1
sta ZPPtr1+1
>PUSHW L.MSG.DIRSUMM
ldy #$03
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
2021-07-26 13:45:29 +00:00
>PUSHA
>PUSHBI 4
2021-06-11 17:25:09 +00:00
>SYSCALL PrintF
ldy #$03
2021-06-11 17:25:09 +00:00
lda #$00
sta (ZPPtr1),y
dey
2021-07-26 13:45:29 +00:00
sta (ZPPtr1),y
dey
2021-07-26 13:45:29 +00:00
sta (ZPPtr1),y
dey
2021-07-26 13:45:29 +00:00
sta (ZPPtr1),y
2021-06-11 17:25:09 +00:00
rts
*--------------------------------------
CS.RUN.PrintCwd >PUSHW L.MSG.CWD
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.NewLine lda #C.CR
>SYSCALL PutChar
lda bIsTTY
beq .9
2021-06-11 17:25:09 +00:00
lda #C.LF
>SYSCALL PutChar
.9 rts
*--------------------------------------
CS.RUN.ISATTY ldy #S.PS.hStdOut
lda (pPS),y
tax
2021-07-26 13:45:29 +00:00
lda hFDs-1,x
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda (ZPPtr1)
beq .9
inc bIsTTY
.9 rts
2021-06-11 17:25:09 +00:00
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
2021-06-11 17:25:09 +00:00
bcc CS.QUIT
>LDA.G hFilter
beq .3
>SYSCALL FreeMem
.3 >LDA.G hPW
2021-07-26 13:45:29 +00:00
beq .4
2021-06-11 17:25:09 +00:00
>SYSCALL FreeMem
.4 lda hLineBuf
beq .8
>SYSCALL FreeMem
2021-07-26 13:45:29 +00:00
2021-06-11 17:25:09 +00:00
.8 clc
rts
*--------------------------------------
.INB usr/src/shared/x.fileenum.s
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "SAsa"
OptionVars .DA #bSummary,#bAllFiles,#bSummary,#bAllFiles
*--------------------------------------
MSG.USAGE .AS "Usage : DU [-A] [-S] [filespec]\r\n"
.AS " -A : Show all files (not only directories)\r\n"
.AZ " -S : Show only summary\r\n"
MSG.REG1 .AZ "%5u "
2021-06-11 17:25:09 +00:00
MSG.REG2 .AZ "%s"
MSG.CWD .AZ "%s"
MSG.DIRSUMM .AZ "%5u "
2021-06-11 17:25:09 +00:00
MSG.BDEVEXT .AZ "/%15s s%dd%d Blocks Used:%5D Total:%5D"
MSG.BDEV .AZ "\e[32m%s/\e[0m"
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgCount .BS 1
TIME.SysTime .BS S.TIME
bPause .BS 1
bSummary .BS 1
bAllFiles .BS 1
hPW .BS 1
BlkCounters .BS 64 Array of 32 bit integers, size 16
2021-06-11 17:25:09 +00:00
.INB usr/src/shared/x.fileenum.g
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/du.s
ASM