[DGD]hmm.... dont seem like this got through.

BladeDarkmour at aol.com BladeDarkmour at aol.com
Tue Apr 25 14:06:09 CEST 2000


Allo peeps.. Yet another newbish question from me.
Ok, I'm trying to set it up so that I can type "say `ryadda yadda" and that 
would output, assuming the recipient is capable of ansi colors, yadda yadda 
in dark red.  the actual C code to do this for the various ` codes is 
simple... just manipulation of a char*, but when I try to put this into the 
driver, it either a) segfaults, or b)returns garbage anytime I use an escape 
code.  I've tried doing this 3 diff ways... one putting it in conn_write in 
connect.c, b) comm_write in comm.c, and c) making a seperate function, 
parse_color(char* txt, int length), which i tried to use in the above 
functions... none of hte ways worked.  I've fixed the line in comm_write so 
that itll let out the ansi escape code, (adding && *p != ESC and defining 
ESC...).  I'll include the code to parse the color below. *Grumbles to 
himself about feelin like a dunce*  Think you people could take a look and 
offer a few suggestions?

Yes, this could be done more cleanly, but it suffices:

/*
 * NAME:    parse_color()
 * DESCRIPTION: parse ansi color codes
 */
char* parse_color(char* txt, int length)
{
    int i, k;
    char ch, *tmptxt;
    /* Expand color codes */
    for( i = 0, k = 0; i < length; i++ )
    {       
        /* See if expansion necessary */
        if ( txt[i] != '`' )
            tmptxt[k++] = txt[i];
        else
        {
            /* Insert general ANSI codes */
            tmptxt[k++] = 27;
            tmptxt[k++] = '[';
            tmptxt[k++] = '0';
            tmptxt[k++] = ';';
           
            /* Get second character of code */
            ch = txt[++i];
            switch( ch )
            {
            /* Deal with double "`" */
            case '`' :
                k -= 4;
                tmptxt[k++] = '`';
                continue;
            /* Deal with lower case */
            case 'r' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '1';
                break;
            case 'g' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '2';
                break;
            case 'y' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '3';
                break;
            case 'b' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '4';
                break;
            case 'm' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '5';
                break;
            case 'c' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '6';
                break;
            case 'w' :
                tmptxt[k++] = '3';
                tmptxt[k++] = '7';
                break;
            /* Deal with black */
            case 'l' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '0';
                break;
            /* Deal with upper case */
            case 'R' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '1';
                break;
            case 'G' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '2';
                break;
            case 'Y' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '3';
                break;
            case 'B' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '4';
                break;
            case 'M' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '5';
                break;
            case 'C' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '6';
                break;
            case 'W' :
                tmptxt[k++] = '1';
                tmptxt[k++] = ';';
                tmptxt[k++] = '3';
                tmptxt[k++] = '7';
                break;
            default :
                break;
            }
            /* Finish ANSI code */
            tmptxt[k++] = 'm';
        }
    }
    
    return txt;
}

Thanx for any forthcoming help,
JD

List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list