symbol: New symbol_set_fmt() parameter sep, use for show

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2015-01-10 08:39:48 +01:00
parent 9fc0719e54
commit e92a522731
4 changed files with 16 additions and 20 deletions

View file

@ -298,7 +298,8 @@ extern struct valstr *nstr_eval(struct valstr *, natid, void *,
enum nsc_type); enum nsc_type);
extern int nstr_promote(int); extern int nstr_promote(int);
extern char *symbol_by_value(int, struct symbol *); 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 */ /* src/lib/global/nsc.c */
extern void nsc_init(void); extern void nsc_init(void);
/* src/lib/subs/nxtitem.c */ /* src/lib/subs/nxtitem.c */

View file

@ -262,9 +262,9 @@ symbol_by_value(int key, struct symbol *table)
int int
symbol_set_fmt(char *buf, size_t sz, int flags, struct symbol symtab[], 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; int n, i;
char *p; char *p;
@ -276,12 +276,12 @@ symbol_set_fmt(char *buf, size_t sz, int flags, struct symbol symtab[],
continue; continue;
p = symbol_by_value(bit(i), symtab); p = symbol_by_value(bit(i), symtab);
if (p) 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) 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) if ((size_t)n >= sz)
sz = n; sz = n;
sep = ", "; pfx = sep;
} }
CANT_HAPPEN((size_t)n >= sz && buf); CANT_HAPPEN((size_t)n >= sz && buf);

View file

@ -214,16 +214,16 @@ divine_flag_change(struct empobj *unit, char *name,
return; return;
} }
symbol_set_fmt(set, sizeof(set), new & ~old, sym, 1); symbol_set_fmt(set, sizeof(set), new & ~old, sym, ", ", 1);
symbol_set_fmt(clr, sizeof(clr), old & ~new, sym, 1); symbol_set_fmt(clr, sizeof(clr), old & ~new, sym, ", ", 1);
pr("%s of %s changed: %s%s%s%s%s\n", pr("%s of %s changed: %s%s%s%s%s\n",
name, unit_nameof(unit), name, unit_nameof(unit),
set, set[0] ? " set" : "", set, set[0] ? " set" : "",
set[0] && clr[0] ? ", and " : "", set[0] && clr[0] ? ", and " : "",
clr, clr[0] ? " cleared" : ""); clr, clr[0] ? " cleared" : "");
if (symbol_set_fmt(set, sizeof(set), new & ~old, sym, 0) if (symbol_set_fmt(set, sizeof(set), new & ~old, sym, ", ", 0)
+ symbol_set_fmt(clr, sizeof(clr), old & ~new, 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", 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), name, unit_nameof(unit), cname(player->cnum),
set, set[0] ? " set" : "", set, set[0] ? " set" : "",

View file

@ -31,7 +31,7 @@
* Jeff Bailey, 1990 * Jeff Bailey, 1990
* Steve McClure, 1996 * Steve McClure, 1996
* Ron Koenderink, 2005-2009 * Ron Koenderink, 2005-2009
* Markus Armbruster, 2006-2011 * Markus Armbruster, 2006-2015
*/ */
#include <config.h> #include <config.h>
@ -658,14 +658,9 @@ show_load(short item[])
static void static void
show_capab(int flags, struct symbol *table) show_capab(int flags, struct symbol *table)
{ {
int i; char buf[1024];
char *p;
for (i = 0; i < 32; i++) { symbol_set_fmt(buf, sizeof(buf), flags, table, " ", 0);
if (!(flags & bit(i))) if (*buf)
continue; pr(" %s", buf);
p = symbol_by_value(bit(i), table);
if (p)
pr(" %s", p);
}
} }