|
|
/************************************************/ /* 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
|