1
1

Reorganization of TTY initalization and line drawing.

Created some TTY functions instead of MC core global variables.
Moved init_layer() function from MC core to TTY layer.
Renamed slang_init() to init_slang().
Added required #include's in TTY layer.
Moved S-Lang color and attribute definitions from src/tty/tty-slang.h
to colors-slang.h.
Этот коммит содержится в:
Andrew Borodin 2009-05-13 17:05:55 +04:00
родитель 7a75f8723d
Коммит bcc6a40486
16 изменённых файлов: 158 добавлений и 111 удалений

Просмотреть файл

@ -48,7 +48,7 @@
#include "global.h" #include "global.h"
#include "../src/tty/tty.h" /* COLS */ #include "../src/tty/tty.h"
#include "../src/tty/color.h" #include "../src/tty/color.h"
#include "../src/tty/key.h" #include "../src/tty/key.h"
#include "../src/tty/mouse.h" #include "../src/tty/mouse.h"
@ -567,65 +567,6 @@ static void check_split (void)
} }
} }
#ifdef HAVE_SLANG
void
init_curses ()
{
SLsmg_init_smg ();
do_enter_ca_mode ();
init_colors ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
}
#else
static const struct {
int acscode;
int character;
} acs_approx [] = {
{ 'q', '-' }, /* ACS_HLINE */
{ 'x', '|' }, /* ACS_VLINE */
{ 'l', '+' }, /* ACS_ULCORNER */
{ 'k', '+' }, /* ACS_URCORNER */
{ 'm', '+' }, /* ACS_LLCORNER */
{ 'j', '+' }, /* ACS_LRCORNER */
{ 'a', '#' }, /* ACS_CKBOARD */
{ 'u', '+' }, /* ACS_RTEE */
{ 't', '+' }, /* ACS_LTEE */
{ 'w', '+' }, /* ACS_TTEE */
{ 'v', '+' }, /* ACS_BTEE */
{ 'n', '+' }, /* ACS_PLUS */
{ 0, 0 } };
void init_curses (void)
{
int i;
initscr();
#ifdef HAVE_ESCDELAY
/*
* If ncurses exports the ESCDELAY variable, it should be set to
* a low value, or you'll experience a delay in processing escape
* sequences that are recognized by mc (e.g. Esc-Esc). On the other
* hand, making ESCDELAY too small can result in some sequences
* (e.g. cursor arrows) being reported as separate keys under heavy
* processor load, and this can be a problem if mc hasn't learned
* them in the "Learn Keys" dialog. The value is in milliseconds.
*/
ESCDELAY = 200;
#endif /* HAVE_ESCDELAY */
do_enter_ca_mode ();
mc_raw_mode ();
noecho ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
init_colors ();
if (force_ugly_line_drawing) {
for (i = 0; acs_approx[i].acscode != 0; i++) {
acs_map[acs_approx[i].acscode] = acs_approx[i].character;
}
}
}
#endif /* ! HAVE_SLANG */
void void
clr_scr (void) clr_scr (void)
{ {

Просмотреть файл

@ -10,7 +10,6 @@
#include "widget.h" #include "widget.h"
void layout_cmd (void); void layout_cmd (void);
void init_curses (void);
void done_screen (void); void done_screen (void);
void setup_panels (void); void setup_panels (void);
void destroy_panels (void); void destroy_panels (void);

Просмотреть файл

@ -184,9 +184,6 @@ int mouse_move_pages = 1;
/* If true: l&r arrows are used to chdir if the input line is empty */ /* If true: l&r arrows are used to chdir if the input line is empty */
int navigate_with_arrows = 0; int navigate_with_arrows = 0;
/* If true use +, -, | for line drawing */
int force_ugly_line_drawing = 0;
/* If true program softkeys (HP terminals only) on startup and after every /* If true program softkeys (HP terminals only) on startup and after every
command ran in the subshell to the description found in the termcap/terminfo command ran in the subshell to the description found in the termcap/terminfo
database */ database */
@ -276,9 +273,6 @@ static char *last_wd_string = NULL;
/* Set to 1 to suppress printing the last directory */ /* Set to 1 to suppress printing the last directory */
static int print_last_revert = 0; static int print_last_revert = 0;
/* Force colors, only used by Slang */
int force_colors = 0;
/* colors specified on the command line: they override any other setting */ /* colors specified on the command line: they override any other setting */
char *command_line_colors = NULL; char *command_line_colors = NULL;
@ -2034,11 +2028,16 @@ process_args (poptContext ctx, int c, const char *option_arg)
exit (0); exit (0);
break; break;
case 'a':
tty_set_ugly_line_drawing (TRUE);
break;
case 'b':
tty_disable_colors (TRUE, FALSE);
break;
case 'c': case 'c':
disable_colors = 0; tty_disable_colors (FALSE, TRUE);
#ifdef HAVE_SLANG
force_colors = 1;
#endif /* HAVE_SLANG */
break; break;
case 'f': case 'f':
@ -2102,11 +2101,11 @@ static const struct poptOption argument_table[] = {
N_("Resets soft keys on HP terminals"), NULL}, N_("Resets soft keys on HP terminals"), NULL},
{"slow", 's', POPT_ARG_NONE, {&slow_terminal}, 0, {"slow", 's', POPT_ARG_NONE, {&slow_terminal}, 0,
N_("To run on slow terminals"), NULL}, N_("To run on slow terminals"), NULL},
{"stickchars", 'a', 0, {&force_ugly_line_drawing}, 0, {"stickchars", 'a', POPT_ARG_NONE, {NULL}, 'a',
N_("Use stickchars to draw"), NULL}, N_("Use stickchars to draw"), NULL},
/* color options */ /* color options */
{"nocolor", 'b', POPT_ARG_NONE, {&disable_colors}, 0, {"nocolor", 'b', POPT_ARG_NONE, {NULL}, 'b',
N_("Requests to run in black and white"), NULL}, N_("Requests to run in black and white"), NULL},
{"color", 'c', POPT_ARG_NONE, {NULL}, 'c', {"color", 'c', POPT_ARG_NONE, {NULL}, 'c',
N_("Request to run in color mode"), NULL}, N_("Request to run in color mode"), NULL},
@ -2281,7 +2280,7 @@ main (int argc, char *argv[])
handle_args (argc, argv); handle_args (argc, argv);
/* NOTE: This has to be called before slang_init or whatever routine /* NOTE: This has to be called before init_slang or whatever routine
calls any define_sequence */ calls any define_sequence */
init_key (); init_key ();
@ -2306,7 +2305,7 @@ main (int argc, char *argv[])
/* Must be done before init_subshell, to set up the terminal size: */ /* Must be done before init_subshell, to set up the terminal size: */
/* FIXME: Should be removed and LINES and COLS computed on subshell */ /* FIXME: Should be removed and LINES and COLS computed on subshell */
#ifdef HAVE_SLANG #ifdef HAVE_SLANG
slang_init (); init_slang ();
#endif #endif
start_interrupt_key (); start_interrupt_key ();

Просмотреть файл

@ -56,7 +56,6 @@ extern int utf8_display;
extern int confirm_view_dir; extern int confirm_view_dir;
extern int fast_refresh; extern int fast_refresh;
extern int navigate_with_arrows; extern int navigate_with_arrows;
extern int force_ugly_line_drawing;
extern int drop_menus; extern int drop_menus;
extern int cd_symlinks; extern int cd_symlinks;
extern int show_all_if_ambiguous; extern int show_all_if_ambiguous;
@ -68,7 +67,6 @@ extern int confirm_directory_hotlist_delete;
extern int confirm_execute; extern int confirm_execute;
extern int confirm_exit; extern int confirm_exit;
extern int confirm_overwrite; extern int confirm_overwrite;
extern int force_colors;
extern int boot_current_is_left; extern int boot_current_is_left;
extern int use_file_to_check_type; extern int use_file_to_check_type;
extern int vfs_use_limit; extern int vfs_use_limit;

Просмотреть файл

@ -7,8 +7,12 @@
#include <sys/types.h> /* size_t */ #include <sys/types.h> /* size_t */
#include "../../src/tty/color.h" /* colors and attributes */
#include "../../src/tty/color-internal.h" #include "../../src/tty/color-internal.h"
gboolean disable_colors = FALSE;
gboolean force_colors = FALSE; /* unused with NCurses */
struct color_table_s const color_table [] = { struct color_table_s const color_table [] = {
{ "black", COLOR_BLACK }, { "black", COLOR_BLACK },
{ "gray", COLOR_BLACK | A_BOLD }, { "gray", COLOR_BLACK | A_BOLD },

Просмотреть файл

@ -8,12 +8,17 @@
#include <sys/types.h> /* size_t */ #include <sys/types.h> /* size_t */
#include "../../src/global.h"
#ifdef HAVE_SLANG #ifdef HAVE_SLANG
# include "../../src/tty/tty-slang.h" # include "../../src/tty/tty-slang.h"
#else #else
# include "../../src/tty/tty-ncurses.h" # include "../../src/tty/tty-ncurses.h"
#endif /* HAVE_SLANG */ #endif /* HAVE_SLANG */
extern gboolean disable_colors;
extern gboolean force_colors; /* for S-Lang only */
struct color_table_s { struct color_table_s {
const char *name; const char *name;
int value; int value;

Просмотреть файл

@ -6,6 +6,8 @@
#ifndef MC_COLOR_NCURSES_H #ifndef MC_COLOR_NCURSES_H
#define MC_COLOR_NCURSES_H #define MC_COLOR_NCURSES_H
#include "../../src/tty/tty-ncurses.h" /* NCurses headers */
#define MAX_PAIRS 64 #define MAX_PAIRS 64
extern int attr_pairs [MAX_PAIRS]; extern int attr_pairs [MAX_PAIRS];

Просмотреть файл

@ -6,6 +6,33 @@
#ifndef MC_COLOR_SLANG_H #ifndef MC_COLOR_SLANG_H
#define MC_COLOR_SLANG_H #define MC_COLOR_SLANG_H
#include "../../src/tty/tty-slang.h" /* S-Lang headers */
enum {
COLOR_BLACK = 0,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW,
COLOR_BLUE,
COLOR_MAGENTA,
COLOR_CYAN,
COLOR_WHITE
};
/* When using Slang with color, we have all the indexes free but
* those defined here (A_BOLD, A_UNDERLINE, A_REVERSE, A_BOLD_REVERSE)
*/
#define A_BOLD 0x40
#define A_UNDERLINE 0x40
#define A_REVERSE 0x20
#define A_BOLD_REVERSE 0x21
#ifndef A_NORMAL
# define A_NORMAL 0x00
#endif
#define COLOR_PAIR(x) x
#define IF_COLOR(co, bw) (use_colors ? COLOR_PAIR (co) : bw) #define IF_COLOR(co, bw) (use_colors ? COLOR_PAIR (co) : bw)
#define MARKED_SELECTED_COLOR IF_COLOR (4, (SLtt_Use_Ansi_Colors ? A_BOLD_REVERSE : A_REVERSE | A_BOLD)) #define MARKED_SELECTED_COLOR IF_COLOR (4, (SLtt_Use_Ansi_Colors ? A_BOLD_REVERSE : A_REVERSE | A_BOLD))

Просмотреть файл

@ -13,7 +13,6 @@
#endif #endif
extern int use_colors; extern int use_colors;
extern int disable_colors;
/* Beware! When using Slang with color, not all the indexes are free. /* Beware! When using Slang with color, not all the indexes are free.
See myslang.h (A_*) */ See myslang.h (A_*) */

Просмотреть файл

@ -488,7 +488,7 @@ init_key_x11 (void)
#endif /* HAVE_TEXTMODE_X11_SUPPORT */ #endif /* HAVE_TEXTMODE_X11_SUPPORT */
/* This has to be called before slang_init or whatever routine /* This has to be called before init_slang or whatever routine
calls any define_sequence */ calls any define_sequence */
void void
init_key (void) init_key (void)

Просмотреть файл

@ -16,6 +16,8 @@
#include "../../src/tty/color-ncurses.h" #include "../../src/tty/color-ncurses.h"
#include "../../src/tty/tty-ncurses.h" #include "../../src/tty/tty-ncurses.h"
#include "../../src/tty/color-internal.h" /* disable_colors */
#include "../../src/tty/win.h"
#include "../../src/background.h" /* we_are_background */ #include "../../src/background.h" /* we_are_background */
#include "../../src/strutil.h" /* str_term_form */ #include "../../src/strutil.h" /* str_term_form */
@ -36,10 +38,67 @@
/*** file scope variables **********************************************/ /*** file scope variables **********************************************/
static const struct {
int acscode;
int character;
} acs_approx [] = {
{ 'q', '-' }, /* ACS_HLINE */
{ 'x', '|' }, /* ACS_VLINE */
{ 'l', '+' }, /* ACS_ULCORNER */
{ 'k', '+' }, /* ACS_URCORNER */
{ 'm', '+' }, /* ACS_LLCORNER */
{ 'j', '+' }, /* ACS_LRCORNER */
{ 'a', '#' }, /* ACS_CKBOARD */
{ 'u', '+' }, /* ACS_RTEE */
{ 't', '+' }, /* ACS_LTEE */
{ 'w', '+' }, /* ACS_TTEE */
{ 'v', '+' }, /* ACS_BTEE */
{ 'n', '+' }, /* ACS_PLUS */
{ 0, 0 } };
/*** file scope functions **********************************************/ /*** file scope functions **********************************************/
/*** public functions **************************************************/ /*** public functions **************************************************/
void
init_curses (void)
{
initscr ();
#ifdef HAVE_ESCDELAY
/*
* If ncurses exports the ESCDELAY variable, it should be set to
* a low value, or you'll experience a delay in processing escape
* sequences that are recognized by mc (e.g. Esc-Esc). On the other
* hand, making ESCDELAY too small can result in some sequences
* (e.g. cursor arrows) being reported as separate keys under heavy
* processor load, and this can be a problem if mc hasn't learned
* them in the "Learn Keys" dialog. The value is in milliseconds.
*/
ESCDELAY = 200;
#endif /* HAVE_ESCDELAY */
do_enter_ca_mode ();
mc_raw_mode ();
noecho ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
init_colors ();
if (tty_is_ugly_line_drawing ()) {
int i;
for (i = 0; acs_approx[i].acscode != 0; i++)
acs_map[acs_approx[i].acscode] = acs_approx[i].character;
}
}
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
(void) force_colors;
}
void void
tty_setcolor (int color) tty_setcolor (int color)
{ {

Просмотреть файл

@ -18,6 +18,7 @@
# include <ncursesw/curses.h> # include <ncursesw/curses.h>
#endif /* USE_NCURSESW */ #endif /* USE_NCURSESW */
void init_curses (void);
#define acs() #define acs()
#define noacs() #define noacs()

Просмотреть файл

@ -16,16 +16,17 @@
#include "../../src/global.h" #include "../../src/global.h"
#include "../../src/tty/tty-slang.h" /* mc-init_pair */ #include "../../src/tty/tty-slang.h" /* mc_init_pair */
#include "../../src/tty/color.h" #include "../../src/tty/color.h"
#include "../../src/tty/color-internal.h"
#include "../../src/tty/mouse.h" /* Gpm_Event is required in key.h */ #include "../../src/tty/mouse.h" /* Gpm_Event is required in key.h */
#include "../../src/tty/key.h" /* define_sequence */ #include "../../src/tty/key.h" /* define_sequence */
#include "../../src/tty/win.h" /* do_exit_ca_mode */ #include "../../src/tty/win.h"
#include "../../src/background.h" /* we_are_background */ #include "../../src/background.h" /* we_are_background */
#include "../../src/main.h" /* for slow_terminal */
#include "../../src/util.h" /* str_unconst */ #include "../../src/util.h" /* str_unconst */
#include "../../src/strutil.h" /* str_term_form */ #include "../../src/strutil.h" /* str_term_form */
#include "../../src/main.h" /* extern: force_colors */
#include "../../src/setup.h" #include "../../src/setup.h"
/*** global variables **************************************************/ /*** global variables **************************************************/
@ -217,7 +218,7 @@ load_terminfo_keys (void)
/*** public functions **************************************************/ /*** public functions **************************************************/
void void
slang_init (void) init_slang (void)
{ {
SLtt_get_terminfo (); SLtt_get_terminfo ();
#if SLANG_VERSION >= 20000 #if SLANG_VERSION >= 20000
@ -251,7 +252,7 @@ slang_init (void)
if (SLang_TT_Read_FD == fileno (stderr)) if (SLang_TT_Read_FD == fileno (stderr))
SLang_TT_Read_FD = fileno (stdin); SLang_TT_Read_FD = fileno (stdin);
if (force_ugly_line_drawing) if (tty_is_ugly_line_drawing ())
SLtt_Has_Alt_Charset = 0; SLtt_Has_Alt_Charset = 0;
if (tcgetattr (SLang_TT_Read_FD, &new_mode) == 0) { if (tcgetattr (SLang_TT_Read_FD, &new_mode) == 0) {
#ifdef VDSUSP #ifdef VDSUSP
@ -329,6 +330,16 @@ set_slang_delay (int v)
no_slang_delay = v; no_slang_delay = v;
} }
void
init_curses (void)
{
SLsmg_init_smg ();
do_enter_ca_mode ();
init_colors ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
}
void void
hline (int ch, int len) hline (int ch, int len)
{ {
@ -427,6 +438,13 @@ has_colors (void)
return SLtt_Use_Ansi_Colors; return SLtt_Use_Ansi_Colors;
} }
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
force_colors = force;
}
void void
tty_setcolor (int color) tty_setcolor (int color)
{ {

Просмотреть файл

@ -32,31 +32,6 @@ enum {
#define noacs() SLsmg_set_char_set (0) #define noacs() SLsmg_set_char_set (0)
#define baudrate() SLang_TT_Baud_Rate #define baudrate() SLang_TT_Baud_Rate
enum {
COLOR_BLACK = 0,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW,
COLOR_BLUE,
COLOR_MAGENTA,
COLOR_CYAN,
COLOR_WHITE
};
/* When using Slang with color, we have all the indexes free but
* those defined here (A_BOLD, A_UNDERLINE, A_REVERSE, A_BOLD_REVERSE)
*/
#define A_BOLD 0x40
#define A_UNDERLINE 0x40
#define A_REVERSE 0x20
#define A_BOLD_REVERSE 0x21
#ifndef A_NORMAL
# define A_NORMAL 0x00
#endif
#define COLOR_PAIR(x) x
#ifndef TRUE #ifndef TRUE
# define TRUE 1 # define TRUE 1
# define FALSE 0 # define FALSE 0
@ -80,7 +55,8 @@ void slang_set_raw_mode (void);
#define flushinp() #define flushinp()
void set_slang_delay (int); void set_slang_delay (int);
void slang_init (void); void init_slang (void);
void init_curses (void);
void slang_prog_mode (void); void slang_prog_mode (void);
void hline (int ch, int len); void hline (int ch, int len);
void vline (int ch, int len); void vline (int ch, int len);

Просмотреть файл

@ -52,6 +52,9 @@
static volatile sig_atomic_t got_interrupt = 0; static volatile sig_atomic_t got_interrupt = 0;
/* If true use +, -, | for line drawing */
static gboolean force_ugly_line_drawing = FALSE;
/*** file scope functions **********************************************/ /*** file scope functions **********************************************/
static void static void
@ -107,6 +110,16 @@ tty_got_interrupt(void)
return rv; return rv;
} }
void tty_set_ugly_line_drawing (gboolean do_ugly)
{
force_ugly_line_drawing = do_ugly;
}
gboolean tty_is_ugly_line_drawing (void)
{
return force_ugly_line_drawing;
}
extern void extern void
tty_print_one_hline(void) tty_print_one_hline(void)
{ {

Просмотреть файл

@ -26,6 +26,7 @@ extern void tty_enable_interrupt_key(void);
extern void tty_disable_interrupt_key(void); extern void tty_disable_interrupt_key(void);
extern gboolean tty_got_interrupt(void); extern gboolean tty_got_interrupt(void);
/* {{{ Output }}} */ /* {{{ Output }}} */
/* /*
@ -37,18 +38,23 @@ extern gboolean tty_got_interrupt(void);
extern void tty_gotoyx(int y, int x); extern void tty_gotoyx(int y, int x);
extern void tty_getyx(int *py, int *px); extern void tty_getyx(int *py, int *px);
extern void tty_disable_colors (gboolean disable, gboolean force);
extern void tty_setcolor(int color); extern void tty_setcolor(int color);
extern void tty_lowlevel_setcolor(int color); extern void tty_lowlevel_setcolor(int color);
extern void tty_print_char(int c); extern void tty_print_char(int c);
extern void tty_print_alt_char(int c); extern void tty_print_alt_char(int c);
extern void tty_print_string(const char *s); extern void tty_print_string(const char *s);
extern void tty_printf(const char *s, ...);
extern void tty_set_ugly_line_drawing (gboolean do_ugly);
extern gboolean tty_is_ugly_line_drawing (void);
extern void tty_print_one_vline(void); extern void tty_print_one_vline(void);
extern void tty_print_one_hline(void); extern void tty_print_one_hline(void);
extern void tty_print_vline(int top, int left, int length); extern void tty_print_vline(int top, int left, int length);
extern void tty_print_hline(int top, int left, int length); extern void tty_print_hline(int top, int left, int length);
extern void tty_draw_box (int y, int x, int rows, int cols); extern void tty_draw_box (int y, int x, int rows, int cols);
extern void tty_printf(const char *s, ...);
extern char *tty_tgetstr (const char *name); extern char *tty_tgetstr (const char *name);