*
* Known contributors to this file:
* Dave Pare, 1989
- * Markus Armbruster, 2004-2014
+ * Markus Armbruster, 2004-2015
*/
#ifndef NSC_H
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 */
* Known contributors to this file:
* Dave Pare, 1989
* Steve McClure, 1997
- * Markus Armbruster, 2004-2014
+ * Markus Armbruster, 2004-2015
*/
#include <config.h>
#include <limits.h>
+#include <stdio.h>
#include <string.h>
#include "file.h"
#include "nat.h"
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;
+}
* actofgod.c: Deity meddling subroutines
*
* Known contributors to this file:
- * Markus Armbruster, 2013
+ * Markus Armbruster, 2013-2015
*/
#include <config.h>
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[])
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" : "",