1 /* Slang interface to the Midnight Commander for Win32
2 This emulates some features of ncurses on top of slang
3 S-lang is not fully consistent between its Unix and non-Unix versions.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
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. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
23 #include "../src/global.h"
24 #include "../src/tty.h"
25 #include "../src/color.h"
26 #include "../src/util.h"
27 #include "../src/mouse.h" /* Gpm_Event is required in key.h */
28 #include "../src/key.h" /* define_sequence */
29 #include "../src/main.h" /* extern: force_colors */
30 #include "../src/win.h" /* do_exit_ca_mode */
34 static void slang_sigterm ()
39 static int slinterrupt
;
41 void enable_interrupt_key(void)
43 SLang_set_abort_signal(NULL
);
46 void disable_interrupt_key(void)
53 int SLKeyboard_Quit
=0; /* FIXME!! */
54 t
= slinterrupt
? SLKeyboard_Quit
: 0;
55 /* SLKeyboard_Quit = 0; */
59 /* Only done the first time */
60 void slang_init (void)
63 SLang_init_tty (XCTRL('c'), 1, 0);
65 load_terminfo_keys ();
68 /* Done each time we come back from done mode */
69 void slang_prog_mode (void)
72 SLsmg_touch_lines (0, LINES
);
75 /* Called each time we want to shutdown slang screen manager */
76 void slang_shell_mode (void)
81 void slang_shutdown ()
87 /* reset the colors to those that were
88 * active when the program was started up
94 void slang_keypad (int set
)
96 /* enable keypad strings */
99 static int no_slang_delay
;
101 void set_slang_delay (int v
)
106 void hline (int ch
, int len
)
110 last_x
= SLsmg_get_column ();
111 last_y
= SLsmg_get_row ();
116 if (ch
== ACS_HLINE
){
117 SLsmg_draw_hline (len
);
122 move (last_y
, last_x
);
125 void vline (int character
, int len
)
128 SLsmg_draw_vline (len
);
130 int last_x
, last_y
, pos
= 0;
132 last_x
= SLsmg_get_column ();
133 last_y
= SLsmg_get_row ();
136 move (last_y
+ pos
++, last_x
);
139 move (last_x
, last_y
);
145 /* No terminals on NT, make default color */
147 SLtt_Use_Ansi_Colors
= 1;
149 /* Setup emulated colors */
150 if (SLtt_Use_Ansi_Colors
){
151 init_pair (A_REVERSE
, "black", "white");
153 /* SLtt_set_mono (A_BOLD, NULL, SLTT_BOLD_MASK);
154 SLtt_set_mono (A_REVERSE, NULL, SLTT_REV_MASK);
155 SLtt_set_mono (A_BOLD|A_REVERSE, NULL, SLTT_BOLD_MASK | SLTT_REV_MASK);
157 return SLtt_Use_Ansi_Colors
;
160 void attrset (int color
)
162 if (!SLtt_Use_Ansi_Colors
){
163 SLsmg_set_color (color
);
169 SLsmg_set_color (A_BOLD
);
171 SLsmg_set_color ((color
& (~A_BOLD
)) + 8);
175 if (color
== A_REVERSE
)
176 SLsmg_set_color (A_REVERSE
);
178 SLsmg_set_color (color
);
181 void load_terminfo_keys ()
188 if (SLang_input_pending (0) == 0)
191 return SLang_getkey ();
194 extern int slow_terminal
;
198 /* Non slang builds do not understand got_interrupt */
203 #endif /* HAVE_SLANG */
205 void mc_refresh (void)
207 /* if (!we_are_background) (no background mode yet) */
211 void slang_set_raw_mode (void)
219 init_pair (int index
, char *foreground
, char *background
)
222 SLtt_set_color (index
, "", foreground
, background
);
223 if (index
> max_index
)
228 alloc_color_pair (char *foreground
, char *background
)
230 init_pair (++max_index
, foreground
, background
);
235 try_alloc_color_pair (char *fg
, char *bg
)
237 static struct colors_avail
{
238 struct colors_avail
*next
;
246 c
.index
= NORMAL_COLOR
;
249 if (((fg
&& p
->fg
) ? !strcmp (fg
, p
->fg
) : fg
== p
->fg
) != 0
250 && ((bg
&& p
->bg
) ? !strcmp (bg
, p
->bg
) : bg
== p
->bg
) != 0)
256 p
->next
= malloc (sizeof (c
));
259 p
->fg
= fg
? strdup (fg
) : 0;
260 p
->bg
= bg
? strdup (bg
) : 0;
265 p
->index
= alloc_color_pair (fg
, bg
);