home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / mint / ksh_util / df.c next >
Encoding:
C/C++ Source or Header  |  1991-01-26  |  1.6 KB  |  95 lines

  1. #include <mintbind.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. #ifdef __GNUC__
  7. /* minimal stuff */
  8.  
  9. #include <minimal.h>
  10. #include <stdarg.h>
  11.  
  12. int printf(const char *fmt,...)
  13. {
  14.     va_list args;
  15.     char buf[128];
  16.     va_start(args,fmt);
  17.     vsprintf(buf,fmt,args);
  18.     Cconws(buf);
  19.     return 0;
  20. }
  21.  
  22. #undef putchar
  23. #define putchar(c) Cconout(c)
  24. #endif
  25.  
  26. char * HardDrives( void );
  27. void df( register char *p );
  28.  
  29. int main( int argc, char **argv, char **envp )
  30. {
  31.     printf( "Device     Total      Used      Free\r\n" );
  32.     if ( argc == 1 )
  33.         df( HardDrives() );
  34.     else
  35.         while( --argc )
  36.             df( *++argv );
  37.     return 0;
  38. }
  39.  
  40. void df( register char *p )
  41. {
  42.     register int c;
  43.     long nb, total, used;
  44.     struct {
  45.         unsigned long free;
  46.         unsigned long cpd;
  47.         unsigned long bps;
  48.         unsigned long spc;
  49.     } v;
  50.  
  51.     while ( c = *p++ )
  52.     {
  53.         if ( ( 'A' <= c ) && ( c <= 'P' ) )
  54.             c -= 'A' - 1;
  55.         else if ( ( 'a' <= c ) && ( c <= 'p' ) )
  56.             c -= 'a' - 1;
  57.         else
  58.             break;
  59.     
  60.         if ( Dfree( &v, c ) >= 0L )
  61.         {
  62.             nb    = v.bps * v.spc;
  63.             total    = v.cpd * nb;
  64.             nb     *= v.free;
  65.             used = total - nb;
  66.             printf( " %c:   % 10ld% 10ld% 10ld %ldK\r\n",
  67.                 c + 'a' - 1, total, used, nb, nb/1024 );
  68.         }
  69.     }
  70. }
  71.  
  72. /*
  73.  *    Build a list of the mounted drives, skipping the floppy drives, and
  74.  *    MiNT's pseudo drives
  75.  */
  76.  
  77. char * HardDrives( void )
  78. {    register long    n;
  79.     register char    *p, c;
  80.     static   char    dmap[27];
  81.  
  82.     n = Drvmap();
  83.     p = dmap;
  84.     for ( c = 'a'; c < 'z'; c++ )
  85.     {
  86.         if ( n & 1L )
  87.             if ( c > 'b' && c < 'p' )
  88.                 *p++ = c;
  89.         n >>= 1;
  90.     }
  91.     *p = '\0';
  92.     return dmap;
  93. }
  94.  
  95.