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 "term/z-form.h"
9 #include "util/string-processor.h"
12 * @brief process_pref_fileのサブルーチンとして条件分岐処理の解釈と結果を返す
13 * Helper function for "process_pref_file()"
14 * @param player_ptr プレイヤーへの参照ポインタ
15 * @param sp テキスト文字列の参照ポインタ
16 * @param fp 再帰中のポインタ参照
19 * かなり長いが、エンバグすると非常に危険な関数なので一旦放置する
22 * v: output buffer array
28 concptr process_pref_file_expr(PlayerType *player_ptr, char **sp, char *fp)
32 while (iswspace(*s)) {
53 t = process_pref_file_expr(player_ptr, &s, &f);
56 } else if (streq(t, "IOR")) {
58 while (*s && (f != b2)) {
59 t = process_pref_file_expr(player_ptr, &s, &f);
60 if (*t && !streq(t, "0")) {
64 } else if (streq(t, "AND")) {
66 while (*s && (f != b2)) {
67 t = process_pref_file_expr(player_ptr, &s, &f);
68 if (*t && streq(t, "0")) {
72 } else if (streq(t, "NOT")) {
74 while (*s && (f != b2)) {
75 t = process_pref_file_expr(player_ptr, &s, &f);
76 if (*t && streq(t, "1")) {
80 } else if (streq(t, "EQU")) {
82 if (*s && (f != b2)) {
83 t = process_pref_file_expr(player_ptr, &s, &f);
85 while (*s && (f != b2)) {
86 p = process_pref_file_expr(player_ptr, &s, &f);
91 } else if (streq(t, "LEQ")) {
93 if (*s && (f != b2)) {
94 t = process_pref_file_expr(player_ptr, &s, &f);
96 while (*s && (f != b2)) {
98 t = process_pref_file_expr(player_ptr, &s, &f);
99 if (*t && atoi(p) > atoi(t)) {
103 } else if (streq(t, "GEQ")) {
105 if (*s && (f != b2)) {
106 t = process_pref_file_expr(player_ptr, &s, &f);
108 while (*s && (f != b2)) {
110 t = process_pref_file_expr(player_ptr, &s, &f);
111 if (*t && atoi(p) < atoi(t)) {
116 while (*s && (f != b2)) {
117 t = process_pref_file_expr(player_ptr, &s, &f);
125 if ((f = *s) != '\0') {
134 /* Accept all printables except spaces and brackets */
136 while (iskanji(*s) || (isprint(*s) && !angband_strchr(" []", *s))) {
143 while (isprint(*s) && !angband_strchr(" []", *s)) {
148 if ((f = *s) != '\0') {
159 if (streq(b + 1, "SYS")) {
161 } else if (streq(b + 1, "KEYBOARD")) {
162 v = ANGBAND_KEYBOARD;
163 } else if (streq(b + 1, "GRAF")) {
165 } else if (streq(b + 1, "MONOCHROME")) {
166 if (arg_monochrome) {
171 } else if (streq(b + 1, "RACE")) {
177 } else if (streq(b + 1, "CLASS")) {
183 } else if (streq(b + 1, "PLAYER")) {
184 static char tmp_player_name[32];
186 for (pn = player_ptr->name, tpn = tmp_player_name; *pn; pn++, tpn++) {
194 *tpn = angband_strchr(" []", *pn) ? '_' : *pn;
199 } else if (streq(b + 1, "REALM1")) {
201 v = E_realm_names[player_ptr->realm1];
203 v = realm_names[player_ptr->realm1];
205 } else if (streq(b + 1, "REALM2")) {
207 v = E_realm_names[player_ptr->realm2];
209 v = realm_names[player_ptr->realm2];
211 } else if (streq(b + 1, "LEVEL")) {
212 strnfmt(tmp, sizeof(tmp), "%02d", player_ptr->lev);
214 } else if (streq(b + 1, "AUTOREGISTER")) {
215 if (player_ptr->autopick_autoregister) {
220 } else if (streq(b + 1, "MONEY")) {
221 strnfmt(tmp, sizeof(tmp), "%09ld", (long int)player_ptr->au);