/*++ Copyright (c) 1990 Microsoft Corporation Module Name: fc.hxx Abstract: This module contains the definition for the FC class, which implements the DOS5-compatible FC utility. Author: Ramon Juan San Andres (ramonsa) 01-May-1990 Revision History: --*/ #if !defined( _FC_ ) #define _FC_ #include "object.hxx" #include "program.hxx" #include "path.hxx" #include "wstring.hxx" extern "C" { #include } // // Define DEBUG for debug support // // #define DEBUG // // Maximum file name size // #define MAXFNAME 80 // // Maximum line size // #define MAXLINESIZE 128 // // Exit codes // #define FAILURE -1 #define SUCCESS 0x0 #define FILES_ARE_DIFFERENT 0x1 #define FILES_NOT_FOUND 0x2 #define FILES_OFFLINE 0x4 typedef struct lineType { INT line; // line number union { CHAR text[MAXLINESIZE]; // body of line WCHAR wtext[MAXLINESIZE]; // body of line }; } LINETYPE, *PLINETYPE; DECLARE_CLASS( STREAM ); DECLARE_CLASS( FC ); class FC : public PROGRAM { public: DECLARE_CONSTRUCTOR( FC ); NONVIRTUAL ~FC (); INT Fcmain (); BOOLEAN Initialize(); BOOLEAN ParseArguments(); INT BinaryCompare(PCWSTRING f1, PCWSTRING f2); BOOLEAN compare(int l1,int s1,int l2,int s2,int ct); INT LineCompare(PCWSTRING f1, PCWSTRING f2); INT RealLineCompare(PCWSTRING f1, PCWSTRING f2, PSTREAM Stream1, PSTREAM Stream2); int xfill(struct lineType *pl,PSTREAM Stream,int ct,int *plnum); int adjust(struct lineType *pl,int ml,int lt); void dump(struct lineType *pl,int start,int end); void pline(struct lineType *pl); INT ParseFileNames(); INT comp(PCWSTRING, PCWSTRING); static char *strbscan (char *p, char *s); static char *strbskip (char *p, char *s); // static int fgetl(char *buf,int len, FILE *fh); static int extention (char *src, char *dst); static int filename (char *src, char *dst); private: int ctSync; /* number of lines required to sync */ int cLine ; /* number of lines in internal buffs */ BOOLEAN fUnicode; /* UNICODE text file compare */ BOOLEAN fAbbrev ; /* abbreviated output */ BOOLEAN fBinary ; /* binary comparison */ BOOLEAN fLine ; /* line comparison */ BOOLEAN fNumb ; /* display line numbers */ BOOLEAN fCase ; /* case is significant */ BOOLEAN fIgnore ; /* ignore spaces and blank lines */ BOOLEAN fExpandTabs; BOOLEAN fSkipOffline; /* skip offline files */ BOOLEAN fOfflineSkipped; /* if offline files were skipped */ #ifdef DEBUG BOOLEAN fDebug ; #endif int (*funcRead) (char *buf,int len,FILE *fh); /* function to use to read lines */ INT (*fCmp) (IN PSTR, IN PSTR); /* function to use to compare lines */ INT (*fCmp_U) (IN PWSTR, IN PWSTR); /* function to use to compare lines */ struct lineType *buffer1; struct lineType *buffer2; CHAR line[MAXLINESIZE]; /* single line buffer */ CHAR **extBin; PATH _File1; PATH _File2; }; INLINE char *FC::strbscan (char *p, char *s) { return p + strcspn(p,s); } INLINE char *FC::strbskip (char *p, char *s) { return p + strspn(p,s); } #endif //FC