Cleanups and simplifications in mircansi(), removal of some more warnings.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@141 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
107
source/misc.c
107
source/misc.c
@@ -866,7 +866,7 @@ register char *uh = userhost;
|
|||||||
|
|
||||||
#ifndef BITCHX_LITE
|
#ifndef BITCHX_LITE
|
||||||
|
|
||||||
static unsigned char newline1[BIG_BUFFER_SIZE+1];
|
static char newline1[BIG_BUFFER_SIZE+1];
|
||||||
/*
|
/*
|
||||||
* (max server send) and max mirc color change is 256
|
* (max server send) and max mirc color change is 256
|
||||||
* so 256 * 8 should give us a safety margin for hackers.
|
* so 256 * 8 should give us a safety margin for hackers.
|
||||||
@@ -948,7 +948,7 @@ struct {
|
|||||||
return (char *)newline1;
|
return (char *)newline1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
char *mircansi(unsigned char *line)
|
char *mircansi(const char *line)
|
||||||
{
|
{
|
||||||
/* mconv v1.00 (c) copyright 1996 Ananda, all rights reserved. */
|
/* mconv v1.00 (c) copyright 1996 Ananda, all rights reserved. */
|
||||||
/* ----------------------------------------------------------- */
|
/* ----------------------------------------------------------- */
|
||||||
@@ -956,72 +956,87 @@ char *mircansi(unsigned char *line)
|
|||||||
/* map of mIRC color values to ansi color codes */
|
/* map of mIRC color values to ansi color codes */
|
||||||
/* format: ansi fg color ansi bg color */
|
/* format: ansi fg color ansi bg color */
|
||||||
/* modified Colten Edwards */
|
/* modified Colten Edwards */
|
||||||
struct {
|
static const struct {
|
||||||
char *fg, *bg;
|
const char *fg, *bg;
|
||||||
} codes[16] = {
|
} codes[16] = {
|
||||||
|
{ "\x1b[1;37m", "\x1b[47m" }, /* white */
|
||||||
{ "[1;37m", "[47m" }, /* white */
|
{ "\x1b[0;30m", "\x1b[40m" }, /* black (grey for us) */
|
||||||
{ "[0;30m", "[40m" }, /* black (grey for us) */
|
{ "\x1b[0;34m", "\x1b[44m" }, /* blue */
|
||||||
{ "[0;34m", "[44m" }, /* blue */
|
{ "\x1b[0;32m", "\x1b[42m" }, /* green */
|
||||||
{ "[0;32m", "[42m" }, /* green */
|
{ "\x1b[0;31m", "\x1b[41m" }, /* red */
|
||||||
{ "[0;31m", "[41m" }, /* red */
|
{ "\x1b[0;33m", "\x1b[43m" }, /* brown */
|
||||||
{ "[0;33m", "[43m" }, /* brown */
|
{ "\x1b[0;35m", "\x1b[45m" }, /* magenta */
|
||||||
|
{ "\x1b[1;31m", "\x1b[41m" }, /* bright red */
|
||||||
{ "[0;35m", "[45m" }, /* magenta */
|
{ "\x1b[1;33m", "\x1b[43m" }, /* yellow */
|
||||||
{ "[1;31m", "[41m" }, /* bright red */
|
{ "\x1b[1;32m", "\x1b[42m" }, /* bright green */
|
||||||
{ "[1;33m", "[43m" }, /* yellow */
|
{ "\x1b[0;36m", "\x1b[46m" }, /* cyan */
|
||||||
|
{ "\x1b[1;36m", "\x1b[46m" }, /* bright cyan */
|
||||||
{ "[1;32m", "[42m" }, /* bright green */
|
{ "\x1b[1;34m", "\x1b[44m" }, /* bright blue */
|
||||||
{ "[0;36m", "[46m" }, /* cyan */
|
{ "\x1b[1;35m", "\x1b[45m" }, /* bright magenta */
|
||||||
{ "[1;36m", "[46m" }, /* bright cyan */
|
{ "\x1b[1;30m", "\x1b[40m" }, /* dark grey */
|
||||||
{ "[1;34m", "[44m" }, /* bright blue */
|
{ "\x1b[0;37m", "\x1b[47m" } /* grey */
|
||||||
{ "[1;35m", "[45m" }, /* bright magenta */
|
|
||||||
{ "[1;30m", "[40m" }, /* dark grey */
|
|
||||||
{ "[0;37m", "[47m" } /* grey */
|
|
||||||
};
|
};
|
||||||
register unsigned char *sptr = line, *dptr = newline1;
|
|
||||||
short code;
|
const char *sptr = line;
|
||||||
|
char *dptr = newline1;
|
||||||
|
unsigned code;
|
||||||
|
|
||||||
if (!*line)
|
if (!*line)
|
||||||
return empty_string;
|
return empty_string;
|
||||||
*newline1 = 0;
|
|
||||||
while (*sptr) {
|
while (*sptr)
|
||||||
if (*sptr == '' && isdigit(sptr[1]))
|
{
|
||||||
|
if (*sptr == '\x03')
|
||||||
{
|
{
|
||||||
sptr++;
|
sptr++;
|
||||||
|
|
||||||
|
if (isdigit((unsigned char)*sptr))
|
||||||
|
{
|
||||||
|
/* ^C followed by digit*/
|
||||||
code = *sptr - '0';
|
code = *sptr - '0';
|
||||||
sptr++;
|
sptr++;
|
||||||
if (isdigit (*sptr)) {
|
|
||||||
|
if (isdigit((unsigned char)*sptr)) {
|
||||||
code = code * 10 + *sptr - '0';
|
code = code * 10 + *sptr - '0';
|
||||||
sptr++;
|
sptr++;
|
||||||
}
|
}
|
||||||
if (code > 15 || code <= 0) code = code % 16;
|
|
||||||
|
code = code % 16;
|
||||||
strcpy(dptr, codes[code].fg);
|
strcpy(dptr, codes[code].fg);
|
||||||
while (*dptr) dptr++;
|
while (*dptr)
|
||||||
if (*sptr == ',' && isdigit(sptr[1]))
|
dptr++;
|
||||||
|
|
||||||
|
/* Do not consume , if not followed by digit */
|
||||||
|
if (sptr[0] == ',' && isdigit((unsigned char)sptr[1]))
|
||||||
{
|
{
|
||||||
sptr++;
|
code = sptr[1] - '0';
|
||||||
code = *sptr - '0';
|
sptr += 2;
|
||||||
sptr++;
|
|
||||||
if (isdigit (*sptr)) {
|
if (isdigit ((unsigned char)*sptr)) {
|
||||||
code = code * 10 + *sptr - '0';
|
code = code * 10 + *sptr - '0';
|
||||||
sptr++;
|
sptr++;
|
||||||
}
|
}
|
||||||
if (code > 15 || code <= 0) code = code % 16;
|
|
||||||
|
code = code % 16;
|
||||||
strcpy(dptr, codes[code].bg);
|
strcpy(dptr, codes[code].bg);
|
||||||
while (*dptr) dptr++;
|
while (*dptr)
|
||||||
|
dptr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*sptr == '')
|
else
|
||||||
{
|
{
|
||||||
strcpy(dptr, "[0m");
|
/* ^C not followed by digit - assume end of color */
|
||||||
while(*dptr) dptr++;
|
strcpy(dptr, "\x1b[0m");
|
||||||
sptr++;
|
while (*dptr)
|
||||||
|
dptr++;
|
||||||
}
|
}
|
||||||
else *dptr++ = *sptr++;
|
}
|
||||||
|
else
|
||||||
|
*dptr++ = *sptr++;
|
||||||
}
|
}
|
||||||
*dptr = 0;
|
*dptr = 0;
|
||||||
return (char *)newline1;
|
|
||||||
|
return newline1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1029,7 +1044,7 @@ struct {
|
|||||||
char *stripansicodes(const char *line)
|
char *stripansicodes(const char *line)
|
||||||
{
|
{
|
||||||
const char *tstr = line;
|
const char *tstr = line;
|
||||||
char *nstr = (char *)newline1;
|
char *nstr = newline1;
|
||||||
int gotansi = 0;
|
int gotansi = 0;
|
||||||
|
|
||||||
while (*tstr)
|
while (*tstr)
|
||||||
@@ -1050,7 +1065,7 @@ char *stripansicodes(const char *line)
|
|||||||
tstr++;
|
tstr++;
|
||||||
}
|
}
|
||||||
*nstr = 0;
|
*nstr = 0;
|
||||||
return (char *)newline1;
|
return newline1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
char *stripansicodes(const char *line)
|
char *stripansicodes(const char *line)
|
||||||
|
|||||||
Reference in New Issue
Block a user