diff options
Diffstat (limited to 'src/c_ansic.c')
-rw-r--r-- | src/c_ansic.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/c_ansic.c b/src/c_ansic.c new file mode 100644 index 0000000..9a1a099 --- /dev/null +++ b/src/c_ansic.c @@ -0,0 +1,90 @@ +/* c_ansic.c -- + + This file is part of the lzop file compressor. + + Copyright (C) 1996-2010 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + lzop and the LZO library are free software; you can redistribute them + and/or modify them under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzop/ + */ + + +#include "conf.h" + +#if defined(USE_ANSI) + +/************************************************************************* +// +**************************************************************************/ + +static int cur_fg = -1; + + +static int init(FILE *f, int o, int now) +{ + UNUSED(f); + UNUSED(now); + if (o == CON_INIT) + return CON_INIT; /* do not use by default */ + if (o < CON_ANSI_COLOR) + return CON_INIT; /* do not use by default */ + return CON_ANSI_COLOR; +} + + +static int set_fg(FILE *f, int fg) +{ + int last_fg = cur_fg; + + if (fg < 0) + fputs("\033[0m",f); + else + { + /* try to map colors */ + static const unsigned char ansi_fg[16] = + /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ + { 0, 1, 2, 6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 11, 15 }; + int e = ansi_fg[fg & 0xf]; + if (e < 8) + fprintf(f, "\033[0;%dm", 30 + (e & 7)); + else + fprintf(f, "\033[0;1;%dm", 30 + (e & 7)); + } + + cur_fg = fg; + return last_fg; +} + + +console_t console_ansi_color = +{ + init, + set_fg, + 0, + 0 +}; + +#endif /* USE_ANSI */ + + +/* +vi:ts=4:et +*/ + |