/* Extended dump command */ int xdump(void) { char *p; char buf[1024]; struct xdstr xd; struct natstr *natp; int type; int meta = 0; p = getstarg(player->argp[1], "Table name, or meta? ", buf); if (p && strcmp(p, "meta") == 0) { meta = 1; p = getstarg(player->argp[2], "Table name? ", buf); } if (!p || !*p) return RET_SYN; xdinit(&xd, player->cnum, 0, 0, pr); natp = getnatp(player->cnum); type = isdigit(p[0]) ? atoi(p) : ef_byname(p); if (type < 0 || type >= EF_MAX) return RET_SYN; if (meta) return xdmeta(&xd, type); if ((EF_IS_GAME_STATE(type) || EF_IS_VIEW(type)) && !(natp->nat_stat == STAT_ACTIVE || player->god)) { pr("Access to table %s denied\n", ef_nameof(type)); return RET_FAIL; } return xditem(&xd, type, player->argp[2]); }
/* * Verify game configuration is sane. * Return 0 on success, -1 on failure. */ int ef_verify_config(void) { int retval = 0; int i; for (i = 0; i < EF_MAX; i++) { if (!EF_IS_GAME_STATE(i) && !EF_IS_VIEW(i)) retval |= verify_table(i); } /* Special checks */ retval |= verify_ship_chr(); retval |= verify_plane_chr(); retval |= verify_products(); return retval; }
/* * Verify game state is sane. * Correct minor problems, but write corrections to backing files only * if @may_put is non-zero. * Return -1 if uncorrected problems remain, else 0. */ int ef_verify_state(int may_put) { int retval = 0; int i; for (i = 0; i < EF_MAX; i++) { if (EF_IS_GAME_STATE(i) || EF_IS_VIEW(i)) retval |= verify_table(i); } /* Special checks */ retval |= verify_sectors(may_put); retval |= verify_planes(may_put); retval |= verify_lands(may_put); retval |= verify_nukes(may_put); return retval; }
static void verify_fail(int type, int row, struct castr *ca, int idx, char *fmt, ...) { int base = empfile[type].base < 0 ? type : empfile[type].base; va_list ap; fprintf(stderr, "%s %s uid %d", EF_IS_GAME_STATE(base) ? "File" : "Config", ef_nameof(type), row); if (ca) { fprintf(stderr, " field %s", ca->ca_name); if (CA_IS_ARRAY(ca)) fprintf(stderr, "(%d)", idx); } fprintf(stderr, ": "); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); putc('\n', stderr); }