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