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_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 ************************************************************************/
68 /* --------------------------------------------------------------------------------------------- */
71 sigintr_handler (int signo
)
77 /* --------------------------------------------------------------------------------------------- */
78 /*** public functions ****************************************************************************/
79 /* --------------------------------------------------------------------------------------------- */
87 /* --------------------------------------------------------------------------------------------- */
90 tty_start_interrupt_key (void)
94 act
.sa_handler
= sigintr_handler
;
95 sigemptyset (&act
.sa_mask
);
96 act
.sa_flags
= SA_RESTART
;
97 sigaction (SIGINT
, &act
, NULL
);
100 /* --------------------------------------------------------------------------------------------- */
103 tty_enable_interrupt_key (void)
105 struct sigaction act
;
107 act
.sa_handler
= sigintr_handler
;
108 sigemptyset (&act
.sa_mask
);
110 sigaction (SIGINT
, &act
, NULL
);
114 /* --------------------------------------------------------------------------------------------- */
117 tty_disable_interrupt_key (void)
119 struct sigaction act
;
121 act
.sa_handler
= SIG_IGN
;
122 sigemptyset (&act
.sa_mask
);
124 sigaction (SIGINT
, &act
, NULL
);
127 /* --------------------------------------------------------------------------------------------- */
130 tty_got_interrupt (void)
134 rv
= (got_interrupt
!= 0);
139 /* --------------------------------------------------------------------------------------------- */
142 tty_print_one_hline (gboolean single
)
144 tty_print_alt_char (ACS_HLINE
, single
);
147 /* --------------------------------------------------------------------------------------------- */
150 tty_print_one_vline (gboolean single
)
152 tty_print_alt_char (ACS_VLINE
, single
);
155 /* --------------------------------------------------------------------------------------------- */
158 tty_draw_box (int y
, int x
, int ys
, int xs
, gboolean single
)
163 tty_draw_vline (y
, x
, mc_tty_frm
[single
? MC_TTY_FRM_VERT
: MC_TTY_FRM_DVERT
], ys
);
164 tty_draw_vline (y
, x
+ xs
, mc_tty_frm
[single
? MC_TTY_FRM_VERT
: MC_TTY_FRM_DVERT
], ys
);
165 tty_draw_hline (y
, x
, mc_tty_frm
[single
? MC_TTY_FRM_HORIZ
: MC_TTY_FRM_DHORIZ
], xs
);
166 tty_draw_hline (y
+ ys
, x
, mc_tty_frm
[single
? MC_TTY_FRM_HORIZ
: MC_TTY_FRM_DHORIZ
], xs
);
168 tty_print_alt_char (ACS_ULCORNER
, single
);
169 tty_gotoyx (y
+ ys
, x
);
170 tty_print_alt_char (ACS_LLCORNER
, single
);
171 tty_gotoyx (y
, x
+ xs
);
172 tty_print_alt_char (ACS_URCORNER
, single
);
173 tty_gotoyx (y
+ ys
, x
+ xs
);
174 tty_print_alt_char (ACS_LRCORNER
, single
);
177 /* --------------------------------------------------------------------------------------------- */
180 mc_tty_normalize_from_utf8 (const char *str
)
184 const char *_system_codepage
= str_detect_termencoding ();
186 if (str_isutf8 (_system_codepage
))
187 return g_strdup (str
);
189 conv
= g_iconv_open (_system_codepage
, "UTF-8");
190 if (conv
== INVALID_CONV
)
191 return g_strdup (str
);
193 buffer
= g_string_new ("");
195 if (str_convert (conv
, str
, buffer
) == ESTR_FAILURE
)
197 g_string_free (buffer
, TRUE
);
198 str_close_conv (conv
);
199 return g_strdup (str
);
201 str_close_conv (conv
);
203 return g_string_free (buffer
, FALSE
);
206 /* --------------------------------------------------------------------------------------------- */