From 5c3773a9021f3c266eb722f71fea4b3cd698f983 Mon Sep 17 00:00:00 2001 From: Walter Julius Hennecke Date: Sun, 28 Apr 2013 01:59:14 +0200 Subject: [PATCH] Modified lexer to automatically skip LMT_IGNORE --- code/game/bg_lex.lex | 13 ++++++++++++- code/game/bg_lex.yy.c | 13 ++++++++++++- code/game/g_main.c | 12 ++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/code/game/bg_lex.lex b/code/game/bg_lex.lex index ae67e60..e286973 100644 --- a/code/game/bg_lex.lex +++ b/code/game/bg_lex.lex @@ -417,10 +417,21 @@ void bgLex_destroy(bgLex* lex) { } int bgLex_lex(bgLex* lex) { + int res; + if(lex->morphem->data.str != NULL) { free(lex->morphem->data.str); } - return yylex(lex->lex); + + /* skip LMT_IGNORE */ + while(1) { + res = yylex(lex->lex); + if(lex->morphem->type != LMT_IGNORE) { + break; + } + } + + return res; } bgLexSymbol bgLex_textToSymbol(char* text) { diff --git a/code/game/bg_lex.yy.c b/code/game/bg_lex.yy.c index 58f041a..1828e73 100644 --- a/code/game/bg_lex.yy.c +++ b/code/game/bg_lex.yy.c @@ -2559,10 +2559,21 @@ void bgLex_destroy(bgLex* lex) { } int bgLex_lex(bgLex* lex) { + int res; + if(lex->morphem->data.str != NULL) { free(lex->morphem->data.str); } - return yylex(lex->lex); + + /* skip LMT_IGNORE */ + while(1) { + res = yylex(lex->lex); + if(lex->morphem->type != LMT_IGNORE) { + break; + } + } + + return res; } bgLexSymbol bgLex_textToSymbol(char* text) { diff --git a/code/game/g_main.c b/code/game/g_main.c index bc57f6a..c3a782a 100644 --- a/code/game/g_main.c +++ b/code/game/g_main.c @@ -935,9 +935,15 @@ static void G_LoadTimedMessages(void) { } trap_FS_Read(buffer, len, f); + trap_FS_FCloseFile(f); lexer = bgLex_create(buffer); + if(lexer == NULL) { + G_Printf(S_COLOR_RED "ERROR: Could not create new bgLex to lex timed messages.\n"); + free(buffer); + } + while(bgLex_lex(lexer)) { if(lexer->morphem->type == LMT_IGNORE) { continue; @@ -949,9 +955,9 @@ static void G_LoadTimedMessages(void) { G_Printf(S_COLOR_YELLOW "WARNING: Unexpected token in timedmessages.cfg:%d:%d!\n", lexer->morphem->line, lexer->morphem->column); } } + G_Printf("Loaded %d timed messages.\n", level.timedMessages->length); bgLex_destroy(lexer); - trap_FS_FCloseFile(f); free(buffer); } @@ -1095,9 +1101,11 @@ static void G_LoadServerChangeFile(void) { file_len = trap_FS_FOpenFile(fileRoute, &f, FS_READ); - if(!file_len) + if(!file_len) { return; + } + // TODO dynamic buffer size buffer = (char *)malloc(32000 * sizeof(char)); if(!buffer) { G_Printf(S_COLOR_RED "ERROR: Was unable to allocate %i bytes.\n", 32000 * sizeof(char) );