Occasionally remove maze dead ends, creating loops
[aNetHack.git] / include / mactty.h
blob733a548ce587f0550418baa4f20319057188024c
1 /* NetHack 3.6 mactty.h $NHDT-Date: 1447755970 2015/11/17 10:26:10 $ $NHDT-Branch: master $:$NHDT-Revision: 1.12 $ */
2 /* Copyright (c) Jon W{tte 1993. */
3 /* NetHack may be freely redistributed. See license for details. */
5 /*
6 * This header is the supported external interface for the "tty" window
7 * package. This package sports care-free handling of "dumb" tty windows
8 * (preferably using monospaced fonts) - it does NOT remember the strings
9 * sent to it; rather, it uses an offscreen bitmap.
11 * For best performance, make sure it is aligned on a 32-pixel boundary
12 * (or at least a 16-pixel one) in black & white. For 24bit color,
13 * alignment doesn't matter, and for 8-bit color, alignment to every
14 * fourth pixel is most efficient.
16 * (c) Copyright 1993 Jon W{tte
20 * You should really not poke in the structures used by the tty window.
21 * However, since it uses the wRefCon of windows (by calling GetWRefCon
22 * and SetWRefCon) you lose that possibility. If you still want to store
23 * information about a window, the FIRST location _pointed to_ by the
24 * wRefCon will be a void * that you can use for whatever reasons. Don't
25 * take the address of this variable and expect it to stay the same
26 * across calls to the tty window.
28 * void * my_config_ptr = * ( void * * ) GetWRefCon ( tty_window ) ;
32 * The library uses the window's port temporarily through SetPortBits;
33 * that means you shouldn't do any funky things to the clipping region
34 * etc. Actually, you shouldn't even resize the window, as that will clip
35 * new drawing.
37 * Also, if you use this library under Pascal, remember that the string
38 * passed to add_tty_string() is a "C" style string with NO length byte,
39 * and a terminating zero byte at the end instead.
42 #ifndef _H_tty_public
43 #define _H_tty_public
44 #undef red /* undef internal color const strings from decl */
45 #undef green
46 #undef blue
47 #if 1 /*!TARGET_API_MAC_CARBON*/
48 #include <windows.h>
49 #endif
52 * Error code returned when it's probably our fault, or
53 * bad parameters.
55 #define general_failure 1
58 * Base resource id's for window types
60 #define WIN_BASE_RES 128
61 #define WIN_BASE_KIND 128
64 * Commonly used characters
66 #define CHAR_ENTER ((char) 3)
67 #define CHAR_BELL ((char) 7)
68 #define CHAR_BS ((char) 8)
69 #define CHAR_LF ((char) 10)
70 #define CHAR_CR ((char) 13)
71 #define CHAR_ESC ((char) 27)
72 #define CHAR_BLANK ((char) 32)
73 #define CHAR_DELETE ((char) 127)
75 extern char game_active; /* flag to window rendering routines
76 not to use ppat */
78 * If you want some fancy operations that not a normal TTY device normally
79 * supports, use EXTENDED_SUPPORT. For frames, area erases and area scrolls,
80 * plus bitmap graphics - RESOLUTION DEPENDENT, be sure to call
81 * get_tty_metrics and use those limits.
83 #define EXTENDED_SUPPORT 0
85 * if you print a lot of single characters, accumulating each one in a
86 * clipping region will take too much time. Instead, define this, which
87 * will clip in rects.
89 #define CLIP_RECT_ONLY 1
91 typedef enum tty_attrib {
94 * Flags relating to the general functioning of the window.
95 * These flags are passed at create_tty time, and changing them
96 * later will clear the screen.
98 TTY_ATTRIB_FLAGS,
100 * When using proportional fonts, this will place each character
101 * separately, ensuring aligned columns (but looking ugly and taking
102 * time)
104 #define TA_MOVE_EACH_CHAR 1L
106 * This means draw each change as it occurs instead of collecting the area
107 * and draw it all at once at update_tty() - slower, but more reliable.
109 #define TA_ALWAYS_REFRESH 2L
111 * When reaching the right end, we either just stop drawing, or wrap to the
112 * next line.
114 #define TA_WRAP_AROUND 4L
116 * Overstrike means that characters are added on top of each other; i e don't
117 * clear the letter beneath. This is faster, using srcOr under QuickDraw
119 #define TA_OVERSTRIKE 8L
121 * We may want the window not to scroll when we reach the end line,
122 * but stop drawing instead.
124 #define TA_INHIBIT_VERT_SCROLL 16L
127 * Foreground and background colors. These only affect characters
128 * drawn by subsequent calls; not what's already there (but it does
129 * affect clears)
130 * On b/w screens these do nothing.
132 TTY_ATTRIB_FOREGROUND,
133 TTY_ATTRIB_BACKGROUND,
134 #define TA_RGB_TO_TTY(r) \
135 ((((long) ((r).red >> 8) & 0xff) << 16) \
136 + (((long) ((r).green >> 8) & 0xff) << 8) \
137 + ((long) ((r).blue >> 8) & 0xff))
140 * Attributes relating to the cursor, and character set mappings
142 TTY_ATTRIB_CURSOR,
144 * Blinking cursor is more noticeable when it's idle
146 #define TA_BLINKING_CURSOR 1L
148 * When handling input, do we echo characters as they are typed?
150 #define TA_ECHO_INPUT 2L
152 * Do we return each character code separately, or map delete etc? Note
153 * that non-raw input means getchar won't return anything until the user
154 * has typed a return.
156 #define TA_RAW_INPUT 4L
158 * Do we print every character as it is (including BS, NL and CR!) or do
159 * do we interpret characters such as NL, BS and CR?
161 #define TA_RAW_OUTPUT 8L
163 * When getting a NL, do we also move to the left?
165 #define TA_NL_ADD_CR 16L
167 * When getting a CR, do we also move down?
169 #define TA_CR_ADD_NL 32L
171 * Wait for input or return what we've got?
173 #define TA_NONBLOCKING_IO 64L
176 * Use this macro to cast a function pointer to a tty attribute; this will
177 * help portability to systems where a function pointer doesn't fit in a long
179 #define TA_ATTRIB_FUNC(x) ((long) (x))
182 * This symbolic constant is used to check the number of attributes
184 TTY_NUMBER_ATTRIBUTES
186 } tty_attrib;
189 * Character returned by end-of-file condition
191 #define TTY_EOF -1
194 * Create the window according to a resource WIND template.
195 * The window pointer pointed to by window should be NULL to
196 * allocate the window record dynamically, or point to a
197 * WindowRecord structure already allocated.
199 * Passing in_color means you have to be sure there's color support;
200 * on the Mac, this means 32bit QuickDraw present, else it will
201 * crash. Not passing in_color means everything's rendered in
202 * black & white.
204 extern short create_tty(WindowPtr *window, short resource_id,
205 Boolean in_color);
208 * Use init_tty_name or init_tty_number to initialize a window
209 * once allocated by create_tty. Size parameters are in characters.
212 extern short init_tty_number(WindowPtr window, short font_number,
213 short font_size, short x_size, short y_size);
216 * Close and deallocate a window and its data
218 extern short destroy_tty(WindowPtr window);
221 * Change the font and font size used in the window for drawing after
222 * the calls are made. To change the coordinate system, be sure to call
223 * force_tty_coordinate_system_recalc() - else it may look strange if
224 * the new font doesn't match the old one.
226 extern short set_tty_font_name(winid window_type, char *name);
227 extern short force_tty_coordinate_system_recalc(WindowPtr window);
230 * Getting some metrics about the tty and its drawing.
232 extern short get_tty_metrics(WindowPtr window, short *x_size, short *y_size,
233 short *x_size_pixels, short *y_size_pixels,
234 short *font_number, short *font_size,
235 short *char_width, short *row_height);
238 * The basic move cursor function. 0,0 is topleft.
240 extern short move_tty_cursor(WindowPtr window, short x_pos, short y_pos);
243 * Flush all changes done to a tty to the screen (see TA_ALWAYS_UPDATE above)
245 extern short update_tty(WindowPtr window);
248 * Add a character to the tty and update the cursor position
250 extern short add_tty_char(WindowPtr window, short character);
253 * Add a string of characters to the tty and update the cursor
254 * position. The string is 0-terminated!
256 extern short add_tty_string(WindowPtr window, const char *string);
259 * Change or read an attribute of the tty. Note that some attribute changes
260 * may clear the screen. See the above enum and defines for values.
261 * Attributes can be both function pointers and special flag values.
263 extern short get_tty_attrib(WindowPtr window, tty_attrib attrib, long *value);
264 extern short set_tty_attrib(WindowPtr window, tty_attrib attrib, long value);
267 * Scroll the actual TTY image, in characters, positive means up/left
268 * scroll_tty ( my_tty , 0 , 1 ) means a linefeed. Is always carried out
269 * directly, regardless of the wait-update setting. Does updates before
270 * scrolling.
272 extern short scroll_tty(WindowPtr window, short delta_x, short delta_y);
275 * Erase the offscreen bitmap and move the cursor to 0,0. Re-init some window
276 * values (font etc) Is always carried out directly on-screen, regardless of
277 * the wait-for-update setting. Clears update area.
279 extern short clear_tty(WindowPtr window);
282 * Call this routine with a window (always _mt_window) and a time (usually
283 * from most recent event) to determine if cursor in window should be blinked
285 extern short blink_cursor(WindowPtr window, long when);
288 * For screen dumps, open the printer port and call this function. Can be used
289 * for clipboard as well (only for a PICT, though; this library doesn't
290 * concern
291 * itself with characters, just bitmaps)
293 extern short image_tty(EventRecord *theEvent, WindowPtr window);
296 * For erasing just an area of characters
298 extern short clear_tty_window(WindowPtr window, short from_row,
299 short from_col, short to_row, short to_col);
302 * get and set the invalid region of the main window
304 extern short get_invalid_region(WindowPtr window, Rect *inval_rect);
305 extern short set_invalid_region(WindowPtr window, Rect *inval_rect);
308 * Now in macsnd.c, which seemed like a good place
310 extern void tty_nhbell();
312 #if EXTENDED_SUPPORT
315 * Various versions of delete character/s, insert line/s etc can be handled by
316 * this general-purpose function. Negative num_ means delete, positive means
317 * insert, and you can never be sure which of row and col operations come
318 * first
319 * if you specify both...
321 extern short mangle_tty_rows_columns(WindowPtr window, short from_row,
322 short num_rows, short from_col,
323 short num_cols);
326 * For framing an area without using grahpics characters.
327 * Note that the given limits are those used for framing, you should not
328 * draw in them. frame_fatness should typically be 1-5, and may be clipped
329 * if it is too large.
331 extern short frame_tty_window(WindowPtr window, short from_row,
332 short from_col, short to_row, short to_col,
333 short frame_fatness);
336 * For inverting specific characters after the fact. May look funny in color.
338 extern short invert_tty_window(WindowPtr window, short from_row,
339 short from_col, short to_row, short to_col);
342 * For drawing lines on the tty - VERY DEVICE DEPENDENT. Use get_tty_metrics.
344 extern short draw_tty_line(WindowPtr window, short from_x, short from_y,
345 short to_x, short to_y);
347 #endif /* EXTENDED_SUPPORT */
349 #endif /* _H_tty_public */