diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-06-26 09:04:06 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-06-26 09:17:31 +0200 |
commit | ae6bee5100bb9ec4e7a3d5fa8538ca3eae38dc58 (patch) | |
tree | 5748e6d032a7a107a547e1ca2049f33a630b4a91 | |
parent | 89116d61bd85e472a89062da4815a66b4b96e6b9 (diff) |
messages: Move message_* functions to separate compilation unit
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/birth.c | 2 | ||||
-rw-r--r-- | src/cmd4.c | 1 | ||||
-rw-r--r-- | src/defines.h | 17 | ||||
-rw-r--r-- | src/externs.h | 14 | ||||
-rw-r--r-- | src/init2.c | 13 | ||||
-rw-r--r-- | src/loadsave.c | 2 | ||||
-rw-r--r-- | src/melee2.c | 1 | ||||
-rw-r--r-- | src/messages.c | 394 | ||||
-rw-r--r-- | src/messages.h | 16 | ||||
-rw-r--r-- | src/plots.c | 3 | ||||
-rw-r--r-- | src/util.c | 323 | ||||
-rw-r--r-- | src/variable.c | 46 | ||||
-rw-r--r-- | src/xtra1.c | 1 |
14 files changed, 426 insertions, 409 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b9d6874a..22563cd4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,7 @@ SET(SRCS main-gcu.c main-x11.c main-xaw.c main-sdl.c main-gtk2.c z-rand.c z-util.c z-form.c z-virt.c z-term.c variable.c tables.c plots.c util.c cave.c dungeon.c - melee1.c melee2.c modules.c + melee1.c melee2.c messages.c modules.c q_god.c object1.c object2.c randart.c squeltch.c traps.c monster1.c monster2.c monster3.c diff --git a/src/birth.c b/src/birth.c index c23e20b8..851e1877 100644 --- a/src/birth.c +++ b/src/birth.c @@ -12,6 +12,8 @@ #include "angband.h" +#include "messages.h" + /* * How often the autoroller will update the display and pause * to check for user interuptions. @@ -12,6 +12,7 @@ #include "angband.h" +#include "messages.h" /* * Hack -- redraw the screen diff --git a/src/defines.h b/src/defines.h index 0b6c4c26..ac74b937 100644 --- a/src/defines.h +++ b/src/defines.h @@ -304,23 +304,6 @@ /* Was 512... 256 quarks added for random artifacts */ /* - * OPTION: Maximum number of messages to remember (see "io.c") - * Default: assume maximal memorization of 2048 total messages - */ -#define MESSAGE_MAX 2048 - -#define MESSAGE_NONE 0 -#define MESSAGE_MSG 1 - -/* - * OPTION: Maximum space for the message text buffer (see "io.c") - * Default: assume that each of the 2048 messages is repeated an - * average of three times, and has an average length of 48 - */ -#define MESSAGE_BUF 32768 - - -/* * Maximum value storable in a "byte" (hard-coded) */ #define MAX_UCHAR 255 diff --git a/src/externs.h b/src/externs.h index 0a6ebb35..ea2c4831 100644 --- a/src/externs.h +++ b/src/externs.h @@ -323,15 +323,6 @@ extern bool_ *macro__cmd; extern char *macro__buf; extern s16b quark__num; extern cptr *quark__str; -extern u16b message__next; -extern u16b message__last; -extern u16b message__head; -extern u16b message__tail; -extern u16b *message__ptr; -extern byte *message__color; -extern byte *message__type; -extern u16b *message__count; -extern char *message__buf; extern u32b option_flag[8]; extern u32b option_mask[8]; extern u32b window_flag[ANGBAND_TERM_MAX]; @@ -2054,11 +2045,6 @@ extern sint macro_find_exact(cptr pat); extern char inkey(void); extern cptr quark_str(s16b num); extern s16b quark_add(cptr str); -extern s16b message_num(void); -extern cptr message_str(int age); -extern byte message_color(int age); -extern byte message_type(int age); -extern void message_add(byte type, cptr msg, byte color); extern void display_message(int x, int y, int split, byte color, cptr t); extern void cmsg_print(byte color, cptr msg); extern void msg_print(cptr msg); diff --git a/src/init2.c b/src/init2.c index 8f20ecfc..dfb8a5dc 100644 --- a/src/init2.c +++ b/src/init2.c @@ -6,6 +6,8 @@ #include <assert.h> +#include "messages.h" + /* * This file is used to initialise various variables and arrays for the * Angband game. Note the use of "fd_read()" and "fd_write()" to bypass @@ -1949,15 +1951,8 @@ static errr init_misc(void) /* Quark variables */ C_MAKE(quark__str, QUARK_MAX, cptr); - /* Message variables */ - C_MAKE(message__ptr, MESSAGE_MAX, u16b); - C_MAKE(message__color, MESSAGE_MAX, byte); - C_MAKE(message__type, MESSAGE_MAX, byte); - C_MAKE(message__count, MESSAGE_MAX, u16b); - C_MAKE(message__buf, MESSAGE_BUF, char); - - /* Hack -- No messages yet */ - message__tail = MESSAGE_BUF; + /* Initialize messages subsystem */ + message_init(); /* Initialize game */ process_hooks(HOOK_INIT_GAME, "(s)", "begin"); diff --git a/src/loadsave.c b/src/loadsave.c index 049801de..598858db 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -6,6 +6,8 @@ #include "angband.h" +#include "messages.h" + static void do_byte(byte *, int); static void do_bool(bool_ *, int); static void do_u16b(u16b *, int); diff --git a/src/melee2.c b/src/melee2.c index 6ada6bd0..96f34bcb 100644 --- a/src/melee2.c +++ b/src/melee2.c @@ -16,6 +16,7 @@ */ #include "angband.h" +#include "messages.h" #define SPEAK_CHANCE 8 #define GRINDNOISE 20 diff --git a/src/messages.c b/src/messages.c new file mode 100644 index 00000000..d39ad84b --- /dev/null +++ b/src/messages.c @@ -0,0 +1,394 @@ +#include "messages.h" + +#include "angband.h" + +/* + * OPTION: Maximum number of messages to remember (see "io.c") + * Default: assume maximal memorization of 2048 total messages + */ +#define MESSAGE_MAX 2048 + +/* + * OPTION: Maximum space for the message text buffer (see "io.c") + * Default: assume that each of the 2048 messages is repeated an + * average of three times, and has an average length of 48 + */ +#define MESSAGE_BUF 32768 + + + + +/* + * The next "free" index to use + */ +static u16b message__next; + +/* + * The index of the oldest message (none yet) + */ +static u16b message__last; + +/* + * The next "free" offset + */ +static u16b message__head; + +/* + * The offset to the oldest used char (none yet) + */ +static u16b message__tail; + +/* + * The array of offsets, by index [MESSAGE_MAX] + */ +static u16b *message__ptr; + +/* + * The array of colors, by index [MESSAGE_MAX] + */ +static byte *message__color; + +/* + * The array of type, by index [MESSAGE_MAX] + */ +static byte *message__type; + +/* + * The array of message counts, by index [MESSAGE_MAX] + */ +static u16b *message__count; + +/* + * The array of chars, by offset [MESSAGE_BUF] + */ +static char *message__buf; + + +/* +* Second try for the "message" handling routines. +* +* Each call to "message_add(s)" will add a new "most recent" message +* to the "message recall list", using the contents of the string "s". +* +* The messages will be stored in such a way as to maximize "efficiency", +* that is, we attempt to maximize the number of sequential messages that +* can be retrieved, given a limited amount of storage space. +* +* We keep a buffer of chars to hold the "text" of the messages, not +* necessarily in "order", and an array of offsets into that buffer, +* representing the actual messages. This is made more complicated +* by the fact that both the array of indexes, and the buffer itself, +* are both treated as "circular arrays" for efficiency purposes, but +* the strings may not be "broken" across the ends of the array. +* +* The "message_add()" function is rather "complex", because it must be +* extremely efficient, both in space and time, for use with the Borg. +*/ + +void message_init() +{ + /* Message variables */ + C_MAKE(message__ptr, MESSAGE_MAX, u16b); + C_MAKE(message__color, MESSAGE_MAX, byte); + C_MAKE(message__type, MESSAGE_MAX, byte); + C_MAKE(message__count, MESSAGE_MAX, u16b); + C_MAKE(message__buf, MESSAGE_BUF, char); + + /* Hack -- No messages yet */ + message__tail = MESSAGE_BUF; +} + +/* +* How many messages are "available"? +*/ +s16b message_num(void) +{ + int last, next, n; + + /* Extract the indexes */ + last = message__last; + next = message__next; + + /* Handle "wrap" */ + if (next < last) next += MESSAGE_MAX; + + /* Extract the space */ + n = (next - last); + + /* Return the result */ + return (n); +} + + + +/* +* Recall the "text" of a saved message +*/ +cptr message_str(int age) +{ + static char buf[1024]; + s16b x; + s16b o; + cptr s; + + /* Forgotten messages have no text */ + if ((age < 0) || (age >= message_num())) return (""); + + /* Acquire the "logical" index */ + x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; + + /* Get the "offset" for the message */ + o = message__ptr[x]; + + /* Access the message text */ + s = &message__buf[o]; + + /* Hack -- Handle repeated messages */ + if (message__count[x] > 1) + { + strnfmt(buf, 1024, "%s <%dx>", s, message__count[x]); + s = buf; + } + + /* Return the message text */ + return (s); +} + +/* +* Recall the color of a saved message +*/ +byte message_color(int age) +{ + s16b x; + byte color = TERM_WHITE; + + /* Forgotten messages have no text */ + if ((age < 0) || (age >= message_num())) return (TERM_WHITE); + + /* Acquire the "logical" index */ + x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; + + /* Get the "offset" for the message */ + color = message__color[x]; + + /* Return the message text */ + return (color); +} + +/* + * Recall the type of a saved message + */ +byte message_type(int age) +{ + s16b x; + byte type; + + /* Forgotten messages have no text */ + if ((age < 0) || (age >= message_num())) return (MESSAGE_NONE); + + /* Acquire the "logical" index */ + x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; + + /* Get the "offset" for the message */ + type = message__type[x]; + + /* Return the message text */ + return (type); +} + + + +/* +* Add a new message, with great efficiency +*/ +void message_add(byte type, cptr str, byte color) +{ + int i, k, x, n; + cptr s; + + + /*** Step 1 -- Analyze the message ***/ + + /* Hack -- Ignore "non-messages" */ + if (!str) return; + + /* Message length */ + n = strlen(str); + + /* Important Hack -- Ignore "long" messages */ + if (n >= MESSAGE_BUF / 4) return; + + + /*** Step 2 -- Handle repeated messages ***/ + + /* Acquire the "logical" last index */ + x = (message__next + MESSAGE_MAX - 1) % MESSAGE_MAX; + + /* Get the last message text */ + s = &message__buf[message__ptr[x]]; + + /* Last message repeated? */ + if (streq(str, s)) + { + /* Increase the message count */ + message__count[x]++; + + /* Success */ + return; + } + + + /*** Step 3 -- Attempt to optimize ***/ + + /* Limit number of messages to check */ + k = message_num() / 4; + + /* Limit number of messages to check */ + if (k > MESSAGE_MAX / 32) k = MESSAGE_MAX / 32; + + /* Check the last few messages (if any to count) */ + for (i = message__next; k; k--) + { + u16b q; + + cptr old; + + /* Back up and wrap if needed */ + if (i-- == 0) i = MESSAGE_MAX - 1; + + /* Stop before oldest message */ + if (i == message__last) break; + + /* Extract "distance" from "head" */ + q = (message__head + MESSAGE_BUF - message__ptr[i]) % MESSAGE_BUF; + + /* Do not optimize over large distance */ + if (q > MESSAGE_BUF / 2) continue; + + /* Access the old string */ + old = &message__buf[message__ptr[i]]; + + /* Compare */ + if (!streq(old, str)) continue; + + /* Get the next message index, advance */ + x = message__next++; + + /* Handle wrap */ + if (message__next == MESSAGE_MAX) message__next = 0; + + /* Kill last message if needed */ + if (message__next == message__last) message__last++; + + /* Handle wrap */ + if (message__last == MESSAGE_MAX) message__last = 0; + + /* Assign the starting address */ + message__ptr[x] = message__ptr[i]; + message__color[x] = color; + message__type[x] = type; + message__count[x] = 1; + + /* Success */ + return; + } + + + /*** Step 4 -- Ensure space before end of buffer ***/ + + /* Kill messages and Wrap if needed */ + if (message__head + n + 1 >= MESSAGE_BUF) + { + /* Kill all "dead" messages */ + for (i = message__last; TRUE; i++) + { + /* Wrap if needed */ + if (i == MESSAGE_MAX) i = 0; + + /* Stop before the new message */ + if (i == message__next) break; + + /* Kill "dead" messages */ + if (message__ptr[i] >= message__head) + { + /* Track oldest message */ + message__last = i + 1; + } + } + + /* Wrap "tail" if needed */ + if (message__tail >= message__head) message__tail = 0; + + /* Start over */ + message__head = 0; + } + + + /*** Step 5 -- Ensure space before next message ***/ + + /* Kill messages if needed */ + if (message__head + n + 1 > message__tail) + { + /* Grab new "tail" */ + message__tail = message__head + n + 1; + + /* Advance tail while possible past first "nul" */ + while (message__buf[message__tail - 1]) message__tail++; + + /* Kill all "dead" messages */ + for (i = message__last; TRUE; i++) + { + /* Wrap if needed */ + if (i == MESSAGE_MAX) i = 0; + + /* Stop before the new message */ + if (i == message__next) break; + + /* Kill "dead" messages */ + if ((message__ptr[i] >= message__head) && + (message__ptr[i] < message__tail)) + { + /* Track oldest message */ + message__last = i + 1; + } + } + } + + + /*** Step 6 -- Grab a new message index ***/ + + /* Get the next message index, advance */ + x = message__next++; + + /* Handle wrap */ + if (message__next == MESSAGE_MAX) message__next = 0; + + /* Kill last message if needed */ + if (message__next == message__last) message__last++; + + /* Handle wrap */ + if (message__last == MESSAGE_MAX) message__last = 0; + + + + /*** Step 7 -- Insert the message text ***/ + + /* Assign the starting address */ + message__ptr[x] = message__head; + message__color[x] = color; + message__type[x] = type; + message__count[x] = 1; + + /* Append the new part of the message */ + for (i = 0; i < n; i++) + { + /* Copy the message */ + message__buf[message__head + i] = str[i]; + } + + /* Terminate */ + message__buf[message__head + i] = '\0'; + + /* Advance the "head" pointer */ + message__head += n + 1; +} diff --git a/src/messages.h b/src/messages.h new file mode 100644 index 00000000..2b02f0c3 --- /dev/null +++ b/src/messages.h @@ -0,0 +1,16 @@ +#ifndef H_f6dac2dc_0449_4764_9942_1c1fe7a70bc4 +#define H_f6dac2dc_0449_4764_9942_1c1fe7a70bc4 + +#include "h-type.h" + +#define MESSAGE_NONE 0 +#define MESSAGE_MSG 1 + +void message_init(); +s16b message_num(); +cptr message_str(int age); +byte message_color(int age); +byte message_type(int age); +void message_add(byte type, cptr msg, byte color); + +#endif diff --git a/src/plots.c b/src/plots.c index f5801ec3..754ab401 100644 --- a/src/plots.c +++ b/src/plots.c @@ -11,8 +11,11 @@ */ #include "angband.h" + #include <assert.h> +#include "messages.h" + /* #define DEBUG_HOOK */ /******** Hooks stuff *********/ @@ -4,6 +4,7 @@ #include "angband.h" +#include "messages.h" @@ -2128,328 +2129,6 @@ cptr quark_str(s16b i) } - - -/* -* Second try for the "message" handling routines. -* -* Each call to "message_add(s)" will add a new "most recent" message -* to the "message recall list", using the contents of the string "s". -* -* The messages will be stored in such a way as to maximize "efficiency", -* that is, we attempt to maximize the number of sequential messages that -* can be retrieved, given a limited amount of storage space. -* -* We keep a buffer of chars to hold the "text" of the messages, not -* necessarily in "order", and an array of offsets into that buffer, -* representing the actual messages. This is made more complicated -* by the fact that both the array of indexes, and the buffer itself, -* are both treated as "circular arrays" for efficiency purposes, but -* the strings may not be "broken" across the ends of the array. -* -* The "message_add()" function is rather "complex", because it must be -* extremely efficient, both in space and time, for use with the Borg. -*/ - - - -/* -* How many messages are "available"? -*/ -s16b message_num(void) -{ - int last, next, n; - - /* Extract the indexes */ - last = message__last; - next = message__next; - - /* Handle "wrap" */ - if (next < last) next += MESSAGE_MAX; - - /* Extract the space */ - n = (next - last); - - /* Return the result */ - return (n); -} - - - -/* -* Recall the "text" of a saved message -*/ -cptr message_str(int age) -{ - static char buf[1024]; - s16b x; - s16b o; - cptr s; - - /* Forgotten messages have no text */ - if ((age < 0) || (age >= message_num())) return (""); - - /* Acquire the "logical" index */ - x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; - - /* Get the "offset" for the message */ - o = message__ptr[x]; - - /* Access the message text */ - s = &message__buf[o]; - - /* Hack -- Handle repeated messages */ - if (message__count[x] > 1) - { - strnfmt(buf, 1024, "%s <%dx>", s, message__count[x]); - s = buf; - } - - /* Return the message text */ - return (s); -} - -/* -* Recall the color of a saved message -*/ -byte message_color(int age) -{ - s16b x; - byte color = TERM_WHITE; - - /* Forgotten messages have no text */ - if ((age < 0) || (age >= message_num())) return (TERM_WHITE); - - /* Acquire the "logical" index */ - x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; - - /* Get the "offset" for the message */ - color = message__color[x]; - - /* Return the message text */ - return (color); -} - -/* - * Recall the type of a saved message - */ -byte message_type(int age) -{ - s16b x; - byte type; - - /* Forgotten messages have no text */ - if ((age < 0) || (age >= message_num())) return (MESSAGE_NONE); - - /* Acquire the "logical" index */ - x = (message__next + MESSAGE_MAX - (age + 1)) % MESSAGE_MAX; - - /* Get the "offset" for the message */ - type = message__type[x]; - - /* Return the message text */ - return (type); -} - - - -/* -* Add a new message, with great efficiency -*/ -void message_add(byte type, cptr str, byte color) -{ - int i, k, x, n; - cptr s; - - - /*** Step 1 -- Analyze the message ***/ - - /* Hack -- Ignore "non-messages" */ - if (!str) return; - - /* Message length */ - n = strlen(str); - - /* Important Hack -- Ignore "long" messages */ - if (n >= MESSAGE_BUF / 4) return; - - - /*** Step 2 -- Handle repeated messages ***/ - - /* Acquire the "logical" last index */ - x = (message__next + MESSAGE_MAX - 1) % MESSAGE_MAX; - - /* Get the last message text */ - s = &message__buf[message__ptr[x]]; - - /* Last message repeated? */ - if (streq(str, s)) - { - /* Increase the message count */ - message__count[x]++; - - /* Success */ - return; - } - - - /*** Step 3 -- Attempt to optimize ***/ - - /* Limit number of messages to check */ - k = message_num() / 4; - - /* Limit number of messages to check */ - if (k > MESSAGE_MAX / 32) k = MESSAGE_MAX / 32; - - /* Check the last few messages (if any to count) */ - for (i = message__next; k; k--) - { - u16b q; - - cptr old; - - /* Back up and wrap if needed */ - if (i-- == 0) i = MESSAGE_MAX - 1; - - /* Stop before oldest message */ - if (i == message__last) break; - - /* Extract "distance" from "head" */ - q = (message__head + MESSAGE_BUF - message__ptr[i]) % MESSAGE_BUF; - - /* Do not optimize over large distance */ - if (q > MESSAGE_BUF / 2) continue; - - /* Access the old string */ - old = &message__buf[message__ptr[i]]; - - /* Compare */ - if (!streq(old, str)) continue; - - /* Get the next message index, advance */ - x = message__next++; - - /* Handle wrap */ - if (message__next == MESSAGE_MAX) message__next = 0; - - /* Kill last message if needed */ - if (message__next == message__last) message__last++; - - /* Handle wrap */ - if (message__last == MESSAGE_MAX) message__last = 0; - - /* Assign the starting address */ - message__ptr[x] = message__ptr[i]; - message__color[x] = color; - message__type[x] = type; - message__count[x] = 1; - - /* Success */ - return; - } - - - /*** Step 4 -- Ensure space before end of buffer ***/ - - /* Kill messages and Wrap if needed */ - if (message__head + n + 1 >= MESSAGE_BUF) - { - /* Kill all "dead" messages */ - for (i = message__last; TRUE; i++) - { - /* Wrap if needed */ - if (i == MESSAGE_MAX) i = 0; - - /* Stop before the new message */ - if (i == message__next) break; - - /* Kill "dead" messages */ - if (message__ptr[i] >= message__head) - { - /* Track oldest message */ - message__last = i + 1; - } - } - - /* Wrap "tail" if needed */ - if (message__tail >= message__head) message__tail = 0; - - /* Start over */ - message__head = 0; - } - - - /*** Step 5 -- Ensure space before next message ***/ - - /* Kill messages if needed */ - if (message__head + n + 1 > message__tail) - { - /* Grab new "tail" */ - message__tail = message__head + n + 1; - - /* Advance tail while possible past first "nul" */ - while (message__buf[message__tail - 1]) message__tail++; - - /* Kill all "dead" messages */ - for (i = message__last; TRUE; i++) - { - /* Wrap if needed */ - if (i == MESSAGE_MAX) i = 0; - - /* Stop before the new message */ - if (i == message__next) break; - - /* Kill "dead" messages */ - if ((message__ptr[i] >= message__head) && - (message__ptr[i] < message__tail)) - { - /* Track oldest message */ - message__last = i + 1; - } - } - } - - - /*** Step 6 -- Grab a new message index ***/ - - /* Get the next message index, advance */ - x = message__next++; - - /* Handle wrap */ - if (message__next == MESSAGE_MAX) message__next = 0; - - /* Kill last message if needed */ - if (message__next == message__last) message__last++; - - /* Handle wrap */ - if (message__last == MESSAGE_MAX) message__last = 0; - - - - /*** Step 7 -- Insert the message text ***/ - - /* Assign the starting address */ - message__ptr[x] = message__head; - message__color[x] = color; - message__type[x] = type; - message__count[x] = 1; - - /* Append the new part of the message */ - for (i = 0; i < n; i++) - { - /* Copy the message */ - message__buf[message__head + i] = str[i]; - } - - /* Terminate */ - message__buf[message__head + i] = '\0'; - - /* Advance the "head" pointer */ - message__head += n + 1; -} - - - /* * Hack -- flush */ diff --git a/src/variable.c b/src/variable.c index 11f0867b..ab9bf699 100644 --- a/src/variable.c +++ b/src/variable.c @@ -494,52 +494,6 @@ cptr *quark__str; /* - * The next "free" index to use - */ -u16b message__next; - -/* - * The index of the oldest message (none yet) - */ -u16b message__last; - -/* - * The next "free" offset - */ -u16b message__head; - -/* - * The offset to the oldest used char (none yet) - */ -u16b message__tail; - -/* - * The array of offsets, by index [MESSAGE_MAX] - */ -u16b *message__ptr; - -/* - * The array of colors, by index [MESSAGE_MAX] - */ -byte *message__color; - -/* - * The array of type, by index [MESSAGE_MAX] - */ -byte *message__type; - -/* - * The array of message counts, by index [MESSAGE_MAX] - */ -u16b *message__count; - -/* - * The array of chars, by offset [MESSAGE_BUF] - */ -char *message__buf; - - -/* * The array of normal options */ u32b option_flag[8]; diff --git a/src/xtra1.c b/src/xtra1.c index 4ccdf08e..0cc3ccac 100644 --- a/src/xtra1.c +++ b/src/xtra1.c @@ -12,6 +12,7 @@ #include "angband.h" +#include "messages.h" /* * Converts stat num into a six-char (right justified) string |