1 /* NetHack 3.6 wintty.h $NHDT-Date: 1558330405 2019/05/20 05:33:25 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.34 $ */ 2 /* Copyright (c) David Cohrs, 1991,1992 */ 3 /* NetHack may be freely redistributed. See license for details. */ 4 5 #ifndef WINTTY_H 6 #define WINTTY_H 7 8 #define E extern 9 10 #ifndef WINDOW_STRUCTS 11 #define WINDOW_STRUCTS 12 13 /* menu structure */ 14 typedef struct tty_mi { 15 struct tty_mi *next; 16 anything identifier; /* user identifier */ 17 long count; /* user count */ 18 char *str; /* description string (including accelerator) */ 19 int attr; /* string attribute */ 20 boolean selected; /* TRUE if selected by user */ 21 char selector; /* keyboard accelerator */ 22 char gselector; /* group accelerator */ 23 } tty_menu_item; 24 25 /* descriptor for tty-based windows */ 26 struct WinDesc { 27 int flags; /* window flags */ 28 xchar type; /* type of window */ 29 boolean active; /* true if window is active */ 30 short offx, offy; /* offset from topleft of display */ 31 long rows, cols; /* dimensions */ 32 long curx, cury; /* current cursor position */ 33 long maxrow, maxcol; /* the maximum size used -- for MENU wins */ 34 /* maxcol is also used by WIN_MESSAGE for */ 35 /* tracking the ^P command */ 36 short *datlen; /* allocation size for *data */ 37 char **data; /* window data [row][column] */ 38 char *morestr; /* string to display instead of default */ 39 tty_menu_item *mlist; /* menu information (MENU) */ 40 tty_menu_item **plist; /* menu page pointers (MENU) */ 41 long plist_size; /* size of allocated plist (MENU) */ 42 long npages; /* number of pages in menu (MENU) */ 43 long nitems; /* total number of items (MENU) */ 44 short how; /* menu mode - pick 1 or N (MENU) */ 45 char menu_ch; /* menu char (MENU) */ 46 }; 47 48 /* window flags */ 49 #define WIN_CANCELLED 1 50 #define WIN_STOP 1 /* for NHW_MESSAGE; stops output */ 51 #define WIN_LOCKHISTORY 2 /* for NHW_MESSAGE; suppress history updates */ 52 53 /* descriptor for tty-based displays -- all the per-display data */ 54 struct DisplayDesc { 55 short rows, cols; /* width and height of tty display */ 56 short curx, cury; /* current cursor position on the screen */ 57 #ifdef TEXTCOLOR 58 int color; /* current color */ 59 #endif 60 int attrs; /* attributes in effect */ 61 int toplin; /* flag for topl stuff */ 62 int rawprint; /* number of raw_printed lines since synch */ 63 int inmore; /* non-zero if more() is active */ 64 int inread; /* non-zero if reading a character */ 65 int intr; /* non-zero if inread was interrupted */ 66 winid lastwin; /* last window used for I/O */ 67 char dismiss_more; /* extra character accepted at --More-- */ 68 }; 69 70 #endif /* WINDOW_STRUCTS */ 71 72 #ifdef STATUS_HILITES 73 struct tty_status_fields { 74 int idx; 75 int color; 76 int attr; 77 int x, y; 78 size_t lth; 79 boolean valid; 80 boolean dirty; 81 boolean redraw; 82 boolean sanitycheck; /* was 'last_in_row' */ 83 }; 84 #endif 85 86 #define MAXWIN 20 /* maximum number of windows, cop-out */ 87 88 /* tty dependent window types */ 89 #ifdef NHW_BASE 90 #undef NHW_BASE 91 #endif 92 #define NHW_BASE 6 93 94 extern struct window_procs tty_procs; 95 96 /* port specific variable declarations */ 97 extern winid BASE_WINDOW; 98 99 extern struct WinDesc *wins[MAXWIN]; 100 101 extern struct DisplayDesc *ttyDisplay; /* the tty display descriptor */ 102 103 extern char morc; /* last character typed to xwaitforspace */ 104 extern char defmorestr[]; /* default --more-- prompt */ 105 106 /* port specific external function references */ 107 108 /* ### getline.c ### */ 109 E void FDECL(xwaitforspace, (const char *)); 110 111 /* ### termcap.c, video.c ### */ 112 113 E void FDECL(tty_startup, (int *, int *)); 114 #ifndef NO_TERMS 115 E void NDECL(tty_shutdown); 116 #endif 117 E int FDECL(xputc, (int)); 118 E void FDECL(xputs, (const char *)); 119 #if defined(SCREEN_VGA) || defined(SCREEN_8514) 120 E void FDECL(xputg, (int, int, unsigned)); 121 #endif 122 E void NDECL(cl_end); 123 E void NDECL(clear_screen); 124 E void NDECL(home); 125 E void NDECL(standoutbeg); 126 E void NDECL(standoutend); 127 #if 0 128 E void NDECL(revbeg); 129 E void NDECL(boldbeg); 130 E void NDECL(blinkbeg); 131 E void NDECL(dimbeg); 132 E void NDECL(m_end); 133 #endif 134 E void NDECL(backsp); 135 E void NDECL(graph_on); 136 E void NDECL(graph_off); 137 E void NDECL(cl_eos); 138 139 /* 140 * termcap.c (or facsimiles in other ports) is the right place for doing 141 * strange and arcane things such as outputting escape sequences to select 142 * a color or whatever. wintty.c should concern itself with WHERE to put 143 * stuff in a window. 144 */ 145 E int FDECL(term_attr_fixup, (int)); 146 E void FDECL(term_start_attr, (int attr)); 147 E void FDECL(term_end_attr, (int attr)); 148 E void NDECL(term_start_raw_bold); 149 E void NDECL(term_end_raw_bold); 150 151 #ifdef TEXTCOLOR 152 E void NDECL(term_end_color); 153 E void FDECL(term_start_color, (int color)); 154 E int FDECL(has_color, (int color)); 155 #endif /* TEXTCOLOR */ 156 157 /* ### topl.c ### */ 158 159 E void FDECL(show_topl, (const char *)); 160 E void NDECL(remember_topl); 161 E void FDECL(addtopl, (const char *)); 162 E void NDECL(more); 163 E void FDECL(update_topl, (const char *)); 164 E void FDECL(putsyms, (const char *)); 165 166 /* ### wintty.c ### */ 167 #ifdef CLIPPING 168 E void NDECL(setclipped); 169 #endif 170 E void FDECL(docorner, (int, int)); 171 E void NDECL(end_glyphout); 172 E void FDECL(g_putch, (int)); 173 E void FDECL(win_tty_init, (int)); 174 175 /* external declarations */ 176 E void FDECL(tty_init_nhwindows, (int *, char **)); 177 E void FDECL(tty_preference_update, (const char *)); 178 E void NDECL(tty_player_selection); 179 E void NDECL(tty_askname); 180 E void NDECL(tty_get_nh_event); 181 E void FDECL(tty_exit_nhwindows, (const char *)); 182 E void FDECL(tty_suspend_nhwindows, (const char *)); 183 E void NDECL(tty_resume_nhwindows); 184 E winid FDECL(tty_create_nhwindow, (int)); 185 E void FDECL(tty_clear_nhwindow, (winid)); 186 E void FDECL(tty_display_nhwindow, (winid, BOOLEAN_P)); 187 E void FDECL(tty_dismiss_nhwindow, (winid)); 188 E void FDECL(tty_destroy_nhwindow, (winid)); 189 E void FDECL(tty_curs, (winid, int, int)); 190 E void FDECL(tty_putstr, (winid, int, const char *)); 191 E void FDECL(tty_display_file, (const char *, BOOLEAN_P)); 192 E void FDECL(tty_start_menu, (winid)); 193 E void FDECL(tty_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int, 194 const char *, BOOLEAN_P)); 195 E void FDECL(tty_end_menu, (winid, const char *)); 196 E int FDECL(tty_select_menu, (winid, int, MENU_ITEM_P **)); 197 E char FDECL(tty_message_menu, (CHAR_P, int, const char *)); 198 E void NDECL(tty_update_inventory); 199 E void NDECL(tty_mark_synch); 200 E void NDECL(tty_wait_synch); 201 #ifdef CLIPPING 202 E void FDECL(tty_cliparound, (int, int)); 203 #endif 204 #ifdef POSITIONBAR 205 E void FDECL(tty_update_positionbar, (char *)); 206 #endif 207 E void FDECL(tty_print_glyph, (winid, XCHAR_P, XCHAR_P, int, int)); 208 E void FDECL(tty_raw_print, (const char *)); 209 E void FDECL(tty_raw_print_bold, (const char *)); 210 E int NDECL(tty_nhgetch); 211 E int FDECL(tty_nh_poskey, (int *, int *, int *)); 212 E void NDECL(tty_nhbell); 213 E int NDECL(tty_doprev_message); 214 E char FDECL(tty_yn_function, (const char *, const char *, CHAR_P)); 215 E void FDECL(tty_getlin, (const char *, char *)); 216 E int NDECL(tty_get_ext_cmd); 217 E void FDECL(tty_number_pad, (int)); 218 E void NDECL(tty_delay_output); 219 #ifdef CHANGE_COLOR 220 E void FDECL(tty_change_color, (int color, long rgb, int reverse)); 221 #ifdef MAC 222 E void FDECL(tty_change_background, (int white_or_black)); 223 E short FDECL(set_tty_font_name, (winid, char *)); 224 #endif 225 E char *NDECL(tty_get_color_string); 226 #endif 227 E void FDECL(tty_status_enablefield, 228 (int, const char *, const char *, BOOLEAN_P)); 229 E void NDECL(tty_status_init); 230 E void FDECL(tty_status_update, (int, genericptr_t, int, int, int, unsigned long *)); 231 232 /* other defs that really should go away (they're tty specific) */ 233 E void NDECL(tty_start_screen); 234 E void NDECL(tty_end_screen); 235 236 E void FDECL(genl_outrip, (winid, int, time_t)); 237 238 E char *FDECL(tty_getmsghistory, (BOOLEAN_P)); 239 E void FDECL(tty_putmsghistory, (const char *, BOOLEAN_P)); 240 241 #ifdef NO_TERMS 242 #ifdef MAC 243 #ifdef putchar 244 #undef putchar 245 #undef putc 246 #endif 247 #define putchar term_putc 248 #define fflush term_flush 249 #define puts term_puts 250 E int FDECL(term_putc, (int c)); 251 E int FDECL(term_flush, (void *desc)); 252 E int FDECL(term_puts, (const char *str)); 253 #endif /* MAC */ 254 #if defined(MSDOS) || defined(WIN32) 255 #if defined(SCREEN_BIOS) || defined(SCREEN_DJGPPFAST) || defined(WIN32) 256 #undef putchar 257 #undef putc 258 #undef puts 259 #define putchar(x) xputc(x) /* these are in video.c, nttty.c */ 260 #define putc(x) xputc(x) 261 #define puts(x) xputs(x) 262 #endif /*SCREEN_BIOS || SCREEN_DJGPPFAST || WIN32 */ 263 #ifdef POSITIONBAR 264 E void FDECL(video_update_positionbar, (char *)); 265 #endif 266 #endif /*MSDOS*/ 267 #endif /*NO_TERMS*/ 268 269 #undef E 270 271 #endif /* WINTTY_H */ 272