/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2008, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
static int nstr_ca_comparable(struct castr *, int, int);
static int nstr_match_val(struct valstr *, struct castr *, int);
static struct valstr *nstr_resolve_id(struct valstr *, struct castr *, int);
-static struct valstr *nstr_resolve_sel(struct valstr *, struct castr *);
static struct valstr *nstr_resolve_val(struct valstr *, int, struct castr *);
static int nstr_optype(enum nsc_type, enum nsc_type);
strnncmp(char *s1, size_t sz1, char *s2, size_t sz2)
{
int res;
- if (sz1 == sz2) return strncmp(s1, s2, sz2);
- if (sz1 < sz2) return -strnncmp(s2, sz2, s1, sz1);
+ if (sz1 == sz2)
+ return strncmp(s1, s2, sz2);
+ if (sz1 < sz2)
+ return -strnncmp(s2, sz2, s1, sz1);
res = strncmp(s1, s2, sz2);
return res ? res : s1[sz2];
}
val->val_cat = NSC_VAL;
val->val_as.str.base = str + 1;
val->val_as.str.maxsz = tail - (str + 1);
- if (*tail) ++tail;
+ if (*tail)
+ ++tail;
/* FIXME else unclosed string */
return tail;
}
nstr_is_name_of_ca(struct valstr *val, struct castr *ca, int idx)
{
if (CANT_HAPPEN(val->val_cat != NSC_ID && idx >= 0))
- return 0;
+ return 0;
return idx >= 0 && strlen(ca[idx].ca_name) == val->val_as.str.maxsz;
}
return NULL;
}
- return nstr_resolve_sel(val, &ca[idx]);
-}
-
-/*
- * Change VAL to resolve identifier to selector CA.
- * Return VAL on success, NULL if the player is denied access to the
- * selector.
- * VAL must be an identifier.
- */
-static struct valstr *
-nstr_resolve_sel(struct valstr *val, struct castr *ca)
-{
- if (CANT_HAPPEN(val->val_cat != NSC_ID)) {
- val->val_cat = NSC_NOCAT;
- return val;
- }
-
- if ((ca->ca_flags & NSC_DEITY) && !player->god) {
+ if ((ca[idx].ca_flags & NSC_DEITY) && !player->god) {
pr("%.*s -- not accessible to mortals\n",
(int)val->val_as.str.maxsz, val->val_as.str.base);
val->val_cat = NSC_NOCAT;
return NULL;
}
- return nstr_mksymval(val, ca, 0);
+ return nstr_mksymval(val, &ca[idx], 0);
}
/*
lft = nstr_promote(lft);
rgt = nstr_promote(rgt);
if (lft == rgt)
- return lft;
+ return lft;
if (lft == NSC_DOUBLE && rgt == NSC_LONG)
- return NSC_DOUBLE;
+ return NSC_DOUBLE;
if (rgt == NSC_DOUBLE && lft == NSC_LONG)
- return NSC_DOUBLE;
+ return NSC_DOUBLE;
return NSC_NOTYPE;
}