static char *
parse(void)
{
-#ifdef LINT /* static char in_line[COLNO]; */
- char in_line[COLNO];
-#else
- static char in_line[COLNO];
-#endif
register int foo;
iflags.in_parse = TRUE;
- g.multi = 0;
+ g.command_count = 0;
g.context.move = 1;
flush_screen(1); /* Flush screen buffer. Put the cursor on the hero. */
alt_esc = iflags.altmeta; /* readchar() hack */
#endif
if (!g.Cmd.num_pad || (foo = readchar()) == g.Cmd.spkeys[NHKF_COUNT]) {
- long tmpmulti = g.multi;
-
- foo = get_count((char *) 0, '\0', LARGEST_INT, &tmpmulti, FALSE);
- g.last_multi = g.multi = tmpmulti;
+ foo = get_count((char *) 0, '\0', LARGEST_INT, &g.command_count, FALSE);
+ g.last_command_count = g.command_count;
}
#ifdef ALTMETA
alt_esc = FALSE; /* readchar() reset */
if (foo == g.Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */
clear_nhwindow(WIN_MESSAGE);
- g.multi = g.last_multi = 0;
- } else if ((foo && foo == g.Cmd.spkeys[NHKF_DOAGAIN]) || g.in_doagain) {
- g.multi = g.last_multi;
+ g.command_count = 0;
+ g.last_command_count = 0;
+ } else if (g.in_doagain) {
+ g.command_count = g.last_command_count;
+ } else if (foo && foo == g.Cmd.spkeys[NHKF_DOAGAIN]) {
+ // g.command_count will be set again when we
+ // re-enter with g.in_doagain set true
+ g.command_count = g.last_command_count;
} else {
- g.last_multi = g.multi;
+ g.last_command_count = g.command_count;
savech(0); /* reset input queue */
savech((char) foo);
}
+ g.multi = g.command_count;
+
if (g.multi) {
g.multi--;
- g.save_cm = in_line;
+ g.save_cm = g.command_line;
} else {
g.save_cm = (char *) 0;
}
}
}
- in_line[0] = foo;
- in_line[1] = '\0';
+ g.command_line[0] = foo;
+ g.command_line[1] = '\0';
if (prefix_cmd(foo)) {
foo = readchar();
savech((char) foo);
- in_line[1] = foo;
- in_line[2] = 0;
+ g.command_line[1] = foo;
+ g.command_line[2] = 0;
}
clear_nhwindow(WIN_MESSAGE);
iflags.in_parse = FALSE;
- return in_line;
+ return g.command_line;
}
#ifdef HANGUPHANDLING
UNDEFINED_VALUES, /* clicklook_cc */
WIN_ERR, /* en_win */
FALSE, /* en_via_menu */
- UNDEFINED_VALUE, /* last_multi */
+ UNDEFINED_VALUE, /* last_command_count */
/* dbridge.c */
UNDEFINED_VALUES, /* occupants */
UNDEFINED_VALUES, /* chosen_windowtype */
DUMMY, /* bases */
0, /* multi */
- NULL, /* g.multi_reason */
+ UNDEFINED_VALUES, /* command_line */
+ 0, /* command_count */
+ NULL, /* multi_reason */
0, /* nroom */
0, /* nsubroom */
0, /* occtime */
static boolean
ok_to_throw(int *shotlimit_p) /* (see dothrow()) */
{
- /* kludge to work around parse()'s pre-decrement of `multi' */
- *shotlimit_p = (g.multi || g.save_cm) ? g.multi + 1 : 0;
+ *shotlimit_p = g.command_count;
g.multi = 0; /* reset; it's been used up */
if (notake(g.youmonst.data)) {
{
int count, tmpcount, ret;
- /* awful kludge to work around parse()'s pre-decrement */
- count = (g.multi || (g.save_cm && *g.save_cm == cmd_from_func(dopickup)))
- ? g.multi + 1 : 0;
+ count = g.command_count;
g.multi = 0; /* always reset */
if ((ret = pickup_checks()) >= 0) {
all clear it too */
if (and_travel)
g.context.travel = g.context.travel1 = g.context.mv = 0;
+
+ // Cancel mutli
+ if (g.multi > 0)
+ g.multi = 0;
}
void