File: treedir.c

package info (click to toggle)
c-cpp-reference 2.0.2-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 8,012 kB
  • ctags: 4,612
  • sloc: ansic: 26,960; sh: 11,014; perl: 1,854; cpp: 1,324; asm: 1,239; python: 258; makefile: 115; java: 77; awk: 34; csh: 9
file content (53 lines) | stat: -rwxr-xr-x 1,305 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
**  TREEDIR.C - simple recursive directory lister
**
**  public domain demo by Bob Stout
*/

#include <stdio.h>
#include <string.h>

#ifdef __ZTC__
 #include <dos.h>
 #ifndef _A_SUBDIR
  #define _A_SUBDIR FA_DIREC
 #endif
#elif defined(__TURBOC__)
 #include <dir.h>
 #include <dos.h>
 #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 <dos.h>
 #include <errno.h>
#endif

#ifndef SUCCESS
 #define SUCCESS 0
#endif

void do_dir(char *path)
{
        char search[67], new[67];
        struct find_t ff;

        strcat(strcpy(search, path), "\\*.*");
        if (SUCCESS == _dos_findfirst(search, 0xff, &ff)) do
        {
                printf("%s\\%s\n", path, ff.name);
                if (ff.attrib & _A_SUBDIR && '.' != *ff.name)
                {
                        strcat(strcat(strcpy(new, path), "\\"), ff.name);
                        do_dir(new);
                }
        } while (SUCCESS == _dos_findnext(&ff));
}

void main(void)         /* simple resursive current directory lister    */
{
        do_dir(".");
}