193 lines
6.3 KiB
C
193 lines
6.3 KiB
C
|
/*************************************************/
|
||
|
/* Common Library Component private include file */
|
||
|
/*************************************************/
|
||
|
|
||
|
|
||
|
|
||
|
// ****************************************************************************
|
||
|
//
|
||
|
// This file contains declarations that have to do with INF contexts
|
||
|
//
|
||
|
//
|
||
|
// For each INF file loaded, Setup maintains a permanent INF information
|
||
|
// block and a temporary INF information block.
|
||
|
//
|
||
|
// InfPermInfo: The permanent information block contains the data
|
||
|
// that is kept throughout the life of Setup, even after an
|
||
|
// INF file has been discarded. This is reused if an INF
|
||
|
// is re-loaded.
|
||
|
//
|
||
|
// InfTempInfo: The temporary information block contains data that is
|
||
|
// kept only as long as the INF is loaded. This consists
|
||
|
// mainly of the preparsed INF and its symbol table.
|
||
|
//
|
||
|
//
|
||
|
// An INF context consists of a line number ( which is the INF line being
|
||
|
// executed), plus the temporary and permanent INF information.
|
||
|
//
|
||
|
// INF contexts are entered with the SHELL command and exited with the
|
||
|
// RETURN command.
|
||
|
//
|
||
|
// ****************************************************************************
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Count of strings in each String-Table-Freeing node
|
||
|
//
|
||
|
#define cszPerStf (62)
|
||
|
|
||
|
//
|
||
|
// String-Table-Free structure
|
||
|
//
|
||
|
typedef struct _STF *PSTF;
|
||
|
typedef struct _STF {
|
||
|
PSTF pstfNext;
|
||
|
SZ rgsz[cszPerStf];
|
||
|
USHORT cszFree;
|
||
|
} STF;
|
||
|
typedef PSTF * PPSTF;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// INF permanent information. This is kept throughout all of SETUP.
|
||
|
//
|
||
|
// There is one if these for each INF file that has been used by SETUP.
|
||
|
//
|
||
|
typedef struct _INFPERMINFO *PINFPERMINFO;
|
||
|
typedef struct _INFPERMINFO {
|
||
|
PINFPERMINFO pNext; // Next in List
|
||
|
SZ szName; // INF name
|
||
|
UINT InfId; // INF Id
|
||
|
PSDLE psdleHead; // Source media description list head
|
||
|
PSDLE psdleCur; // Current source media description
|
||
|
PCLN pclnHead; // Head of copy list
|
||
|
PPCLN ppclnTail; // Tail of copy list
|
||
|
PSTF pstfHead; // Head of free string table
|
||
|
} INFPERMINFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Parsed INF info. There is one of these per active INF plus a few
|
||
|
// cached ones for previously used INFs.
|
||
|
//
|
||
|
typedef struct _PARSED_INF *PPARSED_INF;
|
||
|
typedef struct _PARSED_INF {
|
||
|
PPARSED_INF pPrev;
|
||
|
PPARSED_INF pNext;
|
||
|
PINFPERMINFO pInfPermInfo;
|
||
|
PINFLINE MasterLineArray;
|
||
|
UINT MasterLineCount;
|
||
|
PUCHAR MasterFile;
|
||
|
UINT MasterFileSize;
|
||
|
} PARSED_INF;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// INF temporary information. This goes away when no context
|
||
|
// references the INF.
|
||
|
//
|
||
|
typedef struct _INFTEMPINFO *PINFTEMPINFO;
|
||
|
typedef struct _INFTEMPINFO {
|
||
|
PINFTEMPINFO pPrev; // Previous in chain
|
||
|
PINFTEMPINFO pNext; // Next in chain
|
||
|
PINFPERMINFO pInfPermInfo; // INF permanent information
|
||
|
PPARSED_INF pParsedInf; // Parsed INF
|
||
|
DWORD cRef; // Reference count
|
||
|
PSYMTAB SymTab; // Static symbol table
|
||
|
} INFTEMPINFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Context entry in context stack. There is one of these for
|
||
|
// each context entered.
|
||
|
//
|
||
|
typedef struct _INFCONTEXT *PINFCONTEXT;
|
||
|
typedef struct _INFCONTEXT {
|
||
|
PINFCONTEXT pNext; // Next context in chain
|
||
|
PINFTEMPINFO pInfTempInfo; // INF temporary info
|
||
|
INT CurrentLine; // Current line being executed
|
||
|
PSEFL pseflHead; // Flow statement block
|
||
|
PSYMTAB SymTab; // Local symtol table
|
||
|
SZ szShlScriptSection; // Shell script section
|
||
|
SZ szHelpFile; // Help file
|
||
|
DWORD dwLowContext; // Help context low
|
||
|
DWORD dwHighContext; // Help context high
|
||
|
DWORD dwHelpIndex; // Help index.
|
||
|
BOOL bHelpIsIndexed; // Whether help is indexed
|
||
|
} INFCONTEXT;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Global variables
|
||
|
//
|
||
|
extern PINFCONTEXT pContextBottom; // The global (SETUP) context
|
||
|
extern PINFCONTEXT pContextTop; // Top of context stack
|
||
|
extern PINFPERMINFO pInfPermInfoHead; // Head of InfPermInfo list
|
||
|
extern PINFPERMINFO pInfPermInfoTail; // Tail of InfPermInfo list
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Some macros for accessing contexts and INF information
|
||
|
//
|
||
|
#define pLocalContext() pContextTop
|
||
|
#define pGlobalContext() pContextBottom
|
||
|
#define pInfTempInfo( Context ) ((Context)->pInfTempInfo)
|
||
|
#define pInfPermInfo( Context ) (pInfTempInfo( Context )->pInfPermInfo)
|
||
|
#define pParsedInf( Context ) (pInfTempInfo( Context )->pParsedInf)
|
||
|
#define pLocalInfTempInfo() pInfTempInfo( pLocalContext() )
|
||
|
#define pLocalInfPermInfo() pInfPermInfo( pLocalContext() )
|
||
|
|
||
|
#define PpclnHeadList( pPermInfo ) &(pPermInfo->pclnHead)
|
||
|
#define PppclnTailList( pPermInfo ) &(pPermInfo->ppclnTail)
|
||
|
|
||
|
|
||
|
|
||
|
#define PreCondSymTabInit(r) PreCondition( (pLocalContext() != NULL), r )
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Function Prototypes
|
||
|
//
|
||
|
extern BOOL APIENTRY PushContext( PINFCONTEXT pContext );
|
||
|
extern PINFCONTEXT APIENTRY PopContext( VOID );
|
||
|
extern VOID APIENTRY FreeContext( PINFCONTEXT pContext );
|
||
|
extern PINFPERMINFO APIENTRY NameToInfPermInfo( SZ szName , BOOL AllocIfNotPresent);
|
||
|
extern PINFPERMINFO APIENTRY AddInfPermInfo( SZ szName );
|
||
|
extern BOOL APIENTRY PathToInfName( SZ szPath, SZ szName );
|
||
|
extern PSYMTAB APIENTRY PInfSymTabFind( SZ szSymbol, SZ *szNewSymbol );
|
||
|
|
||
|
extern PINFTEMPINFO APIENTRY CreateInfTempInfo( PINFPERMINFO );
|
||
|
|
||
|
extern BOOL APIENTRY FFreeSrcDescrList(PINFPERMINFO);
|
||
|
extern PSDLE APIENTRY PsdleFromDid(DID, PINFPERMINFO);
|
||
|
|
||
|
extern BOOL APIENTRY FFreeCopyList(PINFPERMINFO);
|
||
|
#if DBG
|
||
|
extern BOOL APIENTRY FValidCopyList(PINFPERMINFO);
|
||
|
#endif
|
||
|
|
||
|
extern BOOL APIENTRY FInitFreeTable(PINFPERMINFO);
|
||
|
extern BOOL APIENTRY FAddSzToFreeTable(SZ, PINFPERMINFO);
|
||
|
extern BOOL APIENTRY FAddNewSzsInPoerToFreeTable(POER, POER, PINFPERMINFO);
|
||
|
extern BOOL APIENTRY FFreeFreeTable(PINFPERMINFO);
|
||
|
extern PPARSED_INF APIENTRY ParsedInfAlloc(PINFPERMINFO);
|
||
|
extern BOOL APIENTRY FFreeParsedInf( PPARSED_INF);
|
||
|
extern BOOL APIENTRY FlushInfParsedInfo(SZ szInfName);
|