diff --git a/include/wintty.h b/include/wintty.h new file mode 100644 index 000000000..430dda172 --- /dev/null +++ b/include/wintty.h @@ -0,0 +1,255 @@ +/* SCCS Id: @(#)wintty.h 3.3 96/02/18 */ +/* Copyright (c) David Cohrs, 1991,1992 */ +/* NetHack may be freely redistributed. See license for details. */ + +#ifndef WINTTY_H +#define WINTTY_H + +#define E extern + +#ifndef WINDOW_STRUCTS +#define WINDOW_STRUCTS + +/* menu structure */ +typedef struct tty_mi { + struct tty_mi *next; + anything identifier; /* user identifier */ + long count; /* user count */ + char *str; /* description string (including accelerator) */ + int attr; /* string attribute */ + boolean selected; /* TRUE if selected by user */ + char selector; /* keyboard accelerator */ + char gselector; /* group accelerator */ +} tty_menu_item; + +/* descriptor for tty-based windows */ +struct WinDesc { + int flags; /* window flags */ + xchar type; /* type of window */ + boolean active; /* true if window is active */ + uchar offx, offy; /* offset from topleft of display */ + short rows, cols; /* dimensions */ + short curx, cury; /* current cursor position */ + short maxrow, maxcol; /* the maximum size used -- for MENU wins */ + /* maxcol is also used by WIN_MESSAGE for */ + /* tracking the ^P command */ + short *datlen; /* allocation size for *data */ + char **data; /* window data [row][column] */ + char *morestr; /* string to display instead of default */ + tty_menu_item *mlist; /* menu information (MENU) */ + tty_menu_item **plist; /* menu page pointers (MENU) */ + short plist_size; /* size of allocated plist (MENU) */ + short npages; /* number of pages in menu (MENU) */ + short nitems; /* total number of items (MENU) */ + short how; /* menu mode - pick 1 or N (MENU) */ + char menu_ch; /* menu char (MENU) */ +}; + +/* window flags */ +#define WIN_CANCELLED 1 +#define WIN_STOP 1 /* for NHW_MESSAGE; stops output */ + +/* descriptor for tty-based displays -- all the per-display data */ +struct DisplayDesc { + uchar rows, cols; /* width and height of tty display */ + uchar curx, cury; /* current cursor position on the screen */ +#ifdef TEXTCOLOR + int color; /* current color */ +#endif + int attrs; /* attributes in effect */ + int toplin; /* flag for topl stuff */ + int rawprint; /* number of raw_printed lines since synch */ + int inmore; /* non-zero if more() is active */ + int inread; /* non-zero if reading a character */ + int intr; /* non-zero if inread was interrupted */ + winid lastwin; /* last window used for I/O */ + char dismiss_more; /* extra character accepted at --More-- */ +}; + +#endif /* WINDOW_STRUCTS */ + +#define MAXWIN 20 /* maximum number of windows, cop-out */ + +/* tty dependent window types */ +#ifdef NHW_BASE +#undef NHW_BASE +#endif +#define NHW_BASE 6 + +extern struct window_procs tty_procs; + +/* port specific variable declarations */ +extern winid BASE_WINDOW; + +extern struct WinDesc *wins[MAXWIN]; + +extern struct DisplayDesc *ttyDisplay; /* the tty display descriptor */ + +extern char morc; /* last character typed to xwaitforspace */ +extern char defmorestr[]; /* default --more-- prompt */ + +/* port specific external function references */ + +/* ### getline.c ### */ +E void FDECL(xwaitforspace, (const char *)); + +/* ### termcap.c, video.c ### */ + +E void FDECL(tty_startup,(int*, int*)); +#ifndef NO_TERMS +E void NDECL(tty_shutdown); +#endif +#if defined(apollo) +/* Apollos don't widen old-style function definitions properly -- they try to + * be smart and use the prototype, or some such strangeness. So we have to + * define UNWIDENDED_PROTOTYPES (in tradstdc.h), which makes CHAR_P below a + * char. But the tputs termcap call was compiled as if xputc's argument + * actually would be expanded. So here, we have to make an exception. */ +E void FDECL(xputc, (int)); +#else +E void FDECL(xputc, (CHAR_P)); +#endif +E void FDECL(xputs, (const char *)); +#if defined(SCREEN_VGA) || defined(SCREEN_8514) +E void FDECL(xputg, (int, int, unsigned)); +#endif +E void NDECL(cl_end); +E void NDECL(clear_screen); +E void NDECL(home); +E void NDECL(standoutbeg); +E void NDECL(standoutend); +# if 0 +E void NDECL(revbeg); +E void NDECL(boldbeg); +E void NDECL(blinkbeg); +E void NDECL(dimbeg); +E void NDECL(m_end); +# endif +E void NDECL(backsp); +E void NDECL(graph_on); +E void NDECL(graph_off); +E void NDECL(cl_eos); + +/* + * termcap.c (or facsimiles in other ports) is the right place for doing + * strange and arcane things such as outputting escape sequences to select + * a color or whatever. wintty.c should concern itself with WHERE to put + * stuff in a window. + */ +E void FDECL(term_start_attr,(int attr)); +E void FDECL(term_end_attr,(int attr)); +E void NDECL(term_start_raw_bold); +E void NDECL(term_end_raw_bold); + +#ifdef TEXTCOLOR +E void NDECL(term_end_color); +E void FDECL(term_start_color,(int color)); +E int FDECL(has_color,(int color)); +#endif /* TEXTCOLOR */ + + +/* ### topl.c ### */ + +E void FDECL(addtopl, (const char *)); +E void NDECL(more); +E void FDECL(update_topl, (const char *)); +E void FDECL(putsyms, (const char*)); + +/* ### wintty.c ### */ +#ifdef CLIPPING +E void NDECL(setclipped); +#endif +E void FDECL(docorner, (int, int)); +E void NDECL(end_glyphout); +E void FDECL(g_putch, (int)); +E void NDECL(win_tty_init); + +/* external declarations */ +E void FDECL(tty_init_nhwindows, (int *, char **)); +E void NDECL(tty_player_selection); +E void NDECL(tty_askname); +E void NDECL(tty_get_nh_event) ; +E void FDECL(tty_exit_nhwindows, (const char *)); +E void FDECL(tty_suspend_nhwindows, (const char *)); +E void NDECL(tty_resume_nhwindows); +E winid FDECL(tty_create_nhwindow, (int)); +E void FDECL(tty_clear_nhwindow, (winid)); +E void FDECL(tty_display_nhwindow, (winid, BOOLEAN_P)); +E void FDECL(tty_dismiss_nhwindow, (winid)); +E void FDECL(tty_destroy_nhwindow, (winid)); +E void FDECL(tty_curs, (winid,int,int)); +E void FDECL(tty_putstr, (winid, int, const char *)); +E void FDECL(tty_display_file, (const char *, BOOLEAN_P)); +E void FDECL(tty_start_menu, (winid)); +E void FDECL(tty_add_menu, (winid,int,const ANY_P *, + CHAR_P,CHAR_P,int,const char *, BOOLEAN_P)); +E void FDECL(tty_end_menu, (winid, const char *)); +E int FDECL(tty_select_menu, (winid, int, MENU_ITEM_P **)); +E char FDECL(tty_message_menu, (CHAR_P,int,const char *)); +E void NDECL(tty_update_inventory); +E void NDECL(tty_mark_synch); +E void NDECL(tty_wait_synch); +#ifdef CLIPPING +E void FDECL(tty_cliparound, (int, int)); +#endif +#ifdef POSITIONBAR +E void FDECL(tty_update_positionbar, (char *)); +#endif +E void FDECL(tty_print_glyph, (winid,XCHAR_P,XCHAR_P,int)); +E void FDECL(tty_raw_print, (const char *)); +E void FDECL(tty_raw_print_bold, (const char *)); +E int NDECL(tty_nhgetch); +E int FDECL(tty_nh_poskey, (int *, int *, int *)); +E void NDECL(tty_nhbell); +E int NDECL(tty_doprev_message); +E char FDECL(tty_yn_function, (const char *, const char *, CHAR_P)); +E void FDECL(tty_getlin, (const char *,char *)); +E int NDECL(tty_get_ext_cmd); +E void FDECL(tty_number_pad, (int)); +E void NDECL(tty_delay_output); +#ifdef CHANGE_COLOR +E void FDECL(tty_change_color,(int color,long rgb,int reverse)); +#ifdef MAC +E void FDECL(tty_change_background,(int white_or_black)); +E short FDECL(set_tty_font_name, (winid, char *)); +#endif +E char * NDECL(tty_get_color_string); +#endif + +/* other defs that really should go away (they're tty specific) */ +E void NDECL(tty_start_screen); +E void NDECL(tty_end_screen); + +E void FDECL(genl_outrip, (winid,int)); + +#ifdef NO_TERMS +# ifdef MAC +# ifdef putchar +# undef putchar +# undef putc +# endif +# define putchar term_putc +# define fflush term_flush +# define puts term_puts +E int FDECL(term_putc, (int c)); +E int FDECL(term_flush, (void *desc)); +E int FDECL(term_puts, (const char *str)); +# endif /* MAC */ +# if defined(MSDOS) || defined(WIN32CON) +# if defined(SCREEN_BIOS) || defined(SCREEN_DJGPPFAST) || defined(WIN32CON) +# undef putchar +# undef putc +# undef puts +# define putchar(x) xputc(x) /* these are in video.c, nttty.c */ +# define putc(x) xputc(x) +# define puts(x) xputs(x) +# endif/*SCREEN_BIOS || SCREEN_DJGPPFAST || WIN32CON */ +# ifdef POSITIONBAR +E void FDECL(video_update_positionbar, (char *)); +# endif +# endif/*MSDOS*/ +#endif/*NO_TERMS*/ + +#undef E + +#endif /* WINTTY_H */