Source:SLASH'EM 0.0.7E7F2/mactty.h

From NetHackWiki
Jump to navigation Jump to search

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 [[Source:SLASH'EM 0.0.7E7F2/mactty.h#line123]], for example.

Source code for vanilla NetHack is at Source code.


The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

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 */