diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-05-02 19:13:16 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-05-02 19:13:16 +0000 |
commit | eae2e282472b4c2d73e90d946ab858f1b7494b77 (patch) | |
tree | 6c482de8485265a99288ae876a69775a09c5f7f6 /term.c | |
parent | 4696367480f82cbfce5503707e111a20538288cc (diff) |
Merge Tilghman's color patches for the asterisk prompt (bug #1535)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2862 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'term.c')
-rwxr-xr-x | term.c | 60 |
1 files changed, 60 insertions, 0 deletions
@@ -96,6 +96,66 @@ char *term_color(char *outbuf, const char *inbuf, int fgcolor, int bgcolor, int return outbuf; } +char *term_color_code(char *outbuf, int fgcolor, int bgcolor, int maxout) +{ + int attr=0; + char tmp[40]; + if ((!vt100compat) || (!fgcolor && !bgcolor)) { + *outbuf = '\0'; + return outbuf; + } + if ((fgcolor & 128) && (bgcolor & 128)) { + /* Can't both be highlighted */ + *outbuf = '\0'; + return outbuf; + } + if (!bgcolor) + bgcolor = COLOR_BLACK; + + if (bgcolor) { + bgcolor &= ~128; + bgcolor += 10; + } + if (fgcolor & 128) { + attr = ATTR_BRIGHT; + fgcolor &= ~128; + } + if (fgcolor && bgcolor) { + snprintf(tmp, sizeof(tmp), "%d;%d", fgcolor, bgcolor); + } else if (bgcolor) { + snprintf(tmp, sizeof(tmp), "%d", bgcolor); + } else if (fgcolor) { + snprintf(tmp, sizeof(tmp), "%d", fgcolor); + } + if (attr) { + snprintf(outbuf, maxout, "%c[%d;%sm", ESC, attr, tmp); + } else { + snprintf(outbuf, maxout, "%c[%sm", ESC, tmp); + } + return outbuf; +} + +char *term_strip(char *outbuf, char *inbuf, int maxout) +{ + char *outbuf_ptr = outbuf, *inbuf_ptr = inbuf; + + while (outbuf_ptr < outbuf + maxout) { + switch (*inbuf_ptr) { + case ESC: + while (*inbuf_ptr && (*inbuf_ptr != 'm')) + inbuf_ptr++; + break; + default: + *outbuf_ptr = *inbuf_ptr; + outbuf_ptr++; + } + if (! *inbuf_ptr) + break; + inbuf_ptr++; + } + return outbuf; +} + char *term_prompt(char *outbuf, const char *inbuf, int maxout) { if (!vt100compat) { |