Line data Source code
1 : #pragma once
2 :
3 : /***
4 : This file is part of systemd.
5 :
6 : Copyright 2010 Lennart Poettering
7 :
8 : systemd is free software; you can redistribute it and/or modify it
9 : under the terms of the GNU Lesser General Public License as published by
10 : the Free Software Foundation; either version 2.1 of the License, or
11 : (at your option) any later version.
12 :
13 : systemd is distributed in the hope that it will be useful, but
14 : WITHOUT ANY WARRANTY; without even the implied warranty of
15 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 : Lesser General Public License for more details.
17 :
18 : You should have received a copy of the GNU Lesser General Public License
19 : along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 : ***/
21 :
22 : #include <stdbool.h>
23 : #include <stdarg.h>
24 : #include <stdio.h>
25 :
26 : #include "macro.h"
27 : #include "time-util.h"
28 :
29 : #define ANSI_HIGHLIGHT_ON "\x1B[1;39m"
30 : #define ANSI_RED_ON "\x1B[31m"
31 : #define ANSI_HIGHLIGHT_RED_ON "\x1B[1;31m"
32 : #define ANSI_GREEN_ON "\x1B[32m"
33 : #define ANSI_HIGHLIGHT_GREEN_ON "\x1B[1;32m"
34 : #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m"
35 : #define ANSI_HIGHLIGHT_BLUE_ON "\x1B[1;34m"
36 : #define ANSI_HIGHLIGHT_OFF "\x1B[0m"
37 : #define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
38 :
39 : int reset_terminal_fd(int fd, bool switch_to_text);
40 : int reset_terminal(const char *name);
41 :
42 : int open_terminal(const char *name, int mode);
43 : int acquire_terminal(const char *name, bool fail, bool force, bool ignore_tiocstty_eperm, usec_t timeout);
44 : int release_terminal(void);
45 :
46 : int terminal_vhangup_fd(int fd);
47 : int terminal_vhangup(const char *name);
48 :
49 : int chvt(int vt);
50 :
51 : int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
52 : int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
53 : int ask_string(char **ret, const char *text, ...) _printf_(2, 3);
54 :
55 : int vt_disallocate(const char *name);
56 :
57 : char *resolve_dev_console(char **active);
58 : bool tty_is_vc(const char *tty);
59 : bool tty_is_vc_resolve(const char *tty);
60 : bool tty_is_console(const char *tty) _pure_;
61 : int vtnr_from_tty(const char *tty);
62 : const char *default_term_for_tty(const char *tty);
63 :
64 : void warn_melody(void);
65 :
66 : int make_stdio(int fd);
67 : int make_null_stdio(void);
68 : int make_console_stdio(void);
69 :
70 : int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char *format, va_list ap) _printf_(4,0);
71 : int status_printf(const char *status, bool ellipse, bool ephemeral, const char *format, ...) _printf_(4,5);
72 :
73 : int fd_columns(int fd);
74 : unsigned columns(void);
75 : int fd_lines(int fd);
76 : unsigned lines(void);
77 : void columns_lines_cache_reset(int _unused_ signum);
78 :
79 : bool on_tty(void);
80 :
81 520 : static inline const char *ansi_highlight(void) {
82 520 : return on_tty() ? ANSI_HIGHLIGHT_ON : "";
83 : }
84 :
85 0 : static inline const char *ansi_highlight_red(void) {
86 0 : return on_tty() ? ANSI_HIGHLIGHT_RED_ON : "";
87 : }
88 :
89 2 : static inline const char *ansi_highlight_green(void) {
90 2 : return on_tty() ? ANSI_HIGHLIGHT_GREEN_ON : "";
91 : }
92 :
93 : static inline const char *ansi_highlight_yellow(void) {
94 : return on_tty() ? ANSI_HIGHLIGHT_YELLOW_ON : "";
95 : }
96 :
97 : static inline const char *ansi_highlight_blue(void) {
98 : return on_tty() ? ANSI_HIGHLIGHT_BLUE_ON : "";
99 : }
100 :
101 529 : static inline const char *ansi_highlight_off(void) {
102 529 : return on_tty() ? ANSI_HIGHLIGHT_OFF : "";
103 : }
104 :
105 : int get_ctty_devnr(pid_t pid, dev_t *d);
106 : int get_ctty(pid_t, dev_t *_devnr, char **r);
107 :
108 : int getttyname_malloc(int fd, char **r);
109 : int getttyname_harder(int fd, char **r);
|