1 #include "io/pref-file-expressor.h"
2 #include "game-option/runtime-arguments.h"
3 #include "player-info/class-info.h"
4 #include "player-info/race-info.h"
5 #include "realm/realm-names-table.h"
6 #include "system/player-type-definition.h"
7 #include "system/system-variables.h"
8 #include "util/string-processor.h"
11 * @brief process_pref_fileのサブルーチンとして条件分岐処理の解釈と結果を返す
12 * Helper function for "process_pref_file()"
13 * @param player_ptr プレーヤーへの参照ポインタ
14 * @param sp テキスト文字列の参照ポインタ
15 * @param fp 再帰中のポインタ参照
18 * かなり長いが、エンバグすると非常に危険な関数なので一旦放置する
21 * v: output buffer array
27 concptr process_pref_file_expr(player_type *player_ptr, char **sp, char *fp)
51 t = process_pref_file_expr(player_ptr, &s, &f);
54 } else if (streq(t, "IOR")) {
56 while (*s && (f != b2)) {
57 t = process_pref_file_expr(player_ptr, &s, &f);
58 if (*t && !streq(t, "0"))
61 } else if (streq(t, "AND")) {
63 while (*s && (f != b2)) {
64 t = process_pref_file_expr(player_ptr, &s, &f);
65 if (*t && streq(t, "0"))
68 } else if (streq(t, "NOT")) {
70 while (*s && (f != b2)) {
71 t = process_pref_file_expr(player_ptr, &s, &f);
72 if (*t && streq(t, "1"))
75 } else if (streq(t, "EQU")) {
77 if (*s && (f != b2)) {
78 t = process_pref_file_expr(player_ptr, &s, &f);
80 while (*s && (f != b2)) {
81 p = process_pref_file_expr(player_ptr, &s, &f);
85 } else if (streq(t, "LEQ")) {
87 if (*s && (f != b2)) {
88 t = process_pref_file_expr(player_ptr, &s, &f);
90 while (*s && (f != b2)) {
92 t = process_pref_file_expr(player_ptr, &s, &f);
93 if (*t && atoi(p) > atoi(t))
96 } else if (streq(t, "GEQ")) {
98 if (*s && (f != b2)) {
99 t = process_pref_file_expr(player_ptr, &s, &f);
101 while (*s && (f != b2)) {
103 t = process_pref_file_expr(player_ptr, &s, &f);
104 if (*t && atoi(p) < atoi(t))
108 while (*s && (f != b2)) {
109 t = process_pref_file_expr(player_ptr, &s, &f);
116 if ((f = *s) != '\0')
124 /* Accept all printables except spaces and brackets */
126 while (iskanji(*s) || (isprint(*s) && !angband_strchr(" []", *s))) {
132 while (isprint(*s) && !angband_strchr(" []", *s))
136 if ((f = *s) != '\0')
146 if (streq(b + 1, "SYS")) {
148 } else if (streq(b + 1, "KEYBOARD")) {
149 v = ANGBAND_KEYBOARD;
150 } else if (streq(b + 1, "GRAF")) {
152 } else if (streq(b + 1, "MONOCHROME")) {
157 } else if (streq(b + 1, "RACE")) {
163 } else if (streq(b + 1, "CLASS")) {
169 } else if (streq(b + 1, "PLAYER")) {
170 static char tmp_player_name[32];
172 for (pn = player_ptr->name, tpn = tmp_player_name; *pn; pn++, tpn++) {
180 *tpn = angband_strchr(" []", *pn) ? '_' : *pn;
185 } else if (streq(b + 1, "REALM1")) {
187 v = E_realm_names[player_ptr->realm1];
189 v = realm_names[player_ptr->realm1];
191 } else if (streq(b + 1, "REALM2")) {
193 v = E_realm_names[player_ptr->realm2];
195 v = realm_names[player_ptr->realm2];
197 } else if (streq(b + 1, "LEVEL")) {
198 sprintf(tmp, "%02d", player_ptr->lev);
200 } else if (streq(b + 1, "AUTOREGISTER")) {
201 if (player_ptr->autopick_autoregister)
205 } else if (streq(b + 1, "MONEY")) {
206 sprintf(tmp, "%09ld", (long int)player_ptr->au);