From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/filcount.c | 93 +++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/filcount.c (limited to 'reference/C/CONTRIB/SNIP/filcount.c') diff --git a/reference/C/CONTRIB/SNIP/filcount.c b/reference/C/CONTRIB/SNIP/filcount.c new file mode 100755 index 0000000..40a7d31 --- /dev/null +++ b/reference/C/CONTRIB/SNIP/filcount.c @@ -0,0 +1,93 @@ +/* +** FILCOUNT.C - counts directories and /or files in a directory +** +** public domain demo by Bob Stout +*/ + +#include +#include + +#undef TRUE +#undef FALSE +typedef enum {ERROR = -1, FALSE, TRUE} LOGICAL; + +#ifdef __ZTC__ + #include +#elif defined(__TURBOC__) + #include + #include + #define _dos_findfirst(f,a,b) findfirst(f,b,a) + #define _dos_findnext(b) findnext(b) + #define find_t ffblk + #define _A_SUBDIR FA_DIREC + #define attrib ff_attrib + #define name ff_name +#else /* assume MSC/QC */ + #include + #include +#endif + +#undef SUCCESS +#define SUCCESS 0 + +#define LAST_CHAR(str) (str)[strlen(str) - 1] + +unsigned DirCount = 0, FileCount = 0; + +/* +** Arguments: 1 - directory to search +** 2 - search subdirectories: TRUE or FALSE +*/ + +void do_dir(char *path, int recurse_flag) +{ + char search[67], new[67]; + struct find_t ff; + + strcpy(search, path); + if ('\\' != LAST_CHAR(search)) + strcat(search, "\\"); + strcat(search, "*.*"); + if (SUCCESS == _dos_findfirst(search, 0xff, &ff)) do + { + if ('.' == *ff.name) + continue; + if (ff.attrib & _A_SUBDIR) + { + DirCount++; + if (recurse_flag) + { + strcpy(new, path); + if ('\\' != LAST_CHAR(new)) + strcat(new, "\\"); + strcat(new, ff.name); + do_dir(new, recurse_flag); + } + } + else FileCount++; + } while (SUCCESS == _dos_findnext(&ff)); +} + +/* +** Simple resursive file/directory counter +** +** Usage: FILCOUNT [path_name] [{Y | N}] +** +** Notes: 1. If a path name isn't specified, the current directory is assumed +** 2. Default recursion flag is FALSE +** 3. Path must be specified in order to specify the recursion flag +*/ + +void main(int argc, char *argv[]) +{ + char *Dir ="."; + LOGICAL recurse = FALSE; + + if (1 < argc) + Dir = argv[1]; + if (2 < argc) + recurse = (NULL != strchr("Yy", *argv[2])); + do_dir(Dir, recurse); + printf("Counted: %d Directories and %d Files\n", + DirCount, FileCount); +} -- cgit v1.2.3-54-g00ecf