Wikihack
Advertisement

Below is the full text to mactty.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/mactty.h#line123]], for example.

The latest source code for vanilla NetHack is at Source code.


The NetHack General Public License applies to screenshots, source code and other content from NetHack.
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 */
Advertisement