2
$Id: terminfo.pp,v 1.6 2004/03/05 22:18:15 jonas Exp $
3
This file is part of the Free Pascal run time library.
4
Copyright (c) 1999-2000 by Florian Klaempfl
5
member of the Free Pascal development team
7
TermInfo interface unit for linux
9
See the file COPYING.FPC, included in this distribution,
10
for details about the copyright.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
**********************************************************************}
25
const curseslib = 'ncurses';
30
auto_right_margin = 1;
32
ceol_standout_glitch = 3;
33
eat_newline_glitch = 4;
39
insert_null_glitch = 10;
42
move_insert_mode = 13;
43
move_standout_mode = 14;
45
status_line_esc_ok = 16;
46
dest_tabs_magic_smso = 17;
48
transparent_underline = 19;
55
non_dest_scroll_region = 26;
57
back_color_erase = 28;
58
hue_lightness_saturation = 29;
60
cr_cancels_micro_mode = 31;
63
semi_auto_right_margin = 34;
72
magic_cookie_glitch = 4;
73
padding_baud_rate = 5;
75
width_status_line = 7;
85
dot_vert_spacing = 17;
86
dot_horz_spacing = 18;
87
max_micro_address = 19;
94
output_res_horz_inch = 26;
95
output_res_vert_inch = 27;
99
bit_image_entwining = 31;
106
change_scroll_region = 3;
112
command_character = 9;
116
cursor_invisible = 13;
118
cursor_mem_address = 15;
124
delete_character = 21;
126
dis_status_line = 23;
128
enter_alt_charset_mode = 25;
129
enter_blink_mode = 26;
130
enter_bold_mode = 27;
132
enter_delete_mode = 29;
134
enter_insert_mode = 31;
135
enter_secure_mode = 32;
136
enter_protected_mode = 33;
137
enter_reverse_mode = 34;
138
enter_standout_mode = 35;
139
enter_underline_mode = 36;
141
exit_alt_charset_mode = 38;
142
exit_attribute_mode = 39;
144
exit_delete_mode = 41;
145
exit_insert_mode = 42;
146
exit_standout_mode = 43;
147
exit_underline_mode = 44;
150
from_status_line = 47;
155
insert_character = 52;
209
parm_delete_line = 106;
210
parm_down_cursor = 107;
213
parm_insert_line = 110;
214
parm_left_cursor = 111;
215
parm_right_cursor = 112;
217
parm_up_cursor = 114;
229
restore_cursor = 126;
232
scroll_forward = 129;
233
scroll_reverse = 130;
234
set_attributes = 131;
238
to_status_line = 135;
239
underline_char = 136;
252
enter_xon_mode = 149;
257
xoff_character = 154;
374
set_left_margin = 271;
375
set_right_margin = 272;
402
initialize_color = 299;
403
initialize_pair = 300;
404
set_color_pair = 301;
405
set_foreground = 302;
406
set_background = 303;
407
change_char_pitch = 304;
408
change_line_pitch = 305;
409
change_res_horz = 306;
410
change_res_vert = 307;
412
enter_doublewide_mode = 309;
413
enter_draft_quality = 310;
414
enter_italics_mode = 311;
415
enter_leftward_mode = 312;
416
enter_micro_mode = 313;
417
enter_near_letter_quality = 314;
418
enter_normal_quality = 315;
419
enter_shadow_mode = 316;
420
enter_subscript_mode = 317;
421
enter_superscript_mode = 318;
422
enter_upward_mode = 319;
423
exit_doublewide_mode = 320;
424
exit_italics_mode = 321;
425
exit_leftward_mode = 322;
426
exit_micro_mode = 323;
427
exit_shadow_mode = 324;
428
exit_subscript_mode = 325;
429
exit_superscript_mode = 326;
430
exit_upward_mode = 327;
431
micro_column_address = 328;
435
micro_row_address = 332;
438
parm_down_micro = 335;
439
parm_left_micro = 336;
440
parm_right_micro = 337;
442
select_char_set = 339;
443
set_bottom_margin = 340;
444
set_bottom_margin_parm = 341;
445
set_left_margin_parm = 342;
446
set_right_margin_parm = 343;
447
set_top_margin = 344;
448
set_top_margin_parm = 345;
449
start_bit_image = 346;
450
start_char_set_def = 347;
451
stop_bit_image = 348;
452
stop_char_set_def = 349;
453
subscript_characters = 350;
454
superscript_characters = 351;
455
these_cause_cr = 352;
457
char_set_names = 354;
462
set_a_foreground = 359;
463
set_a_background = 360;
473
bit_image_repeat = 370;
474
bit_image_newline = 371;
475
bit_image_carriage_return = 372;
477
define_bit_image_region = 374;
478
end_bit_image_region = 375;
479
set_color_band = 376;
480
set_page_length = 377;
481
display_pc_char = 378;
482
enter_pc_charset_mode = 379;
483
exit_pc_charset_mode = 380;
484
enter_scancode_mode = 381;
485
exit_scancode_mode = 382;
486
pc_term_options = 383;
487
scancode_escape = 384;
488
alt_scancode_esc = 385;
489
enter_horizontal_hl_mode = 386;
490
enter_left_hl_mode = 387;
491
enter_low_hl_mode = 388;
492
enter_right_hl_mode = 389;
493
enter_top_hl_mode = 390;
494
enter_vertical_hl_mode = 391;
496
{ older synonyms for some booleans }
497
beehive_glitch = no_esc_ctlc;
498
teleray_glitch = dest_tabs_magic_smso;
499
micro_col_size = micro_char_size;
503
magic_cookie_glitch_ul = 33;
504
backspaces_with_bs = 37;
505
crt_no_scrolling = 38;
506
no_correctly_working_cr = 39;
507
carriage_return_delay = 34;
509
linefeed_if_not_lf = 394;
510
backspace_if_not_bs = 395;
511
gnu_has_meta_key = 40;
512
linefeed_is_newline = 41;
513
backspace_delay = 36;
514
horizontal_tab_delay = 37;
515
number_of_function_keys = 38;
516
other_non_function_keys = 396;
518
has_hardware_tabs = 42;
519
return_does_clr_eol = 43;
546
c_iflag, c_oflag, c_cflag, c_lflag: TCFlag_t;
548
c_cc: array [0..NCCS-1] of Char;
549
c_ispeed, c_ospeed: Speed_t;
553
TT_BoolArray = array [0..BoolCount - 1] of Boolean;
554
TT_WordArray = array [0..NumCount - 1] of Word;
555
TT_PCharArray = array [0..StrCount - 1] of PChar;
560
Booleans: TT_BoolArray;
561
Numbers: TT_WordArray;
562
Strings: TT_PCharArray;
565
Terminal_ptr4 = ^Terminal4;
569
Ottyb, Nttyb: Termios;
576
Booleans: ^TT_BoolArray;
577
Numbers: ^TT_WordArray;
578
Strings: ^TT_PCharArray;
581
Terminal_ptr5 = ^Terminal5;
585
Ottyb, Nttyb: Termios;
589
TerminalCommon_ptr1 = ^TerminalCommon1;
590
TerminalCommon1 = record
595
TerminalCommon_ptr2 = ^TerminalCommon2;
596
TerminalCommon2 = record
598
Ottyb, Nttyb: Termios;
602
WriterFunc = function (P: PChar): Longint;
606
cur_term : TerminalCommon_ptr1; cvar; external;
608
cur_term : TerminalCommon_ptr1; external curseslib name 'cur_term';
610
cur_term_booleans: ^TT_BoolArray;
611
cur_term_numbers: ^TT_WordArray;
612
cur_term_strings: ^TT_PCharArray;
613
cur_term_common: TerminalCommon_ptr2;
616
cur_term_valid : boolean = false;
618
{ Note: the following two procedures expect a pointer to a full terminfo }
619
{ structure, not just to the common parts. However, since this structure }
620
{ differs for different versions of ncurses,it's impossible to give a }
621
{ general declaration here which is correct (JM) }
622
function set_curterm(term: TerminalCommon_ptr1): TerminalCommon_ptr1;cdecl;
623
function del_curterm(term: TerminalCommon_ptr1): Longint;
625
{ sets whether to use environment variables for LINES and COLUMNS }
626
procedure use_env(B: Longint);cdecl;
628
function putp(Ndx: Longint): Longint;
630
{ this function must be called before any terminal properties are accessed }
631
function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
634
function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;cdecl;
636
{function tgetent(P1, P2: PChar): Longint;
637
function tgetflag(P: PChar): Longint;
638
function tgetnum(P: PChar): Longint;
639
function tgoto(P: PChar; L1, L2: Longint): PChar;
640
function tgetstr(P: PChar; var R: PChar): PChar;
641
function tigetflag(P: PChar): Longint;
642
function tigetnum(P: PChar): Longint;
643
function tigetstr(P: PChar): PChar;
644
function tparm(P: PChar, ...): PChar;
645
function tparam(const char *, char *, int, ...): PChar;}
646
function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
653
function putp(Ndx: Longint): Longint;
657
if not assigned(cur_term) then
659
P := cur_term_strings^[Ndx];
660
putp := fpWrite(cur_term_common^.filedes, P^, StrLen(P));
663
function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
667
if not assigned(cur_term) then
669
{ L1 := L1; why was this here ?? PM }
670
P := cur_term_strings^[Ndx];
674
function set_curterm(term: TerminalCommon_ptr1): TerminalCommon_ptr1; cdecl; external curseslib;
676
procedure use_env(B: Longint); cdecl; external curseslib;
678
function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib;
680
function setuptermC(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'setupterm';
682
function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
684
versioncheck: longint;
686
setupterm := setuptermC(term,fd,errcode);
687
if not assigned(cur_term) then
689
cur_term_valid := true;
692
if (Terminal_ptr4(cur_term)^.ttype.Booleans[versioncheck] in [false,true]) then
694
else versioncheck := -1;
695
until (versioncheck = BoolCount) or
697
if versioncheck = BoolCount then
700
cur_term_booleans := @Terminal_ptr4(cur_term)^.ttype.Booleans;
701
cur_term_numbers := @Terminal_ptr4(cur_term)^.ttype.Numbers;
702
cur_term_strings := @Terminal_ptr4(cur_term)^.ttype.Strings;
703
cur_term_common := pointer(@Terminal_ptr4(cur_term)^.FileDes);
706
{ assume 5.x or higher }
708
cur_term_booleans := Terminal_ptr5(cur_term)^.ttype.Booleans;
709
cur_term_numbers := Terminal_ptr5(cur_term)^.ttype.Numbers;
710
cur_term_strings := Terminal_ptr5(cur_term)^.ttype.Strings;
711
cur_term_common := pointer(@Terminal_ptr5(cur_term)^.FileDes);
715
function del_curtermC(term: TerminalCommon_ptr1): Longint; cdecl; external curseslib name 'del_curterm';
717
function del_curterm(term: TerminalCommon_ptr1): Longint;
719
reset_cur_term : boolean;
721
if term=cur_term then
723
cur_term_booleans := nil;
724
cur_term_numbers := nil;
725
cur_term_strings := nil;
726
cur_term_common := nil;
727
reset_cur_term := true;
730
reset_cur_term := false;
731
del_curterm := del_curtermC(term);
732
if reset_cur_term then
733
cur_term_valid := false;
736
{function tgetent(P1, P2: PChar): Longint; cdecl; external;
737
function tgetflag(P: PChar): Longint; cdecl; external;
738
function tgetnum(P: PChar): Longint; cdecl; external;
739
function tgoto(P: PChar; L1, L2: Longint): PChar; cdecl; external;
740
function tgetstr(P: PChar; var R: PChar): PChar; cdecl; external;
741
function tigetflag(P: PChar): Longint; cdecl; external;
742
function tigetnum(P: PChar): Longint; cdecl; external;
743
function tigetstr(P: PChar): PChar; cdecl; external;
744
function tparm(P: PChar; ...): PChar; cdecl; external;
745
function tparam(const char *, char *, int, ...): PChar; cdecl; external;}
749
$Log: terminfo.pp,v $
750
Revision 1.6 2004/03/05 22:18:15 jonas
751
* fixed declaration for cur_term for darwin now that the importing of
752
variables from shared libraries works
754
Revision 1.5 2004/02/06 22:35:50 jonas
755
+ some darwin support, doesn't work yet because of imported variables
758
Revision 1.4 2003/09/14 20:15:01 marco
759
* Unix reform stage two. Remove all calls from Unix that exist in Baseunix.
761
Revision 1.3 2002/09/07 16:01:28 peter
762
* old logs removed and tabs fixed