home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #ifdef __GNUC__
- # include <mintbind.h> /* implies osbind.h */
- # include <unistd.h>
- #else
- # include <osbind.h>
- #endif
- #include <string.h>
-
- #ifdef __GNUC__
- /* minimal stuff */
-
- # include <minimal.h>
- # include <stdarg.h>
-
- int printf(const char *fmt,...)
- {
- va_list args;
- char buf[128];
- va_start(args,fmt);
- vsprintf(buf,fmt,args);
- Cconws(buf);
- return 0;
- }
-
- # undef putchar
- # define putchar(c) Cconout(c)
- #else
- # include <stdlib.h>
- #endif
-
- long showdir( const char * name );
- void wildcat( char * out, const char * in );
- char * add_path( char * dest, const char * path, const char * name );
-
- int main ( int argc, char ** argv, char **envp )
- {
- (void)Pdomain(1);
-
- if ( argc == 1 )
- {
- argv[1] = ".";
- argc++;
- }
-
- while( --argc )
- (void)showdir( *++argv );
- return 0;
- }
-
- long showdir( const char * name )
- {
- struct _dta dta, *old_dta;
- char wildname[128];
- char tmp[180];
- register long size = 0L;
-
- old_dta = ( struct _dta * )Fgetdta();
- Fsetdta( &dta );
-
- wildcat( wildname, name );
-
- if ( ! Fsfirst( wildname, 0xFF ) )
- do
- {
- if ( dta.dta_attribute & FA_DIR && *dta.dta_name != '.' )
- size += showdir( add_path( tmp, name, dta.dta_name ) );
- size += dta.dta_size;
- } while ( ! Fsnext() );
- printf( "%6ld %s\r\n", size>>10, name );
- Fsetdta( old_dta );
- return size;
- }
-
- void wildcat( char * out, const char * in )
- {
- register char *a = out;
- register const char *b = in;
-
- while ( *a++ = *b++ )
- ;
- a--;
- *a++ = '\\';
- *a++ = '*';
- *a++ = '.';
- *a++ = '*';
- *a = '\0';
- }
-
- char * add_path( char * dest, const char * path, const char * name )
- {
- register char *a = dest;
- register const char *b = path, *c = name;
-
- while( *a++ = *b++ )
- ;
- a--;
- *a++ = '\\';
- while( *a++ = *c++ )
- ;
- *--a = '\0';
- return dest;
- }
-