Listing 1 (no_dup.h)
/* Program relies on definitions of _MSC_VER or __TURBOC__ to account for compiler differences between Turbo C and Microsoft C. These values are predefined. */ #if defined( _MSC_VER ) #include <malloc.h> #include <direct.h> /* Turbo */ /* Microsoft */ /* translate structure name and members */ #define ffblk find_t #define ff_reserved reserved #define ff_attrib attrib #define ff_ftime wr_time #define ff_fdate wr_date #define ff_fsize size #define ff_name name /* translate attribute mask defines */ #define FA_RDONLY _A_RDONLY #define FA_HIDDEN _A_HIDDEN #define FA_SYSTEM _A_SYSTEM #define FA_LABEL _A_VOLID #define FA_DIREC _A_SUBDIR #define FA_ARCH _A_ARCH /* use macros to substitute functions and swap argument order */ #define findfirst( a , b , c ) _dos_findfirst((a),(c),(b)) #define findnext( a ) _dos_findnext((a)) /* end of _MSC_VER */ #elif defined( __TURBOC__ ) #include <dir.h> #include <alloc.h> #endif /* __TURBOC__ */ #include <dos.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> /* defines */ #define VERSION "NO_DUP Ver 1.0, Jerzy Tomasik (c) 1990" #define ALL_FILES 0xFFFF /* flag for _dos_find??? */ #define MAX_LINE 80 #define MAX_PATH 80 #define MAX_FLEN 13 #define MAX_FILES 15000 #define SEPARATOR "************\n" /* data definitions and declarations */ typedef enum { False, True } Flag; /* DirEntry structure holds data for all files */ typedef struct DirEntry { char *path; char name[13]; char attrib; unsigned time; unsigned date; long size; Flag dir_processed; } DirEntry; /* DirList structure holds the listing of all subdirectories on a disk */ typedef struct DirList { char pathname[MAX_PATH]; Flag dir_processed; struct DirList *prev; struct DirList *next; } DirList; typedef struct { Flag dir; Flag file; unsigned int file_count; unsigned long total_file_size; } GlobalOpt; typedef char *PtrList; /* function prototypes */ DirEntry *get_direntry ( char * ); DirList *make_path ( char *, char *, DirList * ); DirList *get_path ( DirList * ); int name_comp ( const void *, const void * ); char *datestr ( unsigned d, char *buf ); char *timestr ( unsigned t, char *buf ); void fprint_direntry ( FILE *, DirEntry * );