1/*	SCCS Id: @(#)wintty.h	3.4	1996/02/18	*/
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 */
14typedef 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 */
26struct WinDesc {
27    int flags;			/* window flags */
28    xchar type;			/* type of window */
29    boolean active;		/* true if window is active */
30    uchar offx, offy;		/* offset from topleft of display */
31    short rows, cols;		/* dimensions */
32    short curx, cury;		/* current cursor position */
33    short 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    short plist_size;		/* size of allocated plist (MENU) */
42    short npages;		/* number of pages in menu (MENU) */
43    short 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
52/* descriptor for tty-based displays -- all the per-display data */
53struct DisplayDesc {
54    uchar rows, cols;		/* width and height of tty display */
55    uchar curx, cury;		/* current cursor position on the screen */
56#ifdef TEXTCOLOR
57    int color;			/* current color */
58#endif
59    int attrs;			/* attributes in effect */
60    int toplin;			/* flag for topl stuff */
61    int rawprint;		/* number of raw_printed lines since synch */
62    int inmore;			/* non-zero if more() is active */
63    int inread;			/* non-zero if reading a character */
64    int intr;			/* non-zero if inread was interrupted */
65    winid lastwin;		/* last window used for I/O */
66    char dismiss_more;		/* extra character accepted at --More-- */
67};
68
69#endif /* WINDOW_STRUCTS */
70
71#define MAXWIN 20		/* maximum number of windows, cop-out */
72
73/* tty dependent window types */
74#ifdef NHW_BASE
75#undef NHW_BASE
76#endif
77#define NHW_BASE    6
78
79extern struct window_procs tty_procs;
80
81/* port specific variable declarations */
82extern winid BASE_WINDOW;
83
84extern struct WinDesc *wins[MAXWIN];
85
86extern struct DisplayDesc *ttyDisplay;	/* the tty display descriptor */
87
88extern char morc;		/* last character typed to xwaitforspace */
89extern char defmorestr[];	/* default --more-- prompt */
90
91/* port specific external function references */
92
93/* ### getline.c ### */
94E void FDECL(xwaitforspace, (const char *));
95
96/* ### termcap.c, video.c ### */
97
98E void FDECL(tty_startup,(int*, int*));
99#ifndef NO_TERMS
100E void NDECL(tty_shutdown);
101#endif
102#if defined(apollo)
103/* Apollos don't widen old-style function definitions properly -- they try to
104 * be smart and use the prototype, or some such strangeness.  So we have to
105 * define UNWIDENDED_PROTOTYPES (in tradstdc.h), which makes CHAR_P below a
106 * char.  But the tputs termcap call was compiled as if xputc's argument
107 * actually would be expanded.	So here, we have to make an exception. */
108E void FDECL(xputc, (int));
109#else
110E void FDECL(xputc, (CHAR_P));
111#endif
112E void FDECL(xputs, (const char *));
113#if defined(SCREEN_VGA) || defined(SCREEN_8514)
114E void FDECL(xputg, (int, int, unsigned));
115#endif
116E void NDECL(cl_end);
117E void NDECL(clear_screen);
118E void NDECL(home);
119E void NDECL(standoutbeg);
120E void NDECL(standoutend);
121# if 0
122E void NDECL(revbeg);
123E void NDECL(boldbeg);
124E void NDECL(blinkbeg);
125E void NDECL(dimbeg);
126E void NDECL(m_end);
127# endif
128E void NDECL(backsp);
129E void NDECL(graph_on);
130E void NDECL(graph_off);
131E void NDECL(cl_eos);
132
133/*
134 * termcap.c (or facsimiles in other ports) is the right place for doing
135 * strange and arcane things such as outputting escape sequences to select
136 * a color or whatever.  wintty.c should concern itself with WHERE to put
137 * stuff in a window.
138 */
139E void FDECL(term_start_attr,(int attr));
140E void FDECL(term_end_attr,(int attr));
141E void NDECL(term_start_raw_bold);
142E void NDECL(term_end_raw_bold);
143
144#ifdef TEXTCOLOR
145E void NDECL(term_end_color);
146E void FDECL(term_start_color,(int color));
147E int FDECL(has_color,(int color));
148#endif /* TEXTCOLOR */
149
150
151/* ### topl.c ### */
152
153E void FDECL(addtopl, (const char *));
154E void NDECL(more);
155E void FDECL(update_topl, (const char *));
156E void FDECL(putsyms, (const char*));
157
158/* ### wintty.c ### */
159#ifdef CLIPPING
160E void NDECL(setclipped);
161#endif
162E void FDECL(docorner, (int, int));
163E void NDECL(end_glyphout);
164E void FDECL(g_putch, (int));
165E void NDECL(win_tty_init);
166
167/* external declarations */
168E void FDECL(tty_init_nhwindows, (int *, char **));
169E void NDECL(tty_player_selection);
170E void NDECL(tty_askname);
171E void NDECL(tty_get_nh_event) ;
172E void FDECL(tty_exit_nhwindows, (const char *));
173E void FDECL(tty_suspend_nhwindows, (const char *));
174E void NDECL(tty_resume_nhwindows);
175E winid FDECL(tty_create_nhwindow, (int));
176E void FDECL(tty_clear_nhwindow, (winid));
177E void FDECL(tty_display_nhwindow, (winid, BOOLEAN_P));
178E void FDECL(tty_dismiss_nhwindow, (winid));
179E void FDECL(tty_destroy_nhwindow, (winid));
180E void FDECL(tty_curs, (winid,int,int));
181E void FDECL(tty_putstr, (winid, int, const char *));
182E void FDECL(tty_display_file, (const char *, BOOLEAN_P));
183E void FDECL(tty_start_menu, (winid));
184E void FDECL(tty_add_menu, (winid,int,const ANY_P *,
185			CHAR_P,CHAR_P,int,const char *, BOOLEAN_P));
186E void FDECL(tty_end_menu, (winid, const char *));
187E int FDECL(tty_select_menu, (winid, int, MENU_ITEM_P **));
188E char FDECL(tty_message_menu, (CHAR_P,int,const char *));
189E void NDECL(tty_update_inventory);
190E void NDECL(tty_mark_synch);
191E void NDECL(tty_wait_synch);
192#ifdef CLIPPING
193E void FDECL(tty_cliparound, (int, int));
194#endif
195#ifdef POSITIONBAR
196E void FDECL(tty_update_positionbar, (char *));
197#endif
198E void FDECL(tty_print_glyph, (winid,XCHAR_P,XCHAR_P,int));
199E void FDECL(tty_raw_print, (const char *));
200E void FDECL(tty_raw_print_bold, (const char *));
201E int NDECL(tty_nhgetch);
202E int FDECL(tty_nh_poskey, (int *, int *, int *));
203E void NDECL(tty_nhbell);
204E int NDECL(tty_doprev_message);
205E char FDECL(tty_yn_function, (const char *, const char *, CHAR_P));
206E void FDECL(tty_getlin, (const char *,char *));
207E int NDECL(tty_get_ext_cmd);
208E void FDECL(tty_number_pad, (int));
209E void NDECL(tty_delay_output);
210#ifdef CHANGE_COLOR
211E void FDECL(tty_change_color,(int color,long rgb,int reverse));
212#ifdef MAC
213E void FDECL(tty_change_background,(int white_or_black));
214E short FDECL(set_tty_font_name, (winid, char *));
215#endif
216E char * NDECL(tty_get_color_string);
217#endif
218
219/* other defs that really should go away (they're tty specific) */
220E void NDECL(tty_start_screen);
221E void NDECL(tty_end_screen);
222
223E void FDECL(genl_outrip, (winid,int));
224
225#ifdef NO_TERMS
226# ifdef MAC
227#  ifdef putchar
228#   undef putchar
229#   undef putc
230#  endif
231#  define putchar term_putc
232#  define fflush term_flush
233#  define puts term_puts
234E int FDECL(term_putc, (int c));
235E int FDECL(term_flush, (void *desc));
236E int FDECL(term_puts, (const char *str));
237# endif /* MAC */
238# if defined(MSDOS) || defined(WIN32CON)
239#  if defined(SCREEN_BIOS) || defined(SCREEN_DJGPPFAST) || defined(WIN32CON)
240#   undef putchar
241#   undef putc
242#   undef puts
243#   define putchar(x) xputc(x)	/* these are in video.c, nttty.c */
244#   define putc(x) xputc(x)
245#   define puts(x) xputs(x)
246#  endif/*SCREEN_BIOS || SCREEN_DJGPPFAST || WIN32CON */
247#  ifdef POSITIONBAR
248E void FDECL(video_update_positionbar, (char *));
249#  endif
250# endif/*MSDOS*/
251#endif/*NO_TERMS*/
252
253#undef E
254
255#endif /* WINTTY_H */
256