OSDN Git Service

shrink mine
[nethackexpress/trunk.git] / include / mactty.h
1 /*      SCCS Id: @(#)mactty.h   3.4     1993/03/01      */
2 /* Copyright (c) Jon W{tte 1993.                                        */
3 /* NetHack may be freely redistributed.  See license for details.       */
4
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  * (preferrably using monospaced fonts) - it does NOT remember the strings
9  * sent to it; rather, it uses an offscreen bitmap.
10  *
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.
15  *
16  * (c) Copyright 1993 Jon W{tte
17  */
18
19 /*
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.
27  *
28  * void * my_config_ptr = * ( void * * ) GetWRefCon ( tty_window ) ;
29  */
30
31 /*
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.
36  *
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.
40  */
41
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 !TARGET_API_MAC_CARBON
48 # include <windows.h>
49 #endif
50
51 /*
52  * Error code returned when it's probably our fault, or
53  * bad parameters.
54  */
55 #define general_failure 1
56
57 /*
58  * Base resource id's for window types
59  */
60 #define WIN_BASE_RES 128
61 #define WIN_BASE_KIND 128
62
63 /*
64  * Commonly used characters
65  */
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)
74
75 extern char game_active;        /* flag to window rendering routines not to use ppat */
76 /*
77  * If you want some fancy operations that not a normal TTY device normally
78  * supports, use EXTENDED_SUPPORT. For frames, area erases and area scrolls,
79  * plus bitmap graphics - RESOLUTION DEPENDENT, be sure to call
80  * get_tty_metrics and use those limits.
81  */
82 #define EXTENDED_SUPPORT 0
83 /*
84  * if you print a lot of single characters, accumulating each one in a
85  * clipping region will take too much time. Instead, define this, which
86  * will clip in rects.
87  */
88 #define CLIP_RECT_ONLY 1
89
90 typedef enum tty_attrib {
91
92 /*
93  * Flags relating to the general functioning of the window.
94  * These flags are passed at create_tty time, and changing them
95  * later will clear the screen.
96  */
97         TTY_ATTRIB_FLAGS ,
98 /*
99  * When using proportional fonts, this will place each character
100  * separately, ensuring aligned columns (but looking ugly and taking
101  * time)
102  */
103 # define TA_MOVE_EACH_CHAR 1L
104 /*
105  * This means draw each change as it occurs instead of collecting the area
106  * and draw it all at once at update_tty() - slower, but more reliable.
107  */
108 # define TA_ALWAYS_REFRESH 2L
109 /*
110  * When reaching the right end, we either just stop drawing, or wrap to the
111  * next line.
112  */
113 # define TA_WRAP_AROUND 4L
114 /*
115  * Overstrike means that characters are added on top of each other; i e don't
116  * clear the letter beneath. This is faster, using srcOr under QuickDraw
117  */
118 # define TA_OVERSTRIKE 8L
119 /*
120  * We may want the window not to scroll when we reach the end line,
121  * but stop drawing instead.
122  */
123 # define TA_INHIBIT_VERT_SCROLL 16L
124
125 /*
126  * Foreground and background colors. These only affect characters
127  * drawn by subsequent calls; not what's already there (but it does
128  * affect clears)
129  * On b/w screens these do nothing.
130  */
131         TTY_ATTRIB_FOREGROUND ,
132         TTY_ATTRIB_BACKGROUND ,
133 # define TA_RGB_TO_TTY(r) ((((long)((r).red>>8)&0xff)<<16)+\
134         (((long)((r).green>>8)&0xff)<<8)+((long)((r).blue>>8)&0xff))
135
136 /*
137  * Attributes relating to the cursor, and character set mappings
138  */
139         TTY_ATTRIB_CURSOR ,
140 /*
141  * Blinking cursor is more noticeable when it's idle
142  */
143 # define TA_BLINKING_CURSOR 1L
144 /*
145  * When handling input, do we echo characters as they are typed?
146  */
147 # define TA_ECHO_INPUT 2L
148 /*
149  * Do we return each character code separately, or map delete etc? Note
150  * that non-raw input means getchar won't return anything until the user
151  * has typed a return.
152  */
153 # define TA_RAW_INPUT 4L
154 /*
155  * Do we print every character as it is (including BS, NL and CR!) or do
156  * do we interpret characters such as NL, BS and CR?
157  */
158 # define TA_RAW_OUTPUT 8L
159 /*
160  * When getting a NL, do we also move to the left?
161  */
162 # define TA_NL_ADD_CR 16L
163 /*
164  * When getting a CR, do we also move down?
165  */
166 # define TA_CR_ADD_NL 32L
167 /*
168  * Wait for input or return what we've got?
169  */
170 # define TA_NONBLOCKING_IO 64L
171
172 /*
173  * Use this macro to cast a function pointer to a tty attribute; this will help
174  * portability to systems where a function pointer doesn't fit in a long
175  */
176 # define TA_ATTRIB_FUNC(x) ((long)(x))
177
178 /*
179  * This symbolic constant is used to check the number of attributes
180  */
181         TTY_NUMBER_ATTRIBUTES
182
183 } tty_attrib ;
184
185 /*
186  * Character returned by end-of-file condition
187  */
188 # define TTY_EOF -1
189
190
191 /*
192  * Create the window according to a resource WIND template.
193  * The window pointer pointed to by window should be NULL to
194  * allocate the window record dynamically, or point to a
195  * WindowRecord structure already allocated.
196  *
197  * Passing in_color means you have to be sure there's color support;
198  * on the Mac, this means 32bit QuickDraw present, else it will
199  * crash. Not passing in_color means everything's rendered in
200  * black & white.
201  */
202 extern short create_tty ( WindowPtr * window , short resource_id ,
203         Boolean in_color ) ;
204
205 /*
206  * Use init_tty_name or init_tty_number to initialize a window
207  * once allocated by create_tty. Size parameters are in characters.
208  */
209
210 extern short init_tty_number ( WindowPtr window , short font_number ,
211         short font_size , short x_size , short y_size ) ;
212
213 /*
214  * Close and deallocate a window and its data
215  */
216 extern short destroy_tty ( WindowPtr window ) ;
217
218 /*
219  * Change the font and font size used in the window for drawing after
220  * the calls are made. To change the coordinate system, be sure to call
221  * force_tty_coordinate_system_recalc() - else it may look strange if
222  * the new font doesn't match the old one.
223  */
224 extern short set_tty_font_name (winid window_type , char * name ) ;
225 extern short force_tty_coordinate_system_recalc ( WindowPtr window ) ;
226
227 /*
228  * Getting some metrics about the tty and its drawing.
229  */
230 extern short get_tty_metrics ( WindowPtr window , short * x_size ,
231         short * y_size , short * x_size_pixels , short * y_size_pixels ,
232         short * font_number , short * font_size ,
233         short * char_width , short * row_height ) ;
234
235 /*
236  * The basic move cursor function. 0,0 is topleft.
237  */
238 extern short move_tty_cursor ( WindowPtr window , short x_pos ,
239         short y_pos ) ;
240
241 /*
242  * Flush all changes done to a tty to the screen (see TA_ALWAYS_UPDATE above)
243  */
244 extern short update_tty ( WindowPtr window ) ;
245
246 /*
247  * Add a character to the tty and update the cursor position
248  */
249 extern short add_tty_char ( WindowPtr window , short character ) ;
250
251 /*
252  * Add a string of characters to the tty and update the cursor
253  * position. The string is 0-terminated!
254  */
255 extern short add_tty_string ( WindowPtr window , const char * string ) ;
256
257 /*
258  * Change or read an attribute of the tty. Note that some attribute changes
259  * may clear the screen. See the above enum and defines for values.
260  * Attributes can be both function pointers and special flag values.
261  */
262 extern short get_tty_attrib ( WindowPtr window , tty_attrib attrib ,
263         long * value ) ;
264 extern short set_tty_attrib ( WindowPtr window , tty_attrib attrib ,
265         long value ) ;
266
267 /*
268  * Scroll the actual TTY image, in characters, positive means up/left
269  * scroll_tty ( my_tty , 0 , 1 ) means a linefeed. Is always carried out
270  * directly, regardless of the wait-update setting. Does updates before
271  * scrolling.
272  */
273 extern short scroll_tty ( WindowPtr window , short delta_x ,
274         short delta_y ) ;
275
276 /*
277  * Erase the offscreen bitmap and move the cursor to 0,0. Re-init some window
278  * values (font etc) Is always carried out directly on-screen, regardless of
279  * the wait-for-update setting. Clears update area.
280  */
281 extern short clear_tty ( WindowPtr window ) ;
282
283 /*
284  * Call this routine with a window (always _mt_window) and a time (usually
285  * from most recent event) to determine if cursor in window should be blinked
286  */
287 extern short blink_cursor ( WindowPtr window , long when ) ;
288
289 /*
290  * For screen dumps, open the printer port and call this function. Can be used
291  * for clipboard as well (only for a PICT, though; this library doesn't concern
292  * itself with characters, just bitmaps)
293  */
294 extern short image_tty ( EventRecord *theEvent, WindowPtr window ) ;
295
296 /*
297  * For erasing just an area of characters
298  */
299 extern short clear_tty_window ( WindowPtr window , short from_row ,
300         short from_col , short to_row , short to_col ) ;
301
302 /*
303  * get and set the invalid region of the main window
304  */
305  extern short get_invalid_region (WindowPtr window, Rect *inval_rect);
306  extern short set_invalid_region (WindowPtr window, Rect *inval_rect);
307  
308 /*
309  * Now in macsnd.c, which seemed like a good place
310  */
311 extern void tty_nhbell ();
312
313 #if EXTENDED_SUPPORT
314
315 /*
316  * Various versions of delete character/s, insert line/s etc can be handled by
317  * this general-purpose function. Negative num_ means delete, positive means
318  * insert, and you can never be sure which of row and col operations come first
319  * if you specify both...
320  */
321 extern short mangle_tty_rows_columns ( WindowPtr window ,
322         short from_row , short num_rows , short from_col , short num_cols ) ;
323
324 /*
325  * For framing an area without using grahpics characters.
326  * Note that the given limits are those used for framing, you should not
327  * draw in them. frame_fatness should typically be 1-5, and may be clipped
328  * if it is too large.
329  */
330 extern short frame_tty_window ( WindowPtr window , short from_row ,
331         short from_col , short to_row , short to_col , short frame_fatness ) ;
332
333 /*
334  * For inverting specific characters after the fact. May look funny in color.
335  */
336 extern short invert_tty_window ( WindowPtr window , short from_row ,
337         short from_col , short to_row , short to_col ) ;
338
339 /*
340  * For drawing lines on the tty - VERY DEVICE DEPENDENT. Use get_tty_metrics.
341  */
342 extern short draw_tty_line ( WindowPtr window , short from_x ,
343         short from_y , short to_x , short to_y ) ;
344
345 #endif /* EXTENDED_SUPPORT */
346
347 #endif /* _H_tty_public */