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 X.RESET.SRC.DIR .EQ 1 *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPFileName .BS 2 ZPFileStat .BS 2 bPass2 .BS 1 bDirLevel .BS 1 bCRLF .BS 1 bPause .BS 1 bSummary .BS 1 bAllFiles .BS 1 ArgCount .BS 1 ArgDir .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 #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 jsr CS.RUN.SetCRLF .1 inc ArgCount lda ArgCount >SYSCALL ArgV bcs .6 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 ldy #1 lda (ZPPtr1),y beq .9 ldy #OptionVars-OptionList-1 .2 cmp OptionList,y beq .3 dey bpl .2 .9 >LDYA L.MSG.USAGE >SYSCALL PutS lda #E.SYN sec .99 rts .3 ldx OptionVars,y sec ror $0,x bra .1 .4 lda ArgDir bne .9 lda ArgCount sta ArgDir >LDYA ZPPtr1 jsr X.InitSrcDirYA bcc .1 scan for any other args rts *-------------------------------------- .6 lda ArgDir do we have a Source dir ? bne .8 ldy #S.PS.hCWD lda (pPS),y >SYSCALL GetMemPtr jsr X.InitSrcDirYA bcs .99 .8 >PUSHEA.G TIME.SysTime >SYSCALL Time *-------------------------------------- CS.RUN.LOOP stz bPass2 .1 ldy #S.PS.hStdIn lda (pPS),y >SYSCALL FEOF bcc .2 rts I/O error .2 tay bne .3 no char >SYSCALL GetChar cmp #$03 Ctrl-C beq .99 Abort.... cmp #$13 Ctrl-S bne .3 lda bPause eor #$ff sta bPause bne .1 .3 bit bPause bmi .1 jsr X.GetEntry First entry bcs .9 jsr X.IncludeMatch 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 X.GetNextEntry Next entry bcc .1 If there is one, go again bit bPass2 bmi .9 jsr X.ResetSrcDir bcs .99 dec bPass2 bra .1 .9 bit bSummary bmi .91 jsr CS.RUN.PrintDirSumm jsr CS.RUN.PrintCwd jsr CS.RUN.NewLine .91 dec bDirLevel jsr X.LeaveSubDir "cd .." bcs .97 This means we are done jsr X.BasePath.. Prune pathname jsr X.GetNextEntry Get next entry jmp CS.RUN.LOOP Go again .97 bit bSummary bpl .98 inc bDirLevel jsr CS.RUN.PrintDirSumm jsr CS.RUN.PrintBaseDir jsr CS.RUN.NewLine .98 lda #0 sec .99 rts *-------------------------------------- CS.RUN.PRINT.JMP jmp (J.CS.RUN.PRINT,x) *-------------------------------------- CS.RUN.PRINT.REG bit bPass2 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 lda (ZPFileStat),y pha dey lda (ZPFileStat),y pha txa Get loop counter asl x2 asl x2 again tay pla Do 32-bit add clc adc (ZPPtr1),y LSB sta (ZPPtr1),y pla iny adc (ZPPtr1),y sta (ZPPtr1),y 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 bit bAllFiles bpl .8 >PUSHW L.MSG.REG1 ldy #S.STAT.BLOCKS+3 ldx #4 .3 lda (ZPFileStat),y >PUSHA dey dex bne .3 >PUSHBI 4 >SYSCALL PrintF bcs .9 jsr CS.RUN.PrintCwd >PUSHW L.MSG.REG2 >PUSHW ZPFileName >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 >LDYA ZPFileName jmp X.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 >LDYA ZPFileName jsr X.EnterSubDirYA bcs .9 .8 clc .9 rts *-------------------------------------- CS.RUN.PrintDirSumm >PUSHW L.MSG.DIRSUMM lda bDirLevel asl asl ora #3 clc adc #BlkCounters tay ldx #3 .1 >PUSHB (pData),y lda #0 sta (pData),y dey dex bpl .1 >PUSHBI 4 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.PrintBaseDir lda ArgDir beq .1 >SYSCALL ArgV >SYSCALL PutS rts .1 ldy #S.PS.hCWD lda (pPS),y >SYSCALL GetMemPtr >SYSCALL PutS 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 bCRLF beq .9 lda #C.LF >SYSCALL PutChar .9 rts *-------------------------------------- CS.RUN.SetCRLF ldy #S.PS.hStdOut lda (pPS),y tax lda FILEs.hFD-1,x >SYSCALL GetMemPtr >STYA ZPPtr1 lda (ZPPtr1) #S.FD.T.REG ? beq .9 no CRLF if REG inc bCRLF .9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr X.LeaveSubDir bcc CS.QUIT >LDA.G hInclude 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 .CS "Usage : DU [-A] [-S] [filespec]\r\n" .CS " -A : Show all files (not only directories)\r\n" .CZ " -S : Show only summary\r\n" MSG.REG1 .CZ "%5u " MSG.REG2 .CZ "%s" MSG.CWD .CZ "%s" MSG.DIRSUMM .CZ "%5u " MSG.BDEVEXT .CZ "/%15s s%dd%d Blocks Used:%5D Total:%5D" MSG.BDEV .CZ "\e[32m%s/\e[0m" *-------------------------------------- .DUMMY .OR 0 DS.START TIME.SysTime .BS S.TIME BlkCounters .BS 64 Array of 32 bit integers, size 16 .INB usr/src/shared/x.fileenum.g DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/du.s ASM