integrate 'msgtype' option and Norep()

Allow 'msgtype=show' for messages that nethack uses Norep() for.
I don't know whether anyone will ever want to do that, but if felt
strange to have two different message suppression mechanisms that
were completely disconnected from each other.

For a user with no msgtype filter, there'll be no difference in
behavior.
This commit is contained in:
PatR
2016-01-08 00:38:34 -08:00
parent f16e9a8890
commit db234f743d
3 changed files with 12 additions and 11 deletions

View File

@@ -1662,7 +1662,7 @@ E boolean FDECL(add_menu_coloring, (char *));
E boolean FDECL(get_menu_coloring, (char *, int *, int *));
E void NDECL(free_menu_coloring);
E boolean FDECL(msgtype_parse_add, (char *));
E int FDECL(msgtype_type, (const char *));
E int FDECL(msgtype_type, (const char *, BOOLEAN_P));
E void NDECL(msgtype_free);
/* ### pager.c ### */

View File

@@ -1455,8 +1455,9 @@ int idx; /* 0 .. */
}
int
msgtype_type(msg)
msgtype_type(msg, norepeat)
const char *msg;
boolean norepeat; /* called from Norep(via pline) */
{
struct plinemsg_type *tmp = plinemsg_types;
@@ -1465,7 +1466,7 @@ const char *msg;
return tmp->msgtype;
tmp = tmp->next;
}
return MSGTYP_NORMAL;
return norepeat ? MSGTYP_NOREP : MSGTYP_NORMAL;
}
int

View File

@@ -83,22 +83,22 @@ VA_DECL(const char *, line)
iflags.last_msg = PLNMSG_UNKNOWN;
return;
}
#ifndef MAC
if (no_repeat && !strcmp(line, toplines))
msgtyp = msgtype_type(line, no_repeat);
if (msgtyp == MSGTYP_NOSHOW
|| (msgtyp == MSGTYP_NOREP && !strcmp(line, prevmsg)))
return;
#endif /* MAC */
if (vision_full_recalc)
vision_recalc(0);
if (u.ux)
flush_screen(1); /* %% */
msgtyp = msgtype_type(line);
if (msgtyp == MSGTYP_NOSHOW) return;
if (msgtyp == MSGTYP_NOREP && !strcmp(line, prevmsg)) return;
putstr(WIN_MESSAGE, 0, line);
/* this gets cleared after every pline message */
iflags.last_msg = PLNMSG_UNKNOWN;
strncpy(prevmsg, line, BUFSZ);
if (msgtyp == MSGTYP_STOP) display_nhwindow(WIN_MESSAGE, TRUE); /* --more-- */
strncpy(prevmsg, line, BUFSZ), prevmsg[BUFSZ - 1] = '\0';
if (msgtyp == MSGTYP_STOP)
display_nhwindow(WIN_MESSAGE, TRUE); /* --more-- */
#if !(defined(USE_STDARG) || defined(USE_VARARGS))
/* provide closing brace for the nested block