225 lines
6.4 KiB
C
225 lines
6.4 KiB
C
/****************************** Module Header ******************************\
|
|
* Module Name: hsplit.h
|
|
*
|
|
* Copyright (c) 1985-96, Microsoft Corporation
|
|
*
|
|
* 09/05/96 GerardoB Created
|
|
\***************************************************************************/
|
|
#include <stdio.h>
|
|
#include <stddef.h>
|
|
#include <windows.h>
|
|
|
|
/***************************************************************************\
|
|
* Defines
|
|
\***************************************************************************/
|
|
// hsLogMsg
|
|
#define HSLM_DEFAULT 0x0000
|
|
#define HSLM_NOLABEL 0x0001
|
|
#define HSLM_ERROR 0x0002
|
|
#define HSLM_WARNING 0x0004
|
|
#define HSLM_API 0x0008
|
|
#define HSLM_APIERROR (HSLM_API | HSLM_ERROR)
|
|
#define HSLM_NOEOL 0x0010
|
|
#define HSLM_APPEND (HSLM_NOLABEL | HSLM_NOEOL)
|
|
#define HSLM_NOLINE 0x0020
|
|
#define HSLM_UNEXPECTEDEOF 0x0040
|
|
#define HSLM_EOFERROR (HSLM_UNEXPECTEDEOF | HSLM_ERROR)
|
|
|
|
/*
|
|
* Tag mask bits.
|
|
* IMPORTANT: If you add a tag mask bit,
|
|
* update HST_MASKBITCOUNT and HST_NEXTMASK
|
|
*/
|
|
/*
|
|
* Types
|
|
*/
|
|
#define HST_DEFAULT 0x00000000
|
|
#define HST_ERROR 0x00000001
|
|
#define HST_MAPOLD 0x00000002
|
|
#define HST_SKIP 0x00000004
|
|
#define HST_UNKNOWN 0x00000008
|
|
#define HST_IGNORE 0x00000010
|
|
|
|
/*
|
|
* Headers
|
|
*/
|
|
#define HST_PUBLIC 0x00000020
|
|
#define HST_INTERNAL 0x00000040
|
|
#define HST_BOTH (HST_PUBLIC | HST_INTERNAL)
|
|
#define HST_USERINTERNALTAG 0x00000080
|
|
#define HST_USERBOTHTAG 0x00000100
|
|
#define HST_USERHEADERTAG (HST_USERINTERNALTAG | HST_USERBOTHTAG)
|
|
|
|
/*
|
|
* Blocks
|
|
*/
|
|
#define HST_BEGIN 0x00000200
|
|
#define HST_END 0x00000400
|
|
#define HST_BLOCK (HST_BEGIN | HST_END)
|
|
#define HST_IF 0x00000800
|
|
#define HST_USERINTERNALBLOCK 0x00001000
|
|
#define HST_USERBOTHBLOCK 0x00002000
|
|
#define HST_USERBLOCK (HST_USERINTERNALBLOCK | HST_USERBOTHBLOCK)
|
|
|
|
|
|
#define HST_WINVER 0x00004000
|
|
#define HST_INCINTERNAL 0x00008000
|
|
#define HST_INTERNALNOTCOMP 0x00010000
|
|
|
|
#define HST_EXTRACTONLY 0x00020000
|
|
#define HST_EXTRACT 0x00040000
|
|
|
|
/*
|
|
* This is the count of HST_ bits; 32 - HST_MASKBITCOUNT is the number
|
|
* of tags that can be created from the command line parameters
|
|
*/
|
|
#define HST_LASTMASK 0x00040000
|
|
#define HST_USERTAGSMASK 0xFFF80000
|
|
#define HST_MAXMASK 0x80000000
|
|
#define HST_MASKBITCOUNT 19
|
|
|
|
/*
|
|
* Options
|
|
*/
|
|
#define HSO_APPENDOUTPUT 0x00000001
|
|
#define HSO_OLDPROJSW_N 0x00000002
|
|
#define HSO_OLDPROJSW_4 0x00000004
|
|
#define HSO_OLDPROJSW_E 0x00000008
|
|
#define HSO_OLDPROJSW_P 0x00000010
|
|
#define HSO_OLDPROJSW (HSO_OLDPROJSW_N | HSO_OLDPROJSW_4 | HSO_OLDPROJSW_E | HSO_OLDPROJSW_P)
|
|
#define HSO_SPLITONLY 0x00000020
|
|
#define HSO_INCINTERNAL 0x00000040
|
|
#define HSO_USERINTERNALBLOCK 0x00000080
|
|
#define HSO_USERBOTHBLOCK 0x00000100
|
|
#define HSO_USERBLOCK (HSO_USERINTERNALBLOCK | HSO_USERBOTHBLOCK)
|
|
#define HSO_USERINTERNALTAG 0x00000200
|
|
#define HSO_USERBOTHTAG 0x00000400
|
|
#define HSO_USERHEADERTAG (HSO_USERINTERNALTAG | HSO_USERBOTHTAG)
|
|
#define HSO_SKIPUNKNOWN 0x00000800
|
|
|
|
/***************************************************************************\
|
|
* Structures
|
|
\***************************************************************************/
|
|
|
|
typedef struct _HSTAG
|
|
{
|
|
SIZE_T dwLabelSize;
|
|
char * pszLabel;
|
|
DWORD dwMask;
|
|
} HSTAG, * PHSTAG;
|
|
|
|
typedef struct _HSBLOCK
|
|
{
|
|
DWORD dwMask;
|
|
char * pszifLabel;
|
|
DWORD dwLineNumber;
|
|
} HSBLOCK, * PHSBLOCK;
|
|
|
|
typedef struct _HSEXTRACT
|
|
{
|
|
struct _HSEXTRACT * pNext;
|
|
char * pszFile;
|
|
HANDLE hfile;
|
|
DWORD dwMask;
|
|
} HSEXTRACT, * PHSEXTRACT;
|
|
|
|
/***************************************************************************\
|
|
* Macros
|
|
\***************************************************************************/
|
|
#define HSCSZSIZE(sz) sizeof(sz)-1
|
|
#define HSLABEL(sz) HSCSZSIZE(#sz), #sz
|
|
|
|
|
|
/***************************************************************************\
|
|
* Globals
|
|
\***************************************************************************/
|
|
/*
|
|
* Files
|
|
*/
|
|
extern char * gpszInputFile;
|
|
extern HANDLE ghfileInput;
|
|
extern char * gpszPublicFile;
|
|
extern HANDLE ghfilePublic;
|
|
extern char * gpszInternalFile;
|
|
extern HANDLE ghfileInternal;
|
|
|
|
extern PHSEXTRACT gpExtractFile;
|
|
|
|
/*
|
|
* Map file
|
|
*/
|
|
extern HANDLE ghmap;
|
|
extern char * gpmapStart;
|
|
extern char * gpmapEnd;
|
|
|
|
/*
|
|
* Switches et al
|
|
*/
|
|
extern DWORD gdwOptions;
|
|
extern DWORD gdwVersion;
|
|
extern char gszVerifyVersionStr [];
|
|
extern DWORD gdwFilterMask;
|
|
extern char * gpszTagMarker;
|
|
extern DWORD gdwTagMarkerSize;
|
|
extern char gszMarkerCharAndEOL [];
|
|
|
|
extern DWORD gdwLineNumber;
|
|
|
|
/*
|
|
* Compatibility tags.
|
|
* Specify size so sizeof operator can be used to calculate strlen at
|
|
* compile time
|
|
*/
|
|
extern char gsz35 [3];
|
|
extern char gszCairo [6];
|
|
extern char gszChicago [8];
|
|
extern char gszNashville [10];
|
|
extern char gszNT [3];
|
|
extern char gszSur [4];
|
|
extern char gszSurplus [8];
|
|
extern char gszWin40 [6];
|
|
extern char gszWin40a [7];
|
|
|
|
/*
|
|
* Tag labels
|
|
* Specify size so sizeof operator can be used to calculate table size at
|
|
* compile time
|
|
*/
|
|
extern HSTAG ghstPredefined [16];
|
|
|
|
extern PHSTAG gphst;
|
|
extern DWORD gdwLastTagMask;
|
|
|
|
/*
|
|
* Blocks stack
|
|
*/
|
|
#define HSBSTACKSIZE 20
|
|
extern HSBLOCK ghsbStack [HSBSTACKSIZE];
|
|
#define HSBSTACKLIMIT (ghsbStack + HSBSTACKSIZE - 1)
|
|
extern PHSBLOCK gphsbStackTop;
|
|
|
|
/***************************************************************************\
|
|
* Funtion Prototypes
|
|
\***************************************************************************/
|
|
// hsfile.c
|
|
BOOL hsCloseWorkingFiles (void);
|
|
BOOL hsOpenWorkingFiles (void);
|
|
BOOL hsWriteHeaderFiles (char * pmap, DWORD dwSize, DWORD dwFlags);
|
|
|
|
// hsparse.c
|
|
PHSTAG hsFindTagInList (PHSTAG phst, char * pmapTag, DWORD dwTagSize);
|
|
BOOL hsSplit (void);
|
|
|
|
// hsutil.c
|
|
void __cdecl hsLogMsg(DWORD dwFlags, char *pszfmt, ...);
|
|
|
|
/***************************************************************************\
|
|
* Inline functions
|
|
\***************************************************************************/
|
|
__inline BOOL hsVersionFromString (char * pString, DWORD dwSize, DWORD * pdwVersion)
|
|
{
|
|
return sscanf(pString, "%x", pdwVersion)
|
|
&& (dwSize == (DWORD)sprintf(gszVerifyVersionStr, "%x", *pdwVersion));
|
|
}
|
|
|