mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r16591) -Codechange: some coding style in strgen
This commit is contained in:
parent
98b4f1fce2
commit
cdc0c092f1
|
@ -238,7 +238,7 @@ static void EmitSetX(char *buf, int value)
|
|||
{
|
||||
char *err;
|
||||
int x = strtol(buf, &err, 0);
|
||||
if (*err != 0) error("SetX param invalid");
|
||||
if (*err != '\0') error("SetX param invalid");
|
||||
PutUtf8(SCC_SETX);
|
||||
PutByte((byte)x);
|
||||
}
|
||||
|
@ -247,12 +247,10 @@ static void EmitSetX(char *buf, int value)
|
|||
static void EmitSetXY(char *buf, int value)
|
||||
{
|
||||
char *err;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
x = strtol(buf, &err, 0);
|
||||
int x = strtol(buf, &err, 0);
|
||||
if (*err != ' ') error("SetXY param invalid");
|
||||
y = strtol(err + 1, &err, 0);
|
||||
int y = strtol(err + 1, &err, 0);
|
||||
if (*err != 0) error("SetXY param invalid");
|
||||
|
||||
PutUtf8(SCC_SETXY);
|
||||
|
@ -271,14 +269,13 @@ bool ParseRelNum(char **buf, int *value)
|
|||
const char *s = *buf;
|
||||
char *end;
|
||||
bool rel = false;
|
||||
int v;
|
||||
|
||||
while (*s == ' ' || *s == '\t') s++;
|
||||
if (*s == '+') {
|
||||
rel = true;
|
||||
s++;
|
||||
}
|
||||
v = strtol(s, &end, 0);
|
||||
int v = strtol(s, &end, 0);
|
||||
if (end == s) return false;
|
||||
if (rel || v < 0) {
|
||||
*value += v;
|
||||
|
@ -329,13 +326,10 @@ static int TranslateArgumentIdx(int arg);
|
|||
|
||||
static void EmitWordList(const char * const *words, uint nw)
|
||||
{
|
||||
uint i;
|
||||
uint j;
|
||||
|
||||
PutByte(nw);
|
||||
for (i = 0; i < nw; i++) PutByte(strlen(words[i]));
|
||||
for (i = 0; i < nw; i++) {
|
||||
for (j = 0; words[i][j] != '\0'; j++) PutByte(words[i][j]);
|
||||
for (uint i = 0; i < nw; i++) PutByte(strlen(words[i]));
|
||||
for (uint i = 0; i < nw; i++) {
|
||||
for (uint j = 0; words[i][j] != '\0'; j++) PutByte(words[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -354,8 +348,9 @@ static void EmitPlural(char *buf, int value)
|
|||
if (words[nw] == NULL) break;
|
||||
}
|
||||
|
||||
if (nw == 0)
|
||||
if (nw == 0) {
|
||||
error("%s: No plural words", _cur_ident);
|
||||
}
|
||||
|
||||
if (_plural_forms[_lang_pluralform].plural_count != nw) {
|
||||
if (_translated) {
|
||||
|
@ -389,20 +384,20 @@ static void EmitGender(char *buf, int value)
|
|||
|
||||
/* This is a {G=DER} command */
|
||||
for (nw = 0; ; nw++) {
|
||||
if (nw >= 8) error("G argument '%s' invalid", buf);
|
||||
if (nw >= MAX_NUM_GENDER) error("G argument '%s' invalid", buf);
|
||||
if (strcmp(buf, _genders[nw]) == 0) break;
|
||||
}
|
||||
/* now nw contains the gender index */
|
||||
PutUtf8(SCC_GENDER_INDEX);
|
||||
PutByte(nw);
|
||||
} else {
|
||||
const char *words[8];
|
||||
const char *words[MAX_NUM_GENDER];
|
||||
|
||||
/* This is a {G 0 foo bar two} command.
|
||||
* If no relative number exists, default to +0 */
|
||||
if (!ParseRelNum(&buf, &argidx)) {}
|
||||
|
||||
for (nw = 0; nw < 8; nw++) {
|
||||
for (nw = 0; nw < MAX_NUM_GENDER; nw++) {
|
||||
words[nw] = ParseWord(&buf);
|
||||
if (words[nw] == NULL) break;
|
||||
}
|
||||
|
@ -415,9 +410,7 @@ static void EmitGender(char *buf, int value)
|
|||
|
||||
static const CmdStruct *FindCmd(const char *s, int len)
|
||||
{
|
||||
const CmdStruct *cs;
|
||||
|
||||
for (cs = _cmd_structs; cs != endof(_cmd_structs); cs++) {
|
||||
for (const CmdStruct *cs = _cmd_structs; cs != endof(_cmd_structs); cs++) {
|
||||
if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs;
|
||||
}
|
||||
return NULL;
|
||||
|
@ -425,9 +418,7 @@ static const CmdStruct *FindCmd(const char *s, int len)
|
|||
|
||||
static uint ResolveCaseName(const char *str, uint len)
|
||||
{
|
||||
uint i;
|
||||
|
||||
for (i = 0; i < MAX_NUM_CASES; i++) {
|
||||
for (uint i = 0; i < MAX_NUM_CASES; i++) {
|
||||
if (memcmp(_cases[i], str, len) == 0 && _cases[i][len] == 0) return i + 1;
|
||||
}
|
||||
error("Invalid case-name '%s'", str);
|
||||
|
@ -439,8 +430,7 @@ static uint ResolveCaseName(const char *str, uint len)
|
|||
static const CmdStruct *ParseCommandString(const char **str, char *param, int *argno, int *casei)
|
||||
{
|
||||
const char *s = *str, *start;
|
||||
const CmdStruct *cmd;
|
||||
byte c;
|
||||
char c;
|
||||
|
||||
*argno = -1;
|
||||
*casei = -1;
|
||||
|
@ -465,7 +455,7 @@ static const CmdStruct *ParseCommandString(const char **str, char *param, int *a
|
|||
c = *s++;
|
||||
} while (c != '}' && c != ' ' && c != '=' && c != '.' && c != 0);
|
||||
|
||||
cmd = FindCmd(start, s - start - 1);
|
||||
const CmdStruct *cmd = FindCmd(start, s - start - 1);
|
||||
if (cmd == NULL) {
|
||||
strgen_error("Undefined command '%.*s'", (int)(s - start - 1), start);
|
||||
return NULL;
|
||||
|
@ -474,10 +464,13 @@ static const CmdStruct *ParseCommandString(const char **str, char *param, int *a
|
|||
if (c == '.') {
|
||||
const char *casep = s;
|
||||
|
||||
if (!(cmd->flags & C_CASE))
|
||||
if (!(cmd->flags & C_CASE)) {
|
||||
error("Command '%s' can't have a case", cmd->cmd);
|
||||
}
|
||||
|
||||
do c = *s++; while (c != '}' && c != ' ' && c != '\0');
|
||||
do {
|
||||
c = *s++;
|
||||
} while (c != '}' && c != ' ' && c != '\0');
|
||||
*casei = ResolveCaseName(casep, s - casep - 1);
|
||||
}
|
||||
|
||||
|
@ -636,7 +629,6 @@ static bool CheckCommandsMatch(char *a, char *b, const char *name)
|
|||
{
|
||||
ParsedCommandStruct templ;
|
||||
ParsedCommandStruct lang;
|
||||
uint i, j;
|
||||
bool result = true;
|
||||
|
||||
ExtractCommandString(&templ, b, true);
|
||||
|
@ -648,10 +640,10 @@ static bool CheckCommandsMatch(char *a, char *b, const char *name)
|
|||
result = false;
|
||||
}
|
||||
|
||||
for (i = 0; i < templ.np; i++) {
|
||||
for (uint i = 0; i < templ.np; i++) {
|
||||
/* see if we find it in lang, and zero it out */
|
||||
bool found = false;
|
||||
for (j = 0; j < lang.np; j++) {
|
||||
for (uint j = 0; j < lang.np; j++) {
|
||||
if (templ.pairs[i].a == lang.pairs[j].a &&
|
||||
strcmp(templ.pairs[i].v, lang.pairs[j].v) == 0) {
|
||||
/* it was found in both. zero it out from lang so we don't find it again */
|
||||
|
@ -669,7 +661,7 @@ static bool CheckCommandsMatch(char *a, char *b, const char *name)
|
|||
|
||||
/* if we reach here, all non consumer commands match up.
|
||||
* Check if the non consumer commands match up also. */
|
||||
for (i = 0; i < lengthof(templ.cmd); i++) {
|
||||
for (uint i = 0; i < lengthof(templ.cmd); i++) {
|
||||
if (TranslateCmdForCompare(templ.cmd[i]) != TranslateCmdForCompare(lang.cmd[i])) {
|
||||
strgen_warning("%s: Param idx #%d '%s' doesn't match with template command '%s'", name, i,
|
||||
lang.cmd[i] == NULL ? "<empty>" : lang.cmd[i]->cmd,
|
||||
|
@ -683,10 +675,6 @@ static bool CheckCommandsMatch(char *a, char *b, const char *name)
|
|||
|
||||
static void HandleString(char *str, bool master)
|
||||
{
|
||||
char *s, *t;
|
||||
LangString *ent;
|
||||
char *casep;
|
||||
|
||||
if (*str == '#') {
|
||||
if (str[1] == '#' && str[2] != '#') HandlePragma(str + 2);
|
||||
return;
|
||||
|
@ -695,35 +683,34 @@ static void HandleString(char *str, bool master)
|
|||
/* Ignore comments & blank lines */
|
||||
if (*str == ';' || *str == ' ' || *str == '\0') return;
|
||||
|
||||
s = strchr(str, ':');
|
||||
char *s = strchr(str, ':');
|
||||
if (s == NULL) {
|
||||
strgen_error("Line has no ':' delimiter");
|
||||
return;
|
||||
}
|
||||
|
||||
char *t;
|
||||
/* Trim spaces.
|
||||
* After this str points to the command name, and s points to the command contents */
|
||||
for (t = s; t > str && (t[-1] == ' ' || t[-1] == '\t'); t--);
|
||||
for (t = s; t > str && (t[-1] == ' ' || t[-1] == '\t'); t--) {}
|
||||
*t = 0;
|
||||
s++;
|
||||
|
||||
/* Check string is valid UTF-8 */
|
||||
{
|
||||
const char *tmp;
|
||||
for (tmp = s; *tmp != '\0';) {
|
||||
size_t len = Utf8Validate(tmp);
|
||||
if (len == 0) error("Invalid UTF-8 sequence in '%s'", s);
|
||||
tmp += len;
|
||||
}
|
||||
const char *tmp;
|
||||
for (tmp = s; *tmp != '\0';) {
|
||||
size_t len = Utf8Validate(tmp);
|
||||
if (len == 0) error("Invalid UTF-8 sequence in '%s'", s);
|
||||
tmp += len;
|
||||
}
|
||||
|
||||
/* Check if the string has a case..
|
||||
* The syntax for cases is IDENTNAME.case */
|
||||
casep = strchr(str, '.');
|
||||
if (casep) *casep++ = 0;
|
||||
char *casep = strchr(str, '.');
|
||||
if (casep) *casep++ = '\0';
|
||||
|
||||
/* Check if this string already exists.. */
|
||||
ent = HashFind(str);
|
||||
LangString *ent = HashFind(str);
|
||||
|
||||
if (master) {
|
||||
if (ent != NULL && casep == NULL) {
|
||||
|
@ -897,18 +884,16 @@ static uint CountInUse(uint grp)
|
|||
|
||||
bool CompareFiles(const char *n1, const char *n2)
|
||||
{
|
||||
FILE *f1, *f2;
|
||||
char b1[4096];
|
||||
char b2[4096];
|
||||
size_t l1, l2;
|
||||
|
||||
f2 = fopen(n2, "rb");
|
||||
FILE *f2 = fopen(n2, "rb");
|
||||
if (f2 == NULL) return false;
|
||||
|
||||
f1 = fopen(n1, "rb");
|
||||
FILE *f1 = fopen(n1, "rb");
|
||||
if (f1 == NULL) error("can't open %s", n1);
|
||||
|
||||
size_t l1, l2;
|
||||
do {
|
||||
char b1[4096];
|
||||
char b2[4096];
|
||||
l1 = fread(b1, 1, sizeof(b1), f1);
|
||||
l2 = fread(b2, 1, sizeof(b2), f2);
|
||||
|
||||
|
@ -927,18 +912,16 @@ bool CompareFiles(const char *n1, const char *n2)
|
|||
|
||||
static void WriteStringsH(const char *filename)
|
||||
{
|
||||
FILE *out;
|
||||
int i;
|
||||
int next = -1;
|
||||
|
||||
out = fopen("tmp.xxx", "w");
|
||||
FILE *out = fopen("tmp.xxx", "w");
|
||||
if (out == NULL) error("can't open tmp.xxx");
|
||||
|
||||
fprintf(out, "/* This file is automatically generated. Do not modify */\n\n");
|
||||
fprintf(out, "#ifndef TABLE_STRINGS_H\n");
|
||||
fprintf(out, "#define TABLE_STRINGS_H\n");
|
||||
|
||||
for (i = 0; i != lengthof(_strings); i++) {
|
||||
for (int i = 0; i != lengthof(_strings); i++) {
|
||||
if (_strings[i] != NULL) {
|
||||
if (next != i) fprintf(out, "\n");
|
||||
fprintf(out, "static const StringID %s = 0x%X;\n", _strings[i]->name, i);
|
||||
|
@ -973,12 +956,13 @@ static void WriteStringsH(const char *filename)
|
|||
|
||||
static int TranslateArgumentIdx(int argidx)
|
||||
{
|
||||
int i, sum;
|
||||
int sum;
|
||||
|
||||
if (argidx < 0 || (uint)argidx >= lengthof(_cur_pcs.cmd))
|
||||
if (argidx < 0 || (uint)argidx >= lengthof(_cur_pcs.cmd)) {
|
||||
error("invalid argidx %d", argidx);
|
||||
}
|
||||
|
||||
for (i = sum = 0; i < argidx; i++) {
|
||||
for (int i = sum = 0; i < argidx; i++) {
|
||||
const CmdStruct *cs = _cur_pcs.cmd[i];
|
||||
sum += (cs != NULL) ? cs->consumes : 1;
|
||||
}
|
||||
|
@ -995,11 +979,6 @@ static void PutArgidxCommand()
|
|||
|
||||
static void PutCommandString(const char *str)
|
||||
{
|
||||
const CmdStruct *cs;
|
||||
char param[256];
|
||||
int argno;
|
||||
int casei;
|
||||
|
||||
_cur_argidx = 0;
|
||||
|
||||
while (*str != '\0') {
|
||||
|
@ -1008,7 +987,11 @@ static void PutCommandString(const char *str)
|
|||
PutByte(*str++);
|
||||
continue;
|
||||
}
|
||||
cs = ParseCommandString(&str, param, &argno, &casei);
|
||||
|
||||
char param[256];
|
||||
int argno;
|
||||
int casei;
|
||||
const CmdStruct *cs = ParseCommandString(&str, param, &argno, &casei);
|
||||
if (cs == NULL) break;
|
||||
|
||||
if (casei != -1) {
|
||||
|
@ -1050,17 +1033,14 @@ static void WriteLength(FILE *f, uint length)
|
|||
|
||||
static void WriteLangfile(const char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
uint in_use[32];
|
||||
LanguagePackHeader hdr;
|
||||
uint i;
|
||||
uint j;
|
||||
|
||||
f = fopen(filename, "wb");
|
||||
FILE *f = fopen(filename, "wb");
|
||||
if (f == NULL) error("can't open %s", filename);
|
||||
|
||||
memset(&hdr, 0, sizeof(hdr));
|
||||
for (i = 0; i != 32; i++) {
|
||||
for (int i = 0; i != 32; i++) {
|
||||
uint n = CountInUse(i);
|
||||
|
||||
in_use[i] = n;
|
||||
|
@ -1082,8 +1062,8 @@ static void WriteLangfile(const char *filename)
|
|||
|
||||
fwrite(&hdr, sizeof(hdr), 1, f);
|
||||
|
||||
for (i = 0; i != 32; i++) {
|
||||
for (j = 0; j != in_use[i]; j++) {
|
||||
for (int i = 0; i != 32; i++) {
|
||||
for (int j = 0; j != in_use[i]; j++) {
|
||||
const LangString *ls = _strings[(i << 11) + j];
|
||||
const Case *casep;
|
||||
const char *cmdp;
|
||||
|
@ -1179,10 +1159,9 @@ static inline void ottd_mkdir(const char *directory)
|
|||
* does not already end with a seperator */
|
||||
static inline char *mkpath(char *buf, size_t buflen, const char *path, const char *file)
|
||||
{
|
||||
char *p;
|
||||
ttd_strlcpy(buf, path, buflen); // copy directory into buffer
|
||||
|
||||
p = strchr(buf, '\0'); // add path seperator if necessary
|
||||
char *p = strchr(buf, '\0'); // add path seperator if necessary
|
||||
if (p[-1] != PATHSEPCHAR && (size_t)(p - buf) + 1 < buflen) *p++ = PATHSEPCHAR;
|
||||
ttd_strlcpy(p, file, buflen - (size_t)(p - buf)); // catenate filename at end of buffer
|
||||
return buf;
|
||||
|
@ -1196,9 +1175,7 @@ static inline char *mkpath(char *buf, size_t buflen, const char *path, const cha
|
|||
*/
|
||||
static inline char *replace_pathsep(char *s)
|
||||
{
|
||||
char *c;
|
||||
|
||||
for (c = s; *c != '\0'; c++) if (*c == '/') *c = '\\';
|
||||
for (char *c = s; *c != '\0'; c++) if (*c == '/') *c = '\\';
|
||||
return s;
|
||||
}
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue