2 Interface to the terminal controlling library.
4 Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
7 Roland Illig <roland.illig@gmx.de>, 2005.
8 Andrew Borodin <aborodin@vmail.ru>, 2009.
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software; you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation; either version 2 of the
15 License, or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be
18 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
29 * \brief Source: %interface to the terminal controlling library
37 #include "lib/global.h"
38 #include "lib/strutil.h"
41 #include "tty-internal.h"
44 /*** global variables **************************************************/
46 /* If true program softkeys (HP terminals only) on startup and after every
47 command ran in the subshell to the description found in the termcap/terminfo
49 int reset_hp_softkeys
= 0;
51 /* If true lines are drown by spaces */
52 gboolean slow_tty
= FALSE
;
54 /* If true use +, -, | for line drawing */
55 gboolean ugly_line_drawing
= FALSE
;
57 int mc_tty_ugly_frm
[MC_TTY_FRM_MAX
];
59 /*** file scope macro definitions **************************************/
61 /*** file scope type declarations **************************************/
63 /*** file scope variables **********************************************/
65 static volatile sig_atomic_t got_interrupt
= 0;
67 /*** file scope functions **********************************************/
70 sigintr_handler (int signo
)
76 /*** public functions **************************************************/
85 tty_start_interrupt_key (void)
89 act
.sa_handler
= sigintr_handler
;
90 sigemptyset (&act
.sa_mask
);
91 act
.sa_flags
= SA_RESTART
;
92 sigaction (SIGINT
, &act
, NULL
);
96 tty_enable_interrupt_key (void)
100 act
.sa_handler
= sigintr_handler
;
101 sigemptyset (&act
.sa_mask
);
103 sigaction (SIGINT
, &act
, NULL
);
108 tty_disable_interrupt_key (void)
110 struct sigaction act
;
112 act
.sa_handler
= SIG_IGN
;
113 sigemptyset (&act
.sa_mask
);
115 sigaction (SIGINT
, &act
, NULL
);
119 tty_got_interrupt (void)
123 rv
= (got_interrupt
!= 0);
129 tty_print_one_hline (void)
131 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_thinhoriz
]);
135 tty_print_one_vline (void)
137 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_thinvert
]);
141 tty_draw_box (int y
, int x
, int ys
, int xs
)
143 tty_draw_vline (y
, x
, mc_tty_ugly_frm
[MC_TTY_FRM_vert
], ys
);
144 tty_draw_vline (y
, x
+ xs
- 1, mc_tty_ugly_frm
[MC_TTY_FRM_vert
], ys
);
145 tty_draw_hline (y
, x
, mc_tty_ugly_frm
[MC_TTY_FRM_horiz
], xs
);
146 tty_draw_hline (y
+ ys
- 1, x
, mc_tty_ugly_frm
[MC_TTY_FRM_horiz
], xs
);
148 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_lefttop
]);
149 tty_gotoyx (y
+ ys
- 1, x
);
150 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_leftbottom
]);
151 tty_gotoyx (y
, x
+ xs
- 1);
152 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_righttop
]);
153 tty_gotoyx (y
+ ys
- 1, x
+ xs
- 1);
154 tty_print_alt_char (mc_tty_ugly_frm
[MC_TTY_FRM_rightbottom
]);
158 mc_tty_normalize_from_utf8 (const char *str
)
162 const char *_system_codepage
= str_detect_termencoding ();
164 if (str_isutf8 (_system_codepage
))
165 return g_strdup (str
);
167 conv
= g_iconv_open (_system_codepage
, "UTF-8");
168 if (conv
== INVALID_CONV
)
169 return g_strdup (str
);
171 buffer
= g_string_new ("");
173 if (str_convert (conv
, str
, buffer
) == ESTR_FAILURE
) {
174 g_string_free (buffer
, TRUE
);
175 str_close_conv (conv
);
176 return g_strdup (str
);
178 str_close_conv (conv
);
180 return g_string_free (buffer
, FALSE
);