home *** CD-ROM | disk | FTP | other *** search
/ PDA Software Library / pdasoftwarelib.iso / PSION / UTILS / SHELL3A / SRC.ZIP / OPL / DU.OPL < prev    next >
Encoding:
Text File  |  1996-09-03  |  1.9 KB  |  95 lines

  1. Rem ****************************************
  2. Rem * Shell3a external command - du.opl
  3. Rem * ╕ Nick Murray May 1996
  4. Rem *
  5. Rem * du - Display the usage of a filesystem
  6. Rem *     by directory
  7. Rem ****************************************
  8. PROC du%:(n%)
  9. LOCAL i%,buf$(128),ret%,flag%,tot&
  10.     ONERR ErrTrap::
  11.     i%=2
  12.     WHILE i%<=n%
  13.         buf$=PEEK$(argv%(i%))
  14.         IF buf$="-s"
  15.             flag%=1
  16.         ELSE
  17.             BREAK
  18.         ENDIF
  19.         i%=i%+1
  20.     ENDWH
  21.     SHesc%=0
  22.     IF i%>n%    Rem no directories given
  23.         buf$=SHcwd$
  24.     ENDIF
  25.     DO
  26.         ret%=Fparse%:(ADDR(buf$),buf$)
  27.         IF ret%<0
  28.             PRINT PrPath$:(buf$),"-",err$:(ret%)
  29.             RETURN
  30.         ELSEIF ret% AND 16
  31.             tot&=SHdu&:(buf$,flag%)
  32.             IF flag%
  33.                 fprint%:(NUM$(tot&,-9)+" "+PrPath$:(buf$))
  34.             ENDIF
  35.         ENDIF
  36.         IF SHesc% OR  KEY=27
  37.             GIPRINT ERR$(-114)
  38.             SHesc%=1
  39.             BREAK
  40.         ENDIF
  41.         i%=i%+1
  42.         IF i%<=n%
  43.             buf$=PEEK$(argv%(i%))
  44.         ENDIF
  45.     UNTIL i%>n%
  46.     RETURN
  47. ErrTrap::
  48.     ONERR off
  49.     PRINT err$:(ERR)
  50. ENDP
  51.  
  52. PROC SHdu&:(d$,flag%)
  53. LOCAL Fformat%,Fattr%,Fsize&,Mtime&,Spare&
  54. LOCAL i$(128),in$(128),size%(8),h%,ret%,tot&
  55.     ret%=IOOPEN(h%,d$,$0030)
  56.     IF ret%<0
  57.         RAISE ret%
  58.     ENDIF
  59.     WHILE (IOW(h%,1,#(UADD(ADDR(i$),1)),size%()) >=0)
  60.         POKEB ADDR(i$),CALL($B9,0,0,0,0,UADD(ADDR(i$),1))
  61.         IF i$="." OR i$=".."    Rem ignore . and .. on UNIX filesystems
  62.             CONTINUE
  63.         ENDIF
  64.         IF KEY=27
  65.             SHesc%=1
  66.             GOTO End::
  67.         ENDIF
  68.         i$=d$+i$
  69.         in$=i$+CHR$(0)
  70.         CALL($0887,UADD(ADDR(in$),1),ADDR(Fformat%),0,0,0)
  71.         IF (Fattr% AND $10)    Rem directory
  72. Rem if this was done properly we'd call Fparse% to get the actual
  73. Rem  directory component separator (it's not always '\'!). This
  74. Rem  however is SLOW, so assume a backslash.
  75.             tot&=tot&+SHdu&:(i$+"\",flag%)
  76.             IF SHesc%
  77.                 GOTO End::
  78.             ENDIF
  79.             CONTINUE
  80.         ELSE
  81.             tot&=tot&+Fsize&
  82.         ENDIF
  83.     ENDWH
  84.     IF flag%=0
  85.         fprint%:(NUM$(tot&,-9)+" "+PrPath$:(d$))
  86.     ENDIF
  87. End::
  88.     IOCLOSE(h%)
  89.     RETURN tot&
  90. ErrTrap::
  91.     ONERR off
  92.     IOCLOSE(h%)
  93.     PRINT err$:(ERR)
  94. ENDP
  95.