This commit is contained in:
Walter Julius Hennecke 2013-04-27 23:32:21 +02:00
parent 3b23bfa353
commit d4dbfaec23
4 changed files with 26 additions and 43 deletions

View File

@ -91,17 +91,20 @@ typedef enum {
LMT_IGNORE LMT_IGNORE
} bgLexMorphemType; } bgLexMorphemType;
typedef struct bgLexMorphem_s bgLexMorphem; typedef struct bgLexMorphemData_s bgLexMorphemData;
struct bgLexMorphem_s { struct bgLexMorphemData_s {
bgLexMorphemType type; char str[BIG_INFO_STRING];
union {
char* string;
bgLexSymbol symbol; bgLexSymbol symbol;
int numInteger; int numInteger;
double numDouble; double numDouble;
vec3_t vector3; vec3_t vector3;
vec4_t vector4; vec4_t vector4;
} data; };
typedef struct bgLexMorphem_s bgLexMorphem;
struct bgLexMorphem_s {
bgLexMorphemType type;
bgLexMorphemData data;
int line; int line;
int column; int column;
}; };

View File

@ -17,7 +17,7 @@ KEYWORD [a-zA-Z]+[a-zA-Z0-9]*
%% %%
\"[^\"]*\" { \"[^\"]*\" {
yyextra->type = LMT_STRING; yyextra->type = LMT_STRING;
yyextra->data.string = yytext; strncpy(yyextra->data.str, yytext, BIG_INFO_STRING);
yyextra->column += strlen(yytext); yyextra->column += strlen(yytext);
return 1; return 1;
} }

View File

@ -852,7 +852,7 @@ YY_RULE_SETUP
#line 18 "bg_lex.lex" #line 18 "bg_lex.lex"
{ {
yyextra->type = LMT_STRING; yyextra->type = LMT_STRING;
yyextra->data.string = yytext; strncpy(yyextra->data.str, yytext, BIG_INFO_STRING);
yyextra->column += strlen(yytext); yyextra->column += strlen(yytext);
return 1; return 1;
} }

View File

@ -3,6 +3,7 @@
#include "g_local.h" #include "g_local.h"
#include "g_groups.h" #include "g_groups.h"
#include "bg_lex.h"
extern void BG_LoadItemNames(void); extern void BG_LoadItemNames(void);
extern qboolean BG_ParseRankNames ( char* fileName, rankNames_t rankNames[] ); 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) { static void G_LoadTimedMessages(void) {
fileHandle_t f; fileHandle_t f;
bgLex* lexer;
char* buffer; char* buffer;
char* textPtr;
char* token;
int len; int len;
int i; int i = 0;
len = trap_FS_FOpenFile("timedmessages.cfg", &f, FS_READ); len = trap_FS_FOpenFile("timedmessages.cfg", &f, FS_READ);
if(!len) return; if(!len) return;
@ -935,43 +935,23 @@ static void G_LoadTimedMessages(void) {
} }
trap_FS_Read(buffer, len, f); trap_FS_Read(buffer, len, f);
lexer = bgLex_create(buffer);
textPtr = buffer; while(bgLex_lex(lexer)) {
COM_BeginParseSession(); if(lexer->morphem.type == LMT_STRING) {
token = COM_Parse(&textPtr); char tmp[BIG_INFO_STRING];
if(token[0] != '{') { Com_sprintf(tmp, BIG_INFO_STRING, "%s\0", lexer->morphem.data.str);
G_Printf("G_LoadTimedMessages - timedmessages.cfg not beginning with '{'\n"); G_Printf("%s --> len = %d\n", tmp, strlen(tmp));
trap_FS_FCloseFile(f); level.timedMessages->append(level.timedMessages, tmp, LT_STRING, strlen(tmp));
free(buffer);
return;
}
for(i = 0; i < 10; i++) {
token = COM_Parse(&textPtr);
if(!token[0]) {
break;
} }
if(!strcmp(token, "message")) { if(lexer->morphem.type == LMT_SYMBOL) {
if(COM_ParseString(&textPtr, &token)) { G_Printf(S_COLOR_MAGENTA "Symbol: %d\n", lexer->morphem.data.symbol);
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;
} }
} }
bgLex_destroy(lexer);
trap_FS_FCloseFile(f); trap_FS_FCloseFile(f);
free(buffer); free(buffer);
} }