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