[Serdev] xlog color patch

Ingo Wolfsberger iwolfsberger at gmx.net
Sun Jun 12 02:15:52 UTC 2005


Hi

xlog is very powerfull, but finding a log entry is hard.
With xlog color patch it is possible to change the color (foreground,
background) of the log entry. An ansi color capable term(emulation) is
needed.

>From the readme:
     _________________________________________________________
1.2.1 Color Specifiers

     *  %Cxy : Color specifier; x: foreground, y: background

     Colors could be:

     * s : Black
     * r : Red
     * g : Green
     * y : Yellow
     * b : Blue
     * p : Purple
     * c : Cyan
     * w : White

     Writting the 1st color specifier in capitals gives bold 
     text.
     The 2nd color specifier could be left away to only change 
     foreground color.
     _________________________________________________________

The patch:
     _________________________________________________________
Common subdirectories: modules/xlog_org/CVS and modules/xlog/CVS
Common subdirectories: modules/xlog_org/doc and modules/xlog/doc
diff modules/xlog_org/README modules/xlog/README
97a98,117
> 
> 1.2.1 Color Specifiers
> 
>      *  %Cxy : Color specifier; x: foreground, y: background
> 
>      Colors could be:
> 
>      * s : Black
>      * r : Red
>      * g : Green
>      * y : Yellow
>      * b : Blue
>      * p : Purple
>      * c : Cyan
>      * w : White
> 
>      Writting the 1st color specifier in capitals gives bold 
>      text.
>      The 2nd color specifier could be left away to only change 
>      foreground color.
diff -W 60 modules/xlog_org/xl_lib.c modules/xlog/xl_lib.c
40a41
> #include <ctype.h>
65a67,68
> #define COL_BUF 20
> 
68a72,166
> static int xl_get_color(struct sip_msg *msg, str *res, str *hp, int hi) 
> {
>       static char color[COL_BUF];
>       
>       /* excape sequenz */
>       strncpy( color, "\033[", COL_BUF);
>       
>         if (islower(hp->s[0])) {
>                 /* normal font */
>                 strncpy( color+strlen(color), "0;", COL_BUF);
>         }
>         else {
>                 /* bold font */
>                 strncpy( color+strlen(color), "1;", COL_BUF);
>                         hp->s[0] += 32;
>         }
>       
>       /* foreground */
>       switch(hp->s[0])
>       {
>               case 's':
>                       strncpy( color+strlen(color), "30;", COL_BUF);
>               break;
>               case 'r':
>                       strncpy( color+strlen(color), "31;", COL_BUF);
>               break;
>               case 'g':
>                       strncpy( color+strlen(color), "32;", COL_BUF);
>               break;
>               case 'y':
>                       strncpy( color+strlen(color), "33;", COL_BUF);
>               break;
>               case 'b':
>                       strncpy( color+strlen(color), "34;", COL_BUF);
>               break;
>               case 'p':
>                       strncpy( color+strlen(color), "35;", COL_BUF);
>               break;
>               case 'c':
>                       strncpy( color+strlen(color), "36;", COL_BUF);
>               break;
>               case 'w':
>                       strncpy( color+strlen(color), "37;", COL_BUF);
>               break;
>               default:
>                       LOG(L_ERR, "XLOG: exit foreground\n");
>                       return -1;
>       }
>       
>       /* background */
>       if (hp->len == 1) {
>               switch(hp->s[1])
>               {
>                       case 's':
>                               strncpy( color+strlen(color), "40",
COL_BUF);
>                       break;
>                       case 'r':
>                               strncpy( color+strlen(color), "41",
COL_BUF);
>                       break;
>                       case 'g':
>                               strncpy( color+strlen(color), "42",
COL_BUF);
>                       break;
>                       case 'y':
>                               strncpy( color+strlen(color), "43",
COL_BUF);
>                       break;
>                       case 'b':
>                               strncpy( color+strlen(color), "44",
COL_BUF);
>                       break;
>                       case 'p':
>                               strncpy( color+strlen(color), "45",
COL_BUF);
>                       break;
>                       case 'c':
>                               strncpy( color+strlen(color), "46",
COL_BUF);
>                       break;
>                       case 'w':
>                               strncpy( color+strlen(color), "47",
COL_BUF);
>                       break;
>                       default: 
>                               return -1;
>               }
>       }
>       else {
>               strncpy( color+strlen(color), "40", COL_BUF);
>       }
> 
>       /* end */
>       strncpy( color+strlen(color), "m", COL_BUF);
> 
>       res->s = color;
>       res->len = strlen(color);
>       return 0;
> }
>       
> 
> 
727a826,827
>         char buf[COL_BUF];
>         *buf = '\0';
794a895,967
>                       case 'C':
>                                 p++;
>                               e->hparam.s = p;
>                               
>                               /* foreground */
>                               switch(*p)
>                               {
>                                       case 's':
>                                       break;
>                                       case 'r':
>                                         break;
>                                         case 'g':
>                                         break;
>                                         case 'y':
>                                         break;
>                                         case 'b':
>                                         break;
>                                         case 'p':
>                                         break;
>                                         case 'c':
>                                         break;
>                                         case 'w':
>                                         break;
>                                         case 'S':
>                                         break;
>                                         case 'R':
>                                         break;   
>                                         case 'G':
>                                         break;   
>                                         case 'Y':
>                                         break;   
>                                         case 'B':
>                                         break;   
>                                         case 'P':
>                                         break;   
>                                         case 'C':
>                                         break;   
>                                         case 'W':
>                                         break;   
>                                       default:
>                                               e->itf = xl_get_null;
>                                               goto error;
>                               }
>                               p++;
>                               
>                               /* background */
>                               switch(*p)
>                                 {
>                                         case 's':
>                                         break;
>                                         case 'r':
>                                         break;
>                                         case 'g':
>                                         break;
>                                         case 'y':
>                                         break;
>                                         case 'b':
>                                         break;
>                                         case 'p':
>                                         break;
>                                         case 'c':
>                                         break;
>                                         case 'w':
>                                         break;
>                                         default:
>                                               p--;
>                                 }   
>                               
>                               /* end */
>                               e->hparam.len = p - e->hparam.s;
>                               e->itf = xl_get_color;
>                               
>                       break;
1057c1230
<       int n;
---
>       int n, h;
1070c1243,1244
<       
---
>       
>       h = 0;
1076c1250
<               {
---
>               {       
1093a1268,1273
> 
>                               /* check for color entries to reset later */
>                               if (*it->itf == xl_get_color) {
>                                       h = 1;
>                               }
>                                       
1098a1279,1287
>       
>       /* reset to default after entry */
>       if ((h == 1) && ((n+strlen("\033[0m")) < *len))
>       {
>               memcpy(cur, "\033[0m", strlen("\033[0m"));
>               n += strlen("\033[0m");
>               cur += strlen("\033[0m");
>       } 
> 
     _________________________________________________________

bye,
    Ingo

-- 
Geschenkt: 3 Monate GMX ProMail gratis + 3 Ausgaben stern gratis
++ Jetzt anmelden & testen ++ http://www.gmx.net/de/go/promail ++




More information about the Serdev mailing list