1 #include "io/pref-file-expressor.h"
2 #include "game-option/runtime-arguments.h"
3 #include "player/player-class.h"
4 #include "player/player-race.h"
5 #include "realm/realm-names-table.h"
6 #include "system/system-variables.h"
7 #include "util/string-processor.h"
10 * @brief process_pref_fileのサブルーチンとして条件分岐処理の解釈と結果を返す
11 * Helper function for "process_pref_file()"
12 * @param creature_ptr プレーヤーへの参照ポインタ
13 * @param sp テキスト文字列の参照ポインタ
14 * @param fp 再帰中のポインタ参照
17 * かなり長いが、エンバグすると非常に危険な関数なので一旦放置する
20 * v: output buffer array
26 concptr process_pref_file_expr(player_type *creature_ptr, char **sp, char *fp)
50 t = process_pref_file_expr(creature_ptr, &s, &f);
53 } else if (streq(t, "IOR")) {
55 while (*s && (f != b2)) {
56 t = process_pref_file_expr(creature_ptr, &s, &f);
57 if (*t && !streq(t, "0"))
60 } else if (streq(t, "AND")) {
62 while (*s && (f != b2)) {
63 t = process_pref_file_expr(creature_ptr, &s, &f);
64 if (*t && streq(t, "0"))
67 } else if (streq(t, "NOT")) {
69 while (*s && (f != b2)) {
70 t = process_pref_file_expr(creature_ptr, &s, &f);
71 if (*t && streq(t, "1"))
74 } else if (streq(t, "EQU")) {
76 if (*s && (f != b2)) {
77 t = process_pref_file_expr(creature_ptr, &s, &f);
79 while (*s && (f != b2)) {
80 p = process_pref_file_expr(creature_ptr, &s, &f);
84 } else if (streq(t, "LEQ")) {
86 if (*s && (f != b2)) {
87 t = process_pref_file_expr(creature_ptr, &s, &f);
89 while (*s && (f != b2)) {
91 t = process_pref_file_expr(creature_ptr, &s, &f);
92 if (*t && atoi(p) > atoi(t))
95 } else if (streq(t, "GEQ")) {
97 if (*s && (f != b2)) {
98 t = process_pref_file_expr(creature_ptr, &s, &f);
100 while (*s && (f != b2)) {
102 t = process_pref_file_expr(creature_ptr, &s, &f);
103 if (*t && atoi(p) < atoi(t))
107 while (*s && (f != b2)) {
108 t = process_pref_file_expr(creature_ptr, &s, &f);
115 if ((f = *s) != '\0')
123 /* Accept all printables except spaces and brackets */
125 while (iskanji(*s) || (isprint(*s) && !angband_strchr(" []", *s))) {
131 while (isprint(*s) && !angband_strchr(" []", *s))
135 if ((f = *s) != '\0')
145 if (streq(b + 1, "SYS")) {
147 } else if (streq(b + 1, "KEYBOARD")) {
148 v = ANGBAND_KEYBOARD;
149 } else if (streq(b + 1, "GRAF")) {
151 } else if (streq(b + 1, "MONOCHROME")) {
156 } else if (streq(b + 1, "RACE")) {
162 } else if (streq(b + 1, "CLASS")) {
168 } else if (streq(b + 1, "PLAYER")) {
169 static char tmp_player_name[32];
171 for (pn = creature_ptr->name, tpn = tmp_player_name; *pn; pn++, tpn++) {
179 *tpn = angband_strchr(" []", *pn) ? '_' : *pn;
184 } else if (streq(b + 1, "REALM1")) {
186 v = E_realm_names[creature_ptr->realm1];
188 v = realm_names[creature_ptr->realm1];
190 } else if (streq(b + 1, "REALM2")) {
192 v = E_realm_names[creature_ptr->realm2];
194 v = realm_names[creature_ptr->realm2];
196 } else if (streq(b + 1, "LEVEL")) {
197 sprintf(tmp, "%02d", creature_ptr->lev);
199 } else if (streq(b + 1, "AUTOREGISTER")) {
200 if (creature_ptr->autopick_autoregister)
204 } else if (streq(b + 1, "MONEY")) {
205 sprintf(tmp, "%09ld", (long int)creature_ptr->au);