1 /* terminal control mode */
2 #ifdef msdos
3 #define conio
4 #define dosmouse
5 #endif
6 
7 
8 /* debug options */
9 #define dont_debug_keytrack
10 
11 #ifdef debug_keytrack
12 #define trace_keytrack(tag, c)	do_trace_keytrack (tag, c)
13 extern void do_trace_keytrack _((char * tag, unsigned long c));
14 #else
15 #define trace_keytrack(tag, c)
16 #endif
17 
18 
19 #define dont_debug_mouse
20 
21 #ifdef debug_mouse
22 #define trace_mouse(tag)	do_trace_mouse (tag)
23 extern void do_trace_mouse _((char * tag));
24 #else
25 #define trace_mouse(tag)
26 #endif
27 
28 
29 #define dont_debug_terminal_resize
30 
31 
32 /* options */
33 extern void mouse_button_event_mode _((FLAG report));
34 
35 
36 /* signal handling */
37 extern void catch_signals _((void));
38 extern void handle_interrupt _((int));
39 extern FLAG cansuspendmyself;
40 extern void suspendmyself _((void));
41 extern FLAG tty_closed;
42 extern FLAG hup;	/* set when SIGHUP is caught */
43 extern FLAG intr_char;	/* set when SIGINT is caught */
44 
45 /* i/o internal */
46 extern int input_fd;	/* terminal input file descriptor */
47 extern int output_fd;	/* terminal output file descriptor */
48 extern int inputreadyafter _((int msec));
49 
50 /* tty handling */
51 extern void raw_mode _((FLAG state));
52 extern void get_term _((char * TERM));
53 extern void getwinsize _((void));
54 
55 /* output handling */
56 extern void flush _((void));
57 extern void _putescape _((char * s));
58 extern void putescape _((char * s));
59 
60 /* terminal encoding detection */
61 #ifdef msdos
62 extern unsigned int get_codepage _((void));
63 #endif
64 
65 /* terminal screen mode handling */
66 #ifdef msdos
67 extern void set_video_lines _((int r));
68 	/* 0/1/2: 200/350/400 lines */
69 extern void set_grafmode_height _((int r, int l));
70 	/* 0/1/2: font height 8/14/16 ; 1/2/3/n: 14/25/43/n lines */
71 extern void set_fontbank _((int f));
72 	/* 0..7 */
73 #endif
74 extern void set_textmode_height _((int r));
75 	/* 0/1/2: font height 8/14/16 */
76 extern void set_font_height _((int r));
77 	/* set font height in character pixels, <= 32 */
78 extern void set_screen_mode _((int mode));
79 extern void maximize_restore_screen _((void));
80 extern void resize_font _((int inc));
81 extern void resize_the_screen _((FLAG sb, FLAG keep_columns));
82 extern void switch_textmode_height _((FLAG cycle));
83 	/* True: cycle through font heights 8/14/16
84 	   False: switch between font heights 8/16 */
85 
86 
87 /* terminal screen manipulation */
88 extern void clear_screen _((void));
89 extern void clear_eol _((void));
90 extern void erase_chars _((int));
91 extern void scroll_forward _((void));
92 extern void scroll_reverse _((void));
93 extern void add_line _((int));
94 extern void delete_line _((int));
95 extern void set_cursor _((int, int));
96 
97 /* terminal screen attributes handling */
98 extern void disp_normal _((void));
99 extern void disp_selected _((FLAG bg, FLAG border));
100 extern void disp_colour _((int, FLAG for_256_colours));
101 extern void disp_cursor _((FLAG));
102 extern void reverse_on _((void));
103 extern void reverse_off _((void));
104 extern void altcset_on _((void));
105 extern void altcset_off _((void));
106 extern void emph_on _((void));
107 extern void mark_on _((void));
108 extern void mark_off _((void));
109 extern void bold_on _((void));
110 extern void bold_off _((void));
111 extern void underline_on _((void));
112 extern void underline_off _((void));
113 extern void blink_on _((void));
114 extern void blink_off _((void));
115 extern void unidisp_on _((void));
116 extern void unidisp_off _((void));
117 extern void ctrldisp_on _((void));
118 extern void ctrldisp_off _((void));
119 extern void menudisp_on _((void));
120 extern void menudisp_off _((void));
121 extern void dispXML_attrib _((void));
122 extern void dispXML_value _((void));
123 extern void dispHTML_code _((void));
124 extern void dispHTML_jsp _((void));
125 extern void dispHTML_comment _((void));
126 extern void dispHTML_off _((void));
127 extern void specialdisp_on _((void));
128 extern void specialdisp_off _((void));
129 extern void combiningdisp_on _((void));
130 extern void combiningdisp_off _((void));
131 extern void diagdisp_on _((void));
132 extern void diagdisp_off _((void));
133 extern void disp_scrollbar_foreground _((void));
134 extern void disp_scrollbar_background _((void));
135 extern void disp_scrollbar_off _((void));
136 extern void menuheader_on _((void));
137 extern void menuheader_off _((void));
138 extern void menuborder_on _((void));
139 extern void menuborder_off _((void));
140 extern void menuitem_on _((void));
141 extern void menuitem_off _((void));
142 extern void set_colour_token _((int));
143 
144 extern char set_ansi7 [];
145 extern char restore_ansi7 [];
146 extern FLAG redefined_ansi7;
147 extern char set_ansi2 [];
148 extern char restore_ansi2 [];
149 extern FLAG redefined_ansi2;
150 extern char set_ansi3 [];
151 extern char restore_ansi3 [];
152 extern FLAG redefined_ansi3;
153 extern char set_curscolr [];
154 extern char restore_curscolr [];
155 extern FLAG redefined_curscolr;
156 
157 
158 /* screen output */
159 extern void clearscreen _((void));
160 extern void putstring _((char *));
161 extern void __putchar _((character));
162 extern void ring_bell _((void));
163 extern void putblockchar _((character));
164 
165 /* special attribute output support */
166 extern void put_menu_marker _((void));
167 extern void put_submenu_marker _((FLAG with_attr));
168 
169 /* screen attributes: ANSI sequences */
170 extern char * markansi;		/* line indicator marking (dim/red) */
171 extern char * emphansi;		/* status line emphasis mode (red bg) */
172 extern char * borderansi;	/* menu border colour (red) */
173 extern char * selansi;		/* menu selection */
174 extern char * selfgansi;	/* menu selection background */
175 extern char * ctrlansi;		/* control character display */
176 extern char * uniansi;		/* Unicode character display */
177 extern char * specialansi;	/* Unicode (lineend) marker display */
178 extern char * combiningansi;	/* combining character display */
179 extern char * menuansi;		/* menu line */
180 extern char * HTMLansi;		/* HTML display */
181 extern char * XMLattribansi;	/* HTML/XML attribute display */
182 extern char * XMLvalueansi;	/* HTML/XML value display */
183 extern char * diagansi;		/* dialog (bottom status) line */
184 extern char * scrollfgansi;	/* scrollbar foreground */
185 extern char * scrollbgansi;	/* scrollbar background */
186 
187 
188 /* input functions */
189 extern int __readchar _((void));
190 extern int __readchar_report_winchg _((void));
191 extern int get_digits _((int *));
192 extern int get_string_nokeymap _((char *, char *, FLAG, char *));
193 
194 /* basic keyboard to function mappings */
195 extern voidfunc key_map [256];
196 extern voidfunc mined_key_map [32];
197 extern voidfunc ws_key_map [32];
198 extern voidfunc pico_key_map [32];
199 extern voidfunc emacs_key_map [32];
200 extern voidfunc windows_key_map [32];
201 struct pc_fkeyentry {
202 	voidfunc fp;
203 	unsigned char fkeyshift;
204 };
205 extern struct pc_fkeyentry pc_xkey_map [512];
206 struct fkeyentry {
207 	char * fk;
208 	voidfunc fp;
209 	unsigned char fkeyshift;
210 };
211 extern void set_fkeymap _((char *));
212 
213 /* keyboard functions */
214 extern unsigned long readcharacter_allbuttons _((FLAG map_keyboard));
215 extern unsigned long readcharacter _((void));
216 extern unsigned long readcharacter_mapped _((void));
217 extern unsigned long readcharacter_unicode _((void));
218 extern unsigned long readcharacter_unicode_mapped _((void));
219 extern unsigned long _readchar_nokeymap _((void));
220 extern int read1byte _((void));
221 extern int char_ready_within _((int msec, char * debug_tag));
222 
223 
224 /* mouse handling */
225 extern void DIRECTcrttool _((void));
226 extern void DIRECTvtlocator _((void));
227 extern void DIRECTxterm _((void));
228 extern void TRACKxterm _((void));
229 extern void TRACKxtermT _((void));
230 
231 extern mousebutton_type mouse_button, mouse_prevbutton;
232 extern int mouse_xpos, mouse_ypos, mouse_prevxpos, mouse_prevypos;
233 extern int mouse_shift;		/* modifier status */
234 extern FLAG report_release;	/* selectively suppress release event */
235 extern FLAG window_focus;	/* does the window have mouse/keyboard focus? */
236 extern int mouse_buttons_pressed;	/* count pressed buttons */
237 extern mousebutton_type last_mouse_event;
238 
239 /* auxiliary menu functions */
240 extern void menu_mouse_mode _((FLAG));
241 extern FLAG in_menu_border;
242 
243 /* switch normal/alternate screen buffer */
244 extern void screen_buffer _((FLAG alternate));
245 
246 
247 /* terminal feature indications */
248 extern FLAG can_scroll_reverse;
249 extern FLAG can_add_line;
250 extern FLAG can_delete_line;
251 extern FLAG can_clear_eol;
252 extern FLAG can_clear_eos;
253 extern FLAG can_erase_chars;
254 extern FLAG can_reverse_mode;
255 extern FLAG can_hide_cursor;
256 extern FLAG can_dim;
257 extern FLAG can_alt_cset;
258 extern FLAG use_mouse_button_event_tracking;
259 
260 /* terminal feature usage flags */
261 extern FLAG use_ascii_graphics;		/* use ASCII graphics for borders */
262 extern FLAG use_vga_block_graphics;	/* charset is VGA with block graphics */
263 extern FLAG use_pc_block_graphics;	/* alternate charset is VGA with block graphics */
264 extern FLAG use_vt100_block_graphics;
265 extern FLAG full_menu_bg;		/* full coloured background */
266 extern FLAG use_appl_cursor;
267 extern FLAG use_appl_keypad;
268 extern char menu_border_style;
269 extern int menumargin;
270 extern FLAG use_stylish_menu_selection;
271 extern FLAG bold_border;
272 extern int use_unicode_menubar _((void));
273 extern FLAG explicit_border_style;
274 extern FLAG explicit_scrollbar_style;
275 extern FLAG explicit_keymap;
276 extern FLAG use_script_colour;
277 extern FLAG use_mouse;
278 extern FLAG use_mouse_release;
279 extern FLAG use_mouse_anymove_inmenu;
280 extern FLAG use_mouse_anymove_always;
281 extern FLAG use_mouse_extended;	/* UTF-8 encoding of mouse coordinates */
282 extern FLAG use_mouse_1015;	/* numeric encoding of mouse coordinates */
283 extern FLAG use_bold;
284 extern FLAG avoid_reverse_colour;
285 extern FLAG use_bgcolor;
286 extern FLAG use_modifyOtherKeys;
287 extern int cursor_style;
288 extern void disable_modify_keys _((FLAG dis));
289 extern FLAG colours_256;
290 extern FLAG colours_88;
291 extern FLAG ansi_esc;
292 extern FLAG standout_glitch;
293 
294 
295 /* keyboard input special results (additional information) */
296 extern voidfunc keyproc;	/* function addressed by entered function key */
297 
298 extern unsigned char keyshift;	/* shift state of entered function key */
299 /* shift state indications of escape sequences */
300 /*
301 ctrl	alt	shift	ESC code/ -1	keyshift code
302 0	0	0	0		000
303 0	0	1	2	1	001
304 0	1	0	3	2	010
305 0	1	1	4	3	011
306 1	0	0	5	4	100
307 1	0	1	6	5	101
308 1	1	0	7	6	110
309 1	1	1	8	7	111
310 */
311 /* shift state masks (indications decremented by 1) */
312 #define shift_mask	0x01
313 #define alt_mask	0x02
314 #define ctrl_mask	0x04
315 #define ctrlshift_mask	(ctrl_mask | shift_mask)
316 #define altshift_mask	(alt_mask | shift_mask)
317 #define altctrl_mask	(alt_mask | ctrl_mask)
318 #define altctrlshift_mask	(alt_mask | ctrl_mask | shift_mask)
319 #define applkeypad_mask	0x08
320 /* skip 0x30 (may be left in from keyboard.c) */
321 #define report_mask	0x40	/* indicate CSI ? sequence */
322 
323 extern int ansi_params;
324 extern int ansi_param [];
325 extern char ansi_ini;
326 extern char ansi_fini;
327 
328 
329 /* prompt.c: callback for file menu */
330 extern int is_directory _((menuitemtype * item));
331 extern void check_slow_hint _((void));
332 
333 /* prompt.c, textfile.c: check file "modes" */
334 #ifndef S_ISDIR
335 #define S_ISDIR(mode)	(mode & S_IFMT) == S_IFDIR
336 #endif
337 
338 #ifndef S_ISFIFO
339 #define S_ISFIFO(mode)	(mode & S_IFMT) == S_IFIFO
340 #endif
341 
342 #ifndef S_ISCHR
343 #define S_ISCHR(mode)	(mode & S_IFMT) == S_IFCHR
344 #endif
345 
346 #ifndef S_ISBLK
347 #define S_ISBLK(mode)	(mode & S_IFMT) == S_IFBLK
348 #endif
349 
350