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 **********************************************/
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 (gboolean single
)
131 tty_print_alt_char (ACS_HLINE
, single
);
135 tty_print_one_vline (gboolean single
)
137 tty_print_alt_char (ACS_VLINE
, single
);
141 tty_draw_box (int y
, int x
, int ys
, int xs
, gboolean single
)
146 tty_draw_vline (y
, x
, mc_tty_frm
[single
? MC_TTY_FRM_VERT
: MC_TTY_FRM_DVERT
], ys
);
147 tty_draw_vline (y
, x
+ xs
, mc_tty_frm
[single
? MC_TTY_FRM_VERT
: MC_TTY_FRM_DVERT
], ys
);
148 tty_draw_hline (y
, x
, mc_tty_frm
[single
? MC_TTY_FRM_HORIZ
: MC_TTY_FRM_DHORIZ
], xs
);
149 tty_draw_hline (y
+ ys
, x
, mc_tty_frm
[single
? MC_TTY_FRM_HORIZ
: MC_TTY_FRM_DHORIZ
], xs
);
151 tty_print_alt_char (ACS_ULCORNER
, single
);
152 tty_gotoyx (y
+ ys
, x
);
153 tty_print_alt_char (ACS_LLCORNER
, single
);
154 tty_gotoyx (y
, x
+ xs
);
155 tty_print_alt_char (ACS_URCORNER
, single
);
156 tty_gotoyx (y
+ ys
, x
+ xs
);
157 tty_print_alt_char (ACS_LRCORNER
, single
);
161 mc_tty_normalize_from_utf8 (const char *str
)
165 const char *_system_codepage
= str_detect_termencoding ();
167 if (str_isutf8 (_system_codepage
))
168 return g_strdup (str
);
170 conv
= g_iconv_open (_system_codepage
, "UTF-8");
171 if (conv
== INVALID_CONV
)
172 return g_strdup (str
);
174 buffer
= g_string_new ("");
176 if (str_convert (conv
, str
, buffer
) == ESTR_FAILURE
)
178 g_string_free (buffer
, TRUE
);
179 str_close_conv (conv
);
180 return g_strdup (str
);
182 str_close_conv (conv
);
184 return g_string_free (buffer
, FALSE
);