2
This file is part of the Free Pascal run time library.
3
Copyright (c) 1999-2000 by Florian Klaempfl
4
member of the Free Pascal development team
6
TermInfo interface unit for linux
8
See the file COPYING.FPC, included in this distribution,
9
for details about the copyright.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
**********************************************************************}
24
const curseslib = 'ncurses';
29
auto_right_margin = 1;
31
ceol_standout_glitch = 3;
32
eat_newline_glitch = 4;
38
insert_null_glitch = 10;
41
move_insert_mode = 13;
42
move_standout_mode = 14;
44
status_line_esc_ok = 16;
45
dest_tabs_magic_smso = 17;
47
transparent_underline = 19;
54
non_dest_scroll_region = 26;
56
back_color_erase = 28;
57
hue_lightness_saturation = 29;
59
cr_cancels_micro_mode = 31;
62
semi_auto_right_margin = 34;
71
magic_cookie_glitch = 4;
72
padding_baud_rate = 5;
74
width_status_line = 7;
84
dot_vert_spacing = 17;
85
dot_horz_spacing = 18;
86
max_micro_address = 19;
93
output_res_horz_inch = 26;
94
output_res_vert_inch = 27;
98
bit_image_entwining = 31;
105
change_scroll_region = 3;
111
command_character = 9;
115
cursor_invisible = 13;
117
cursor_mem_address = 15;
123
delete_character = 21;
125
dis_status_line = 23;
127
enter_alt_charset_mode = 25;
128
enter_blink_mode = 26;
129
enter_bold_mode = 27;
131
enter_delete_mode = 29;
133
enter_insert_mode = 31;
134
enter_secure_mode = 32;
135
enter_protected_mode = 33;
136
enter_reverse_mode = 34;
137
enter_standout_mode = 35;
138
enter_underline_mode = 36;
140
exit_alt_charset_mode = 38;
141
exit_attribute_mode = 39;
143
exit_delete_mode = 41;
144
exit_insert_mode = 42;
145
exit_standout_mode = 43;
146
exit_underline_mode = 44;
149
from_status_line = 47;
154
insert_character = 52;
208
parm_delete_line = 106;
209
parm_down_cursor = 107;
212
parm_insert_line = 110;
213
parm_left_cursor = 111;
214
parm_right_cursor = 112;
216
parm_up_cursor = 114;
228
restore_cursor = 126;
231
scroll_forward = 129;
232
scroll_reverse = 130;
233
set_attributes = 131;
237
to_status_line = 135;
238
underline_char = 136;
251
enter_xon_mode = 149;
256
xoff_character = 154;
373
set_left_margin = 271;
374
set_right_margin = 272;
401
initialize_color = 299;
402
initialize_pair = 300;
403
set_color_pair = 301;
404
set_foreground = 302;
405
set_background = 303;
406
change_char_pitch = 304;
407
change_line_pitch = 305;
408
change_res_horz = 306;
409
change_res_vert = 307;
411
enter_doublewide_mode = 309;
412
enter_draft_quality = 310;
413
enter_italics_mode = 311;
414
enter_leftward_mode = 312;
415
enter_micro_mode = 313;
416
enter_near_letter_quality = 314;
417
enter_normal_quality = 315;
418
enter_shadow_mode = 316;
419
enter_subscript_mode = 317;
420
enter_superscript_mode = 318;
421
enter_upward_mode = 319;
422
exit_doublewide_mode = 320;
423
exit_italics_mode = 321;
424
exit_leftward_mode = 322;
425
exit_micro_mode = 323;
426
exit_shadow_mode = 324;
427
exit_subscript_mode = 325;
428
exit_superscript_mode = 326;
429
exit_upward_mode = 327;
430
micro_column_address = 328;
434
micro_row_address = 332;
437
parm_down_micro = 335;
438
parm_left_micro = 336;
439
parm_right_micro = 337;
441
select_char_set = 339;
442
set_bottom_margin = 340;
443
set_bottom_margin_parm = 341;
444
set_left_margin_parm = 342;
445
set_right_margin_parm = 343;
446
set_top_margin = 344;
447
set_top_margin_parm = 345;
448
start_bit_image = 346;
449
start_char_set_def = 347;
450
stop_bit_image = 348;
451
stop_char_set_def = 349;
452
subscript_characters = 350;
453
superscript_characters = 351;
454
these_cause_cr = 352;
456
char_set_names = 354;
461
set_a_foreground = 359;
462
set_a_background = 360;
472
bit_image_repeat = 370;
473
bit_image_newline = 371;
474
bit_image_carriage_return = 372;
476
define_bit_image_region = 374;
477
end_bit_image_region = 375;
478
set_color_band = 376;
479
set_page_length = 377;
480
display_pc_char = 378;
481
enter_pc_charset_mode = 379;
482
exit_pc_charset_mode = 380;
483
enter_scancode_mode = 381;
484
exit_scancode_mode = 382;
485
pc_term_options = 383;
486
scancode_escape = 384;
487
alt_scancode_esc = 385;
488
enter_horizontal_hl_mode = 386;
489
enter_left_hl_mode = 387;
490
enter_low_hl_mode = 388;
491
enter_right_hl_mode = 389;
492
enter_top_hl_mode = 390;
493
enter_vertical_hl_mode = 391;
495
{ older synonyms for some booleans }
496
beehive_glitch = no_esc_ctlc;
497
teleray_glitch = dest_tabs_magic_smso;
498
micro_col_size = micro_char_size;
502
magic_cookie_glitch_ul = 33;
503
backspaces_with_bs = 37;
504
crt_no_scrolling = 38;
505
no_correctly_working_cr = 39;
506
carriage_return_delay = 34;
508
linefeed_if_not_lf = 394;
509
backspace_if_not_bs = 395;
510
gnu_has_meta_key = 40;
511
linefeed_is_newline = 41;
512
backspace_delay = 36;
513
horizontal_tab_delay = 37;
514
number_of_function_keys = 38;
515
other_non_function_keys = 396;
517
has_hardware_tabs = 42;
518
return_does_clr_eol = 43;
545
c_iflag, c_oflag, c_cflag, c_lflag: TCFlag_t;
547
c_cc: array [0..NCCS-1] of Char;
548
c_ispeed, c_ospeed: Speed_t;
552
TT_BoolArray = array [0..BoolCount - 1] of Boolean;
553
TT_WordArray = array [0..NumCount - 1] of Word;
554
TT_PCharArray = array [0..StrCount - 1] of PChar;
559
Booleans: TT_BoolArray;
560
Numbers: TT_WordArray;
561
Strings: TT_PCharArray;
564
Terminal_ptr4 = ^Terminal4;
568
Ottyb, Nttyb: Termios;
575
Booleans: ^TT_BoolArray;
576
Numbers: ^TT_WordArray;
577
Strings: ^TT_PCharArray;
580
Terminal_ptr5 = ^Terminal5;
584
Ottyb, Nttyb: Termios;
588
TerminalCommon_ptr1 = ^TerminalCommon1;
589
TerminalCommon1 = record
594
TerminalCommon_ptr2 = ^TerminalCommon2;
595
TerminalCommon2 = record
597
Ottyb, Nttyb: Termios;
601
WriterFunc = function (P: PChar): Longint;
605
cur_term : TerminalCommon_ptr1; cvar; external;
607
cur_term : TerminalCommon_ptr1; external curseslib name 'cur_term';
609
cur_term_booleans: ^TT_BoolArray;
610
cur_term_numbers: ^TT_WordArray;
611
cur_term_strings: ^TT_PCharArray;
612
cur_term_common: TerminalCommon_ptr2;
615
cur_term_valid : boolean = false;
617
{ Note: the following two procedures expect a pointer to a full terminfo }
618
{ structure, not just to the common parts. However, since this structure }
619
{ differs for different versions of ncurses,it's impossible to give a }
620
{ general declaration here which is correct (JM) }
621
function set_curterm(term: TerminalCommon_ptr1): TerminalCommon_ptr1;cdecl; external curseslib name 'set_curterm';
622
function del_curterm(term: TerminalCommon_ptr1): Longint;
624
{ sets whether to use environment variables for LINES and COLUMNS }
625
procedure use_env(B: Longint); cdecl; external curseslib name 'use_env';
627
function putp(Ndx: Longint): Longint;
629
{ this function must be called before any terminal properties are accessed }
630
function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
633
function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'restartterm';
635
{function tgetent(P1, P2: PChar): Longint;
636
function tgetflag(P: PChar): Longint;
637
function tgetnum(P: PChar): Longint;
638
function tgoto(P: PChar; L1, L2: Longint): PChar;
639
function tgetstr(P: PChar; var R: PChar): PChar;
640
function tigetflag(P: PChar): Longint;
641
function tigetnum(P: PChar): Longint;
642
function tigetstr(P: PChar): PChar;
643
function tparm(P: PChar, ...): PChar;
644
function tparam(const char *, char *, int, ...): PChar;}
645
function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
652
function putp(Ndx: Longint): Longint;
656
if not assigned(cur_term) then
658
P := cur_term_strings^[Ndx];
659
putp := fpWrite(cur_term_common^.filedes, P^, StrLen(P));
662
function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
666
if not assigned(cur_term) then
668
{ L1 := L1; why was this here ?? PM }
669
P := cur_term_strings^[Ndx];
673
//function set_curterm(term: TerminalCommon_ptr1): TerminalCommon_ptr1; cdecl; external curseslib;
675
// function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib;
677
function setuptermC(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'setupterm';
679
function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
681
versioncheck: longint;
683
setupterm := setuptermC(term,fd,errcode);
684
if not assigned(cur_term) then
686
cur_term_valid := true;
689
if (Terminal_ptr4(cur_term)^.ttype.Booleans[versioncheck] in [false,true]) then
691
else versioncheck := -1;
692
until (versioncheck = BoolCount) or
694
if versioncheck = BoolCount then
697
cur_term_booleans := @Terminal_ptr4(cur_term)^.ttype.Booleans;
698
cur_term_numbers := @Terminal_ptr4(cur_term)^.ttype.Numbers;
699
cur_term_strings := @Terminal_ptr4(cur_term)^.ttype.Strings;
700
cur_term_common := pointer(@Terminal_ptr4(cur_term)^.FileDes);
703
{ assume 5.x or higher }
705
cur_term_booleans := Terminal_ptr5(cur_term)^.ttype.Booleans;
706
cur_term_numbers := Terminal_ptr5(cur_term)^.ttype.Numbers;
707
cur_term_strings := Terminal_ptr5(cur_term)^.ttype.Strings;
708
cur_term_common := pointer(@Terminal_ptr5(cur_term)^.FileDes);
712
function del_curtermC(term: TerminalCommon_ptr1): Longint; cdecl; external curseslib name 'del_curterm';
714
function del_curterm(term: TerminalCommon_ptr1): Longint;
716
reset_cur_term : boolean;
718
if term=cur_term then
720
cur_term_booleans := nil;
721
cur_term_numbers := nil;
722
cur_term_strings := nil;
723
cur_term_common := nil;
724
reset_cur_term := true;
727
reset_cur_term := false;
728
del_curterm := del_curtermC(term);
729
if reset_cur_term then
730
cur_term_valid := false;
733
{function tgetent(P1, P2: PChar): Longint; cdecl; external;
734
function tgetflag(P: PChar): Longint; cdecl; external;
735
function tgetnum(P: PChar): Longint; cdecl; external;
736
function tgoto(P: PChar; L1, L2: Longint): PChar; cdecl; external;
737
function tgetstr(P: PChar; var R: PChar): PChar; cdecl; external;
738
function tigetflag(P: PChar): Longint; cdecl; external;
739
function tigetnum(P: PChar): Longint; cdecl; external;
740
function tigetstr(P: PChar): PChar; cdecl; external;
741
function tparm(P: PChar; ...): PChar; cdecl; external;
742
function tparam(const char *, char *, int, ...): PChar; cdecl; external;}