OSDN Git Service

[Refactor] #39964 Separated autopick-entry.c/h from autopick.c
authorHourier <hourier@users.sourceforge.jp>
Sat, 25 Apr 2020 02:04:24 +0000 (11:04 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 25 Apr 2020 02:04:24 +0000 (11:04 +0900)
Hengband_vcs2017/Hengband/Hengband.vcxproj
Hengband_vcs2017/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/autopick/autopick-entry.c [new file with mode: 0644]
src/autopick/autopick-entry.h [new file with mode: 0644]
src/autopick/autopick.c

index b1ba521..e704c7e 100644 (file)
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\src\artifact.c" />\r
+    <ClCompile Include="..\..\src\autopick\autopick-entry.c" />\r
     <ClCompile Include="..\..\src\autopick\autopick-menu-data-table.c" />\r
     <ClCompile Include="..\..\src\autopick\autopick.c" />\r
     <ClCompile Include="..\..\src\avatar.c" />\r
     <ClInclude Include="..\..\src\autopick\autopick-commands-table.h" />\r
     <ClInclude Include="..\..\src\autopick\autopick-dirty-flags.h" />\r
     <ClInclude Include="..\..\src\autopick\autopick-editor-table.h" />\r
+    <ClInclude Include="..\..\src\autopick\autopick-entry.h" />\r
     <ClInclude Include="..\..\src\autopick\autopick-flags-table.h" />\r
     <ClInclude Include="..\..\src\autopick\autopick-key-flag-process.h" />\r
     <ClInclude Include="..\..\src\autopick\autopick-keys-table.h" />\r
index ad4c73f..d4f720c 100644 (file)
     <ClCompile Include="..\..\src\autopick\autopick-menu-data-table.c">
       <Filter>autopick</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\autopick\autopick-entry.c">
+      <Filter>autopick</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\gamevalue.h" />
     <ClInclude Include="..\..\src\autopick\autopick-methods-table.h">
       <Filter>autopick</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\autopick\autopick-entry.h">
+      <Filter>autopick</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 13a05d6..ac49422 100644 (file)
@@ -15,6 +15,7 @@ hengband_SOURCES = \
        autopick/autopick-key-flag-process.h autopick/autopick-key-table.h \
        autopick/autopick-menu-data-table.c autopick/autopick-menu-data-table.h \
        autopick/autopick-methods-table.h autopick/autopick-util.h \
+       autopick/autopick-entry.c autopick/autopick-entry.h \
        \
        avatar.h avatar.c birth.c birth.h \
        \
diff --git a/src/autopick/autopick-entry.c b/src/autopick/autopick-entry.c
new file mode 100644 (file)
index 0000000..7454647
--- /dev/null
@@ -0,0 +1,455 @@
+#include "angband.h"
+#include "autopick/autopick-util.h"
+#include "autopick/autopick-entry.h"
+#include "autopick/autopick-flags-table.h"
+#include "autopick/autopick-keys-table.h"
+#include "autopick/autopick-methods-table.h"
+#include "autopick/autopick-key-flag-process.h"
+#include "object-ego.h"
+#include "object/object-kind.h"
+#include "object-flavor.h"
+#include "object-hook.h"
+
+#ifdef JP
+static char kanji_colon[] = ":";
+#endif
+
+/*
+ * A function to create new entry
+ */
+bool autopick_new_entry(autopick_type *entry, concptr str, bool allow_default)
+{
+       if (str[0] && str[1] == ':') switch (str[0])
+       {
+       case '?': case '%':
+       case 'A': case 'P': case 'C':
+               return FALSE;
+       }
+
+       entry->flag[0] = entry->flag[1] = 0L;
+       entry->dice = 0;
+       entry->bonus = 0;
+
+       byte act = DO_AUTOPICK | DO_DISPLAY;
+       while (TRUE)
+       {
+               if ((act & DO_AUTOPICK) && *str == '!')
+               {
+                       act &= ~DO_AUTOPICK;
+                       act |= DO_AUTODESTROY;
+                       str++;
+                       continue;
+               }
+
+               if ((act & DO_AUTOPICK) && *str == '~')
+               {
+                       act &= ~DO_AUTOPICK;
+                       act |= DONT_AUTOPICK;
+                       str++;
+                       continue;
+               }
+
+               if ((act & DO_AUTOPICK) && *str == ';')
+               {
+                       act &= ~DO_AUTOPICK;
+                       act |= DO_QUERY_AUTOPICK;
+                       str++;
+                       continue;
+               }
+
+               if ((act & DO_DISPLAY) && *str == '(')
+               {
+                       act &= ~DO_DISPLAY;
+                       str++;
+                       continue;
+               }
+
+               break;
+       }
+
+       concptr insc = NULL;
+       char buf[MAX_LINELEN];
+       int i;
+       for (i = 0; *str; i++)
+       {
+               char c = *str++;
+#ifdef JP
+               if (iskanji(c))
+               {
+                       buf[i++] = c;
+                       buf[i] = *str++;
+                       continue;
+               }
+#endif
+               if (c == '#')
+               {
+                       buf[i] = '\0';
+                       insc = str;
+                       break;
+               }
+
+               if (isupper(c)) c = (char)tolower(c);
+
+               buf[i] = c;
+       }
+
+       buf[i] = '\0';
+       if (!allow_default && *buf == 0) return FALSE;
+       if (*buf == 0 && insc) return FALSE;
+
+       concptr prev_ptr, ptr;
+       ptr = prev_ptr = buf;
+       concptr old_ptr = NULL;
+       while (old_ptr != ptr)
+       {
+               old_ptr = ptr;
+               if (MATCH_KEY(KEY_ALL)) ADD_FLG(FLG_ALL);
+               if (MATCH_KEY(KEY_COLLECTING)) ADD_FLG(FLG_COLLECTING);
+               if (MATCH_KEY(KEY_UNAWARE)) ADD_FLG(FLG_UNAWARE);
+               if (MATCH_KEY(KEY_UNIDENTIFIED)) ADD_FLG(FLG_UNIDENTIFIED);
+               if (MATCH_KEY(KEY_IDENTIFIED)) ADD_FLG(FLG_IDENTIFIED);
+               if (MATCH_KEY(KEY_STAR_IDENTIFIED)) ADD_FLG(FLG_STAR_IDENTIFIED);
+               if (MATCH_KEY(KEY_BOOSTED)) ADD_FLG(FLG_BOOSTED);
+
+               /*** Weapons whose dd*ds is more than nn ***/
+               if (MATCH_KEY2(KEY_MORE_THAN))
+               {
+                       int k = 0;
+                       entry->dice = 0;
+
+                       while (' ' == *ptr) ptr++;
+
+                       while ('0' <= *ptr && *ptr <= '9')
+                       {
+                               entry->dice = 10 * entry->dice + (*ptr - '0');
+                               ptr++;
+                               k++;
+                       }
+
+                       if (k > 0 && k <= 2)
+                       {
+                               (void)MATCH_KEY(KEY_DICE);
+                               ADD_FLG(FLG_MORE_DICE);
+                       }
+                       else
+                               ptr = prev_ptr;
+               }
+
+               /*** Items whose magical bonus is more than n ***/
+               if (MATCH_KEY2(KEY_MORE_BONUS))
+               {
+                       int k = 0;
+                       entry->bonus = 0;
+
+                       while (' ' == *ptr) ptr++;
+
+                       while ('0' <= *ptr && *ptr <= '9')
+                       {
+                               entry->bonus = 10 * entry->bonus + (*ptr - '0');
+                               ptr++;
+                               k++;
+                       }
+
+                       if (k > 0 && k <= 2)
+                       {
+#ifdef JP
+                               (void)MATCH_KEY(KEY_MORE_BONUS2);
+#else
+                               if (' ' == *ptr) ptr++;
+#endif
+                               ADD_FLG(FLG_MORE_BONUS);
+                       }
+                       else
+                               ptr = prev_ptr;
+               }
+
+               if (MATCH_KEY(KEY_WORTHLESS)) ADD_FLG(FLG_WORTHLESS);
+               if (MATCH_KEY(KEY_EGO)) ADD_FLG(FLG_EGO);
+               if (MATCH_KEY(KEY_GOOD)) ADD_FLG(FLG_GOOD);
+               if (MATCH_KEY(KEY_NAMELESS)) ADD_FLG(FLG_NAMELESS);
+               if (MATCH_KEY(KEY_AVERAGE)) ADD_FLG(FLG_AVERAGE);
+               if (MATCH_KEY(KEY_RARE)) ADD_FLG(FLG_RARE);
+               if (MATCH_KEY(KEY_COMMON)) ADD_FLG(FLG_COMMON);
+               if (MATCH_KEY(KEY_WANTED)) ADD_FLG(FLG_WANTED);
+               if (MATCH_KEY(KEY_UNIQUE)) ADD_FLG(FLG_UNIQUE);
+               if (MATCH_KEY(KEY_HUMAN)) ADD_FLG(FLG_HUMAN);
+               if (MATCH_KEY(KEY_UNREADABLE)) ADD_FLG(FLG_UNREADABLE);
+               if (MATCH_KEY(KEY_REALM1)) ADD_FLG(FLG_REALM1);
+               if (MATCH_KEY(KEY_REALM2)) ADD_FLG(FLG_REALM2);
+               if (MATCH_KEY(KEY_FIRST)) ADD_FLG(FLG_FIRST);
+               if (MATCH_KEY(KEY_SECOND)) ADD_FLG(FLG_SECOND);
+               if (MATCH_KEY(KEY_THIRD)) ADD_FLG(FLG_THIRD);
+               if (MATCH_KEY(KEY_FOURTH)) ADD_FLG(FLG_FOURTH);
+       }
+
+       int prev_flg = -1;
+       if (MATCH_KEY2(KEY_ARTIFACT)) ADD_FLG_NOUN(FLG_ARTIFACT);
+
+       if (MATCH_KEY2(KEY_ITEMS)) ADD_FLG_NOUN(FLG_ITEMS);
+       else if (MATCH_KEY2(KEY_WEAPONS)) ADD_FLG_NOUN(FLG_WEAPONS);
+       else if (MATCH_KEY2(KEY_FAVORITE_WEAPONS)) ADD_FLG_NOUN(FLG_FAVORITE_WEAPONS);
+       else if (MATCH_KEY2(KEY_ARMORS)) ADD_FLG_NOUN(FLG_ARMORS);
+       else if (MATCH_KEY2(KEY_MISSILES)) ADD_FLG_NOUN(FLG_MISSILES);
+       else if (MATCH_KEY2(KEY_DEVICES)) ADD_FLG_NOUN(FLG_DEVICES);
+       else if (MATCH_KEY2(KEY_LIGHTS)) ADD_FLG_NOUN(FLG_LIGHTS);
+       else if (MATCH_KEY2(KEY_JUNKS)) ADD_FLG_NOUN(FLG_JUNKS);
+       else if (MATCH_KEY2(KEY_CORPSES)) ADD_FLG_NOUN(FLG_CORPSES);
+       else if (MATCH_KEY2(KEY_SPELLBOOKS)) ADD_FLG_NOUN(FLG_SPELLBOOKS);
+       else if (MATCH_KEY2(KEY_HAFTED)) ADD_FLG_NOUN(FLG_HAFTED);
+       else if (MATCH_KEY2(KEY_SHIELDS)) ADD_FLG_NOUN(FLG_SHIELDS);
+       else if (MATCH_KEY2(KEY_BOWS)) ADD_FLG_NOUN(FLG_BOWS);
+       else if (MATCH_KEY2(KEY_RINGS)) ADD_FLG_NOUN(FLG_RINGS);
+       else if (MATCH_KEY2(KEY_AMULETS)) ADD_FLG_NOUN(FLG_AMULETS);
+       else if (MATCH_KEY2(KEY_SUITS)) ADD_FLG_NOUN(FLG_SUITS);
+       else if (MATCH_KEY2(KEY_CLOAKS)) ADD_FLG_NOUN(FLG_CLOAKS);
+       else if (MATCH_KEY2(KEY_HELMS)) ADD_FLG_NOUN(FLG_HELMS);
+       else if (MATCH_KEY2(KEY_GLOVES)) ADD_FLG_NOUN(FLG_GLOVES);
+       else if (MATCH_KEY2(KEY_BOOTS)) ADD_FLG_NOUN(FLG_BOOTS);
+
+       if (*ptr == ':')
+               ptr++;
+#ifdef JP
+       else if (ptr[0] == kanji_colon[0] && ptr[1] == kanji_colon[1])
+               ptr += 2;
+#endif
+       else if (*ptr == '\0')
+       {
+               if (prev_flg == -1)
+                       ADD_FLG_NOUN(FLG_ITEMS);
+       }
+       else
+       {
+               if (prev_flg != -1)
+               {
+                       entry->flag[prev_flg / 32] &= ~(1L << (prev_flg % 32));
+                       ptr = prev_ptr;
+               }
+       }
+
+       entry->name = string_make(ptr);
+       entry->action = act;
+       entry->insc = string_make(insc);
+
+       return TRUE;
+}
+
+
+/*
+ * Get auto-picker entry from o_ptr.
+ */
+void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, object_type *o_ptr)
+{
+       /* Assume that object name is to be added */
+       bool name = TRUE;
+
+#ifdef JP
+       /* エゴ銘が邪魔かもしれないので、デフォルトで「^」は付けない */
+       bool bol_mark = FALSE;
+#else
+       /* We can always use the ^ mark in English */
+       bool bol_mark = TRUE;
+#endif
+
+       GAME_TEXT name_str[MAX_NLEN];
+
+       name_str[0] = '\0';
+       entry->insc = string_make(quark_str(o_ptr->inscription));
+       entry->action = DO_AUTOPICK | DO_DISPLAY;
+       entry->flag[0] = entry->flag[1] = 0L;
+       entry->dice = 0;
+
+       if (!object_is_aware(o_ptr))
+       {
+               ADD_FLG(FLG_UNAWARE);
+               bol_mark = TRUE;
+       }
+       else if (!object_is_known(o_ptr))
+       {
+               if (!(o_ptr->ident & IDENT_SENSE))
+               {
+                       ADD_FLG(FLG_UNIDENTIFIED);
+                       bol_mark = TRUE;
+               }
+               else
+               {
+                       switch (o_ptr->feeling)
+                       {
+                       case FEEL_AVERAGE:
+                       case FEEL_GOOD:
+                               ADD_FLG(FLG_NAMELESS);
+                               bol_mark = TRUE;
+                               break;
+
+                       case FEEL_BROKEN:
+                       case FEEL_CURSED:
+                               ADD_FLG(FLG_NAMELESS);
+                               ADD_FLG(FLG_WORTHLESS);
+                               bol_mark = TRUE;
+                               break;
+
+                       case FEEL_TERRIBLE:
+                       case FEEL_WORTHLESS:
+                               ADD_FLG(FLG_WORTHLESS);
+                               break;
+
+                       case FEEL_EXCELLENT:
+                               ADD_FLG(FLG_EGO);
+                               break;
+
+                       case FEEL_UNCURSED:
+                               break;
+
+                       default:
+                               break;
+                       }
+               }
+       }
+       else
+       {
+               if (object_is_ego(o_ptr))
+               {
+                       if (object_is_weapon_armour_ammo(o_ptr))
+                       {
+                               /*
+                                * Base name of ego weapons and armors
+                                * are almost meaningless.
+                                * Register the ego type only.
+                                */
+                               ego_item_type *e_ptr = &e_info[o_ptr->name2];
+#ifdef JP
+                               /* エゴ銘には「^」マークが使える */
+                               sprintf(name_str, "^%s", e_name + e_ptr->name);
+#else
+                               /* We ommit the basename and cannot use the ^ mark */
+                               strcpy(name_str, e_name + e_ptr->name);
+#endif
+                               name = FALSE;
+                               if (!object_is_rare(o_ptr)) ADD_FLG(FLG_COMMON);
+                       }
+
+                       ADD_FLG(FLG_EGO);
+               }
+               else if (object_is_artifact(o_ptr))
+                       ADD_FLG(FLG_ARTIFACT);
+               else
+               {
+                       if (object_is_equipment(o_ptr))
+                               ADD_FLG(FLG_NAMELESS);
+
+                       bol_mark = TRUE;
+               }
+
+       }
+
+       if (object_is_melee_weapon(o_ptr))
+       {
+               object_kind *k_ptr = &k_info[o_ptr->k_idx];
+
+               if ((o_ptr->dd != k_ptr->dd) || (o_ptr->ds != k_ptr->ds))
+                       ADD_FLG(FLG_BOOSTED);
+       }
+
+       if (object_is_bounty(o_ptr))
+       {
+               REM_FLG(FLG_WORTHLESS);
+               ADD_FLG(FLG_WANTED);
+       }
+
+       if ((o_ptr->tval == TV_CORPSE || o_ptr->tval == TV_STATUE)
+               && (r_info[o_ptr->pval].flags1 & RF1_UNIQUE))
+       {
+               ADD_FLG(FLG_UNIQUE);
+       }
+
+       if (o_ptr->tval == TV_CORPSE && my_strchr("pht", r_info[o_ptr->pval].d_char))
+       {
+               ADD_FLG(FLG_HUMAN);
+       }
+
+       if (o_ptr->tval >= TV_LIFE_BOOK &&
+               !check_book_realm(player_ptr, o_ptr->tval, o_ptr->sval))
+       {
+               ADD_FLG(FLG_UNREADABLE);
+               if (o_ptr->tval != TV_ARCANE_BOOK) name = FALSE;
+       }
+
+       if (REALM1_BOOK == o_ptr->tval &&
+               player_ptr->pclass != CLASS_SORCERER &&
+               player_ptr->pclass != CLASS_RED_MAGE)
+       {
+               ADD_FLG(FLG_REALM1);
+               name = FALSE;
+       }
+
+       if (REALM2_BOOK == o_ptr->tval &&
+               player_ptr->pclass != CLASS_SORCERER &&
+               player_ptr->pclass != CLASS_RED_MAGE)
+       {
+               ADD_FLG(FLG_REALM2);
+               name = FALSE;
+       }
+
+       if (o_ptr->tval >= TV_LIFE_BOOK && 0 == o_ptr->sval)
+               ADD_FLG(FLG_FIRST);
+       if (o_ptr->tval >= TV_LIFE_BOOK && 1 == o_ptr->sval)
+               ADD_FLG(FLG_SECOND);
+       if (o_ptr->tval >= TV_LIFE_BOOK && 2 == o_ptr->sval)
+               ADD_FLG(FLG_THIRD);
+       if (o_ptr->tval >= TV_LIFE_BOOK && 3 == o_ptr->sval)
+               ADD_FLG(FLG_FOURTH);
+
+       if (object_is_ammo(o_ptr))
+               ADD_FLG(FLG_MISSILES);
+       else if (o_ptr->tval == TV_SCROLL || o_ptr->tval == TV_STAFF
+               || o_ptr->tval == TV_WAND || o_ptr->tval == TV_ROD)
+               ADD_FLG(FLG_DEVICES);
+       else if (o_ptr->tval == TV_LITE)
+               ADD_FLG(FLG_LIGHTS);
+       else if (o_ptr->tval == TV_SKELETON || o_ptr->tval == TV_BOTTLE
+               || o_ptr->tval == TV_JUNK || o_ptr->tval == TV_STATUE)
+               ADD_FLG(FLG_JUNKS);
+       else if (o_ptr->tval == TV_CORPSE)
+               ADD_FLG(FLG_CORPSES);
+       else if (o_ptr->tval >= TV_LIFE_BOOK)
+               ADD_FLG(FLG_SPELLBOOKS);
+       else if (o_ptr->tval == TV_POLEARM || o_ptr->tval == TV_SWORD
+               || o_ptr->tval == TV_DIGGING || o_ptr->tval == TV_HAFTED)
+               ADD_FLG(FLG_WEAPONS);
+       else if (o_ptr->tval == TV_SHIELD)
+               ADD_FLG(FLG_SHIELDS);
+       else if (o_ptr->tval == TV_BOW)
+               ADD_FLG(FLG_BOWS);
+       else if (o_ptr->tval == TV_RING)
+               ADD_FLG(FLG_RINGS);
+       else if (o_ptr->tval == TV_AMULET)
+               ADD_FLG(FLG_AMULETS);
+       else if (o_ptr->tval == TV_DRAG_ARMOR || o_ptr->tval == TV_HARD_ARMOR ||
+               o_ptr->tval == TV_SOFT_ARMOR)
+               ADD_FLG(FLG_SUITS);
+       else if (o_ptr->tval == TV_CLOAK)
+               ADD_FLG(FLG_CLOAKS);
+       else if (o_ptr->tval == TV_HELM)
+               ADD_FLG(FLG_HELMS);
+       else if (o_ptr->tval == TV_GLOVES)
+               ADD_FLG(FLG_GLOVES);
+       else if (o_ptr->tval == TV_BOOTS)
+               ADD_FLG(FLG_BOOTS);
+
+       if (!name)
+       {
+               str_tolower(name_str);
+               entry->name = string_make(name_str);
+               return;
+       }
+
+       GAME_TEXT o_name[MAX_NLEN];
+       object_desc(player_ptr, o_name, o_ptr, (OD_NO_FLAVOR | OD_OMIT_PREFIX | OD_NO_PLURAL | OD_NAME_ONLY));
+
+       /*
+        * If necessary, add a '^' which indicates the
+        * beginning of line.
+        */
+       sprintf(name_str, "%s%s", bol_mark ? "^" : "", o_name);
+       str_tolower(name_str);
+       entry->name = string_make(name_str);
+}
diff --git a/src/autopick/autopick-entry.h b/src/autopick/autopick-entry.h
new file mode 100644 (file)
index 0000000..c7bf7bb
--- /dev/null
@@ -0,0 +1,4 @@
+#pragma once
+
+bool autopick_new_entry(autopick_type *entry, concptr str, bool allow_default);
+void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, object_type *o_ptr);
index 4528a89..6da7fc4 100644 (file)
@@ -21,6 +21,7 @@
 #include "autopick/autopick-menu-data-table.h"
 #include "autopick/autopick-methods-table.h"
 #include "autopick/autopick-keys-table.h"
+#include "autopick/autopick-entry.h"
 #include "gameterm.h"
 #include "autopick/autopick.h"
 #include "core.h"
 #include "monsterrace.h"
 #include "view-mainwindow.h" // 暫定。後で消す
 
-#ifdef JP
-static char kanji_colon[] = ":";
-#endif
-
 /*
  * 自動拾い/破壊設定のリストに関する変数 / List for auto-picker/destroyer entries
  */
@@ -69,447 +66,6 @@ autopick_type *autopick_list = NULL; /*!< 自動拾い/破壊設定構造体の
 static object_type autopick_last_destroyed_object;
 
 /*
- * A function to create new entry
- */
-static bool autopick_new_entry(autopick_type *entry, concptr str, bool allow_default)
-{
-       if (str[0] && str[1] == ':') switch (str[0])
-       {
-       case '?': case '%':
-       case 'A': case 'P': case 'C':
-               return FALSE;
-       }
-
-       entry->flag[0] = entry->flag[1] = 0L;
-       entry->dice = 0;
-       entry->bonus = 0;
-
-       byte act = DO_AUTOPICK | DO_DISPLAY;
-       while (TRUE)
-       {
-               if ((act & DO_AUTOPICK) && *str == '!')
-               {
-                       act &= ~DO_AUTOPICK;
-                       act |= DO_AUTODESTROY;
-                       str++;
-                       continue;
-               }
-
-               if ((act & DO_AUTOPICK) && *str == '~')
-               {
-                       act &= ~DO_AUTOPICK;
-                       act |= DONT_AUTOPICK;
-                       str++;
-                       continue;
-               }
-
-               if ((act & DO_AUTOPICK) && *str == ';')
-               {
-                       act &= ~DO_AUTOPICK;
-                       act |= DO_QUERY_AUTOPICK;
-                       str++;
-                       continue;
-               }
-
-               if ((act & DO_DISPLAY) && *str == '(')
-               {
-                       act &= ~DO_DISPLAY;
-                       str++;
-                       continue;
-               }
-
-               break;
-       }
-
-       concptr insc = NULL;
-       char buf[MAX_LINELEN];
-       int i;
-       for (i = 0; *str; i++)
-       {
-               char c = *str++;
-#ifdef JP
-               if (iskanji(c))
-               {
-                       buf[i++] = c;
-                       buf[i] = *str++;
-                       continue;
-               }
-#endif
-               if (c == '#')
-               {
-                       buf[i] = '\0';
-                       insc = str;
-                       break;
-               }
-
-               if (isupper(c)) c = (char)tolower(c);
-
-               buf[i] = c;
-       }
-
-       buf[i] = '\0';
-       if (!allow_default && *buf == 0) return FALSE;
-       if (*buf == 0 && insc) return FALSE;
-
-       concptr prev_ptr, ptr;
-       ptr = prev_ptr = buf;
-       concptr old_ptr = NULL;
-       while (old_ptr != ptr)
-       {
-               old_ptr = ptr;
-               if (MATCH_KEY(KEY_ALL)) ADD_FLG(FLG_ALL);
-               if (MATCH_KEY(KEY_COLLECTING)) ADD_FLG(FLG_COLLECTING);
-               if (MATCH_KEY(KEY_UNAWARE)) ADD_FLG(FLG_UNAWARE);
-               if (MATCH_KEY(KEY_UNIDENTIFIED)) ADD_FLG(FLG_UNIDENTIFIED);
-               if (MATCH_KEY(KEY_IDENTIFIED)) ADD_FLG(FLG_IDENTIFIED);
-               if (MATCH_KEY(KEY_STAR_IDENTIFIED)) ADD_FLG(FLG_STAR_IDENTIFIED);
-               if (MATCH_KEY(KEY_BOOSTED)) ADD_FLG(FLG_BOOSTED);
-
-               /*** Weapons whose dd*ds is more than nn ***/
-               if (MATCH_KEY2(KEY_MORE_THAN))
-               {
-                       int k = 0;
-                       entry->dice = 0;
-
-                       while (' ' == *ptr) ptr++;
-
-                       while ('0' <= *ptr && *ptr <= '9')
-                       {
-                               entry->dice = 10 * entry->dice + (*ptr - '0');
-                               ptr++;
-                               k++;
-                       }
-
-                       if (k > 0 && k <= 2)
-                       {
-                               (void)MATCH_KEY(KEY_DICE);
-                               ADD_FLG(FLG_MORE_DICE);
-                       }
-                       else
-                               ptr = prev_ptr;
-               }
-
-               /*** Items whose magical bonus is more than n ***/
-               if (MATCH_KEY2(KEY_MORE_BONUS))
-               {
-                       int k = 0;
-                       entry->bonus = 0;
-
-                       while (' ' == *ptr) ptr++;
-
-                       while ('0' <= *ptr && *ptr <= '9')
-                       {
-                               entry->bonus = 10 * entry->bonus + (*ptr - '0');
-                               ptr++;
-                               k++;
-                       }
-
-                       if (k > 0 && k <= 2)
-                       {
-#ifdef JP
-                               (void)MATCH_KEY(KEY_MORE_BONUS2);
-#else
-                               if (' ' == *ptr) ptr++;
-#endif
-                               ADD_FLG(FLG_MORE_BONUS);
-                       }
-                       else
-                               ptr = prev_ptr;
-               }
-
-               if (MATCH_KEY(KEY_WORTHLESS)) ADD_FLG(FLG_WORTHLESS);
-               if (MATCH_KEY(KEY_EGO)) ADD_FLG(FLG_EGO);
-               if (MATCH_KEY(KEY_GOOD)) ADD_FLG(FLG_GOOD);
-               if (MATCH_KEY(KEY_NAMELESS)) ADD_FLG(FLG_NAMELESS);
-               if (MATCH_KEY(KEY_AVERAGE)) ADD_FLG(FLG_AVERAGE);
-               if (MATCH_KEY(KEY_RARE)) ADD_FLG(FLG_RARE);
-               if (MATCH_KEY(KEY_COMMON)) ADD_FLG(FLG_COMMON);
-               if (MATCH_KEY(KEY_WANTED)) ADD_FLG(FLG_WANTED);
-               if (MATCH_KEY(KEY_UNIQUE)) ADD_FLG(FLG_UNIQUE);
-               if (MATCH_KEY(KEY_HUMAN)) ADD_FLG(FLG_HUMAN);
-               if (MATCH_KEY(KEY_UNREADABLE)) ADD_FLG(FLG_UNREADABLE);
-               if (MATCH_KEY(KEY_REALM1)) ADD_FLG(FLG_REALM1);
-               if (MATCH_KEY(KEY_REALM2)) ADD_FLG(FLG_REALM2);
-               if (MATCH_KEY(KEY_FIRST)) ADD_FLG(FLG_FIRST);
-               if (MATCH_KEY(KEY_SECOND)) ADD_FLG(FLG_SECOND);
-               if (MATCH_KEY(KEY_THIRD)) ADD_FLG(FLG_THIRD);
-               if (MATCH_KEY(KEY_FOURTH)) ADD_FLG(FLG_FOURTH);
-       }
-
-       int prev_flg = -1;
-       if (MATCH_KEY2(KEY_ARTIFACT)) ADD_FLG_NOUN(FLG_ARTIFACT);
-
-       if (MATCH_KEY2(KEY_ITEMS)) ADD_FLG_NOUN(FLG_ITEMS);
-       else if (MATCH_KEY2(KEY_WEAPONS)) ADD_FLG_NOUN(FLG_WEAPONS);
-       else if (MATCH_KEY2(KEY_FAVORITE_WEAPONS)) ADD_FLG_NOUN(FLG_FAVORITE_WEAPONS);
-       else if (MATCH_KEY2(KEY_ARMORS)) ADD_FLG_NOUN(FLG_ARMORS);
-       else if (MATCH_KEY2(KEY_MISSILES)) ADD_FLG_NOUN(FLG_MISSILES);
-       else if (MATCH_KEY2(KEY_DEVICES)) ADD_FLG_NOUN(FLG_DEVICES);
-       else if (MATCH_KEY2(KEY_LIGHTS)) ADD_FLG_NOUN(FLG_LIGHTS);
-       else if (MATCH_KEY2(KEY_JUNKS)) ADD_FLG_NOUN(FLG_JUNKS);
-       else if (MATCH_KEY2(KEY_CORPSES)) ADD_FLG_NOUN(FLG_CORPSES);
-       else if (MATCH_KEY2(KEY_SPELLBOOKS)) ADD_FLG_NOUN(FLG_SPELLBOOKS);
-       else if (MATCH_KEY2(KEY_HAFTED)) ADD_FLG_NOUN(FLG_HAFTED);
-       else if (MATCH_KEY2(KEY_SHIELDS)) ADD_FLG_NOUN(FLG_SHIELDS);
-       else if (MATCH_KEY2(KEY_BOWS)) ADD_FLG_NOUN(FLG_BOWS);
-       else if (MATCH_KEY2(KEY_RINGS)) ADD_FLG_NOUN(FLG_RINGS);
-       else if (MATCH_KEY2(KEY_AMULETS)) ADD_FLG_NOUN(FLG_AMULETS);
-       else if (MATCH_KEY2(KEY_SUITS)) ADD_FLG_NOUN(FLG_SUITS);
-       else if (MATCH_KEY2(KEY_CLOAKS)) ADD_FLG_NOUN(FLG_CLOAKS);
-       else if (MATCH_KEY2(KEY_HELMS)) ADD_FLG_NOUN(FLG_HELMS);
-       else if (MATCH_KEY2(KEY_GLOVES)) ADD_FLG_NOUN(FLG_GLOVES);
-       else if (MATCH_KEY2(KEY_BOOTS)) ADD_FLG_NOUN(FLG_BOOTS);
-
-       if (*ptr == ':')
-               ptr++;
-#ifdef JP
-       else if (ptr[0] == kanji_colon[0] && ptr[1] == kanji_colon[1])
-               ptr += 2;
-#endif
-       else if (*ptr == '\0')
-       {
-               if (prev_flg == -1)
-                       ADD_FLG_NOUN(FLG_ITEMS);
-       }
-       else
-       {
-               if (prev_flg != -1)
-               {
-                       entry->flag[prev_flg / 32] &= ~(1L << (prev_flg % 32));
-                       ptr = prev_ptr;
-               }
-       }
-
-       entry->name = string_make(ptr);
-       entry->action = act;
-       entry->insc = string_make(insc);
-
-       return TRUE;
-}
-
-
-/*
- * Get auto-picker entry from o_ptr.
- */
-static void autopick_entry_from_object(player_type *player_ptr, autopick_type *entry, object_type *o_ptr)
-{
-       /* Assume that object name is to be added */
-       bool name = TRUE;
-
-#ifdef JP
-       /* エゴ銘が邪魔かもしれないので、デフォルトで「^」は付けない */
-       bool bol_mark = FALSE;
-#else
-       /* We can always use the ^ mark in English */
-       bool bol_mark = TRUE;
-#endif
-
-       GAME_TEXT name_str[MAX_NLEN];
-
-       name_str[0] = '\0';
-       entry->insc = string_make(quark_str(o_ptr->inscription));
-       entry->action = DO_AUTOPICK | DO_DISPLAY;
-       entry->flag[0] = entry->flag[1] = 0L;
-       entry->dice = 0;
-
-       if (!object_is_aware(o_ptr))
-       {
-               ADD_FLG(FLG_UNAWARE);
-               bol_mark = TRUE;
-       }
-       else if (!object_is_known(o_ptr))
-       {
-               if (!(o_ptr->ident & IDENT_SENSE))
-               {
-                       ADD_FLG(FLG_UNIDENTIFIED);
-                       bol_mark = TRUE;
-               }
-               else
-               {
-                       switch (o_ptr->feeling)
-                       {
-                       case FEEL_AVERAGE:
-                       case FEEL_GOOD:
-                               ADD_FLG(FLG_NAMELESS);
-                               bol_mark = TRUE;
-                               break;
-
-                       case FEEL_BROKEN:
-                       case FEEL_CURSED:
-                               ADD_FLG(FLG_NAMELESS);
-                               ADD_FLG(FLG_WORTHLESS);
-                               bol_mark = TRUE;
-                               break;
-
-                       case FEEL_TERRIBLE:
-                       case FEEL_WORTHLESS:
-                               ADD_FLG(FLG_WORTHLESS);
-                               break;
-
-                       case FEEL_EXCELLENT:
-                               ADD_FLG(FLG_EGO);
-                               break;
-
-                       case FEEL_UNCURSED:
-                               break;
-
-                       default:
-                               break;
-                       }
-               }
-       }
-       else
-       {
-               if (object_is_ego(o_ptr))
-               {
-                       if (object_is_weapon_armour_ammo(o_ptr))
-                       {
-                               /*
-                                * Base name of ego weapons and armors
-                                * are almost meaningless.
-                                * Register the ego type only.
-                                */
-                               ego_item_type *e_ptr = &e_info[o_ptr->name2];
-#ifdef JP
-                               /* エゴ銘には「^」マークが使える */
-                               sprintf(name_str, "^%s", e_name + e_ptr->name);
-#else
-                               /* We ommit the basename and cannot use the ^ mark */
-                               strcpy(name_str, e_name + e_ptr->name);
-#endif
-                               name = FALSE;
-                               if (!object_is_rare(o_ptr)) ADD_FLG(FLG_COMMON);
-                       }
-
-                       ADD_FLG(FLG_EGO);
-               }
-               else if (object_is_artifact(o_ptr))
-                       ADD_FLG(FLG_ARTIFACT);
-               else
-               {
-                       if (object_is_equipment(o_ptr))
-                               ADD_FLG(FLG_NAMELESS);
-
-                       bol_mark = TRUE;
-               }
-
-       }
-
-       if (object_is_melee_weapon(o_ptr))
-       {
-               object_kind *k_ptr = &k_info[o_ptr->k_idx];
-
-               if ((o_ptr->dd != k_ptr->dd) || (o_ptr->ds != k_ptr->ds))
-                       ADD_FLG(FLG_BOOSTED);
-       }
-
-       if (object_is_bounty(o_ptr))
-       {
-               REM_FLG(FLG_WORTHLESS);
-               ADD_FLG(FLG_WANTED);
-       }
-
-       if ((o_ptr->tval == TV_CORPSE || o_ptr->tval == TV_STATUE)
-               && (r_info[o_ptr->pval].flags1 & RF1_UNIQUE))
-       {
-               ADD_FLG(FLG_UNIQUE);
-       }
-
-       if (o_ptr->tval == TV_CORPSE && my_strchr("pht", r_info[o_ptr->pval].d_char))
-       {
-               ADD_FLG(FLG_HUMAN);
-       }
-
-       if (o_ptr->tval >= TV_LIFE_BOOK &&
-               !check_book_realm(player_ptr, o_ptr->tval, o_ptr->sval))
-       {
-               ADD_FLG(FLG_UNREADABLE);
-               if (o_ptr->tval != TV_ARCANE_BOOK) name = FALSE;
-       }
-
-       if (REALM1_BOOK == o_ptr->tval &&
-               player_ptr->pclass != CLASS_SORCERER &&
-               player_ptr->pclass != CLASS_RED_MAGE)
-       {
-               ADD_FLG(FLG_REALM1);
-               name = FALSE;
-       }
-
-       if (REALM2_BOOK == o_ptr->tval &&
-               player_ptr->pclass != CLASS_SORCERER &&
-               player_ptr->pclass != CLASS_RED_MAGE)
-       {
-               ADD_FLG(FLG_REALM2);
-               name = FALSE;
-       }
-
-       if (o_ptr->tval >= TV_LIFE_BOOK && 0 == o_ptr->sval)
-               ADD_FLG(FLG_FIRST);
-       if (o_ptr->tval >= TV_LIFE_BOOK && 1 == o_ptr->sval)
-               ADD_FLG(FLG_SECOND);
-       if (o_ptr->tval >= TV_LIFE_BOOK && 2 == o_ptr->sval)
-               ADD_FLG(FLG_THIRD);
-       if (o_ptr->tval >= TV_LIFE_BOOK && 3 == o_ptr->sval)
-               ADD_FLG(FLG_FOURTH);
-
-       if (object_is_ammo(o_ptr))
-               ADD_FLG(FLG_MISSILES);
-       else if (o_ptr->tval == TV_SCROLL || o_ptr->tval == TV_STAFF
-               || o_ptr->tval == TV_WAND || o_ptr->tval == TV_ROD)
-               ADD_FLG(FLG_DEVICES);
-       else if (o_ptr->tval == TV_LITE)
-               ADD_FLG(FLG_LIGHTS);
-       else if (o_ptr->tval == TV_SKELETON || o_ptr->tval == TV_BOTTLE
-               || o_ptr->tval == TV_JUNK || o_ptr->tval == TV_STATUE)
-               ADD_FLG(FLG_JUNKS);
-       else if (o_ptr->tval == TV_CORPSE)
-               ADD_FLG(FLG_CORPSES);
-       else if (o_ptr->tval >= TV_LIFE_BOOK)
-               ADD_FLG(FLG_SPELLBOOKS);
-       else if (o_ptr->tval == TV_POLEARM || o_ptr->tval == TV_SWORD
-               || o_ptr->tval == TV_DIGGING || o_ptr->tval == TV_HAFTED)
-               ADD_FLG(FLG_WEAPONS);
-       else if (o_ptr->tval == TV_SHIELD)
-               ADD_FLG(FLG_SHIELDS);
-       else if (o_ptr->tval == TV_BOW)
-               ADD_FLG(FLG_BOWS);
-       else if (o_ptr->tval == TV_RING)
-               ADD_FLG(FLG_RINGS);
-       else if (o_ptr->tval == TV_AMULET)
-               ADD_FLG(FLG_AMULETS);
-       else if (o_ptr->tval == TV_DRAG_ARMOR || o_ptr->tval == TV_HARD_ARMOR ||
-               o_ptr->tval == TV_SOFT_ARMOR)
-               ADD_FLG(FLG_SUITS);
-       else if (o_ptr->tval == TV_CLOAK)
-               ADD_FLG(FLG_CLOAKS);
-       else if (o_ptr->tval == TV_HELM)
-               ADD_FLG(FLG_HELMS);
-       else if (o_ptr->tval == TV_GLOVES)
-               ADD_FLG(FLG_GLOVES);
-       else if (o_ptr->tval == TV_BOOTS)
-               ADD_FLG(FLG_BOOTS);
-
-       if (!name)
-       {
-               str_tolower(name_str);
-               entry->name = string_make(name_str);
-               return;
-       }
-
-       GAME_TEXT o_name[MAX_NLEN];
-       object_desc(player_ptr, o_name, o_ptr, (OD_NO_FLAVOR | OD_OMIT_PREFIX | OD_NO_PLURAL | OD_NAME_ONLY));
-
-       /*
-        * If necessary, add a '^' which indicates the
-        * beginning of line.
-        */
-       sprintf(name_str, "%s%s", bol_mark ? "^" : "", o_name);
-       str_tolower(name_str);
-       entry->name = string_make(name_str);
-}
-
-
-/*
  * A function to delete entry
  */
 static void autopick_free_entry(autopick_type *entry)