home *** CD-ROM | disk | FTP | other *** search
/ Pegasus Win & OS/2 Edition / Pegasus_Win_OS2.iso / os2 / datenvrw / dirsize.cmd < prev    next >
Encoding:
Text File  |  1993-02-17  |  3.9 KB  |  126 lines

  1. /* DIRSIZE - (C)1992 Turgut Kalfaoglu  <TURGUT@FRORS12.BITNET>
  2.    For OS/2 2.0
  3.    Version 1.1 - corrects a missing 'end' statement
  4.  
  5.   DIRSIZE will summarise the disk utilisation of your files and
  6.   directories.
  7.  
  8.   This program creates three files showing:
  9.    -> all files on drive, sorted by filesize
  10.    -> all subdirectory totals, unsorted
  11.    -> all subdirectory totals, plus bar graph, sorted
  12.  
  13. Usage:
  14.    -> Make the drive you want examined default,
  15.    -> type DIRSIZE from any OS/2 prompt. It will create three
  16.       files in the root directory of your drive: SORTED.DIR,
  17.       SUMMARY.DIR and GRAPH.DIR. Warning: Old versions of these
  18.       files or files with the same name will be erased!
  19.    -> If you are not interested in having your whole disk
  20.       sorted, run program with the NOSORT option.
  21.  
  22. Requires:
  23.    -> OS/2 2.0
  24.    -> OS/2 SORT utility.
  25.  
  26. */
  27.   Arg parms
  28.   nosort = pos('NOSORT',parms)>0
  29.  
  30.   /* These are the outputs from the program: */
  31.   outfile = "\SORTED.DIR"
  32.   sumfile = "\SUMMARY.DIR"
  33.   grafile = "\GRAPH.DIR"
  34.  
  35.   Call RxFuncAdd 'SysFileTree','RexxUtil','SysFileTree'
  36.  
  37.   Say time() '-- START: Erasing output files --'
  38.   'DEL' outfile sumfile grafile
  39.  
  40.     Say time() 'Reading directories'
  41.     rc = SysFileTree("\*.*",s,"BS")
  42.     Say time() s.0 'items loaded.'
  43.     if rc > 0 then exit rc
  44.     if nosort = 0 then do
  45.        Say time() 'Sorting files by size. This may take a little while.'
  46.        offset = s.0 % 2
  47.        do while offset > 0
  48.           limit = s.0 - offset
  49.           switch = 1
  50.           do while switch \= 0
  51.                 switch = 0
  52.                 do i=1 to limit
  53.                         x = i+offset
  54.                         if word(s.i,3) > word(s.x,3) then do
  55.                            switch = i
  56.                            t = s.i
  57.                            s.i = s.x
  58.                            s.x = t
  59.                         end
  60.                 end
  61.                 limit = switch - offset
  62.           end
  63.           offset = offset % 2
  64.        end
  65.       end
  66.       Say time() 'Outputing to' outfile
  67.       do i=1 to s.0
  68.          rc = LINEOUT(outfile,s.i,)
  69.       end
  70.       rc=LINEOUT(outfile,,)
  71.  
  72.       Say time() 'Summarising directory sizes..'
  73.       sizecount. = 0
  74.       dirs = "  "
  75.       max = 0
  76.       maxlen = 0
  77.       do i=1 to s.0
  78.         parse var s.i date time size attrib filespec
  79.         parse var filespec disk':'dir
  80.         x = lastpos('\',dir) /* parse filename now.. */
  81.         dirname = left(dir,x-1)
  82.         filename = substr(dir,x+1)
  83.         if dirname = '' Then dirname ='ROOT'
  84.         sizecount.dirname = sizecount.dirname + size
  85.         if pos(' 'dirname,dirs)=0 then dirs=dirs dirname
  86.       end
  87.       Say 'You have' words(dirs) 'directories. Writing to' sumfile
  88.       odirs = dirs
  89.       do words(dirs)
  90.          parse var dirs dirname dirs
  91.          disp = dirname
  92.          if length(disp)<20 then disp=left(disp,20,'.')
  93.          size = sizecount.dirname
  94.          if length(size)<12 then size=right(size,12,'.')
  95.          blurb = 'directory:' disp 'consumes' size 'bytes.'
  96.          rc = LINEOUT(sumfile,blurb,)
  97.          max = max(max,sizecount.dirname)
  98.          maxlen = max(maxlen,length(dirname))
  99.       end
  100.       rc = LINEOUT(sumfile,,)
  101.       dirs = odirs
  102.       maxstars = 78 - (maxlen+10+3)
  103.       Say time() 'Creating' grafile 'with this chart:'
  104.       do words(dirs)
  105.          parse var dirs dirname dirs
  106.          x = ''
  107.          stars = trunc(sizecount.dirname / max * maxstars)
  108.          if stars < 1 then iterate
  109.          do i=1 to stars
  110.             x=x'*'
  111.          end
  112.          blurb = left(dirname,maxlen) right(sizecount.dirname,12) x
  113.          say blurb
  114.          rc = LINEOUT(grafile,blurb,)
  115.       end
  116.       rc = LINEOUT(grafile,,)
  117.       Say time() 'Sorting' grafile
  118.       'SORT /R /+28 <' grafile '> CALC$.TMP'
  119.       if rc\=0 then exit rc
  120.       'ERASE' grafile
  121.       'COPY CALC$.TMP' grafile '/V'
  122.       'ERASE CALC$.TMP'
  123.       Say time() '-- END: Successful completion --'
  124.       exit
  125.  
  126.