/************************************************/ /* Common Library Component public include file */ /************************************************/ #if !defined (COMSTF_INCLUDED ) #define COMSTF_INCLUDED // avoid warnings on every file from including stdlib.h #if defined(min) #undef min #undef max #endif /* min */ extern HANDLE MyDllModuleHandle; /* ** Global variable macro for DLL portability */ #define GLOBAL(x) (x) /* standard datatypes */ typedef BYTE * PB; typedef unsigned CB; 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)52) #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 grcINFBadSectionLabel ((GRC)14) #define grcINFBadLine ((GRC)15) #define grcINFBadKey ((GRC)16) #define grcCloseFileErr ((GRC)17) #define grcChangeDirErr ((GRC)18) #define grcINFSrcDescrSect ((GRC)19) #define grcTooManyINFKeys ((GRC)20) #define grcWriteInf ((GRC)21) #define grcInvalidPoer ((GRC)22) #define grcINFMissingLine ((GRC)23) #define grcINFBadFDLine ((GRC)24) #define grcINFBadRSLine ((GRC)25) #define grcInvalidPathErr ((GRC)26) #define grcWriteIniValueErr ((GRC)27) #define grcReplaceIniValueErr ((GRC)28) #define grcIniValueTooLongErr ((GRC)29) #define grcDDEInitErr ((GRC)30) #define grcDDEExecErr ((GRC)31) #define grcBadWinExeFileFormatErr ((GRC)32) #define grcResourceTooLongErr ((GRC)33) #define grcMissingSysIniSectionErr ((GRC)34) #define grcDecompGenericErr ((GRC)35) #define grcDecompUnknownAlgErr ((GRC)36) #define grcMissingResourceErr ((GRC)37) #define grcLibraryLoadErr ((GRC)38) #define grcBadLibEntry ((GRC)39) #define grcApplet ((GRC)40) #define grcExternal ((GRC)41) #define grcSpawn ((GRC)42) #define grcDiskFull ((GRC)43) #define grcDDEAddItem ((GRC)44) #define grcDDERemoveItem ((GRC)45) #define grcINFMissingSection ((GRC)46) #define grcRunTimeParseErr ((GRC)47) #define grcOpenSameFileErr ((GRC)48) #define grcGetVolInfo ((GRC)49) #define grcGetFileSecurity ((GRC)50) #define grcSetFileSecurity ((GRC)51) #define grcVerifyFileErr ((GRC)52) /**************************************/ /* common library function prototypes */ /**************************************/ /* CHaracter Physical representation datatype */ typedef BYTE CHP; typedef CHP * PCHP; typedef CB CCHP; #define CbFromCchp(cchp) ((CB)(cchp)) /* CHaracter Logical representation datatype */ typedef CHP CHL; typedef CHL * PCHL; typedef PCHL * PPCHL; typedef CB CCHL; typedef CB ICHL; #define cbFullPathMax ((CB)(MAX_PATH-1)) #define cchlFullPathMax ((CCHL)(MAX_PATH-1)) #define cchlFullDirMax cchlFullPathMax #define cchpFullPathMax ((CCHP)(MAX_PATH-1)) #define cbFullPathBuf ((CB)(cbFullPathMax + 1)) #define cchlFullPathBuf ((CCHL)(cchlFullPathMax + 1)) #define cchpFullPathBuf ((CCHP)(cchpFullPathMax + 1)) /* String Zero terminated datatype */ typedef PCHL SZ; #define PSZ PPSZ typedef PPCHL PSZ; typedef PPCHL RGSZ; /* Comparison Return Code datatype */ typedef INT CRC; #define crcError ((CRC)(-2)) #define crcEqual ((CRC)0) #define crcFirstHigher ((CRC)1) #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. */ #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. */ #define SzPrevChar(szStart, szCur) ((SZ)AnsiPrev(szStart,szCur)) /* ** 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) ((SZ)lstrcat((LPSTR)szDst,(LPSTR)szSrc)) /* ** 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. */ #define FSingleByteCharSz(sz) (!IsDBCSLeadByte(*sz)) /* ** 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. */ #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. */ #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. */ #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. */ #define SzStrLower(sz) (SZ)(AnsiLower((LPSTR)(sz))) #define cbSymbolMax (64*1024) #define cbAllocMax (65520*5) #define cbIntStrMax 16 PVOID SAlloc( IN DWORD Size ); PVOID SRealloc( IN PVOID Block, IN DWORD NewSize ); VOID SFree( IN PVOID Block ); BOOL SInit( IN BOOL Init ); /* Long File Address datatype */ typedef unsigned long LFA; #define lfaSeekError ((LFA)-1) /* ** File Handle structure ** Fields: ** iDosfh: DOS file handle. ** ofstruct: OFSTRUCT used when the file was opened. */ typedef struct _fh { INT iDosfh; OFSTRUCT ofstruct; } FH; /* File Handle datatype */ typedef FH * PFH; /* Open File Mode datatype */ typedef USHORT OFM; #define ofmExistRead ((OFM)OF_EXIST | OF_READ) #define ofmExistReadWrite ((OFM)OF_EXIST | OF_READWRITE) //#define ofmRead ((OFM)OF_READ | OF_SHARE_DENY_WRITE) #define ofmRead ((OFM)OF_READ) #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 WORD SFM; #define sfmSet ((SFM)0) #define sfmCur ((SFM)1) #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); /* Path manipulation routines */ BOOL FMakeFATPathFromDirAndSubPath(SZ, SZ, SZ, CCHP); #define FValidFATDir(sz) fTrue #define FValidFATPath(sz) fTrue #define CchlValidFATSubPath(sz) strlen(sz) // no checking for WIN32 #define ISUNC(sz) ((BOOL)(sz != NULL && lstrlen(sz) > 3 && *sz == '\\' && *(sz+1) == '\\')) /* ** 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. */ #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. */ #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. */ #define FValidPath(szPath) FValidFATPath(szPath) /* ** 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. */ #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 */ #define MessBoxSzSz(szTitle, szText) \ MessageBox((HWND)NULL, (LPSTR)szText, (LPSTR)szTitle, \ MB_TASKMODAL | MB_ICONHAND | MB_OK) extern BOOL APIENTRY AssertSzUs(SZ, USHORT); extern BOOL APIENTRY PreCondSzUs(SZ, USHORT); extern BOOL APIENTRY BadParamUs(USHORT, SZ, USHORT); /* ** 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. */ typedef struct _idb { struct _idb * pidbNext; PCHP pchpBuffer; CCHP cchpBuffer; CCHP cchpAllocated; } IDB; /* Inf Data Block datatypes */ typedef IDB * PIDB; typedef PIDB * PPIDB; /* The following equate is used because of a situation like "abcd"+ "efgh" When parsed, this will be "abcdefgh" -- 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 */ typedef WORD OEF; #define oefVital ((OEF)0x0001) #define oefCopy ((OEF)0x0002) #define oefUndo ((OEF)0x0004) #define oefRoot ((OEF)0x0008) #define oefDecompress ((OEF)0x0010) #define oefTimeStamp ((OEF)0x0020) #define oefReadOnly ((OEF)0x0040) #define oefBackup ((OEF)0x0080) #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) // // The following means that the file should not be put into the setup log // file that tracks all files copied by setup. // #define oefNoLog ((OEF)0x0400) // // The following means that the file is a third party file // #define oefThirdPartyFile ((OEF)0x0800) // // The following means that the file is from a CSD install // #define oefCsdInstall ((OEF)0x1000) #define oefNone ((OEF)0x0000) #define oefAll ((OEF)0xFFFF) /* ** Copy-Time Unit datatype for SFD */ typedef WORD CTU; /* ** OverWrite Mode datatype for SFD */ typedef WORD OWM; #define owmNever ((OWM)0x0001) #define owmAlways ((OWM)0x0002) #define owmUnprotected ((OWM)0x0004) #define owmOlder ((OWM)0x0008) #define owmVerifySourceOlder ((OWM)0x0010) /* ** Option-Element Record for SFD */ 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 */ typedef OER * POER; typedef POER * PPOER; #define poerNull ((POER)NULL) /* ** Disk ID datatype for SFD */ typedef WORD DID; #define didMin 1 #define didMost 999 /* ** Section-File Description structure ** Fields: */ typedef struct _sfd { DID did; UINT InfId; SZ szFile; OER oer; } SFD; /* ** Section-File Description datatype */ typedef SFD * PSFD; typedef PSFD * PPSFD; #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); /* ** Source Description List Element data structure */ 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; typedef SDLE * PSDLE; typedef PSDLE * PPSDLE; extern PSDLE APIENTRY PsdleAlloc(VOID); extern BOOL APIENTRY FFreePsdle(PSDLE); extern GRC APIENTRY GrcFillSrcDescrListFromInf(VOID); /* ** Copy List Node data structure */ typedef struct _cln { SZ szSrcDir; SZ szDstDir; PSFD psfd; struct _cln * pclnNext; } CLN; typedef CLN * PCLN; typedef PCLN * PPCLN; typedef PPCLN * PPPCLN; /* ** Section Files Operation data structure ** REVIEW -- not really used */ typedef WORD SFO; #define sfoCopy 1 #define sfoBackup 2 #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. */ #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 SZ APIENTRY SzGetSubstitutedValue(SZ); extern SZ APIENTRY SzProcessSzForSyms(HWND, SZ); BOOL DumpSymbolTableToFile( IN PCSTR Filename ); /* String Parse Code */ typedef unsigned SPC; typedef SPC * PSPC; /* ** String-Code Pair structure ** Fields: ** sz: string. ** spc: String Parse Code to associate with string. */ typedef struct _scp { SZ sz; SPC spc; } SCP; /* String-Code Pair datatype */ typedef SCP * PSCP; /* String Parse Table datatypes */ /////////////////////////////////// // typedef SCP SPT; /////////////////////////////////// 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 ; 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 #define spcBmpShow 74 #define spcBmpHide 75 #define spcTermRestoreDiskLog 76 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); /* ** Expanded Error Return Code */ typedef unsigned EERC; #define eercAbort ((EERC)0) #define eercRetry ((EERC)1) #define eercIgnore ((EERC)2) EERC __cdecl EercErrorHandler(HWND, GRC, BOOL, ...); extern BOOL APIENTRY FHandleOOM(HWND); 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 xMsgBox( HWND hwnd, UINT CaptionResId, UINT MessageResId, UINT MsgBoxFlags, ... ); // Bit map control variables. #define BMP_MAX 10 extern HBITMAP hbmAdvertList [ BMP_MAX + 1 ] ; extern INT cAdvertIndex ; extern INT cAdvertCycleSeconds ; extern INT cyAdvert ; extern INT cxAdvert ; extern PSTR SETUP_LOG_FILE; extern PSTR SETUP_REPAIR_DIRECTORY; // // This flag tells us whether we were invoked as a standalone process // or whether we were called to interpret a legacy inf from within a process. // extern BOOL OwnProcess; // // The following two globals are only valid if 'OwnProcess' is FALSE. // extern LPSTR ServicesModified; extern DWORD ServicesModifiedSize; #endif // COMSTF_INCLUDED