|
@@ -133,23 +133,27 @@ static LangString *HashFind(const char *
|
|
|
#ifdef _MSC_VER
|
|
|
# define LINE_NUM_FMT "(%d)"
|
|
|
#else
|
|
|
# define LINE_NUM_FMT ":%d"
|
|
|
#endif
|
|
|
|
|
|
static void CDECL strgen_warning(const char *s, ...) WARN_FORMAT(1, 2);
|
|
|
|
|
|
static void CDECL strgen_warning(const char *s, ...)
|
|
|
{
|
|
|
char buf[1024];
|
|
|
va_list va;
|
|
|
va_start(va, s);
|
|
|
vsnprintf(buf, lengthof(buf), s, va);
|
|
|
va_end(va);
|
|
|
fprintf(stderr, "%s" LINE_NUM_FMT ": warning: %s\n", _file, _cur_line, buf);
|
|
|
_warnings++;
|
|
|
}
|
|
|
|
|
|
static void CDECL strgen_error(const char *s, ...) WARN_FORMAT(1, 2);
|
|
|
|
|
|
static void CDECL strgen_error(const char *s, ...)
|
|
|
{
|
|
|
char buf[1024];
|
|
|
va_list va;
|
|
|
va_start(va, s);
|
|
|
vsnprintf(buf, lengthof(buf), s, va);
|
|
@@ -460,13 +464,13 @@ static const CmdStruct *ParseCommandStri
|
|
|
do {
|
|
|
c = *s++;
|
|
|
} while (c != '}' && c != ' ' && c != '=' && c != '.' && c != 0);
|
|
|
|
|
|
cmd = FindCmd(start, s - start - 1);
|
|
|
if (cmd == NULL) {
|
|
|
strgen_error("Undefined command '%.*s'", s - start - 1, start);
|
|
|
strgen_error("Undefined command '%.*s'", (int)(s - start - 1), start);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
if (c == '.') {
|
|
|
const char *casep = s;
|
|
|
|
|
@@ -597,13 +601,13 @@ static void ExtractCommandString(ParsedC
|
|
|
if (argno != -1) argidx = argno;
|
|
|
if (argidx < 0 || (uint)argidx >= lengthof(p->cmd)) error("invalid param idx %d", argidx);
|
|
|
if (p->cmd[argidx] != NULL && p->cmd[argidx] != ar) error("duplicate param idx %d", argidx);
|
|
|
|
|
|
p->cmd[argidx++] = ar;
|
|
|
} else if (!(ar->flags & C_DONTCOUNT)) { // Ignore some of them
|
|
|
if (p->np >= lengthof(p->pairs)) error("too many commands in string, max %d", lengthof(p->pairs));
|
|
|
if (p->np >= lengthof(p->pairs)) error("too many commands in string, max " PRINTF_SIZE, lengthof(p->pairs));
|
|
|
p->pairs[p->np].a = ar;
|
|
|
p->pairs[p->np].v = param[0] != '\0' ? strdup(param) : "";
|
|
|
p->np++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -731,13 +735,13 @@ static void HandleString(char *str, bool
|
|
|
strgen_error("Base string name '%s' doesn't exist yet. Define it before defining a case.", str);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (ent == NULL) {
|
|
|
if (_strings[_next_string_id]) {
|
|
|
strgen_error("String ID 0x%X for '%s' already in use by '%s'", ent, str, _strings[_next_string_id]->name);
|
|
|
strgen_error("String ID 0x%X for '%s' already in use by '%s'", _next_string_id, str, _strings[_next_string_id]->name);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/* Allocate a new LangString */
|
|
|
ent = CallocT<LangString>(1);
|
|
|
_strings[_next_string_id] = ent;
|