Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

213 lines
7.4 KiB

#define MULTIPLIER sizeof(ULONG)
#define MAX_LINE_SIZE 64*MULTIPLIER
#define MAX_SECTION_DESC_SIZE 64*MULTIPLIER
#define MAX_RESULTS_COUNT 32
#define UCHAR_REMAINDER (MULTIPLIER-sizeof(UCHAR))
#define SECTION_START 0
#define SECTION_END 1
#define OPTIONALS 2
#define TOKEN_MATCH 3
#define SECTION_DESC 4
#define LINE_TYPE_SECTION_START ((UCHAR)1)
#define LINE_TYPE_SECTION_END ((UCHAR)2)
#define LINE_TYPE_REGULAR ((UCHAR)3)
#define SECTIONHDR_SECTIONHDR ((UCHAR)1)
#define SECTIONHDR_SECTIONEND ((UCHAR)2)
#define SECTIONHDR_REGLINE ((UCHAR)3)
#define SECTIONEND_SECTIONEND ((UCHAR)4)
#define SECTIONEND_REGLINE ((UCHAR)5)
#define REGLINE_REGLINE ((UCHAR)6)
#define COMPARE_SUCCESS 0x0UL
#define COMPARE_EQUAL_LAST 0x1UL
#define COMPARE_LINE 0x2UL
#define COMPARE_START 0x3UL
#define COMPARE_END 0x4UL
#define COMPARE_TOKEN 0x5UL
#define COMPARE_BETWEEN_VALUES 0x6UL
#define RESULTS_EQUAL ((UCHAR)0)
#define RESULTS_UNEQUAL ((UCHAR)1)
#define RESULTS_NOT_PRESENT ((UCHAR)2)
#define RESULTS_MINMAX ((UCHAR)3)
#define TOKEN_MATCHING_ALL 0xFFFFFFFF
#define TOKEN_UNMATCHED 0x0UL
#define TOKEN_MATCHED 0x1UL
#if !( defined(lint) || defined(_lint) )
#if i386
#pragma warning(disable:4103)
#endif
#pragma pack(1)
#endif
typedef ULONG RESULT;
typedef double DOUBLE;
typedef struct _MFILE {
ULONG CurrentFileLine;
PCHAR FileName;
FILE *FileP ;
} MFILE, *PMFILE;
typedef struct _LINE {
UINT NormalLineSize ;
UINT CompressedLineSize ;
CHAR NormalLine[MAX_LINE_SIZE] ;
CHAR CompressedLine[MAX_LINE_SIZE];
UCHAR LineType ;
UCHAR Padding[UCHAR_REMAINDER] ;
} LINE, *PLINE;
typedef struct _TOKEN_LIST {
ULONG LinePosition ;
ULONG FileLinePosition ;
ULONG TokenState ;
struct _TOKEN_LIST *NextToken ;
CHAR NormalToken[MAX_LINE_SIZE] ;
CHAR CompressedToken[MAX_LINE_SIZE];
} TOKEN_LIST, *PTOKEN_LIST;
typedef struct _SECTION_CONTROL {
ULONG SectionLineCount ;
ULONG TokenMatchStartLine;
ULONG TokenMatchStopLine ;
PTOKEN_LIST HeadUnmatchedTokens;
DOUBLE SectionIdentifier ;
BOOLEAN OptionalMatching ;
BOOLEAN TokenMatching ;
BOOLEAN BaseControlSection ;
BOOLEAN Padding ;
} SECTION_CONTROL, *PSECTION_CONTROL;
typedef struct _SECTION {
RESULT LastResults[MAX_RESULTS_COUNT] ;
RESULT CurrentResults[MAX_RESULTS_COUNT] ;
ULONG NumberOfLastResults ;
ULONG NumberOfCurrentResults ;
UCHAR ResultsError[MAX_RESULTS_COUNT] ;
RESULT MinimumValue ;
RESULT MaximumValue ;
PMFILE File;
PLINE CurrentLine;
SECTION_CONTROL Control;
CHAR SectionDescription[MAX_SECTION_DESC_SIZE];
} SECTION, *PSECTION;
typedef struct _FUNCTION_ELEMENTS {
ULONG ErrorCount ;
PSECTION NewFirstSection ;
PSECTION NewSecondSection ;
DOUBLE FirstSectionID ;
DOUBLE SecondSectionID ;
BOOLEAN FirstSectionSynchronize ;
BOOLEAN SecondSectionSynchronize ;
BOOLEAN SectionEndsNotSynchronized;
BOOLEAN SkipLine ;
LINE FirstSectionCurrentLine ;
LINE SecondSectionCurrentLine ;
UCHAR CombinedLineVariation ;
UCHAR Padding[UCHAR_REMAINDER] ;
} FUNCTION_ELEMENTS, *PFUNCTION_ELEMENTS;
#if !( defined(lint) || defined(_lint) )
#if i386
#pragma warning(disable:4103)
#endif
#pragma pack()
#endif
//
// MACROS
//
#define CloseFiles( a, b ) { \
if ( a.FileP != (FILE *)NULL ) fclose( a.FileP ); \
if ( b.FileP != (FILE *)NULL ) fclose( b.FileP ); \
}
#define CreateSection() calloc( 1, sizeof( SECTION ) )
#define DestroySection( a ) free( a )
#define ClearAndSetLine( a, b ) { memset( (b), 0, sizeof( LINE ) ); (a)->CurrentLine = (b); }
#define CreateFunctionElements() calloc( 1, sizeof( FUNCTION_ELEMENTS ) )
#define DestroyFunctionElements( a ) free( a )
#define InsertToken( a, b ) { \
a->NextToken = b; \
b = a; \
}
#define DestroyToken( a ) free( a )
//
// Function definitions
//
VOID _cdecl main ( INT , CHAR ** );
VOID Usage ( VOID );
BOOLEAN GetFilePair ( PCHAR * , PCHAR * , PCHAR );
BOOLEAN CompareFiles ( PMFILE , PMFILE , FILE * , ULONG * );
BOOLEAN OpenFiles ( PMFILE , PCHAR , PMFILE , PCHAR );
BOOLEAN CompareFiles ( PMFILE , PMFILE , FILE * , PULONG );
BOOLEAN CompareSections ( PSECTION, PSECTION, FILE * , PULONG );
BOOLEAN GetNextLine ( PSECTION );
BOOLEAN DoNotSkipThisLine ( PSECTION );
VOID LineType ( PSECTION );
BOOLEAN ExtractResults ( PSECTION );
BOOLEAN ExtractBetweenValues ( PSECTION );
BOOLEAN CombinedVariation ( PSECTION, PSECTION, PUCHAR );
RESULT CompareLines ( PSECTION, PSECTION );
BOOLEAN InitializeSectionControl ( PSECTION, PSECTION );
VOID PrintComparisonResults ( PSECTION, PSECTION, RESULT , ULONG , FILE * );
VOID PrintSectionInformation ( PSECTION, FILE * );
DOUBLE ExtractSectionIDFromLine ( PSECTION );
BOOLEAN CheckSectionIDFromCurrentLines ( PSECTION, PSECTION );
BOOLEAN CompareLinesAndPrintResults ( PSECTION, PSECTION, PULONG , FILE * );
VOID TokenInsertInSection ( PSECTION );
RESULT MatchTopToken ( PTOKEN_LIST, PTOKEN_LIST );
VOID CompareTokensAndPrintResults ( PSECTION, PSECTION, PULONG , FILE * );
BOOLEAN MayDifferExistsInOneOrMoreLines( PSECTION, PSECTION );