107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
#include "precomp.h"
|
|
#pragma hdrstop
|
|
/**************************************************************************/
|
|
/***** Common Library Component - SymTab INF File Handling Routines 2 *****/
|
|
/**************************************************************************/
|
|
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Adds a new symbol/value association to the Symbol Table for the
|
|
** key and first field of the current line pointed to by the current
|
|
** INF read location.
|
|
** Arguments:
|
|
** none
|
|
** Notes:
|
|
** Requires that the current INF structure was initialized with a
|
|
** successful call to GrcOpenInf() and that the current INF read
|
|
** location is defined.
|
|
** Requires that the Symbol Table was initialized with a successful
|
|
** call to FInitSymTab().
|
|
** Requires that the current INF line contain a key.
|
|
** Returns:
|
|
** fFalse if an allocate operation fails.
|
|
** fTrue if the current line contains a key and it was successfully
|
|
** associated with the value from the first field of the current
|
|
** line (or the empty string if the first field does not exist.)
|
|
**
|
|
**************************************************************************/
|
|
BOOL APIENTRY FAddSymbolFromInfLineToSymTab(INT Line)
|
|
{
|
|
BOOL fAnswer;
|
|
SZ szKey;
|
|
SZ szValue;
|
|
|
|
PreCondSymTabInit(fFalse);
|
|
PreCondInfOpen(fFalse);
|
|
PreCondition(FKeyInInfLine(Line), fFalse);
|
|
|
|
szKey = SzGetNthFieldFromInfLine(Line,0);
|
|
AssertRet(*szKey != '\0' &&
|
|
!FWhiteSpaceChp(*szKey), fFalse);
|
|
|
|
if ((szValue = SzGetNthFieldFromInfLine(Line,1)) == (SZ)NULL)
|
|
fAnswer = FAddSymbolValueToSymTab(szKey, "");
|
|
else
|
|
fAnswer = FAddSymbolValueToSymTab(szKey, szValue);
|
|
|
|
if(szValue) {
|
|
SFree(szValue);
|
|
}
|
|
|
|
SFree(szKey);
|
|
|
|
return(fAnswer);
|
|
}
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Adds a new symbol/value association to the Symbol Table for the
|
|
** key and first field of each line in the specified section.
|
|
** Arguments:
|
|
** szSection: non-NULL, non-empty section.
|
|
** Notes:
|
|
** Requires that the current INF structure was initialized with a
|
|
** successful call to GrcOpenInf().
|
|
** Requires that the Symbol Table was initialized with a successful
|
|
** call to FInitSymTab().
|
|
** Returns:
|
|
** grcINFBadRSLine if any line does not contain a key.
|
|
** grcOutOfMemory if any allocation operation fails.
|
|
** grcOkay if szSection was found, each line in it contained a key, and
|
|
** every key and first field (or the empty string if the first field
|
|
** does not exist) is successfully added to the Symbol Table as a
|
|
** symbol/value association.
|
|
** grcNotOkay otherwise.
|
|
**
|
|
**************************************************************************/
|
|
GRC APIENTRY GrcAddSymsFromInfSection(SZ szSection)
|
|
{
|
|
INT Line;
|
|
|
|
AssertDataSeg();
|
|
|
|
PreCondSymTabInit(grcNotOkay);
|
|
PreCondInfOpen(grcNotOkay);
|
|
|
|
ChkArg(szSection != (SZ)NULL &&
|
|
*szSection != '\0' &&
|
|
!FWhiteSpaceChp(*szSection), 1, grcNotOkay);
|
|
|
|
Line = FindFirstLineFromInfSection(szSection);
|
|
while (Line != -1)
|
|
{
|
|
if (!FKeyInInfLine(Line))
|
|
return(grcINFBadRSLine);
|
|
|
|
if (!FAddSymbolFromInfLineToSymTab(Line))
|
|
return(grcOutOfMemory);
|
|
|
|
Line = FindNextLineFromInf(Line);
|
|
}
|
|
|
|
return(grcOkay);
|
|
}
|