Fix extra prompt after abort due to misuse of snxtitem()

The old code used getstarg() to get an argument with a different
prompt than snxtitem() uses, then passed the value to snxtitem()
unchecked.  If the player aborts, getstarg() returns a null pointer,
and snxtitem() prompts again.  Affected:

* load/lload plane/land third argument; load_plane_ship(),
  load_land_ship(), load_plane_land(), load_land_land()

* bomb, drop, fly, paradrop, recon and sweep second argument;
  get_planes()

* tend and ltend second and fourth argument; ltend(), tend(),
  tend_land()

* mission second argument; mission()

Fix by making snxtitem() taking a prompt argument, null pointer
requests the old prompt.

Use that to simplify multifire() and torp().  Change the other callers
to pass NULL.
This commit is contained in:
Markus Armbruster 2008-07-26 21:35:00 -04:00
parent 9f4ce71a54
commit 3cc8de8aef
67 changed files with 108 additions and 113 deletions

View file

@ -51,7 +51,7 @@
* instead.
*/
int
snxtitem(struct nstr_item *np, int type, char *str)
snxtitem(struct nstr_item *np, int type, char *str, char *prompt)
{
struct range range;
int list[NS_LSIZE];
@ -59,13 +59,16 @@ snxtitem(struct nstr_item *np, int type, char *str)
coord cx, cy;
int dist;
int flags;
char prompt[128];
char promptbuf[128];
char buf[1024];
np->type = EF_BAD;
np->sel = NS_UNDEF;
if (str == 0) {
sprintf(prompt, "%s(s)? ", ef_nameof(type));
if (!prompt) {
sprintf(promptbuf, "%s(s)? ", ef_nameof(type));
prompt = promptbuf;
}
str = getstring(prompt, buf);
if (str == 0)
return 0;