/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2004, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
{NSC_INT, 0, 0, offsetof(struct mchrstr, m_speed), "speed"},
{NSC_INT, 0, 0, offsetof(struct mchrstr, m_visib), "visib"},
{NSC_INT, 0, 0, offsetof(struct mchrstr, m_vrnge), "vrnge"},
+ {NSC_INT, 0, 0, offsetof(struct mchrstr, m_frnge), "frnge"},
{NSC_INT, 0, 0, offsetof(struct mchrstr, m_glim), "glim"},
{NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nxlight), "nxlight"},
{NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nchoppers), "nchoppers"},
}
/*
- * Evaluate a attribute of an object into VAL.
+ * Evaluate a attribute of an object into VAL, return VAL.
* TYPE is the attribute's type.
* PTR points to the context object.
* The attribute is stored there at offset OFF + IDX * S, where S is
static char *
xdprval(struct valstr *val, char *sep)
{
- char *s, *e;
+ unsigned char *s, *e;
switch (val->val_type) {
case NSC_TYPEID:
pr("%s%g", sep, val->val_as.dbl);
break;
case NSC_STRING:
- s = val->val_as.str;
+ s = (unsigned char *)val->val_as.str;
if (s) {
pr("%s\"", sep);
while (*s) {
- for (e = s; *e != '"' && *e != '\\' && isprint(*e); ++e) ;
+ for (e = s; *e != '"' && *e != '\\' && isgraph(*e); ++e) ;
pr("%.*s", (int)(e-s), s);
if (*e)
pr("\\%03o", *e++);
return RET_OK;
}
+static int
+xdver(void)
+{
+ struct keymatch *kp;
+ char *sep;
+ struct valstr val;
+
+ xdhdr1("version");
+
+ sep = "";
+ for (kp = configkeys; kp->km_key; ++kp) {
+ if (kp->km_type != NSC_NOTYPE && !(kp->km_flags & KM_INTERNAL)) {
+ pr("%s%s", sep, kp->km_key);
+ sep = " ";
+ }
+ }
+ pr("\n");
+
+ sep = "";
+ for (kp = configkeys; kp->km_key; ++kp) {
+ if (kp->km_type != NSC_NOTYPE && !(kp->km_flags & KM_INTERNAL)) {
+ xdeval(&val, kp->km_type, kp->km_data, 0, 0);
+ sep = xdprval(&val, sep);
+ }
+ }
+ pr("\n");
+
+ return RET_OK;
+}
+
/* Experimental extended dump command */
int
xdump(void)
return xdchr(chridx_by_name(player->argp[2]));
} else if (!strncmp(p, "opt", strlen(p))) {
return xdopt();
+ } else if (!strncmp(p, "ver", strlen(p))) {
+ return xdver();
}
return RET_SYN;