home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
SPACE2.ZIP
/
SPACE.C
next >
Wrap
Text File
|
1991-06-13
|
7KB
|
222 lines
#define INCL_ERRORS
#include <os2.h>
#include <stdio.h>
#include <string.h>
/* flags */
BYTE fAccumDirSpace ;
BYTE fLotusImport ;
BYTE fVerbose ;
BYTE fArchive ;
void PrintSpaceInfo (PSZ szDirectory, USHORT usFileCount,
double dDiskSpaceUsed, double dDiskSpaceAlloc)
{
if (!fLotusImport)
printf ("Directory ") ;
else
printf ("\"") ;
printf ("%s", szDirectory) ;
if (fVerbose)
printf (" has") ;
if (!fLotusImport)
printf ("\n ") ;
else
printf ("\",") ;
printf ("%d", usFileCount) ;
if (!fLotusImport)
printf (" file(s)") ;
if (fVerbose && fAccumDirSpace)
printf (" including subdirectory files") ;
if (!fLotusImport)
printf ("\n ") ;
else
printf (",") ;
printf ("%.2f", dDiskSpaceUsed) ;
if (!fLotusImport)
printf ("K used") ;
if (fVerbose)
printf (" by these files") ;
if (!fLotusImport)
printf ("\n ") ;
else
printf (",") ;
printf ("%.0f", dDiskSpaceAlloc) ;
if (!fLotusImport)
printf ("K allocated") ;
if (fVerbose)
printf (" by these files\n") ;
printf ("\n") ;
}
void SearchDir (PSZ szSearchSpec, USHORT *pusFileCount,
double *pdDiskSpaceUsed, double *pdDiskSpaceAlloc)
{
struct _FILEFINDBUF fbFile ;
HDIR hDir ;
USHORT usCount ;
USHORT usRtrn ;
USHORT i ;
char szDirectory[256] ;
char szNewSearchSpec[256] ;
USHORT usNewFileCount ;
double dNewDiskSpaceUsed ;
double dNewDiskSpaceAlloc ;
/* Initialize accumulators */
*pusFileCount = 0 ;
*pdDiskSpaceAlloc = (float) 0.0 ;
*pdDiskSpaceUsed = (float) 0.0 ;
/* Identify the Directory name */
strcpy (szDirectory, szSearchSpec) ;
/* Find last backslash to signal end of direcotry spec and truncate string*/
for (i = strlen(szDirectory) - 1; i > 0 && szDirectory[i] != '\\'; --i)
;
szDirectory [i] = 0 ;
hDir = HDIR_CREATE ;
usCount = 1 ;
/* Find the first file in the directory */
DosFindFirst (szSearchSpec, &hDir,
FILE_NORMAL | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY | FILE_ARCHIVED,
&fbFile, sizeof (fbFile), &usCount, 0L) ;
/* while files in directory, find the next file */
do
{
/* if file is a directory call search routine */
if (fbFile.attrFile == FILE_DIRECTORY &&
(strcmp (fbFile.achName, ".") != 0 &&
strcmp (fbFile.achName, "..") != 0))
{
strcpy (szNewSearchSpec, szDirectory) ;
strcat (szNewSearchSpec, "\\") ;
strcat (szNewSearchSpec, fbFile.achName) ;
strcat (szNewSearchSpec, "\\*.*") ;
SearchDir ((PSZ) szNewSearchSpec, &usNewFileCount,
&dNewDiskSpaceUsed, &dNewDiskSpaceAlloc) ;
PrintSpaceInfo((PSZ) szNewSearchSpec, usNewFileCount,
dNewDiskSpaceUsed, dNewDiskSpaceAlloc) ;
if (fAccumDirSpace)
{
*pusFileCount += usNewFileCount ;
*pdDiskSpaceUsed += dNewDiskSpaceUsed ;
*pdDiskSpaceAlloc+= dNewDiskSpaceAlloc ;
}
}
else
/* If not a directory, accumulate the info */
if (strcmp (fbFile.achName, ".") != 0 &&
strcmp (fbFile.achName, "..") != 0)
{
if (!fArchive || fbFile.attrFile && FILE_ARCHIVED)
{
++(*pusFileCount) ;
*pdDiskSpaceAlloc+= ((double) fbFile.cbFileAlloc)/1024 ;
*pdDiskSpaceUsed += ((double) fbFile.cbFile)/1024 ;
}
}
}
while ((usRtrn = DosFindNext (hDir,&fbFile,sizeof(fbFile),&usCount)) == 0) ;
if (usRtrn != ERROR_NO_MORE_FILES)
printf ("Error looking for more files was %d\n", usRtrn) ;
/* Close the search direcotry handle */
DosFindClose (hDir) ;
}
void Instructions (char *PgmName)
{
printf ("Finds the disk space used by all subdirectories, \n") ;
printf ("accumulates the subdirectory space usage in the parent count.\n");
printf ("USAGE: %s <drive>\n", PgmName) ;
printf (" ex. %s C: - to find the space used by\n", PgmName) ;
printf (" directories on the c: drive\n") ;
printf (" -or-\n") ;
printf (" %s C:\TEST - to display information for all\n", PgmName) ;
printf (" subdirectories under c:\test\n") ;
printf ("FLAGS:\n") ;
printf (" /A - count only files with archive bit turned on\n") ;
printf (" /a - accumulate file count, space used and apce allocated when\n") ;
printf (" traversing subdirectories.\n") ;
printf (" /l - Display output in Lotus import format.\n") ;
printf (" /v - Output is verbose\n") ;
}
void main (int argc, char *argv[])
{
char szSearchSpec[256] ;
USHORT usFileCount ;
double dDiskSpaceUsed ;
double dDiskSpaceAlloc ;
USHORT i ;
/* Parse command line arguments */
if (argc < 2)
Instructions (argv[0]) ;
else
{
/* Initialize flags */
fAccumDirSpace = FALSE ;
fLotusImport = FALSE ;
fVerbose = FALSE ;
fArchive = FALSE ;
/* Parse command line */
for (i = 1; i < argc; ++i)
if (argv[i][0] == '/' || argv[i][0] == '-')
switch (argv[i][1])
{
case 'A' :
printf ("Only Archive files will be counted\n") ;
fArchive = TRUE ;
break ;
case 'a' :
printf ("Data is accumulated through all subdirectories\n") ;
fAccumDirSpace = TRUE ;
break ;
case 'L' :
case 'l' :
printf ("Displaying in Lotus Import format\n") ;
fLotusImport = TRUE ;
break ;
case 'V' :
case 'v' :
printf ("Verbose output\n") ;
fVerbose = TRUE ;
break ;
}
else
strcpy (szSearchSpec, argv[i]) ;
strupr (szSearchSpec) ;
/* Search for all files */
strcat (szSearchSpec, "\\*.*") ;
printf ("\n") ;
if (fLotusImport)
{
printf ("\" \",\" \",\"Space \",\"Space \"\n") ;
printf ("\"Directory\",\"Num Files\",\"Used in K \",\"Allocated in K\"\n") ;
}
/* Search the directory for files */
SearchDir (szSearchSpec, &usFileCount,
&dDiskSpaceUsed, &dDiskSpaceAlloc) ;
PrintSpaceInfo ((PSZ) szSearchSpec, usFileCount,
dDiskSpaceUsed, dDiskSpaceAlloc) ;
}
}