LCOV - code coverage report
Current view: top level - basic - terminal-util.h (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 22 22 100.0 %
Date: 2019-08-22 15:41:25 Functions: 22 22 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : #pragma once
       3             : 
       4             : #include <stdarg.h>
       5             : #include <stdbool.h>
       6             : #include <stdio.h>
       7             : #include <syslog.h>
       8             : #include <sys/types.h>
       9             : 
      10             : #include "macro.h"
      11             : #include "time-util.h"
      12             : 
      13             : /* Regular colors */
      14             : #define ANSI_RED     "\x1B[0;31m"
      15             : #define ANSI_GREEN   "\x1B[0;32m"
      16             : #define ANSI_YELLOW  "\x1B[0;33m"
      17             : #define ANSI_BLUE    "\x1B[0;34m"
      18             : #define ANSI_MAGENTA "\x1B[0;35m"
      19             : #define ANSI_GREY    "\x1B[0;38;5;245m"
      20             : 
      21             : /* Bold/highlighted */
      22             : #define ANSI_HIGHLIGHT_RED               "\x1B[0;1;31m"
      23             : #define ANSI_HIGHLIGHT_GREEN             "\x1B[0;1;32m"
      24             : #define ANSI_HIGHLIGHT_YELLOW            "\x1B[0;1;38;5;185m"
      25             : #define ANSI_HIGHLIGHT_BLUE              "\x1B[0;1;34m"
      26             : #define ANSI_HIGHLIGHT_MAGENTA           "\x1B[0;1;35m"
      27             : #define ANSI_HIGHLIGHT_GREY              "\x1B[0;1;38;5;245m"
      28             : #define ANSI_HIGHLIGHT_YELLOW4           "\x1B[0;1;38;5;100m"
      29             : 
      30             : /* Underlined */
      31             : #define ANSI_HIGHLIGHT_RED_UNDERLINE     "\x1B[0;1;4;31m"
      32             : #define ANSI_HIGHLIGHT_GREEN_UNDERLINE   "\x1B[0;1;4;32m"
      33             : #define ANSI_HIGHLIGHT_YELLOW_UNDERLINE  "\x1B[0;1;4;33m"
      34             : #define ANSI_HIGHLIGHT_BLUE_UNDERLINE    "\x1B[0;1;4;34m"
      35             : #define ANSI_HIGHLIGHT_MAGENTA_UNDERLINE "\x1B[0;1;4;35m"
      36             : #define ANSI_HIGHLIGHT_GREY_UNDERLINE    "\x1B[0;1;4;38;5;245m"
      37             : 
      38             : /* Other ANSI codes */
      39             : #define ANSI_UNDERLINE "\x1B[0;4m"
      40             : #define ANSI_HIGHLIGHT "\x1B[0;1;39m"
      41             : #define ANSI_HIGHLIGHT_UNDERLINE "\x1B[0;1;4m"
      42             : 
      43             : /* Reset/clear ANSI styles */
      44             : #define ANSI_NORMAL "\x1B[0m"
      45             : 
      46             : /* Erase characters until the end of the line */
      47             : #define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
      48             : 
      49             : /* Move cursor up one line */
      50             : #define ANSI_REVERSE_LINEFEED "\x1BM"
      51             : 
      52             : /* Set cursor to top left corner and clear screen */
      53             : #define ANSI_HOME_CLEAR "\x1B[H\x1B[2J"
      54             : 
      55             : int reset_terminal_fd(int fd, bool switch_to_text);
      56             : int reset_terminal(const char *name);
      57             : 
      58             : int open_terminal(const char *name, int mode);
      59             : 
      60             : /* Flags for tweaking the way we become the controlling process of a terminal. */
      61             : typedef enum AcquireTerminalFlags {
      62             :         /* Try to become the controlling process of the TTY. If we can't return -EPERM. */
      63             :         ACQUIRE_TERMINAL_TRY        = 0,
      64             : 
      65             :         /* Tell the kernel to forcibly make us the controlling process of the TTY. Returns -EPERM if the kernel doesn't allow that. */
      66             :         ACQUIRE_TERMINAL_FORCE      = 1,
      67             : 
      68             :         /* If we can't become the controlling process of the TTY right-away, then wait until we can. */
      69             :         ACQUIRE_TERMINAL_WAIT       = 2,
      70             : 
      71             :         /* Pick one of the above, and then OR this flag in, in order to request permissive behaviour, if we can't become controlling process then don't mind */
      72             :         ACQUIRE_TERMINAL_PERMISSIVE = 1 << 2,
      73             : } AcquireTerminalFlags;
      74             : 
      75             : int acquire_terminal(const char *name, AcquireTerminalFlags flags, usec_t timeout);
      76             : int release_terminal(void);
      77             : 
      78             : int terminal_vhangup_fd(int fd);
      79             : int terminal_vhangup(const char *name);
      80             : 
      81             : int chvt(int vt);
      82             : 
      83             : int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
      84             : int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
      85             : int ask_string(char **ret, const char *text, ...) _printf_(2, 3);
      86             : 
      87             : int vt_disallocate(const char *name);
      88             : 
      89             : int resolve_dev_console(char **ret);
      90             : int get_kernel_consoles(char ***ret);
      91             : bool tty_is_vc(const char *tty);
      92             : bool tty_is_vc_resolve(const char *tty);
      93             : bool tty_is_console(const char *tty) _pure_;
      94             : int vtnr_from_tty(const char *tty);
      95             : const char *default_term_for_tty(const char *tty);
      96             : 
      97             : int make_console_stdio(void);
      98             : 
      99             : int fd_columns(int fd);
     100             : unsigned columns(void);
     101             : int fd_lines(int fd);
     102             : unsigned lines(void);
     103             : 
     104             : void columns_lines_cache_reset(int _unused_ signum);
     105             : void reset_terminal_feature_caches(void);
     106             : 
     107             : bool on_tty(void);
     108             : bool terminal_is_dumb(void);
     109             : bool colors_enabled(void);
     110             : bool underline_enabled(void);
     111             : bool dev_console_colors_enabled(void);
     112             : 
     113             : #define DEFINE_ANSI_FUNC(name, NAME)                            \
     114             :         static inline const char *ansi_##name(void) {           \
     115             :                 return colors_enabled() ? ANSI_##NAME : "";     \
     116             :         }
     117             : 
     118             : #define DEFINE_ANSI_FUNC_UNDERLINE(name, NAME, REPLACEMENT)             \
     119             :         static inline const char *ansi_##name(void) {                   \
     120             :                 return underline_enabled() ? ANSI_##NAME :              \
     121             :                         colors_enabled() ? ANSI_##REPLACEMENT : "";     \
     122             :         }
     123             : 
     124         429 : DEFINE_ANSI_FUNC(normal,            NORMAL);
     125         389 : DEFINE_ANSI_FUNC(highlight,         HIGHLIGHT);
     126           1 : DEFINE_ANSI_FUNC(red,               RED);
     127           1 : DEFINE_ANSI_FUNC(green,             GREEN);
     128           1 : DEFINE_ANSI_FUNC(yellow,            YELLOW);
     129           1 : DEFINE_ANSI_FUNC(blue,              BLUE);
     130           1 : DEFINE_ANSI_FUNC(magenta,           MAGENTA);
     131           5 : DEFINE_ANSI_FUNC(grey,              GREY);
     132           1 : DEFINE_ANSI_FUNC(highlight_red,     HIGHLIGHT_RED);
     133           3 : DEFINE_ANSI_FUNC(highlight_green,   HIGHLIGHT_GREEN);
     134           1 : DEFINE_ANSI_FUNC(highlight_yellow,  HIGHLIGHT_YELLOW);
     135           4 : DEFINE_ANSI_FUNC(highlight_blue,    HIGHLIGHT_BLUE);
     136           2 : DEFINE_ANSI_FUNC(highlight_magenta, HIGHLIGHT_MAGENTA);
     137           1 : DEFINE_ANSI_FUNC(highlight_grey,    HIGHLIGHT_GREY);
     138             : 
     139          31 : DEFINE_ANSI_FUNC_UNDERLINE(underline,                   UNDERLINE, NORMAL);
     140           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_underline,         HIGHLIGHT_UNDERLINE, HIGHLIGHT);
     141           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_red_underline,     HIGHLIGHT_RED_UNDERLINE, HIGHLIGHT_RED);
     142           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_green_underline,   HIGHLIGHT_GREEN_UNDERLINE, HIGHLIGHT_GREEN);
     143           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_yellow_underline,  HIGHLIGHT_YELLOW_UNDERLINE, HIGHLIGHT_YELLOW);
     144           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_blue_underline,    HIGHLIGHT_BLUE_UNDERLINE, HIGHLIGHT_BLUE);
     145           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_magenta_underline, HIGHLIGHT_MAGENTA_UNDERLINE, HIGHLIGHT_MAGENTA);
     146           1 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_grey_underline,    HIGHLIGHT_GREY_UNDERLINE, HIGHLIGHT_GREY);
     147             : 
     148             : int get_ctty_devnr(pid_t pid, dev_t *d);
     149             : int get_ctty(pid_t, dev_t *_devnr, char **r);
     150             : 
     151             : int getttyname_malloc(int fd, char **r);
     152             : int getttyname_harder(int fd, char **r);
     153             : 
     154             : int ptsname_malloc(int fd, char **ret);
     155             : 
     156             : int openpt_allocate(int flags, char **ret_slave);
     157             : int openpt_allocate_in_namespace(pid_t pid, int flags, char **ret_slave);
     158             : int open_terminal_in_namespace(pid_t pid, const char *name, int mode);
     159             : 
     160             : int vt_default_utf8(void);
     161             : int vt_reset_keyboard(int fd);
     162             : int vt_restore(int fd);
     163             : int vt_release(int fd, bool restore_vt);
     164             : 
     165             : void get_log_colors(int priority, const char **on, const char **off, const char **highlight);
     166             : 
     167             : /* This assumes there is a 'tty' group */
     168             : #define TTY_MODE 0620

Generated by: LCOV version 1.14