symbol: Make actofgod.c's fmtflags() public as symbol_set_fmt()
Move to nstreval.c, rename, external linkage. Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
67fe316c0c
commit
9fc0719e54
3 changed files with 37 additions and 34 deletions
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Dave Pare, 1989
|
* Dave Pare, 1989
|
||||||
* Markus Armbruster, 2004-2014
|
* Markus Armbruster, 2004-2015
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NSC_H
|
#ifndef NSC_H
|
||||||
|
@ -298,6 +298,7 @@ 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);
|
||||||
/* 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 */
|
||||||
|
|
|
@ -29,12 +29,13 @@
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Dave Pare, 1989
|
* Dave Pare, 1989
|
||||||
* Steve McClure, 1997
|
* Steve McClure, 1997
|
||||||
* Markus Armbruster, 2004-2014
|
* Markus Armbruster, 2004-2015
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "nat.h"
|
#include "nat.h"
|
||||||
|
@ -258,3 +259,31 @@ symbol_by_value(int key, struct symbol *table)
|
||||||
|
|
||||||
return NULL;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* actofgod.c: Deity meddling subroutines
|
* actofgod.c: Deity meddling subroutines
|
||||||
*
|
*
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Markus Armbruster, 2013
|
* Markus Armbruster, 2013-2015
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -203,33 +203,6 @@ divine_unload(struct empobj *unit, int type, int uid)
|
||||||
divine_load_unload(unit, type, uid, "unloaded from");
|
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
|
void
|
||||||
divine_flag_change(struct empobj *unit, char *name,
|
divine_flag_change(struct empobj *unit, char *name,
|
||||||
int old, int new, struct symbol sym[])
|
int old, int new, struct symbol sym[])
|
||||||
|
@ -241,16 +214,16 @@ divine_flag_change(struct empobj *unit, char *name,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fmtflags(set, sizeof(set), new & ~old, sym, 1);
|
symbol_set_fmt(set, sizeof(set), new & ~old, sym, 1);
|
||||||
fmtflags(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 (fmtflags(set, sizeof(set), new & ~old, sym, 0)
|
if (symbol_set_fmt(set, sizeof(set), new & ~old, sym, 0)
|
||||||
+ fmtflags(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" : "",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue