From d1a193ff074894d54099cae1e9eb47881d68b3a8 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 4 Mar 2008 10:29:49 +0100 Subject: [PATCH] New nstr_mksymval() to create symbolic values --- include/nsc.h | 8 +++++--- src/lib/commands/xdump.c | 7 +------ src/lib/common/ef_verify.c | 8 +------- src/lib/common/nstreval.c | 15 +++++++++++++++ src/lib/subs/nstr.c | 8 +------- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/nsc.h b/include/nsc.h index de29c3ac..59aa813a 100644 --- a/include/nsc.h +++ b/include/nsc.h @@ -212,9 +212,10 @@ typedef unsigned char nsc_flags; * ca_len is zero), or an array of ca_len elements of that type. * If ca_get is not null, the selector is virtual. Values can be * obtained by calling ca_get(VAL, CNUM, CTXO), where VAL has been - * initialized from the selector and an index, CNUM is the country to - * use for coordinate translation and access control, and CTXO is the - * context object. See struct valstr for details. + * initialized my from the selector and an index by nstr_mksymval(), + * CNUM is the country to use for coordinate translation and access + * control, and CTXO is the context object. See struct valstr for + * details. * If flag NSC_DEITY is set, only to deities can use this selector. * If flag NSC_EXTRA is set, xdump ignores this selector. * If flag NSC_CONST is set, the datum can't be changed from its @@ -291,6 +292,7 @@ extern char *nstr_comp_val(char *, struct valstr*, int); extern int nstr_coerce_val(struct valstr *, nsc_type, char *); extern int nstr_exec(struct nscstr *, int, void *); /* src/lib/common/nstreval.c */ +extern struct valstr *nstr_mksymval(struct valstr *, struct castr *, int); extern struct valstr *nstr_exec_val(struct valstr *, natid, void *, nsc_type); extern int nstr_promote(int); extern char *symbol_by_value(int, struct symbol *); diff --git a/src/lib/commands/xdump.c b/src/lib/commands/xdump.c index 31e651ae..0d247de2 100644 --- a/src/lib/commands/xdump.c +++ b/src/lib/commands/xdump.c @@ -94,12 +94,7 @@ static struct valstr * xdeval(struct valstr *val, struct castr *ca, void *ptr, int idx) { - val->val_type = ca->ca_type; - val->val_cat = NSC_OFF; - val->val_as.sym.off = ca->ca_off; - val->val_as.sym.len = ca->ca_len; - val->val_as.sym.idx = idx; - val->val_as.sym.get = ca->ca_get; + nstr_mksymval(val, ca, idx); return nstr_exec_val(val, player->cnum, ptr, NSC_NOTYPE); } diff --git a/src/lib/common/ef_verify.c b/src/lib/common/ef_verify.c index 3ecaeaa0..8369a6aa 100644 --- a/src/lib/common/ef_verify.c +++ b/src/lib/common/ef_verify.c @@ -101,13 +101,7 @@ verify_row(int type, int row) do { if (ca[i].ca_table == EF_BAD) continue; - /* FIXME use xdeval() */ - val.val_type = ca[i].ca_type; - val.val_cat = NSC_OFF; - val.val_as.sym.off = ca[i].ca_off; - val.val_as.sym.len = ca[i].ca_len; - val.val_as.sym.idx = j; - val.val_as.sym.get = ca[i].ca_get; + nstr_mksymval(&val, &ca[i], j); nstr_exec_val(&val, 0, row_ref, NSC_NOTYPE); if (val.val_type != NSC_LONG) continue; diff --git a/src/lib/common/nstreval.c b/src/lib/common/nstreval.c index ab49f841..72269112 100644 --- a/src/lib/common/nstreval.c +++ b/src/lib/common/nstreval.c @@ -42,6 +42,21 @@ #include "nsc.h" #include "optlist.h" +/* + * Initialize VAL to symbolic value for selector CA with index IDX. + * Return VAL. + */ +struct valstr * +nstr_mksymval(struct valstr *val, struct castr *ca, int idx) +{ + val->val_type = ca->ca_type; + val->val_cat = NSC_OFF; + val->val_as.sym.off = ca->ca_off; + val->val_as.sym.len = ca->ca_len; + val->val_as.sym.idx = idx; + val->val_as.sym.get = ca->ca_get; + return val; +} /* * Evaluate VAL. diff --git a/src/lib/subs/nstr.c b/src/lib/subs/nstr.c index b4fb7828..493894b6 100644 --- a/src/lib/subs/nstr.c +++ b/src/lib/subs/nstr.c @@ -427,13 +427,7 @@ nstr_resolve_sel(struct valstr *val, struct castr *ca) return NULL; } - val->val_type = ca->ca_type; - val->val_cat = NSC_OFF; - val->val_as.sym.off = ca->ca_off; - val->val_as.sym.len = ca->ca_len; - val->val_as.sym.idx = 0; - val->val_as.sym.get = ca->ca_get; - return val; + return nstr_mksymval(val, ca, 0); } /*