/* * Get string argument. * If @input is not empty, use it. * Else prompt for more input using @prompt. * Copy input to @buf[1024]. * Return @buf on success, else NULL. */ char * getstarg(char *input, char *prompt, char *buf) { *buf = '\0'; if (!input || !*input) { if (!getstring(prompt, buf)) return NULL; } else { strcpy(buf, input); make_stale_if_command_arg(input); } return buf; }
int onearg(char *arg, char *prompt) { int n; char buf[1024]; if (!arg || !*arg) { if (!(arg = getstring(prompt, buf))) return -1; } else make_stale_if_command_arg(arg); n = atoi(arg); if (n < 0) return -1; return n; }
/* * setup the nstr_sect structure for sector selection. * can select on either NS_ALL, NS_AREA, or NS_DIST * iterate thru the "condarg" string looking * for arguments to compile into the nstr. * Using this function for anything but command arguments is usually * incorrect, because it respects conditionals. Use the snxtsct_FOO() * instead. */ int snxtsct(struct nstr_sect *np, char *str) { struct range range; struct natstr *natp; coord cx, cy; int dist; char buf[1024]; if (!str || !*str) { if (!(str = getstring("(sects)? ", buf))) return 0; } else make_stale_if_command_arg(str); switch (sarg_type(str)) { case NS_AREA: if (!sarg_area(str, &range)) return 0; snxtsct_area(np, &range); break; case NS_DIST: if (!sarg_range(str, &cx, &cy, &dist)) return 0; snxtsct_dist(np, cx, cy, dist); break; case NS_ALL: /* * Can't use snxtsct_all(), as it would disclose the real * origin. Use a world-sized area instead. */ natp = getnatp(player->cnum); range.lx = xabs(natp, -WORLD_X / 2); range.ly = yabs(natp, -WORLD_Y / 2); range.hx = xnorm(range.lx + WORLD_X - 1); range.hy = ynorm(range.ly + WORLD_Y - 1); xysize_range(&range); snxtsct_area(np, &range); break; default: return 0; } return snxtsct_use_condarg(np); }