forked from github/server
rename to gettoken, use more widely, add a basic test.
This commit is contained in:
parent
870d8001ef
commit
c8b9044f78
|
@ -476,7 +476,8 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders)
|
|||
n = getuint();
|
||||
|
||||
if (u->number == 0) {
|
||||
str = getstrtoken();
|
||||
char token[128];
|
||||
str = gettoken(token, sizeof(token));
|
||||
if (str && str[0]) {
|
||||
/* Monsters can RECRUIT 15 DRACOID
|
||||
* also: secondary race */
|
||||
|
@ -626,6 +627,7 @@ void give_control(unit * u, unit * u2)
|
|||
|
||||
int give_control_cmd(unit * u, order * ord)
|
||||
{
|
||||
char token[128];
|
||||
region *r = u->region;
|
||||
unit *u2;
|
||||
const char *s;
|
||||
|
@ -633,7 +635,7 @@ int give_control_cmd(unit * u, order * ord)
|
|||
init_order(ord);
|
||||
getunit(r, u->faction, &u2);
|
||||
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s && isparam(s, u->faction->locale, P_CONTROL)) {
|
||||
message *msg = 0;
|
||||
|
||||
|
@ -676,6 +678,7 @@ int give_control_cmd(unit * u, order * ord)
|
|||
|
||||
static int forget_cmd(unit * u, order * ord)
|
||||
{
|
||||
char token[128];
|
||||
skill_t sk;
|
||||
const char *s;
|
||||
|
||||
|
@ -685,7 +688,7 @@ static int forget_cmd(unit * u, order * ord)
|
|||
}
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if ((sk = get_skill(s, u->faction->locale)) != NOSKILL) {
|
||||
ADDMSG(&u->faction->msgs, msg_message("forget", "unit skill", u, sk));
|
||||
|
@ -1499,14 +1502,14 @@ int make_cmd(unit * u, struct order *ord)
|
|||
|
||||
kwd = init_order(ord);
|
||||
assert(kwd == K_MAKE);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (s) {
|
||||
m = atoi((const char *)s);
|
||||
sprintf(ibuf, "%d", m);
|
||||
if (!strcmp(ibuf, (const char *)s)) {
|
||||
/* a quantity was given */
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
}
|
||||
else {
|
||||
m = INT_MAX;
|
||||
|
@ -1522,7 +1525,7 @@ int make_cmd(unit * u, struct order *ord)
|
|||
cmistake(u, ord, 275, MSG_PRODUCE);
|
||||
}
|
||||
else {
|
||||
const char * s = getstrtok(token, sizeof(token));
|
||||
const char * s = gettoken(token, sizeof(token));
|
||||
direction_t d = s ? get_direction(s, u->faction->locale) : NODIRECTION;
|
||||
if (d != NODIRECTION) {
|
||||
build_road(r, u, m, d);
|
||||
|
@ -1755,6 +1758,7 @@ attrib_type at_trades = {
|
|||
|
||||
static void buy(unit * u, request ** buyorders, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
region *r = u->region;
|
||||
int n, k;
|
||||
request *o;
|
||||
|
@ -1838,7 +1842,7 @@ static void buy(unit * u, request ** buyorders, struct order *ord)
|
|||
/* die Menge der verkauften Güter merken */
|
||||
a->data.i += n;
|
||||
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
itype = s ? finditemtype(s, u->faction->locale) : 0;
|
||||
if (itype != NULL) {
|
||||
ltype = resource2luxury(itype->rtype);
|
||||
|
@ -2061,6 +2065,7 @@ static void expandselling(region * r, request * sellorders, int limit)
|
|||
|
||||
static bool sell(unit * u, request ** sellorders, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
bool unlimited = true;
|
||||
const item_type *itype;
|
||||
const luxury_type *ltype;
|
||||
|
@ -2078,7 +2083,7 @@ static bool sell(unit * u, request ** sellorders, struct order *ord)
|
|||
|
||||
kwd = init_order(ord);
|
||||
assert(kwd == K_SELL);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (findparam(s, u->faction->locale) == P_ANY) {
|
||||
unlimited = false;
|
||||
|
@ -2136,7 +2141,7 @@ static bool sell(unit * u, request ** sellorders, struct order *ord)
|
|||
cmistake(u, ord, 54, MSG_COMMERCE);
|
||||
return false;
|
||||
}
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
itype = s ? finditemtype(s, u->faction->locale) : 0;
|
||||
ltype = itype ? resource2luxury(itype->rtype) : 0;
|
||||
if (ltype == NULL) {
|
||||
|
@ -2464,6 +2469,7 @@ static void breedhorses(region * r, unit * u)
|
|||
|
||||
static void breed_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
int m;
|
||||
const char *s;
|
||||
param_t p;
|
||||
|
@ -2477,12 +2483,12 @@ static void breed_cmd(unit * u, struct order *ord)
|
|||
|
||||
/* züchte [<anzahl>] <parameter> */
|
||||
(void)init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
m = s ? atoi((const char *)s) : 0;
|
||||
if (m != 0) {
|
||||
/* first came a want-paramter */
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
}
|
||||
else {
|
||||
m = INT_MAX;
|
||||
|
@ -2545,10 +2551,6 @@ static void research_cmd(unit * u, struct order *ord)
|
|||
|
||||
kwd = init_order(ord);
|
||||
assert(kwd == K_RESEARCH);
|
||||
/*
|
||||
const char *s = getstrtoken();
|
||||
|
||||
if (findparam(s, u->faction->locale) == P_HERBS) { */
|
||||
|
||||
if (eff_skill(u, SK_HERBALISM, r) < 7) {
|
||||
cmistake(u, ord, 227, MSG_EVENT);
|
||||
|
|
11
src/give.c
11
src/give.c
|
@ -531,6 +531,7 @@ bool can_give_to(unit *u, unit *u2) {
|
|||
|
||||
void give_cmd(unit * u, order * ord)
|
||||
{
|
||||
char token[128];
|
||||
region *r = u->region;
|
||||
unit *u2;
|
||||
const char *s;
|
||||
|
@ -544,7 +545,7 @@ void give_cmd(unit * u, order * ord)
|
|||
kwd = init_order(ord);
|
||||
assert(kwd == K_GIVE);
|
||||
err = getunit(r, u->faction, &u2);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
n = s ? atoip(s) : 0;
|
||||
p = (n > 0) ? NOPARAM : findparam(s, u->faction->locale);
|
||||
|
||||
|
@ -652,7 +653,7 @@ void give_cmd(unit * u, order * ord)
|
|||
feedback_give_not_allowed(u, ord);
|
||||
return;
|
||||
}
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (!s || *s == 0) { /* GIVE ALL items that you have */
|
||||
|
||||
/* do these checks once, not for each item we have: */
|
||||
|
@ -732,11 +733,11 @@ void give_cmd(unit * u, order * ord)
|
|||
msg_feedback(u, ord, "peasants_give_invalid", ""));
|
||||
return;
|
||||
}
|
||||
s = getstrtoken(); /* skip one ahead to get the amount. */
|
||||
n = atoip(s); /* n: Anzahl */
|
||||
s = gettoken(token, sizeof(token)); /* skip one ahead to get the amount. */
|
||||
n = s ? atoip(s) : 0; /* n: Anzahl */
|
||||
n *= u2->number;
|
||||
}
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (s == NULL) {
|
||||
cmistake(u, ord, 113, MSG_COMMERCE);
|
||||
|
|
|
@ -35,9 +35,10 @@ use_studypotion(struct unit *u, const struct item_type *itype, int amount,
|
|||
struct order *ord)
|
||||
{
|
||||
if (init_order(u->thisorder) == K_STUDY) {
|
||||
char token[128];
|
||||
skill_t sk = NOSKILL;
|
||||
skill *sv = 0;
|
||||
const char * s = getstrtoken();
|
||||
const char * s = gettoken(token, sizeof(token));
|
||||
|
||||
if (s) {
|
||||
sk = get_skill(s, u->faction->locale);
|
||||
|
|
1442
src/kernel/build.c
1442
src/kernel/build.c
File diff suppressed because it is too large
Load Diff
|
@ -73,10 +73,11 @@ const char *str, parser fun)
|
|||
|
||||
static int do_command_i(const void *keys, struct unit *u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
const char *c;
|
||||
variant var;
|
||||
|
||||
c = getstrtoken();
|
||||
c = gettoken(token, sizeof(token));
|
||||
if (findtoken(keys, c, &var) == E_TOK_SUCCESS) {
|
||||
command *cmd = (command *)var.v;
|
||||
if (cmd->nodes && *c) {
|
||||
|
|
|
@ -796,13 +796,15 @@ parse(keyword_t kword, int(*dofun) (unit *, struct order *), bool thisorder)
|
|||
|
||||
unsigned int getuint(void)
|
||||
{
|
||||
const char *s = getstrtoken();
|
||||
char token[16];
|
||||
const char *s = gettoken(token, sizeof(token));
|
||||
return s ? atoip(s) : 0;
|
||||
}
|
||||
|
||||
int getint(void)
|
||||
{
|
||||
const char * s = getstrtoken();
|
||||
char token[16];
|
||||
const char * s = gettoken(token, sizeof(token));
|
||||
return s ? atoi(s) : 0;
|
||||
}
|
||||
|
||||
|
@ -875,7 +877,8 @@ bool isparam(const char *s, const struct locale * lang, param_t param)
|
|||
|
||||
param_t getparam(const struct locale * lang)
|
||||
{
|
||||
const char *s = getstrtoken();
|
||||
char token[64];
|
||||
const char *s = gettoken(token, sizeof(token));
|
||||
return s ? findparam(s, lang) : NOPARAM;
|
||||
}
|
||||
|
||||
|
@ -909,7 +912,8 @@ static int read_newunitid(const faction * f, const region * r)
|
|||
|
||||
int read_unitid(const faction * f, const region * r)
|
||||
{
|
||||
const char *s = getstrtoken();
|
||||
char token[8];
|
||||
const char *s = gettoken(token, sizeof(token));
|
||||
|
||||
/* Da s nun nur einen string enthaelt, suchen wir ihn direkt in der
|
||||
* paramliste. machen wir das nicht, dann wird getnewunit in s nach der
|
||||
|
|
|
@ -225,7 +225,7 @@ static faction *factionorders(void)
|
|||
|
||||
if (f != NULL && !fval(f, FFL_NPC)) {
|
||||
char token[128];
|
||||
const char *pass = getstrtok(token, sizeof(token));
|
||||
const char *pass = gettoken(token, sizeof(token));
|
||||
|
||||
if (!checkpasswd(f, (const char *)pass)) {
|
||||
log_debug("Invalid password for faction %s\n", itoa36(fid));
|
||||
|
@ -273,7 +273,7 @@ int readorders(const char *filename)
|
|||
param_t p;
|
||||
const char *s;
|
||||
init_tokens_str(b);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
p = s ? findparam(s, lang) : NOPARAM;
|
||||
switch (p) {
|
||||
#undef LOCALE_CHANGE
|
||||
|
|
|
@ -491,16 +491,19 @@ void usetprivate(unit * u, const char *str)
|
|||
{
|
||||
attrib *a = a_find(u->attribs, &at_private);
|
||||
|
||||
if (str == NULL) {
|
||||
if (a)
|
||||
if (str == NULL || *str == 0) {
|
||||
if (a) {
|
||||
a_remove(&u->attribs, a);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!a)
|
||||
if (!a) {
|
||||
a = a_add(&u->attribs, a_new(&at_private));
|
||||
if (a->data.v)
|
||||
}
|
||||
if (a->data.v) {
|
||||
free(a->data.v);
|
||||
a->data.v = _strdup((const char *)str);
|
||||
}
|
||||
a->data.v = _strdup(str);
|
||||
}
|
||||
|
||||
/*********************/
|
||||
|
|
102
src/laws.c
102
src/laws.c
|
@ -953,7 +953,7 @@ int quit_cmd(unit * u, struct order *ord)
|
|||
|
||||
kwd = init_order(ord);
|
||||
assert(kwd == K_QUIT);
|
||||
passwd = getstrtok(token, sizeof(token));
|
||||
passwd = gettoken(token, sizeof(token));
|
||||
if (checkpasswd(f, (const char *)passwd)) {
|
||||
if (EnhancedQuit()) {
|
||||
int f2_id = getid();
|
||||
|
@ -1167,7 +1167,7 @@ void do_enter(struct region *r, bool is_final_attempt)
|
|||
const char * s;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
p = findparam_ex(s, u->faction->locale);
|
||||
id = getid();
|
||||
|
||||
|
@ -1357,7 +1357,7 @@ int ally_cmd(unit * u, struct order *ord)
|
|||
if (f == u->faction)
|
||||
return 0;
|
||||
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (!s[0])
|
||||
keyword = P_ANY;
|
||||
|
@ -1495,6 +1495,7 @@ static void init_prefixnames(void)
|
|||
|
||||
int prefix_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
attrib **ap;
|
||||
const char *s;
|
||||
local_names *in = pnames;
|
||||
|
@ -1512,7 +1513,7 @@ int prefix_cmd(unit * u, struct order *ord)
|
|||
}
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (!s || !*s) {
|
||||
attrib *a = NULL;
|
||||
|
@ -1559,13 +1560,14 @@ static cmp_building_cb get_cmp_region_owner(void)
|
|||
|
||||
int display_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
char **s = NULL;
|
||||
const char *str;
|
||||
region *r = u->region;
|
||||
|
||||
init_order(ord);
|
||||
|
||||
str = getstrtoken();
|
||||
str = gettoken(token, sizeof(token));
|
||||
switch (findparam_ex(str, u->faction->locale)) {
|
||||
case P_BUILDING:
|
||||
case P_GEBAEUDE:
|
||||
|
@ -1601,15 +1603,7 @@ int display_cmd(unit * u, struct order *ord)
|
|||
break;
|
||||
|
||||
case P_PRIVAT:
|
||||
{
|
||||
const char *d = getstrtoken();
|
||||
if (d == NULL || *d == 0) {
|
||||
usetprivate(u, NULL);
|
||||
}
|
||||
else {
|
||||
usetprivate(u, d);
|
||||
}
|
||||
}
|
||||
usetprivate(u, getstrtoken());
|
||||
break;
|
||||
|
||||
case P_REGION:
|
||||
|
@ -1732,6 +1726,7 @@ rename_building(unit * u, order * ord, building * b, const char *name)
|
|||
|
||||
int name_cmd(struct unit *u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
building *b = u->building;
|
||||
region *r = u->region;
|
||||
char **s = NULL;
|
||||
|
@ -1740,11 +1735,11 @@ int name_cmd(struct unit *u, struct order *ord)
|
|||
const char *str;
|
||||
|
||||
init_order(ord);
|
||||
str = getstrtoken();
|
||||
str = gettoken(token, sizeof(token));
|
||||
p = findparam_ex(str, u->faction->locale);
|
||||
|
||||
if (p == P_FOREIGN) {
|
||||
str = getstrtoken();
|
||||
str = gettoken(token, sizeof(token));
|
||||
foreign = true;
|
||||
p = findparam_ex(str, u->faction->locale);
|
||||
}
|
||||
|
@ -1994,13 +1989,14 @@ static void mailfaction(unit * u, int n, struct order *ord, const char *s)
|
|||
|
||||
int mail_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
region *r = u->region;
|
||||
unit *u2;
|
||||
const char *s;
|
||||
int n, cont;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
/* Falls kein Parameter, ist das eine Einheitsnummer;
|
||||
* das Füllwort "AN" muß wegfallen, da gültige Nummer! */
|
||||
|
@ -2185,7 +2181,7 @@ int email_cmd(unit * u, struct order *ord)
|
|||
}
|
||||
else {
|
||||
faction *f = u->faction;
|
||||
if (set_email(&f->email, (const char *)s) != 0) {
|
||||
if (set_email(&f->email, s) != 0) {
|
||||
log_error("Invalid email address for faction %s: %s\n", itoa36(f->no), s);
|
||||
ADDMSG(&f->msgs, msg_message("changemail_invalid", "value", s));
|
||||
}
|
||||
|
@ -2204,7 +2200,7 @@ int password_cmd(unit * u, struct order *ord)
|
|||
bool pwok = true;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(pwbuf, sizeof(pwbuf));
|
||||
|
||||
if (!s || !*s) {
|
||||
for (i = 0; i < 6; i++)
|
||||
|
@ -2213,14 +2209,10 @@ int password_cmd(unit * u, struct order *ord)
|
|||
}
|
||||
else {
|
||||
char *c;
|
||||
|
||||
strlcpy(pwbuf, (const char *)s, 31);
|
||||
pwbuf[31] = 0;
|
||||
c = pwbuf;
|
||||
while (*c && pwok) {
|
||||
if (!isalnum(*(unsigned char *)c))
|
||||
for (c = pwbuf; *c && pwok; ++c) {
|
||||
if (!isalnum(*(unsigned char *)c)) {
|
||||
pwok = false;
|
||||
c++;
|
||||
}
|
||||
}
|
||||
}
|
||||
free(u->faction->passw);
|
||||
|
@ -2238,11 +2230,12 @@ int password_cmd(unit * u, struct order *ord)
|
|||
|
||||
int send_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
const char *s;
|
||||
int option;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
option = findoption(s, u->faction->locale);
|
||||
|
||||
|
@ -2579,14 +2572,11 @@ int promotion_cmd(unit * u, struct order *ord)
|
|||
|
||||
int group_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
const char *s;
|
||||
keyword_t kwd;
|
||||
|
||||
kwd = init_order(ord);
|
||||
assert(kwd == K_GROUP);
|
||||
s = getstrtoken();
|
||||
|
||||
join_group(u, s);
|
||||
join_group(u, getstrtoken());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2621,7 +2611,7 @@ int reshow_cmd(unit * u, struct order *ord)
|
|||
param_t p = NOPARAM;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(lbuf, sizeof(lbuf));
|
||||
s = gettoken(lbuf, sizeof(lbuf));
|
||||
|
||||
if (s && isparam(s, u->faction->locale, P_ANY)) {
|
||||
p = getparam(u->faction->locale);
|
||||
|
@ -2634,12 +2624,12 @@ int reshow_cmd(unit * u, struct order *ord)
|
|||
|
||||
int status_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
const char *param;
|
||||
char token[128];
|
||||
const char *s;
|
||||
|
||||
init_order(ord);
|
||||
|
||||
param = getstrtoken();
|
||||
switch (findparam(param, u->faction->locale)) {
|
||||
s = gettoken(token, sizeof(token));
|
||||
switch (findparam(s, u->faction->locale)) {
|
||||
case P_NOT:
|
||||
setstatus(u, ST_AVOID);
|
||||
break;
|
||||
|
@ -2667,7 +2657,7 @@ int status_cmd(unit * u, struct order *ord)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
if (param && param[0]) {
|
||||
if (s && s[0]) {
|
||||
add_message(&u->faction->msgs,
|
||||
msg_feedback(u, ord, "unknown_status", ""));
|
||||
}
|
||||
|
@ -2686,7 +2676,7 @@ int combatspell_cmd(unit * u, struct order *ord)
|
|||
spell *sp = 0;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
/* KAMPFZAUBER [NICHT] löscht alle gesetzten Kampfzauber */
|
||||
if (!s || *s == 0 || findparam(s, u->faction->locale) == P_NOT) {
|
||||
|
@ -2699,7 +2689,7 @@ int combatspell_cmd(unit * u, struct order *ord)
|
|||
/* Merken, setzen kommt erst später */
|
||||
level = getint();
|
||||
level = _max(0, level);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
}
|
||||
|
||||
sp = unit_getspell(u, s, u->faction->locale);
|
||||
|
@ -2708,7 +2698,7 @@ int combatspell_cmd(unit * u, struct order *ord)
|
|||
return 0;
|
||||
}
|
||||
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
|
||||
if (findparam(s, u->faction->locale) == P_NOT) {
|
||||
/* KAMPFZAUBER "<Spruchname>" NICHT löscht diesen speziellen
|
||||
|
@ -2933,7 +2923,7 @@ void restack_units(void)
|
|||
unit *v;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
p = findparam(s, u->faction->locale);
|
||||
id = getid();
|
||||
v = findunit(id);
|
||||
|
@ -3009,11 +2999,11 @@ int renumber_cmd(unit * u, order * ord)
|
|||
faction *f = u->faction;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
switch (findparam_ex(s, u->faction->locale)) {
|
||||
|
||||
case P_FACTION:
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s && *s) {
|
||||
int id = atoi36((const char *)s);
|
||||
attrib *a = a_find(f->attribs, &at_number);
|
||||
|
@ -3024,7 +3014,7 @@ int renumber_cmd(unit * u, order * ord)
|
|||
break;
|
||||
|
||||
case P_UNIT:
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s == NULL || *s == 0) {
|
||||
i = newunitid();
|
||||
}
|
||||
|
@ -3067,7 +3057,7 @@ int renumber_cmd(unit * u, order * ord)
|
|||
cmistake(u, ord, 116, MSG_EVENT);
|
||||
break;
|
||||
}
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s == NULL || *s == 0) {
|
||||
i = newcontainerid();
|
||||
}
|
||||
|
@ -3096,7 +3086,7 @@ int renumber_cmd(unit * u, order * ord)
|
|||
cmistake(u, ord, 148, MSG_EVENT);
|
||||
break;
|
||||
}
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (*s == 0) {
|
||||
i = newcontainerid();
|
||||
}
|
||||
|
@ -3397,7 +3387,7 @@ void new_units(void)
|
|||
init_order(makeord);
|
||||
alias = getid();
|
||||
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s && s[0]) {
|
||||
name = _strdup(s);
|
||||
}
|
||||
|
@ -3707,7 +3697,7 @@ void defaultorders(void)
|
|||
order *new_order = 0;
|
||||
const char *s;
|
||||
init_order(ord);
|
||||
s = getstrtok(lbuf, sizeof(lbuf));
|
||||
s = gettoken(lbuf, sizeof(lbuf));
|
||||
if (s) {
|
||||
new_order = parse_order(s, u->faction->locale);
|
||||
}
|
||||
|
@ -3823,13 +3813,13 @@ int use_cmd(unit * u, struct order *ord)
|
|||
|
||||
init_order(ord);
|
||||
|
||||
t = getstrtok(token, sizeof(token));
|
||||
t = gettoken(token, sizeof(token));
|
||||
n = atoi((const char *)t);
|
||||
if (n == 0) {
|
||||
if (isparam(t, u->faction->locale, P_ANY)) {
|
||||
/* BENUTZE ALLES Yanxspirit */
|
||||
n = INT_MAX;
|
||||
t = getstrtok(token, sizeof(token));
|
||||
t = gettoken(token, sizeof(token));
|
||||
}
|
||||
else {
|
||||
/* BENUTZE Yanxspirit */
|
||||
|
@ -3838,7 +3828,7 @@ int use_cmd(unit * u, struct order *ord)
|
|||
}
|
||||
else {
|
||||
/* BENUTZE 42 Yanxspirit */
|
||||
t = getstrtok(token, sizeof(token));
|
||||
t = gettoken(token, sizeof(token));
|
||||
}
|
||||
itype = t ? finditemtype(t, u->faction->locale) : NULL;
|
||||
|
||||
|
@ -3920,20 +3910,21 @@ int pay_cmd(unit * u, struct order *ord)
|
|||
|
||||
static int reserve_i(unit * u, struct order *ord, int flags)
|
||||
{
|
||||
char token[128];
|
||||
if (u->number > 0 && (urace(u)->ec_flags & GETITEM)) {
|
||||
int use, count, para;
|
||||
const item_type *itype;
|
||||
const char *s;
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
count = s ? atoip(s) : 0;
|
||||
para = findparam(s, u->faction->locale);
|
||||
|
||||
if (count == 0 && para == P_EACH) {
|
||||
count = getint() * u->number;
|
||||
}
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
itype = s ? finditemtype(s, u->faction->locale) : 0;
|
||||
if (itype == NULL)
|
||||
return 0;
|
||||
|
@ -3963,19 +3954,20 @@ int reserve_self(unit * u, struct order *ord) {
|
|||
|
||||
int claim_cmd(unit * u, struct order *ord)
|
||||
{
|
||||
char token[128];
|
||||
const char *t;
|
||||
int n;
|
||||
const item_type *itype;
|
||||
|
||||
init_order(ord);
|
||||
|
||||
t = getstrtoken();
|
||||
t = gettoken(token, sizeof(token));
|
||||
n = atoi((const char *)t);
|
||||
if (n == 0) {
|
||||
n = 1;
|
||||
}
|
||||
else {
|
||||
t = getstrtoken();
|
||||
t = gettoken(token, sizeof(token));
|
||||
}
|
||||
itype = finditemtype(t, u->faction->locale);
|
||||
|
||||
|
|
10
src/magic.c
10
src/magic.c
|
@ -2519,7 +2519,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
|||
level = eff_skill(u, SK_MAGIC, r);
|
||||
|
||||
init_order(ord);
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
param = findparam(s, u->faction->locale);
|
||||
/* für Syntax ' STUFE x REGION y z ' */
|
||||
if (param == P_LEVEL) {
|
||||
|
@ -2530,7 +2530,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
|||
cmistake(u, ord, 10, MSG_MAGIC);
|
||||
return 0;
|
||||
}
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
param = findparam(s, u->faction->locale);
|
||||
}
|
||||
if (param == P_REGION) {
|
||||
|
@ -2547,7 +2547,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
|||
"unit region command", u, u->region, ord));
|
||||
return 0;
|
||||
}
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
param = findparam(s, u->faction->locale);
|
||||
}
|
||||
/* für Syntax ' REGION x y STUFE z '
|
||||
|
@ -2560,7 +2560,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
|||
cmistake(u, ord, 10, MSG_MAGIC);
|
||||
return 0;
|
||||
}
|
||||
s = getstrtok(token, sizeof(token));
|
||||
s = gettoken(token, sizeof(token));
|
||||
}
|
||||
if (!s || !s[0] || strlen(s) == 0) {
|
||||
/* Fehler "Es wurde kein Zauber angegeben" */
|
||||
|
@ -2693,7 +2693,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
|||
char **params = (char**)malloc(2 * sizeof(char *));
|
||||
int p = 0, size = 2;
|
||||
for (;;) {
|
||||
s = getstrtoken();
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (!s || *s == 0)
|
||||
break;
|
||||
if (p + 1 >= size) {
|
||||
|
|
22
src/move.c
22
src/move.c
|
@ -1156,7 +1156,7 @@ static void cycle_route(order * ord, unit * u, int gereist)
|
|||
int bytes, cm = 0;
|
||||
char tail[1024], *bufp = tail;
|
||||
char neworder[2048];
|
||||
const char *token;
|
||||
char token[128];
|
||||
direction_t d = NODIRECTION;
|
||||
bool paused = false;
|
||||
bool pause;
|
||||
|
@ -1171,11 +1171,12 @@ static void cycle_route(order * ord, unit * u, int gereist)
|
|||
|
||||
neworder[0] = 0;
|
||||
for (cm = 0;; ++cm) {
|
||||
const char *s;
|
||||
const struct locale *lang = u->faction->locale;
|
||||
pause = false;
|
||||
token = getstrtoken();
|
||||
if (token && *token) {
|
||||
d = get_direction(token, lang);
|
||||
s = gettoken(token, sizeof(token));
|
||||
if (s && *s) {
|
||||
d = get_direction(s, lang);
|
||||
if (d == D_PAUSE) {
|
||||
pause = true;
|
||||
}
|
||||
|
@ -1448,11 +1449,12 @@ static void make_route(unit * u, order * ord, region_list ** routep)
|
|||
region_list **iroute = routep;
|
||||
region *current = u->region;
|
||||
region *next = NULL;
|
||||
const char *token = getstrtoken();
|
||||
int error = movewhere(u, token, current, &next);
|
||||
char token[128];
|
||||
const char *s = gettoken(token, sizeof(token));
|
||||
int error = movewhere(u, s, current, &next);
|
||||
|
||||
if (error != E_MOVE_OK) {
|
||||
message *msg = movement_error(u, token, ord, error);
|
||||
message *msg = movement_error(u, s, ord, error);
|
||||
if (msg != NULL) {
|
||||
add_message(&u->faction->msgs, msg);
|
||||
msg_release(msg);
|
||||
|
@ -1471,10 +1473,10 @@ static void make_route(unit * u, order * ord, region_list ** routep)
|
|||
iroute = &(*iroute)->next;
|
||||
|
||||
current = next;
|
||||
token = getstrtoken();
|
||||
error = movewhere(u, token, current, &next);
|
||||
s = gettoken(token, sizeof(token));
|
||||
error = movewhere(u, s, current, &next);
|
||||
if (error) {
|
||||
message *msg = movement_error(u, token, ord, error);
|
||||
message *msg = movement_error(u, s, ord, error);
|
||||
if (msg != NULL) {
|
||||
add_message(&u->faction->msgs, msg);
|
||||
msg_release(msg);
|
||||
|
|
|
@ -132,6 +132,9 @@ char *parse_token(const char **str, char *lbuf, size_t len)
|
|||
}
|
||||
eatwhitespace_c(&ctoken);
|
||||
if (!*ctoken) {
|
||||
if (len > 0) {
|
||||
*cursor = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
while (*ctoken && cursor-len < lbuf-1) {
|
||||
|
@ -209,7 +212,7 @@ const char *getstrtoken(void)
|
|||
return parse_token((const char **)&states->current_token, lbuf, MAXTOKENSIZE);
|
||||
}
|
||||
|
||||
const char *getstrtok(char *lbuf, size_t bufsize)
|
||||
const char *gettoken(char *lbuf, size_t bufsize)
|
||||
{
|
||||
return parse_token((const char **)&states->current_token, lbuf, bufsize);
|
||||
}
|
||||
|
@ -217,7 +220,7 @@ const char *getstrtok(char *lbuf, size_t bufsize)
|
|||
int getid(void)
|
||||
{
|
||||
char token[16];
|
||||
const char *str = getstrtok(token, sizeof(token));
|
||||
const char *str = gettoken(token, sizeof(token));
|
||||
int i = str ? atoi36(str) : 0;
|
||||
if (i < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -22,7 +22,7 @@ extern "C" {
|
|||
void parser_popstate(void);
|
||||
bool parser_end(void);
|
||||
const char *getstrtoken(void);
|
||||
const char *getstrtok(char *lbuf, size_t bufsize);
|
||||
const char *gettoken(char *lbuf, size_t bufsize);
|
||||
int getid(void);
|
||||
#define getshipid() getid()
|
||||
#define getfactionid() getid()
|
||||
|
|
|
@ -3,13 +3,21 @@
|
|||
|
||||
#include <CuTest.h>
|
||||
|
||||
static void test_parser(CuTest *tc) {
|
||||
static void test_gettoken(CuTest *tc) {
|
||||
char token[128];
|
||||
init_tokens_str("HELP ONE TWO THREE");
|
||||
CuAssertStrEquals(tc, "HELP", gettoken(token, sizeof(token)));
|
||||
CuAssertStrEquals(tc, "HELP", token);
|
||||
CuAssertStrEquals(tc, "ONE", gettoken(token, sizeof(token)));
|
||||
CuAssertStrEquals(tc, "TWO", gettoken(token, sizeof(token)));
|
||||
CuAssertStrEquals(tc, "THREE", gettoken(token, sizeof(token)));
|
||||
CuAssertPtrEquals(tc, NULL, (void *)gettoken(token, sizeof(token)));
|
||||
CuAssertStrEquals(tc, "", token);
|
||||
}
|
||||
|
||||
CuSuite *get_parser_suite(void)
|
||||
{
|
||||
CuSuite *suite = CuSuiteNew();
|
||||
SUITE_ADD_TEST(suite, test_parser);
|
||||
SUITE_ADD_TEST(suite, test_gettoken);
|
||||
return suite;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue