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