|
|
/***************************************************************************
** ** File: SetupKit.h ** Purpose: Toolkit types, defines, and prototypes. ** Notes: ** ****************************************************************************/
#ifndef SETUPKIT_H
#define SETUPKIT_H
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */ #endif
/*
** 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. */ #define CbStrLen(sz) ((CB)lstrlen(sz))
/*
** Purpose: ** Checks if the string is empty ** Arguments: ** sz: ** Returns: ** 0 if sz was NULL. ** 1 otherwise */ #define FEmptySz(sz) ((BOOL)((sz) == szNull || *(sz) == chEos))
#define FValidSz(sz) (!FEmptySz(sz))
/*
* CHaracter Physical representation datatype */ typedef BYTE CHP; /* CHaracter Physical */ typedef CHP * PCHP; /* Ptr to CHaracter Physical */ typedef CB CCHP; /* Count of CHaracter Physical */ typedef CCHP * PCCHP; /* Ptr to Count of CHaracter Physical */
#define pchpNull ((PCHP)NULL)
#define pcchpNull ((PCCHP)NULL)
#define CbFromCchp(cchp) ((CB)(cchp))
/*
* CHaracter Logical representation datatype */ typedef CHP CHL; /* CHaracter Logical */ typedef CHL * PCHL; /* Ptr to CHaracter Logical */ typedef PCHL * PPCHL; /* Ptr to Ptr to CHaracter Logical */ typedef CB CCHL; /* Count of CHaracter Logical */
#define pchlNull ((PCHL)NULL)
#define ppchlNull ((PPCHL)NULL)
#define cchpFullPathMax ((CCHP)(_MAX_PATH))
#define cchGrpNameMax 30 /* right for win31, WfW, WinNT */
#ifdef OLD
#define cchGrpNameMax ((CB)(LOWORD(GetVersion()) == 0x0003 ? 24 : 29))
#endif /* OLD */
/*
* Maximum size block that can be allocated (bytes). */ #define cbAllocMax ((CB)65520)
/*
* Path Verification Routines */
typedef UINT FPV; /* Flags for Path Validation */
#define fpvSub 0x0000 /* Must be subpath, cannot have Drive or UNC */
#define fpvUnc 0x0001 /* Validate UNC path, \\Node\share */
#define fpvDrive 0x0002 /* Validate Drive at start of path */
#define fpvFile 0x0004 /* Validate filename only, no subdirectories */
#define fpvDir 0x0010 /* Allow trailing directory separator */
#define fpvFat 0x0020 /* Restrict to only 8.3 FAT name, no LFNs */
#define fpvFull (fpvDrive | fpvUnc) /* Full path, with Drive or UNC */
#define fpvModule (fpvDrive | fpvUnc | fpvFile) /* Valid executable name */
/*
** Purpose: ** Checks the validity of a filepath or filename. ** Allowable filepath components are controlled by bit flags. ** Default behavior is to allow directories with filename. ** Leading backslash is not permitted in directory name. ** Arguments: ** szcPath: non-NULL string to validate ** fpvFlags: pathname options flags ** Returns: ** fTrue if szcPath is valid for requested type ** fFalse if invalid path ***************************************************************************/
BOOL PUBLIC FValidFilePath ( SZC szcPath, FPV fpvFlags );
#define FValidDir(szcDir) FValidFilePath(szcDir, fpvFull | fpvDir)
#define FValidPath(szcPath) FValidFilePath(szcPath, fpvFull)
#define FValidSubDir(szc) FValidFilePath(szc, fpvDir)
#define FValidSubPath(szc) FValidFilePath(szc, fpvSub)
#define FValidFATSubPath(szc) FValidFilePath(szc, fpvFat)
#define FValidFileName(szc) FValidFilePath(szc, fpvFile)
#define FValidDllFileName(szc) FValidFilePath(szc, fpvModule)
#define FValidDstDir(szcDir) FValidFilePath(szcDir, fpvDrive | fpvDir)
#define FValidInfSect(cszcSect) \
(FValidSz(cszcSect) && !strchr(cszcSect, ']'))
#define FValidIniFile(szcFile) \
(FValidPath(szcFile) \ || CrcStringCompareI(szcFile, "WIN.INI") == crcEqual)
/* String manipulation routines */
/*
** 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. */ #define SzNextChar(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. */ #define SzPrevChar(szStart, szCur) 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. */ #define SzStrCopy(szDst, szSrc) lstrcpy(szDst, 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. */ #define SzStrCat(szDst, szSrc) lstrcat(szDst, szSrc)
/*
** 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. */ /* REVIEW: define SzStrUpper(sz) (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. */ #define SzStrLower(sz) AnsiLower(sz)
/* Memory Handling routines */ extern PB WINAPI PbAlloc ( CB cb ); extern BOOL WINAPI FFree ( PB pb, CB cb ); extern PB WINAPI PbRealloc ( PB pb, CB cbNew, CB cbOld );
#define FHandleOOM() HandleOOM()
/*
** 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. */ #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. */ #define SzReallocSz(sz, cb) (SZ)(PbRealloc((PB)(sz), (CbStrLen(sz)+1), cb))
/*
* File Handle structure * Fields: * hFile: Win32 file handle. * iDosfh: Only used to avoid changing old source code, same as hFile * szPath: Full path used when the file was opened. */ typedef union _fh /* File Handle structure */ { INT iDosfh; /* temp until code converted */ HANDLE hFile; } FH;
/*
* File Handle datatype */ typedef FH * PFH; /* Ptr to File Handle structure */ typedef PFH * PPFH; /* Ptr to Ptr to File Handle structure */
#define pfhNull ((PFH)NULL)
#define ppfhNull ((PPFH)NULL)
/*
* Open File Mode datatype */ typedef UINT OFM; /* Open File Mode */
#define ofmExist ((OFM)OF_EXIST)
#define ofmRead ((OFM)OF_READ | OF_SHARE_DENY_WRITE)
#define ofmReadCompat ((OFM)OF_READ | OF_SHARE_COMPAT)
#define ofmWrite ((OFM)OF_WRITE | OF_SHARE_EXCLUSIVE)
#define ofmReadWrite ((OFM)OF_READWRITE | OF_SHARE_EXCLUSIVE)
#define ofmCreate ((OFM)OF_CREATE | OF_SHARE_EXCLUSIVE)
/*
* Seek File Mode datatype */ typedef UINT SFM; /* Seek File Mode */
#define sfmSet ((SFM)FILE_BEGIN)
#define sfmCur ((SFM)FILE_CURRENT)
#define sfmEnd ((SFM)FILE_END)
/*
* Long File Address datatype */ typedef unsigned long LFA; /* Long File Address */
#define lfaSeekError ((LFA)HFILE_ERROR)
/*
* Expanded Error Return Code */ typedef unsigned int EERC; /* Expanded Error Return Code */
#define eercOkay ((EERC)0)
#define eercAbort ((EERC)1)
#define eercRetry ((EERC)2)
#define eercIgnore ((EERC)3)
/* File handling routines */ extern EERC WINAPI EercOpenFile ( PPFH ppfh, CSZC cszcFile, OFM ofm, BOOL fVital ); extern BOOL WINAPI FFileExist ( CSZC cszcFile, OFM ofm ); extern BOOL WINAPI FCloseFile ( PFH pfh ); extern CB WINAPI CbReadFile ( PFH pfh, PB pbBuf, CB cbMax ); extern CB WINAPI CbWriteFile ( PFH pfh, PB pbBuf, CB cbMax ); extern LFA WINAPI LfaSeekFile ( PFH pfh, LONG l, SFM sfm ); extern BOOL WINAPI FChmodFile ( CSZC cszcFileName, INT wFlags, BOOL fVital ); extern SZC WINAPI DriveNumToRootPath( INT iDrive );
typedef unsigned int IDDT; /* Insert Disk Dialog Type */ #define iddtStandard ((IDDT)1)
#define iddtHddi ((IDDT)2)
#define iddtHddiMaint ((IDDT)3)
/* Media source file handling routines */ extern EERC WINAPI EercOpenSrcFile ( PPFH ppfh, UINT did, SZ szSrcDir, SZ szFile, BOOL fWrite ); extern EERC WINAPI EercOpenSrcFileEx ( PPFH ppfh, UINT did, SZ szSrcDir, SZ szFile, BOOL fWrite, BOOL fVital, IDDT iddt ); extern EERC WINAPI EercReadSrcFile ( PFH pfh, PB pbBuf, CB cbMax );
extern EERC WINAPI EercWriteSrcFile ( PFH pfh, PB pbBuf, CB cbMax );
extern BOOL WINAPI FCloseSrcFile( PFH pfh, BOOL fRdOnly );
extern EERC WINAPI EercFindHddiFloppy ( SZ szSrcDir, DWORD dwDrives, PCH pchDrive, BOOL fVital, IDDT iddt );
/*
* SetErrorMode type */ typedef unsigned int SEM; /* SetErrorMode type */
/*
* Comparison Return Code datatype */ typedef INT CRC; /* Comparison Return Code */
#define crcError ((CRC)(-2))
#define crcEqual ((CRC) 0 )
#define crcFirstHigher ((CRC) 1 )
#define crcSecondHigher ((CRC)(-1))
extern SZ PUBLIC SzDupl ( CSZC cszc ); extern CRC WINAPI CrcStringCompare ( CSZC cszc1, CSZC cszc2 ); extern CRC WINAPI CrcStringCompareI ( CSZC cszc1, CSZC cszc2 ); extern SZ WINAPI SzLastChar ( CSZC cszc ); extern CB WINAPI CbStrCopyToBuffer ( PB pbBuf, CB cbMax, CSZC cszcSrc );
/*
* BindImage API, exported from MSSETUP.DLL, and/or IMAGEHLP.DLL */
#define IMAGEHELP_DLL "imagehlp.dll"
#define BINDIMAGE_PROC "BindImage"
typedef BOOL (WINAPI *PFNBindImage)( SZ szImage, SZ szDllPath, SZ szSymPath);
extern BOOL WINAPI BindImage( SZ szImage, SZ szDllPath, SZ szSymPath);
/*
* API to set Admin mode in toolkit DLL */
VOID WINAPI SetAdminMode ( VOID ); /* called only by ACMSETUP.EXE */ BOOL WINAPI IsAdminMode ( VOID );
/* Like FStampResource, but only reads the data into the buffer.
*/ BOOL WINAPI FReadResource ( SZ szFilePath, UINT uiResType, UINT uiResId, SZ szData, CB cbData, BOOL fNotCopied );
#ifdef __cplusplus
} /* End of extern "C" { */ #endif
#endif /* SETUPKIT_H */
|