OSDN Git Service

Add Doxygen comment to monster1.c.
[hengband/hengband.git] / src / tmp / z-term.h
1 /* File: z-term.h */
2
3 /*
4  * Copyright (c) 1997 Ben Harrison
5  *
6  * This software may be copied and distributed for educational, research,
7  * and not for profit purposes provided that this copyright and statement
8  * are included in all such copies.
9  */
10
11 #ifndef INCLUDED_Z_TERM_H
12 #define INCLUDED_Z_TERM_H
13
14 #include "h-basic.h"
15
16
17 /*
18  * A term_win is a "window" for a Term
19  *
20  *      - Cursor Useless/Visible codes
21  *      - Cursor Location (see "Useless")
22  *
23  *      - Array[h] -- Access to the attribute array
24  *      - Array[h] -- Access to the character array
25  *
26  *      - Array[h*w] -- Attribute array
27  *      - Array[h*w] -- Character array
28  *
29  * Note that the attr/char pair at (x,y) is a[y][x]/c[y][x]
30  * and that the row of attr/chars at (0,y) is a[y]/c[y]
31  */
32
33 typedef struct term_win term_win;
34
35 struct term_win
36 {
37         bool cu, cv;
38         byte cx, cy;
39
40         byte **a;
41         char **c;
42
43         byte *va;
44         char *vc;
45
46         byte **ta;
47         char **tc;
48
49         byte *vta;
50         char *vtc;
51 };
52
53
54
55 /*
56  * An actual "term" structure
57  *
58  *      - Extra "user" info (used by application)
59  *
60  *      - Extra "data" info (used by implementation)
61  *
62  *
63  *      - Flag "user_flag"
64  *        An extra "user" flag (used by application)
65  *
66  *
67  *      - Flag "data_flag"
68  *        An extra "data" flag (used by implementation)
69  *
70  *
71  *      - Flag "active_flag"
72  *        This "term" is "active"
73  *
74  *      - Flag "mapped_flag"
75  *        This "term" is "mapped"
76  *
77  *      - Flag "total_erase"
78  *        This "term" should be fully erased
79  *
80  *      - Flag "fixed_shape"
81  *        This "term" is not allowed to resize
82  *
83  *      - Flag "icky_corner"
84  *        This "term" has an "icky" corner grid
85  *
86  *      - Flag "soft_cursor"
87  *        This "term" uses a "software" cursor
88  *
89  *      - Flag "always_pict"
90  *        Use the "Term_pict()" routine for all text
91  *
92  *      - Flag "higher_pict"
93  *        Use the "Term_pict()" routine for special text
94  *
95  *      - Flag "always_text"
96  *        Use the "Term_text()" routine for invisible text
97  *
98  *      - Flag "unused_flag"
99  *        Reserved for future use
100  *
101  *      - Flag "never_bored"
102  *        Never call the "TERM_XTRA_BORED" action
103  *
104  *      - Flag "never_frosh"
105  *        Never call the "TERM_XTRA_FROSH" action
106  *
107  *
108  *      - Value "attr_blank"
109  *        Use this "attr" value for "blank" grids
110  *
111  *      - Value "char_blank"
112  *        Use this "char" value for "blank" grids
113  *
114  *
115  *      - Ignore this pointer
116  *
117  *      - Keypress Queue -- various data
118  *
119  *      - Keypress Queue -- pending keys
120  *
121  *
122  *      - Window Width (max 255)
123  *      - Window Height (max 255)
124  *
125  *      - Minimum modified row
126  *      - Maximum modified row
127  *
128  *      - Minimum modified column (per row)
129  *      - Maximum modified column (per row)
130  *
131  *
132  *      - Displayed screen image
133  *      - Requested screen image
134  *
135  *      - Temporary screen image
136  *      - Memorized screen image
137  *
138  *
139  *      - Hook for init-ing the term
140  *      - Hook for nuke-ing the term
141  *
142  *      - Hook for user actions
143  *
144  *      - Hook for extra actions
145  *
146  *      - Hook for placing the cursor
147  *
148  *      - Hook for drawing some blank spaces
149  *
150  *      - Hook for drawing a string of chars using an attr
151  *
152  *      - Hook for drawing a sequence of special attr/char pairs
153  */
154
155 typedef struct term term;
156
157 struct term
158 {
159         vptr user;
160
161         vptr data;
162
163         bool user_flag;
164
165         bool data_flag;
166
167         bool active_flag;
168         bool mapped_flag;
169         bool total_erase;
170         bool fixed_shape;
171         bool icky_corner;
172         bool soft_cursor;
173         bool always_pict;
174         bool higher_pict;
175         bool always_text;
176         bool unused_flag;
177         bool never_bored;
178         bool never_frosh;
179
180         byte attr_blank;
181         char char_blank;
182
183         char *key_queue;
184
185         u16b key_head;
186         u16b key_tail;
187         u16b key_xtra;
188         u16b key_size;
189
190         byte wid;
191         byte hgt;
192
193         byte y1;
194         byte y2;
195
196         byte *x1;
197         byte *x2;
198
199         term_win *old;
200         term_win *scr;
201
202         term_win *tmp;
203         term_win *mem;
204
205         void (*init_hook)(term *t);
206         void (*nuke_hook)(term *t);
207
208         errr (*user_hook)(int n);
209
210         errr (*xtra_hook)(int n, int v);
211
212         errr (*curs_hook)(int x, int y);
213
214         errr (*bigcurs_hook)(int x, int y);
215
216         errr (*wipe_hook)(int x, int y, int n);
217
218         errr (*text_hook)(int x, int y, int n, byte a, cptr s);
219
220         void (*resize_hook)(void);
221
222         errr (*pict_hook)(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp);
223 };
224
225
226
227
228
229
230
231 /**** Available Constants ****/
232
233
234 /*
235  * Definitions for the "actions" of "Term_xtra()"
236  *
237  * These values may be used as the first parameter of "Term_xtra()",
238  * with the second parameter depending on the "action" itself.  Many
239  * of the actions shown below are optional on at least one platform.
240  *
241  * The "TERM_XTRA_EVENT" action uses "v" to "wait" for an event
242  * The "TERM_XTRA_SHAPE" action uses "v" to "show" the cursor
243  * The "TERM_XTRA_FROSH" action uses "v" for the index of the row
244  * The "TERM_XTRA_SOUND" action uses "v" for the index of a sound
245  * The "TERM_XTRA_ALIVE" action uses "v" to "activate" (or "close")
246  * The "TERM_XTRA_LEVEL" action uses "v" to "resume" (or "suspend")
247  * The "TERM_XTRA_DELAY" action uses "v" as a "millisecond" value
248  *
249  * The other actions do not need a "v" code, so "zero" is used.
250  */
251 #define TERM_XTRA_EVENT 1       /* Process some pending events */
252 #define TERM_XTRA_FLUSH 2       /* Flush all pending events */
253 #define TERM_XTRA_CLEAR 3       /* Clear the entire window */
254 #define TERM_XTRA_SHAPE 4       /* Set cursor shape (optional) */
255 #define TERM_XTRA_FROSH 5       /* Flush one row (optional) */
256 #define TERM_XTRA_FRESH 6       /* Flush all rows (optional) */
257 #define TERM_XTRA_NOISE 7       /* Make a noise (optional) */
258 #define TERM_XTRA_SOUND 8       /* Make a sound (optional) */
259 #define TERM_XTRA_BORED 9       /* Handle stuff when bored (optional) */
260 #define TERM_XTRA_REACT 10      /* React to global changes (optional) */
261 #define TERM_XTRA_ALIVE 11      /* Change the "hard" level (optional) */
262 #define TERM_XTRA_LEVEL 12      /* Change the "soft" level (optional) */
263 #define TERM_XTRA_DELAY 13      /* Delay some milliseconds (optional) */
264 #define TERM_XTRA_MUSIC_BASIC 14   /* Play a music(basic)   (optional) */
265 #define TERM_XTRA_MUSIC_DUNGEON 15 /* Play a music(dungeon) (optional) */
266 #define TERM_XTRA_MUSIC_QUEST 16   /* Play a music(quest)   (optional) */
267 #define TERM_XTRA_MUSIC_TOWN 17    /* Play a music(floor)   (optional) */
268
269
270 /**** Available Variables ****/
271
272 extern term *Term;
273
274
275 /**** Available Functions ****/
276
277 extern errr Term_user(int n);
278 extern errr Term_xtra(int n, int v);
279
280 extern void Term_queue_char(int x, int y, byte a, char c, byte ta, char tc);
281 extern void Term_queue_bigchar(int x, int y, byte a, char c, byte ta, char tc);
282
283 extern void Term_queue_line(int x, int y, int n, byte *a, char *c, byte *ta, char *tc);
284
285 extern void Term_queue_chars(int x, int y, int n, byte a, cptr s);
286
287 extern errr Term_fresh(void);
288 extern errr Term_set_cursor(int v);
289 extern errr Term_gotoxy(int x, int y);
290 extern errr Term_draw(int x, int y, byte a, char c);
291 extern errr Term_addch(byte a, char c);
292 extern errr Term_add_bigch(byte a, char c);
293 extern errr Term_addstr(int n, byte a, cptr s);
294 extern errr Term_putch(int x, int y, byte a, char c);
295 extern errr Term_putstr(int x, int y, int n, byte a, cptr s);
296 #ifdef JP
297 extern errr Term_putstr_v(int x, int y, int n, byte a, cptr s);
298 #endif
299 extern errr Term_erase(int x, int y, int n);
300 extern errr Term_clear(void);
301 extern errr Term_redraw(void);
302 extern errr Term_redraw_section(int x1, int y1, int x2, int y2);
303
304 extern errr Term_get_cursor(int *v);
305 extern errr Term_get_size(int *w, int *h);
306 extern errr Term_locate(int *x, int *y);
307 extern errr Term_what(int x, int y, byte *a, char *c);
308
309 extern errr Term_flush(void);
310 extern errr Term_keypress(int k);
311 extern errr Term_key_push(int k);
312 extern errr Term_inkey(char *ch, bool wait, bool take);
313
314 extern errr Term_save(void);
315 extern errr Term_load(void);
316
317 extern errr Term_exchange(void);
318
319 extern errr Term_resize(int w, int h);
320
321 extern errr Term_activate(term *t);
322
323 extern errr term_nuke(term *t);
324 extern errr term_init(term *t, int w, int h, int k);
325
326
327 #endif
328
329