From e92a522731c26d7cd98e7c618e76c5de57d07c4a Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 10 Jan 2015 08:39:48 +0100 Subject: [PATCH] symbol: New symbol_set_fmt() parameter sep, use for show Signed-off-by: Markus Armbruster --- include/nsc.h | 3 ++- src/lib/common/nstreval.c | 10 +++++----- src/lib/subs/actofgod.c | 8 ++++---- src/lib/subs/show.c | 15 +++++---------- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/include/nsc.h b/include/nsc.h index 43bd4afa..553e6b56 100644 --- a/include/nsc.h +++ b/include/nsc.h @@ -298,7 +298,8 @@ 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); +extern int symbol_set_fmt(char *, size_t, int, struct symbol *, + char *, 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 3e49b478..f7cdbec3 100644 --- a/src/lib/common/nstreval.c +++ b/src/lib/common/nstreval.c @@ -262,9 +262,9 @@ symbol_by_value(int key, struct symbol *table) int symbol_set_fmt(char *buf, size_t sz, int flags, struct symbol symtab[], - int all) + char *sep, int all) { - char *sep = ""; + char *pfx = ""; int n, i; char *p; @@ -276,12 +276,12 @@ symbol_set_fmt(char *buf, size_t sz, int flags, struct symbol symtab[], continue; p = symbol_by_value(bit(i), symtab); if (p) - n += snprintf(buf + n, sz - n, "%s%s", sep, p); + n += snprintf(buf + n, sz - n, "%s%s", pfx, p); else if (all) - n += snprintf(buf + n, sz - n, "%s#%d", sep, i); + n += snprintf(buf + n, sz - n, "%s#%d", pfx, i); if ((size_t)n >= sz) sz = n; - sep = ", "; + pfx = sep; } CANT_HAPPEN((size_t)n >= sz && buf); diff --git a/src/lib/subs/actofgod.c b/src/lib/subs/actofgod.c index b94ee296..24c5638f 100644 --- a/src/lib/subs/actofgod.c +++ b/src/lib/subs/actofgod.c @@ -214,16 +214,16 @@ divine_flag_change(struct empobj *unit, char *name, return; } - symbol_set_fmt(set, sizeof(set), new & ~old, sym, 1); - symbol_set_fmt(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 (symbol_set_fmt(set, sizeof(set), new & ~old, sym, 0) - + symbol_set_fmt(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" : "", diff --git a/src/lib/subs/show.c b/src/lib/subs/show.c index 31fa44d0..a550de8f 100644 --- a/src/lib/subs/show.c +++ b/src/lib/subs/show.c @@ -31,7 +31,7 @@ * Jeff Bailey, 1990 * Steve McClure, 1996 * Ron Koenderink, 2005-2009 - * Markus Armbruster, 2006-2011 + * Markus Armbruster, 2006-2015 */ #include @@ -658,14 +658,9 @@ show_load(short item[]) static void show_capab(int flags, struct symbol *table) { - int i; - char *p; + char buf[1024]; - for (i = 0; i < 32; i++) { - if (!(flags & bit(i))) - continue; - p = symbol_by_value(bit(i), table); - if (p) - pr(" %s", p); - } + symbol_set_fmt(buf, sizeof(buf), flags, table, " ", 0); + if (*buf) + pr(" %s", buf); }