Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

1324 lines
35 KiB

/************************************************/
/* Common Library Component public include file */
/************************************************/
#if !defined (COMSTF_INCLUDED )
#define COMSTF_INCLUDED
#include <windows.h>
// avoid warnings on every file from including stdlib.h
#if defined(min)
#undef min
#undef max
#endif /* min */
#include <port1632.h>
#define _dt_begin_ignore
#define _dt_end_ignore
_dt_begin_ignore
#define _dt_public
#define _dt_private
#define _dt_hidden
#define _dt_system(s)
#define _dt_subsystem(s)
_dt_end_ignore
#include <ids.h>
_dt_system(Common Library)
/*
** Global variable macro for DLL portability
*/
_dt_public
#define GLOBAL(x) (x)
/* standard datatypes
*/
_dt_public typedef BYTE * PB;
_dt_public typedef unsigned CB;
_dt_public typedef LONG * PLONG_STF;
/* BOOLean datatype
*/
#define fFalse ((BOOL)0)
#define fTrue ((BOOL)1)
/* To avoid compiler warnings for unused parameters
*/
#define Unused(x) (x)=(x)
/* If new GRCs are added, they should as well be handled
in EercErrorHandler() in ERROR1.C */
/*
** General Return Code datatype
*/
typedef USHORT GRC;
#define grcFirst ((GRC)0)
#define grcLast ((GRC)57)
#define grcOkay ((GRC)0)
#define grcNotOkay ((GRC)1)
#define grcOutOfMemory ((GRC)2)
#define grcInvalidStruct ((GRC)3)
#define grcOpenFileErr ((GRC)4)
#define grcCreateFileErr ((GRC)5)
#define grcReadFileErr ((GRC)6)
#define grcWriteFileErr ((GRC)7)
#define grcRemoveFileErr ((GRC)8)
#define grcRenameFileErr ((GRC)9)
#define grcReadDiskErr ((GRC)10)
#define grcCreateDirErr ((GRC)11)
#define grcRemoveDirErr ((GRC)12)
#define grcBadINF ((GRC)13)
#define grcINFStartNonSection ((GRC)14)
#define grcINFBadSectionLabel ((GRC)15)
#define grcINFBadLine ((GRC)16)
#define grcINFBadKey ((GRC)17)
#define grcINFContainsZeros ((GRC)18)
#define grcTooManyINFSections ((GRC)19)
#define grcCloseFileErr ((GRC)20)
#define grcChangeDirErr ((GRC)21)
#define grcINFSrcDescrSect ((GRC)22)
#define grcTooManyINFKeys ((GRC)23)
#define grcWriteInf ((GRC)24)
#define grcInvalidPoer ((GRC)25)
#define grcINFMissingLine ((GRC)26)
#define grcINFBadFDLine ((GRC)27)
#define grcINFBadRSLine ((GRC)28)
#define grcBadInstallLine ((GRC)29)
#define grcMissingDidErr ((GRC)30)
#define grcInvalidPathErr ((GRC)31)
#define grcWriteIniValueErr ((GRC)32)
#define grcReplaceIniValueErr ((GRC)33)
#define grcIniValueTooLongErr ((GRC)34)
#define grcDDEInitErr ((GRC)35)
#define grcDDEExecErr ((GRC)36)
#define grcBadWinExeFileFormatErr ((GRC)37)
#define grcResourceTooLongErr ((GRC)38)
#define grcMissingSysIniSectionErr ((GRC)39)
#define grcDecompGenericErr ((GRC)40)
#define grcDecompUnknownAlgErr ((GRC)41)
#define grcDecompBadHeaderErr ((GRC)42)
#define grcReadFile2Err ((GRC)43)
#define grcWriteFile2Err ((GRC)44)
#define grcWriteInf2Err ((GRC)45)
#define grcMissingResourceErr ((GRC)46)
#define grcLibraryLoadErr ((GRC)47)
#define grcBadLibEntry ((GRC)48)
#define grcApplet ((GRC)49)
#define grcExternal ((GRC)50)
#define grcSpawn ((GRC)51)
#define grcDiskFull ((GRC)52)
#define grcDDEAddItem ((GRC)53)
#define grcDDERemoveItem ((GRC)54)
#define grcINFMissingSection ((GRC)55)
#define grcRunTimeParseErr ((GRC)56)
#define grcOpenSameFileErr ((GRC)57)
/**************************************/
/* common library function prototypes */
/**************************************/
_dt_subsystem(String Handling)
/* CHaracter Physical representation datatype
*/
_dt_public typedef BYTE CHP;
_dt_public typedef CHP * PCHP;
_dt_public typedef CB CCHP;
_dt_public
#define CbFromCchp(cchp) ((CB)(cchp))
/* CHaracter Logical representation datatype
*/
_dt_public typedef CHP CHL;
_dt_public typedef CHL * PCHL;
_dt_public typedef PCHL * PPCHL;
_dt_public typedef CB CCHL;
_dt_public typedef CB ICHL;
_dt_hidden
#define cbFullPathMax ((CB)(MAX_PATH-1))
_dt_hidden
#define cchlFullPathMax ((CCHL)(MAX_PATH-1))
_dt_hidden
#define cchlFullDirMax cchlFullPathMax
_dt_hidden
#define cchpFullPathMax ((CCHP)(MAX_PATH-1))
_dt_public
#define cbFullPathBuf ((CB)(cbFullPathMax + 1))
_dt_public
#define cchlFullPathBuf ((CCHL)(cchlFullPathMax + 1))
_dt_public
#define cchpFullPathBuf ((CCHP)(cchpFullPathMax + 1))
/* String Zero terminated datatype
*/
_dt_public typedef PCHL SZ;
_dt_hidden
#define PSZ PPSZ
_dt_public typedef PPCHL PSZ;
_dt_public typedef PPCHL RGSZ;
/* Comparison Return Code datatype
*/
_dt_public typedef INT CRC;
_dt_public
#define crcError ((CRC)(-2))
_dt_public
#define crcEqual ((CRC)0)
_dt_public
#define crcFirstHigher ((CRC)1)
_dt_public
#define crcSecondHigher ((CRC)(-1))
/* String manipulation routines */
extern SZ APIENTRY SzDupl(SZ);
extern CRC APIENTRY CrcStringCompare(SZ, SZ);
extern CRC APIENTRY CrcStringCompareI(SZ, SZ);
extern SZ APIENTRY SzLastChar(SZ);
/*
** Purpose:
** Advances a string pointer to the beginning of the next valid
** character. This may include skipping a double-byte character.
** Arguments:
** sz: the string pointer to advance. It can be NULL or empty, or else
** it must point at the beginning of a valid character.
** Returns:
** NULL if sz was NULL.
** sz unchanged if it was an empty string (*sz == '\0').
** sz advanced past the current character and to the beginning of the
** next valid character.
*/
_dt_public
#define SzNextChar(sz) ((SZ)AnsiNext(sz))
/*
** Purpose:
** Retreats a string pointer to the beginning of the previous valid
** character. This may include skipping a double-byte character.
** Arguments:
** szStart: string pointer to the beginning of a valid character that
** equals or preceeds the character szCur.
** szCur: string pointer to retreat. It can be NULL or empty, or
** can point to any byte in a valid character.
** Returns:
** NULL if szCur was NULL.
** sz unchanged if szStart was NULL or if szCur equaled szStart.
** sz retreated past the current character and to the beginning of the
** previous valid character.
*/
_dt_public
#define SzPrevChar(szStart, szCur) ((SZ)AnsiPrev(szStart,szCur))
/*
** Purpose:
** Copies a string from one buffer to another.
** Arguments:
** szDst: string pointer to destination buffer. This can be NULL or
** else it must contain enough storage to copy szSrc with its
** terminating zero character.
** szSrc: string pointer to source buffer. This can be NULL or else
** must point to a zero terminated string (can be empty).
** Returns:
** NULL if either szDst or szSrc is NULL.
** szDst signifying the operation succeeded.
*/
_dt_public
#define SzStrCopy(szDst, szSrc) ((SZ)lstrcpy((LPSTR)szDst,(LPSTR)szSrc))
/*
** Purpose:
** Appends a string from one buffer to another.
** Arguments:
** szDst: string pointer to destination buffer. This can be NULL or
** else it must contain a zero terminated string (can be empty)
** and enough storage to append szSrc with its terminating zero
** character.
** szSrc: string pointer to source buffer. This can be NULL or else
** must point to a zero terminated string (can be empty).
** Returns:
** NULL if either szDst or szSrc is NULL.
** szDst signifying the operation succeeded.
*/
_dt_public
#define SzStrCat(szDst, szSrc) ((SZ)lstrcat((LPSTR)szDst,(LPSTR)szSrc))
/*
** Purpose:
** Calculates the number of Physical Characters that a string occupies
** (not including the terminating zero character).
** Arguments:
** sz: string whose length is to be calculated.
** Returns:
** 0 if sz was NULL.
** The number of Physical Characters from the beginning of the string
** to its terminating zero character.
*/
_dt_public
#define CchpStrLen(sz) ((CCHP)CbStrLen(sz))
/*
** Purpose:
** Calculates the number of Logical Characters that a string occupies
** (not including the terminating zero character).
** Arguments:
** sz: string whose length is to be calculated.
** Returns:
** 0 if sz was NULL.
** The number of Logical Characters from the beginning of the string
** to its terminating zero character.
*/
_dt_public
#define CchlStrLen(sz) ((CCHL)CbStrLen(sz))
/*
** Purpose:
** Calculates the number of bytes that a string occupies (not including
** the terminating zero character).
** Arguments:
** sz: string whose length is to be calculated.
** Returns:
** 0 if sz was NULL.
** The number of bytes from the beginning of the string to its
** terminating zero character.
*/
_dt_public
#define CbStrLen(sz) ((CB)lstrlen((LPSTR)sz))
/*
** Purpose:
** Determines whether the current character is a single Physical
** Character.
** Arguments:
** sz: string pointer which can be NULL, empty, or pointing to the
** beginning of a valid character.
** Returns:
** fFalse if sz is NULL or points to the beginning of a multiple
** Physical Character character.
** fTrue if sz is empty or points to the beginning of a single
** Physical Character character.
*/
_dt_public
#define FSingleByteCharSz(sz) ((BOOL)((sz)!=(SZ)NULL))
/*
** Purpose:
** Determines whether a character is an End-Of-Line character.
** Arguments:
** chp: Physical Character (eg a single byte Logical Character).
** Returns:
** fFalse if chp is not either a '\n' or a '\r' character.
** fTrue if chp is either a '\n' or a '\r' character.
*/
_dt_public
#define FEolChp(chp) ((BOOL)((chp) == '\n' || (chp) == '\r'))
/*
** Purpose:
** Determines whether a character is whitespace.
** Arguments:
** chp: Physical Character (eg a single byte Logical Character).
** Returns:
** fFalse if chp is not either a space or a tab character.
** fTrue if chp is either a space or a tab character.
*/
_dt_public
#define FWhiteSpaceChp(chp) ((BOOL)((chp) == ' ' || (chp) == '\t'))
/*
** Purpose:
** Converts a zero-terminated string to upper case.
** Arguments:
** sz: the string to convert to upper case. sz must be non-NULL though
** it can be empty.
** Returns:
** A pointer to the converted string.
*/
_dt_public
#define SzStrUpper(sz) (SZ)(AnsiUpper((LPSTR)(sz)))
/*
** Purpose:
** Converts a zero-terminated string to lower case.
** Arguments:
** sz: the string to convert to lower case. sz must be non-NULL though
** it can be empty.
** Returns:
** A pointer to the converted string.
*/
_dt_public
#define SzStrLower(sz) (SZ)(AnsiLower((LPSTR)(sz)))
_dt_subsystem(Memory Handling)
#define cbSymbolMax (64*1024)
#define cbAllocMax (65520*5)
#define cbIntStrMax 16
/* Memory Handling routines */
#if defined(DBG) && defined(MEMORY_CHECK)
PVOID MyMalloc(unsigned, char *, int) malloc
PVOID MyRealloc(PVOID,unsigned, char *, int);
VOID MyFree(PVOID, char *, int);
VOID MemCheck(VOID);
VOID MemDump(VOID);
#define PbAlloc(cb) ((PB)MyMalloc((unsigned)(cb), __FILE__, __LINE__ ))
#define PbRealloc(pb,cbn,cbo) ((PB)MyRealloc(pb,(unsigned)(cbn), __FILE__, __LINE__))
#define FFree(pb,cb) (MyFree(pb, __FILE__, __LINE__),TRUE)
#define MemChk() MemCheck()
#else // ! (DBG && MEMORY_CHECK)
PVOID MyMalloc(unsigned);
PVOID MyRealloc(PVOID,unsigned);
VOID MyFree(PVOID);
#define PbAlloc(cb) ((PB)MyMalloc((unsigned)(cb)))
#define PbRealloc(pb,cbn,cbo) ((PB)MyRealloc(pb,(unsigned)(cbn)))
#define FFree(pb,cb) (MyFree(pb),TRUE)
#define MemChk()
#endif // DBG && MEMORY_CHECK
/*
** Purpose:
** Frees the memory used by an sz. This assumes the terminating
** zero occupies the final byte of the allocated buffer.
** Arguments:
** sz: the buffer to free. this must be non-NULL though it can point
** at an empty string.
** Returns:
** fTrue if the Free() operation succeeds.
** fFalse if the Free() operation fails.
*/
_dt_public
#define FFreeSz(sz) FFree((PB)(sz),CbStrLen(sz)+1)
/*
** Purpose:
** Shrinks a buffer to exactly fit a string.
** Arguments:
** sz: the string for which the buffer should shrink to. sz must be
** non-NULL though it can be empty.
** cb: the size in bytes for the buffer that was originally allocated.
** cb must be greater than or equal to CbStrLen(sz) + 1.
** Returns:
** A pointer to the original string if the Realloc() operation succeeds.
** NULL if the Realloc() operation fails.
*/
_dt_public
#define SzReallocSz(sz,cb) (SZ)(PbRealloc((PB)(sz),CbStrLen(sz)+1,cb))
#ifdef MEM_STATS
/* Memory Stats Flags */
_dt_private
#define wModeMemStatNone 0x0000
_dt_private
#define wModeMemStatAll 0xFFFF
_dt_private
#define wModeMemStatAlloc 0x0001
_dt_private
#define wModeMemStatFree 0x0002
_dt_private
#define wModeMemStatRealloc 0x0004
_dt_private
#define wModeMemStatSysAlloc 0x0008
_dt_private
#define wModeMemStatFLAlloc 0x0010
_dt_private
#define wModeMemStatFLFree 0x0020
_dt_private
#define wModeMemStatFLRealloc 0x0040
_dt_private
#define wModeMemStatHistAlloc 0x0080
_dt_private
#define wModeMemStatHistFree 0x0100
_dt_private
#define wModeMemStatGarbage 0x0200
extern BOOL APIENTRY FOpenMemStats(SZ, WORD);
extern BOOL APIENTRY FCloseMemStats(void);
#endif /* MEM_STATS */
_dt_subsystem(File Handling)
/* Long File Address datatype
*/
_dt_public typedef unsigned long LFA;
_dt_public
#define lfaSeekError ((LFA)-1)
/*
** File Handle structure
** Fields:
** iDosfh: DOS file handle.
** ofstruct: OFSTRUCT used when the file was opened.
*/
_dt_public typedef struct _fh
{
INT iDosfh;
OFSTRUCT ofstruct;
} FH;
/* File Handle datatype
*/
_dt_public typedef FH * PFH;
/* Open File Mode datatype
*/
_dt_public typedef USHORT OFM;
_dt_public
#define ofmExistRead ((OFM)OF_EXIST | OF_READ)
_dt_public
#define ofmExistReadWrite ((OFM)OF_EXIST | OF_READWRITE)
// _dt_public
// #define ofmRead ((OFM)OF_READ | OF_SHARE_DENY_WRITE)
_dt_public
#define ofmRead ((OFM)OF_READ)
_dt_public
#define ofmWrite ((OFM)OF_WRITE | OF_SHARE_EXCLUSIVE)
_dt_public
#define ofmReadWrite ((OFM)OF_READWRITE | OF_SHARE_EXCLUSIVE)
_dt_public
#define ofmCreate ((OFM)OF_CREATE | OF_SHARE_EXCLUSIVE)
/* Seek File Mode datatype
*/
_dt_public typedef WORD SFM;
_dt_public
#define sfmSet ((SFM)0)
_dt_public
#define sfmCur ((SFM)1)
_dt_public
#define sfmEnd ((SFM)2)
/* File handling routines */
extern PFH APIENTRY PfhOpenFile(SZ, OFM);
extern BOOL APIENTRY FCloseFile(PFH);
extern CB APIENTRY CbReadFile(PFH, PB, CB);
extern CB APIENTRY CbWriteFile(PFH, PB, CB);
extern LFA APIENTRY LfaSeekFile(PFH, LONG, SFM);
extern BOOL APIENTRY FEndOfFile(PFH);
extern BOOL APIENTRY FRemoveFile(SZ);
extern BOOL APIENTRY FWriteSzToFile(PFH, SZ);
extern BOOL APIENTRY FFileExists(SZ);
extern SZ APIENTRY szGetFileName(SZ szPath);
extern VOID APIENTRY FreePfh(PFH pfh);
_dt_subsystem(Path Handling)
/* Path manipulation routines */
BOOL FMakeFATPathFromPieces(SZ, SZ, SZ, SZ, CCHP);
BOOL FMakeFATPathFromDirAndSubPath(SZ, SZ, SZ, CCHP);
LPSTR LocateFilenameInFullPathSpec(LPSTR);
#define FValidFATDir(sz) fTrue
#define FValidFATPath(sz) fTrue
#define CchlValidFATSubPath(sz) CbStrLen(sz) // no checking for WIN32
/*
** Purpose:
** Determines if a path is a valid FAT directory.
** Arguments:
** szDir: the directory string to check.
** Returns:
** fTrue if the szDir is a valid FAT directory.
** fFalse if the szDir is an invalid FAT directory.
*/
_dt_public
#define FValidDir(szDir) FValidFATDir(szDir)
/*
** Purpose:
** Determines if a string is a valid FAT SubPath (eg subdirs and filename).
** Arguments:
** szSubPath: the SubPath string to check.
** Returns:
** zero if the string is an invalid FAT subPath.
** non-zero count of characters in sz if it is a valid FAT subPath.
*/
_dt_public
#define CchlValidSubPath(szSubPath) CchlValidFATSubPath(szSubPath)
/*
** Purpose:
** Determines if a path is a valid FAT path.
** Arguments:
** szPath: the path to check.
** Returns:
** fTrue if the szPath is a valid FAT path.
** fFalse if the szPath is an invalid FAT path.
*/
_dt_public
#define FValidPath(szPath) FValidFATPath(szPath)
/*
** Purpose:
** Creates a valid path from volume, path, and filename arguments
** if possible and stores it in a supplied buffer.
** Arguments:
** szVolume: string containing the volume.
** szPath: string containing the path.
** szFile: string containing the filename.
** szBuf: the buffer in which to store the newly created path.
** cchpBufMax: the maximum number of physical characters (including the
** terminating zero) that can be stored in the buffer.
** Returns:
** fTrue if a valid FAT path can be created and stored in szBuf.
** fFalse if szVolume is NULL or invalid (first character must be in the
** 'a' to 'z' or 'A' to 'Z', and the second character must be either
** a ':' or a terminating zero), if szPath is NULL or invalid (it must
** start with a '\\' and conform to 8.3 format), if szFile is NULL,
** empty or invalid (first character cannot be a '\\' and it must
** conform to 8.3 format), if szBuf is NULL, or if cchpBufMax is not
** large enough to hold the resultant path.
*/
_dt_public
#define FMakePathFromPieces(szVolume, szPath, szFile, szBuffer, cchpBufMax) \
FMakeFATPathFromPieces(szVolume,szPath,szFile,szBuffer,cchpBufMax)
/*
** Purpose:
** Creates a valid path from subpath, and filename arguments if possible
** and stores it in a supplied buffer.
** Arguments:
** szDir: string containing the volume and subdirs.
** szSubPath: string containing subdirs and the filename.
** szBuf: the buffer in which to store the newly created path.
** cchpBufMax: the maximum number of physical characters (including the
** terminating zero) that can be stored in the buffer.
** Returns:
** fTrue if a valid FAT path can be created and stored in szBuf.
** fFalse if szDir is NULL or invalid (first character must be in the
** 'a' to 'z' or 'A' to 'Z', the second character must be either
** a ':' or a terminating zero, and the third character must be
** a '\\' and the rest must conform to 8.3 format), if szSubPath is
** NULL, empty or invalid (first character cannot be a '\\' and it must
** conform to 8.3 format), if szBuf is NULL, or if cchpBufMax is not
** large enough to hold the resultant path.
*/
_dt_public
#define FMakePathFromDirAndSubPath(szDir, szSubPath, szBuffer, cchpBufMax) \
FMakeFATPathFromDirAndSubPath(szDir,szSubPath,szBuffer,cchpBufMax)
#define AssertDataSeg()
#if DBG
#define Assert(f) \
((f) ? (void)0 : (void)AssertSzUs(__FILE__,__LINE__))
#define AssertRet(f, retVal) \
{if (!(f)) {AssertSzUs(__FILE__,__LINE__); return(retVal);}}
#define EvalAssert(f) \
((f) ? (void)0 : (void)AssertSzUs(__FILE__,__LINE__))
#define EvalAssertRet(f, retVal) \
{if (!(f)) {AssertSzUs(__FILE__,__LINE__); return(retVal);}}
#define PreCondition(f, retVal) \
{if (!(f)) {PreCondSzUs(__FILE__,__LINE__); return(retVal);}}
#define ChkArg(f, iArg, retVal) \
{if (!(f)) {BadParamUs(iArg, __FILE__, __LINE__); return(retVal);}}
#else
#define Assert(f) ((void)0)
#define AssertRet(f, retVal) ((void)0)
#define EvalAssert(f) ((void)(f))
#define EvalAssertRet(f, retVal) ((void)(f))
#define PreCondition(f, retVal) ((void)0)
#define ChkArg(f, iArg, retVal) ((void)0)
#endif
/*
** Purpose:
** Generates a task modal message box.
** Arguments:
** szTitle: title for message box.
** szText: text for message box.
** Returns:
** none
*/
_dt_private
#define MessBoxSzSz(szTitle, szText) \
MessageBox((HWND)NULL, (LPSTR)szText, (LPSTR)szTitle, \
MB_TASKMODAL | MB_ICONHAND | MB_OK)
#define AssertSzUs(x, y) TRUE
#define PreCondSzUs(x, y) TRUE
#define BadParamUs(x, y, z) TRUE
_dt_subsystem(INF Handling)
/*
** Inf Data Block structure
**
** Fields:
** pidbNext: next IDB in linked list.
** pchpBuffer: character buffer.
** cchpBuffer: number of useful characters in pchpBuffer.
** cchpAllocated: number of characters actually allocated with
** pchpBuffer. May be zero.
*/
_dt_public typedef struct _idb
{
struct _idb * pidbNext;
PCHP pchpBuffer;
CCHP cchpBuffer;
CCHP cchpAllocated;
} IDB;
/* Inf Data Block datatypes
*/
_dt_public typedef IDB * PIDB;
_dt_public typedef PIDB * PPIDB;
/*
The following equate is used because of a situation like
"abcd"+
"efgh"
When parsed, this will be "abcd""efgh" -- is this two strings or
one string with a double quote in the middle? If it's the latter,
we'll actually store "abcd.efgh" where . is DOUBLE_QUOTE.
*/
#define DOUBLE_QUOTE '\001'
#define INFLINE_SECTION 0x01
#define INFLINE_KEY 0x02
/* INF File Handling routines */
GRC APIENTRY GrcOpenInf(SZ IniFileName, PVOID pInfTempInfo);
BOOL APIENTRY FFreeInf(void);
UINT APIENTRY CKeysFromInfSection(SZ Section, BOOL IncludeAllLines);
BOOL APIENTRY FKeyInInfLine(INT Line);
RGSZ APIENTRY RgszFromInfLineFields(INT Line,UINT StartField,UINT NumFields);
BOOL APIENTRY FFreeRgsz(RGSZ);
UINT APIENTRY CFieldsInInfLine(INT Line);
INT APIENTRY FindInfSectionLine(SZ Section);
INT APIENTRY FindNthLineFromInfSection(SZ Section,UINT n);
INT APIENTRY FindLineFromInfSectionKey(SZ Section,SZ Key);
INT APIENTRY FindNextLineFromInf(INT Line);
SZ APIENTRY SzGetNthFieldFromInfLine(INT Line,UINT n);
SZ APIENTRY SzGetNthFieldFromInfSectionKey(SZ Section,SZ Key,UINT n);
BOOL APIENTRY FUpdateInfSectionUsingSymTab(SZ);
SZ APIENTRY InterpretField(SZ);
#define RgszFromInfScriptLine(Line,NumFields) \
RgszFromInfLineFields(Line,1,NumFields)
#define FindFirstLineFromInfSection(Section) FindNthLineFromInfSection(Section,1)
/*
** Option-Element Flags datatype for SFD
*/
_dt_public typedef WORD OEF;
_dt_public
#define oefVital ((OEF)0x0001)
_dt_public
#define oefCopy ((OEF)0x0002)
_dt_public
#define oefUndo ((OEF)0x0004)
_dt_public
#define oefRoot ((OEF)0x0008)
_dt_public
#define oefDecompress ((OEF)0x0010)
_dt_public
#define oefTimeStamp ((OEF)0x0020)
_dt_public
#define oefReadOnly ((OEF)0x0040)
_dt_public
#define oefBackup ((OEF)0x0080)
_dt_public
#define oefUpgradeOnly ((OEF)0x0100)
//
// The following oef means that the source file should not be deleted
// after it is copied, even if the source is the DOS setup local source.
// (Files coming from anywhere below that directory are usually deleted
// after they are copied).
//
#define oefNoDeleteSource ((OEF)0x0200)
_dt_public
#define oefNone ((OEF)0x0000)
_dt_public
#define oefAll ((OEF)0xFFFF)
/*
** Copy-Time Unit datatype for SFD
*/
_dt_public typedef WORD CTU;
/*
** OverWrite Mode datatype for SFD
*/
_dt_public typedef WORD OWM;
_dt_public
#define owmNever ((OWM)0x0001)
_dt_public
#define owmAlways ((OWM)0x0002)
_dt_public
#define owmUnprotected ((OWM)0x0004)
_dt_public
#define owmOlder ((OWM)0x0008)
_dt_public
#define owmVerifySourceOlder ((OWM)0x0010)
/*
** Option-Element Record for SFD
*/
_dt_public typedef struct _oer
{
OEF oef;
CTU ctuCopyTime;
OWM owm;
LONG lSize;
SZ szRename;
SZ szAppend;
SZ szBackup;
SZ szDescription;
ULONG ulVerMS;
ULONG ulVerLS;
SZ szDate;
SZ szDest;
} OER;
/*
** Option-Element Record datatype for SFD
*/
_dt_public typedef OER * POER;
_dt_public typedef POER * PPOER;
_dt_public
#define poerNull ((POER)NULL)
/*
** Disk ID datatype for SFD
*/
_dt_public typedef WORD DID;
_dt_public
#define didMin 1
_dt_public
#define didMost 999
/*
** Section-File Description structure
** Fields:
*/
_dt_public typedef struct _sfd
{
DID did;
UINT InfId;
SZ szFile;
OER oer;
} SFD;
/*
** Section-File Description datatype
*/
_dt_public typedef SFD * PSFD;
_dt_public typedef PSFD * PPSFD;
_dt_public
#define psfdNull ((PSFD)NULL)
extern POER APIENTRY PoerAlloc(VOID);
extern BOOL APIENTRY FFreePoer(POER);
extern BOOL APIENTRY FPrintPoer(PFH, POER);
extern BOOL APIENTRY FValidPoer(POER);
extern PSFD APIENTRY PsfdAlloc(VOID);
extern BOOL APIENTRY FFreePsfd(PSFD);
extern GRC APIENTRY GrcGetSectionFileLine(INT, PPSFD, POER);
extern BOOL APIENTRY FPrintPsfd(PFH, PSFD);
#if DBG
extern BOOL APIENTRY FValidPsfd(PSFD);
#endif
extern BOOL APIENTRY FValidOerDate(SZ);
extern BOOL APIENTRY FParseVersion(SZ, PULONG, PULONG);
extern BOOL APIENTRY FListIncludeStatementLine(INT Line);
extern GRC APIENTRY GrcGetListIncludeSectionLine(INT, PSZ, PSZ);
_dt_subsystem(INF Media Prompting)
/*
** Source Description List Element data structure
*/
_dt_public typedef struct _sdle
{
struct _sdle * psdleNext;
DID did; // disk id as specified in the inf
DID didGlobal; // a universal id across infs
SZ szLabel;
SZ szTagFile;
SZ szNetPath;
} SDLE;
_dt_public typedef SDLE * PSDLE;
_dt_public typedef PSDLE * PPSDLE;
extern PSDLE APIENTRY PsdleAlloc(VOID);
extern BOOL APIENTRY FFreePsdle(PSDLE);
extern GRC APIENTRY GrcFillSrcDescrListFromInf(VOID);
_dt_subsystem(List Building)
/*
** Copy List Node data structure
*/
_dt_public typedef struct _cln
{
SZ szSrcDir;
SZ szDstDir;
PSFD psfd;
struct _cln * pclnNext;
} CLN;
_dt_public typedef CLN * PCLN;
_dt_public typedef PCLN * PPCLN;
_dt_public typedef PPCLN * PPPCLN;
/*
** Section Files Operation data structure
** REVIEW -- not really used
*/
_dt_public typedef WORD SFO;
_dt_public
#define sfoCopy 1
_dt_public
#define sfoBackup 2
_dt_public
#define sfoRemove 3
/* in LIST.C */
extern PCLN pclnHead;
extern PPCLN ppclnTail;
extern GRC APIENTRY GrcFillPoerFromSymTab(POER);
extern BOOL APIENTRY FSetPoerToEmpty(POER);
extern GRC APIENTRY GrcAddSectionFilesToCopyList(SZ, SZ, SZ);
extern GRC APIENTRY GrcAddSectionKeyFileToCopyList(SZ, SZ, SZ, SZ);
extern GRC APIENTRY GrcAddNthSectionFileToCopyList(SZ, UINT, SZ, SZ);
extern GRC APIENTRY GrcAddSectionFilesToCList(SFO, SZ, SZ, SZ, SZ, POER);
extern GRC APIENTRY GrcAddLineToCList(INT, SFO, SZ, SZ, POER);
extern GRC APIENTRY GrcAddPsfdToCList(SZ, SZ, PSFD);
extern PCLN APIENTRY PclnAlloc(VOID);
extern BOOL APIENTRY FFreePcln(PCLN);
extern BOOL APIENTRY FPrintPcln(PFH, PCLN);
#if DBG
extern BOOL APIENTRY FValidPcln(PCLN);
#endif
/* Symbol Table constants */
#define cchpSymMax ((CCHP)255)
#define cchpSymBuf (cchpSymMax + 1)
/* Symbol Table routines */
extern BOOL APIENTRY FAddSymbolValueToSymTab(SZ, SZ);
extern GRC APIENTRY GrcAddSymsFromInfSection(SZ);
/* Message Box Routine */
extern int APIENTRY ExtMessageBox(HANDLE, HWND, WORD, WORD, WORD);
/*
** Purpose:
** Determines whether a symbol is defined in the symbol table.
** Arguments:
** szSymbol: symbol to search for. szSymbol must be non-NULL, non-empty,
** and start with a non-whitespace character.
** Returns:
** fTrue if szSymbol is defined in the symbol table (even if the associated
** is an empty string).
** fFalse if szSymbol is not defined in the symbol table.
*/
_dt_public
#define FSymbolDefinedInSymTab(szSymbol) \
((BOOL)(SzFindSymbolValueInSymTab(szSymbol)!=(SZ)NULL))
extern SZ APIENTRY SzFindSymbolValueInSymTab(SZ);
extern BOOL APIENTRY FRemoveSymbolFromSymTab(SZ);
extern RGSZ APIENTRY RgszFromSzListValue(SZ);
extern SZ APIENTRY SzListValueFromRgsz(RGSZ);
extern BOOL APIENTRY FFreeInfTempInfo(PVOID);
extern BOOL APIENTRY FCheckSymTabIntegrity(VOID);
extern BOOL APIENTRY FDumpSymTabToFile(PFH);
extern SZ APIENTRY SzGetSubstitutedValue(SZ);
extern SZ APIENTRY SzProcessSzForSyms(HWND, SZ);
_dt_subsystem(Parse Table)
/* String Parse Code
*/
_dt_public typedef unsigned SPC;
_dt_public typedef SPC * PSPC;
/*
** String-Code Pair structure
** Fields:
** sz: string.
** spc: String Parse Code to associate with string.
*/
_dt_public typedef struct _scp
{
SZ sz;
SPC spc;
} SCP;
/* String-Code Pair datatype
*/
_dt_public typedef SCP * PSCP;
/* String Parse Table datatypes
*/
///////////////////////////////////
// _dt_public typedef SCP SPT;
///////////////////////////////////
_dt_public typedef struct _pspt
{
PSCP pscpSorted ; // Generated for binary search
long cItems ; // Number of items in table
PSCP pscpBase ; // Original as given to PsptInitParsingTable()
SPC spcDelim ; // Table delimiter entry
} SPT ;
_dt_public typedef SPT * PSPT;
/* Symbol Table routines */
extern PSPT APIENTRY PsptInitParsingTable(PSCP);
extern SPC APIENTRY SpcParseString(PSPT, SZ);
extern BOOL APIENTRY FDestroyParsingTable(PSPT);
/* Flow handling routines */
/* external program, library */
BOOL APIENTRY FParseLoadLibrary(INT Line, UINT *pcFields);
BOOL APIENTRY FParseFreeLibrary(INT Line, UINT *pcFields);
BOOL APIENTRY FParseLibraryProcedure(INT Line,UINT *pcFields);
BOOL APIENTRY FParseRunExternalProgram(INT Line,UINT *pcFields);
BOOL APIENTRY FParseInvokeApplet(INT Line, UINT *pcFields);
BOOL APIENTRY FParseStartDetachedProcess(INT Line, UINT *pcFields);
/* registry */
BOOL APIENTRY FParseRegistrySection(INT Line, UINT *pcFields, SPC spc);
BOOL APIENTRY FParseCreateRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseOpenRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseFlushRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseCloseRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseDeleteRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseDeleteRegTree(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseEnumRegKey(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseSetRegValue(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseGetRegValue(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseDeleteRegValue(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseEnumRegValue(INT Line, UINT *pcFields, SZ szHandle);
BOOL APIENTRY FParseAddFileToDeleteList(INT Line, UINT *pcFields);
BOOL APIENTRY FParseWaitOnEvent(INT Line,UINT *pcFields);
BOOL APIENTRY FParseSignalEvent(INT Line,UINT *pcFields);
BOOL APIENTRY FParseSleep(INT Line, UINT *pcFields);
BOOL APIENTRY FParseFlushInf(INT Line, UINT *pcFields);
/*
** String Parse Codes for Flow Handling
*/
#define spcError 0
#define spcUnknown 1
#define spcSet 2
#define spcIfStr 3
#define spcIfStrI 4
#define spcIfInt 5
#define spcIfContains 6
#define spcIfContainsI 7
#define spcIfFirst spcIfStr
#define spcIfLast spcIfContainsI
#define spcEndIf 8
#define spcElse 9
#define spcElseIfStr 10
#define spcElseIfStrI 11
#define spcElseIfInt 12
#define spcElseIfContains 13
#define spcElseIfContainsI 14
#define spcEQ 15
#define spcNE 16
#define spcLT 17
#define spcLE 18
#define spcGT 19
#define spcGE 20
#define spcIn 21
#define spcNotIn 22
#define spcGoTo 23
#define spcForListDo 24
#define spcEndForListDo 25
#define spcSetSubst 26
#define spcSetSubsym 27
#define spcDebugMsg 28
#define spcHourglass 29
#define spcArrow 30
#define spcSetInstructionText 31
#define spcSetHelpFile 32
#define spcCreateRegKey 33
#define spcOpenRegKey 34
#define spcFlushRegKey 35
#define spcCloseRegKey 36
#define spcDeleteRegKey 37
#define spcDeleteRegTree 38
#define spcEnumRegKey 39
#define spcSetRegValue 40
#define spcGetRegValue 41
#define spcDeleteRegValue 42
#define spcEnumRegValue 43
#define spcSetAdd 50
#define spcSetSub 51
#define spcSetMul 52
#define spcSetDiv 53
#define spcGetDriveInPath 54
#define spcGetDirInPath 55
#define spcLoadLibrary 56
#define spcFreeLibrary 57
#define spcLibraryProcedure 58
#define spcRunExternalProgram 59
#define spcInvokeApplet 60
#define spcDebugOutput 61
#define spcSplitString 62
#define spcQueryListSize 63
#define spcSetOr 64
#define spcAddFileToDeleteList 65
#define spcInitRestoreDiskLog 66
#define spcStartDetachedProcess 67
#define spcWaitOnEvent 68
#define spcSignalEvent 69
#define spcSleep 70
#define spcSetHexToDec 71
#define spcSetDecToHex 72
#define spcFlushInf 73
extern PSPT psptFlow;
extern SCP rgscpFlow[];
extern BOOL APIENTRY FHandleFlowStatements(INT *, HWND, SZ, UINT *,RGSZ *);
extern BOOL APIENTRY FInitFlowPspt(VOID);
extern BOOL APIENTRY FDestroyFlowPspt(VOID);
_dt_subsystem(Error Handling)
/*
** Expanded Error Return Code
*/
_dt_public typedef unsigned EERC;
_dt_public
#define eercAbort ((EERC)0)
_dt_public
#define eercRetry ((EERC)1)
_dt_public
#define eercIgnore ((EERC)2)
#define EercErrorHandler(HWND, GRC, BOOL, x, y, z) TRUE
#define FHandleOOM(HWND) TRUE
extern BOOL APIENTRY FGetSilent(VOID);
extern BOOL APIENTRY FSetSilent(BOOL);
VOID SetSupportLibHandle(HANDLE Handle);
extern HCURSOR CurrentCursor;
//
// Utility functions for dealing with multisz's.
//
RGSZ
MultiSzToRgsz(
IN PVOID MultiSz
);
PCHAR
RgszToMultiSz(
IN RGSZ rgsz
);
BOOL AddFileToDeleteList(PCHAR Filename);
// floppy operations/repair diskette stuff
BOOL
InitializeFloppySup(
VOID
);
VOID
TerminateFloppySup(
VOID
);
BOOL
FormatFloppyDisk(
IN CHAR DriveLetter,
IN HWND hwndOwner,
OUT PBOOL Fatal
);
BOOL
CopyFloppyDisk(
IN CHAR DriveLetter,
IN HWND hwndOwner,
IN DWORD SourceDiskPromptId,
IN DWORD TargetDiskPromptId
);
UINT
__cdecl
xMsgBox(
HWND hwnd,
UINT CaptionResId,
UINT MessageResId,
UINT MsgBoxFlags,
...
);
#endif // COMSTF_INCLUDED