本文整理汇总了C++中GetToken函数的典型用法代码示例。如果您正苦于以下问题:C++ GetToken函数的具体用法?C++ GetToken怎么用?C++ GetToken使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetToken函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fopen
void CMonsterSetBase::LoadSetBase(char * filename)
{
int Token;
int rcount;
int copycount;
BYTE Sdir;
SMDFile = fopen(filename, "r");
if ( SMDFile == NULL )
{
MsgBox("file open error %s", filename);
return;
}
this->m_Count = 0;
while ( true )
{
Token = GetToken();
if ( Token == 2 )
break;
if ( Token == 1 )
{
int Type = TokenNumber;
while ( true )
{
Token = GetToken();
if ( strcmp("end", TokenString) == 0 )
break;
this->m_Mp[this->m_Count].m_Type = TokenNumber;
Token = GetToken(); this->m_Mp[this->m_Count].m_MapNumber = TokenNumber;
Token = GetToken(); this->m_Mp[this->m_Count].m_Dis = TokenNumber;
Token = GetToken(); this->m_Mp[this->m_Count].m_X = TokenNumber;
Token = GetToken(); this->m_Mp[this->m_Count].m_Y = TokenNumber;
this->m_Mp[this->m_Count].m_ArrangeType = Type;
if ( Type == 1 || Type == 3 )
{
Token = GetToken(); this->m_Mp[this->m_Count].m_W = TokenNumber;
Token = GetToken(); this->m_Mp[this->m_Count].m_H = TokenNumber;
}
else if ( Type == 2 )
{
this->m_Mp[this->m_Count].m_W = 0;
this->m_Mp[this->m_Count].m_H = 0;
int w = this->m_Mp[this->m_Count].m_X - 3;
int h = this->m_Mp[this->m_Count].m_Y - 3;
w += rand() % 7;
h += rand() % 7;
this->m_Mp[this->m_Count].m_X = w;
this->m_Mp[this->m_Count].m_Y = h;
}
else if ( Type == 4 )
{
this->m_Mp[this->m_Count].m_W = 0;
this->m_Mp[this->m_Count].m_H = 0;
}
else
{
this->m_Mp[this->m_Count].m_W = 0;
this->m_Mp[this->m_Count].m_H = 0;
}
Token = GetToken(); this->m_Mp[this->m_Count].m_Dir = TokenNumber;
Sdir = this->m_Mp[this->m_Count].m_Dir;
if ( this->m_Mp[this->m_Count].m_Dir == (BYTE)-1 )
this->m_Mp[this->m_Count].m_Dir = rand() % 8;
if ( Type == 1 || Type == 3 )
{
BYTE w = this->m_Mp[this->m_Count].m_X;
BYTE h = this->m_Mp[this->m_Count].m_Y;
Token = GetToken(); rcount = TokenNumber;
copycount = this->m_Count;
if ( rcount > 1 )
{
for ( int k = 0; k<rcount-1 ; k++ )
{
this->m_Count++;
if ( this->m_Count > OBJ_MAXMONSTER-1 )
{
MsgBox("Monster attribute max over %s %d", __FILE__, __LINE__);
fclose(SMDFile);
return;
}
this->m_Mp[this->m_Count].m_Dis = this->m_Mp[copycount].m_Dis;
//.........这里部分代码省略.........
示例2: EvaluateExpression
//.........这里部分代码省略.........
Value->Type = EFI_IFR_TYPE_STRING;
Value->Value.string = OpCode->Value.Value.string;
break;
//
// Constant
//
case EFI_IFR_TRUE_OP:
case EFI_IFR_FALSE_OP:
case EFI_IFR_ONE_OP:
case EFI_IFR_ONES_OP:
case EFI_IFR_UINT8_OP:
case EFI_IFR_UINT16_OP:
case EFI_IFR_UINT32_OP:
case EFI_IFR_UINT64_OP:
case EFI_IFR_UNDEFINED_OP:
case EFI_IFR_VERSION_OP:
case EFI_IFR_ZERO_OP:
Value = &OpCode->Value;
break;
//
// unary-op
//
case EFI_IFR_LENGTH_OP:
Status = PopExpression (Value);
if (EFI_ERROR (Status)) {
return Status;
}
if (Value->Type != EFI_IFR_TYPE_STRING) {
return EFI_INVALID_PARAMETER;
}
StrPtr = GetToken (Value->Value.string, FormSet->HiiHandle);
if (StrPtr == NULL) {
return EFI_INVALID_PARAMETER;
}
Value->Type = EFI_IFR_TYPE_NUM_SIZE_64;
Value->Value.u64 = EfiStrLen (StrPtr);
gBS->FreePool (StrPtr);
break;
case EFI_IFR_NOT_OP:
Status = PopExpression (Value);
if (EFI_ERROR (Status)) {
return Status;
}
if (Value->Type != EFI_IFR_TYPE_BOOLEAN) {
return EFI_INVALID_PARAMETER;
}
Value->Value.b = !Value->Value.b;
break;
case EFI_IFR_QUESTION_REF2_OP:
//
// Pop an expression from the expression stack
//
Status = PopExpression (Value);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Validate the expression value
//
示例3: IfrCatenate
EFI_STATUS
IfrCatenate (
IN FORM_BROWSER_FORMSET *FormSet,
OUT EFI_HII_VALUE *Result
)
/*++
Routine Description:
Evaluate opcode EFI_IFR_CATENATE.
Arguments:
FormSet - Formset which contains this opcode.
Result - Evaluation result for this opcode.
Returns:
EFI_SUCCESS - Opcode evaluation success.
Other - Opcode evaluation failed.
--*/
{
EFI_STATUS Status;
EFI_HII_VALUE Value;
CHAR16 *String[2];
UINTN Index;
CHAR16 *StringPtr;
//
// String[0] - The second string
// String[1] - The first string
//
String[0] = NULL;
String[1] = NULL;
StringPtr = NULL;
Status = EFI_SUCCESS;
for (Index = 0; Index < 2; Index++) {
Status = PopExpression (&Value);
if (EFI_ERROR (Status)) {
goto Done;
}
if (Value.Type != EFI_IFR_TYPE_STRING) {
Status = EFI_UNSUPPORTED;
goto Done;
}
String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);
if (String== NULL) {
Status = EFI_NOT_FOUND;
goto Done;
}
}
StringPtr= EfiLibAllocatePool (EfiStrSize (String[1]) + EfiStrSize (String[0]));
ASSERT (StringPtr != NULL);
EfiStrCpy (StringPtr, String[1]);
EfiStrCat (StringPtr, String[0]);
Result->Type = EFI_IFR_TYPE_STRING;
Result->Value.string = NewString (StringPtr, FormSet->HiiHandle);
Done:
EfiLibSafeFreePool (String[0]);
EfiLibSafeFreePool (String[1]);
EfiLibSafeFreePool (StringPtr);
return Status;
}
示例4: GetVersion
std::string IDSEXT::InvokeMethod(const std::string& command)
{
int index = command.find_first_of(" ");
string strCommand = command.substr(0, index);
string strParam = command.substr(index + 1, command.length());
Json::Reader reader;
Json::Value obj;
if (strCommand == "getVersion") {
return GetVersion();
} else if (strCommand == "registerProvider") {
return RegisterProvider(strParam);
} else if (strCommand == "setOption") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s\n", "error parsing\n");
return "unable to parse options";
}
int option = obj["option"].asInt();
const std::string value = obj["value"].asString();
return( SetOption(option, value) );
} else if (strCommand == "getToken") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
std::string provider = obj["provider"].asString();
std::string tokenType = obj["tokenType"].asString();
const std::string appliesTo = obj["appliesTo"].asString();
GetToken(provider, tokenType, appliesTo);
} else if (strCommand == "clearToken") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
std::string provider = obj["provider"].asString();
std::string tokenType = obj["tokenType"].asString();
const std::string appliesTo = obj["appliesTo"].asString();
ClearToken(provider, tokenType, appliesTo);
} else if (strCommand == "getProperties") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
std::string provider = obj["provider"].asString();
int propertyType = obj["propertyType"].asInt();
int numProps = obj["numProps"].asInt();
const std::string userProps = obj["userProperties"].asString();
GetProperties(provider, propertyType, numProps, userProps);
} else if (strCommand == "getData") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
std::string provider = obj["provider"].asString();
int dataType = obj["dataType"].asInt();
int dataFlags = obj["dataFlags"].asInt();
const std::string dataName = obj["dataName"].asString();
GetData(provider, dataType, dataFlags, dataName);
} else if (strCommand == "createData") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
std::string provider = obj["provider"].asString();
int dataType = obj["dataType"].asInt();
int dataFlags = obj["dataFlags"].asInt();
const std::string dataName = obj["dataName"].asString();
const std::string dataValue = obj["dataValue"].asString();
CreateData(provider, dataType, dataFlags, dataName, dataValue);
} else if (strCommand == "deleteData") {
// parse the JSON
bool parse = reader.parse(strParam, obj);
if (!parse) {
//fprintf(stderr, "%s", "error parsing\n");
return "unable to parse options";
}
event_id = obj["_eventId"].asString();
//.........这里部分代码省略.........
示例5: IfrSpan
EFI_STATUS
IfrSpan (
IN FORM_BROWSER_FORMSET *FormSet,
IN UINT8 Flags,
OUT EFI_HII_VALUE *Result
)
/*++
Routine Description:
Evaluate opcode EFI_IFR_SPAN.
Arguments:
FormSet - Formset which contains this opcode.
Flags - FIRST_MATCHING or FIRST_NON_MATCHING.
Result - Evaluation result for this opcode.
Returns:
EFI_SUCCESS - Opcode evaluation success.
Other - Opcode evaluation failed.
--*/
{
EFI_STATUS Status;
EFI_HII_VALUE Value;
CHAR16 *String[2];
CHAR16 *Charset;
UINTN Base;
UINTN Index;
CHAR16 *StringPtr;
BOOLEAN Found;
Status = PopExpression (&Value);
if (EFI_ERROR (Status)) {
return Status;
}
if (Value.Type > EFI_IFR_TYPE_NUM_SIZE_64) {
return EFI_UNSUPPORTED;
}
Base = (UINTN) Value.Value.u64;
//
// String[0] - Charset
// String[1] - The string to search
//
String[0] = NULL;
String[1] = NULL;
for (Index = 0; Index < 2; Index++) {
Status = PopExpression (&Value);
if (EFI_ERROR (Status)) {
goto Done;
}
if (Value.Type != EFI_IFR_TYPE_STRING) {
Status = EFI_UNSUPPORTED;
goto Done;
}
String[Index] = GetToken (Value.Value.string, FormSet->HiiHandle);
if (String== NULL) {
Status = EFI_NOT_FOUND;
goto Done;
}
}
if (Base >= EfiStrLen (String[1])) {
Status = EFI_UNSUPPORTED;
goto Done;
}
Found = FALSE;
StringPtr = String[1] + Base;
Charset = String[0];
while (*StringPtr != 0 && !Found) {
Index = 0;
while (Charset[Index] != 0) {
if (*StringPtr >= Charset[Index] && *StringPtr <= Charset[Index + 1]) {
if (Flags == EFI_IFR_FLAGS_FIRST_MATCHING) {
Found = TRUE;
break;
}
} else {
if (Flags == EFI_IFR_FLAGS_FIRST_NON_MATCHING) {
Found = TRUE;
break;
}
}
//
// Skip characters pair representing low-end of a range and high-end of a range
//
Index += 2;
}
if (!Found) {
StringPtr++;
}
}
Result->Type = EFI_IFR_TYPE_NUM_SIZE_64;
Result->Value.u64 = StringPtr - String[1];
//.........这里部分代码省略.........
示例6: SavePPBuffer
/************************************************************
NAME : ParseSlot
DESCRIPTION : Parses slot definitions for a
defclass statement
INPUTS : 1) The logical name of the input source
2) The current slot list
3) The class precedence list for the class
to which this slot is being attached
(used to find facets for composite slots)
4) A flag indicating if this is a multifield
slot or not
5) A flag indicating if the type of slot
(single or multi) was explicitly
specified or not
RETURNS : The address of the list of slots,
NULL if there was an error
SIDE EFFECTS : The slot list is allocated
NOTES : Assumes "(slot" has already been parsed.
************************************************************/
TEMP_SLOT_LINK *ParseSlot(
Environment *theEnv,
const char *readSource,
const char *className,
TEMP_SLOT_LINK *slist,
PACKED_CLASS_LINKS *preclist,
bool multiSlot)
{
SlotDescriptor *slot;
CONSTRAINT_PARSE_RECORD parsedConstraint;
char specbits[2];
int rtnCode;
CLIPSLexeme *newOverrideMsg;
/* ===============================================================
Bits in specbits are when slot qualifiers are specified so that
duplicate or conflicting qualifiers can be detected.
Shared/local bit-0
Single/multiple bit-1
Read-only/Read-write/Initialize-Only bit-2
Inherit/No-inherit bit-3
Composite/Exclusive bit-4
Reactive/Nonreactive bit-5
Default bit-6
Default-dynamic bit-7
Visibility bit-8
Override-message bit-9
=============================================================== */
SavePPBuffer(theEnv," ");
specbits[0] = specbits[1] = '\0';
GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);
if (DefclassData(theEnv)->ObjectParseToken.tknType != SYMBOL_TOKEN)
{
DeleteSlots(theEnv,slist);
SyntaxErrorMessage(theEnv,"defclass slot");
return NULL;
}
if ((DefclassData(theEnv)->ObjectParseToken.value == (void *) DefclassData(theEnv)->ISA_SYMBOL) ||
(DefclassData(theEnv)->ObjectParseToken.value == (void *) DefclassData(theEnv)->NAME_SYMBOL))
{
DeleteSlots(theEnv,slist);
SyntaxErrorMessage(theEnv,"defclass slot");
return NULL;
}
slot = NewSlot(theEnv,DefclassData(theEnv)->ObjectParseToken.lexemeValue);
slist = InsertSlot(theEnv,className,slist,slot);
if (slist == NULL)
return NULL;
if (multiSlot)
{
slot->multiple = true;
SetBitMap(specbits,FIELD_BIT);
}
GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);
IncrementIndentDepth(theEnv,3);
InitializeConstraintParseRecord(&parsedConstraint);
while (DefclassData(theEnv)->ObjectParseToken.tknType == LEFT_PARENTHESIS_TOKEN)
{
PPBackup(theEnv);
PPCRAndIndent(theEnv);
SavePPBuffer(theEnv,"(");
GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);
if (DefclassData(theEnv)->ObjectParseToken.tknType != SYMBOL_TOKEN)
{
SyntaxErrorMessage(theEnv,"defclass slot");
goto ParseSlotError;
}
else if (strcmp(DefclassData(theEnv)->ObjectParseToken.lexemeValue->contents,DEFAULT_FACET) == 0)
{
if (ParseDefaultFacet(theEnv,readSource,specbits,slot) == false)
goto ParseSlotError;
}
else if (strcmp(DefclassData(theEnv)->ObjectParseToken.lexemeValue->contents,DYNAMIC_FACET) == 0)
{
SetBitMap(specbits,DEFAULT_DYNAMIC_BIT);
if (ParseDefaultFacet(theEnv,readSource,specbits,slot) == false)
goto ParseSlotError;
}
else if (strcmp(DefclassData(theEnv)->ObjectParseToken.lexemeValue->contents,ACCESS_FACET) == 0)
//.........这里部分代码省略.........
示例7: CheckSyntax
globle int CheckSyntax(
void *theEnv,
char *theString,
DATA_OBJECT_PTR returnValue)
{
char *name;
struct token theToken;
struct expr *top;
short rv;
/*==============================*/
/* Set the default return value */
/* (TRUE for problems found). */
/*==============================*/
SetpType(returnValue,SYMBOL);
SetpValue(returnValue,EnvTrueSymbol(theEnv));
/*===========================================*/
/* Create a string source router so that the */
/* string can be used as an input source. */
/*===========================================*/
if (OpenStringSource(theEnv,"check-syntax",theString,0) == 0)
{ return(TRUE); }
/*=================================*/
/* Only expressions and constructs */
/* can have their syntax checked. */
/*=================================*/
GetToken(theEnv,"check-syntax",&theToken);
if (theToken.type != LPAREN)
{
CloseStringSource(theEnv,"check-syntax");
SetpValue(returnValue,EnvAddSymbol(theEnv,"MISSING-LEFT-PARENTHESIS"));
return(TRUE);
}
/*========================================*/
/* The next token should be the construct */
/* type or function name. */
/*========================================*/
GetToken(theEnv,"check-syntax",&theToken);
if (theToken.type != SYMBOL)
{
CloseStringSource(theEnv,"check-syntax");
SetpValue(returnValue,EnvAddSymbol(theEnv,"EXPECTED-SYMBOL-AFTER-LEFT-PARENTHESIS"));
return(TRUE);
}
name = ValueToString(theToken.value);
/*==============================================*/
/* Set up a router to capture the error output. */
/*==============================================*/
EnvAddRouter(theEnv,"error-capture",40,
FindErrorCapture, PrintErrorCapture,
NULL, NULL, NULL);
/*================================*/
/* Determine if it's a construct. */
/*================================*/
if (FindConstruct(theEnv,name))
{
ConstructData(theEnv)->CheckSyntaxMode = TRUE;
rv = (short) ParseConstruct(theEnv,name,"check-syntax");
GetToken(theEnv,"check-syntax",&theToken);
ConstructData(theEnv)->CheckSyntaxMode = FALSE;
if (rv)
{
EnvPrintRouter(theEnv,WERROR,"\nERROR:\n");
PrintInChunks(theEnv,WERROR,GetPPBuffer(theEnv));
EnvPrintRouter(theEnv,WERROR,"\n");
}
DestroyPPBuffer(theEnv);
CloseStringSource(theEnv,"check-syntax");
if ((rv != FALSE) || (ParseFunctionData(theEnv)->WarningString != NULL))
{
SetErrorCaptureValues(theEnv,returnValue);
DeactivateErrorCapture(theEnv);
return(TRUE);
}
if (theToken.type != STOP)
{
SetpValue(returnValue,EnvAddSymbol(theEnv,"EXTRANEOUS-INPUT-AFTER-LAST-PARENTHESIS"));
DeactivateErrorCapture(theEnv);
return(TRUE);
}
SetpType(returnValue,SYMBOL);
//.........这里部分代码省略.........
示例8: GetToken
/*
==============
GetToken
==============
*/
qboolean GetToken (qboolean crossline)
{
char *token_p;
if (tokenready) // is a token allready waiting?
{
tokenready = false;
return true;
}
// printf("script_p %x (%x)\n", script->script_p, script->end_p ); fflush( stdout );
if (script->script_p >= script->end_p)
{
return EndOfScript (crossline);
}
tokenready = false;
// skip space, ctrl chars
skipspace:
while (*script->script_p <= 32)
{
if (script->script_p >= script->end_p)
{
return EndOfScript (crossline);
}
if (*(script->script_p++) == '\n')
{
if (!crossline)
{
Error ("Line %i is incomplete\n",scriptline);
}
scriptline = ++script->line;
}
}
if (script->script_p >= script->end_p)
{
return EndOfScript (crossline);
}
// strip single line comments
if (*script->script_p == ';' || *script->script_p == '#' || // semicolon and # is comment field
(*script->script_p == '/' && *((script->script_p)+1) == '/')) // also make // a comment field
{
if (!crossline)
Error ("Line %i is incomplete\n",scriptline);
while (*script->script_p++ != '\n')
{
if (script->script_p >= script->end_p)
{
return EndOfScript (crossline);
}
}
scriptline = ++script->line;
goto skipspace;
}
// strip out matching /* */ comments
if (*script->script_p == '/' && *((script->script_p)+1) == '*')
{
script->script_p += 2;
while (*script->script_p != '*' || *((script->script_p)+1) != '/')
{
if (*script->script_p++ != '\n')
{
if (script->script_p >= script->end_p)
{
return EndOfScript (crossline);
}
scriptline = ++script->line;
}
}
script->script_p += 2;
goto skipspace;
}
// copy token to buffer
token_p = token;
if (*script->script_p == '"')
{
// quoted token
script->script_p++;
while (*script->script_p != '"')
{
*token_p++ = *script->script_p++;
if (script->script_p == script->end_p)
break;
if (token_p == &token[MAXTOKEN])
Error ("Token too large on line %i\n",scriptline);
}
script->script_p++;
//.........这里部分代码省略.........
示例9: GetExprToken
//.........这里部分代码省略.........
}
if (script->script_p >= script->end_p)
return EndOfScript (crossline);
tokenready = false;
//
// skip space
//
skipspace:
while (*script->script_p <= 32)
{
if (script->script_p >= script->end_p)
return EndOfScript (crossline);
if (*script->script_p++ == '\n')
{
if (!crossline)
Error ("Line %i is incomplete\n",scriptline);
scriptline = ++script->line;
}
}
if (script->script_p >= script->end_p)
return EndOfScript (crossline);
if (*script->script_p == ';' || *script->script_p == '#' || // semicolon and # is comment field
(*script->script_p == '/' && *((script->script_p)+1) == '/')) // also make // a comment field
{
if (!crossline)
Error ("Line %i is incomplete\n",scriptline);
while (*script->script_p++ != '\n')
if (script->script_p >= script->end_p)
return EndOfScript (crossline);
goto skipspace;
}
//
// copy token
//
token_p = token;
if (*script->script_p == '"')
{
// quoted token
script->script_p++;
while (*script->script_p != '"')
{
*token_p++ = *script->script_p++;
if (script->script_p == script->end_p)
break;
if (token_p == &token[MAXTOKEN])
Error ("Token too large on line %i\n",scriptline);
}
script->script_p++;
}
else
{
if ( isalpha( *script->script_p ) || *script->script_p == '_' )
{
// regular token
while ( isalnum( *script->script_p ) || *script->script_p == '_' )
{
*token_p++ = *script->script_p++;
if (script->script_p == script->end_p)
break;
if (token_p == &token[MAXTOKEN])
Error ("Token too large on line %i\n",scriptline);
}
}
else if ( isdigit( *script->script_p ) || *script->script_p == '.' )
{
// regular token
while ( isdigit( *script->script_p ) || *script->script_p == '.' )
{
*token_p++ = *script->script_p++;
if (script->script_p == script->end_p)
break;
if (token_p == &token[MAXTOKEN])
Error ("Token too large on line %i\n",scriptline);
}
}
else
{
// single char
*token_p++ = *script->script_p++;
}
}
*token_p = 0;
if (!stricmp (token, "$include"))
{
GetToken (false);
AddScriptToStack (token);
return GetToken (crossline);
}
return true;
}
示例10: LoadWadconfig
void LoadWadconfig (const char *filename, const char *configname)
{
int found = 0;
int count = 0;
int size;
char *buffer;
size = LoadFile (filename, &buffer);
ParseFromMemory (buffer, size);
while (GetToken (true))
{
bool skip = true;
if (!stricmp (g_token, configname))
{
skip = false;
found++;
}
if (!GetToken (true) || stricmp (g_token, "{"))
{
Error ("parsing '%s': missing '{'.", filename);
}
while (1)
{
if (!GetToken (true))
{
Error ("parsing '%s': unexpected end of file.", filename);
}
if (!stricmp (g_token, "}"))
{
break;
}
if (skip)
{
continue;
}
bool include = false;
wadpath_t *current;
if (!stricmp (g_token, "include"))
{
include = true;
if (!GetToken (true))
{
Error ("parsing '%s': unexpected end of file.", filename);
}
}
Developer (DEVELOPER_LEVEL_MESSAGE, "LoadWadconfig: adding wad file '%s'.\n", g_token);
if (g_iNumWadPaths >= MAX_WADPATHS)
{
Error ("parsing '%s': too many wad files.", filename);
}
count++;
current = (wadpath_t *)malloc (sizeof (wadpath_t));
hlassume (current != NULL, assume_NoMemory);
g_pWadPaths[g_iNumWadPaths] = current;
g_iNumWadPaths++;
safe_strncpy (current->path, g_token, _MAX_PATH);
current->usedbymap = true; // what's this?
current->usedtextures = 0;
if (include)
{
Developer (DEVELOPER_LEVEL_MESSAGE, "LoadWadcfgfile: including '%s'.\n", current->path);
g_WadInclude.push_back(current->path);
}
}
}
if (found == 0)
{
Error ("Couldn't find wad configuration '%s' in file '%s'.\n", configname, filename);
}
if (found >= 2)
{
Error ("Found more than one wad configuration for '%s' in file '%s'.\n", configname, filename);
}
free (buffer); // should not be freed because it is still being used as script buffer
Log ("Using custom wadfile configuration: '%s' (with %i wad%s)\n", configname, count, count > 1 ? "s" : "");
}
示例11: DefineMacro
void DefineMacro( char *macroname )
{
script_t *pmacro = (script_t *)malloc( sizeof( script_t ) );
strcpy( pmacro->filename, macroname );
pmacro->line = script->line;
pmacro->nummacroparams = 0;
char *mp = pmacro->macrobuffer;
char *cp = script->script_p;
while (TokenAvailable( ))
{
GetToken( false );
if (token[0] == '\\' && token[1] == '\\')
{
break;
}
cp = script->script_p;
pmacro->macroparam[pmacro->nummacroparams++] = mp;
strcpy( mp, token );
mp += strlen( token ) + 1;
if (mp >= pmacro->macrobuffer + sizeof( pmacro->macrobuffer ))
Error("Macro buffer overflow\n");
}
// roll back script_p to previous valid location
script->script_p = cp;
// find end of macro def
while (*cp && *cp != '\n')
{
//Msg("%d ", *cp );
if (*cp == '\\' && *(cp+1) == '\\')
{
// skip till end of line
while (*cp && *cp != '\n')
{
*cp = ' '; // replace with spaces
cp++;
}
if (*cp)
{
cp++;
}
}
else
{
cp++;
}
}
int size = (cp - script->script_p);
pmacro->buffer = (char *)malloc( size + 1);
memcpy( pmacro->buffer, script->script_p, size );
pmacro->buffer[size] = '\0';
pmacro->end_p = &pmacro->buffer[size];
macrolist[nummacros++] = pmacro;
script->script_p = cp;
}
示例12: SavePPBuffer
static struct expr *ParseAssertSlotValues(
void *theEnv,
EXEC_STATUS,
char *inputSource,
struct token *tempToken,
struct templateSlot *slotPtr,
int *error,
int constantsOnly)
{
struct expr *nextSlot;
struct expr *newField, *valueList, *lastValue;
int printError;
/*=============================*/
/* Handle a single field slot. */
/*=============================*/
if (slotPtr->multislot == FALSE)
{
/*=====================*/
/* Get the slot value. */
/*=====================*/
SavePPBuffer(theEnv,execStatus," ");
newField = GetAssertArgument(theEnv,execStatus,inputSource,tempToken,
error,RPAREN,constantsOnly,&printError);
if (*error)
{
if (printError) SyntaxErrorMessage(theEnv,execStatus,"deftemplate pattern");
return(NULL);
}
/*=================================================*/
/* A single field slot value must contain a value. */
/* Only a multifield slot can be empty. */
/*=================================================*/
if (newField == NULL)
{
*error = TRUE;
SingleFieldSlotCardinalityError(theEnv,execStatus,slotPtr->slotName->contents);
return(NULL);
}
/*==============================================*/
/* A function returning a multifield value can */
/* not be called to get the value for the slot. */
/*==============================================*/
if ((newField->type == FCALL) ? (ExpressionFunctionType(newField) == 'm') :
(newField->type == MF_VARIABLE))
{
*error = TRUE;
SingleFieldSlotCardinalityError(theEnv,execStatus,slotPtr->slotName->contents);
ReturnExpression(theEnv,execStatus,newField);
return(NULL);
}
/*============================*/
/* Move on to the next token. */
/*============================*/
GetToken(theEnv,execStatus,inputSource,tempToken);
}
/*========================================*/
/* Handle a multifield slot. Build a list */
/* of the values stored in the slot. */
/*========================================*/
else
{
SavePPBuffer(theEnv,execStatus," ");
valueList = GetAssertArgument(theEnv,execStatus,inputSource,tempToken,
error,RPAREN,constantsOnly,&printError);
if (*error)
{
if (printError) SyntaxErrorMessage(theEnv,execStatus,"deftemplate pattern");
return(NULL);
}
if (valueList == NULL)
{
PPBackup(theEnv,execStatus);
PPBackup(theEnv,execStatus);
SavePPBuffer(theEnv,execStatus,")");
}
lastValue = valueList;
while (lastValue != NULL) /* (tempToken->type != RPAREN) */
{
if (tempToken->type == RPAREN)
{ SavePPBuffer(theEnv,execStatus," "); }
else
{
/* PPBackup(theEnv,execStatus); */
SavePPBuffer(theEnv,execStatus," ");
/* SavePPBuffer(theEnv,execStatus,tempToken->printForm); */
//.........这里部分代码省略.........
示例13: GetToken
static struct templateSlot *ParseSlotLabel(
void *theEnv,
EXEC_STATUS,
char *inputSource,
struct token *tempToken,
struct deftemplate *theDeftemplate,
int *error,
int endType)
{
struct templateSlot *slotPtr;
short position;
/*========================*/
/* Initialize error flag. */
/*========================*/
*error = FALSE;
/*============================================*/
/* If token is a right parenthesis, then fact */
/* template definition is complete. */
/*============================================*/
GetToken(theEnv,execStatus,inputSource,tempToken);
if (tempToken->type == endType)
{ return(NULL); }
/*=======================================*/
/* Put a space between the template name */
/* and the first slot definition. */
/*=======================================*/
PPBackup(theEnv,execStatus);
SavePPBuffer(theEnv,execStatus," ");
SavePPBuffer(theEnv,execStatus,tempToken->printForm);
/*=======================================================*/
/* Slot definition begins with opening left parenthesis. */
/*=======================================================*/
if (tempToken->type != LPAREN)
{
SyntaxErrorMessage(theEnv,execStatus,"deftemplate pattern");
*error = TRUE;
return(NULL);
}
/*=============================*/
/* Slot name must be a symbol. */
/*=============================*/
GetToken(theEnv,execStatus,inputSource,tempToken);
if (tempToken->type != SYMBOL)
{
SyntaxErrorMessage(theEnv,execStatus,"deftemplate pattern");
*error = TRUE;
return(NULL);
}
/*======================================================*/
/* Check that the slot name is valid for this template. */
/*======================================================*/
if ((slotPtr = FindSlot(theDeftemplate,(SYMBOL_HN *) tempToken->value,&position)) == NULL)
{
InvalidDeftemplateSlotMessage(theEnv,execStatus,ValueToString(tempToken->value),
ValueToString(theDeftemplate->header.name),TRUE);
*error = TRUE;
return(NULL);
}
/*====================================*/
/* Return a pointer to the slot name. */
/*====================================*/
return(slotPtr);
}
示例14: LoadMapSettings
void LoadMapSettings(LPSTR szFileName)
{
if ( (SMDFile = fopen(szFileName, "r")) == NULL ) //ok
{
return;
}
SMDToken Token;
int iType = 0;
while ( true )
{
Token = GetToken();
if (Token == END )
{
break;
}
iType = TokenNumber;
while ( true )
{
Token = GetToken();
if ( Token == END )
{
break;
}
if ( iType >= 0 && iType <= MAX_NUMBER_MAP-1)
{
if ( strcmp("end", TokenString) == 0 )
{
break;
}
int ExpSingleInc = 0;
int ExpPartyInc = 0;
int DropIncrease = 0;
int DropExcIncrease = 0;
ExpSingleInc = TokenNumber;
Token = GetToken();
ExpPartyInc = TokenNumber;
Token = GetToken();
DropIncrease = TokenNumber;
Token = GetToken();
DropExcIncrease = TokenNumber;
Token = GetToken();
g_MAP_SETTINGS[iType].drop_zen_increase = TokenNumber;
g_MAP_SETTINGS[iType].exp_increase = ExpSingleInc;
g_MAP_SETTINGS[iType].exp_party_increase = ExpPartyInc;
g_MAP_SETTINGS[iType].drop_increase = DropIncrease;
g_MAP_SETTINGS[iType].drop_exc_increase = DropExcIncrease;
}
}
}
fclose(SMDFile);
}
示例15: MsgBox
BOOL TMonsterAIGroup::LoadData(LPSTR lpszFileName)
{
TMonsterAIGroup::s_bDataLoad = FALSE;
if ( !lpszFileName || !strcmp(lpszFileName, ""))
{
MsgBox("[Monster AI Group] - File load error : File Name Error");
return FALSE;
}
try
{
SMDToken Token;
SMDFile = fopen(lpszFileName, "r"); //ok
if ( SMDFile == NULL )
{
MsgBox("[Monster AI Group] - Can't Open %s ", lpszFileName);
return FALSE;
}
int iType = -1;
while ( true )
{
Token = GetToken();
if ( Token == END )
break;
iType = TokenNumber;
while ( true )
{
if ( iType == 0 )
{
int iGroupNumber = -1;
int iGuid = -1;
int iClass = -1;
int iRank = -1;
int iStartAI = 0;
int iAI01 = 0;
int iAI02 = 0;
int iAI03 = 0;
int iCreateType = -1;
int iMapNumber = -1;
int iStartX = -1;
int iStartY = -1;
int iStartDir = -1;
int iRegenType = -1;
Token = GetToken();
if ( !strcmp("end", TokenString))
break;
iGroupNumber = TokenNumber;
Token = GetToken();
iGuid = TokenNumber;
Token = GetToken();
iClass = TokenNumber;
Token = GetToken();
iRank = TokenNumber;
Token = GetToken();
iStartAI = TokenNumber;
Token = GetToken();
iAI01 = TokenNumber;
Token = GetToken();
iAI02 = TokenNumber;
Token = GetToken();
iAI03 = TokenNumber;
Token = GetToken();
iCreateType = TokenNumber;
Token = GetToken();
iMapNumber = TokenNumber;
Token = GetToken();
iStartX = TokenNumber;
Token = GetToken();
iStartY = TokenNumber;
Token = GetToken();
iStartDir = TokenNumber;
Token = GetToken();
iRegenType = TokenNumber;
if ( iGroupNumber > MAX_MONSTER_AI_GROUP )
{
MsgBox("[Monster AI Group] Exceed Max GroupNumber %d",
//.........这里部分代码省略.........