Asterisk - The Open Source Telephony Project GIT-master-a358458
Macros | Functions
term.h File Reference

Handy terminal functions for vt* terms. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define AST_TERM_MAX_ESCAPE_CHARS   23
 Maximum number of characters needed for a color escape sequence, and another one for a trailing reset, plus a null char. More...
 
#define AST_TERM_MAX_ROTATING_BUFFERS   15
 
#define COLORIZE(fg, bg, str)   ast_term_color(fg,bg),str,ast_term_reset()
 
#define COLORIZE_FMT   "%s%s%s"
 Shortcut macros for coloring a set of text. More...
 
#define ESC   0x1b
 
Terminal Attributes
#define ATTR_BLINK   5
 
#define ATTR_BRIGHT   1
 
#define ATTR_DIM   2
 
#define ATTR_HIDDEN   8
 
#define ATTR_RESET   0
 
#define ATTR_REVER   7
 
#define ATTR_UNDER   4
 
Terminal Colors
#define COLOR_BLACK   30
 
#define COLOR_BLUE   34
 
#define COLOR_BRBLUE   (34 | 128)
 
#define COLOR_BRCYAN   (36 | 128)
 
#define COLOR_BRGREEN   (32 | 128)
 
#define COLOR_BRMAGENTA   (35 | 128)
 
#define COLOR_BROWN   33
 
#define COLOR_BRRED   (31 | 128)
 
#define COLOR_BRWHITE   (37 | 128)
 
#define COLOR_CYAN   36
 
#define COLOR_GRAY   (30 | 128)
 
#define COLOR_GREEN   32
 
#define COLOR_MAGENTA   35
 
#define COLOR_RED   31
 
#define COLOR_WHITE   37
 
#define COLOR_YELLOW   (33 | 128)
 

Functions

const char * ast_term_color (int fgcolor, int bgcolor)
 Return a color sequence string. More...
 
int ast_term_color_code (struct ast_str **str, int fgcolor, int bgcolor)
 Append a color sequence to an ast_str. More...
 
const char * ast_term_reset (void)
 Returns the terminal reset code. More...
 
char * term_color (char *outbuf, const char *inbuf, int fgcolor, int bgcolor, int maxout)
 Colorize a specified string by adding terminal color codes. More...
 
char * term_color_code (char *outbuf, int fgcolor, int bgcolor, int maxout)
 Write a color sequence to a string. More...
 
const char * term_end (void)
 
void term_filter_escapes (char *line)
 
const char * term_quit (void)
 
char * term_strip (char *outbuf, const char *inbuf, int maxout)
 Remove colorings from a specified string. More...
 

Detailed Description

Handy terminal functions for vt* terms.

Definition in file term.h.

Macro Definition Documentation

◆ AST_TERM_MAX_ESCAPE_CHARS

#define AST_TERM_MAX_ESCAPE_CHARS   23

Maximum number of characters needed for a color escape sequence, and another one for a trailing reset, plus a null char.

Definition at line 75 of file term.h.

◆ AST_TERM_MAX_ROTATING_BUFFERS

#define AST_TERM_MAX_ROTATING_BUFFERS   15

Definition at line 76 of file term.h.

◆ ATTR_BLINK

#define ATTR_BLINK   5

Definition at line 40 of file term.h.

◆ ATTR_BRIGHT

#define ATTR_BRIGHT   1

Definition at line 37 of file term.h.

◆ ATTR_DIM

#define ATTR_DIM   2

Definition at line 38 of file term.h.

◆ ATTR_HIDDEN

#define ATTR_HIDDEN   8

Definition at line 42 of file term.h.

◆ ATTR_RESET

#define ATTR_RESET   0

Definition at line 36 of file term.h.

◆ ATTR_REVER

#define ATTR_REVER   7

Definition at line 41 of file term.h.

◆ ATTR_UNDER

#define ATTR_UNDER   4

Definition at line 39 of file term.h.

◆ COLOR_BLACK

#define COLOR_BLACK   30

Definition at line 50 of file term.h.

◆ COLOR_BLUE

#define COLOR_BLUE   34

Definition at line 58 of file term.h.

◆ COLOR_BRBLUE

#define COLOR_BRBLUE   (34 | 128)

Definition at line 59 of file term.h.

◆ COLOR_BRCYAN

#define COLOR_BRCYAN   (36 | 128)

Definition at line 63 of file term.h.

◆ COLOR_BRGREEN

#define COLOR_BRGREEN   (32 | 128)

Definition at line 55 of file term.h.

◆ COLOR_BRMAGENTA

#define COLOR_BRMAGENTA   (35 | 128)

Definition at line 61 of file term.h.

◆ COLOR_BROWN

#define COLOR_BROWN   33

Definition at line 56 of file term.h.

◆ COLOR_BRRED

#define COLOR_BRRED   (31 | 128)

Definition at line 53 of file term.h.

◆ COLOR_BRWHITE

#define COLOR_BRWHITE   (37 | 128)

Definition at line 65 of file term.h.

◆ COLOR_CYAN

#define COLOR_CYAN   36

Definition at line 62 of file term.h.

◆ COLOR_GRAY

#define COLOR_GRAY   (30 | 128)

Definition at line 51 of file term.h.

◆ COLOR_GREEN

#define COLOR_GREEN   32

Definition at line 54 of file term.h.

◆ COLOR_MAGENTA

#define COLOR_MAGENTA   35

Definition at line 60 of file term.h.

◆ COLOR_RED

#define COLOR_RED   31

Definition at line 52 of file term.h.

◆ COLOR_WHITE

#define COLOR_WHITE   37

Definition at line 64 of file term.h.

◆ COLOR_YELLOW

#define COLOR_YELLOW   (33 | 128)

Definition at line 57 of file term.h.

◆ COLORIZE

#define COLORIZE (   fg,
  bg,
  str 
)    ast_term_color(fg,bg),str,ast_term_reset()

Definition at line 72 of file term.h.

◆ COLORIZE_FMT

#define COLORIZE_FMT   "%s%s%s"

Shortcut macros for coloring a set of text.

Definition at line 71 of file term.h.

◆ ESC

#define ESC   0x1b

Definition at line 30 of file term.h.

Function Documentation

◆ ast_term_color()

const char * ast_term_color ( int  fgcolor,
int  bgcolor 
)

Return a color sequence string.

Parameters
fgcolorforeground color
bgcolorbackground color
Note
This function may be called up to 15 times within the arguments to a single function without the danger of overwriting a common buffer.
Returns
A color sequence string, or the empty string, on error

Definition at line 341 of file term.c.

342{
343 struct commonbuf *cb = ast_threadstorage_get(&commonbuf, sizeof(*cb));
344 char *buf;
345
346 if (!cb) {
347 return "";
348 }
349 buf = cb->buffer[cb->which++];
351 cb->which = 0;
352 }
353
354 return term_color_code(buf, fgcolor, bgcolor, AST_TERM_MAX_ESCAPE_CHARS);
355}
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
Definition: term.c:57
short which
Definition: term.c:58
char buffer[AST_TERM_MAX_ROTATING_BUFFERS][AST_TERM_MAX_ESCAPE_CHARS]
Definition: term.c:59
char * term_color_code(char *outbuf, int fgcolor, int bgcolor, int maxout)
Write a color sequence to a string.
Definition: term.c:318
#define AST_TERM_MAX_ROTATING_BUFFERS
Definition: term.h:76
#define AST_TERM_MAX_ESCAPE_CHARS
Maximum number of characters needed for a color escape sequence, and another one for a trailing reset...
Definition: term.h:75
void * ast_threadstorage_get(struct ast_threadstorage *ts, size_t init_size)
Retrieve thread storage.

References AST_TERM_MAX_ESCAPE_CHARS, AST_TERM_MAX_ROTATING_BUFFERS, ast_threadstorage_get(), buf, commonbuf::buffer, term_color_code(), and commonbuf::which.

Referenced by print_app_docs(), print_queue(), and set_header().

◆ ast_term_color_code()

int ast_term_color_code ( struct ast_str **  str,
int  fgcolor,
int  bgcolor 
)

Append a color sequence to an ast_str.

Parameters
strThe string to append to
fgcolorforeground color
bgcolorbackground color
Return values
0success
-1failure

Definition at line 296 of file term.c.

297{
298 int attr = 0;
299
300 if (!check_colors_allowed()) {
301 return -1;
302 }
303
304 check_fgcolor(&fgcolor, &attr);
305 check_bgcolor(&bgcolor);
306
308 ast_str_append(str, 0, "%c[%d;%d;%dm", ESC, attr, fgcolor, COLOR_BLACK + 10);
309 } else if (bgcolor) {
310 ast_str_append(str, 0, "%c[%d;%d;%dm", ESC, attr, fgcolor, bgcolor + 10);
311 } else {
312 ast_str_append(str, 0, "%c[%d;%dm", ESC, attr, fgcolor);
313 }
314
315 return 0;
316}
const char * str
Definition: app_jack.c:147
#define ast_opt_force_black_background
Definition: options.h:131
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1139
static int check_colors_allowed(void)
Definition: term.c:291
static void check_bgcolor(int *bgcolor)
Definition: term.c:284
static void check_fgcolor(int *fgcolor, int *attr)
Definition: term.c:272
#define ESC
Definition: term.h:30
#define COLOR_BLACK
Definition: term.h:50

References ast_opt_force_black_background, ast_str_append(), check_bgcolor(), check_colors_allowed(), check_fgcolor(), COLOR_BLACK, ESC, and str.

Referenced by ast_xmldoc_printable(), and cli_prompt().

◆ ast_term_reset()

const char * ast_term_reset ( void  )

Returns the terminal reset code.

Returns
String which, when sent to the screen, resets the terminal colors

Definition at line 357 of file term.c.

358{
359 return term_end();
360}
const char * term_end(void)
Definition: term.c:407

References term_end().

Referenced by ast_xmldoc_printable(), cli_show_module_options(), print_app_docs(), print_queue(), and set_header().

◆ term_color()

char * term_color ( char *  outbuf,
const char *  inbuf,
int  fgcolor,
int  bgcolor,
int  maxout 
)

Colorize a specified string by adding terminal color codes.

Parameters
outbufResult buffer
inbufStarting string
fgcolorForeground color, specified as one of the constants in include/asterisk/term.h. Use '0' if the want the normal terminal foreground color.
bgcolorBackground color, specified as one of the constants in include/asterisk/term.h. Use '0' if you want the normal terminal background color.
maxoutMaximum size of outbuf
Returns
outbuf
Deprecated:
Due to the necessity of pre-sizing a result buffer, new code should avoid using this function in preference to ast_term_color_code() or ast_term_color().

Definition at line 235 of file term.c.

236{
237 int attr = 0;
238
239 if (!vt100compat) {
240 ast_copy_string(outbuf, inbuf, maxout);
241 return outbuf;
242 }
243 if (!fgcolor) {
244 ast_copy_string(outbuf, inbuf, maxout);
245 return outbuf;
246 }
247
248 if (fgcolor & 128) {
250 fgcolor &= ~128;
251 }
252
253 if (bgcolor) {
254 bgcolor &= ~128;
255 }
256
258 fgcolor = opposite(fgcolor);
259 }
260
262 if (!bgcolor) {
263 bgcolor = COLOR_BLACK;
264 }
265 snprintf(outbuf, maxout, "%c[%d;%d;%dm%s%s", ESC, attr, fgcolor, bgcolor + 10, inbuf, term_end());
266 } else {
267 snprintf(outbuf, maxout, "%c[%d;%dm%s%s", ESC, attr, fgcolor, inbuf, term_end());
268 }
269 return outbuf;
270}
#define ast_opt_light_background
Definition: options.h:130
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:425
static int vt100compat
Definition: term.c:43
static int opposite(int color)
Definition: term.c:62
#define ATTR_BRIGHT
Definition: term.h:37
static int inbuf(struct baseio *bio, FILE *fi)
utility used by inchar(), for base_encode()
Definition: utils.c:590

References ast_copy_string(), ast_opt_force_black_background, ast_opt_light_background, ATTR_BRIGHT, COLOR_BLACK, ESC, inbuf(), opposite(), term_end(), and vt100compat.

Referenced by __ast_register_translator(), ast_frame_dump(), ast_unregister_translator(), cli_show_module_options(), cli_show_module_type(), handle_cli_agi_show(), handle_dahdi_show_cadences(), handle_show_function(), handle_showmancmd(), lua_pbx_exec(), print_event_instance(), realtime_exec(), and start_resource().

◆ term_color_code()

char * term_color_code ( char *  outbuf,
int  fgcolor,
int  bgcolor,
int  maxout 
)

Write a color sequence to a string.

Parameters
outbufthe location to write to
fgcolorforeground color
bgcolorbackground color
maxoutmaximum number of characters to write
Deprecated:
You should use ast_term_color_code or ast_term_color, instead.
Returns
outbuf

Definition at line 318 of file term.c.

319{
320 int attr = 0;
321
322 if (!check_colors_allowed()) {
323 *outbuf = '\0';
324 return outbuf;
325 }
326
327 check_fgcolor(&fgcolor, &attr);
328 check_bgcolor(&bgcolor);
329
331 snprintf(outbuf, maxout, "%c[%d;%d;%dm", ESC, attr, fgcolor, COLOR_BLACK + 10);
332 } else if (bgcolor) {
333 snprintf(outbuf, maxout, "%c[%d;%d;%dm", ESC, attr, fgcolor, bgcolor + 10);
334 } else {
335 snprintf(outbuf, maxout, "%c[%d;%dm", ESC, attr, fgcolor);
336 }
337
338 return outbuf;
339}

References ast_opt_force_black_background, check_bgcolor(), check_colors_allowed(), check_fgcolor(), COLOR_BLACK, and ESC.

Referenced by ast_term_color().

◆ term_end()

const char * term_end ( void  )

Definition at line 407 of file term.c.

408{
409 return enddata;
410}
static char enddata[80]
Definition: term.c:45

References enddata.

Referenced by ast_remotecontrol(), ast_term_reset(), asterisk_daemon(), consolehandler(), main(), and term_color().

◆ term_filter_escapes()

void term_filter_escapes ( char *  line)

Definition at line 385 of file term.c.

386{
387 int i;
388 int len = strlen(line);
389
390 for (i = 0; i < len; i++) {
391 if (line[i] != ESC)
392 continue;
393 if ((i < (len - 2)) &&
394 (line[i + 1] == 0x5B)) {
395 switch (line[i + 2]) {
396 case 0x30:
397 case 0x31:
398 case 0x33:
399 continue;
400 }
401 }
402 /* replace ESC with a space */
403 line[i] = ' ';
404 }
405}
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)

References ESC, and len().

◆ term_quit()

const char * term_quit ( void  )

Definition at line 412 of file term.c.

413{
414 return quitdata;
415}
static char quitdata[80]
Definition: term.c:46

References quitdata.

Referenced by ast_el_read_char(), check_init(), main(), and really_quit().

◆ term_strip()

char * term_strip ( char *  outbuf,
const char *  inbuf,
int  maxout 
)

Remove colorings from a specified string.

Parameters
outbufthe location to write to
inbufthe original string
maxoutthe available size of outbuf
Returns
outbuf

Definition at line 362 of file term.c.

363{
364 char *outbuf_ptr = outbuf;
365 const char *inbuf_ptr = inbuf;
366
367 while (outbuf_ptr < outbuf + maxout) {
368 switch (*inbuf_ptr) {
369 case ESC:
370 while (*inbuf_ptr && (*inbuf_ptr != 'm'))
371 inbuf_ptr++;
372 break;
373 default:
374 *outbuf_ptr = *inbuf_ptr;
375 outbuf_ptr++;
376 }
377 if (! *inbuf_ptr)
378 break;
379 inbuf_ptr++;
380 }
381 return outbuf;
382}

References ESC, and inbuf().

Referenced by action_command(), format_log_default(), format_log_json(), and format_log_plain().