diff --git a/code/game/bg_lex.h b/code/game/bg_lex.h index fc7bf2a..cb30fc7 100644 --- a/code/game/bg_lex.h +++ b/code/game/bg_lex.h @@ -91,17 +91,20 @@ typedef enum { LMT_IGNORE } bgLexMorphemType; -typedef struct bgLexMorphem_s bgLexMorphem; -struct bgLexMorphem_s { - bgLexMorphemType type; - union { - char* string; +typedef struct bgLexMorphemData_s bgLexMorphemData; +struct bgLexMorphemData_s { + char str[BIG_INFO_STRING]; bgLexSymbol symbol; int numInteger; double numDouble; vec3_t vector3; - vec4_t vector4; - } data; + vec4_t vector4; +}; + +typedef struct bgLexMorphem_s bgLexMorphem; +struct bgLexMorphem_s { + bgLexMorphemType type; + bgLexMorphemData data; int line; int column; }; diff --git a/code/game/bg_lex.lex b/code/game/bg_lex.lex index 4b35c8c..d65782b 100644 --- a/code/game/bg_lex.lex +++ b/code/game/bg_lex.lex @@ -17,7 +17,7 @@ KEYWORD [a-zA-Z]+[a-zA-Z0-9]* %% \"[^\"]*\" { yyextra->type = LMT_STRING; - yyextra->data.string = yytext; + strncpy(yyextra->data.str, yytext, BIG_INFO_STRING); yyextra->column += strlen(yytext); return 1; } diff --git a/code/game/bg_lex.yy.c b/code/game/bg_lex.yy.c index 963eb4b..2ea5289 100644 --- a/code/game/bg_lex.yy.c +++ b/code/game/bg_lex.yy.c @@ -852,7 +852,7 @@ YY_RULE_SETUP #line 18 "bg_lex.lex" { yyextra->type = LMT_STRING; - yyextra->data.string = yytext; + strncpy(yyextra->data.str, yytext, BIG_INFO_STRING); yyextra->column += strlen(yytext); return 1; } diff --git a/code/game/g_main.c b/code/game/g_main.c index 8ab7963..627da8f 100644 --- a/code/game/g_main.c +++ b/code/game/g_main.c @@ -3,6 +3,7 @@ #include "g_local.h" #include "g_groups.h" +#include "bg_lex.h" extern void BG_LoadItemNames(void); extern qboolean BG_ParseRankNames ( char* fileName, rankNames_t rankNames[] ); @@ -910,11 +911,10 @@ void SP_target_location (gentity_t *ent); static void G_LoadTimedMessages(void) { fileHandle_t f; + bgLex* lexer; char* buffer; - char* textPtr; - char* token; int len; - int i; + int i = 0; len = trap_FS_FOpenFile("timedmessages.cfg", &f, FS_READ); if(!len) return; @@ -935,43 +935,23 @@ static void G_LoadTimedMessages(void) { } trap_FS_Read(buffer, len, f); + + lexer = bgLex_create(buffer); - textPtr = buffer; - COM_BeginParseSession(); - token = COM_Parse(&textPtr); - if(token[0] != '{') { - G_Printf("G_LoadTimedMessages - timedmessages.cfg not beginning with '{'\n"); - trap_FS_FCloseFile(f); - free(buffer); - return; - } - - for(i = 0; i < 10; i++) { - token = COM_Parse(&textPtr); - - if(!token[0]) { - break; + while(bgLex_lex(lexer)) { + if(lexer->morphem.type == LMT_STRING) { + char tmp[BIG_INFO_STRING]; + Com_sprintf(tmp, BIG_INFO_STRING, "%s\0", lexer->morphem.data.str); + G_Printf("%s --> len = %d\n", tmp, strlen(tmp)); + level.timedMessages->append(level.timedMessages, tmp, LT_STRING, strlen(tmp)); } - if(!strcmp(token, "message")) { - if(COM_ParseString(&textPtr, &token)) { - G_Printf("G_LoadTimedMessages - invalid value '%s'\n", token); - SkipRestOfLine(&textPtr); - continue; - } - - level.timedMessages->append(level.timedMessages, token, LT_STRING, strlen(token)+1); - } else { - if(token[0] == '}') { - break; - } - - G_Printf("G_LoadTimedMessages - invalid token '%s'\n", token); - SkipRestOfLine(&textPtr); - continue; + if(lexer->morphem.type == LMT_SYMBOL) { + G_Printf(S_COLOR_MAGENTA "Symbol: %d\n", lexer->morphem.data.symbol); } } + bgLex_destroy(lexer); trap_FS_FCloseFile(f); free(buffer); }