Asterisk - The Open Source Telephony Project  GIT-master-4a4f1a5
Macros
term.h File Reference

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

Go to the source code of this file.

Macros

#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

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...
 
#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
 
const char * ast_term_reset (void)
 Returns the terminal reset code. More...
 
#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)
 
#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...
 
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 71 of file term.h.

◆ AST_TERM_MAX_ROTATING_BUFFERS

#define AST_TERM_MAX_ROTATING_BUFFERS   15

Definition at line 72 of file term.h.

◆ ATTR_BLINK

#define ATTR_BLINK   5

Definition at line 39 of file term.h.

◆ ATTR_BRIGHT

#define ATTR_BRIGHT   1

Definition at line 36 of file term.h.

◆ ATTR_DIM

#define ATTR_DIM   2

Definition at line 37 of file term.h.

◆ ATTR_HIDDEN

#define ATTR_HIDDEN   8

Definition at line 41 of file term.h.

◆ ATTR_RESET

#define ATTR_RESET   0

Definition at line 35 of file term.h.

◆ ATTR_REVER

#define ATTR_REVER   7

Definition at line 40 of file term.h.

◆ ATTR_UNDER

#define ATTR_UNDER   4

Definition at line 38 of file term.h.

◆ COLOR_BLACK

#define COLOR_BLACK   30

Definition at line 47 of file term.h.

◆ COLOR_BLUE

#define COLOR_BLUE   34

Definition at line 55 of file term.h.

◆ COLOR_BRBLUE

#define COLOR_BRBLUE   (34 | 128)

Definition at line 56 of file term.h.

◆ COLOR_BRCYAN

#define COLOR_BRCYAN   (36 | 128)

Definition at line 60 of file term.h.

◆ COLOR_BRGREEN

#define COLOR_BRGREEN   (32 | 128)

Definition at line 52 of file term.h.

◆ COLOR_BRMAGENTA

#define COLOR_BRMAGENTA   (35 | 128)

Definition at line 58 of file term.h.

◆ COLOR_BROWN

#define COLOR_BROWN   33

Definition at line 53 of file term.h.

◆ COLOR_BRRED

#define COLOR_BRRED   (31 | 128)

Definition at line 50 of file term.h.

◆ COLOR_BRWHITE

#define COLOR_BRWHITE   (37 | 128)

Definition at line 62 of file term.h.

◆ COLOR_CYAN

#define COLOR_CYAN   36

Definition at line 59 of file term.h.

◆ COLOR_GRAY

#define COLOR_GRAY   (30 | 128)

Definition at line 48 of file term.h.

◆ COLOR_GREEN

#define COLOR_GREEN   32

Definition at line 51 of file term.h.

◆ COLOR_MAGENTA

#define COLOR_MAGENTA   35

Definition at line 57 of file term.h.

◆ COLOR_RED

#define COLOR_RED   31

Definition at line 49 of file term.h.

◆ COLOR_WHITE

#define COLOR_WHITE   37

Definition at line 61 of file term.h.

◆ COLOR_YELLOW

#define COLOR_YELLOW   (33 | 128)

Definition at line 54 of file term.h.

◆ COLORIZE

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

Definition at line 68 of file term.h.

◆ COLORIZE_FMT

#define COLORIZE_FMT   "%s%s%s"

Shortcut macros for coloring a set of text.

Definition at line 67 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:72
#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:71
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:1104
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:47

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 }
static int inbuf(struct baseio *bio, FILE *fi)
utility used by inchar(), for base_encode()
#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:401
static int vt100compat
Definition: term.c:43
static int opposite(int color)
Definition: term.c:62
#define ATTR_BRIGHT
Definition: term.h:36

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(), and realtime_exec().

◆ 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().