OSDN Git Service

[Refactor] #37353 ULTRIX のプリプロを削除 / Removed preprocessor ULTRIX
[hengband/hengband.git] / src / util.c
index 5005a93..b26f9a8 100644 (file)
@@ -1,4 +1,4 @@
-/* File: util.c */
+/* File: util.c */
 
 /*
  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
  * are included in all such copies.  Other copyrights may also apply.
  */
 
-/* Purpose: Angband utilities -BEN- */
+ /* Purpose: Angband utilities -BEN- */
 
 #include "angband.h"
+#include "core.h"
+#include "term.h"
+#include "util.h"
+#include "files.h"
+#include "monsterrace-hook.h"
+#include "view-mainwindow.h"
+#include "quest.h"
+#include "floor.h"
+#include "world.h"
+#include "cmd-dump.h"
+#include "japanese.h"
+#include "player-class.h"
+
+/*!
+ * 10進数から16進数への変換テーブル /
+ * Global array for converting numbers to uppercase hecidecimal digit
+ * This array can also be used to convert a number to an octal digit
+ */
+const char hexsym[16] =
+{
+       '0', '1', '2', '3', '4', '5', '6', '7',
+       '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+};
+
+/*
+ * Keymaps for each "mode" associated with each keypress.
+ */
+concptr keymap_act[KEYMAP_MODES][256];
+
+/*
+ * The next "free" index to use
+ */
+u32b message__next;
+
+/*
+ * The index of the oldest message (none yet)
+ */
+u32b message__last;
+
+/*
+ * The next "free" offset
+ */
+u32b message__head;
+
+/*
+ * The offset to the oldest used char (none yet)
+ */
+u32b message__tail;
+
+/*
+ * The array of offsets, by index [MESSAGE_MAX]
+ */
+u32b *message__ptr;
+
+/*
+ * The array of chars, by offset [MESSAGE_BUF]
+ */
+char *message__buf;
+
+bool msg_flag;                 /* Used in msg_print() for "buffering" */
+
+/*
+ * Number of active macros.
+ */
+s16b macro__num;
+
+/*
+ * Array of macro patterns [MACRO_MAX]
+ */
+concptr *macro__pat;
+
+/*
+ * Array of macro actions [MACRO_MAX]
+ */
+concptr *macro__act;
+
+/*
+ * Array of macro types [MACRO_MAX]
+ */
+bool *macro__cmd;
+
+/*
+ * Current macro action [1024]
+ */
+char *macro__buf;
 
+bool get_com_no_macros = FALSE;        /* Expand macros in "get_com" or not */
+
+bool inkey_base;               /* See the "inkey()" function */
+bool inkey_xtra;               /* See the "inkey()" function */
+bool inkey_scan;               /* See the "inkey()" function */
+bool inkey_flag;               /* See the "inkey()" function */
+
+bool use_menu;
+
+pos_list tmp_pos;
+
+/*
+ * The number of quarks
+ */
+STR_OFFSET quark__num;
+
+/*
+ * The pointers to the quarks [QUARK_MAX]
+ */
+concptr *quark__str;
 
 static int num_more = 0;
 
 /* Save macro trigger string for use in inkey_special() */
 static char inkey_macro_trigger_string[1024];
 
-#if 0
-#ifndef HAS_STRICMP
+int max_macrotrigger = 0; /*!< 現在登録中のマクロ(トリガー)の数 */
+concptr macro_template = NULL; /*!< Angband設定ファイルのT: タグ情報から読み込んだ長いTコードを処理するために利用する文字列ポインタ */
+concptr macro_modifier_chr; /*!< &x# で指定されるマクロトリガーに関する情報を記録する文字列ポインタ */
+concptr macro_modifier_name[MAX_MACRO_MOD]; /*!< マクロ上で取り扱う特殊キーを文字列上で表現するためのフォーマットを記録した文字列ポインタ配列 */
+concptr macro_trigger_name[MAX_MACRO_TRIG]; /*!< マクロのトリガーコード */
+concptr macro_trigger_keycode[2][MAX_MACRO_TRIG];  /*!< マクロの内容 */
 
-/*
- * For those systems that don't have "stricmp()"
- *
- * Compare the two strings "a" and "b" ala "strcmp()" ignoring case.
- */
-int stricmp(cptr a, cptr b)
-{
-       cptr s1, s2;
-       char z1, z2;
+s16b command_cmd;              /* Current "Angband Command" */
+COMMAND_ARG command_arg;       /*!< 各種コマンドの汎用的な引数として扱う / Gives argument of current command */
+COMMAND_NUM command_rep;       /*!< 各種コマンドの汎用的なリピート数として扱う / Gives repetition of current command */
+DIRECTION command_dir;         /*!< 各種コマンドの汎用的な方向値処理として扱う/ Gives direction of current command */
+s16b command_see;              /* See "object1.c" */
+s16b command_wrk;              /* See "object1.c" */
+TERM_LEN command_gap = 999;         /* See "object1.c" */
+s16b command_new;              /* Command chaining from inven/equip view */
 
-       /* Scan the strings */
-       for (s1 = a, s2 = b; TRUE; s1++, s2++)
-       {
-               z1 = FORCEUPPER(*s1);
-               z2 = FORCEUPPER(*s2);
-               if (z1 < z2) return (-1);
-               if (z1 > z2) return (1);
-               if (!z1) return (0);
-       }
-}
 
-#endif /* HAS_STRICMP */
-#endif /* 0 */
 
 #ifdef SET_UID
 
@@ -72,13 +168,7 @@ int usleep(huge usecs)
 
 
        /* Paranoia -- No excessive sleeping */
-#ifdef JP
-       if (usecs > 4000000L) core("ÉÔÅö¤Ê usleep() ¸Æ¤Ó½Ð¤·");
-#else
-       if (usecs > 4000000L) core("Illegal usleep() call");
-#endif
-
-
+       if (usecs > 4000000L) core(_("不当な usleep() 呼び出し", "Illegal usleep() call"));
 
        /* Wait for it */
        Timer.tv_sec = (usecs / 1000000L);
@@ -103,7 +193,7 @@ int usleep(huge usecs)
  */
 #ifdef SET_UID
 extern struct passwd *getpwuid(uid_t uid);
-extern struct passwd *getpwnam(const char *name);
+extern struct passwd *getpwnam(concptr name);
 #endif
 
 
@@ -120,14 +210,12 @@ void user_name(char *buf, int id)
                (void)strcpy(buf, pw->pw_name);
                buf[16] = '\0';
 
-#ifdef CAPITALIZE_USER_NAME
                /* Hack -- capitalize the user name */
 #ifdef JP
                if (!iskanji(buf[0]))
 #endif
                        if (islower(buf[0]))
                                buf[0] = toupper(buf[0]);
-#endif /* CAPITALIZE_USER_NAME */
 
                return;
        }
@@ -163,37 +251,25 @@ void user_name(char *buf, int id)
  * path, and a leading "tilde" to indicate a special directory, and default to a
  * relative path, but MSDOS uses a leading "drivename plus colon" to indicate the
  * use of a "special drive", and then the rest of the path is parsed "normally",
- * and MACINTOSH uses a leading colon to indicate a relative path, and an embedded
- * colon to indicate a "drive plus absolute path", and finally defaults to a file
- * in the current working directory, which may or may not be defined.
+ * and an embedded colon to indicate a "drive plus absolute path", and finally
+ * defaults to a file in the current working directory, which may or may not be defined.
  *
  * We should probably parse a leading "~~/" as referring to "ANGBAND_DIR". (?)
  */
 
 
-#ifdef ACORN
-
-
-/*
- * Most of the "file" routines for "ACORN" should be in "main-acn.c"
- */
-
-
-#else /* ACORN */
-
-
 #ifdef SET_UID
 
-/*
- * Extract a "parsed" path from an initial filename
- * Normally, we simply copy the filename into the buffer
- * But leading tilde symbols must be handled in a special way
- * Replace "~user/" by the home directory of the user named "user"
- * Replace "~/" by the home directory of the current user
- */
-errr path_parse(char *buf, int max, cptr file)
+ /*
 * Extract a "parsed" path from an initial filename
 * Normally, we simply copy the filename into the buffer
 * But leading tilde symbols must be handled in a special way
 * Replace "~user/" by the home directory of the user named "user"
 * Replace "~/" by the home directory of the current user
 */
+errr path_parse(char *buf, int max, concptr file)
 {
-       cptr            u, s;
+       concptr         u, s;
        struct passwd   *pw;
        char            user[128];
 
@@ -202,23 +278,23 @@ errr path_parse(char *buf, int max, cptr file)
        buf[0] = '\0';
 
        /* No file? */
-       if (!file) return (-1);
+       if (!file) return -1;
 
        /* File needs no parsing */
        if (file[0] != '~')
        {
                (void)strnfmt(buf, max, "%s", file);
-               return (0);
+               return 0;
        }
 
        /* Point at the user */
-       u = file+1;
+       u = file + 1;
 
        /* Look for non-user portion of the file */
        s = my_strstr(u, PATH_SEP);
 
        /* Hack -- no long user names */
-       if (s && (s >= u + sizeof(user))) return (1);
+       if (s && (s >= u + sizeof(user))) return 1;
 
        /* Extract a user name */
        if (s)
@@ -237,38 +313,31 @@ errr path_parse(char *buf, int max, cptr file)
        else pw = getpwuid(getuid());
 
        /* Nothing found? */
-       if (!pw) return (1);
+       if (!pw) return 1;
 
        /* Make use of the info */
        if (s) strnfmt(buf, max, "%s%s", pw->pw_dir, s);
        else strnfmt(buf, max, "%s", pw->pw_dir);
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
 #else /* SET_UID */
 
 
-/*
- * Extract a "parsed" path from an initial filename
- *
- * This requires no special processing on simple machines,
- * except for verifying the size of the filename.
- */
-errr path_parse(char *buf, int max, cptr file)
+ /*
 * Extract a "parsed" path from an initial filename
 *
 * This requires no special processing on simple machines,
 * except for verifying the size of the filename.
 */
+errr path_parse(char *buf, int max, concptr file)
 {
        /* Accept the filename */
        (void)strnfmt(buf, max, "%s", file);
-
-#if defined(MAC_MPW) && defined(CARBON)
-     /* Fix it according to the current operating system */
-    convert_pathname(buf);
-#endif /* MAC_MPW && CARBON */
-
-       /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -284,29 +353,33 @@ errr path_parse(char *buf, int max, cptr file)
  */
 static errr path_temp(char *buf, int max)
 {
-       cptr s;
+       concptr s;
 
        /* Temp file */
        s = tmpnam(NULL);
 
-       /* Oops */
-       if (!s) return (-1);
+       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);
 #endif
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 #endif
 
-/*
- * Create a new path by appending a file (or directory) to a path.
+/*!
+ * @brief ファイル入出力のためのパス生成する。/ Create a new path by appending a file (or directory) to a path.
+ * @param buf ファイルのフルを返すバッファ
+ * @param max bufのサイズ
+ * @param path ファイルパス
+ * @param file ファイル名
+ * @return エラーコード(ただし常に0を返す)
  *
  * This requires no special processing on simple machines, except
  * for verifying the size of the filename, but note the ability to
@@ -318,7 +391,7 @@ static errr path_temp(char *buf, int max)
  * Note that this function yields a path which must be "parsed"
  * using the "parse" function above.
  */
-errr path_build(char *buf, int max, cptr path, cptr file)
+errr path_build(char *buf, int max, concptr path, concptr file)
 {
        /* Special file */
        if (file[0] == '~')
@@ -349,25 +422,25 @@ errr path_build(char *buf, int max, cptr path, cptr file)
        }
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
 /*
  * Hack -- replacement for "fopen()"
  */
-FILE *my_fopen(cptr file, cptr mode)
+FILE *my_fopen(concptr file, concptr mode)
 {
        char buf[1024];
 
-#if defined(MAC_MPW) || defined(MACH_O_CARBON)
+#if defined(MACH_O_CARBON)
        FILE *tempfff;
 #endif
 
        /* Hack -- Try to parse the path */
        if (path_parse(buf, 1024, file)) return (NULL);
 
-#if defined(MAC_MPW) || defined(MACH_O_CARBON)
+#if defined(MACH_O_CARBON)
        if (my_strchr(mode, 'w'))
        {
                /* setting file type/creator */
@@ -388,19 +461,16 @@ FILE *my_fopen(cptr file, cptr mode)
 errr my_fclose(FILE *fff)
 {
        /* Require a file */
-       if (!fff) return (-1);
+       if (!fff) return -1;
 
        /* Close, check for error */
-       if (fclose(fff) == EOF) return (1);
+       if (fclose(fff) == EOF) return 1;
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
-#endif /* ACORN */
-
-
 #ifdef HAVE_MKSTEMP
 
 FILE *my_fopen_temp(char *buf, int max)
@@ -426,8 +496,6 @@ FILE *my_fopen_temp(char *buf, int max)
 {
        /* Generate a temporary filename */
        if (path_temp(buf, max)) return (NULL);
-
-       /* Open the file */
        return (my_fopen(buf, "w"));
 }
 
@@ -444,18 +512,20 @@ 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 */
        if (fgets(tmp, 1024, fff))
        {
+#ifdef JP
+               guess_convert_to_system_encoding(tmp, sizeof(tmp));
+#endif
+
                /* Convert weirdness */
                for (s = tmp; *s; s++)
                {
-#if defined(MACINTOSH) || defined(MACH_O_CARBON)
+#if defined(MACH_O_CARBON)
 
                        /*
                         * Be nice to the Macintosh, where a file can have Mac or Unix
@@ -464,7 +534,7 @@ errr my_fgets(FILE *fff, char *buf, huge n)
                         */
                        if (*s == '\r') *s = '\n';
 
-#endif /* MACINTOSH || MACH_O_CARBON */
+#endif /* MACH_O_CARBON */
 
                        /* Handle newline */
                        if (*s == '\n')
@@ -473,7 +543,7 @@ errr my_fgets(FILE *fff, char *buf, huge n)
                                buf[i] = '\0';
 
                                /* Success */
-                               return (0);
+                               return 0;
                        }
 
                        /* Handle tabs */
@@ -497,7 +567,7 @@ errr my_fgets(FILE *fff, char *buf, huge n)
                                buf[i++] = *s;
                        }
 
-                       /* È¾³Ñ¤«¤Ê¤ËÂбþ */
+                       /* 半角かなに対応 */
                        else if (iskana(*s))
                        {
                                buf[i++] = *s;
@@ -505,7 +575,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;
@@ -518,25 +588,23 @@ errr my_fgets(FILE *fff, char *buf, huge n)
                buf[i] = '\0';
 
                /* Success */
-               return (0);
+               return 0;
        }
 
        /* Nothing */
        buf[0] = '\0';
 
        /* Failure */
-       return (1);
+       return 1;
 }
 
 
 /*
  * 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)
+errr my_fputs(FILE *fff, concptr buf, huge n)
 {
        /* XXX XXX */
        n = n ? n : 0;
@@ -545,99 +613,60 @@ errr my_fputs(FILE *fff, cptr buf, huge n)
        (void)fprintf(fff, "%s\n", buf);
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
-#ifdef ACORN
-
-
-/*
- * Most of the "file" routines for "ACORN" should be in "main-acn.c"
- *
- * Many of them can be rewritten now that only "fd_open()" and "fd_make()"
- * and "my_fopen()" should ever create files.
- */
-
-
-#else /* ACORN */
-
-
-/*
- * 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
-# define open(N,F,M) \
-((M), open((char*)(N),F))
-# define write(F,B,S) \
-write(F,(char*)(B),S)
-#endif /* MACINTOSH */
-
-
-/*
- * Several systems have no "O_BINARY" flag
- */
+ /*
+  * Several systems have no "O_BINARY" flag
+  */
 #ifndef O_BINARY
 # define O_BINARY 0
 #endif /* O_BINARY */
 
 
-/*
- * Hack -- attempt to delete a file
- */
-errr fd_kill(cptr file)
+  /*
  * Hack -- attempt to delete a file
  */
+errr fd_kill(concptr file)
 {
        char buf[1024];
 
        /* Hack -- Try to parse the path */
-       if (path_parse(buf, 1024, file)) return (-1);
+       if (path_parse(buf, 1024, file)) return -1;
 
        /* Remove */
        (void)remove(buf);
 
-       /* XXX XXX XXX */
-       return (0);
+       return 0;
 }
 
 
 /*
  * Hack -- attempt to move a file
  */
-errr fd_move(cptr file, cptr what)
+errr fd_move(concptr file, concptr what)
 {
        char buf[1024];
        char aux[1024];
 
        /* Hack -- Try to parse the path */
-       if (path_parse(buf, 1024, file)) return (-1);
+       if (path_parse(buf, 1024, file)) return -1;
 
        /* Hack -- Try to parse the path */
-       if (path_parse(aux, 1024, what)) return (-1);
+       if (path_parse(aux, 1024, what)) return -1;
 
        /* Rename */
        (void)rename(buf, aux);
 
-       /* XXX XXX XXX */
-       return (0);
+       return 0;
 }
 
 
 /*
  * Hack -- attempt to copy a file
  */
-errr fd_copy(cptr file, cptr what)
+errr fd_copy(concptr file, concptr what)
 {
        char buf[1024];
        char aux[1024];
@@ -645,18 +674,18 @@ errr fd_copy(cptr file, cptr what)
        int src_fd, dst_fd;
 
        /* Hack -- Try to parse the path */
-       if (path_parse(buf, 1024, file)) return (-1);
+       if (path_parse(buf, 1024, file)) return -1;
 
        /* Hack -- Try to parse the path */
-       if (path_parse(aux, 1024, what)) return (-1);
+       if (path_parse(aux, 1024, what)) return -1;
 
        /* Open source file */
        src_fd = fd_open(buf, O_RDONLY);
-       if (src_fd < 0) return (-1);
+       if (src_fd < 0) return -1;
 
        /* Open destination file */
-       dst_fd = fd_open(aux, O_WRONLY|O_TRUNC|O_CREAT);
-       if (dst_fd < 0) return (-1);
+       dst_fd = fd_open(aux, O_WRONLY | O_TRUNC | O_CREAT);
+       if (dst_fd < 0) return -1;
 
        /* Copy */
        while ((read_num = read(src_fd, buf, 1024)) > 0)
@@ -680,45 +709,22 @@ errr fd_copy(cptr file, cptr what)
        fd_close(src_fd);
        fd_close(dst_fd);
 
-       /* XXX XXX XXX */
-       return (0);
+       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(concptr 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"));
+       if (path_parse(buf, 1024, file)) return -1;
 
-       /* 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)
+#if defined(MACH_O_CARBON)
        {
                int fdes;
                /* Create the file, fail if exists, write-only, binary */
@@ -728,12 +734,10 @@ 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 /* BEN_HACK */
+#endif
 
 }
 
@@ -743,12 +747,12 @@ int fd_make(cptr file, int mode)
  *
  * Note that we assume that the file should be "binary"
  */
-int fd_open(cptr file, int flags)
+int fd_open(concptr file, int flags)
 {
        char buf[1024];
 
        /* Hack -- Try to parse the path */
-       if (path_parse(buf, 1024, file)) return (-1);
+       if (path_parse(buf, 1024, file)) return -1;
 
        /* Attempt to open the file */
        return (open(buf, flags | O_BINARY, 0));
@@ -766,7 +770,7 @@ errr fd_lock(int fd, int what)
        what = what ? what : 0;
 
        /* Verify the fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
 #ifdef SET_UID
 
@@ -785,7 +789,7 @@ errr fd_lock(int fd, int what)
        else
        {
                /* Lock the score file */
-               if (lockf(fd, F_LOCK, 0) != 0) return (1);
+               if (lockf(fd, F_LOCK, 0) != 0) return 1;
        }
 
 #  endif
@@ -805,7 +809,7 @@ errr fd_lock(int fd, int what)
        else
        {
                /* Lock the score file */
-               if (flock(fd, LOCK_EX) != 0) return (1);
+               if (flock(fd, LOCK_EX) != 0) return 1;
        }
 
 #  endif
@@ -815,7 +819,7 @@ errr fd_lock(int fd, int what)
 #endif
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -827,16 +831,16 @@ errr fd_seek(int fd, huge n)
        huge p;
 
        /* Verify fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
        /* Seek to the given position */
        p = lseek(fd, n, SEEK_SET);
 
        /* Failure */
-       if (p != n) return (1);
+       if (p != n) return 1;
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -849,15 +853,15 @@ errr fd_chop(int fd, huge n)
        n = n ? n : 0;
 
        /* Verify the fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
-#if defined(SUNOS) || defined(ULTRIX) || defined(NeXT)
+#if defined(NeXT)
        /* Truncate */
        ftruncate(fd, n);
 #endif
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -867,7 +871,7 @@ errr fd_chop(int fd, huge n)
 errr fd_read(int fd, char *buf, huge n)
 {
        /* Verify the fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
 #ifndef SET_UID
 
@@ -875,7 +879,7 @@ errr fd_read(int fd, char *buf, huge n)
        while (n >= 16384)
        {
                /* Read a piece */
-               if (read(fd, buf, 16384) != 16384) return (1);
+               if (read(fd, buf, 16384) != 16384) return 1;
 
                /* Shorten the task */
                buf += 16384;
@@ -887,20 +891,20 @@ errr fd_read(int fd, char *buf, huge n)
 #endif
 
        /* Read the final piece */
-       if (read(fd, buf, n) != (int)n) return (1);
+       if (read(fd, buf, n) != (int)n) return 1;
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
 /*
  * Hack -- Attempt to write data to a file descriptor
  */
-errr fd_write(int fd, cptr buf, huge n)
+errr fd_write(int fd, concptr buf, huge n)
 {
        /* Verify the fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
 #ifndef SET_UID
 
@@ -908,7 +912,7 @@ errr fd_write(int fd, cptr buf, huge n)
        while (n >= 16384)
        {
                /* Write a piece */
-               if (write(fd, buf, 16384) != 16384) return (1);
+               if (write(fd, buf, 16384) != 16384) return 1;
 
                /* Shorten the task */
                buf += 16384;
@@ -920,10 +924,10 @@ errr fd_write(int fd, cptr buf, huge n)
 #endif
 
        /* Write the final piece */
-       if (write(fd, buf, n) != (int)n) return (1);
+       if (write(fd, buf, n) != (int)n) return 1;
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -933,23 +937,17 @@ errr fd_write(int fd, cptr buf, huge n)
 errr fd_close(int fd)
 {
        /* Verify the fd */
-       if (fd < 0) return (-1);
+       if (fd < 0) return -1;
 
        /* Close */
        (void)close(fd);
 
-       /* XXX XXX XXX */
-       return (0);
+       return 0;
 }
 
 
-#endif /* ACORN */
-
-
-
-
 /*
- * 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
@@ -994,9 +992,9 @@ errr fd_close(int fd)
  */
 
 
-/*
- * Move the cursor
- */
+ /*
 * Move the cursor
 */
 void move_cursor(int row, int col)
 {
        Term_gotoxy(col, row);
@@ -1009,7 +1007,7 @@ void move_cursor(int row, int col)
  */
 static char octify(uint i)
 {
-       return (hexsym[i%8]);
+       return (hexsym[i % 8]);
 }
 
 /*
@@ -1017,7 +1015,7 @@ static char octify(uint i)
  */
 static char hexify(uint i)
 {
-       return (hexsym[i%16]);
+       return (hexsym[i % 16]);
 }
 
 
@@ -1027,7 +1025,7 @@ static char hexify(uint i)
 static int deoct(char c)
 {
        if (isdigit(c)) return (D2I(c));
-       return (0);
+       return 0;
 }
 
 /*
@@ -1038,13 +1036,13 @@ static int dehex(char c)
        if (isdigit(c)) return (D2I(c));
        if (islower(c)) return (A2I(c) + 10);
        if (isupper(c)) return (A2I(tolower(c)) + 10);
-       return (0);
+       return 0;
 }
 
 
-static int my_stricmp(cptr a, cptr b)
+static int my_stricmp(concptr a, concptr b)
 {
-       cptr s1, s2;
+       concptr s1, s2;
        char z1, z2;
 
        /* Scan the strings */
@@ -1052,15 +1050,15 @@ static int my_stricmp(cptr a, cptr b)
        {
                z1 = FORCEUPPER(*s1);
                z2 = FORCEUPPER(*s2);
-               if (z1 < z2) return (-1);
-               if (z1 > z2) return (1);
-               if (!z1) return (0);
+               if (z1 < z2) return -1;
+               if (z1 > z2) return 1;
+               if (!z1) return 0;
        }
 }
 
-static int my_strnicmp(cptr a, cptr b, int n)
+static int my_strnicmp(concptr a, concptr b, int n)
 {
-       cptr s1, s2;
+       concptr s1, s2;
        char z1, z2;
 
        /* Scan the strings */
@@ -1068,39 +1066,39 @@ static int my_strnicmp(cptr a, cptr b, int n)
        {
                z1 = FORCEUPPER(*s1);
                z2 = FORCEUPPER(*s2);
-               if (z1 < z2) return (-1);
-               if (z1 > z2) return (1);
-               if (!z1) return (0);
+               if (z1 < z2) return -1;
+               if (z1 > z2) return 1;
+               if (!z1) return 0;
        }
        return 0;
 }
 
 
-static void trigger_text_to_ascii(char **bufptr, cptr *strptr)
+static void trigger_text_to_ascii(char **bufptr, concptr *strptr)
 {
        char *s = *bufptr;
-       cptr str = *strptr;
+       concptr str = *strptr;
        bool mod_status[MAX_MACRO_MOD];
 
        int i, len = 0;
        int shiftstatus = 0;
-       cptr key_code;
+       concptr key_code;
 
        if (macro_template == NULL)
                return;
-       
+
        for (i = 0; macro_modifier_chr[i]; i++)
                mod_status[i] = FALSE;
        str++;
 
        /* Examine modifier keys */
-       while (1)
+       while (TRUE)
        {
-               for (i=0; macro_modifier_chr[i]; i++)
+               for (i = 0; macro_modifier_chr[i]; i++)
                {
                        len = strlen(macro_modifier_name[i]);
-                       
-                       if(!my_strnicmp(str, macro_modifier_name[i], len))
+
+                       if (!my_strnicmp(str, macro_modifier_name[i], len))
                                break;
                }
                if (!macro_modifier_chr[i]) break;
@@ -1141,7 +1139,7 @@ static void trigger_text_to_ascii(char **bufptr, cptr *strptr)
                char ch = macro_template[i];
                int j;
 
-               switch(ch)
+               switch (ch)
                {
                case '&':
                        for (j = 0; macro_modifier_chr[j]; j++) {
@@ -1173,7 +1171,7 @@ static void trigger_text_to_ascii(char **bufptr, cptr *strptr)
  * parsing "\xFF" into a (signed) char.  Whoever thought of making
  * the "sign" of a "char" undefined is a complete moron.  Oh well.
  */
-void text_to_ascii(char *buf, cptr str)
+void text_to_ascii(char *buf, concptr str)
 {
        char *s = buf;
 
@@ -1185,8 +1183,6 @@ void text_to_ascii(char *buf, cptr str)
                {
                        /* Skip the backslash */
                        str++;
-
-                       /* Paranoia */
                        if (!(*str)) break;
 
                        /* Macro Trigger */
@@ -1196,88 +1192,88 @@ void text_to_ascii(char *buf, cptr str)
                        }
                        else
 
-                       /* Hex-mode XXX */
-                       if (*str == 'x')
-                       {
-                               *s = 16 * dehex(*++str);
-                               *s++ += dehex(*++str);
-                       }
+                               /* Hex-mode XXX */
+                               if (*str == 'x')
+                               {
+                                       *s = 16 * (char)dehex(*++str);
+                                       *s++ += (char)dehex(*++str);
+                               }
 
                        /* Hack -- simple way to specify "backslash" */
-                       else if (*str == '\\')
-                       {
-                               *s++ = '\\';
-                       }
+                               else if (*str == '\\')
+                               {
+                                       *s++ = '\\';
+                               }
 
                        /* Hack -- simple way to specify "caret" */
-                       else if (*str == '^')
-                       {
-                               *s++ = '^';
-                       }
+                               else if (*str == '^')
+                               {
+                                       *s++ = '^';
+                               }
 
                        /* Hack -- simple way to specify "space" */
-                       else if (*str == 's')
-                       {
-                               *s++ = ' ';
-                       }
+                               else if (*str == 's')
+                               {
+                                       *s++ = ' ';
+                               }
 
                        /* Hack -- simple way to specify Escape */
-                       else if (*str == 'e')
-                       {
-                               *s++ = ESCAPE;
-                       }
+                               else if (*str == 'e')
+                               {
+                                       *s++ = ESCAPE;
+                               }
 
                        /* Backspace */
-                       else if (*str == 'b')
-                       {
-                               *s++ = '\b';
-                       }
+                               else if (*str == 'b')
+                               {
+                                       *s++ = '\b';
+                               }
 
                        /* Newline */
-                       else if (*str == 'n')
-                       {
-                               *s++ = '\n';
-                       }
+                               else if (*str == 'n')
+                               {
+                                       *s++ = '\n';
+                               }
 
                        /* Return */
-                       else if (*str == 'r')
-                       {
-                               *s++ = '\r';
-                       }
+                               else if (*str == 'r')
+                               {
+                                       *s++ = '\r';
+                               }
 
                        /* Tab */
-                       else if (*str == 't')
-                       {
-                               *s++ = '\t';
-                       }
+                               else if (*str == 't')
+                               {
+                                       *s++ = '\t';
+                               }
 
                        /* Octal-mode */
-                       else if (*str == '0')
-                       {
-                               *s = 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
-                       }
+                               else if (*str == '0')
+                               {
+                                       *s = 8 * (char)deoct(*++str);
+                                       *s++ += (char)deoct(*++str);
+                               }
 
                        /* Octal-mode */
-                       else if (*str == '1')
-                       {
-                               *s = 64 + 8 * deoct(*++str);
-                               *s++ += deoct(*++str);
-                       }
+                               else if (*str == '1')
+                               {
+                                       *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);
-                       }
+                               else if (*str == '2')
+                               {
+                                       *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);
-                       }
+                               else if (*str == '3')
+                               {
+                                       *s = 64 * 3 + 8 * (char)deoct(*++str);
+                                       *s++ += (char)deoct(*++str);
+                               }
 
                        /* Skip the final char */
                        str++;
@@ -1302,13 +1298,13 @@ void text_to_ascii(char *buf, cptr str)
 }
 
 
-static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
+static bool trigger_ascii_to_text(char **bufptr, concptr *strptr)
 {
        char *s = *bufptr;
-       cptr str = *strptr;
+       concptr str = *strptr;
        char key_code[100];
        int i;
-       cptr tmp;
+       concptr tmp;
 
        if (macro_template == NULL)
                return FALSE;
@@ -1321,14 +1317,14 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
                int j;
                char ch = macro_template[i];
 
-               switch(ch)
+               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];
-                               while(*tmp) *s++ = *tmp++;
+                               while (*tmp) *s++ = *tmp++;
                                str++;
                        }
                        break;
@@ -1347,7 +1343,7 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
        for (i = 0; i < max_macrotrigger; i++)
        {
                if (!my_stricmp(key_code, macro_trigger_keycode[0][i])
-                   || !my_stricmp(key_code, macro_trigger_keycode[1][i]))
+                       || !my_stricmp(key_code, macro_trigger_keycode[1][i]))
                        break;
        }
        if (i == max_macrotrigger)
@@ -1357,7 +1353,7 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
        while (*tmp) *s++ = *tmp++;
 
        *s++ = ']';
-       
+
        *bufptr = s;
        *strptr = str;
        return TRUE;
@@ -1367,7 +1363,7 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr)
 /*
  * Hack -- convert a string into a printable form
  */
-void ascii_to_text(char *buf, cptr str)
+void ascii_to_text(char *buf, concptr str)
 {
        char *s = buf;
 
@@ -1379,7 +1375,7 @@ void ascii_to_text(char *buf, cptr str)
                /* Macro Trigger */
                if (i == 31)
                {
-                       if(!trigger_ascii_to_text(&s, &str))
+                       if (!trigger_ascii_to_text(&s, &str))
                        {
                                *s++ = '^';
                                *s++ = '_';
@@ -1387,69 +1383,69 @@ void ascii_to_text(char *buf, cptr str)
                }
                else
 
-               if (i == ESCAPE)
-               {
-                       *s++ = '\\';
-                       *s++ = 'e';
-               }
-               else if (i == ' ')
-               {
-                       *s++ = '\\';
-                       *s++ = 's';
-               }
-               else if (i == '\b')
-               {
-                       *s++ = '\\';
-                       *s++ = 'b';
-               }
-               else if (i == '\t')
-               {
-                       *s++ = '\\';
-                       *s++ = 't';
-               }
-               else if (i == '\n')
-               {
-                       *s++ = '\\';
-                       *s++ = 'n';
-               }
-               else if (i == '\r')
-               {
-                       *s++ = '\\';
-                       *s++ = 'r';
-               }
-               else if (i == '^')
-               {
-                       *s++ = '\\';
-                       *s++ = '^';
-               }
-               else if (i == '\\')
-               {
-                       *s++ = '\\';
-                       *s++ = '\\';
-               }
-               else if (i < 32)
-               {
-                       *s++ = '^';
-                       *s++ = i + 64;
-               }
-               else if (i < 127)
-               {
-                       *s++ = i;
-               }
-               else if (i < 64)
-               {
-                       *s++ = '\\';
-                       *s++ = '0';
-                       *s++ = octify(i / 8);
-                       *s++ = octify(i % 8);
-               }
-               else
-               {
-                       *s++ = '\\';
-                       *s++ = 'x';
-                       *s++ = hexify(i / 16);
-                       *s++ = hexify(i % 16);
-               }
+                       if (i == ESCAPE)
+                       {
+                               *s++ = '\\';
+                               *s++ = 'e';
+                       }
+                       else if (i == ' ')
+                       {
+                               *s++ = '\\';
+                               *s++ = 's';
+                       }
+                       else if (i == '\b')
+                       {
+                               *s++ = '\\';
+                               *s++ = 'b';
+                       }
+                       else if (i == '\t')
+                       {
+                               *s++ = '\\';
+                               *s++ = 't';
+                       }
+                       else if (i == '\n')
+                       {
+                               *s++ = '\\';
+                               *s++ = 'n';
+                       }
+                       else if (i == '\r')
+                       {
+                               *s++ = '\\';
+                               *s++ = 'r';
+                       }
+                       else if (i == '^')
+                       {
+                               *s++ = '\\';
+                               *s++ = '^';
+                       }
+                       else if (i == '\\')
+                       {
+                               *s++ = '\\';
+                               *s++ = '\\';
+                       }
+                       else if (i < 32)
+                       {
+                               *s++ = '^';
+                               *s++ = i + 64;
+                       }
+                       else if (i < 127)
+                       {
+                               *s++ = i;
+                       }
+                       else if (i < 64)
+                       {
+                               *s++ = '\\';
+                               *s++ = '0';
+                               *s++ = octify(i / 8);
+                               *s++ = octify(i % 8);
+                       }
+                       else
+                       {
+                               *s++ = '\\';
+                               *s++ = 'x';
+                               *s++ = hexify(i / 16);
+                               *s++ = hexify(i % 16);
+                       }
        }
 
        /* Terminate */
@@ -1468,23 +1464,23 @@ void ascii_to_text(char *buf, cptr str)
 
 
 
-/*
- * Determine if any macros have ever started with a given character.
- */
+ /*
 * Determine if any macros have ever started with a given character.
 */
 static bool macro__use[256];
 
 
 /*
  * Find the macro (if any) which exactly matches the given pattern
  */
-sint macro_find_exact(cptr pat)
+sint macro_find_exact(concptr pat)
 {
        int i;
 
        /* Nothing possible */
        if (!macro__use[(byte)(pat[0])])
        {
-               return (-1);
+               return -1;
        }
 
        /* Scan the macros */
@@ -1498,21 +1494,21 @@ sint macro_find_exact(cptr pat)
        }
 
        /* No matches */
-       return (-1);
+       return -1;
 }
 
 
 /*
  * Find the first macro (if any) which contains the given pattern
  */
-static sint macro_find_check(cptr pat)
+static sint macro_find_check(concptr pat)
 {
        int i;
 
        /* Nothing possible */
        if (!macro__use[(byte)(pat[0])])
        {
-               return (-1);
+               return -1;
        }
 
        /* Scan the macros */
@@ -1526,21 +1522,21 @@ static sint macro_find_check(cptr pat)
        }
 
        /* Nothing */
-       return (-1);
+       return -1;
 }
 
 
 /*
  * Find the first macro (if any) which contains the given pattern and more
  */
-static sint macro_find_maybe(cptr pat)
+static sint macro_find_maybe(concptr pat)
 {
        int i;
 
        /* Nothing possible */
        if (!macro__use[(byte)(pat[0])])
        {
-               return (-1);
+               return -1;
        }
 
        /* Scan the macros */
@@ -1557,21 +1553,21 @@ static sint macro_find_maybe(cptr pat)
        }
 
        /* Nothing */
-       return (-1);
+       return -1;
 }
 
 
 /*
  * Find the longest macro (if any) which starts with the given pattern
  */
-static sint macro_find_ready(cptr pat)
+static sint macro_find_ready(concptr pat)
 {
        int i, t, n = -1, s = -1;
 
        /* Nothing possible */
        if (!macro__use[(byte)(pat[0])])
        {
-               return (-1);
+               return -1;
        }
 
        /* Scan the macros */
@@ -1590,8 +1586,6 @@ static sint macro_find_ready(cptr pat)
                n = i;
                s = t;
        }
-
-       /* Result */
        return (n);
 }
 
@@ -1600,23 +1594,23 @@ 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)
+errr macro_add(concptr pat, concptr act)
 {
        int n;
 
 
        /* Paranoia -- require data */
-       if (!pat || !act) return (-1);
+       if (!pat || !act) return -1;
 
 
        /* Look for any existing macro */
@@ -1646,7 +1640,7 @@ errr macro_add(cptr pat, cptr act)
        macro__use[(byte)(pat[0])] = TRUE;
 
        /* Success */
-       return (0);
+       return 0;
 }
 
 
@@ -1711,25 +1705,101 @@ void sound(int val)
 /*
  * Hack -- Play a music
  */
-void music(int val)
+errr play_music(int type, int val)
 {
        /* No sound */
-       if (!use_music) return;
+       if (!use_music) return 1;
 
        /* Make a sound (if allowed) */
-       Term_xtra(TERM_XTRA_MUSIC, val);
+       return Term_xtra(type, val);
 }
 
-/*
- * Hack -- Select floor music.
- */
-void select_floor_music()
-{
-       /* No sound */
-       if (!use_music) return;
+/*
+ * Hack -- Select floor music.
+ */
+void select_floor_music(player_type *player_ptr)
+{
+       if (!use_music) return;
+
+       if (player_ptr->ambush_flag)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH)) return;
+       }
+
+       if (player_ptr->wild_mode)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD)) return;
+       }
+
+       if (player_ptr->current_floor_ptr->inside_arena)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_ARENA)) return;
+       }
+
+       if (player_ptr->phase_out)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BATTLE)) return;
+       }
+
+       if (player_ptr->current_floor_ptr->inside_quest)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_QUEST, player_ptr->current_floor_ptr->inside_quest)) return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST)) return;
+       }
+
+       if (player_ptr->dungeon_idx)
+       {
+               if (player_ptr->feeling == 2)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2)) return;
+               }
+               else if (player_ptr->feeling >= 3 && player_ptr->feeling <= 5)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1)) return;
+               }
+               else
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_DUNGEON, player_ptr->dungeon_idx)) return;
+
+                       if (player_ptr->current_floor_ptr->dun_level < 40)
+                       {
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW)) return;
+                       }
+                       else if (player_ptr->current_floor_ptr->dun_level < 80)
+                       {
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED)) return;
+                       }
+                       else
+                       {
+                               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_HIGH)) return;
+                       }
+               }
+       }
+
+       if (player_ptr->town_num)
+       {
+               if (!play_music(TERM_XTRA_MUSIC_TOWN, player_ptr->town_num)) return;
+               if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_TOWN)) return;
+               return;
+       }
 
-       /* Make a sound (if allowed) */
-       //TODO Term_xtra(TERM_XTRA_MUSIC, val);
+       if (!player_ptr->current_floor_ptr->dun_level)
+       {
+               if (player_ptr->lev >= 45)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD3)) return;
+               }
+               else if (player_ptr->lev >= 25)
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD2)) return;
+               }
+               else
+               {
+                       if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD1)) return;
+               }
+       }
+
+       play_music(TERM_XTRA_MUSIC_MUTE, 0);
 }
 
 
@@ -1749,7 +1819,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)
 {
@@ -1757,11 +1827,11 @@ static char inkey_aux(void)
 
        char ch;
 
-       cptr pat, act;
+       concptr pat, act;
 
        char *buf = inkey_macro_trigger_string;
 
-       /* Hack : ¥­¡¼ÆþÎÏÂÔ¤Á¤Ç»ß¤Þ¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢Î®¤ì¤¿¹Ô¤Îµ­²±¤ÏÉÔÍס£ */
+       /* Hack : キー入力待ちで止まっているので、流れた行の記憶は不要。 */
        num_more = 0;
 
        if (parse_macro)
@@ -1776,7 +1846,7 @@ static char inkey_aux(void)
        else
        {
                /* Wait for a keypress */
-               (void) (Term_inkey(&ch, TRUE, TRUE));
+               (void)(Term_inkey(&ch, TRUE, TRUE));
        }
 
 
@@ -1833,7 +1903,6 @@ static char inkey_aux(void)
                        /* Excessive delay */
                        if (w >= 10) break;
 
-                       /* Delay */
                        Term_xtra(TERM_XTRA_DELAY, w);
                }
        }
@@ -1849,7 +1918,7 @@ static char inkey_aux(void)
                while (p > 0)
                {
                        /* Push the key, notice over-flow */
-                       if (Term_key_push(buf[--p])) return (0);
+                       if (Term_key_push(buf[--p])) return 0;
                }
 
                /* Wait for (and remove) a pending key */
@@ -1870,7 +1939,7 @@ static char inkey_aux(void)
        while (p > n)
        {
                /* Push the key, notice over-flow */
-               if (Term_key_push(buf[--p])) return (0);
+               if (Term_key_push(buf[--p])) return 0;
        }
 
 
@@ -1878,7 +1947,7 @@ static char inkey_aux(void)
        parse_macro = TRUE;
 
        /* Push the "end of macro action" key */
-       if (Term_key_push(30)) return (0);
+       if (Term_key_push(30)) return 0;
 
 
        /* Access the macro action */
@@ -1891,12 +1960,12 @@ static char inkey_aux(void)
        while (n > 0)
        {
                /* Push the key, notice over-flow */
-               if (Term_key_push(act[--n])) return (0);
+               if (Term_key_push(act[--n])) return 0;
        }
 
 
        /* Hack -- Force "inkey()" to call us again */
-       return (0);
+       return 0;
 }
 
 
@@ -1926,31 +1995,15 @@ static void forget_macro_action(void)
        parse_macro = FALSE;
 }
 
-
 /*
- * 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
  * trigger any macros, and cannot be bypassed by the Borg.  It is used
  * in Angband to handle "keymaps".
  */
-static cptr inkey_next = NULL;
-
-
-#ifdef ALLOW_BORG
-
-/*
- * Mega-Hack -- special "inkey_hack" hook.  XXX XXX XXX
- *
- * This special function hook allows the "Borg" (see elsewhere) to take
- * control of the "inkey()" function, and substitute in fake keypresses.
- */
-char (*inkey_hack)(int flush_first) = NULL;
-
-#endif /* ALLOW_BORG */
-
-
+static concptr inkey_next = NULL;
 
 /*
  * Get a keypress from the user.
@@ -2007,7 +2060,7 @@ char (*inkey_hack)(int flush_first) = NULL;
  * is only requested (via "Term_inkey()") when "angband_term[0]" is active.
  *
  * Mega-Hack -- This function is used as the entry point for clearing the
- * "signal_count" variable, and of the "character_saved" variable.
+ * "signal_count" variable, and of the "current_world_ptr->character_saved" variable.
  *
  * Hack -- Note the use of "inkey_next" to allow "keymaps" to be processed.
  *
@@ -2038,22 +2091,6 @@ char inkey(void)
        /* Forget pointer */
        inkey_next = NULL;
 
-
-#ifdef ALLOW_BORG
-
-       /* Mega-Hack -- Use the special hook */
-       if (inkey_hack && ((ch = (*inkey_hack)(inkey_xtra)) != 0))
-       {
-               /* Cancel the various "global parameters" */
-               inkey_base = inkey_xtra = inkey_flag = inkey_scan = FALSE;
-
-               /* Accept result */
-               return (ch);
-       }
-
-#endif /* ALLOW_BORG */
-
-
        /* Hack -- handle delayed "flush()" */
        if (inkey_xtra)
        {
@@ -2072,7 +2109,7 @@ char inkey(void)
        (void)Term_get_cursor(&v);
 
        /* Show the cursor if waiting, except sometimes in "command" mode */
-       if (!inkey_scan && (!inkey_flag || hilite_player || character_icky))
+       if (!inkey_scan && (!inkey_flag || hilite_player || current_world_ptr->character_icky))
        {
                /* Show the cursor */
                (void)Term_set_cursor(1);
@@ -2107,7 +2144,7 @@ char inkey(void)
                        Term_activate(angband_term[0]);
 
                        /* Mega-Hack -- reset saved flag */
-                       character_saved = FALSE;
+                       current_world_ptr->character_saved = FALSE;
 
                        /* Mega-Hack -- reset signal counter */
                        signal_count = 0;
@@ -2128,11 +2165,9 @@ char inkey(void)
                                /* Wait for (and remove) a pending key */
                                if (0 == Term_inkey(&ch, TRUE, TRUE))
                                {
-                                       /* Done */
                                        break;
                                }
 
-                               /* Oops */
                                break;
                        }
 
@@ -2142,7 +2177,6 @@ char inkey(void)
                                /* Check for (and remove) a pending key */
                                if (0 == Term_inkey(&ch, FALSE, TRUE))
                                {
-                                       /* Done */
                                        break;
                                }
 
@@ -2155,12 +2189,10 @@ char inkey(void)
                                        /* Excessive delay */
                                        if (w >= 100) break;
 
-                                       /* Delay */
                                        Term_xtra(TERM_XTRA_DELAY, w);
                                }
                        }
 
-                       /* Done */
                        break;
                }
 
@@ -2174,8 +2206,6 @@ char inkey(void)
                {
                        /* Strip this key */
                        ch = 0;
-
-                       /* Continue */
                        continue;
                }
 
@@ -2255,13 +2285,13 @@ char inkey(void)
  * Note that "quark zero" is NULL and should not be "dereferenced".
  */
 
-/*
- * Initialize the quark array
- */
+ /*
 * Initialize the quark array
 */
 void quark_init(void)
 {
        /* Quark variables */
-       C_MAKE(quark__str, QUARK_MAX, cptr);
+       C_MAKE(quark__str, QUARK_MAX, concptr);
 
        /* Prepare first quark, which is used when quark_add() is failed */
        quark__str[1] = string_make("");
@@ -2274,9 +2304,9 @@ void quark_init(void)
 /*
  * Add a new "quark" to the set of quarks.
  */
-s16b quark_add(cptr str)
+u16b quark_add(concptr str)
 {
-       int i;
+       u16b i;
 
        /* Look for an existing quark */
        for (i = 1; i < quark__num; i++)
@@ -2302,9 +2332,9 @@ s16b quark_add(cptr str)
 /*
  * This function looks up a quark
  */
-cptr quark_str(s16b i)
+concptr quark_str(STR_OFFSET i)
 {
-       cptr q;
+       concptr q;
 
        /* Return NULL for an invalid index */
        if ((i < 1) || (i >= quark__num)) return NULL;
@@ -2342,10 +2372,11 @@ cptr quark_str(s16b i)
 
 
 
-/*
- * How many messages are "available"?
- */
-s16b message_num(void)
+ /*!
+  * @brief 保存中の過去ゲームメッセージの数を返す。 / How many messages are "available"?
+  * @return 残っているメッセージの数
+  */
+s32b message_num(void)
 {
        int last, next, n;
 
@@ -2364,15 +2395,16 @@ 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)
+concptr message_str(int age)
 {
-       s16b x;
-       s16b o;
-       cptr s;
+       s32b x;
+       s32b o;
+       concptr s;
 
        /* Forgotten messages have no text */
        if ((age < 0) || (age >= message_num())) return ("");
@@ -2391,17 +2423,19 @@ 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)
+void message_add(concptr 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;
+       concptr splitted2;
 
        /*** Step 1 -- Analyze the message ***/
 
@@ -2414,39 +2448,38 @@ 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; /* ºÇ¸å¤Îʸ»ú¤¬´Á»úȾʬ */
+               concptr 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;
-       } else {
-         splitted2 = NULL;
+               splitted2 = str + n;
+               strncpy(splitted1, str, n);
+               splitted1[n] = '\0';
+               str = splitted1;
+       }
+       else {
+               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 */
@@ -2457,7 +2490,7 @@ void message_add(cptr str)
                char buf[1024];
                char *t;
 
-               cptr old;
+               concptr old;
 
                /* Back up and wrap if needed */
                if (i-- == 0) i = MESSAGE_MAX - 1;
@@ -2472,8 +2505,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
@@ -2481,13 +2514,13 @@ void message_add(cptr str)
                if (*t)
                {
                        /* Message is too small */
-                       if (strlen(buf) < 6) break;
+                       if (strlen(buf) < A_MAX) break;
 
                        /* Drop the space */
                        *(t - 1) = '\0';
 
                        /* Get multiplier */
-                       j = atoi(t+2);
+                       j = atoi(t + 2);
                }
 
                /* Limit the multiplier to 1000 */
@@ -2510,20 +2543,18 @@ void message_add(cptr str)
                }
                else
                {
-                       num_more++;/*ή¤ì¤¿¹Ô¤Î¿ô¤ò¿ô¤¨¤Æ¤ª¤¯ */
+                       num_more++;/*流れた行の数を数えておく */
                        now_message++;
                }
 
-               /* Done */
                break;
        }
 
        /* Check the last few messages (if any to count) */
        for (i = message__next; k; k--)
        {
-               u16b q;
-
-               cptr old;
+               int q;
+               concptr old;
 
                /* Back up and wrap if needed */
                if (i-- == 0) i = MESSAGE_MAX - 1;
@@ -2604,7 +2635,7 @@ void message_add(cptr str)
                message__tail = message__head + n + 1;
 
                /* Advance tail while possible past first "nul" */
-               while (message__buf[message__tail-1]) message__tail++;
+               while (message__buf[message__tail - 1]) message__tail++;
 
                /* Kill all "dead" messages */
                for (i = message__last; TRUE; i++)
@@ -2661,9 +2692,9 @@ 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);
+               message_add(splitted2);
 }
 
 
@@ -2671,12 +2702,12 @@ void message_add(cptr str)
 /*
  * Hack -- flush
  */
-static void msg_flush(int x)
+static void msg_flush(player_type *player_ptr, int x)
 {
        byte a = TERM_L_BLUE;
        bool nagasu = FALSE;
 
-       if ((auto_more && !now_damaged) || num_more < 0){
+       if ((auto_more && !player_ptr->now_damaged) || num_more < 0) {
                int i;
                for (i = 0; i < 8; i++)
                {
@@ -2691,31 +2722,29 @@ static void msg_flush(int x)
                        nagasu = TRUE;
                }
        }
-       now_damaged = FALSE;
 
-       if (!p_ptr->playing || !nagasu)
+       player_ptr->now_damaged = FALSE;
+
+       if (!player_ptr->playing || !nagasu)
        {
                /* Pause for response */
-#ifdef JP
-               Term_putstr(x, 0, -1, a, "-³¤¯-");
-#else
-               Term_putstr(x, 0, -1, a, "-more-");
-#endif
-
+               Term_putstr(x, 0, -1, a, _("-続く-", "-more-"));
 
                /* Get an acceptable keypress */
-               while (1)
+               while (TRUE)
                {
                        int cmd = inkey();
                        if (cmd == ESCAPE) {
-                           num_more = -9999; /*auto_more¤Î¤È¤­¡¢Á´¤Æή¤¹¡£ */
-                           break;
-                       } else if (cmd == ' ') {
-                           num_more = 0; /*£±²èÌ̤À¤±Î®¤¹¡£ */
-                           break;
-                       } else if ((cmd == '\n') || (cmd == '\r')) {
-                           num_more--; /*£±¹Ô¤À¤±Î®¤¹¡£ */
-                           break;
+                               num_more = -9999; /*auto_moreのとき、全て流す。 */
+                               break;
+                       }
+                       else if (cmd == ' ') {
+                               num_more = 0; /*1画面だけ流す。 */
+                               break;
+                       }
+                       else if ((cmd == '\n') || (cmd == '\r')) {
+                               num_more--; /*1行だけ流す。 */
+                               break;
                        }
                        if (quick_messages) break;
                        bell();
@@ -2727,6 +2756,12 @@ static void msg_flush(int x)
 }
 
 
+void msg_erase(void)
+{
+       msg_print(NULL);
+}
+
+
 /*
  * Output a message to the top line of the screen.
  *
@@ -2743,26 +2778,23 @@ 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)
+void msg_print(concptr msg)
 {
        static int p = 0;
-
        int n;
-
        char *t;
-
        char buf[1024];
 
-       if (world_monster) return;
+       if (current_world_ptr->timewalk_m_idx) return;
 
        /* Hack -- Reset */
        if (!msg_flag) {
@@ -2771,14 +2803,13 @@ 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);
+               msg_flush(p_ptr, p);
 
                /* Forget it */
                msg_flag = FALSE;
@@ -2787,20 +2818,25 @@ 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)current_world_ptr->game_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 (current_world_ptr->character_generated) message_add(buf);
 
        /* Analyze the buffer */
        t = buf;
@@ -2861,10 +2897,10 @@ void msg_print(cptr msg)
                Term_putstr(0, 0, split, TERM_WHITE, t);
 
                /* Flush it */
-               msg_flush(split + 1);
+               msg_flush(p_ptr, split + 1);
 
                /* Memorize the piece */
-               /* if (character_generated) message_add(t); */
+               /* if (current_world_ptr->character_generated) message_add(t); */
 
                /* Restore the split character */
                t[split] = oops;
@@ -2876,16 +2912,14 @@ 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); */
+       /* if (current_world_ptr->character_generated) message_add(t); */
 
-       /* Window stuff */
        p_ptr->window |= (PW_MESSAGE);
-       window_stuff();
+       update_output(p_ptr);
 
        /* Remember the message */
        msg_flag = TRUE;
@@ -2897,12 +2931,31 @@ void msg_print(cptr msg)
        p += n + 1;
 #endif
 
-
        /* Optional refresh */
        if (fresh_message) Term_fresh();
 }
 
 
+void msg_print_wizard(int cheat_type, concptr 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;
+
+       concptr 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)
+       {
+               exe_write_diary(p_ptr, DIARY_WIZARD_LOG, 0, buf);
+       }
+
+}
+
+
 /*
  * Hack -- prevent "accidents" in "screen_save()" or "screen_load()"
  */
@@ -2914,7 +2967,7 @@ static int screen_depth = 0;
  *
  * This function must match exactly one call to "screen_load()".
  */
-void screen_save(void)
+void screen_save()
 {
        /* Hack -- Flush messages */
        msg_print(NULL);
@@ -2923,7 +2976,7 @@ void screen_save(void)
        if (screen_depth++ == 0) Term_save();
 
        /* Increase "icky" depth */
-       character_icky++;
+       current_world_ptr->character_icky++;
 }
 
 
@@ -2932,7 +2985,7 @@ void screen_save(void)
  *
  * This function must match exactly one call to "screen_save()".
  */
-void screen_load(void)
+void screen_load()
 {
        /* Hack -- Flush messages */
        msg_print(NULL);
@@ -2941,14 +2994,14 @@ void screen_load(void)
        if (--screen_depth == 0) Term_load();
 
        /* Decrease "icky" depth */
-       character_icky--;
+       current_world_ptr->character_icky--;
 }
 
 
 /*
  * Display a formatted message, using "vstrnfmt()" and "msg_print()".
  */
-void msg_format(cptr fmt, ...)
+void msg_format(concptr fmt, ...)
 {
        va_list vp;
 
@@ -2967,6 +3020,31 @@ void msg_format(cptr fmt, ...)
        msg_print(buf);
 }
 
+/*
+ * Display a formatted message, using "vstrnfmt()" and "msg_print()".
+ */
+void msg_format_wizard(int cheat_type, concptr 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);
+}
 
 
 /*
@@ -2975,7 +3053,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, concptr str, TERM_LEN row, TERM_LEN col)
 {
        /* Position cursor, Dump the attr/text */
        Term_putstr(col, row, -1, attr, str);
@@ -2984,7 +3062,7 @@ void c_put_str(byte attr, cptr str, int row, int col)
 /*
  * As above, but in "white"
  */
-void put_str(cptr str, int row, int col)
+void put_str(concptr str, TERM_LEN row, TERM_LEN col)
 {
        /* Spawn */
        Term_putstr(col, row, -1, TERM_WHITE, str);
@@ -2996,7 +3074,7 @@ void put_str(cptr str, int row, int col)
  * Display a string on the screen using an attribute, and clear
  * to the end of the line.
  */
-void c_prt(byte attr, cptr str, int row, int col)
+void c_prt(TERM_COLOR attr, concptr str, TERM_LEN row, TERM_LEN col)
 {
        /* Clear line, position cursor */
        Term_erase(col, row, 255);
@@ -3008,7 +3086,7 @@ void c_prt(byte attr, cptr str, int row, int col)
 /*
  * As above, but in "white"
  */
-void prt(cptr str, int row, int col)
+void prt(concptr str, TERM_LEN row, TERM_LEN col)
 {
        /* Spawn */
        c_prt(TERM_WHITE, str, row, col);
@@ -3031,13 +3109,13 @@ void prt(cptr str, int row, int col)
  * This function will correctly handle any width up to the maximum legal
  * value of 256, though it works best for a standard 80 character width.
  */
-void c_roff(byte a, cptr str)
+void c_roff(TERM_COLOR a, concptr str)
 {
        int x, y;
 
        int w, h;
 
-       cptr s;
+       concptr s;
 
        /* Obtain the size */
        (void)Term_get_size(&w, &h);
@@ -3046,7 +3124,7 @@ void c_roff(byte a, cptr str)
        (void)Term_locate(&x, &y);
 
        /* Hack -- No more space */
-       ify == h - 1 && x > w - 3) return;
+       if (y == h - 1 && x > w - 3) return;
 
        /* Process the string */
        for (s = str; *s; s++)
@@ -3064,7 +3142,7 @@ void c_roff(byte a, cptr str)
                        y++;
 
                        /* No more space */
-                       if( y == h ) break;
+                       if (y == h) break;
 
                        /* Clear line, move cursor */
                        Term_erase(x, y, 255);
@@ -3074,7 +3152,7 @@ void c_roff(byte a, cptr str)
 
                /* Clean up the char */
 #ifdef JP
-               ch = ((isprint(*s) || k_flag) ? *s : ' ');
+               ch = ((k_flag || isprint(*s)) ? *s : ' ');
 #else
                ch = (isprint(*s) ? *s : ' ');
 #endif
@@ -3082,7 +3160,7 @@ void c_roff(byte a, cptr str)
 
                /* Wrap words as needed */
 #ifdef JP
-               if (( x >= ( (k_flag) ? w - 2 : w - 1 ) ) && (ch != ' '))
+               if ((x >= ((k_flag) ? w - 2 : w - 1)) && (ch != ' '))
 #else
                if ((x >= w - 1) && (ch != ' '))
 #endif
@@ -3090,52 +3168,49 @@ void c_roff(byte a, cptr str)
                {
                        int i, n = 0;
 
-                       byte av[256];
+                       TERM_COLOR av[256];
                        char cv[256];
 
                        /* Wrap word */
                        if (x < w)
 #ifdef JP
                        {
-                       /* ¸½ºß¤¬È¾³Ñʸ»ú¤Î¾ì¹ç */
-                       if( !k_flag )
+                               /* 現在が半角文字の場合 */
+                               if (!k_flag)
 #endif
-                       {
-                               /* Scan existing text */
-                               for (i = w - 2; i >= 0; i--)
                                {
-                                       /* Grab existing attr/char */
-                                       Term_what(i, y, &av[i], &cv[i]);
+                                       /* Scan existing text */
+                                       for (i = w - 2; i >= 0; i--)
+                                       {
+                                               /* Grab existing attr/char */
+                                               Term_what(i, y, &av[i], &cv[i]);
 
-                                       /* Break on space */
-                                       if (cv[i] == ' ') break;
+                                               /* Break on space */
+                                               if (cv[i] == ' ') break;
 
-                                       /* Track current word */
-                                       n = i;
+                                               /* Track current word */
+                                               n = i;
 #ifdef JP
-                                       if (cv[i] == '(') break;
+                                               if (cv[i] == '(') break;
 #endif
+                                       }
                                }
-                       }
 
 #ifdef JP
-                       else
-                       {
-                               /* ¸½ºß¤¬Á´³Ñʸ»ú¤Î¤È¤­ */
-                               /* Ê¸Æ¬¤¬¡Ö¡£¡×¡Ö¡¢¡×Åù¤Ë¤Ê¤ë¤È¤­¤Ï¡¢¤½¤Î£±¤ÄÁ°¤Î¸ì¤Ç²þ¹Ô */
-                               if (strncmp(s, "¡£", 2) == 0 || strncmp(s, "¡¢", 2) == 0
-#if 0                   /* °ìÈÌŪ¤Ë¤Ï¡Ö¥£¡×¡Ö¡¼¡×¤Ï¶Ø§¤ÎÂоݳ° */
-                                       || strncmp(s, "¥£", 2) == 0 || strncmp(s, "¡¼", 2) == 0
-#endif
-                              ){
-                                       Term_what(x  , y, &av[x  ], &cv[x  ]);
-                                       Term_what(x-1, y, &av[x-1], &cv[x-1]);
-                                       Term_what(x-2, y, &av[x-2], &cv[x-2]);
-                                       n = x - 2;
-                                       cv[ x ] = '\0';
+                               else
+                               {
+                                       /* 現在が全角文字のとき */
+                                       /* 文頭が「。」「、」等になるときは、その1つ前の語で改行 */
+                                       if (strncmp(s, "。", 2) == 0 || strncmp(s, "、", 2) == 0)
+                                       {
+                                               Term_what(x, y, &av[x], &cv[x]);
+                                               Term_what(x - 1, y, &av[x - 1], &cv[x - 1]);
+                                               Term_what(x - 2, y, &av[x - 2], &cv[x - 2]);
+                                               n = x - 2;
+                                               cv[x] = '\0';
+                                       }
                                }
                        }
-                       }
 #endif
                        /* Special case */
                        if (n == 0) n = w;
@@ -3148,7 +3223,7 @@ void c_roff(byte a, cptr str)
                        y++;
 
                        /* No more space */
-                       if( y == h ) break;
+                       if (y == h) break;
 
                        /* Clear line, move cursor */
                        Term_erase(x, y, 255);
@@ -3157,7 +3232,7 @@ void c_roff(byte a, cptr str)
                        for (i = n; i < w - 1; i++)
                        {
 #ifdef JP
-                               if( cv[i] == '\0' ) break;
+                               if (cv[i] == '\0') break;
 #endif
                                /* Dump */
                                Term_addch(av[i], cv[i]);
@@ -3169,7 +3244,7 @@ void c_roff(byte a, cptr str)
 
                /* Dump */
 #ifdef JP
-               Term_addch((byte)(a|0x10), ch);
+               Term_addch((byte)(a | 0x10), ch);
 #else
                Term_addch(a, ch);
 #endif
@@ -3181,7 +3256,7 @@ void c_roff(byte a, cptr str)
                        s++;
                        x++;
                        ch = *s;
-                       Term_addch((byte)(a|0x20), ch);
+                       Term_addch((byte)(a | 0x20), ch);
                }
 #endif
                /* Advance */
@@ -3192,7 +3267,7 @@ void c_roff(byte a, cptr str)
 /*
  * As above, but in "white"
  */
-void roff(cptr str)
+void roff(concptr str)
 {
        /* Spawn */
        c_roff(TERM_WHITE, str);
@@ -3301,7 +3376,7 @@ bool askfor_aux(char *buf, int len, bool numpad_cursor)
                                if (iskanji(buf[i])) next_pos++;
 #endif
 
-                               /* Is there the cursor at next position? */ 
+                               /* Is there the cursor at next position? */
                                if (next_pos >= pos) break;
 
                                /* Move to next */
@@ -3361,7 +3436,7 @@ bool askfor_aux(char *buf, int len, bool numpad_cursor)
                                if (iskanji(buf[i])) next_pos++;
 #endif
 
-                               /* Is there the cursor at next position? */ 
+                               /* Is there the cursor at next position? */
                                if (next_pos >= pos) break;
 
                                /* Move to next */
@@ -3499,11 +3574,9 @@ bool askfor(char *buf, int len)
  *
  * We clear the input, and return FALSE, on "ESCAPE".
  */
-bool get_string(cptr prompt, char *buf, int len)
+bool get_string(concptr prompt, char *buf, int len)
 {
        bool res;
-
-       /* Paranoia XXX XXX XXX */
        msg_print(NULL);
 
        /* Display prompt */
@@ -3514,8 +3587,6 @@ bool get_string(cptr prompt, char *buf, int len)
 
        /* Clear prompt */
        prt("", 0, 0);
-
-       /* Result */
        return (res);
 }
 
@@ -3527,7 +3598,7 @@ bool get_string(cptr prompt, char *buf, int len)
  *
  * Note that "[y/n]" is appended to the prompt.
  */
-bool get_check(cptr prompt)
+bool get_check(concptr prompt)
 {
        return get_check_strict(prompt, 0);
 }
@@ -3540,7 +3611,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(concptr prompt, BIT_FLAGS mode)
 {
        int i;
        char buf[80];
@@ -3549,31 +3620,29 @@ bool get_check_strict(cptr prompt, int mode)
        if (auto_more)
        {
                p_ptr->window |= PW_MESSAGE;
-               window_stuff();
+               handle_stuff(p_ptr);
                num_more = 0;
        }
 
-       /* Paranoia XXX XXX XXX */
        msg_print(NULL);
 
        if (!rogue_like_commands)
                mode &= ~CHECK_OKAY_CANCEL;
 
-
        /* Hack -- Build a "useful" prompt */
        if (mode & CHECK_OKAY_CANCEL)
        {
-               my_strcpy(buf, prompt, sizeof(buf)-15);
+               my_strcpy(buf, prompt, sizeof(buf) - 15);
                strcat(buf, "[(O)k/(C)ancel]");
        }
        else if (mode & CHECK_DEFAULT_Y)
        {
-               my_strcpy(buf, prompt, sizeof(buf)-5);
+               my_strcpy(buf, prompt, sizeof(buf) - 5);
                strcat(buf, "[Y/n]");
        }
        else
        {
-               my_strcpy(buf, prompt, sizeof(buf)-5);
+               my_strcpy(buf, prompt, sizeof(buf) - 5);
                strcat(buf, "[y/n]");
        }
 
@@ -3585,7 +3654,7 @@ bool get_check_strict(cptr prompt, int mode)
                /* HACK : Add the line to message buffer */
                message_add(buf);
                p_ptr->window |= (PW_MESSAGE);
-               window_stuff();
+               handle_stuff(p_ptr);
        }
 
        /* Get an acceptable answer */
@@ -3653,9 +3722,8 @@ bool get_check_strict(cptr prompt, int mode)
  *
  * Returns TRUE unless the character is "Escape"
  */
-bool get_com(cptr prompt, char *command, bool z_escape)
+bool get_com(concptr prompt, char *command, bool z_escape)
 {
-       /* Paranoia XXX XXX XXX */
        msg_print(NULL);
 
        /* Display a prompt */
@@ -3663,7 +3731,7 @@ bool get_com(cptr prompt, char *command, bool z_escape)
 
        /* Get a key */
        if (get_com_no_macros)
-               *command = inkey_special(FALSE);
+               *command = (char)inkey_special(FALSE);
        else
                *command = inkey();
 
@@ -3671,11 +3739,11 @@ bool get_com(cptr prompt, char *command, bool z_escape)
        prt("", 0, 0);
 
        /* Handle "cancel" */
-       if (*command == ESCAPE) return (FALSE);
-       if (z_escape && ((*command == 'z') || (*command == 'Z'))) return (FALSE);
+       if (*command == ESCAPE) return FALSE;
+       if (z_escape && ((*command == 'z') || (*command == 'Z'))) return FALSE;
 
        /* Success */
-       return (TRUE);
+       return TRUE;
 }
 
 
@@ -3684,12 +3752,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(concptr prompt, QUANTITY max)
 {
-       bool res;
-       int amt;
+       bool res, result;
+       QUANTITY amt;
        char tmp[80];
        char buf[80];
+       COMMAND_CODE code;
 
 
        /* Use "command_arg" */
@@ -3708,10 +3777,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;
@@ -3723,24 +3792,14 @@ s16b get_quantity(cptr prompt, int max)
                return (amt);
        }
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* Build a prompt if needed */
        if (!prompt)
        {
-               /* Build a prompt */
-#ifdef JP
-               sprintf(tmp, "¤¤¤¯¤Ä¤Ç¤¹¤« (1-%d): ", max);
-#else
-               sprintf(tmp, "Quantity (1-%d): ", max);
-#endif
-
+               sprintf(tmp, _("いくつですか (1-%d): ", "Quantity (1-%d): "), max);
 
                /* Use that prompt */
                prompt = tmp;
        }
-
-       /* Paranoia XXX XXX XXX */
        msg_print(NULL);
 
        /* Display prompt */
@@ -3765,7 +3824,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;
@@ -3776,11 +3835,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);
@@ -3788,16 +3843,12 @@ s16b get_quantity(cptr prompt, int max)
 
 
 /*
- * Pause for user response XXX XXX XXX
+ * Pause for user response
  */
 void pause_line(int row)
 {
        prt("", row, 0);
-#ifdef JP
-       put_str("[ ²¿¤«¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤ ]", row, 26);
-#else
-       put_str("[Press any key to continue]", row, 23);
-#endif
+       put_str(_("[ 何かキーを押して下さい ]", "[Press any key to continue]"), row, _(26, 23));
 
        (void)inkey();
        prt("", row, 0);
@@ -3813,7 +3864,7 @@ static char request_command_buffer[256];
 
 typedef struct
 {
-       cptr name;
+       concptr name;
        byte cmd;
        bool fin;
 } menu_naiyou;
@@ -3822,23 +3873,23 @@ typedef struct
 menu_naiyou menu_info[10][10] =
 {
        {
-               {"ËâË¡/ÆüìǽÎÏ", 1, FALSE},
-               {"¹ÔÆ°", 2, FALSE},
-               {"Æ»¶ñ(»ÈÍÑ)", 3, FALSE},
-               {"Æ»¶ñ(¤½¤Î¾)", 4, FALSE},
-               {"ÁõÈ÷", 5, FALSE},
-               {"Èâ/È¢", 6, FALSE},
-               {"¾ðÊó", 7, FALSE},
-               {"ÀßÄê", 8, FALSE},
-               {"¤½¤Î¾", 9, FALSE},
+               {"魔法/特殊能力", 1, FALSE},
+               {"行動", 2, FALSE},
+               {"道具(使用)", 3, FALSE},
+               {"道具(その他)", 4, FALSE},
+               {"装備", 5, FALSE},
+               {"扉/箱", 6, FALSE},
+               {"情報", 7, FALSE},
+               {"設定", 8, FALSE},
+               {"その他", 9, FALSE},
                {"", 0, FALSE},
        },
 
        {
-               {"»È¤¦(m)", 'm', TRUE},
-               {"Ä´¤Ù¤ë(b/P)", 'b', TRUE},
-               {"³Ð¤¨¤ë(G)", 'G', TRUE},
-               {"ÆüìǽÎϤò»È¤¦(U/O)", 'U', TRUE},
+               {"使う(m)", 'm', TRUE},
+               {"調べる(b/P)", 'b', TRUE},
+               {"覚える(G)", 'G', TRUE},
+               {"特殊能力を使う(U/O)", 'U', TRUE},
                {"", 0, FALSE},
                {"", 0, FALSE},
                {"", 0, FALSE},
@@ -3848,49 +3899,49 @@ menu_naiyou menu_info[10][10] =
        },
 
        {
-               {"µÙ©¤¹¤ë(R)", 'R', TRUE},
-               {"¥È¥é¥Ã¥×²ò½ü(D)", 'D', TRUE},
-               {"õ¤¹(s)", 's', TRUE},
-               {"¼þ¤ê¤òÄ´¤Ù¤ë(l/x)", 'l', TRUE},
-               {"¥¿¡¼¥²¥Ã¥È»ØÄê(*)", '*', TRUE},
-               {"·ê¤ò·¡¤ë(T/^t)", 'T', TRUE},
-               {"³¬Ãʤò¾å¤ë(<)", '<', TRUE},
-               {"³¬Ãʤò²¼¤ê¤ë(>)", '>', TRUE},
-               {"¥Ú¥Ã¥È¤ËÌ¿Î᤹¤ë(p)", 'p', TRUE},
-               {"õº÷¥â¡¼¥É¤ÎON/OFF(S/#)", 'S', TRUE}
+               {"休息する(R)", 'R', TRUE},
+               {"トラップ解除(D)", 'D', TRUE},
+               {"探す(s)", 's', TRUE},
+               {"周りを調べる(l/x)", 'l', TRUE},
+               {"ターゲット指定(*)", '*', TRUE},
+               {"穴を掘る(T/^t)", 'T', TRUE},
+               {"階段を上る(<)", '<', TRUE},
+               {"階段を下りる(>)", '>', TRUE},
+               {"ペットに命令する(p)", 'p', TRUE},
+               {"探索モードのON/OFF(S/#)", 'S', TRUE}
        },
 
        {
-               {"Æɤà(r)", 'r', TRUE},
-               {"°û¤à(q)", 'q', TRUE},
-               {"¾ó¤ò»È¤¦(u/Z)", 'u', TRUE},
-               {"ËâË¡ËÀ¤ÇÁÀ¤¦(a/z)", 'a', TRUE},
-               {"¥í¥Ã¥É¤ò¿¶¤ë(z/a)", 'z', TRUE},
-               {"»ÏÆ°¤¹¤ë(A)", 'A', TRUE},
-               {"¿©¤Ù¤ë(E)", 'E', TRUE},
-               {"Èô¤ÓÆ»¶ñ¤Ç·â¤Ä(f/t)", 'f', TRUE},
-               {"Åꤲ¤ë(v)", 'v', TRUE},
+               {"読む(r)", 'r', TRUE},
+               {"飲む(q)", 'q', TRUE},
+               {"杖を使う(u/Z)", 'u', TRUE},
+               {"魔法棒で狙う(a/z)", 'a', TRUE},
+               {"ロッドを振る(z/a)", 'z', TRUE},
+               {"始動する(A)", 'A', TRUE},
+               {"食べる(E)", 'E', TRUE},
+               {"飛び道具で撃つ(f/t)", 'f', TRUE},
+               {"投げる(v)", 'v', TRUE},
                {"", 0, FALSE}
        },
 
        {
-               {"½¦¤¦(g)", 'g', TRUE},
-               {"Íî¤È¤¹(d)", 'd', TRUE},
-               {"²õ¤¹(k/^d)", 'k', TRUE},
-               {"Ìäò¹ï¤à({)", '{', TRUE},
-               {"Ìäò¾Ã¤¹(})", '}', TRUE},
-               {"Ä´ºº(I)", 'I', TRUE},
-               {"¥¢¥¤¥Æ¥à°ìÍ÷(i)", 'i', TRUE},
+               {"拾う(g)", 'g', TRUE},
+               {"落とす(d)", 'd', TRUE},
+               {"壊す(k/^d)", 'k', TRUE},
+               {"銘を刻む({)", '{', TRUE},
+               {"銘を消す(})", '}', TRUE},
+               {"調査(I)", 'I', TRUE},
+               {"アイテム一覧(i)", 'i', TRUE},
                {"", 0, FALSE},
                {"", 0, FALSE},
                {"", 0, FALSE}
        },
 
        {
-               {"ÁõÈ÷¤¹¤ë(w)", 'w', TRUE},
-               {"ÁõÈ÷¤ò³°¤¹(t/T)", 't', TRUE},
-               {"dzÎÁ¤òÊäµë(F)", 'F', TRUE},
-               {"ÁõÈ÷°ìÍ÷(e)", 'e', TRUE},
+               {"装備する(w)", 'w', TRUE},
+               {"装備を外す(t/T)", 't', TRUE},
+               {"燃料を補給(F)", 'F', TRUE},
+               {"装備一覧(e)", 'e', TRUE},
                {"", 0, FALSE},
                {"", 0, FALSE},
                {"", 0, FALSE},
@@ -3900,10 +3951,10 @@ menu_naiyou menu_info[10][10] =
        },
 
        {
-               {"³«¤±¤ë(o)", 'o', TRUE},
-               {"ÊĤ¸¤ë(c)", 'c', TRUE},
-               {"ÂÎÅö¤¿¤ê¤¹¤ë(B/f)", 'B', TRUE},
-               {"¤¯¤µ¤Ó¤òÂǤÄ(j/S)", 'j', TRUE},
+               {"開ける(o)", 'o', TRUE},
+               {"閉じる(c)", 'c', TRUE},
+               {"体当たりする(B/f)", 'B', TRUE},
+               {"くさびを打つ(j/S)", 'j', TRUE},
                {"", 0, FALSE},
                {"", 0, FALSE},
                {"", 0, FALSE},
@@ -3913,41 +3964,41 @@ menu_naiyou menu_info[10][10] =
        },
 
        {
-               {"¥À¥ó¥¸¥ç¥ó¤ÎÁ´ÂοÞ(M)", 'M', TRUE},
-               {"°ÌÃÖ¤ò³Îǧ(L/W)", 'L', TRUE},
-               {"³¬¤ÎÊ·°Ïµ¤(^f)", KTRL('F'), TRUE},
-               {"¥¹¥Æ¡¼¥¿¥¹(C)", 'C', TRUE},
-               {"ʸ»ú¤ÎÀâÌÀ(/)", '/', TRUE},
-               {"¥á¥Ã¥»¡¼¥¸ÍúÎò(^p)", KTRL('P'), TRUE},
-               {"¸½ºß¤Î»þ¹ï(^t/')", KTRL('T'), TRUE},
-               {"¸½ºß¤ÎÃμ±(~)", '~', TRUE},
-               {"¥×¥ì¥¤µ­Ï¿(|)", '|', TRUE},
+               {"ダンジョンの全体図(M)", 'M', TRUE},
+               {"位置を確認(L/W)", 'L', TRUE},
+               {"階の雰囲気(^f)", KTRL('F'), TRUE},
+               {"ã\82¹ã\83\86ã\83¼ã\82¿ã\82¹(C)", 'C', TRUE},
+               {"文字の説明(/)", '/', TRUE},
+               {"メッセージ履歴(^p)", KTRL('P'), TRUE},
+               {"現在の時刻(^t/')", KTRL('T'), TRUE},
+               {"現在の知識(~)", '~', TRUE},
+               {"プレイ記録(|)", '|', TRUE},
                {"", 0, FALSE}
        },
 
        {
-               {"¥ª¥×¥·¥ç¥ó(=)", '=', TRUE},
-               {"¥Þ¥¯¥í(@)", '@', TRUE},
-               {"²èÌÌɽ¼¨(%)", '%', TRUE},
-               {"¥«¥é¡¼(&)", '&', TRUE},
-               {"ÀßÄêÊѹ¹¥³¥Þ¥ó¥É(\")", '\"', TRUE},
-               {"¼«Æ°½¦¤¤¤ò¥í¡¼¥É($)", '$', TRUE},
-               {"¥·¥¹¥Æ¥à(!)", '!', TRUE},
+               {"オプション(=)", '=', TRUE},
+               {"マクロ(@)", '@', TRUE},
+               {"画面表示(%)", '%', TRUE},
+               {"ã\82«ã\83©ã\83¼(&)", '&', TRUE},
+               {"設定変更コマンド(\")", '\"', TRUE},
+               {"自動拾いをロード($)", '$', TRUE},
+               {"システム(!)", '!', TRUE},
                {"", 0, FALSE},
                {"", 0, FALSE},
                {"", 0, FALSE}
        },
 
        {
-               {"¥»¡¼¥Ö&ÃæÃÇ(^x)", KTRL('X'), TRUE},
-               {"¥»¡¼¥Ö(^s)", KTRL('S'), TRUE},
-               {"¥Ø¥ë¥×(?)", '?', TRUE},
-               {"ºÆÉÁ²è(^r)", KTRL('R'), TRUE},
-               {"¥á¥â(:)", ':', TRUE},
-               {"µ­Ç°»£±Æ())", ')', TRUE},
-               {"µ­Ç°»£±Æ¤Îɽ¼¨(()", '(', TRUE},
-               {"¥Ð¡¼¥¸¥ç¥ó¾ðÊó(V)", 'V', TRUE},
-               {"°úÂह¤ë(Q)", 'Q', TRUE},
+               {"セーブ&中断(^x)", KTRL('X'), TRUE},
+               {"セーブ(^s)", KTRL('S'), TRUE},
+               {"ヘルプ(?)", '?', TRUE},
+               {"再描画(^r)", KTRL('R'), TRUE},
+               {"メモ(:)", ':', TRUE},
+               {"記念撮影())", ')', TRUE},
+               {"記念撮影の表示(()", '(', TRUE},
+               {"バージョン情報(V)", 'V', TRUE},
+               {"引退する(Q)", 'Q', TRUE},
                {"", 0, FALSE}
        },
 };
@@ -4053,7 +4104,7 @@ menu_naiyou menu_info[10][10] =
                {"Identify symbol(/)", '/', TRUE},
                {"Show prev messages(^p)", KTRL('P'), TRUE},
                {"Current time(^t/')", KTRL('T'), TRUE},
-               {"Various informations(~)", '~', TRUE},
+               {"Various information(~)", '~', TRUE},
                {"Play record menu(|)", '|', TRUE},
                {"", 0, FALSE}
        },
@@ -4088,7 +4139,7 @@ menu_naiyou menu_info[10][10] =
 
 typedef struct
 {
-       cptr name;
+       concptr name;
        byte window;
        byte number;
        byte jouken;
@@ -4101,17 +4152,17 @@ typedef struct
 #ifdef JP
 special_menu_naiyou special_menu_info[] =
 {
-       {"ĶǽÎÏ/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_MINDCRAFTER},
-       {"¤â¤Î¤Þ¤Í/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_IMITATOR},
-       {"²Î/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_BARD},
-       {"ɬ»¦µ»/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_SAMURAI},
-       {"Îýµ¤½Ñ/ËâË¡/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_FORCETRAINER},
-       {"µ»/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_BERSERKER},
-       {"µ»½Ñ/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_SMITH},
-       {"¶ÀËâË¡/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_MIRROR_MASTER},
-       {"Ǧ½Ñ/ÆüìǽÎÏ", 0, 0, MENU_CLASS, CLASS_NINJA},
-       {"¹­°è¥Þ¥Ã¥×(<)", 2, 6, MENU_WILD, FALSE},
-       {"Ä̾ï¥Þ¥Ã¥×(>)", 2, 7, MENU_WILD, TRUE},
+       {"超能力/特殊能力", 0, 0, MENU_CLASS, CLASS_MINDCRAFTER},
+       {"ものまね/特殊能力", 0, 0, MENU_CLASS, CLASS_IMITATOR},
+       {"歌/特殊能力", 0, 0, MENU_CLASS, CLASS_BARD},
+       {"必殺技/特殊能力", 0, 0, MENU_CLASS, CLASS_SAMURAI},
+       {"練気術/魔法/特殊能力", 0, 0, MENU_CLASS, CLASS_FORCETRAINER},
+       {"技/特殊能力", 0, 0, MENU_CLASS, CLASS_BERSERKER},
+       {"技術/特殊能力", 0, 0, MENU_CLASS, CLASS_SMITH},
+       {"鏡魔法/特殊能力", 0, 0, MENU_CLASS, CLASS_MIRROR_MASTER},
+       {"忍術/特殊能力", 0, 0, MENU_CLASS, CLASS_NINJA},
+       {"広域マップ(<)", 2, 6, MENU_WILD, FALSE},
+       {"通常マップ(>)", 2, 7, MENU_WILD, TRUE},
        {"", 0, 0, 0, 0},
 };
 #else
@@ -4132,7 +4183,7 @@ special_menu_naiyou special_menu_info[] =
 };
 #endif
 
-static char inkey_from_menu(void)
+static char inkey_from_menu(player_type *player_ptr)
 {
        char cmd;
        int basey, basex;
@@ -4140,7 +4191,7 @@ static char inkey_from_menu(void)
        int menu = 0;
        bool kisuu;
 
-       if (py - panel_row_min > 10) basey = 2;
+       if (player_ptr->y - panel_row_min > 10) basey = 2;
        else basey = 13;
        basex = 15;
 
@@ -4149,38 +4200,39 @@ static char inkey_from_menu(void)
 
        screen_save();
 
-       while(1)
+       floor_type* floor_ptr = player_ptr->current_floor_ptr;
+       while (TRUE)
        {
                int i;
                char sub_cmd;
-               cptr menu_name;
+               concptr menu_name;
                if (!menu) old_num = num;
                put_str("+----------------------------------------------------+", basey, basex);
-               put_str("|                                                    |", basey+1, basex);
-               put_str("|                                                    |", basey+2, basex);
-               put_str("|                                                    |", basey+3, basex);
-               put_str("|                                                    |", basey+4, basex);
-               put_str("|                                                    |", basey+5, basex);
-               put_str("+----------------------------------------------------+", basey+6, basex);
-
-               for(i = 0; i < 10; i++)
+               put_str("|                                                    |", basey + 1, basex);
+               put_str("|                                                    |", basey + 2, basex);
+               put_str("|                                                    |", basey + 3, basex);
+               put_str("|                                                    |", basey + 4, basex);
+               put_str("|                                                    |", basey + 5, basex);
+               put_str("+----------------------------------------------------+", basey + 6, basex);
+
+               for (i = 0; i < 10; i++)
                {
                        int hoge;
                        if (!menu_info[menu][i].cmd) break;
                        menu_name = menu_info[menu][i].name;
-                       for(hoge = 0; ; hoge++)
+                       for (hoge = 0; ; hoge++)
                        {
                                if (!special_menu_info[hoge].name[0]) break;
                                if ((menu != special_menu_info[hoge].window) || (i != special_menu_info[hoge].number)) continue;
-                               switch(special_menu_info[hoge].jouken)
+                               switch (special_menu_info[hoge].jouken)
                                {
                                case MENU_CLASS:
-                                       if (p_ptr->pclass == special_menu_info[hoge].jouken_naiyou) menu_name = special_menu_info[hoge].name;
+                                       if (player_ptr->pclass == special_menu_info[hoge].jouken_naiyou) menu_name = special_menu_info[hoge].name;
                                        break;
                                case MENU_WILD:
-                                       if (!dun_level && !p_ptr->inside_arena && !p_ptr->inside_quest)
+                                       if (!floor_ptr->dun_level && !floor_ptr->inside_arena && !floor_ptr->inside_quest)
                                        {
-                                               if ((byte)p_ptr->wild_mode == special_menu_info[hoge].jouken_naiyou) menu_name = special_menu_info[hoge].name;
+                                               if ((byte)player_ptr->wild_mode == special_menu_info[hoge].jouken_naiyou) menu_name = special_menu_info[hoge].name;
                                        }
                                        break;
                                default:
@@ -4191,16 +4243,11 @@ static char inkey_from_menu(void)
                }
                max_num = i;
                kisuu = max_num % 2;
-#ifdef JP
-               put_str("¡Õ",basey + 1 + num / 2, basex + 2 + (num % 2) * 24);
-#else
-               put_str("> ",basey + 1 + num / 2, basex + 2 + (num % 2) * 24);
-#endif
+               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(player_ptr->y, player_ptr->x);
 
-               /* Get a command */
                sub_cmd = inkey();
                if ((sub_cmd == ' ') || (sub_cmd == 'x') || (sub_cmd == 'X') || (sub_cmd == '\r') || (sub_cmd == '\n'))
                {
@@ -4279,8 +4326,8 @@ static char inkey_from_menu(void)
 /*
  * Request a command from the user.
  *
- * Sets p_ptr->command_cmd, p_ptr->command_dir, p_ptr->command_rep,
- * p_ptr->command_arg.  May modify p_ptr->command_new.
+ * Sets player_ptr->command_cmd, player_ptr->command_dir, player_ptr->command_rep,
+ * player_ptr->command_arg.  May modify player_ptr->command_new.
  *
  * Note that "caret" ("^") is treated specially, and is used to
  * allow manual input of control characters.  This can be used
@@ -4293,16 +4340,16 @@ 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 "player_ptr->command_new" may not work any more.
  */
-void request_command(int shopping)
+void request_command(player_type *player_ptr, int shopping)
 {
        int i;
 
-       char cmd;
+       s16b cmd;
        int mode;
 
-       cptr act;
+       concptr act;
 
 #ifdef JP
        int caretcmd = 0;
@@ -4333,13 +4380,12 @@ void request_command(int shopping)
 
 
        /* Get command */
-       while (1)
+       while (TRUE)
        {
                /* Hack -- auto-commands */
                if (command_new)
                {
-                       /* Flush messages */
-                       msg_print(NULL);
+                       msg_erase();
 
                        /* Use auto-command */
                        cmd = command_new;
@@ -4358,12 +4404,11 @@ void request_command(int shopping)
                        /* Activate "command mode" */
                        inkey_flag = TRUE;
 
-                       /* Get a command */
                        cmd = inkey();
 
                        if (!shopping && command_menu && ((cmd == '\r') || (cmd == '\n') || (cmd == 'x') || (cmd == 'X'))
-                           && !keymap_act[mode][(byte)(cmd)])
-                               cmd = inkey_from_menu();
+                               && !keymap_act[mode][(byte)(cmd)])
+                               cmd = inkey_from_menu(player_ptr);
                }
 
                /* Clear top line */
@@ -4373,21 +4418,16 @@ 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;
 
                        /* Begin the input */
-#ifdef JP
-                       prt("²ó¿ô: ", 0, 0);
-#else
-                       prt("Count: ", 0, 0);
-#endif
-
+                       prt(_("回数: ", "Count: "), 0, 0);
 
                        /* Get a command count */
-                       while (1)
+                       while (TRUE)
                        {
                                /* Get a new keypress */
                                cmd = inkey();
@@ -4399,12 +4439,7 @@ void request_command(int shopping)
                                        command_arg = command_arg / 10;
 
                                        /* Show current count */
-#ifdef JP
-                                       prt(format("²ó¿ô: %d", command_arg), 0, 0);
-#else
-                                       prt(format("Count: %d", command_arg), 0, 0);
-#endif
-
+                                       prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0);
                                }
 
                                /* Actual numeric data */
@@ -4428,12 +4463,7 @@ void request_command(int shopping)
                                        }
 
                                        /* Show current count */
-#ifdef JP
-                                       prt(format("²ó¿ô: %d", command_arg), 0, 0);
-#else
-                                       prt(format("Count: %d", command_arg), 0, 0);
-#endif
-
+                                       prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0);
                                }
 
                                /* Exit on "unusable" input */
@@ -4450,12 +4480,7 @@ void request_command(int shopping)
                                command_arg = 99;
 
                                /* Show current count */
-#ifdef JP
-                               prt(format("²ó¿ô: %d", command_arg), 0, 0);
-#else
-                               prt(format("Count: %d", command_arg), 0, 0);
-#endif
-
+                               prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0);
                        }
 
                        /* Hack -- Handle "old_arg" */
@@ -4465,29 +4490,17 @@ void request_command(int shopping)
                                command_arg = old_arg;
 
                                /* Show current count */
-#ifdef JP
-prt(format("²ó¿ô: %d", command_arg), 0, 0);
-#else
-                               prt(format("Count: %d", command_arg), 0, 0);
-#endif
-
+                               prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0);
                        }
 
                        /* Hack -- white-space means "enter command now" */
                        if ((cmd == ' ') || (cmd == '\n') || (cmd == '\r'))
                        {
                                /* Get a real command */
-#ifdef JP
-                               if (!get_com("¥³¥Þ¥ó¥É: ", (char *)&cmd, FALSE))
-#else
-                               if (!get_com("Command: ", (char *)&cmd, FALSE))
-#endif
-
+                               if (!get_com(_("コマンド: ", "Command: "), (char *)&cmd, FALSE))
                                {
                                        /* Clear count */
                                        command_arg = 0;
-
-                                       /* Continue */
                                        continue;
                                }
                        }
@@ -4498,12 +4511,7 @@ prt(format("
                if (cmd == '\\')
                {
                        /* Get a real command */
-#ifdef JP
-                       (void)get_com("¥³¥Þ¥ó¥É: ", (char *)&cmd, FALSE);
-#else
-                       (void)get_com("Command: ", (char *)&cmd, FALSE);
-#endif
-
+                       (void)get_com(_("コマンド: ", "Command: "), (char *)&cmd, FALSE);
 
                        /* Hack -- bypass keymaps */
                        if (!inkey_next) inkey_next = "";
@@ -4514,12 +4522,7 @@ prt(format("
                if (cmd == '^')
                {
                        /* Get a new command and controlify it */
-#ifdef JP
-                       if (get_com("CTRL: ", (char *)&cmd, FALSE)) cmd = KTRL(cmd);
-#else
-                       if (get_com("Control: ", (char *)&cmd, FALSE)) cmd = KTRL(cmd);
-#endif
-
+                       if (get_com(_("CTRL: ", "Control: "), (char *)&cmd, FALSE)) cmd = KTRL(cmd);
                }
 
 
@@ -4534,20 +4537,15 @@ prt(format("
 
                        /* Start using the buffer */
                        inkey_next = request_command_buffer;
-
-                       /* Continue */
                        continue;
                }
 
-
-               /* Paranoia */
                if (!cmd) continue;
 
 
                /* Use command */
                command_cmd = (byte)cmd;
 
-               /* Done */
                break;
        }
 
@@ -4555,7 +4553,7 @@ prt(format("
        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;
@@ -4582,10 +4580,10 @@ prt(format("
 #ifdef JP
        for (i = 0; i < 256; i++)
        {
-               cptr s;
+               concptr s;
                if ((s = keymap_act[mode][i]) != NULL)
                {
-                       if (*s == command_cmd && *(s+1) == 0)
+                       if (*s == command_cmd && *(s + 1) == 0)
                        {
                                caretcmd = i;
                                break;
@@ -4599,11 +4597,9 @@ prt(format("
        /* Hack -- Scan equipment */
        for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
        {
-               cptr s;
+               concptr s;
 
-               object_type *o_ptr = &inventory[i];
-
-               /* Skip non-objects */
+               object_type *o_ptr = &player_ptr->inventory_list[i];
                if (!o_ptr->k_idx) continue;
 
                /* No inscription */
@@ -4627,12 +4623,7 @@ prt(format("
 
                        {
                                /* Hack -- Verify command */
-#ifdef JP
-                               if (!get_check("ËÜÅö¤Ç¤¹¤«? "))
-#else
-                               if (!get_check("Are you sure? "))
-#endif
-
+                               if (!get_check(_("本当ですか? ", "Are you sure? ")))
                                {
                                        /* Hack -- Use space */
                                        command_cmd = ' ';
@@ -4668,72 +4659,13 @@ bool is_a_vowel(int ch)
        case 'I':
        case 'O':
        case 'U':
-               return (TRUE);
-       }
-
-       return (FALSE);
-}
-
-
-
-#if 0
-
-/*
- * Replace the first instance of "target" in "buf" with "insert"
- * If "insert" is NULL, just remove the first instance of "target"
- * In either case, return TRUE if "target" is found.
- *
- * XXX Could be made more efficient, especially in the
- * case where "insert" is smaller than "target".
- */
-static bool insert_str(char *buf, cptr target, cptr insert)
-{
-       int   i, len;
-       int                b_len, t_len, i_len;
-
-       /* Attempt to find the target (modify "buf") */
-       buf = my_strstr(buf, target);
-
-       /* No target found */
-       if (!buf) return (FALSE);
-
-       /* Be sure we have an insertion string */
-       if (!insert) insert = "";
-
-       /* Extract some lengths */
-       t_len = strlen(target);
-       i_len = strlen(insert);
-       b_len = strlen(buf);
-
-       /* How much "movement" do we need? */
-       len = i_len - t_len;
-
-       /* We need less space (for insert) */
-       if (len < 0)
-       {
-               for (i = t_len; i < b_len; ++i) buf[i+len] = buf[i];
-       }
-
-       /* We need more space (for insert) */
-       else if (len > 0)
-       {
-               for (i = b_len-1; i >= t_len; --i) buf[i+len] = buf[i];
+               return TRUE;
        }
 
-       /* If movement occured, we need a new terminator */
-       if (len) buf[b_len+len] = '\0';
-
-       /* Now copy the insertion string */
-       for (i = 0; i < i_len; ++i) buf[i] = insert[i];
-
-       /* Successful operation */
-       return (TRUE);
+       return FALSE;
 }
 
 
-#endif
-
-
 /*
  * GH
  * Called from cmd4.c and a few other places. Just extracts
@@ -4753,8 +4685,8 @@ int get_keymap_dir(char ch)
        }
        else
        {
-               int mode;
-               cptr act, s;
+               BIT_FLAGS mode;
+               concptr act, s;
 
                /* Roguelike */
                if (rogue_like_commands)
@@ -4782,8 +4714,6 @@ int get_keymap_dir(char ch)
                        }
                }
        }
-
-       /* Paranoia */
        if (d == 5) d = 0;
 
        /* Return direction */
@@ -4791,8 +4721,6 @@ int get_keymap_dir(char ch)
 }
 
 
-#ifdef ALLOW_REPEAT /* TNB */
-
 #define REPEAT_MAX             20
 
 /* Number of chars saved */
@@ -4802,10 +4730,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;
@@ -4818,21 +4746,21 @@ 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);
+       if (repeat__idx == repeat__cnt) return FALSE;
 
        /* Grab the next key, advance */
        *what = repeat__key[repeat__idx++];
 
        /* Success */
-       return (TRUE);
+       return TRUE;
 }
 
 void repeat_check(void)
 {
-       int             what;
+       COMMAND_CODE what;
 
        /* Ignore some commands */
        if (command_cmd == ESCAPE) return;
@@ -4868,10 +4796,6 @@ void repeat_check(void)
        }
 }
 
-#endif /* ALLOW_REPEAT -- TNB */
-
-
-#ifdef SORT_R_INFO
 
 /*
  * Array size for which InsertionSort
@@ -4880,11 +4804,11 @@ void repeat_check(void)
 #define CUTOFF 4
 
 
-/*
- * Exchange two sort-entries
- * (should probably be coded inline
- * for speed increase)
- */
+ /*
 * Exchange two sort-entries
 * (should probably be coded inline
 * for speed increase)
 */
 static void swap(tag_type *a, tag_type *b)
 {
        tag_type temp;
@@ -4955,7 +4879,7 @@ static void quicksort(tag_type elements[], int left, int right)
        {
                pivot = median3(elements, left, right);
 
-               i = left; j = right -1;
+               i = left; j = right - 1;
 
                while (TRUE)
                {
@@ -4993,10 +4917,6 @@ void tag_sort(tag_type elements[], int number)
        quicksort(elements, 0, number - 1);
 }
 
-#endif /* SORT_R_INFO */
-
-#ifdef SUPPORT_GAMMA
-
 /* Table of gamma values */
 byte gamma_table[256];
 
@@ -5022,49 +4942,49 @@ static s16b gamma_helper[256] =
 };
 
 
-/* 
+/*
  * Build the gamma table so that floating point isn't needed.
- * 
+ *
  * Note gamma goes from 0->256.  The old value of 100 is now 128.
  */
 void build_gamma_table(int gamma)
 {
        int i, n;
-       
+
        /*
         * value is the current sum.
         * diff is the new term to add to the series.
         */
        long value, diff;
-       
+
        /* Hack - convergence is bad in these cases. */
        gamma_table[0] = 0;
        gamma_table[255] = 255;
-       
+
        for (i = 1; i < 255; i++)
        {
-               /* 
+               /*
                 * Initialise the Taylor series
                 *
                 * value and diff have been scaled by 256
                 */
-               
+
                n = 1;
                value = 256 * 256;
                diff = ((long)gamma_helper[i]) * (gamma - 256);
-               
+
                while (diff)
                {
                        value += diff;
                        n++;
-                       
-                       
+
+
                        /*
                         * Use the following identiy to calculate the gamma table.
                         * exp(x) = 1 + x + x^2/2 + x^3/(2*3) + x^4/(2*3*4) +...
                         *
                         * n is the current term number.
-                        * 
+                        *
                         * The gamma_helper array contains a table of
                         * ln(x/256) * 256
                         * This is used because a^b = exp(b*ln(a))
@@ -5081,8 +5001,8 @@ void build_gamma_table(int gamma)
                         */
                        diff = (((diff / 256) * gamma_helper[i]) * (gamma - 256)) / (256 * n);
                }
-               
-               /* 
+
+               /*
                 * Store the value in the table so that the
                 * floating point pow function isn't needed .
                 */
@@ -5090,8 +5010,6 @@ void build_gamma_table(int gamma)
        }
 }
 
-#endif /* SUPPORT_GAMMA */
-
 
 /*
  * Add a series of keypresses to the "queue".
@@ -5103,10 +5021,10 @@ void build_gamma_table(int gamma)
  *
  * NB: The keys added here will be interpreted by any macros or keymaps.
  */
-errr type_string(cptr str, uint len)
+errr type_string(concptr str, uint len)
 {
        errr err = 0;
-       cptr s;
+       concptr s;
 
        term *old = Term;
 
@@ -5119,7 +5037,7 @@ errr type_string(cptr str, uint len)
        /* Activate the main window, as all pastes go there. */
        Term_activate(term_screen);
 
-       for (s = str; s < str+len; s++)
+       for (s = str; s < str + len; s++)
        {
                /* Catch end of string */
                if (*s == '\0') break;
@@ -5138,7 +5056,7 @@ errr type_string(cptr str, uint len)
 
 
 
-void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize)
+void roff_to_buf(concptr str, int maxlen, char *tbuf, size_t bufsize)
 {
        int read_pt = 0;
        int write_pt = 0;
@@ -5159,17 +5077,17 @@ void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize)
                ch[0] = str[read_pt];
                ch[1] = '\0';
 #ifdef JP
-               kanji  = iskanji(ch[0]);
+               kanji = iskanji(ch[0]);
 
                if (kanji)
                {
-                       ch[1] = str[read_pt+1];
+                       ch[1] = str[read_pt + 1];
                        ch_len = 2;
 
-                       if (strcmp(ch, "¡£") == 0 ||
-                           strcmp(ch, "¡¢") == 0 ||
-                           strcmp(ch, "¥£") == 0 ||
-                           strcmp(ch, "¡¼") == 0)
+                       if (strcmp(ch, "") == 0 ||
+                               strcmp(ch, "、") == 0 ||
+                               strcmp(ch, "ã\82£") == 0 ||
+                               strcmp(ch, "ã\83¼") == 0)
                                kinsoku = TRUE;
                }
                else if (!isprint(ch[0]))
@@ -5188,18 +5106,18 @@ void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize)
                        word_len = read_pt - word_punct;
 #ifdef JP
                        if (kanji && !kinsoku)
-                               /* nothing */ ;
+                               /* nothing */;
                        else
 #endif
-                       if (ch[0] == ' ' || word_len >= line_len/2)
-                               read_pt++;
-                       else
-                       {
-                               read_pt = word_punct;
-                               if (str[word_punct] == ' ')
+                               if (ch[0] == ' ' || word_len >= line_len / 2)
                                        read_pt++;
-                               write_pt -= word_len;
-                       }
+                               else
+                               {
+                                       read_pt = word_punct;
+                                       if (str[word_punct] == ' ')
+                                               read_pt++;
+                                       write_pt -= word_len;
+                               }
 
                        tbuf[write_pt++] = '\0';
                        line_len = 0;
@@ -5228,7 +5146,7 @@ void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize)
 #endif
        }
        tbuf[write_pt] = '\0';
-       tbuf[write_pt+1] = '\0';
+       tbuf[write_pt + 1] = '\0';
 
        return;
 }
@@ -5244,12 +5162,12 @@ void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize)
  *
  * This function should be equivalent to the strlcpy() function in BSD.
  */
-size_t my_strcpy(char *buf, const char *src, size_t bufsize)
+size_t my_strcpy(char *buf, concptr src, size_t bufsize)
 {
 #ifdef JP
 
        char *d = buf;
-       const char *s = src;
+       concptr s = src;
        size_t len = 0;
 
        if (bufsize > 0) {
@@ -5261,7 +5179,7 @@ size_t my_strcpy(char *buf, const char *src, size_t bufsize)
                {
                        if (iskanji(*s))
                        {
-                               if (len + 1 >= bufsize || !*(s+1)) break;
+                               if (len + 1 >= bufsize || !*(s + 1)) break;
                                *d++ = *s++;
                                *d++ = *s++;
                                len += 2;
@@ -5275,7 +5193,7 @@ size_t my_strcpy(char *buf, const char *src, size_t bufsize)
                *d = '\0';
        }
 
-       while(*s++) len++;
+       while (*s++) len++;
 
        return len;
 
@@ -5283,8 +5201,6 @@ size_t my_strcpy(char *buf, const char *src, size_t bufsize)
 
        size_t len = strlen(src);
        size_t ret = len;
-
-       /* Paranoia */
        if (bufsize == 0) return ret;
 
        /* Truncate */
@@ -5312,7 +5228,7 @@ size_t my_strcpy(char *buf, const char *src, size_t bufsize)
  *
  * This function should be equivalent to the strlcat() function in BSD.
  */
-size_t my_strcat(char *buf, const char *src, size_t bufsize)
+size_t my_strcat(char *buf, concptr src, size_t bufsize)
 {
        size_t dlen = strlen(buf);
 
@@ -5335,7 +5251,7 @@ size_t my_strcat(char *buf, const char *src, size_t bufsize)
  *
  * my_strstr() can handle Kanji strings correctly.
  */
-char *my_strstr(const char *haystack, const char *needle)
+char *my_strstr(concptr haystack, concptr needle)
 {
        int i;
        int l1 = strlen(haystack);
@@ -5343,9 +5259,9 @@ char *my_strstr(const char *haystack, const char *needle)
 
        if (l1 >= l2)
        {
-               for(i = 0; i <= l1 - l2; i++)
+               for (i = 0; i <= l1 - l2; i++)
                {
-                       if(!strncmp(haystack + i, needle, l2))
+                       if (!strncmp(haystack + i, needle, l2))
                                return (char *)haystack + i;
 
 #ifdef JP
@@ -5363,9 +5279,9 @@ char *my_strstr(const char *haystack, const char *needle)
  *
  * my_strchr() can handle Kanji strings correctly.
  */
-char *my_strchr(const char *ptr, char ch)
+char *my_strchr(concptr ptr, char ch)
 {
-       for ( ; *ptr != '\0'; ptr++)
+       for (; *ptr != '\0'; ptr++)
        {
                if (*ptr == ch) return (char *)ptr;
 
@@ -5393,7 +5309,7 @@ void str_tolower(char *str)
                        continue;
                }
 #endif
-               *str = tolower(*str);
+               *str = (char)tolower(*str);
        }
 }
 
@@ -5408,7 +5324,7 @@ void str_tolower(char *str)
 int inkey_special(bool numpad_cursor)
 {
        static const struct {
-               cptr keyname;
+               concptr keyname;
                int keyflag;
        } modifier_key_list[] = {
                {"shift-", SKEY_MOD_SHIFT},
@@ -5418,7 +5334,7 @@ int inkey_special(bool numpad_cursor)
 
        static const struct {
                bool numpad;
-               cptr keyname;
+               concptr keyname;
                int keycode;
        } special_key_list[] = {
                {FALSE, "Down]", SKEY_DOWN},
@@ -5449,7 +5365,7 @@ int inkey_special(bool numpad_cursor)
        };
 
        static const struct {
-               cptr keyname;
+               concptr keyname;
                int keycode;
        } gcu_special_key_list[] = {
                {"A", SKEY_UP},
@@ -5464,7 +5380,7 @@ int inkey_special(bool numpad_cursor)
        };
 
        char buf[1024];
-       cptr str = buf;
+       concptr str = buf;
        char key;
        int skey = 0;
        int modifier = 0;
@@ -5533,7 +5449,7 @@ int inkey_special(bool numpad_cursor)
                for (i = 0; special_key_list[i].keyname; i++)
                {
                        if ((!special_key_list[i].numpad || numpad_cursor) &&
-                           streq(str, special_key_list[i].keyname))
+                               streq(str, special_key_list[i].keyname))
                        {
                                skey = special_key_list[i].keycode;
                                break;
@@ -5572,3 +5488,4 @@ int inkey_special(bool numpad_cursor)
        /* Return normal keycode */
        return (int)((unsigned char)key);
 }
+