6 * Hack -- allow use of "ASCII" and "EBCDIC" for "indexes", "digits",
7 * and "Control-Characters".
9 * Note that all "index" values must be "lowercase letters", while
10 * all "digits" must be "digits". Control characters can be made
11 * from any legal characters.
13 #define A2I(X) ((X) - 'a')
14 #define I2A(X) ((char)(X) + 'a')
15 #define D2I(X) ((X) - '0')
16 #define I2D(X) ((X) + '0')
17 #define KTRL(X) ((X) & 0x1F)
20 #define KEYMAP_MODE_ORIG 0 /*!< オリジナルキー配置 / Mode for original keyset commands */
21 #define KEYMAP_MODE_ROGUE 1 /*!< ローグライクキー配置 / Mode for roguelike keyset commands */
22 #define KEYMAP_MODES 2 /*!< キー配置の数 / Number of keymap modes */
24 #define SCREEN_BUF_MAX_SIZE (4 * 65536) /*!< Max size of screen dump buffer */
27 #define CHEAT_OBJECT 0
28 #define CHEAT_MONSTER 1
29 #define CHEAT_DUNGEON 2
33 * Max numbers of macro trigger names
35 #define MAX_MACRO_MOD 12
36 #define MAX_MACRO_TRIG 200 /*!< 登録を許すマクロ(トリガー)の最大数 */
41 * Old variables for object flags such as flags1, flags2, and flags3
42 * are obsolated. Now single array flgs[TR_FLAG_SIZE] contains all
43 * object flags. And each flag is refered by single index number
44 * instead of a bit mask.
46 * Therefore it's very easy to add a lot of new flags; no one need to
47 * worry about in which variable a new flag should be put, nor to
48 * modify a huge number of files all over the source directory at once
49 * to add new flag variables such as flags4, a_ability_flags1, etc...
51 * All management of flags is now treated using a set of macros
52 * instead of bit operations.
53 * Note: These macros are using division, modulo, and bit shift
54 * operations, and it seems that these operations are rather slower
55 * than original bit operation. But since index numbers are almost
56 * always given as constant, such slow operations are performed in the
57 * compile time. So there is no problem on the speed.
59 * Exceptions of new flag management is a set of flags to control
60 * object generation and the curse flags. These are not yet rewritten
61 * in new index form; maybe these have no merit of rewriting.
64 #define have_flag(ARRAY, INDEX) !!((ARRAY)[(INDEX)/32] & (1L << ((INDEX)%32)))
65 #define add_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] |= (1L << ((INDEX)%32)))
66 #define remove_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] &= ~(1L << ((INDEX)%32)))
67 #define is_pval_flag(INDEX) ((TR_STR <= (INDEX) && (INDEX) <= TR_MAGIC_MASTERY) || (TR_STEALTH <= (INDEX) && (INDEX) <= TR_BLOWS))
68 #define have_pval_flags(ARRAY) !!((ARRAY)[0] & (0x00003f7f))
71 Language selection macro
74 #define _(JAPANESE,ENGLISH) (JAPANESE)
76 #define _(JAPANESE,ENGLISH) (ENGLISH)
80 * Initialization flags
82 #define INIT_NAME_ONLY 0x01
83 #define INIT_SHOW_TEXT 0x02
84 #define INIT_ASSIGN 0x04
85 #define INIT_CREATE_DUNGEON 0x08
86 #define INIT_ONLY_FEATURES 0x10
87 #define INIT_ONLY_BUILDINGS 0x20
92 typedef struct tag_type
99 * An entry for the object/monster allocation functions
101 * Pass 1 is determined from allocation information
102 * Pass 2 is determined from allocation restriction
103 * Pass 3 is determined from allocation calculation
106 typedef struct alloc_entry alloc_entry;
110 KIND_OBJECT_IDX index; /* The actual index */
112 DEPTH level; /* Base dungeon level */
113 PROB prob1; /* Probability, pass 1 */
114 PROB prob2; /* Probability, pass 2 */
115 PROB prob3; /* Probability, pass 3 */
117 u16b total; /* Unused for now */
120 extern u32b message__next;
121 extern u32b message__last;
122 extern u32b message__head;
123 extern u32b message__tail;
124 extern u32b *message__ptr;
125 extern char *message__buf;
127 extern bool msg_flag;
129 extern s16b macro__num;
130 extern concptr *macro__pat;
131 extern concptr *macro__act;
132 extern bool *macro__cmd;
133 extern char *macro__buf;
135 extern bool get_com_no_macros;
137 extern bool inkey_base;
138 extern bool inkey_xtra;
139 extern bool inkey_scan;
140 extern bool inkey_flag;
142 extern bool use_menu;
144 extern pos_list tmp_pos;
146 extern STR_OFFSET quark__num;
147 extern concptr *quark__str;
149 * Automatically generated "variable" declarations
151 extern int max_macrotrigger;
152 extern concptr macro_template;
153 extern concptr macro_modifier_chr;
154 extern concptr macro_modifier_name[MAX_MACRO_MOD];
155 extern concptr macro_trigger_name[MAX_MACRO_TRIG];
156 extern concptr macro_trigger_keycode[2][MAX_MACRO_TRIG];
158 extern COMMAND_CODE command_cmd;
159 extern COMMAND_ARG command_arg;
160 extern s16b command_rep;
161 extern DIRECTION command_dir;
162 extern s16b command_see;
163 extern TERM_LEN command_gap;
164 extern s16b command_wrk;
165 extern s16b command_new;
167 extern concptr keymap_act[KEYMAP_MODES][256];
170 * @brief 銘情報の最大数 / Maximum number of "quarks" (see "io.c")
172 * Default: assume at most 512 different inscriptions are used<br>
173 * Was 512... 256 quarks added for random artifacts<br>
175 #define QUARK_MAX 768
178 * OPTION: Maximum number of messages to remember (see "io.c")
179 * Default: assume maximal memorization of 2048 total messages
181 #define MESSAGE_MAX 81920
184 * OPTION: Maximum space for the message text buffer (see "io.c")
185 * Default: assume that each of the 2048 messages is repeated an
186 * average of three times, and has an average length of 48
188 #define MESSAGE_BUF 655360
191 * Hack -- The main "screen"
193 #define term_screen (angband_term[0])
196 * Hack -- conditional (or "bizarre") externs
200 extern void user_name(char *buf, int id);
204 extern int usleep(huge usecs);
207 #if defined(MACH_O_CARBON)
208 extern void fsetfileinfo(concptr path, u32b fcreator, u32b ftype);
211 #if defined(MACH_O_CARBON)
214 extern u32b _fcreator;
218 * Hack -- force definitions -- see fd_seek()
231 * Hack -- force definitions -- see fd_lock()
243 extern const char hexsym[16];
245 // todo ファイル処理関数・メッセージ処理関数・画面病が関数で最低限分割する.
246 extern errr path_parse(char *buf, int max, concptr file);
247 extern errr path_build(char *buf, int max, concptr path, concptr file);
248 extern FILE *my_fopen(concptr file, concptr mode);
249 extern FILE *my_fopen_temp(char *buf, int max);
250 extern errr my_fgets(FILE *fff, char *buf, huge n);
251 extern errr my_fputs(FILE *fff, concptr buf, huge n);
252 extern errr my_fclose(FILE *fff);
253 extern errr fd_kill(concptr file);
254 extern errr fd_move(concptr file, concptr what);
255 extern errr fd_copy(concptr file, concptr what);
256 extern int fd_make(concptr file, BIT_FLAGS mode);
257 extern int fd_open(concptr file, int flags);
258 extern errr fd_lock(int fd, int what);
259 extern errr fd_seek(int fd, huge n);
260 extern errr fd_chop(int fd, huge n);
261 extern errr fd_read(int fd, char *buf, huge n);
262 extern errr fd_write(int fd, concptr buf, huge n);
263 extern errr fd_close(int fd);
264 extern void flush(void);
265 extern void bell(void);
266 extern errr play_music(int type, int num);
267 extern void select_floor_music(player_type *player_ptr);
268 extern void sound(int num);
269 extern void move_cursor(int row, int col);
270 extern void text_to_ascii(char *buf, concptr str);
271 extern void ascii_to_text(char *buf, concptr str);
272 extern errr macro_add(concptr pat, concptr act);
273 extern sint macro_find_exact(concptr pat);
274 extern char inkey(void);
275 extern concptr quark_str(STR_OFFSET num);
276 extern void quark_init(void);
277 extern u16b quark_add(concptr str);
278 extern s32b message_num(void);
279 extern concptr message_str(int age);
280 extern void message_add(concptr msg);
281 extern void msg_erase(void);
282 extern void msg_print(concptr msg);
283 extern void msg_print_wizard(int cheat_type, concptr msg);
285 extern void msg_format(concptr fmt, ...);
286 extern void msg_format_wizard(int cheat_type, concptr fmt, ...);
288 extern void screen_save();
289 extern void screen_load();
290 extern void c_put_str(TERM_COLOR attr, concptr str, TERM_LEN row, TERM_LEN col);
291 extern void put_str(concptr str, TERM_LEN row, TERM_LEN col);
292 extern void c_prt(TERM_COLOR attr, concptr str, TERM_LEN row, TERM_LEN col);
293 extern void prt(concptr str, TERM_LEN row, TERM_LEN col);
294 extern void c_roff(TERM_COLOR attr, concptr str);
295 extern void roff(concptr str);
296 extern void clear_from(int row);
297 extern bool askfor_aux(char *buf, int len, bool numpad_cursor);
298 extern bool askfor(char *buf, int len);
299 extern bool get_string(concptr prompt, char *buf, int len);
302 * Bit flags for control of get_check_strict()
304 #define CHECK_OKAY_CANCEL 0x01
305 #define CHECK_NO_ESCAPE 0x02
306 #define CHECK_NO_HISTORY 0x04
307 #define CHECK_DEFAULT_Y 0x08
308 extern bool get_check(concptr prompt);
309 extern bool get_check_strict(concptr prompt, BIT_FLAGS mode);
311 extern bool get_com(concptr prompt, char *command, bool z_escape);
312 extern QUANTITY get_quantity(concptr prompt, QUANTITY max);
313 extern void pause_line(int row);
314 extern void request_command(player_type *player_ptr, int shopping);
315 extern bool is_a_vowel(int ch);
316 extern int get_keymap_dir(char ch);
317 extern errr type_string(concptr str, uint len);
318 extern void roff_to_buf(concptr str, int wlen, char *tbuf, size_t bufsize);
320 extern void tag_sort(tag_type elements[], int number);
322 extern byte gamma_table[256];
323 extern void build_gamma_table(int gamma);
325 extern size_t my_strcpy(char *buf, concptr src, size_t bufsize);
326 extern size_t my_strcat(char *buf, concptr src, size_t bufsize);
327 extern char *my_strstr(concptr haystack, concptr needle);
328 extern char *my_strchr(concptr ptr, char ch);
329 extern void str_tolower(char *str);
332 * Special key code used for inkey_special()
334 #define SKEY_MOD_MASK 0x0f00
335 #define SKEY_MOD_SHIFT 0x0100
336 #define SKEY_MOD_CONTROL 0x0200
338 #define SKEY_MASK 0xf000
339 #define SKEY_DOWN 0xf001
340 #define SKEY_LEFT 0xf002
341 #define SKEY_RIGHT 0xf003
342 #define SKEY_UP 0xf004
343 #define SKEY_PGUP 0xf005
344 #define SKEY_PGDOWN 0xf006
345 #define SKEY_TOP 0xf007
346 #define SKEY_BOTTOM 0xf008
347 extern int inkey_special(bool numpad_cursor);
350 extern void repeat_push(COMMAND_CODE what);
351 extern bool repeat_pull(COMMAND_CODE *what);
352 extern void repeat_check(void);