4 * Copyright (c) 1997 Ben Harrison
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.
11 #ifndef INCLUDED_Z_TERM_H
12 #define INCLUDED_Z_TERM_H
18 * A term_win is a "window" for a Term
20 * - Cursor Useless/Visible codes
21 * - Cursor Location (see "Useless")
23 * - Array[h] -- Access to the attribute array
24 * - Array[h] -- Access to the character array
26 * - Array[h*w] -- Attribute array
27 * - Array[h*w] -- Character array
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]
33 typedef struct term_win term_win;
56 * An actual "term" structure
58 * - Extra "user" info (used by application)
60 * - Extra "data" info (used by implementation)
64 * An extra "user" flag (used by application)
68 * An extra "data" flag (used by implementation)
71 * - Flag "active_flag"
72 * This "term" is "active"
74 * - Flag "mapped_flag"
75 * This "term" is "mapped"
77 * - Flag "total_erase"
78 * This "term" should be fully erased
80 * - Flag "fixed_shape"
81 * This "term" is not allowed to resize
83 * - Flag "icky_corner"
84 * This "term" has an "icky" corner grid
86 * - Flag "soft_cursor"
87 * This "term" uses a "software" cursor
89 * - Flag "always_pict"
90 * Use the "Term_pict()" routine for all text
92 * - Flag "higher_pict"
93 * Use the "Term_pict()" routine for special text
95 * - Flag "always_text"
96 * Use the "Term_text()" routine for invisible text
98 * - Flag "unused_flag"
99 * Reserved for future use
101 * - Flag "never_bored"
102 * Never call the "TERM_XTRA_BORED" action
104 * - Flag "never_frosh"
105 * Never call the "TERM_XTRA_FROSH" action
108 * - Value "attr_blank"
109 * Use this "attr" value for "blank" grids
111 * - Value "char_blank"
112 * Use this "char" value for "blank" grids
115 * - Ignore this pointer
117 * - Keypress Queue -- various data
119 * - Keypress Queue -- pending keys
122 * - Window Width (max 255)
123 * - Window Height (max 255)
125 * - Minimum modified row
126 * - Maximum modified row
128 * - Minimum modified column (per row)
129 * - Maximum modified column (per row)
132 * - Displayed screen image
133 * - Requested screen image
135 * - Temporary screen image
136 * - Memorized screen image
139 * - Hook for init-ing the term
140 * - Hook for nuke-ing the term
142 * - Hook for user actions
144 * - Hook for extra actions
146 * - Hook for placing the cursor
148 * - Hook for drawing some blank spaces
150 * - Hook for drawing a string of chars using an attr
152 * - Hook for drawing a sequence of special attr/char pairs
155 typedef struct term term;
205 void (*init_hook)(term *t);
206 void (*nuke_hook)(term *t);
208 errr (*user_hook)(int n);
210 errr (*xtra_hook)(int n, int v);
212 errr (*curs_hook)(int x, int y);
214 errr (*bigcurs_hook)(int x, int y);
216 errr (*wipe_hook)(int x, int y, int n);
218 errr (*text_hook)(int x, int y, int n, byte a, cptr s);
220 void (*resize_hook)(void);
222 errr (*pict_hook)(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp);
231 /**** Available Constants ****/
235 * Definitions for the "actions" of "Term_xtra()"
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.
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
249 * The other actions do not need a "v" code, so "zero" is used.
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) */
270 /**** Available Variables ****/
275 /**** Available Functions ****/
277 extern errr Term_user(int n);
278 extern errr Term_xtra(int n, int v);
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);
283 extern void Term_queue_line(int x, int y, int n, byte *a, char *c, byte *ta, char *tc);
285 extern void Term_queue_chars(int x, int y, int n, byte a, cptr s);
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);
297 extern errr Term_putstr_v(int x, int y, int n, byte a, cptr s);
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);
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);
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);
314 extern errr Term_save(void);
315 extern errr Term_load(void);
317 extern errr Term_exchange(void);
319 extern errr Term_resize(int w, int h);
321 extern errr Term_activate(term *t);
323 extern errr term_nuke(term *t);
324 extern errr term_init(term *t, int w, int h, int k);