[DGD]hmm.. this seems to not be goin through...

BladeDarkmour at aol.com BladeDarkmour at aol.com
Wed Apr 26 00:48:37 CEST 2000


i've sent this twice allready in as many days (this makes third).. lets try 
again.

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