diff --git a/include/player.h b/include/player.h index 0997d12c..afe0ec9c 100644 --- a/include/player.h +++ b/include/player.h @@ -68,6 +68,7 @@ struct player { struct cmndstr *command; /* currently executing command */ struct iop *iop; char combuf[1024]; /* command input buffer, UTF-8 */ + char argbuf[1024]; /* argument buffer, ASCII */ char *argp[128]; /* arguments, ASCII, valid if command */ char *condarg; /* conditional, ASCII, valid if command */ char *comtail[128]; /* start of args in combuf[] */ diff --git a/src/lib/commands/navi.c b/src/lib/commands/navi.c index fec4bb8c..cc5d51db 100644 --- a/src/lib/commands/navi.c +++ b/src/lib/commands/navi.c @@ -76,7 +76,6 @@ do_unit_move(struct emp_qelem *ulist, int *together, int skip = 0; char buf[1024]; char prompt[128]; - char scanspace[1024]; char pathtaken[1024]; /* Doubtful we'll have a path longer than this */ char *pt = pathtaken; char bmap_flag; @@ -176,7 +175,7 @@ do_unit_move(struct emp_qelem *ulist, int *together, cp++; continue; } - ac = parse(cp, scanspace, player->argp, NULL, NULL, NULL); + ac = parse(cp, player->argbuf, player->argp, NULL, NULL, NULL); if (ac <= 0) { player->argp[0] = ""; cp = NULL; diff --git a/src/lib/player/player.c b/src/lib/player/player.c index 9b8d37a4..6d8571d8 100644 --- a/src/lib/player/player.c +++ b/src/lib/player/player.c @@ -117,7 +117,6 @@ command(void) { struct natstr *natp = getnatp(player->cnum); char *redir; /* UTF-8 */ - char scanspace[1024]; time_t now; prprompt(natp->nat_timeused / 60, natp->nat_btu); @@ -129,8 +128,8 @@ command(void) if (!player->god && !may_play_now(natp, now)) return 0; - if (parse(player->combuf, scanspace, player->argp, player->comtail, - &player->condarg, &redir) < 0) { + if (parse(player->combuf, player->argbuf, player->argp, + player->comtail, &player->condarg, &redir) < 0) { pr("See \"info Syntax\"?\n"); } else { if (dispatch(player->combuf, redir) < 0) @@ -204,19 +203,6 @@ status(void) return 1; } -/* Is ARG one of the player's last command's arguments? */ -static int -is_command_arg(char *arg) -{ - int i; - - for (i = 1; i < 128 && player->argp[i]; i++) { - if (arg == player->argp[i]) - return 1; - } - return 0; -} - /* * Make all objects stale if ARG is one of the player's command arguments. * See ef_make_stale() for what "making stale" means. @@ -230,7 +216,8 @@ is_command_arg(char *arg) void make_stale_if_command_arg(char *arg) { - if (is_command_arg(arg)) + if (player->argbuf <= arg + && arg <= player->argbuf + sizeof(player->argbuf)) ef_make_stale(); } @@ -246,7 +233,6 @@ execute(void) int failed; char *p; /* UTF-8 */ char *redir; /* UTF-8 */ - char scanspace[1024]; failed = 0; @@ -259,10 +245,10 @@ execute(void) while (!failed && status()) { player->nstat &= ~EXEC; - if (getcommand(buf) < 0) + if (getcommand(player->combuf) < 0) break; - if (parse(buf, scanspace, player->argp, player->comtail, - &player->condarg, &redir) < 0) { + if (parse(player->combuf, player->argbuf, player->argp, + player->comtail, &player->condarg, &redir) < 0) { failed = 1; continue; }