A2osX/BIN/DU.S.TXT

425 lines
15 KiB
Plaintext
Raw Normal View History

2021-06-11 17:25:09 +00:00
NEW
AUTO 3,1
*---------------------------------------
* DU: Disk Usage - Bobbi - June 14, 2021
2021-06-11 17:25:09 +00:00
*---------------------------------------
.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
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
.DA CS.DOEVENT
.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
*--------------------------------------
CS.RUN
.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
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 (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
.8 >PUSHEA.G TIME.SysTime
>SYSCALL Time
>LDYAI S.PW
>SYSCALL GetMem
bcs .9
>STYA ZPPW
txa
>STA.G hPW
>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
bra .1
.9 >LDA.G bSummary
bne .91
jsr CS.RUN.PrintDirSumm
jsr CS.RUN.PrintCwd
jsr CS.RUN.NewLine
.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
2021-06-11 17:25:09 +00:00
ldy #S.STAT.BLOCKS+1
lda (ZPFileStat),y
pha
dey
lda (ZPFileStat),y
pha
txa Get loop counter
asl x2
tay
pla
2021-06-11 17:25:09 +00:00
clc
adc (ZPPtr1),y
sta (ZPPtr1),y
2021-06-11 17:25:09 +00:00
pla
iny
adc (ZPPtr1),y
sta (ZPPtr1),y
dex
cpx #$ff
bne .2
2021-06-11 17:25:09 +00:00
>LDA.G bAllFiles
beq .8
>PUSHW L.MSG.REG1
ldy #S.STAT.BLOCKS+1
ldx #2
.3 lda (ZPFileStat),y
2021-06-11 17:25:09 +00:00
>PUSHA
dey
dex
bne .3 (2)
2021-06-11 17:25:09 +00:00
>PUSHBI 2
>SYSCALL PrintF
bcs .9
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
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
>PUSHBI 8
>SYSCALL PrintF
bcs .9
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
clc
adc ZPPtr1
sta ZPPtr1
lda #$00
adc ZPPtr1+1
sta ZPPtr1+1
>PUSHW L.MSG.DIRSUMM
ldy #$01
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
2021-06-11 17:25:09 +00:00
>PUSHBI 2
>SYSCALL PrintF
ldy #$01
2021-06-11 17:25:09 +00:00
lda #$00
sta (ZPPtr1),y
dey
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 #C.LF
>SYSCALL PutChar
clc
rts
*--------------------------------------
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
beq .4
2021-06-11 17:25:09 +00:00
>SYSCALL FreeMem
.4 lda hLineBuf
beq .8
>SYSCALL FreeMem
.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 "%5D "
MSG.REG2 .AZ "%s"
MSG.CWD .AZ "%s"
MSG.DIRSUMM .AZ "%5D "
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 16 Array of 16 bit integers, size 8
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