OSDN Git Service

[Refactor] #37353 コメント整理 / Refactor comments.
[hengband/hengband.git] / src / util.c
index 2fdb8b1..e1972e3 100644 (file)
@@ -11,6 +11,7 @@
 /* Purpose: Angband utilities -BEN- */
 
 #include "angband.h"
+#include "monster-hook.h"
 
 
 static int num_more = 0;
@@ -283,11 +284,10 @@ static errr path_temp(char *buf, int max)
        /* Temp file */
        s = tmpnam(NULL);
 
-       /* Oops */
        if (!s) return (-1);
 
        /* Format to length */
-#ifndef WIN32
+#if !defined(WIN32) || (defined(_MSC_VER) && (_MSC_VER >= 1900))
        (void)strnfmt(buf, max, "%s", s);
 #else
        (void)strnfmt(buf, max, ".%s", s);
@@ -438,9 +438,7 @@ FILE *my_fopen_temp(char *buf, int max)
 errr my_fgets(FILE *fff, char *buf, huge n)
 {
        huge i = 0;
-
        char *s;
-
        char tmp[1024];
 
        /* Read a line */
@@ -503,7 +501,7 @@ errr my_fgets(FILE *fff, char *buf, huge n)
                        }
 #endif
                        /* Handle printables */
-                       else if (isprint(*s))
+                       else if (isprint((unsigned char)*s))
                        {
                                /* Copy */
                                buf[i++] = *s;
@@ -529,10 +527,8 @@ errr my_fgets(FILE *fff, char *buf, huge n)
 
 /*
  * Hack -- replacement for "fputs()"
- *
  * Dump a string, plus a newline, to a file
- *
- * XXX XXX XXX Process internal weirdness?
+ * Process internal weirdness?
  */
 errr my_fputs(FILE *fff, cptr buf, huge n)
 {
@@ -562,18 +558,6 @@ errr my_fputs(FILE *fff, cptr buf, huge n)
 
 
 /*
- * Code Warrior is a little weird about some functions
- */
-#ifdef BEN_HACK
-extern int open(const char *, int, ...);
-extern int close(int);
-extern int read(int, void *, unsigned int);
-extern int write(int, const void *, unsigned int);
-extern long lseek(int, long, int);
-#endif /* BEN_HACK */
-
-
-/*
  * The Macintosh is a little bit brain-dead sometimes
  */
 #ifdef MACINTOSH
@@ -605,7 +589,6 @@ errr fd_kill(cptr file)
        /* Remove */
        (void)remove(buf);
 
-       /* XXX XXX XXX */
        return (0);
 }
 
@@ -627,7 +610,6 @@ errr fd_move(cptr file, cptr what)
        /* Rename */
        (void)rename(buf, aux);
 
-       /* XXX XXX XXX */
        return (0);
 }
 
@@ -678,44 +660,22 @@ errr fd_copy(cptr file, cptr what)
        fd_close(src_fd);
        fd_close(dst_fd);
 
-       /* XXX XXX XXX */
        return (0);
 }
 
 
 /*
  * Hack -- attempt to open a file descriptor (create file)
- *
  * This function should fail if the file already exists
- *
  * Note that we assume that the file should be "binary"
- *
- * XXX XXX XXX The horrible "BEN_HACK" code is for compiling under
- * the CodeWarrior compiler, in which case, for some reason, none
- * of the "O_*" flags are defined, and we must fake the definition
- * of "O_RDONLY", "O_WRONLY", and "O_RDWR" in "A-win-h", and then
- * we must simulate the effect of the proper "open()" call below.
  */
-int fd_make(cptr file, int mode)
+int fd_make(cptr file, BIT_FLAGS mode)
 {
        char buf[1024];
 
        /* Hack -- Try to parse the path */
        if (path_parse(buf, 1024, file)) return (-1);
 
-#ifdef BEN_HACK
-
-       /* Check for existance */
-       /* if (fd_close(fd_open(file, O_RDONLY | O_BINARY))) return (1); */
-
-       /* Mega-Hack -- Create the file */
-       (void)my_fclose(my_fopen(file, "wb"));
-
-       /* Re-open the file for writing */
-       return (open(buf, O_WRONLY | O_BINARY, mode));
-
-#else /* BEN_HACK */
-
 #if defined(MAC_MPW) || defined(MACH_O_CARBON)
        {
                int fdes;
@@ -726,12 +686,11 @@ int fd_make(cptr file, int mode)
                /* Return the descriptor */
                return (fdes);
        }
-# else
+#else
        /* Create the file, fail if exists, write-only, binary */
        return (open(buf, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode));
-# endif
+#endif
 
-#endif /* BEN_HACK */
 
 }
 
@@ -936,7 +895,6 @@ errr fd_close(int fd)
        /* Close */
        (void)close(fd);
 
-       /* XXX XXX XXX */
        return (0);
 }
 
@@ -947,7 +905,7 @@ errr fd_close(int fd)
 
 
 /*
- * XXX XXX XXX Important note about "colors" XXX XXX XXX
+ * Important note about "colors" 
  *
  * The "TERM_*" color definitions list the "composition" of each
  * "Angband color" in terms of "quarters" of each of the three color
@@ -1197,8 +1155,8 @@ void text_to_ascii(char *buf, cptr str)
                        /* Hex-mode XXX */
                        if (*str == 'x')
                        {
-                               *s = 16 * dehex(*++str);
-                               *s++ += dehex(*++str);
+                               *s = 16 * (char)dehex(*++str);
+                               *s++ += (char)dehex(*++str);
                        }
 
                        /* Hack -- simple way to specify "backslash" */
@@ -1252,29 +1210,29 @@ void text_to_ascii(char *buf, cptr str)
                        /* Octal-mode */
                        else if (*str == '0')
                        {
-                               *s = 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
+                               *s = 8 * (char)deoct(*++str);
+                               *s++ += (char)deoct(*++str);
                        }
 
                        /* Octal-mode */
                        else if (*str == '1')
                        {
-                               *s = 64 + 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
+                               *s = 64 + 8 * (char)deoct(*++str);
+                               *s++ += (char)deoct(*++str);
                        }
 
                        /* Octal-mode */
                        else if (*str == '2')
                        {
-                               *s = 64 * 2 + 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
+                               *s = 64 * 2 + 8 * (char)deoct(*++str);
+                               *s++ += (char)deoct(*++str);
                        }
 
                        /* Octal-mode */
                        else if (*str == '3')
                        {
-                               *s = 64 * 3 + 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
+                               *s = 64 * 3 + 8 * (char)deoct(*++str);
+                               *s++ += (char)deoct(*++str);
                        }
 
                        /* Skip the final char */
@@ -1322,7 +1280,7 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
                switch(ch)
                {
                case '&':
-                       while ((tmp = my_strchr(macro_modifier_chr, *str)))
+                       while ((tmp = my_strchr(macro_modifier_chr, *str)) != 0)
                        {
                                j = (int)(tmp - macro_modifier_chr);
                                tmp = macro_modifier_name[j];
@@ -1588,8 +1546,6 @@ static sint macro_find_ready(cptr pat)
                n = i;
                s = t;
        }
-
-       /* Result */
        return (n);
 }
 
@@ -1598,15 +1554,15 @@ static sint macro_find_ready(cptr pat)
  * Add a macro definition (or redefinition).
  *
  * We should use "act == NULL" to "remove" a macro, but this might make it
- * impossible to save the "removal" of a macro definition.  XXX XXX XXX
+ * impossible to save the "removal" of a macro definition.  
  *
  * We should consider refusing to allow macros which contain existing macros,
  * or which are contained in existing macros, because this would simplify the
- * macro analysis code.  XXX XXX XXX
+ * macro analysis code.  
  *
  * We should consider removing the "command macro" crap, and replacing it
  * with some kind of "powerful keymap" ability, but this might make it hard
- * to change the "roguelike" option from inside the game.  XXX XXX XXX
+ * to change the "roguelike" option from inside the game.  
  */
 errr macro_add(cptr pat, cptr act)
 {
@@ -1715,18 +1671,24 @@ errr play_music(int type, int val)
        if (!use_music) return 1;
 
        /* Make a sound (if allowed) */
-       return Term_xtra(type , val);
+       return Term_xtra(type, val);
 }
 
 /*
  * Hack -- Select floor music.
  */
-void select_floor_music()
+void select_floor_music(void)
 {
        int i;
        /* No sound */
        if (!use_music) return;
 
+       if(ambush_flag)
+       {
+               play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH);
+               return;
+       }
+
        if(p_ptr->wild_mode)
        {
                play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD);
@@ -1754,7 +1716,7 @@ void select_floor_music()
                return;
        }
 
-       for(i = 0; i < max_quests; i++)
+       for(i = 0; i < max_q_idx; i++)
        { // TODO マクロで類似条件を統合すること
                if(quest[i].status == QUEST_STATUS_TAKEN &&
                        (quest[i].type == QUEST_TYPE_KILL_LEVEL || quest[i].type == QUEST_TYPE_RANDOM) &&
@@ -1770,11 +1732,11 @@ void select_floor_music()
 
        if(dungeon_type)
        {
-               if(play_music(TERM_XTRA_MUSIC_DUNGEON, dungeon_type))
+               if(p_ptr->feeling == 2) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2);
+               else if(p_ptr->feeling >= 3 && p_ptr->feeling <= 5) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1);
+               else
                {
-                       if(p_ptr->feeling == 2) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2);
-                       else if(p_ptr->feeling >= 3 && p_ptr->feeling <= 5) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1);
-                       else
+                       if(play_music(TERM_XTRA_MUSIC_DUNGEON, dungeon_type))
                        {
                                if(dun_level < 40) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW);
                                else if(dun_level < 80) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED);
@@ -1820,7 +1782,7 @@ void select_floor_music()
  * Only 500 (0+1+2+...+29+30) milliseconds may elapse between each key in
  * the macro trigger sequence.  If a key sequence forms the "prefix" of a
  * macro trigger, 500 milliseconds must pass before the key sequence is
- * known not to be that macro trigger.  XXX XXX XXX
+ * known not to be that macro trigger.  
  */
 static char inkey_aux(void)
 {
@@ -1904,7 +1866,6 @@ static char inkey_aux(void)
                        /* Excessive delay */
                        if (w >= 10) break;
 
-                       /* Delay */
                        Term_xtra(TERM_XTRA_DELAY, w);
                }
        }
@@ -1999,7 +1960,7 @@ static void forget_macro_action(void)
 
 
 /*
- * Mega-Hack -- special "inkey_next" pointer.  XXX XXX XXX
+ * Mega-Hack -- special "inkey_next" pointer.  
  *
  * This special pointer allows a sequence of keys to be "inserted" into
  * the stream of keys returned by "inkey()".  This key sequence will not
@@ -2012,7 +1973,7 @@ static cptr inkey_next = NULL;
 #ifdef ALLOW_BORG
 
 /*
- * Mega-Hack -- special "inkey_hack" hook.  XXX XXX XXX
+ * Mega-Hack -- special "inkey_hack" hook.  
  *
  * This special function hook allows the "Borg" (see elsewhere) to take
  * control of the "inkey()" function, and substitute in fake keypresses.
@@ -2199,11 +2160,9 @@ char inkey(void)
                                /* Wait for (and remove) a pending key */
                                if (0 == Term_inkey(&ch, TRUE, TRUE))
                                {
-                                       /* Done */
                                        break;
                                }
 
-                               /* Oops */
                                break;
                        }
 
@@ -2213,7 +2172,6 @@ char inkey(void)
                                /* Check for (and remove) a pending key */
                                if (0 == Term_inkey(&ch, FALSE, TRUE))
                                {
-                                       /* Done */
                                        break;
                                }
 
@@ -2226,12 +2184,10 @@ char inkey(void)
                                        /* Excessive delay */
                                        if (w >= 100) break;
 
-                                       /* Delay */
                                        Term_xtra(TERM_XTRA_DELAY, w);
                                }
                        }
 
-                       /* Done */
                        break;
                }
 
@@ -2245,8 +2201,6 @@ char inkey(void)
                {
                        /* Strip this key */
                        ch = 0;
-
-                       /* Continue */
                        continue;
                }
 
@@ -2345,9 +2299,9 @@ void quark_init(void)
 /*
  * Add a new "quark" to the set of quarks.
  */
-s16b quark_add(cptr str)
+u16b quark_add(cptr str)
 {
-       int i;
+       u16b i;
 
        /* Look for an existing quark */
        for (i = 1; i < quark__num; i++)
@@ -2373,7 +2327,7 @@ s16b quark_add(cptr str)
 /*
  * This function looks up a quark
  */
-cptr quark_str(s16b i)
+cptr quark_str(STR_OFFSET i)
 {
        cptr q;
 
@@ -2413,10 +2367,11 @@ cptr quark_str(s16b i)
 
 
 
-/*
- * How many messages are "available"?
+/*!
+ * @brief 保存中の過去ゲームメッセージの数を返す。 / How many messages are "available"?
+ * @return 残っているメッセージの数
  */
-s16b message_num(void)
+s32b message_num(void)
 {
        int last, next, n;
 
@@ -2435,14 +2390,15 @@ s16b message_num(void)
 }
 
 
-
-/*
- * Recall the "text" of a saved message
+/*!
+ * @brief 過去のゲームメッセージを返す。 / Recall the "text" of a saved message
+ * @params age メッセージの世代
+ * @return メッセージの文字列ポインタ
  */
 cptr message_str(int age)
 {
-       s16b x;
-       s16b o;
+       s32b x;
+       s32b o;
        cptr s;
 
        /* Forgotten messages have no text */
@@ -2462,15 +2418,17 @@ cptr message_str(int age)
 }
 
 
-
-/*
- * Add a new message, with great efficiency
+/*!
+ * @brief ゲームメッセージをログに追加する。 / Add a new message, with great efficiency
+ * @params str 保存したいメッセージ
+ * @return なし
  */
 void message_add(cptr str)
 {
-       int i, k, x, m, n;
+       u32b i, n;
+       int k, x, m;
 
-       char u[1024];
+       char u[4096];
        char splitted1[81];
        cptr splitted2;
 
@@ -2485,39 +2443,37 @@ void message_add(cptr str)
        /* Important Hack -- Ignore "long" messages */
        if (n >= MESSAGE_BUF / 4) return;
 
-       /* extra step -- split the message if n>80.   (added by Mogami) */
+       /* extra step -- split the message if n>80.(added by Mogami) */
        if (n > 80) {
 #ifdef JP
-         cptr t = str;
-
-         for (n = 0; n < 80; n++, t++)
-           if(iskanji(*t)) {
-             t++;
-             n++;
-           }
-         if (n == 81) n = 79; /* 最後の文字が漢字半分 */
+               cptr t = str;
+
+               for (n = 0; n < 80; n++, t++)
+               {
+                       if(iskanji(*t)) {
+                               t++;
+                               n++;
+                       }
+               }
+               if (n == 81) n = 79; /* 最後の文字が漢字半分 */
 #else
-         for (n = 80; n > 60; n--)
-                 if (str[n] == ' ') break;
-         if (n == 60)
-                 n = 80;
+               for (n = 80; n > 60; n--)
+                       if (str[n] == ' ') break;
+               if (n == 60) n = 80;
 #endif
-         splitted2 = str + n;
-         strncpy(splitted1, str ,n);
-         splitted1[n] = '\0';
-         str = splitted1;
+               splitted2 = str + n;
+               strncpy(splitted1, str ,n);
+               splitted1[n] = '\0';
+               str = splitted1;
        } else {
-         splitted2 = NULL;
+               splitted2 = NULL;
        }
 
-       /*** Step 2 -- Attempt to optimize ***/
+       /*** Step 2 -- 最適化の試行 / Attempt to optimize ***/
 
        /* Limit number of messages to check */
        m = message_num();
-
        k = m / 4;
-
-       /* Limit number of messages to check */
        if (k > MESSAGE_MAX / 32) k = MESSAGE_MAX / 32;
 
        /* Check previous message */
@@ -2543,8 +2499,8 @@ void message_add(cptr str)
 
                /* Find multiple */
 #ifdef JP
- for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++) 
-     if( iskanji(*t))t++;
              for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++) 
+                       if(iskanji(*t))t++;
 #else
                for (t = buf; *t && (*t != '<'); t++);
 #endif
@@ -2585,15 +2541,13 @@ void message_add(cptr str)
                        now_message++;
                }
 
-               /* Done */
                break;
        }
 
        /* Check the last few messages (if any to count) */
        for (i = message__next; k; k--)
        {
-               u16b q;
-
+               int q;
                cptr old;
 
                /* Back up and wrap if needed */
@@ -2732,7 +2686,7 @@ void message_add(cptr str)
        message__head += n + 1;
 
        /* recursively add splitted message (added by Mogami) */
- end_of_message_add:
+end_of_message_add:
        if (splitted2 != NULL)
          message_add(splitted2);
 }
@@ -2809,23 +2763,20 @@ static void msg_flush(int x)
  * The global "msg_flag" variable can be cleared to tell us to
  * "erase" any "pending" messages still on the screen.
  *
- * XXX XXX XXX Note that we must be very careful about using the
+ * Note that we must be very careful about using the
  * "msg_print()" functions without explicitly calling the special
  * "msg_print(NULL)" function, since this may result in the loss
  * of information if the screen is cleared, or if anything is
  * displayed on the top line.
  *
- * XXX XXX XXX Note that "msg_print(NULL)" will clear the top line
+ * Note that "msg_print(NULL)" will clear the top line
  * even if no messages are pending.  This is probably a hack.
  */
 void msg_print(cptr msg)
 {
        static int p = 0;
-
        int n;
-
        char *t;
-
        char buf[1024];
 
        if (world_monster) return;
@@ -2837,13 +2788,12 @@ void msg_print(cptr msg)
                p = 0;
        }
 
-       /* Message Length */
+       /* Original Message Length */
        n = (msg ? strlen(msg) : 0);
 
        /* Hack -- flush when requested or needed */
        if (p && (!msg || ((p + n) > 72)))
        {
-               /* Flush */
                msg_flush(p);
 
                /* Forget it */
@@ -2853,20 +2803,27 @@ void msg_print(cptr msg)
                p = 0;
        }
 
-
        /* No message */
        if (!msg) return;
 
        /* Paranoia */
        if (n > 1000) return;
 
+       /* Copy it */
+       if (!cheat_turn)
+       {
+               strcpy(buf, msg);
+       }
+       else
+       {
+               sprintf(buf, ("T:%d - %s"), (int)turn, msg);
+       }
 
-       /* Memorize the message */
-       if (character_generated) message_add(msg);
-
+       /* New Message Length */
+       n = strlen(buf);
 
-       /* Copy it */
-       strcpy(buf, msg);
+       /* Memorize the message */
+       if (character_generated) message_add(buf);
 
        /* Analyze the buffer */
        t = buf;
@@ -2942,14 +2899,12 @@ void msg_print(cptr msg)
                t += split; n -= split;
        }
 
-
        /* Display the tail of the message */
        Term_putstr(p, 0, n, TERM_WHITE, t);
 
        /* Memorize the tail */
        /* if (character_generated) message_add(t); */
 
-       /* Window stuff */
        p_ptr->window |= (PW_MESSAGE);
        window_stuff();
 
@@ -2963,11 +2918,28 @@ void msg_print(cptr msg)
        p += n + 1;
 #endif
 
-
        /* Optional refresh */
        if (fresh_message) Term_fresh();
 }
 
+void msg_print_wizard(int cheat_type, cptr msg)
+{
+       if (!cheat_room && cheat_type == CHEAT_DUNGEON) return;
+       if (!cheat_peek && cheat_type == CHEAT_OBJECT) return;
+       if (!cheat_hear && cheat_type == CHEAT_MONSTER) return;
+       if (!cheat_xtra && cheat_type == CHEAT_MISC) return;
+
+       cptr cheat_mes[] = {"ITEM", "MONS", "DUNG", "MISC"};
+       char buf[1024];
+       sprintf(buf, "WIZ-%s:%s", cheat_mes[cheat_type], msg);
+       msg_print(buf);
+
+       if (cheat_diary_output)
+       {
+               do_cmd_write_nikki(NIKKI_WIZARD_LOG, 0, buf);
+       }
+
+}
 
 /*
  * Hack -- prevent "accidents" in "screen_save()" or "screen_load()"
@@ -3033,6 +3005,32 @@ void msg_format(cptr fmt, ...)
        msg_print(buf);
 }
 
+/*
+ * Display a formatted message, using "vstrnfmt()" and "msg_print()".
+ */
+void msg_format_wizard(int cheat_type, cptr fmt, ...)
+{
+       if(!cheat_room && cheat_type == CHEAT_DUNGEON) return;
+       if(!cheat_peek && cheat_type == CHEAT_OBJECT) return;
+       if(!cheat_hear && cheat_type == CHEAT_MONSTER) return;
+       if(!cheat_xtra && cheat_type == CHEAT_MISC) return;
+
+       va_list vp;
+       char buf[1024];
+
+       /* Begin the Varargs Stuff */
+       va_start(vp, fmt);
+
+       /* Format the args, save the length */
+       (void)vstrnfmt(buf, 1024, fmt, vp);
+
+       /* End the Varargs Stuff */
+       va_end(vp);
+
+       /* Display */
+       msg_print_wizard(cheat_type, buf);
+}
+
 
 
 /*
@@ -3041,7 +3039,7 @@ void msg_format(cptr fmt, ...)
  * At the given location, using the given attribute, if allowed,
  * add the given string.  Do not clear the line.
  */
-void c_put_str(byte attr, cptr str, int row, int col)
+void c_put_str(TERM_COLOR attr, cptr str, int row, int col)
 {
        /* Position cursor, Dump the attr/text */
        Term_putstr(col, row, -1, attr, str);
@@ -3156,7 +3154,7 @@ void c_roff(byte a, cptr str)
                {
                        int i, n = 0;
 
-                       byte av[256];
+                       TERM_COLOR av[256];
                        char cv[256];
 
                        /* Wrap word */
@@ -3569,7 +3567,7 @@ bool get_string(cptr prompt, char *buf, int len)
 {
        bool res;
 
-       /* Paranoia XXX XXX XXX */
+       /* Paranoia */
        msg_print(NULL);
 
        /* Display prompt */
@@ -3580,8 +3578,6 @@ bool get_string(cptr prompt, char *buf, int len)
 
        /* Clear prompt */
        prt("", 0, 0);
-
-       /* Result */
        return (res);
 }
 
@@ -3606,7 +3602,7 @@ bool get_check(cptr prompt)
  * mode & CHECK_NO_HISTORY  : no message_add
  * mode & CHECK_DEFAULT_Y   : accept any key as y, except n and Esc.
  */
-bool get_check_strict(cptr prompt, int mode)
+bool get_check_strict(cptr prompt, BIT_FLAGS mode)
 {
        int i;
        char buf[80];
@@ -3619,7 +3615,7 @@ bool get_check_strict(cptr prompt, int mode)
                num_more = 0;
        }
 
-       /* Paranoia XXX XXX XXX */
+       /* Paranoia */
        msg_print(NULL);
 
        if (!rogue_like_commands)
@@ -3721,7 +3717,7 @@ bool get_check_strict(cptr prompt, int mode)
  */
 bool get_com(cptr prompt, char *command, bool z_escape)
 {
-       /* Paranoia XXX XXX XXX */
+       /* Paranoia */
        msg_print(NULL);
 
        /* Display a prompt */
@@ -3750,12 +3746,13 @@ bool get_com(cptr prompt, char *command, bool z_escape)
  *
  * Hack -- allow "command_arg" to specify a quantity
  */
-s16b get_quantity(cptr prompt, int max)
+QUANTITY get_quantity(cptr prompt, QUANTITY max)
 {
-       bool res;
-       int amt;
+       bool res, result;
+       QUANTITY amt;
        char tmp[80];
        char buf[80];
+       COMMAND_CODE code;
 
 
        /* Use "command_arg" */
@@ -3774,10 +3771,10 @@ s16b get_quantity(cptr prompt, int max)
                return (amt);
        }
 
-#ifdef ALLOW_REPEAT /* TNB */
-
        /* Get the item index */
-       if ((max != 1) && repeat_pull(&amt))
+       result = repeat_pull(&code);
+       amt = (QUANTITY)code;
+       if ((max != 1) && result)
        {
                /* Enforce the maximum */
                if (amt > max) amt = max;
@@ -3789,8 +3786,6 @@ s16b get_quantity(cptr prompt, int max)
                return (amt);
        }
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* Build a prompt if needed */
        if (!prompt)
        {
@@ -3801,7 +3796,7 @@ s16b get_quantity(cptr prompt, int max)
                prompt = tmp;
        }
 
-       /* Paranoia XXX XXX XXX */
+       /* Paranoia */
        msg_print(NULL);
 
        /* Display prompt */
@@ -3826,7 +3821,7 @@ s16b get_quantity(cptr prompt, int max)
        if (!res) return 0;
 
        /* Extract a number */
-       amt = atoi(buf);
+       amt = (COMMAND_CODE)atoi(buf);
 
        /* A letter means "all" */
        if (isalpha(buf[0])) amt = max;
@@ -3837,11 +3832,7 @@ s16b get_quantity(cptr prompt, int max)
        /* Enforce the minimum */
        if (amt < 0) amt = 0;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
-       if (amt) repeat_push(amt);
-
-#endif /* ALLOW_REPEAT -- TNB */
+       if (amt) repeat_push((COMMAND_CODE)amt);
 
        /* Return the result */
        return (amt);
@@ -3849,7 +3840,7 @@ s16b get_quantity(cptr prompt, int max)
 
 
 /*
- * Pause for user response XXX XXX XXX
+ * Pause for user response 
  */
 void pause_line(int row)
 {
@@ -4197,7 +4188,7 @@ static char inkey_from_menu(void)
        int menu = 0;
        bool kisuu;
 
-       if (py - panel_row_min > 10) basey = 2;
+       if (p_ptr->y - panel_row_min > 10) basey = 2;
        else basey = 13;
        basex = 15;
 
@@ -4251,7 +4242,7 @@ static char inkey_from_menu(void)
                put_str(_("》", "> "),basey + 1 + num / 2, basex + 2 + (num % 2) * 24);
 
                /* Place the cursor on the player */
-               move_cursor_relative(py, px);
+               move_cursor_relative(p_ptr->y, p_ptr->x);
 
                /* Get a command */
                sub_cmd = inkey();
@@ -4346,13 +4337,13 @@ static char inkey_from_menu(void)
  * Note that this command is used both in the dungeon and in
  * stores, and must be careful to work in both situations.
  *
- * Note that "p_ptr->command_new" may not work any more.  XXX XXX XXX
+ * Note that "p_ptr->command_new" may not work any more.  
  */
 void request_command(int shopping)
 {
        int i;
 
-       char cmd;
+       s16b cmd;
        int mode;
 
        cptr act;
@@ -4426,7 +4417,7 @@ void request_command(int shopping)
                /* Command Count */
                if (cmd == '0')
                {
-                       int old_arg = command_arg;
+                       COMMAND_ARG old_arg = command_arg;
 
                        /* Reset */
                        command_arg = 0;
@@ -4509,8 +4500,6 @@ void request_command(int shopping)
                                {
                                        /* Clear count */
                                        command_arg = 0;
-
-                                       /* Continue */
                                        continue;
                                }
                        }
@@ -4547,8 +4536,6 @@ void request_command(int shopping)
 
                        /* Start using the buffer */
                        inkey_next = request_command_buffer;
-
-                       /* Continue */
                        continue;
                }
 
@@ -4560,7 +4547,6 @@ void request_command(int shopping)
                /* Use command */
                command_cmd = (byte)cmd;
 
-               /* Done */
                break;
        }
 
@@ -4568,7 +4554,7 @@ void request_command(int shopping)
        if (always_repeat && (command_arg <= 0))
        {
                /* Hack -- auto repeat certain commands */
-               if (my_strchr("TBDoc+", command_cmd))
+               if (my_strchr("TBDoc+", (char)command_cmd))
                {
                        /* Repeat 99 times */
                        command_arg = 99;
@@ -4761,7 +4747,7 @@ int get_keymap_dir(char ch)
        }
        else
        {
-               int mode;
+               BIT_FLAGS mode;
                cptr act, s;
 
                /* Roguelike */
@@ -4799,8 +4785,6 @@ int get_keymap_dir(char ch)
 }
 
 
-#ifdef ALLOW_REPEAT /* TNB */
-
 #define REPEAT_MAX             20
 
 /* Number of chars saved */
@@ -4810,10 +4794,10 @@ static int repeat__cnt = 0;
 static int repeat__idx = 0;
 
 /* Saved "stuff" */
-static int repeat__key[REPEAT_MAX];
+static COMMAND_CODE repeat__key[REPEAT_MAX];
 
 
-void repeat_push(int what)
+void repeat_push(COMMAND_CODE what)
 {
        /* Too many keys */
        if (repeat__cnt == REPEAT_MAX) return;
@@ -4826,7 +4810,7 @@ void repeat_push(int what)
 }
 
 
-bool repeat_pull(int *what)
+bool repeat_pull(COMMAND_CODE *what)
 {
        /* All out of keys */
        if (repeat__idx == repeat__cnt) return (FALSE);
@@ -4840,7 +4824,7 @@ bool repeat_pull(int *what)
 
 void repeat_check(void)
 {
-       int             what;
+       COMMAND_CODE what;
 
        /* Ignore some commands */
        if (command_cmd == ESCAPE) return;
@@ -4876,8 +4860,6 @@ void repeat_check(void)
        }
 }
 
-#endif /* ALLOW_REPEAT -- TNB */
-
 
 #ifdef SORT_R_INFO
 
@@ -5401,7 +5383,7 @@ void str_tolower(char *str)
                        continue;
                }
 #endif
-               *str = tolower(*str);
+               *str = (char)tolower(*str);
        }
 }