|
|
#include "precomp.h"
#pragma hdrstop
/* File: iinterp.c */ /**************************************************************************/ /* Install: INF Install section interpreter
/**************************************************************************/
INT APIENTRY EncryptCDData(UCHAR *, UCHAR *, UCHAR *, INT, INT, INT, UCHAR *); BOOL APIENTRY FGetCmo(INT Line, UINT *pcFields, CMO * pcmo);
/**/ #define cmoNil ((CMO)0)
/**/ #define spcNil ((SPC)0)
#define spcUndoActionsAndExit ((SPC)13)
#define spcAddSectionFilesToCopyList ((SPC)14)
#define spcAddSectionKeyFileToCopyList ((SPC)15)
#define spcAddNthSectionFileToCopyList ((SPC)16)
#define spcBackupSectionFiles ((SPC)17)
#define spcBackupSectionKeyFile ((SPC)18)
#define spcBackupNthSectionFile ((SPC)19)
#define spcRemoveSectionFiles ((SPC)20)
#define spcRemoveSectionKeyFile ((SPC)21)
#define spcRemoveNthSectionFile ((SPC)22)
#define spcCreateDir ((SPC)23)
#define spcRemoveDir ((SPC)24)
#define spcCreateIniSection ((SPC)26)
#define spcReplaceIniSection ((SPC)30)
#define spcRemoveIniSection ((SPC)31)
#define spcCreateIniKeyNoValue ((SPC)32)
#define spcCreateIniKeyValue ((SPC)33)
#define spcReplaceIniKeyValue ((SPC)34)
#define spcRemoveIniKeyValue ((SPC)35)
#define spcRemoveIniKey ((SPC)36)
#define spcSetEnvVariableValue ((SPC)37)
#define spcCreateProgManGroup ((SPC)38)
#define spcRemoveProgManGroup ((SPC)39)
#define spcCreateProgManItem ((SPC)40)
#define spcRemoveProgManItem ((SPC)41)
#define spcStampResource ((SPC)44)
#define spcExt ((SPC)47)
#define spcCopyFilesInCopyList ((SPC)48)
#define spcCloseSys ((SPC)49)
#define spcShowProgManGroup ((SPC)50)
#define spcDumpCopyList ((SPC)51)
#define spcCreateSysIniKeyValue ((SPC)52)
#define spcClearCopyList ((SPC)53)
#define spcGetCopyListCost ((SPC)54)
#define spcSetupGetCopyListCost ((SPC)55)
#define spcParseSharedAppList ((SPC)56)
#define spcInstallSharedAppList ((SPC)57)
#define spcSearchDirList ((SPC)58)
#define spcSetupDOSApps ((SPC)59)
#define spcChangeBootIniTimeout ((SPC)60)
#define spcCreateCommonProgManGroup ((SPC)63)
#define spcRemoveCommonProgManGroup ((SPC)64)
#define spcShowCommonProgManGroup ((SPC)65)
#define spcCreateCommonProgManItem ((SPC)66)
#define spcRemoveCommonProgManItem ((SPC)67)
#define spcAppend 1
#define spcOverwrite 5
#define spcPrepend 6
#define spcVital 7
static SCP rgscpCommands[] = { { "CREATEDIR", spcCreateDir }, { "REMOVEDIR", spcRemoveDir }, { "ADDSECTIONFILESTOCOPYLIST", spcAddSectionFilesToCopyList }, { "ADDSECTIONKEYFILETOCOPYLIST", spcAddSectionKeyFileToCopyList }, { "ADDNTHSECTIONFILETOCOPYLIST", spcAddNthSectionFileToCopyList }, { "COPYFILESINCOPYLIST", spcCopyFilesInCopyList }, { "CREATEINISECTION", spcCreateIniSection }, { "REPLACEINISECTION", spcReplaceIniSection }, { "REMOVEINISECTION", spcRemoveIniSection }, { "CREATEINIKEYNOVALUE", spcCreateIniKeyNoValue }, { "CREATEINIKEYVALUE", spcCreateIniKeyValue }, { "REPLACEINIKEYVALUE", spcReplaceIniKeyValue }, { "REMOVEINIKEYVALUE", spcRemoveIniKeyValue }, { "REMOVEINIKEY", spcRemoveIniKey }, { "CREATESYSINIKEYVALUE", spcCreateSysIniKeyValue }, { "CREATEPROGMANGROUP", spcCreateProgManGroup }, { "CREATEPROGMANITEM", spcCreateProgManItem }, { "REMOVEPROGMANITEM", spcRemoveProgManItem }, { "SHOWPROGMANGROUP", spcShowProgManGroup}, { "STAMPRESOURCE", spcStampResource }, { "CLOSE-SYSTEM", spcCloseSys }, { "EXIT", spcExt }, { "DUMPCOPYLIST", spcDumpCopyList }, { "CLEARCOPYLIST", spcClearCopyList }, { "GETCOPYLISTCOST", spcGetCopyListCost }, { "SETUPGETCOPYLISTCOST", spcSetupGetCopyListCost },
{ "SEARCHDIRLIST", spcSearchDirList }, { "SETUPDOSAPPS", spcSetupDOSApps }, { "CHANGEBOOTINITIMEOUT", spcChangeBootIniTimeout }, { "REMOVEPROGMANGROUP", spcRemoveProgManGroup },
{ "CREATECOMMONPROGMANGROUP", spcCreateCommonProgManGroup }, { "REMOVECOMMONPROGMANGROUP", spcRemoveCommonProgManGroup }, { "SHOWCOMMONPROGMANGROUP", spcShowCommonProgManGroup }, { "CREATECOMMONPROGMANITEM", spcCreateCommonProgManItem }, { "REMOVECOMMONPROGMANITEM", spcRemoveCommonProgManItem },
#ifdef UNUSED
{ "BACKUPSECTIONFILES", spcBackupSectionFiles }, { "BACKUPSECTIONKEYFILE", spcBackupSectionKeyFile }, { "BACKUPNTHSECTIONFILE", spcBackupNthSectionFile }, { "REMOVESECTIONFILES", spcRemoveSectionFiles }, { "REMOVESECTIONKEYFILE", spcRemoveSectionKeyFile }, { "REMOVENTHSECTIONFILE", spcRemoveNthSectionFile }, { "SETENVVARIABLEVALUE", spcSetEnvVariableValue }, { "UNDOACTIONSANDEXIT", spcUndoActionsAndExit }, { "PARSESHAREDAPPLIST", spcParseSharedAppList }, { "INSTALLSHAREDAPPLIST", spcInstallSharedAppList }, #endif /* UNUSED */
{ NULL, spcNil } };
static SCP rgscpOptions[] = { { "A", spcAppend }, { "APPEND", spcAppend }, { "O", spcOverwrite }, { "OVERWRITE", spcOverwrite }, { "P", spcPrepend }, { "PREPEND", spcPrepend }, { "V", spcVital }, { "VITAL", spcVital }, { NULL, spcNil } };
/**/ static PSPT psptCommands = NULL, psptOptions = NULL;
/**/ UINT iFieldCur = 0;
static BOOL fParseError = fFalse; CHP rgchInstBufTmpShort[cchpBufTmpShortBuf] = "short"; CHP rgchInstBufTmpLong[cchpBufTmpLongBuf] = "long";
// REVIEW: global window handle for shell
HWND hwndFrame = NULL; HANDLE hinstShell = NULL; BOOL fMono = fFalse;
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FGetArgSz(INT Line,UINT *pcFields, SZ *psz) { if (iFieldCur <= *pcFields) return((*psz = SzGetNthFieldFromInfLine(Line,iFieldCur++)) != (SZ)NULL);
return(fFalse); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FGetArgUINT(INT Line, UINT *pcFields, UINT *pu) { SZ sz;
if (FGetArgSz(Line,pcFields,&sz)) { *pu = atoi(sz); SFree(sz); return(fTrue); }
return(fFalse); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSectionFiles(INT Line, UINT *pcFields, PFNSF pfnsf) { BOOL fOkay = fFalse; SZ szSection, szSrc;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgSz(Line,pcFields, &szSrc)) { Assert(szSection != NULL && szSrc != NULL); if (*szSection != '\0' && FValidDir(szSrc)) { fParseError = fFalse; fOkay = (*pfnsf)(szSection, szSrc); } SFree(szSrc); } SFree(szSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCopySection(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szSection, szSrc, szDest;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgSz(Line,pcFields, &szSrc)) { if (FGetArgSz(Line,pcFields, &szDest)) { Assert(szSection != NULL && szSrc != NULL && szDest != NULL); if (*szSection != '\0' && FValidDir(szSrc) && FValidDir(szDest)) { GRC grc;
fParseError = fFalse; while ((grc = GrcAddSectionFilesToCopyList(szSection, szSrc, szDest)) != grcOkay) {
SZ szParam1 = NULL, szParam2 = NULL; switch ( grc ) { case grcINFBadFDLine: case grcINFMissingLine: case grcINFMissingSection: szParam1 = pLocalInfPermInfo()->szName; szParam2 = szSection; break; default: break; }
if (EercErrorHandler(hwndFrame, grc, fTrue, szParam1, szParam2, 0) == eercAbort) break; }
fOkay = ((grc == grcOkay) ? fTrue : fFalse); } SFree(szDest); } SFree(szSrc); } SFree(szSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCopySectionKey(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szSection, szKey, szSrc, szDest;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szSrc)) { if (FGetArgSz(Line,pcFields, &szDest)) { Assert(szSection != NULL && szKey != NULL && szSrc != NULL && szDest != NULL); if (*szSection != '\0' && *szKey != '\0' && FValidDir(szSrc) && FValidDir(szDest)) { GRC grc;
fParseError = fFalse; while ((grc = GrcAddSectionKeyFileToCopyList(szSection, szKey, szSrc, szDest)) != grcOkay) {
SZ szParam1 = NULL, szParam2 = NULL; switch ( grc ) { case grcINFBadFDLine: case grcINFMissingLine: case grcINFMissingSection: szParam1 = pLocalInfPermInfo()->szName; szParam2 = szSection; break; default: break; }
if (EercErrorHandler(hwndFrame, grc, fTrue, szParam1, szParam2, 0) == eercAbort) break; }
fOkay = ((grc == grcOkay) ? fTrue : fFalse); } SFree(szDest); } SFree(szSrc); } SFree(szKey); } SFree(szSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCopyNthSection(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szSection, szSrc, szDest; UINT n;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgUINT(Line,pcFields, &n)) { if (FGetArgSz(Line,pcFields, &szSrc)) { if (FGetArgSz(Line,pcFields, &szDest)) { Assert(szSection != NULL && szSrc != NULL && szDest !=NULL); if (*szSection != '\0' && n > 0 && FValidDir(szSrc) && FValidDir(szDest)) { GRC grc;
fParseError = fFalse; while ((grc = GrcAddNthSectionFileToCopyList(szSection, n, szSrc, szDest)) != grcOkay) {
SZ szParam1 = NULL, szParam2 = NULL; switch ( grc ) { case grcINFBadFDLine: case grcINFMissingLine: case grcINFMissingSection: szParam1 = pLocalInfPermInfo()->szName; szParam2 = szSection; break; default: break; }
if (EercErrorHandler(hwndFrame, grc, fTrue, szParam1, szParam2, 0) == eercAbort) break; }
fOkay = ((grc == grcOkay) ? fTrue : fFalse); } SFree(szDest); } SFree(szSrc); } } SFree(szSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseDirectory(INT Line, UINT *pcFields, PFND pfnd) { BOOL fOkay = fFalse; SZ szDirectory;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szDirectory)) { CMO cmo = cmoNil; SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szDirectory != NULL); if (fOkay && FValidDir(szDirectory)) { fParseError = fFalse; fOkay = (*pfnd)(szDirectory, cmo); } SFree(szDirectory); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateIniSection(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; SZ szOption; BOOL fOkay = fTrue;
fParseError = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL); if (fOkay) { fParseError = fFalse; fOkay = FCreateIniSection(szIniFile, szSection, cmo); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseReplaceIniSection(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szNewSection;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szNewSection)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szNewSection != NULL); if (fOkay && *szNewSection != '\0') { fParseError = fFalse; fOkay = FReplaceIniSection(szIniFile, szSection, szNewSection, cmo); } SFree(szNewSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseRemoveIniSection(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; SZ szOption; BOOL fOkay = fTrue;
fParseError = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL); if (fOkay) { fParseError = fFalse; fOkay = FRemoveIniSection(szIniFile, szSection, cmo); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateIniKeyValue(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey, szValue;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szValue)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL && szValue != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FCreateIniKeyValue(szIniFile, szSection, szKey, szValue, cmo); } SFree(szValue); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateSysIniKeyValue(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey, szValue;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szValue)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL && szValue != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FCreateSysIniKeyValue(szIniFile, szSection, szKey, szValue, cmo); } SFree(szValue); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateIniKeyNoValue(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FCreateIniKeyNoValue(szIniFile, szSection, szKey, cmo); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseReplaceIniKeyValue(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey, szValue;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szValue)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL && szValue != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FReplaceIniKeyValue(szIniFile, szSection, szKey, szValue, cmo); } SFree(szValue); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseAppendIniKeyValue(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey, szValue;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szValue)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL && szValue != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FAppendIniKeyValue(szIniFile, szSection, szKey, szValue, cmo); } SFree(szValue); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseRemoveIniKey(INT Line, UINT *pcFields, SZ szIniFile, SZ szSection) { CMO cmo = cmoNil; BOOL fOkay = fFalse; SZ szKey;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szKey)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szIniFile != NULL && szSection != NULL && szKey != NULL); if (fOkay && *szKey != '\0') { fParseError = fFalse; fOkay = FRemoveIniKey(szIniFile, szSection, szKey, cmo); } SFree(szKey); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseIniSection(INT Line, UINT *pcFields, SPC spc) { BOOL fOkay = fFalse; SZ szIniFile, szIniSection;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szIniFile)) { if (FGetArgSz(Line,pcFields, &szIniSection)) { Assert(szIniFile != NULL && szIniSection != NULL); if (*szIniFile != '\0' && (FValidPath(szIniFile) || CrcStringCompareI(szIniFile, "WIN.INI") == crcEqual) && *szIniSection != '\0') { fParseError = fFalse; switch (spc) { default: fParseError = fTrue; Assert(fFalse); break;
case spcCreateIniSection: fOkay = FParseCreateIniSection(Line, pcFields, szIniFile, szIniSection); break;
case spcRemoveIniSection: fOkay = FParseRemoveIniSection(Line, pcFields, szIniFile, szIniSection); break;
case spcReplaceIniSection: fOkay = FParseReplaceIniSection(Line, pcFields, szIniFile, szIniSection); break;
case spcCreateIniKeyNoValue: fOkay = FParseCreateIniKeyNoValue(Line, pcFields, szIniFile, szIniSection); break;
case spcCreateIniKeyValue: fOkay = FParseCreateIniKeyValue(Line, pcFields, szIniFile, szIniSection); break;
case spcReplaceIniKeyValue: fOkay = FParseReplaceIniKeyValue(Line, pcFields, szIniFile, szIniSection); break;
case spcRemoveIniKey: fOkay = FParseRemoveIniKey(Line, pcFields, szIniFile, szIniSection); break;
case spcCreateSysIniKeyValue: fOkay = FParseCreateSysIniKeyValue(Line, pcFields, szIniFile, szIniSection); break; } } SFree(szIniSection); } SFree(szIniFile); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSetEnv(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szFile, szVar, szVal; CMO cmo = cmoNil;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szFile)) { if (FGetArgSz(Line,pcFields, &szVar)) { if (FGetArgSz(Line,pcFields, &szVal)) { SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcAppend: cmo |= cmoAppend; break;
case spcPrepend: cmo |= cmoPrepend; break; } SFree(szOption); } Assert(szFile != NULL && szVar != NULL && szVal != NULL); if (fOkay) { fParseError = fFalse; fOkay = FSetEnvVariableValue(szFile, szVar, szVal, cmo); } SFree(szVal); } SFree(szVar); } SFree(szFile); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateProgManGroup(INT Line, UINT *pcFields, BOOL CommonGroup) { BOOL fOkay = fFalse; SZ szDescription;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szDescription)) { SZ szFile;
if (FGetArgSz(Line,pcFields, &szFile)) { CMO cmo = cmoNil; SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szDescription != NULL && szFile != NULL); if (fOkay && *szDescription != '\0') { fParseError = fFalse; fOkay = FCreateProgManGroup(szDescription, szFile, cmo, CommonGroup); } SFree(szFile); } SFree(szDescription); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseRemoveProgManGroup(INT Line, UINT *pcFields, BOOL CommonGroup) { BOOL fOkay = fFalse; SZ szDescription;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szDescription)) { CMO cmo = cmoNil; SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szDescription != NULL); if (fOkay && *szDescription != '\0') { fParseError = fFalse; fOkay = FRemoveProgManGroup(szDescription, cmo, CommonGroup); } SFree(szDescription); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseShowProgManGroup(INT Line, UINT *pcFields, BOOL CommonGroup) { BOOL fOkay = fFalse; SZ szGroup;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szGroup)) { SZ szCommand;
if (FGetArgSz(Line,pcFields, &szCommand)) { SZ szOption; CMO cmo = cmoNil;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert(szGroup != NULL && szCommand != NULL); if (fOkay && *szGroup != '\0' && *szCommand != '\0') { fParseError = fFalse; fOkay = FShowProgManGroup(szGroup, szCommand, cmo, CommonGroup); } SFree(szCommand); } SFree(szGroup); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCreateProgManItem(INT Line, UINT *pcFields, BOOL CommonGroup) { BOOL fOkay = fFalse; SZ szGroup;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szGroup)) { SZ szDescription;
if (FGetArgSz(Line,pcFields, &szDescription)) { SZ szCmdLine;
if (FGetArgSz(Line,pcFields, &szCmdLine)) { SZ szIconFile;
if (FGetArgSz(Line, pcFields, &szIconFile)) { SZ szIconNum;
if (FGetArgSz(Line, pcFields, &szIconNum)) { SZ szOption; CMO cmo = cmoNil;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); } Assert( szGroup != NULL && szDescription != NULL && szCmdLine != NULL && szIconFile != NULL && szIconNum != NULL );
if ( fOkay && *szGroup != '\0' && *szDescription != '\0' && *szCmdLine != '\0' ) {
fParseError = fFalse; while( !FCreateProgManItem( szGroup, szDescription, szCmdLine, szIconFile, atoi(szIconNum), cmo, CommonGroup ) ) {
EERC eerc;
if ((eerc = EercErrorHandler(hwndFrame, grcDDEAddItem, cmo & cmoVital, szDescription, szGroup, 0)) != eercRetry) { fOkay = (eerc == eercIgnore); break; } }
} SFree(szIconNum); } SFree(szIconFile); } SFree(szCmdLine); } SFree(szDescription); } SFree(szGroup); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseRemoveProgManItem(INT Line, UINT *pcFields, BOOL CommonGroup) { BOOL fOkay = fFalse; SZ szGroup;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szGroup)) { SZ szDescription;
if (FGetArgSz(Line,pcFields, &szDescription)) { SZ szOption; CMO cmo = cmoNil;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); }
Assert(szGroup != NULL && szDescription != NULL);
if (fOkay) { fParseError = fFalse; FRemoveProgManItem( szGroup, szDescription, cmo, CommonGroup ); } SFree(szDescription); } SFree(szGroup); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSearchDirList(INT Line, UINT *pcFields) {
BOOL fOkay = fFalse; SZ szInfVar = NULL; SZ szDirList = NULL; SZ szRecurse = NULL; SZ szSilent = NULL; SZ szSearchList = NULL; SZ szWin16Restr = NULL; SZ szWin32Restr = NULL; SZ szDosRestr = NULL; BOOL fRecurse; BOOL fSilent;
if ( *pcFields >= 9 ) {
FGetArgSz( Line, pcFields, &szInfVar );
if ( szInfVar ) {
FGetArgSz( Line, pcFields, &szDirList );
if ( szDirList ) {
FGetArgSz( Line, pcFields, &szRecurse );
if ( szRecurse ) {
FGetArgSz( Line, pcFields, &szSilent );
if ( szSilent ) {
FGetArgSz( Line, pcFields, &szSearchList );
if ( szSearchList ) {
FGetArgSz( Line, pcFields, &szWin16Restr );
if ( szWin16Restr ) {
FGetArgSz( Line, pcFields, &szWin32Restr );
if ( szWin32Restr ) {
FGetArgSz( Line, pcFields, &szDosRestr );
if ( szDosRestr ) {
fRecurse = (CrcStringCompare(szRecurse, "YES") == crcEqual); fSilent = (CrcStringCompare(szSilent, "YES") == crcEqual);
fOkay = FSearchDirList( szInfVar, szDirList, fRecurse, fSilent, szSearchList, szWin16Restr, szWin32Restr, szDosRestr );
SFree( szDosRestr ); }
SFree( szWin32Restr ); }
SFree( szWin16Restr ); }
SFree( szSearchList ); }
SFree( szSilent ); }
SFree( szRecurse ); }
SFree( szDirList ); }
SFree( szInfVar ); } }
return fOkay; }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSetupDOSAppsList(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szAppList = NULL; SZ szWinMode = NULL; SZ szDefltStdValues = NULL; SZ szDefltEnhValues = NULL; SZ szPifDir = NULL; SZ szGroup = NULL;
if(*pcFields >= 7) {
FGetArgSz( Line, pcFields, &szAppList );
if ( szAppList ) {
FGetArgSz( Line, pcFields, &szWinMode );
if ( szWinMode ) {
FGetArgSz( Line, pcFields, &szDefltStdValues );
if ( szDefltStdValues ) {
FGetArgSz( Line, pcFields, &szDefltEnhValues );
if ( szDefltEnhValues ) {
FGetArgSz( Line, pcFields, &szPifDir );
if ( szPifDir ) {
FGetArgSz( Line, pcFields, &szGroup );
if ( szGroup ) {
fOkay = FInstallDOSPifs( szAppList, szWinMode, szDefltStdValues, szDefltEnhValues, szPifDir, szGroup );
SFree( szGroup ); }
SFree( szPifDir ); }
SFree( szDefltEnhValues ); }
SFree( szDefltStdValues ); }
SFree( szWinMode ); }
SFree( szAppList ); }
} return(fOkay); }
BOOL FParseChangeBootIniTimeout(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szTimeout = NULL;
if(*pcFields == 2) { FGetArgSz(Line,pcFields,&szTimeout); if(szTimeout) { fOkay = FChangeBootIniTimeout(atoi(szTimeout)); SFree(szTimeout); } } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FGetCmo(INT Line, UINT *pcFields, CMO * pcmo) { BOOL fOkay = fFalse; CMO cmo = cmoNil; SZ szOption;
fOkay = fTrue; while (fOkay && FGetArgSz(Line,pcFields, &szOption)) { switch (SpcParseString(psptOptions, szOption)) { default: fOkay = fFalse; break;
case spcOverwrite: cmo |= cmoOverwrite; break;
case spcVital: cmo |= cmoVital; break; } SFree(szOption); }
*pcmo = cmo;
return fOkay; }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseStampResource(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szSect, szKey, szDst, szData; UINT wResType, wResId, cbData;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSect)) { if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szDst)) { if (FGetArgUINT(Line,pcFields, &wResType)) if (FGetArgUINT(Line,pcFields, &wResId)) if (FGetArgSz(Line,pcFields, &szData)) { if (FGetArgUINT(Line,pcFields, &cbData)) { Assert(szSect != NULL && szKey != NULL && szDst != NULL && szData != NULL); if (*szSect != '\0' && *szKey != '\0' && FValidDir(szDst)) { fParseError = fFalse; fOkay = FStampResource(szSect, szKey, szDst, (WORD)wResType, (WORD)wResId, szData, cbData); } } SFree(szData); } SFree(szDst); } SFree(szKey); } SFree(szSect); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FStrToDate(SZ szDate, PUSHORT pwYear, PUSHORT pwMonth, PUSHORT pwDay) { if (!isdigit(*(szDate + 0)) || !isdigit(*(szDate + 1)) || !isdigit(*(szDate + 2)) || !isdigit(*(szDate + 3)) || *(szDate + 4) != '-' || !isdigit(*(szDate + 5)) || !isdigit(*(szDate + 6)) || *(szDate + 7) != '-' || !isdigit(*(szDate + 8)) || !isdigit(*(szDate + 9)) || *(szDate + 10) != '\0') return(fFalse);
*pwYear = (USHORT)(((*(szDate + 0) - '0') * 1000) + ((*(szDate + 1) - '0') * 100) + ((*(szDate + 2) - '0') * 10) + (*(szDate + 3) - '0'));
*pwMonth = (USHORT)(((*(szDate + 5) - '0') * 10) + (*(szDate + 6) - '0'));
*pwDay = (USHORT)(((*(szDate + 8) - '0') * 10) + (*(szDate + 9) - '0'));
if (*pwMonth < 1 || *pwMonth > 12 || *pwDay < 1 || *pwDay > 31) return(fFalse);
return(fTrue); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseCloseSystem(INT Line, UINT *pcFields) { BOOL fOkay = fFalse; SZ szSect, szKey, szDst; UINT wResType, wResId; SZ szName, szOrg, szDate, szSer; USHORT wYear, wMonth, wDay; CHP szData[149];
if ((szSect = SzFindSymbolValueInSymTab("STF_SYS_INIT")) == (SZ)NULL || (CrcStringCompare(szSect, "YES") != crcEqual && CrcStringCompare(szSect, "NET") != crcEqual) || (szName = SzFindSymbolValueInSymTab("STF_CD_NAME")) == (SZ)NULL || (szOrg = SzFindSymbolValueInSymTab("STF_CD_ORG")) == (SZ)NULL || (szDate = SzFindSymbolValueInSymTab("STF_CD_DATE")) == (SZ)NULL || (szSer = SzFindSymbolValueInSymTab("STF_CD_SER")) == (SZ)NULL || !FStrToDate(szDate, &wYear, &wMonth, &wDay) || EncryptCDData(szData, szName, szOrg, wYear, wMonth, wDay, szSer)) return(fFalse);
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSect)) { if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szDst)) { if (FGetArgUINT(Line, pcFields, &wResType)) if (FGetArgUINT(Line, pcFields, &wResId)) { Assert(szSect != NULL && szKey != NULL && szDst !=NULL); if (*szSect != '\0' && *szKey != '\0' && FValidDir(szDst)) { fParseError = fFalse; fOkay = FStampResource(szSect, szKey, szDst, (WORD)wResType, (WORD)wResId, szData, 149); } } SFree(szDst); } SFree(szKey); } SFree(szSect); }
return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FUndoActions(VOID) { /* REVIEW STUB */ Assert(fFalse); return(fFalse); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseGetCopyListCost(INT Line,UINT cFields) { BOOL fOkay; SZ szAdditionalNeeded = (SZ)NULL; SZ szTotalFree = (SZ)NULL; SZ szTotalNeeded = (SZ)NULL; SZ szFreePerDisk = (SZ)NULL; SZ szClusterPerDisk = (SZ)NULL; SZ szTroublePairs = (SZ)NULL; SZ szNeededPerDisk = (SZ)NULL; SZ szExtraCosts = (SZ)NULL;
ChkArg(cFields >= 3, 1, fFalse); Assert(FValidCopyList( pLocalInfPermInfo() ));
fParseError = fTrue; if (!FGetArgSz(Line, &cFields, &szAdditionalNeeded) || *szAdditionalNeeded == '\0' || !FGetArgSz(Line, &cFields, &szTotalFree) || *szTotalFree == '\0' || !FGetArgSz(Line, &cFields, &szTotalNeeded) || *szTotalNeeded == '\0' || (cFields >= 5 && !FGetArgSz(Line, &cFields, &szFreePerDisk)) || (cFields >= 6 && !FGetArgSz(Line, &cFields, &szClusterPerDisk)) || (cFields >= 7 && !FGetArgSz(Line, &cFields, &szTroublePairs)) || (cFields >= 8 && !FGetArgSz(Line, &cFields, &szNeededPerDisk)) || (cFields == 9 && !FGetArgSz(Line, &cFields, &szExtraCosts))) fOkay = fFalse; else { fParseError = fFalse; fOkay = FGetCopyListCost(szAdditionalNeeded, szTotalFree, szTotalNeeded, szFreePerDisk, szClusterPerDisk, szTroublePairs, szNeededPerDisk, szExtraCosts); }
if(szAdditionalNeeded) { SFree(szAdditionalNeeded); }
if(szTotalFree) { SFree(szTotalFree); }
if(szTotalNeeded) { SFree(szTotalNeeded); }
if(szFreePerDisk) { SFree(szFreePerDisk); }
if(szClusterPerDisk) { SFree(szClusterPerDisk); }
if(szTroublePairs) { SFree(szTroublePairs); }
if(szNeededPerDisk) { SFree(szNeededPerDisk); }
if(szExtraCosts) { SFree(szExtraCosts); }
return(fOkay); }
BOOL APIENTRY FInitParsingTables( void ) {
psptCommands = PsptInitParsingTable(rgscpCommands); if (!psptCommands) { return(fFalse); } psptOptions = PsptInitParsingTable(rgscpOptions); if (!psptOptions) { FDestroyParsingTable(psptCommands); psptCommands = NULL; return(fFalse); }
return(fTrue); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseInstallSection(HANDLE hInstance, SZ szSection) { BOOL fDone = fFalse; BOOL fOkay = fTrue; INT Line;
if((Line = FindInfSectionLine(szSection)) == -1) return(fFalse);
psptCommands = PsptInitParsingTable(rgscpCommands); if (!psptCommands) { return(fFalse); } psptOptions = PsptInitParsingTable(rgscpOptions); if (!psptOptions) { FDestroyParsingTable(psptCommands); psptCommands = NULL; return(fFalse); }
while (fOkay && (!fDone) && ((Line = FindNextLineFromInf(Line)) != -1) && FHandleFlowStatements(&Line,hwndFrame, szSection, NULL, NULL)) { UINT cFields = CFieldsInInfLine(Line);
if (cFields) { SZ szCommand;
iFieldCur = 1; fParseError = fFalse; if ((fOkay = FGetArgSz(Line,&cFields, &szCommand)) != fFalse) { SPC spc = SpcParseString(psptCommands, szCommand);
switch (spc) { default: fParseError = fTrue; fOkay = fFalse; break;
#ifdef UNUSED
case spcUndoActionsAndExit: fOkay = FUndoActions(); fDone = fTrue; break; #endif /* UNUSED */
case spcAddSectionFilesToCopyList: fOkay = FParseCopySection(Line, &cFields); break;
case spcAddSectionKeyFileToCopyList: fOkay = FParseCopySectionKey(Line, &cFields); break;
case spcAddNthSectionFileToCopyList: fOkay = FParseCopyNthSection(Line, &cFields); break;
case spcCopyFilesInCopyList: fOkay = FCopyFilesInCopyList(hInstance); if (!fOkay && fUserQuit) fOkay = fDone = fTrue; Assert(*(PpclnHeadList(pLocalInfPermInfo())) == (PCLN)NULL); break;
#ifdef UNUSED
case spcBackupSectionFiles: fOkay = FParseSectionFiles(Line, &cFields, FBackupSectionFiles); break;
case spcBackupSectionKeyFile: fOkay = FParseSectionKeyFile(Line, &cFields, FBackupSectionKeyFile); break;
case spcBackupNthSectionFile: fOkay = FParseSectionNFile(Line, &cFields, FBackupNthSectionFile); break;
case spcRemoveSectionFiles: fOkay = FParseSectionFiles(Line, &cFields, FRemoveSectionFiles); break;
case spcRemoveSectionKeyFile: fOkay = FParseSectionKeyFile(Line, &cFields, FRemoveSectionKeyFile); break;
case spcRemoveNthSectionFile: fOkay = FParseSectionNFile(Line, &cFields, FRemoveNthSectionFile); break; #endif /* UNUSED */
case spcCreateDir: fOkay = FParseDirectory(Line, &cFields, FCreateDir); break;
case spcRemoveDir: fOkay = FParseDirectory(Line, &cFields, FRemoveDir); break;
case spcCreateIniSection: case spcReplaceIniSection: case spcRemoveIniSection: case spcCreateIniKeyNoValue: case spcCreateIniKeyValue: case spcReplaceIniKeyValue: case spcRemoveIniKey: case spcCreateSysIniKeyValue: fOkay = FParseIniSection(Line, &cFields, spc); break;
#ifdef UNUSED
case spcSetEnvVariableValue: fOkay = FParseSetEnv(Line, &cFields); break; #endif /* UNUSED */
case spcCreateProgManGroup: fOkay = FParseCreateProgManGroup(Line, &cFields, FALSE); break; case spcCreateCommonProgManGroup: fOkay = FParseCreateProgManGroup(Line, &cFields, TRUE); break;
case spcRemoveProgManGroup: fOkay = FParseRemoveProgManGroup(Line, &cFields, FALSE); break; case spcRemoveCommonProgManGroup: fOkay = FParseRemoveProgManGroup(Line, &cFields, TRUE); break;
case spcRemoveProgManItem: fOkay = FParseRemoveProgManItem(Line, &cFields,FALSE); break; case spcRemoveCommonProgManItem: fOkay = FParseRemoveProgManItem(Line, &cFields,TRUE); break;
case spcCreateProgManItem: fOkay = FParseCreateProgManItem(Line, &cFields,FALSE); break; case spcCreateCommonProgManItem: fOkay = FParseCreateProgManItem(Line, &cFields,TRUE); break;
case spcShowProgManGroup: fOkay = FParseShowProgManGroup(Line, &cFields, FALSE); break; case spcShowCommonProgManGroup: fOkay = FParseShowProgManGroup(Line, &cFields, TRUE); break;
case spcStampResource: fOkay = FParseStampResource(Line, &cFields); break;
case spcCloseSys: fOkay = FParseCloseSystem(Line, &cFields); break;
case spcClearCopyList: if (cFields != 1) fParseError = fTrue; else { if (*(PpclnHeadList( pLocalInfPermInfo() )) != (PCLN)NULL) EvalAssert(FFreeCopyList( pLocalInfPermInfo() )); fOkay = fTrue; } break;
case spcSetupGetCopyListCost: if (cFields != 4) fParseError = fTrue; else { SZ szFree = (SZ)NULL; SZ szCluster = (SZ)NULL; SZ szTotal = (SZ)NULL;
fParseError = fTrue; if (!FGetArgSz(Line, &cFields, &szFree) || *szFree == '\0' || !FGetArgSz(Line, &cFields, &szCluster) || !FGetArgSz(Line, &cFields, &szTotal) || *szCluster == '\0' || *szTotal == '\0') fOkay = fFalse; else { fParseError = fFalse; fOkay = FSetupGetCopyListCost(szFree, szCluster, szTotal); }
if(szFree) { SFree(szFree); }
if(szCluster) { SFree(szCluster); }
if(szTotal) { SFree(szTotal); } } break;
case spcGetCopyListCost: if (cFields < 3) fParseError = fTrue; else { Assert(FValidCopyList( pLocalInfPermInfo() )); fOkay = FParseGetCopyListCost(Line, cFields); } break;
#ifdef UNUSED
case spcParseSharedAppList: Assert(cFields == 2); /* BLOCK */ { SZ szList = (SZ)NULL;
if (!FGetArgSz(Line, &cFields, &szList)) fOkay = fFalse; else fOkay = FParseSharedAppList(szList);
if(szList) { SFree(szList); } } break;
case spcInstallSharedAppList: Assert(cFields == 2); /* BLOCK */ { SZ szList = (SZ)NULL;
if (!FGetArgSz(Line, &cFields, &szList)) fOkay = fFalse; else fOkay = FInstallSharedAppList(szList);
if(szList) { SFree(szList); } } break; #endif /* UNUSED */
case spcDumpCopyList: #if DBG
/* BLOCK */ { PCLN pclnCur; PFH pfh;
/* REVIEW BUG - take a filename as an arg */ EvalAssert((pfh = PfhOpenFile("c:copylist.txt", ofmCreate)) != (PFH)NULL); FWriteSzToFile(pfh, "*** COPY LIST ***\r\n"); Assert(FValidCopyList( pLocalInfPermInfo() )); pclnCur = *(PpclnHeadList( pLocalInfPermInfo() )); while (pclnCur != (PCLN)NULL) { PCLN pcln = pclnCur;
FPrintPcln(pfh, pclnCur); pclnCur = pclnCur->pclnNext; }
FWriteSzToFile(pfh, "\r\n*** END OF COPY LIST ***\r\n"); EvalAssert(FCloseFile(pfh)); /*** REVIEW: TEST ***/ } #endif /* DBG */
break;
case spcExt: fDone = fTrue; break;
case spcSearchDirList: fOkay = FParseSearchDirList(Line, &cFields); break;
case spcSetupDOSApps: fOkay = FParseSetupDOSAppsList(Line, &cFields); break;
case spcChangeBootIniTimeout: fOkay = FParseChangeBootIniTimeout(Line, &cFields); break;
}
SFree(szCommand); } } if (fParseError) fOkay = fFalse; }
EvalAssert(FDestroyParsingTable(psptCommands)); EvalAssert(FDestroyParsingTable(psptOptions));
if (!fParseError) return(fOkay);
LoadString(hinstShell, IDS_ERROR, rgchInstBufTmpShort, cchpBufTmpShortMax); LoadString(hinstShell, IDS_SHL_CMD_ERROR, rgchInstBufTmpLong, cchpBufTmpLongMax);
/* BLOCK */ { UINT cFields; RGSZ rgsz; UINT iszCur = 0; SZ szCur;
EvalAssert((cFields = CFieldsInInfLine(Line)) != 0);
while ((rgsz = RgszFromInfScriptLine(Line,cFields)) == (RGSZ)NULL) if (!FHandleOOM(hwndFrame)) return(fFalse);
EvalAssert((szCur = *rgsz) != (SZ)NULL); while (szCur != (SZ)NULL) { if (iszCur == 0) EvalAssert(SzStrCat(rgchInstBufTmpLong, "\n'") == rgchInstBufTmpLong); else EvalAssert(SzStrCat(rgchInstBufTmpLong, " ") == rgchInstBufTmpLong);
if (strlen(rgchInstBufTmpLong) + strlen(szCur) > (cchpBufTmpLongMax - 7)) { Assert(strlen(rgchInstBufTmpLong) <= (cchpBufTmpLongMax - 5)); EvalAssert(SzStrCat(rgchInstBufTmpLong, "...") == rgchInstBufTmpLong); break; } else EvalAssert(SzStrCat(rgchInstBufTmpLong, szCur) == rgchInstBufTmpLong);
szCur = rgsz[++iszCur]; }
EvalAssert(FFreeRgsz(rgsz));
EvalAssert(SzStrCat(rgchInstBufTmpLong, "'") == rgchInstBufTmpLong); }
MessageBox(hwndFrame, rgchInstBufTmpLong, rgchInstBufTmpShort, MB_OK | MB_ICONHAND);
return(fFalse); }
/*
** Purpose: ** The Install entry point. Interprets the commands ** in the specified Install Commands INF section. ** Arguments: ** hinst, hwnd : Windows stuff ** rgsz : array of arguments (NULL terminated) ** csz : count of arguments (must be 1) ** Returns: ** fTrue if successful ** fFalse if not *************************************************************************/ BOOL APIENTRY FInstallEntryPoint(HANDLE hinst, HWND hwnd, RGSZ rgsz, UINT csz) { BOOL fOkay; HDC hdc;
ChkArg(hinst != (HANDLE)NULL, 1, fFalse); ChkArg(hwnd != (HWND)NULL, 2, fFalse); ChkArg(rgsz != (RGSZ)NULL && *rgsz != (SZ)NULL && *(rgsz + 1) == (SZ)NULL, 3, fFalse); ChkArg(csz == 1, 4, fFalse);
FInitFreeTable(pLocalInfPermInfo()); /* do not check return value! */
//REVIEW: these are globals that are being used for progress gizmo.
hwndFrame = hwnd; hinstShell = hinst; hdc = GetDC(NULL); if (hdc) { fMono = (GetDeviceCaps(hdc, NUMCOLORS) == 2); ReleaseDC(NULL, hdc); }
fUserQuit = fFalse;
fOkay = FParseInstallSection(hinst, rgsz[0]);
// EndProgmanDde();
if (fUserQuit) return(FAddSymbolValueToSymTab(INSTALL_OUTCOME, USERQUIT)); else if (fOkay == fFalse) return(FAddSymbolValueToSymTab(INSTALL_OUTCOME, FAILURE)); else return(FAddSymbolValueToSymTab(INSTALL_OUTCOME, SUCCESS)); }
/* REVIEW should be in a separate DLL */ /*
** Purpose: ** ?? ** Arguments: ** none ** Returns: ** none ** ***************************************************************************/ INT APIENTRY EncryptCDData(pchBuf, pchName, pchOrg, wYear, wMonth, wDay, pchSer) UCHAR * pchBuf; UCHAR * pchName; UCHAR * pchOrg; INT wYear; INT wMonth; INT wDay; UCHAR * pchSer; { UCHAR ch, pchTmp[149]; UCHAR * pchCur; UCHAR * szGarbageCur; UCHAR * szGarbage = "LtRrBceHabCT AhlenN"; INT cchName, cchOrg, i, j, chksumName, chksumOrg; time_t timet;
if (pchBuf == (UCHAR *)NULL) return(1);
if (pchName == (UCHAR *)NULL || (cchName = lstrlen(pchName)) == 0 || cchName > 52) return(2);
for (i = cchName, chksumName = 0; i > 0; ) if ((ch = *(pchName + --i)) < ' ') return(2); else chksumName += ch;
if (pchOrg == (UCHAR *)NULL || (cchOrg = lstrlen(pchOrg)) == 0 || cchOrg > 52) return(3);
for (i = cchOrg, chksumOrg = 0; i > 0; ) if ((ch = *(pchOrg + --i)) < ' ') return(3); else chksumOrg += ch;
if (wYear < 1900 || wYear > 4096) return(4);
if (wMonth < 1 || wMonth > 12) return(5);
if (wDay < 1 || wDay > 31) return(6);
if (pchSer == (UCHAR *)NULL || lstrlen(pchSer) != 20) return(7);
time(&timet); *(pchTmp + 0) = (UCHAR)(' ' + (timet & 0x0FF));
*(pchTmp + 1) = (UCHAR)('e' + (cchName & 0x0F)); *(pchTmp + 2) = (UCHAR)('e' + ((cchName >> 4) & 0x0F));
*(pchTmp + 3) = (UCHAR)('e' + (cchOrg & 0x0F)); *(pchTmp + 4) = (UCHAR)('e' + ((cchOrg >> 4) & 0x0F));
*(pchTmp + 5) = (UCHAR)('e' + (chksumName & 0x0F)); *(pchTmp + 6) = (UCHAR)('e' + ((chksumName >> 4) & 0x0F));
*(pchTmp + 7) = (UCHAR)('e' + (chksumOrg & 0x0F)); *(pchTmp + 8) = (UCHAR)('e' + ((chksumOrg >> 4) & 0x0F));
*(pchTmp + 9) = (UCHAR)('e' + (wDay & 0x0F)); *(pchTmp + 10) = (UCHAR)('e' + ((wDay >> 4) & 0x0F));
*(pchTmp + 11) = (UCHAR)('e' + (wMonth & 0x0F));
*(pchTmp + 12) = (UCHAR)('e' + (wYear & 0x0F)); *(pchTmp + 13) = (UCHAR)('e' + ((wYear >> 4) & 0x0F)); *(pchTmp + 14) = (UCHAR)('e' + ((wYear >> 8) & 0x0F));
pchCur = pchTmp + 15; while ((*pchCur++ = *pchName++) != '\0') ; pchCur--; while ((*pchCur++ = *pchOrg++) != '\0') ; pchCur--;
szGarbageCur = szGarbage; for (i = 112 - cchName - cchOrg; i-- > 0; ) { if (*szGarbageCur == '\0') szGarbageCur = szGarbage; *pchCur++ = *szGarbageCur++; }
pchTmp[127] = 'k'; for (i = 0; i < 126; i++) pchTmp[i + 1] = pchTmp[i] ^ pchTmp[i + 1];
for (i = 0, j = 110; i < 127; ) { pchBuf[j] = pchTmp[i++]; j = (j + 111) & 0x7F; } pchBuf[127] = '\0';
lstrcpy(pchBuf + 128, pchSer);
return(0); }
#ifdef UNUSED
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSectionKeyFile(INT Line, UINT *pcFields, PFNSKF pfnskf) { BOOL fOkay = fFalse; SZ szSection, szKey, szSrc;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgSz(Line,pcFields, &szKey)) { if (FGetArgSz(Line,pcFields, &szSrc)) { Assert(szSection != NULL && szKey != NULL && szSrc != NULL); if (*szSection != '\0' && *szKey != '\0' && FValidDir(szSrc)) { fParseError = fFalse; fOkay = (*pfnskf)(szSection, szKey, szSrc); } SFree(szSrc); } SFree(szKey); } SFree(szSection); } return(fOkay); }
/*
** Purpose: ** Arguments: ** Returns: ** *************************************************************************/ BOOL APIENTRY FParseSectionNFile(INT Line, UINT *pcFields, PFNSNF pfnsnf) { BOOL fOkay = fFalse; SZ szSection, szSrc; UINT n;
fParseError = fTrue; if (FGetArgSz(Line,pcFields, &szSection)) { if (FGetArgUINT(Line,pcFields, &n)) if (FGetArgSz(Line,pcFields, &szSrc)) { Assert(szSection != NULL && szSrc != NULL); if (*szSection != '\0' && FValidDir(szSrc) && n > 0) { fParseError = fFalse; fOkay = (*pfnsnf)(szSection, n, szSrc); } SFree(szSrc); } SFree(szSection); } return(fOkay); }
#endif /* UNUSED */
|