diff options
Diffstat (limited to 'rogue/message.c')
-rw-r--r-- | rogue/message.c | 89 |
1 files changed, 42 insertions, 47 deletions
diff --git a/rogue/message.c b/rogue/message.c index 3e30e046..46327720 100644 --- a/rogue/message.c +++ b/rogue/message.c @@ -1,4 +1,4 @@ -/* $NetBSD: message.c,v 1.10 2003/08/07 09:37:38 agc Exp $ */ +/* $NetBSD: message.c,v 1.11 2007/12/27 23:53:00 dholland Exp $ */ /* * Copyright (c) 1988, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)message.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: message.c,v 1.10 2003/08/07 09:37:38 agc Exp $"); +__RCSID("$NetBSD: message.c,v 1.11 2007/12/27 23:53:00 dholland Exp $"); #endif #endif /* not lint */ @@ -55,6 +55,7 @@ __RCSID("$NetBSD: message.c,v 1.10 2003/08/07 09:37:38 agc Exp $"); #include <signal.h> #include <termios.h> +#include <stdarg.h> #include "rogue.h" char msgs[NMESSAGES][DCOLS] = {"", "", "", "", ""}; @@ -63,6 +64,9 @@ boolean msg_cleared = 1, rmsg = 0; char hunger_str[HUNGER_STR_LEN] = ""; const char *more = "-more-"; +static void message __P((const char *, boolean)); + +static void message(msg, intrpt) const char *msg; @@ -86,7 +90,7 @@ message(msg, intrpt) } if (!rmsg) { imsg = (imsg + 1) % NMESSAGES; - (void) strcpy(msgs[imsg], msg); + (void) strlcpy(msgs[imsg], msg, sizeof(msgs[imsg])); } mvaddstr(MIN_ROW-1, 0, msg); addch(' '); @@ -103,6 +107,19 @@ message(msg, intrpt) } void +messagef(boolean intrpt, const char *fmt, ...) +{ + va_list ap; + char buf[DCOLS]; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + + message(buf, intrpt); +} + +void remessage(c) short c; { @@ -132,9 +149,10 @@ check_message() } int -get_input_line(prompt, insert, buf, if_cancelled, add_blank, do_echo) +get_input_line(prompt, insert, buf, buflen, if_cancelled, add_blank, do_echo) const char *prompt, *insert; char *buf; + size_t buflen; const char *if_cancelled; boolean add_blank; boolean do_echo; @@ -147,14 +165,14 @@ get_input_line(prompt, insert, buf, if_cancelled, add_blank, do_echo) if (insert[0]) { mvaddstr(0, n + 1, insert); - (void) strcpy(buf, insert); - i = strlen(insert); + (void) strlcpy(buf, insert, buflen); + i = strlen(buf); move(0, (n + i + 1)); refresh(); } while (((ch = rgetchar()) != '\r') && (ch != '\n') && (ch != CANCEL)) { - if ((ch >= ' ') && (ch <= '~') && (i < MAX_TITLE_LENGTH-2)) { + if ((ch >= ' ') && (ch <= '~') && (i < buflen-2)) { if ((ch != ' ') || (i > 0)) { buf[i++] = ch; if (do_echo) { @@ -239,9 +257,7 @@ print_stats(stat_mask) mvaddstr(row, 0, "Level: "); } /* max level taken care of in make_level() */ - sprintf(buf, "%d", cur_level); - mvaddstr(row, 7, buf); - pad(buf, 2); + mvprintw(row, 7, "%-2d", cur_level); } if (stat_mask & STAT_GOLD) { if (label) { @@ -250,9 +266,7 @@ print_stats(stat_mask) if (rogue.gold > MAX_GOLD) { rogue.gold = MAX_GOLD; } - sprintf(buf, "%ld", rogue.gold); - mvaddstr(row, 16, buf); - pad(buf, 6); + mvprintw(row, 16, "%-6ld", rogue.gold); } if (stat_mask & STAT_HP) { if (label) { @@ -262,9 +276,9 @@ print_stats(stat_mask) rogue.hp_current -= (rogue.hp_max - MAX_HP); rogue.hp_max = MAX_HP; } - sprintf(buf, "%d(%d)", rogue.hp_current, rogue.hp_max); - mvaddstr(row, 27, buf); - pad(buf, 8); + snprintf(buf, sizeof(buf), "%d(%d)", + rogue.hp_current, rogue.hp_max); + mvprintw(row, 27, "%-8s", buf); } if (stat_mask & STAT_STRENGTH) { if (label) { @@ -274,10 +288,9 @@ print_stats(stat_mask) rogue.str_current -= (rogue.str_max - MAX_STRENGTH); rogue.str_max = MAX_STRENGTH; } - sprintf(buf, "%d(%d)", (rogue.str_current + add_strength), - rogue.str_max); - mvaddstr(row, 41, buf); - pad(buf, 6); + snprintf(buf, sizeof(buf), "%d(%d)", + (rogue.str_current + add_strength), rogue.str_max); + mvprintw(row, 41, "%-6s", buf); } if (stat_mask & STAT_ARMOR) { if (label) { @@ -286,9 +299,7 @@ print_stats(stat_mask) if (rogue.armor && (rogue.armor->d_enchant > MAX_ARMOR)) { rogue.armor->d_enchant = MAX_ARMOR; } - sprintf(buf, "%d", get_armor_class(rogue.armor)); - mvaddstr(row, 53, buf); - pad(buf, 2); + mvprintw(row, 53, "%-2d", get_armor_class(rogue.armor)); } if (stat_mask & STAT_EXP) { if (label) { @@ -300,9 +311,9 @@ print_stats(stat_mask) if (rogue.exp > MAX_EXP_LEVEL) { rogue.exp = MAX_EXP_LEVEL; } - sprintf(buf, "%d/%ld", rogue.exp, rogue.exp_points); - mvaddstr(row, 61, buf); - pad(buf, 11); + snprintf(buf, sizeof(buf), "%d/%ld", + rogue.exp, rogue.exp_points); + mvprintw(row, 61, "%-11s", buf); } if (stat_mask & STAT_HUNGER) { mvaddstr(row, 73, hunger_str); @@ -312,37 +323,21 @@ print_stats(stat_mask) } void -pad(s, n) - const char *s; - short n; -{ - short i; - - for (i = strlen(s); i < n; i++) { - addch(' '); - } -} - -void save_screen() { FILE *fp; short i, j; char buf[DCOLS+2]; - boolean found_non_blank; if ((fp = fopen("rogue.screen", "w")) != NULL) { for (i = 0; i < DROWS; i++) { - found_non_blank = 0; - for (j = (DCOLS - 1); j >= 0; j--) { + for (j=0; j<DCOLS; j++) { buf[j] = mvinch(i, j); - if (!found_non_blank) { - if ((buf[j] != ' ') || (j == 0)) { - buf[j + ((j == 0) ? 0 : 1)] = 0; - found_non_blank = 1; - } - } } + /*buf[DCOLS] = 0; -- redundant */ + for (j=DCOLS; j>0 && buf[j-1]==' '; j--); + buf[j] = 0; + fputs(buf, fp); putc('\n', fp); } |