OSDN Git Service

Add Doxygen comment to wizard1.c.
[hengband/hengband.git] / src / wizard1.c
index 194284a..fc987c4 100644 (file)
@@ -1,15 +1,15 @@
-/* File: wizard1.c */
-
-/*
+/*!
+ *  @file wizard1.c
+ *  @brief ¥¦¥£¥¶¡¼¥É¥â¡¼¥É¤Î½èÍý(¥¹¥Ý¥¤¥é¡¼½ÐÎÏÃæ¿´) / Spoiler generation -BEN-
+ *  @date 2014/02/17
+ *  @author
  * Copyright (c) 1997 Ben Harrison, and others
- *
  * This software may be copied and distributed for educational, research,
  * and not for profit purposes provided that this copyright and statement
  * are included in all such copies.  Other copyrights may also apply.
+ * 2013 Deskull rearranged comment for Doxygen.
  */
 
-/* Purpose: Spoiler generation -BEN- */
-
 #include "angband.h"
 
 
@@ -23,58 +23,69 @@ static FILE *fff = NULL;
 
 
 
-/*
+/*!
+ * @brief ¥·¥ó¥Ü¥ë¿¦¤Îµ­½Ò̾¤òÊÖ¤¹ /
  * Extract a textual representation of an attribute
+ * @param r_ptr ¥â¥ó¥¹¥¿¡¼¼ï²¤Î¹½Â¤ÂΥݥ¤¥ó¥¿
+ * @return ¥·¥ó¥Ü¥ë¿¦¤Îµ­½Ò̾
  */
-static cptr attr_to_text(byte a)
+static cptr attr_to_text(monster_race *r_ptr)
 {
-       switch (a)
-       {
 #ifdef JP000
-case TERM_DARK:    return ("XXX¤¤");
-case TERM_WHITE:   return ("Çò¤¤");
-case TERM_SLATE:   return ("Àij¥¿§¤Î");
-case TERM_ORANGE:  return ("¥ª¥ì¥ó¥¸¤Î");
-case TERM_RED:     return ("ÀÖ¤¤");
-case TERM_GREEN:   return ("ÎФÎ");
-case TERM_BLUE:    return ("ÀĤ¤");
-case TERM_UMBER:   return ("àèàῧ¤Î");
-case TERM_L_DARK:  return ("³¥¿§¤Î");
-case TERM_L_WHITE: return ("ÌÀÀij¥¿§¤Î");
-case TERM_VIOLET:  return ("»ç¤Î");
-case TERM_YELLOW:  return ("²«¿§¤¤");
-case TERM_L_RED:   return ("ÌÀ¤¤ÀÖ¤Î");
-case TERM_L_GREEN: return ("ÌÀ¤¤ÎФÎ");
-case TERM_L_BLUE:  return ("ÌÀ¤¤ÀĤÎ");
-case TERM_L_UMBER: return ("ÌÀ¤¤àèàῧ¤Î");
+       if (r_ptr->flags1 & RF1_ATTR_CLEAR)    return "Æ©ÌÀ¤Ê";
+       if (r_ptr->flags1 & RF1_ATTR_MULTI)    return "Ëü¿§¤Î";
+       if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "½à¥é¥ó¥À¥à¤Ê";
 #else
-               case TERM_DARK:    return ("xxx");
-               case TERM_WHITE:   return ("White");
-               case TERM_SLATE:   return ("Slate");
-               case TERM_ORANGE:  return ("Orange");
-               case TERM_RED:     return ("Red");
-               case TERM_GREEN:   return ("Green");
-               case TERM_BLUE:    return ("Blue");
-               case TERM_UMBER:   return ("Umber");
-               case TERM_L_DARK:  return ("L.Dark");
-               case TERM_L_WHITE: return ("L.Slate");
-               case TERM_VIOLET:  return ("Violet");
-               case TERM_YELLOW:  return ("Yellow");
-               case TERM_L_RED:   return ("L.Red");
-               case TERM_L_GREEN: return ("L.Green");
-               case TERM_L_BLUE:  return ("L.Blue");
-               case TERM_L_UMBER: return ("L.Umber");
+       if (r_ptr->flags1 & RF1_ATTR_CLEAR)    return "Clear";
+       if (r_ptr->flags1 & RF1_ATTR_MULTI)    return "Multi";
+       if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "S.Rand";
 #endif
 
+       switch (r_ptr->d_attr)
+       {
+#ifdef JP000
+       case TERM_DARK:    return "XXX¤¤";
+       case TERM_WHITE:   return "Çò¤¤";
+       case TERM_SLATE:   return "Àij¥¿§¤Î";
+       case TERM_ORANGE:  return "¥ª¥ì¥ó¥¸¤Î";
+       case TERM_RED:     return "ÀÖ¤¤";
+       case TERM_GREEN:   return "ÎФÎ";
+       case TERM_BLUE:    return "ÀĤ¤";
+       case TERM_UMBER:   return "àèàῧ¤Î";
+       case TERM_L_DARK:  return "³¥¿§¤Î";
+       case TERM_L_WHITE: return "ÌÀÀij¥¿§¤Î";
+       case TERM_VIOLET:  return "»ç¤Î";
+       case TERM_YELLOW:  return "²«¿§¤¤";
+       case TERM_L_RED:   return "ÌÀ¤¤ÀÖ¤Î";
+       case TERM_L_GREEN: return "ÌÀ¤¤ÎФÎ";
+       case TERM_L_BLUE:  return "ÌÀ¤¤ÀĤÎ";
+       case TERM_L_UMBER: return "ÌÀ¤¤àèàῧ¤Î";
+#else
+       case TERM_DARK:    return "xxx";
+       case TERM_WHITE:   return "White";
+       case TERM_SLATE:   return "Slate";
+       case TERM_ORANGE:  return "Orange";
+       case TERM_RED:     return "Red";
+       case TERM_GREEN:   return "Green";
+       case TERM_BLUE:    return "Blue";
+       case TERM_UMBER:   return "Umber";
+       case TERM_L_DARK:  return "L.Dark";
+       case TERM_L_WHITE: return "L.Slate";
+       case TERM_VIOLET:  return "Violet";
+       case TERM_YELLOW:  return "Yellow";
+       case TERM_L_RED:   return "L.Red";
+       case TERM_L_GREEN: return "L.Green";
+       case TERM_L_BLUE:  return "L.Blue";
+       case TERM_L_UMBER: return "L.Umber";
+#endif
        }
 
        /* Oops */
 #ifdef JP000
-return ("ÊѤÊ");
+       return "ÊѤÊ";
 #else
-       return ("Icky");
+       return "Icky";
 #endif
-
 }
 
 
@@ -189,6 +200,7 @@ static grouper group_item[] =
        { TV_CRUSADE_BOOK,  "ËâË¡½ñ (Ç˼Ù)" },
        { TV_MUSIC_BOOK,    "²Î½¸" },
        { TV_HISSATSU_BOOK, "Éð·Ý¤Î½ñ" },
+       { TV_HEX_BOOK,      "ËâË¡½ñ (¼ö½Ñ)" },
 #else
        { TV_LIFE_BOOK,     "Books (Life)" },
        { TV_SORCERY_BOOK,  "Books (Sorcery)" },
@@ -202,6 +214,7 @@ static grouper group_item[] =
        { TV_CRUSADE_BOOK,  "Books (Crusade)" },
        { TV_MUSIC_BOOK,    "Song Books" },
        { TV_HISSATSU_BOOK, "Books (Kendo)" },
+       { TV_HEX_BOOK,      "Books (Hex)" },
 #endif
 
 #ifdef JP
@@ -246,8 +259,16 @@ static grouper group_item[] =
 };
 
 
-/*
+/*!
+ * @brief ¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î³Æ¾ðÊó¤òʸ»úÎ󲽤¹¤ë /
  * Describe the kind
+ * @param buf Ì¾¾Î¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param dam ¥À¥á¡¼¥¸¥À¥¤¥¹µ­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param wgt ½ÅÎ̵­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param lev À¸À®³¬µ­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param val ²ÁÃͤòÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param k ¥Ù¡¼¥¹¥¢¥¤¥Æ¥àID
+ * @return ¤Ê¤·
  */
 static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int k)
 {
@@ -339,8 +360,11 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int
 }
 
 
-/*
+/*!
+ * @brief ³Æ¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î¾ðÊó¤ò°ì¹ÔËè¤Ëµ­½Ò¤¹¤ë /
  * Create a spoiler file for items
+ * @param fname ¥Õ¥¡¥¤¥ë̾
+ * @return ¤Ê¤·
  */
 static void spoil_obj_desc(cptr fname)
 {
@@ -513,6 +537,7 @@ static grouper group_artifact[] =
        { TV_DIGGING,           "¥·¥ã¥Ù¥ë/¤Ä¤ë¤Ï¤·" },
        { TV_BOW,               "Èô¤ÓÆ»¶ñ" },
        { TV_ARROW,             "Ìð" },
+       { TV_BOLT,              NULL },
 
        { TV_SOFT_ARMOR,        "³»" },
        { TV_HARD_ARMOR,        NULL },
@@ -536,6 +561,7 @@ static grouper group_artifact[] =
        { TV_DIGGING,           "Shovels/Picks" },
        { TV_BOW,               "Bows" },
        { TV_ARROW,             "Ammo" },
+       { TV_BOLT,              NULL },
 
        { TV_SOFT_ARMOR,        "Body Armor" },
        { TV_HARD_ARMOR,        NULL },
@@ -809,12 +835,12 @@ static const flag_desc misc_flags2_desc[] =
        { TR_THROW,      "ÅêÚ³" },
        { TR_REFLECT,    "È¿¼Í" },
        { TR_FREE_ACT,   "ËãáãÃΤ餺" },
-       { TR_HOLD_LIFE,  "À¸Ì¿ÎÏ°Ý»ý" },
+       { TR_HOLD_EXP,   "·Ð¸³ÃÍ°Ý»ý" },
 #else
        { TR_THROW,      "Throwing" },
        { TR_REFLECT,    "Reflection" },
        { TR_FREE_ACT,   "Free Action" },
-       { TR_HOLD_LIFE,  "Hold Life" },
+       { TR_HOLD_EXP,   "Hold Experience" },
 #endif
 };
 
@@ -833,21 +859,21 @@ static const flag_desc misc_flags3_desc[] =
        { TR_SH_COLD,            "Î䵤¥ª¡¼¥é" },
        { TR_NO_TELE,            "È¿¥Æ¥ì¥Ý¡¼¥È" },
        { TR_NO_MAGIC,           "È¿ËâË¡" },
-       { TR_LEVITATION,            "ÉâÍ·" },
+       { TR_LEVITATION,         "ÉâÍ·" },
        { TR_SEE_INVIS,          "²Ä»ëÆ©ÌÀ" },
        { TR_TELEPATHY,          "¥Æ¥ì¥Ñ¥·¡¼" },
-       { TR_ESP_ANIMAL,             "ưʪ´¶ÃÎ" },
-       { TR_ESP_UNDEAD,             "ÉԻശÃÎ" },
-       { TR_ESP_DEMON,              "°­Ëâ´¶ÃÎ" },
-       { TR_ESP_ORC,                "¥ª¡¼¥¯´¶ÃÎ" },
-       { TR_ESP_TROLL,              "¥È¥í¥ë´¶ÃÎ" },
-       { TR_ESP_GIANT,              "µð¿Í´¶ÃÎ" },
-       { TR_ESP_DRAGON,             "¥É¥é¥´¥ó´¶ÃÎ" },
-       { TR_ESP_HUMAN,              "¿Í´Ö´¶ÃÎ" },
-       { TR_ESP_EVIL,               "¼Ù°­´¶ÃÎ" },
-       { TR_ESP_GOOD,               "Á±ÎÉ´¶ÃÎ" },
-       { TR_ESP_NONLIVING,          "̵À¸Êª´¶ÃÎ" },
-       { TR_ESP_UNIQUE,             "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_ANIMAL,         "ưʪ´¶ÃÎ" },
+       { TR_ESP_UNDEAD,         "ÉԻശÃÎ" },
+       { TR_ESP_DEMON,          "°­Ëâ´¶ÃÎ" },
+       { TR_ESP_ORC,            "¥ª¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_TROLL,          "¥È¥í¥ë´¶ÃÎ" },
+       { TR_ESP_GIANT,          "µð¿Í´¶ÃÎ" },
+       { TR_ESP_DRAGON,         "¥É¥é¥´¥ó´¶ÃÎ" },
+       { TR_ESP_HUMAN,          "¿Í´Ö´¶ÃÎ" },
+       { TR_ESP_EVIL,           "¼Ù°­´¶ÃÎ" },
+       { TR_ESP_GOOD,           "Á±ÎÉ´¶ÃÎ" },
+       { TR_ESP_NONLIVING,      "̵À¸Êª´¶ÃÎ" },
+       { TR_ESP_UNIQUE,         "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
        { TR_SLOW_DIGEST,        "Ãپò½" },
        { TR_REGEN,              "µÞ®²óÉü" },
        { TR_WARNING,            "·Ù¹ð" },
@@ -866,6 +892,18 @@ static const flag_desc misc_flags3_desc[] =
        { TR_LEVITATION,            "Levitation" },
        { TR_SEE_INVIS,          "See Invisible" },
        { TR_TELEPATHY,          "ESP" },
+       { TR_ESP_ANIMAL,         "Sense Animal" },
+       { TR_ESP_UNDEAD,         "Sense Undead" },
+       { TR_ESP_DEMON,          "Sense Demon" },
+       { TR_ESP_ORC,            "Sense Orc" },
+       { TR_ESP_TROLL,          "Sense Troll" },
+       { TR_ESP_GIANT,          "Sense Giant" },
+       { TR_ESP_DRAGON,         "Sense Dragon" },
+       { TR_ESP_HUMAN,          "Sense Human" },
+       { TR_ESP_EVIL,           "Sense Evil" },
+       { TR_ESP_GOOD,           "Sense Good" },
+       { TR_ESP_NONLIVING,      "Sense Nonliving" },
+       { TR_ESP_UNIQUE,         "Sense Unique" },
        { TR_SLOW_DIGEST,        "Slow Digestion" },
        { TR_REGEN,              "Regeneration" },
        { TR_WARNING,            "Warning" },
@@ -1184,6 +1222,8 @@ static void analyze_sustains(object_type *o_ptr, cptr *sustain_list)
 static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
 {
        u32b flgs[TR_FLAG_SIZE];
+       int rad;
+       char desc[256];
 
        object_flags(o_ptr, flgs);
 
@@ -1194,29 +1234,30 @@ static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
                                     N_ELEMENTS(misc_flags3_desc));
 
        /*
-        * Artifact lights -- large radius light.
-        */
-       if ((o_ptr->tval == TV_LITE) && object_is_fixed_artifact(o_ptr))
+        * Glowing artifacts -- small radius light.
+       */      
+       rad = 0;
+       if (have_flag(flgs, TR_LITE_1))  rad += 1;
+       if (have_flag(flgs, TR_LITE_2))  rad += 2;
+       if (have_flag(flgs, TR_LITE_3))  rad += 3;
+       if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
+       if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
+       if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
+       
+       if(o_ptr->name2 == EGO_LITE_SHINE) rad++;
+
+       if (have_flag(flgs, TR_LITE_FUEL))
        {
-#ifdef JP
-               *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â3)";
-#else
-               *misc_list++ = "Permanent Light(3)";
-#endif
+               if(rad > 0) sprintf(desc, _("¤½¤ì¤ÏdzÎÁÊäµë¤Ë¤è¤Ã¤ÆÌÀ¤«¤ê(Ⱦ·Â %d)¤ò¼ø¤±¤ë¡£", "It provides light (radius %d) when fueled."), rad);     
        }
-
-       /*
-        * Glowing artifacts -- small radius light.
-        */
-       if (have_flag(flgs, TR_LITE))
+       else
        {
-#ifdef JP
-               *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â1)";
-#else
-               *misc_list++ = "Permanent Light(1)";
-#endif
+               if(rad > 0) sprintf(desc, _("±Êµ×¸÷¸»(Ⱦ·Â %d)", "Permanent Light(radius %d)"), rad);   
+               if(rad < 0) sprintf(desc, _("±Êµ×¸÷¸»(Ⱦ·Â-%d)¡£", "Permanent Light(radius -%d)"), -rad);
        }
 
+       if(rad != 0) *misc_list++ = quark_str(quark_add(desc));
+
        /*
         * Handle cursed objects here to avoid redundancies such as noting
         * that a permanently cursed object is heavily cursed as well as
@@ -1227,36 +1268,28 @@ static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
        {
                if (have_flag(flgs, TR_TY_CURSE))
                {
-#ifdef JP
-                       *misc_list++ = "ÂÀ¸Å¤Î±åÇ°";
-#else
-                       *misc_list++ = "Ancient Curse";
-#endif
+                       *misc_list++ = _("ÂÀ¸Å¤Î±åÇ°", "Ancient Curse");
                }
                if (o_ptr->curse_flags & TRC_PERMA_CURSE)
                {
-#ifdef JP
-                       *misc_list++ = "±Ê±ó¤Î¼ö¤¤";
-#else
-                       *misc_list++ = "Permanently Cursed";
-#endif
+                       *misc_list++ = _("±Ê±ó¤Î¼ö¤¤", "Permanently Cursed");
                }
                else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
                {
-#ifdef JP
-                       *misc_list++ = "¶¯ÎϤʼö¤¤";
-#else
-                       *misc_list++ = "Heavily Cursed";
-#endif
+                       *misc_list++ = _("¶¯ÎϤʼö¤¤", "Heavily Cursed");
                }
 /*             else */
                else if (o_ptr->curse_flags & TRC_CURSED)
                {
-#ifdef JP
-                       *misc_list++ = "¼ö¤¤";
-#else
-                       *misc_list++ = "Cursed";
-#endif
+                       *misc_list++ = _("¼ö¤¤", "Cursed");
+               }
+               if (have_flag(flgs, TR_ADD_L_CURSE))
+               {
+                       *misc_list++ = _("¼ö¤¤¤òÁý¤ä¤¹", "Cursing");
+               }
+               if (have_flag(flgs, TR_ADD_H_CURSE))
+               {
+                       *misc_list++ = _("¶¯ÎϤʼö¤¤¤òÁý¤ä¤¹", "Heavily Cursing");
                }
        }
 
@@ -1316,7 +1349,7 @@ static void analyze_misc(object_type *o_ptr, char *misc_desc)
 #ifdef JP
        sprintf(misc_desc, "¥ì¥Ù¥ë %u, ´õ¾¯ÅÙ %u, %d.%d kg, ¡ð%ld",
                a_ptr->level, a_ptr->rarity,
-               lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), a_ptr->cost);
+               lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), (long int)a_ptr->cost);
 #else
        sprintf(misc_desc, "Level %u, Rarity %u, %d.%d lbs, %ld Gold",
                a_ptr->level, a_ptr->rarity,
@@ -1806,7 +1839,7 @@ static void spoil_mon_desc(cptr fname)
                sprintf(exp, "%ld", (long)(r_ptr->mexp));
 
                /* Hack -- use visual instead */
-               sprintf(exp, "%s '%c'", attr_to_text(r_ptr->d_attr), r_ptr->d_char);
+               sprintf(exp, "%s '%c'", attr_to_text(r_ptr), r_ptr->d_char);
 
                /* Dump the info */
                fprintf(fff, "%-42.42s%4s%4s%4s%7s%5s  %11.11s\n",
@@ -1853,8 +1886,11 @@ static void spoil_out(cptr str)
        /* Line buffer */
        static char roff_buf[256];
 
+       /* Delay buffer */
+       static char roff_waiting_buf[256];
+
 #ifdef JP
-       char iskanji2=0;
+       bool iskanji_flag = FALSE;
 #endif
        /* Current pointer into line roff_buf */
        static char *roff_p = roff_buf;
@@ -1862,17 +1898,28 @@ static void spoil_out(cptr str)
        /* Last space saved into roff_buf */
        static char *roff_s = NULL;
 
+       /* Mega-Hack -- Delayed output */
+       static bool waiting_output = FALSE;
+
        /* Special handling for "new sequence" */
        if (!str)
        {
+               if (waiting_output)
+               {
+                       fputs(roff_waiting_buf, fff);
+                       waiting_output = FALSE;
+               }
+
                if (roff_p != roff_buf) roff_p--;
                while (*roff_p == ' ' && roff_p != roff_buf) roff_p--;
+
                if (roff_p == roff_buf) fprintf(fff, "\n");
                else
                {
                        *(roff_p + 1) = '\0';
                        fprintf(fff, "%s\n\n", roff_buf);
                }
+
                roff_p = roff_buf;
                roff_s = NULL;
                roff_buf[0] = '\0';
@@ -1884,26 +1931,61 @@ static void spoil_out(cptr str)
        {
 #ifdef JP
                char cbak;
-               int k_flag = iskanji((unsigned char)(*str));
+               bool k_flag = iskanji((unsigned char)(*str));
 #endif
                char ch = *str;
-               int wrap = (ch == '\n');
+               bool wrap = (ch == '\n');
 
 #ifdef JP
-               if (!isprint(ch) && !k_flag && !iskanji2) ch = ' ';
-               if(k_flag && !iskanji2)iskanji2=1;else iskanji2=0;
+               if (!isprint(ch) && !k_flag && !iskanji_flag) ch = ' ';
+               iskanji_flag = k_flag && !iskanji_flag;
 #else
                if (!isprint(ch)) ch = ' ';
 #endif
 
+               if (waiting_output)
+               {
+                       fputs(roff_waiting_buf, fff);
+                       if (!wrap) fputc('\n', fff);
+                       waiting_output = FALSE;
+               }
+
+               if (!wrap)
+               {
 #ifdef JP
-               if ( roff_p >= roff_buf+( (k_flag) ? 74 : 75) ) wrap=1;
-               if ((ch == ' ') && (roff_p + 2 >= roff_buf + ((k_flag) ? 74 : 75))) wrap = 1;
+                       if (roff_p >= roff_buf + (k_flag ? 74 : 75)) wrap = TRUE;
+                       else if ((ch == ' ') && (roff_p >= roff_buf + (k_flag ? 72 : 73))) wrap = TRUE;
 #else
-               if (roff_p >= roff_buf + 75) wrap = 1;
-               if ((ch == ' ') && (roff_p + 2 >= roff_buf + 75)) wrap = 1;
+                       if (roff_p >= roff_buf + 75) wrap = TRUE;
+                       else if ((ch == ' ') && (roff_p >= roff_buf + 73)) wrap = TRUE;
 #endif
 
+                       if (wrap)
+                       {
+#ifdef JP
+                               bool k_flag_local;
+                               bool iskanji_flag_local = FALSE;
+                               cptr tail = str + (k_flag ? 2 : 1);
+#else
+                               cptr tail = str + 1;
+#endif
+
+                               for (; *tail; tail++)
+                               {
+                                       if (*tail == ' ') continue;
+
+#ifdef JP
+                                       k_flag_local = iskanji((unsigned char)(*tail));
+                                       if (isprint(*tail) || k_flag_local || iskanji_flag_local) break;
+                                       iskanji_flag_local = k_flag_local && !iskanji_flag_local;
+#else
+                                       if (isprint(*tail)) break;
+#endif
+                               }
+
+                               if (!*tail) waiting_output = TRUE;
+                       }
+               }
 
                /* Handle line-wrap */
                if (wrap)
@@ -1911,21 +1993,22 @@ static void spoil_out(cptr str)
                        *roff_p = '\0';
                        r = roff_p;
 #ifdef JP
-                               cbak=' ';
+                       cbak = ' ';
 #endif
                        if (roff_s && (ch != ' '))
                        {
 #ifdef JP
-                               cbak=*roff_s;
+                               cbak = *roff_s;
 #endif
                                *roff_s = '\0';
                                r = roff_s + 1;
                        }
-                       fprintf(fff, "%s\n", roff_buf);
+                       if (!waiting_output) fprintf(fff, "%s\n", roff_buf);
+                       else strcpy(roff_waiting_buf, roff_buf);
                        roff_s = NULL;
                        roff_p = roff_buf;
 #ifdef JP
-                       if(cbak != ' ') *roff_p++ = cbak; 
+                       if (cbak != ' ') *roff_p++ = cbak;
 #endif
                        while (*r) *roff_p++ = *r++;
                }
@@ -1934,16 +2017,18 @@ static void spoil_out(cptr str)
                if ((roff_p > roff_buf) || (ch != ' '))
                {
 #ifdef JP
-                 if( !k_flag ){
-                       if (ch == ' ' || ch == '(' ) roff_s = roff_p;
-                 }
-                 else{
-                   if( iskanji2 && 
-                       strncmp(str, "¡£", 2) != 0 && 
-                       strncmp(str, "¡¢", 2) != 0 &&
-                       strncmp(str, "¥£", 2) != 0 &&
-                       strncmp(str, "¡¼", 2) != 0) roff_s = roff_p;
-                 }
+                       if (!k_flag)
+                       {
+                               if ((ch == ' ') || (ch == '(')) roff_s = roff_p;
+                       }
+                       else
+                       {
+                               if (iskanji_flag &&
+                                   strncmp(str, "¡£", 2) != 0 &&
+                                   strncmp(str, "¡¢", 2) != 0 &&
+                                   strncmp(str, "¥£", 2) != 0 &&
+                                   strncmp(str, "¡¼", 2) != 0) roff_s = roff_p;
+                       }
 #else
                        if (ch == ' ') roff_s = roff_p;
 #endif
@@ -2062,7 +2147,7 @@ static void spoil_mon_info(cptr fname)
                spoil_out(buf);
 
                /* Color */
-               spoil_out(attr_to_text(r_ptr->d_attr));
+               spoil_out(attr_to_text(r_ptr));
 
                /* Symbol --(-- */
                sprintf(buf, " '%c')\n", r_ptr->d_char);
@@ -2340,7 +2425,7 @@ static void spoil_mon_evol(cptr fname)
 #endif
                for (n = 1; r_ptr->next_exp; n++)
                {
-                       fprintf(fff, "%*s-(%ld)-> ", n * 2, "", r_ptr->next_exp);
+                       fprintf(fff, "%*s-(%ld)-> ", n * 2, "", (long int)r_ptr->next_exp);
                        fprintf(fff, "[%d]: ", r_ptr->next_r_idx);
                        r_ptr = &r_info[r_ptr->next_r_idx];
 #ifdef JP