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 * );