From 9fc0719e54003df5c5a9162d22aa3e3cc95f5fda Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 10 Jan 2015 08:29:55 +0100 Subject: [PATCH] symbol: Make actofgod.c's fmtflags() public as symbol_set_fmt() Move to nstreval.c, rename, external linkage. Signed-off-by: Markus Armbruster --- include/nsc.h | 3 ++- src/lib/common/nstreval.c | 31 ++++++++++++++++++++++++++++++- src/lib/subs/actofgod.c | 37 +++++-------------------------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/include/nsc.h b/include/nsc.h index 65e874e19..43bd4afa0 100644 --- a/include/nsc.h +++ b/include/nsc.h @@ -28,7 +28,7 @@ * * Known contributors to this file: * Dave Pare, 1989 - * Markus Armbruster, 2004-2014 + * Markus Armbruster, 2004-2015 */ #ifndef NSC_H @@ -298,6 +298,7 @@ extern struct valstr *nstr_eval(struct valstr *, natid, void *, enum nsc_type); extern int nstr_promote(int); extern char *symbol_by_value(int, struct symbol *); +extern int symbol_set_fmt(char *, size_t, int, struct symbol *, int); /* src/lib/global/nsc.c */ extern void nsc_init(void); /* src/lib/subs/nxtitem.c */ diff --git a/src/lib/common/nstreval.c b/src/lib/common/nstreval.c index b7e5cf513..3e49b4789 100644 --- a/src/lib/common/nstreval.c +++ b/src/lib/common/nstreval.c @@ -29,12 +29,13 @@ * Known contributors to this file: * Dave Pare, 1989 * Steve McClure, 1997 - * Markus Armbruster, 2004-2014 + * Markus Armbruster, 2004-2015 */ #include #include +#include #include #include "file.h" #include "nat.h" @@ -258,3 +259,31 @@ symbol_by_value(int key, struct symbol *table) return NULL; } + +int +symbol_set_fmt(char *buf, size_t sz, int flags, struct symbol symtab[], + int all) +{ + char *sep = ""; + int n, i; + char *p; + + if (buf && sz) + buf[0] = 0; + n = 0; + for (i = 0; i < 32; i++) { + if (!(flags & bit(i))) + continue; + p = symbol_by_value(bit(i), symtab); + if (p) + n += snprintf(buf + n, sz - n, "%s%s", sep, p); + else if (all) + n += snprintf(buf + n, sz - n, "%s#%d", sep, i); + if ((size_t)n >= sz) + sz = n; + sep = ", "; + } + + CANT_HAPPEN((size_t)n >= sz && buf); + return n; +} diff --git a/src/lib/subs/actofgod.c b/src/lib/subs/actofgod.c index 792bc7027..b94ee296b 100644 --- a/src/lib/subs/actofgod.c +++ b/src/lib/subs/actofgod.c @@ -27,7 +27,7 @@ * actofgod.c: Deity meddling subroutines * * Known contributors to this file: - * Markus Armbruster, 2013 + * Markus Armbruster, 2013-2015 */ #include @@ -203,33 +203,6 @@ divine_unload(struct empobj *unit, int type, int uid) divine_load_unload(unit, type, uid, "unloaded from"); } -static int -fmtflags (char *buf, size_t sz, int flags, struct symbol symtab[], int all) -{ - char *sep = ""; - int n, i; - char *p; - - if (buf && sz) - buf[0] = 0; - n = 0; - for (i = 0; i < 32; i++) { - if (!(flags & bit(i))) - continue; - p = symbol_by_value(bit(i), symtab); - if (p) - n += snprintf(buf + n, sz - n, "%s%s", sep, p); - else if (all) - n += snprintf(buf + n, sz - n, "%s#%d", sep, i); - if ((size_t)n >= sz) - sz = n; - sep = ", "; - } - - CANT_HAPPEN((size_t)n >= sz && buf); - return n; -} - void divine_flag_change(struct empobj *unit, char *name, int old, int new, struct symbol sym[]) @@ -241,16 +214,16 @@ divine_flag_change(struct empobj *unit, char *name, return; } - fmtflags(set, sizeof(set), new & ~old, sym, 1); - fmtflags(clr, sizeof(clr), old & ~new, sym, 1); + symbol_set_fmt(set, sizeof(set), new & ~old, sym, 1); + symbol_set_fmt(clr, sizeof(clr), old & ~new, sym, 1); pr("%s of %s changed: %s%s%s%s%s\n", name, unit_nameof(unit), set, set[0] ? " set" : "", set[0] && clr[0] ? ", and " : "", clr, clr[0] ? " cleared" : ""); - if (fmtflags(set, sizeof(set), new & ~old, sym, 0) - + fmtflags(clr, sizeof(clr), old & ~new, sym, 0)) + if (symbol_set_fmt(set, sizeof(set), new & ~old, sym, 0) + + symbol_set_fmt(clr, sizeof(clr), old & ~new, sym, 0)) wu(0, unit->own, "%s of %s changed by an act of %s: %s%s%s%s%s\n", name, unit_nameof(unit), cname(player->cnum), set, set[0] ? " set" : "", -- 2.43.0