OSDN Git Service

、オ、テ、ュ、ホス、タオ、ヌ、゙、ソ・ィ・ミ・ー、キ、ニ、、、ソ、ホ、ヌ コニス、タオ。」
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 9 Jun 2002 20:10:50 +0000 (20:10 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 9 Jun 2002 20:10:50 +0000 (20:10 +0000)
src/autopick.c

index 23aa02a..6ab9d7f 100644 (file)
 
 #define ADD_FLG(FLG) (entry->flag[FLG / 32] |= (1L << (FLG % 32)))
 #define REM_FLG(FLG) (entry->flag[FLG / 32] &= ~(1L << (FLG % 32)))
-#define ADD_FLG2(FLG) (entry->flag[FLG / 32] |= (1L << (FLG % 32)), prev_flg = FLG)
+#define ADD_FLG_ADJ(FLG) (ADD_FLG(FLG), prev_flg = -1)
+#define ADD_FLG_NOUN(FLG) (ADD_FLG(FLG), prev_flg = FLG)
 #define IS_FLG(FLG) (entry->flag[FLG / 32] & (1L << (FLG % 32)))
 
 #ifdef JP
@@ -348,12 +349,12 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
        /* Found flags */
        prev_ptr = ptr = buf;
        prev_flg = -1;
-       if (MATCH_KEY(KEY_ALL)) ADD_FLG(FLG_ALL);
-       if (MATCH_KEY(KEY_COLLECTING)) ADD_FLG(FLG_COLLECTING);
-       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);
+       if (MATCH_KEY(KEY_ALL)) ADD_FLG_ADJ(FLG_ALL);
+       if (MATCH_KEY(KEY_COLLECTING)) ADD_FLG_ADJ(FLG_COLLECTING);
+       if (MATCH_KEY(KEY_UNIDENTIFIED)) ADD_FLG_ADJ(FLG_UNIDENTIFIED);
+       if (MATCH_KEY(KEY_IDENTIFIED)) ADD_FLG_ADJ(FLG_IDENTIFIED);
+       if (MATCH_KEY(KEY_STAR_IDENTIFIED)) ADD_FLG_ADJ(FLG_STAR_IDENTIFIED);
+       if (MATCH_KEY(KEY_BOOSTED)) ADD_FLG_ADJ(FLG_BOOSTED);
 
        /*** Weapons whose dd*ds is more than nn ***/
        if (MATCH_KEY(KEY_MORE_THAN))
@@ -375,7 +376,7 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
                if (k > 0 && k <= 2)
                {
                        (void)MATCH_KEY(KEY_DICE);
-                       ADD_FLG(FLG_MORE_THAN);
+                       ADD_FLG_ADJ(FLG_MORE_THAN);
                }
                else
                        ptr = prev_ptr;
@@ -401,62 +402,68 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
                if (k > 0 && k <= 2)
                {
                        (void)MATCH_KEY(KEY_MORE_BONUS2);
-                       ADD_FLG(FLG_MORE_BONUS);
+                       ADD_FLG_ADJ(FLG_MORE_BONUS);
                }
                else
                        ptr = prev_ptr;
        }
 
-       if (MATCH_KEY(KEY_WORTHLESS)) ADD_FLG(FLG_WORTHLESS);
-       if (MATCH_KEY(KEY_ARTIFACT)) ADD_FLG2(FLG_ARTIFACT);
-       if (MATCH_KEY(KEY_EGO)) ADD_FLG(FLG_EGO);
-       if (MATCH_KEY(KEY_NAMELESS)) ADD_FLG(FLG_NAMELESS);
-       if (MATCH_KEY(KEY_UNAWARE)) ADD_FLG(FLG_UNAWARE);
-       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);
-
-       if (MATCH_KEY(KEY_ITEMS)) ADD_FLG2(FLG_ITEMS);
-       else if (MATCH_KEY(KEY_WEAPONS)) ADD_FLG2(FLG_WEAPONS);
-       else if (MATCH_KEY(KEY_ARMORS)) ADD_FLG2(FLG_ARMORS);
-       else if (MATCH_KEY(KEY_MISSILES)) ADD_FLG2(FLG_MISSILES);
-       else if (MATCH_KEY(KEY_DEVICES)) ADD_FLG2(FLG_DEVICES);
-       else if (MATCH_KEY(KEY_LIGHTS)) ADD_FLG2(FLG_LIGHTS);
-       else if (MATCH_KEY(KEY_JUNKS)) ADD_FLG2(FLG_JUNKS);
-       else if (MATCH_KEY(KEY_SPELLBOOKS)) ADD_FLG2(FLG_SPELLBOOKS);
-       else if (MATCH_KEY(KEY_HAFTED)) ADD_FLG2(FLG_HAFTED);
-       else if (MATCH_KEY(KEY_SHIELDS)) ADD_FLG2(FLG_SHIELDS);
-       else if (MATCH_KEY(KEY_BOWS)) ADD_FLG2(FLG_BOWS);
-       else if (MATCH_KEY(KEY_RINGS)) ADD_FLG2(FLG_RINGS);
-       else if (MATCH_KEY(KEY_AMULETS)) ADD_FLG2(FLG_AMULETS);
-       else if (MATCH_KEY(KEY_SUITS)) ADD_FLG2(FLG_SUITS);
-       else if (MATCH_KEY(KEY_CLOAKS)) ADD_FLG2(FLG_CLOAKS);
-       else if (MATCH_KEY(KEY_HELMS)) ADD_FLG2(FLG_HELMS);
-       else if (MATCH_KEY(KEY_GLOVES)) ADD_FLG2(FLG_GLOVES);
-       else if (MATCH_KEY(KEY_BOOTS)) ADD_FLG2(FLG_BOOTS);
+       if (MATCH_KEY(KEY_WORTHLESS)) ADD_FLG_ADJ(FLG_WORTHLESS);
+       if (MATCH_KEY(KEY_ARTIFACT)) ADD_FLG_NOUN(FLG_ARTIFACT);
+       if (MATCH_KEY(KEY_EGO)) ADD_FLG_ADJ(FLG_EGO);
+       if (MATCH_KEY(KEY_NAMELESS)) ADD_FLG_ADJ(FLG_NAMELESS);
+       if (MATCH_KEY(KEY_UNAWARE)) ADD_FLG_ADJ(FLG_UNAWARE);
+       if (MATCH_KEY(KEY_WANTED)) ADD_FLG_ADJ(FLG_WANTED);
+       if (MATCH_KEY(KEY_UNIQUE)) ADD_FLG_ADJ(FLG_UNIQUE);
+       if (MATCH_KEY(KEY_HUMAN)) ADD_FLG_ADJ(FLG_HUMAN);
+       if (MATCH_KEY(KEY_UNREADABLE)) ADD_FLG_ADJ(FLG_UNREADABLE);
+       if (MATCH_KEY(KEY_REALM1)) ADD_FLG_ADJ(FLG_REALM1);
+       if (MATCH_KEY(KEY_REALM2)) ADD_FLG_ADJ(FLG_REALM2);
+       if (MATCH_KEY(KEY_FIRST)) ADD_FLG_ADJ(FLG_FIRST);
+       if (MATCH_KEY(KEY_SECOND)) ADD_FLG_ADJ(FLG_SECOND);
+       if (MATCH_KEY(KEY_THIRD)) ADD_FLG_ADJ(FLG_THIRD);
+       if (MATCH_KEY(KEY_FOURTH)) ADD_FLG_ADJ(FLG_FOURTH);
+
+       if (MATCH_KEY(KEY_ITEMS)) ADD_FLG_NOUN(FLG_ITEMS);
+       else if (MATCH_KEY(KEY_WEAPONS)) ADD_FLG_NOUN(FLG_WEAPONS);
+       else if (MATCH_KEY(KEY_ARMORS)) ADD_FLG_NOUN(FLG_ARMORS);
+       else if (MATCH_KEY(KEY_MISSILES)) ADD_FLG_NOUN(FLG_MISSILES);
+       else if (MATCH_KEY(KEY_DEVICES)) ADD_FLG_NOUN(FLG_DEVICES);
+       else if (MATCH_KEY(KEY_LIGHTS)) ADD_FLG_NOUN(FLG_LIGHTS);
+       else if (MATCH_KEY(KEY_JUNKS)) ADD_FLG_NOUN(FLG_JUNKS);
+       else if (MATCH_KEY(KEY_SPELLBOOKS)) ADD_FLG_NOUN(FLG_SPELLBOOKS);
+       else if (MATCH_KEY(KEY_HAFTED)) ADD_FLG_NOUN(FLG_HAFTED);
+       else if (MATCH_KEY(KEY_SHIELDS)) ADD_FLG_NOUN(FLG_SHIELDS);
+       else if (MATCH_KEY(KEY_BOWS)) ADD_FLG_NOUN(FLG_BOWS);
+       else if (MATCH_KEY(KEY_RINGS)) ADD_FLG_NOUN(FLG_RINGS);
+       else if (MATCH_KEY(KEY_AMULETS)) ADD_FLG_NOUN(FLG_AMULETS);
+       else if (MATCH_KEY(KEY_SUITS)) ADD_FLG_NOUN(FLG_SUITS);
+       else if (MATCH_KEY(KEY_CLOAKS)) ADD_FLG_NOUN(FLG_CLOAKS);
+       else if (MATCH_KEY(KEY_HELMS)) ADD_FLG_NOUN(FLG_HELMS);
+       else if (MATCH_KEY(KEY_GLOVES)) ADD_FLG_NOUN(FLG_GLOVES);
+       else if (MATCH_KEY(KEY_BOOTS)) ADD_FLG_NOUN(FLG_BOOTS);
 
        /* Last 'keyword' must be at the correct location */
        if (*ptr == ':')
                ptr++;
-       else if (*ptr == '\0')
-               ; /* nothing to do */
 #ifdef JP
        else if (ptr[0] == kanji_colon[0] && ptr[1] == kanji_colon[1])
                ptr += 2;
 #endif
+       else if (*ptr == '\0')
+               ; /* nothing to do */
        else
        {
+               /* Noun type? */
                if (prev_flg != -1)
+               {
+                       /* A noun type keyword didn't end correctly */
                        entry->flag[prev_flg/32] &= ~(1L<< (prev_flg%32));
-               ptr = prev_ptr;
+                       ptr = prev_ptr;
+               }
        }
+
+       /* Save this auto-picker entry line */
        entry->name = string_make(ptr);
        entry->action = act;
        entry->insc = string_make(insc);