home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / mint / ksh_util / du.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-17  |  1.8 KB  |  104 lines

  1. #include <stdio.h>
  2. #ifdef __GNUC__
  3. # include <mintbind.h>        /* implies osbind.h */
  4. # include <unistd.h>
  5. #else
  6. # include <osbind.h>
  7. #endif
  8. #include <string.h>
  9.  
  10. #ifdef __GNUC__
  11. /* minimal stuff */
  12.  
  13. # include <minimal.h>
  14. # include <stdarg.h>
  15.  
  16. int printf(const char *fmt,...)
  17. {
  18.     va_list args;
  19.     char buf[128];
  20.     va_start(args,fmt);
  21.     vsprintf(buf,fmt,args);
  22.     Cconws(buf);
  23.     return 0;
  24. }
  25.  
  26. # undef putchar
  27. # define putchar(c) Cconout(c)
  28. #else
  29. # include <stdlib.h>
  30. #endif
  31.  
  32. long showdir( const char * name );
  33. void wildcat( char * out, const char * in );
  34. char * add_path( char * dest, const char * path, const char * name );
  35.  
  36. int main ( int argc, char ** argv, char **envp )
  37. {
  38.     (void)Pdomain(1);
  39.  
  40.     if ( argc == 1 )
  41.     {
  42.         argv[1] = ".";
  43.         argc++;
  44.     }
  45.  
  46.     while( --argc )
  47.         (void)showdir( *++argv );
  48.     return 0;
  49. }
  50.  
  51. long showdir( const char * name )
  52. {
  53.     struct _dta dta, *old_dta;
  54.     char wildname[128];
  55.     char tmp[180];
  56.     register long size = 0L;
  57.  
  58.     old_dta = ( struct _dta * )Fgetdta();
  59.     Fsetdta( &dta );
  60.  
  61.     wildcat( wildname, name );
  62.  
  63.     if ( ! Fsfirst( wildname, 0xFF ) )
  64.         do
  65.         {
  66.             if ( dta.dta_attribute & FA_DIR && *dta.dta_name != '.' )
  67.                 size += showdir( add_path( tmp, name, dta.dta_name ) );
  68.             size += dta.dta_size;
  69.         } while ( ! Fsnext() );
  70.     printf( "%6ld %s\r\n", size>>10, name );
  71.     Fsetdta( old_dta );
  72.     return size;
  73. }
  74.  
  75. void wildcat( char * out, const char * in )
  76. {
  77.     register char *a = out;
  78.     register const char *b = in;
  79.  
  80.     while ( *a++ = *b++ )
  81.         ;
  82.     a--;
  83.     *a++ = '\\';
  84.     *a++ = '*';
  85.     *a++ = '.';
  86.     *a++ = '*';
  87.     *a = '\0';
  88. }
  89.  
  90. char * add_path( char * dest, const char * path, const char * name )
  91. {
  92.     register char *a = dest;
  93.     register const char *b = path, *c = name;
  94.  
  95.     while( *a++ = *b++ )
  96.         ;
  97.     a--;
  98.     *a++ = '\\';
  99.     while( *a++ = *c++ )
  100.         ;
  101.     *--a = '\0';
  102.     return dest;
  103. }
  104.