[Serdev] xlog color patch
Bayan William Towfiq
william at telepacket.com
Sun Jun 12 21:02:16 UTC 2005
Can you submit these as attachments?
William
Ingo Wolfsberger wrote:
>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
>
>
>
More information about the Serdev
mailing list