Source:Mactty.h

Below is the full text to include/mactty.h from NetHack 3.4.3. To link to a particular line, write [[mactty.h#line123 ]], for example. 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   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 */