+/*! The translation table between the graphical font and plain ASCII --KB */
+static char qfont_table[256] = {
+ '\0', '#', '#', '#', '#', '.', '#', '#',
+ '#', 9, 10, '#', ' ', 13, '.', '.',
+ '[', ']', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', '.', '<', '=', '>',
+ ' ', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
+ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', '{', '|', '}', '~', '<',
+
+ '<', '=', '>', '#', '#', '.', '#', '#',
+ '#', '#', ' ', '#', ' ', '>', '.', '.',
+ '[', ']', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', '.', '<', '=', '>',
+ ' ', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
+ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', '{', '|', '}', '~', '<'
+};
+
+/*
+ SanitizeString strips color tags from the string in
+ and writes the result on string out
+*/
+static void SanitizeString(char *in, char *out)
+{
+ while(*in)
+ {
+ if(*in == STRING_COLOR_TAG)
+ {
+ ++in;
+ if(!*in)
+ {
+ out[0] = STRING_COLOR_TAG;
+ out[1] = 0;
+ return;
+ }
+ else if (*in >= '0' && *in <= '9') // ^[0-9] found
+ {
+ ++in;
+ if(!*in)
+ {
+ *out = 0;
+ return;
+ } else if (*in == STRING_COLOR_TAG) // ^[0-9]^ found, don't print ^[0-9]
+ continue;
+ }
+ else if (*in == STRING_COLOR_RGB_TAG_CHAR) // ^x found
+ {
+ if ( isxdigit(in[1]) && isxdigit(in[2]) && isxdigit(in[3]) )
+ {
+ in+=4;
+ if (!*in)
+ {
+ *out = 0;
+ return;
+ } else if (*in == STRING_COLOR_TAG) // ^xrgb^ found, don't print ^xrgb
+ continue;
+ }
+ else in--;
+ }
+ else if (*in != STRING_COLOR_TAG)
+ --in;
+ }
+ *out = qfont_table[*(unsigned char*)in];
+ ++in;
+ ++out;
+ }
+ *out = 0;
+}
+