From db234f743d99a770443174f2f7e74074305b9327 Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 8 Jan 2016 00:38:34 -0800 Subject: [PATCH] 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. --- include/extern.h | 2 +- src/options.c | 5 +++-- src/pline.c | 16 ++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/extern.h b/include/extern.h index 3e58ee565..70ce04b31 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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 ### */ diff --git a/src/options.c b/src/options.c index 11a26c074..f706d2c0a 100644 --- a/src/options.c +++ b/src/options.c @@ -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 diff --git a/src/pline.c b/src/pline.c index ce4b60702..4ada9bff7 100644 --- a/src/pline.c +++ b/src/pline.c @@ -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 -- 2.40.0