1 /* NetHack 3.7 wincurs.h */
2 /* Copyright (c) Karl Garrison, 2010. */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 #ifndef WINCURS_H
6 #define WINCURS_H
7 
8 /* Global declarations for curses interface */
9 
10 extern int term_rows, term_cols;   /* size of underlying terminal   */
11 extern int orig_cursor;            /* Preserve initial cursor state */
12 extern WINDOW *base_term;          /* underlying terminal window    */
13 extern boolean counting;           /* Count window is active        */
14 extern WINDOW *mapwin, *statuswin, *messagewin;    /* Main windows  */
15 
16 #define TEXTCOLOR   /* Allow color */
17 #define NHW_END 19
18 #define OFF 0
19 #define ON 1
20 #define NONE -1
21 #define KEY_ESC 0x1b
22 #define DIALOG_BORDER_COLOR CLR_MAGENTA
23 #define ALERT_BORDER_COLOR CLR_RED
24 #define SCROLLBAR_COLOR CLR_MAGENTA
25 #define SCROLLBAR_BACK_COLOR CLR_BLACK
26 #define HIGHLIGHT_COLOR CLR_WHITE
27 #define MORECOLOR CLR_ORANGE
28 #define STAT_UP_COLOR CLR_GREEN
29 #define STAT_DOWN_COLOR CLR_RED
30 #define MESSAGE_WIN 1
31 #define STATUS_WIN  2
32 #define MAP_WIN     3
33 #define INV_WIN     4
34 #define NHWIN_MAX   5
35 #define MESG_HISTORY_MAX   200
36 #if !defined(__APPLE__) || !defined(NCURSES_VERSION)
37 # define USE_DARKGRAY /* Allow "bright" black; delete if not visible */
38 #endif  /* !__APPLE__ && !PDCURSES */
39 #define CURSES_DARK_GRAY    17
40 #define MAP_SCROLLBARS
41 
42 #if !defined(A_LEFTLINE) && defined(A_LEFT)
43 #define A_LEFTLINE A_LEFT
44 #endif
45 #if !defined(A_RIGHTLINE) && defined(A_RIGHT)
46 #define A_RIGHTLINE A_RIGHT
47 #endif
48 
49 typedef enum orient_type
50 {
51     CENTER,
52     UP,
53     DOWN,
54     RIGHT,
55     LEFT,
56     UNDEFINED
57 } orient;
58 
59 #ifdef GCC_WARN
60 int wprintw(WINDOW *, const char *, ...) PRINTF_F(2, 3);
61 int mvwprintw(WINDOW *, int, int, const char *, ...) PRINTF_F(4, 5);
62 #endif
63 
64 /* cursmain.c */
65 
66 extern struct window_procs curses_procs;
67 
68 extern void curses_init_nhwindows(int* argcp, char** argv);
69 extern void curses_player_selection(void);
70 extern void curses_askname(void);
71 extern void curses_get_nh_event(void);
72 extern void curses_uncurse_terminal(void);
73 extern void curses_exit_nhwindows(const char *str);
74 extern void curses_suspend_nhwindows(const char *str);
75 extern void curses_resume_nhwindows(void);
76 extern winid curses_create_nhwindow(int type);
77 extern void curses_clear_nhwindow(winid wid);
78 extern void curses_display_nhwindow(winid wid, boolean block);
79 extern void curses_destroy_nhwindow(winid wid);
80 extern void curses_curs(winid wid, int x, int y);
81 extern void curses_putstr(winid wid, int attr, const char *text);
82 extern void curses_display_file(const char *filename, boolean must_exist);
83 extern void curses_start_menu(winid wid, unsigned long);
84 extern void curses_add_menu(winid wid, const glyph_info *,
85                             const ANY_P * identifier,
86                             char accelerator, char group_accel, int attr,
87                             const char *str, unsigned int itemflags);
88 extern void curses_end_menu(winid wid, const char *prompt);
89 extern int curses_select_menu(winid wid, int how, MENU_ITEM_P **selected);
90 extern void curses_update_inventory(int);
91 extern void curses_mark_synch(void);
92 extern void curses_wait_synch(void);
93 extern void curses_cliparound(int x, int y);
94 extern void curses_print_glyph(winid wid, xchar x, xchar y,
95                                 const glyph_info *, const glyph_info *);
96 extern void curses_raw_print(const char *str);
97 extern void curses_raw_print_bold(const char *str);
98 extern int curses_nhgetch(void);
99 extern int curses_nh_poskey(int *x, int *y, int *mod);
100 extern void curses_nhbell(void);
101 extern int curses_doprev_message(void);
102 extern char curses_yn_function(const char *question, const char *choices,
103                                char def);
104 extern void curses_getlin(const char *question, char *input);
105 extern int curses_get_ext_cmd(void);
106 extern void curses_number_pad(int state);
107 extern void curses_delay_output(void);
108 extern void curses_start_screen(void);
109 extern void curses_end_screen(void);
110 extern void curses_outrip(winid wid, int how, time_t when);
111 extern void genl_outrip(winid tmpwin, int how, time_t when);
112 extern void curses_preference_update(const char *pref);
113 extern void curs_reset_windows(boolean, boolean);
114 
115 /* curswins.c */
116 
117 extern WINDOW *curses_create_window(int width, int height, orient orientation);
118 extern void curses_destroy_win(WINDOW *win);
119 extern WINDOW *curses_get_nhwin(winid wid);
120 extern void curses_add_nhwin(winid wid, int height, int width, int y,
121                              int x, orient orientation, boolean border);
122 extern void curses_add_wid(winid wid);
123 extern void curses_refresh_nhwin(winid wid);
124 extern void curses_refresh_nethack_windows(void);
125 extern void curses_del_nhwin(winid wid);
126 extern void curses_del_wid(winid wid);
127 extern void curs_destroy_all_wins(void);
128 extern void curses_putch(winid wid, int x, int y, int ch,
129                          int color, int attrs);
130 extern void curses_get_window_size(winid wid, int *height, int *width);
131 extern boolean curses_window_has_border(winid wid);
132 extern boolean curses_window_exists(winid wid);
133 extern int curses_get_window_orientation(winid wid);
134 extern void curses_get_window_xy(winid wid, int *x, int *y);
135 extern void curses_puts(winid wid, int attr, const char *text);
136 extern void curses_clear_nhwin(winid wid);
137 extern void curses_alert_win_border(winid wid, boolean onoff);
138 extern void curses_alert_main_borders(boolean onoff);
139 extern void curses_draw_map(int sx, int sy, int ex, int ey);
140 extern boolean curses_map_borders(int *sx, int *sy, int *ex, int *ey,
141                                   int ux, int uy);
142 
143 /* cursmisc.c */
144 
145 extern int curses_read_char(void);
146 extern void curses_toggle_color_attr(WINDOW *win, int color, int attr,
147                                      int onoff);
148 extern void curses_menu_color_attr(WINDOW *, int, int, int);
149 extern void curses_bail(const char *mesg);
150 extern winid curses_get_wid(int type);
151 extern char *curses_copy_of(const char *s);
152 extern int curses_num_lines(const char *str, int width);
153 extern char *curses_break_str(const char *str, int width, int line_num);
154 extern char *curses_str_remainder(const char *str, int width, int line_num);
155 extern boolean curses_is_menu(winid wid);
156 extern boolean curses_is_text(winid wid);
157 extern int curses_convert_glyph(int ch, int glyph);
158 extern void curses_move_cursor(winid wid, int x, int y);
159 extern void curses_prehousekeeping(void);
160 extern void curses_posthousekeeping(void);
161 extern void curses_view_file(const char *filename, boolean must_exist);
162 extern void curses_rtrim(char *str);
163 extern int curses_get_count(int first_digit);
164 extern int curses_convert_attr(int attr);
165 extern int curses_read_attrs(const char *attrs);
166 extern char *curses_fmt_attrs(char *);
167 extern int curses_convert_keys(int key);
168 extern int curses_get_mouse(int *mousex, int *mousey, int *mod);
169 extern void curses_mouse_support(int);
170 
171 /* cursdial.c */
172 
173 extern void curses_line_input_dialog(const char *prompt,
174                                      char *answer, int buffer);
175 extern int curses_character_input_dialog(const char *prompt,
176                                          const char *choices, char def);
177 extern int curses_ext_cmd(void);
178 extern void curses_create_nhmenu(winid wid, unsigned long);
179 extern void curses_add_nhmenu_item(winid wid, const glyph_info *,
180                                    const ANY_P *identifier, char accelerator,
181                                    char group_accel, int attr,
182                                    const char *str, unsigned itemflags);
183 extern void curs_menu_set_bottom_heavy(winid);
184 extern void curses_finalize_nhmenu(winid wid, const char *prompt);
185 extern int curses_display_nhmenu(winid wid, int how, MENU_ITEM_P **_selected);
186 extern boolean curses_menu_exists(winid wid);
187 extern void curses_del_menu(winid, boolean);
188 
189 /* cursstat.c */
190 
191 extern void curses_status_init(void);
192 extern void curses_status_finish(void);
193 extern void curses_status_update(int, genericptr_t, int, int, int,
194                                  unsigned long *);
195 
196 /* cursinvt.c */
197 
198 extern void curs_purge_perminv_data(boolean);
199 extern void curs_update_invt(int);
200 extern void curs_add_invt(int, char, attr_t, const char *);
201 
202 /* cursinit.c */
203 
204 extern void curses_create_main_windows(void);
205 extern void curses_init_nhcolors(void);
206 extern void curses_choose_character(void);
207 extern int curses_character_dialog(const char **choices, const char *prompt);
208 extern void curses_init_options(void);
209 extern void curses_display_splash_window(void);
210 extern void curses_cleanup(void);
211 
212 /* cursmesg.c */
213 
214 extern void curses_message_win_puts(const char *message, boolean recursed);
215 extern void curses_got_input(void);
216 extern int curses_block(boolean require_tab); /* for MSGTYPE=STOP */
217 extern int curses_more(void);
218 extern void curses_clear_unhighlight_message_window(void);
219 extern void curses_message_win_getline(const char *prompt,
220                                        char *answer, int buffer);
221 extern void curses_last_messages(void);
222 extern void curses_init_mesg_history(void);
223 extern void curses_teardown_messages(void);
224 extern void curses_prev_mesg(void);
225 extern void curses_count_window(const char *count_text);
226 char *curses_getmsghistory(boolean);
227 void curses_putmsghistory(const char *, boolean);
228 
229 #endif  /* WINCURS_H */
230 
231