diff options
Diffstat (limited to 'src/einfo.h')
-rw-r--r-- | src/einfo.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/einfo.h b/src/einfo.h new file mode 100644 index 00000000..7ab52afd --- /dev/null +++ b/src/einfo.h @@ -0,0 +1,83 @@ +/* + rc.h + Header file for external applications to get RC information. + Copyright 2007 Gentoo Foundation + Released under the GPLv2 + */ + +#ifndef __EINFO_H__ +#define __EINFO_H__ + +#ifdef __GNUC__ +# define EINFO_PRINTF(_one, _two) __attribute__ ((__format__ (__printf__, _one, _two))) +# define EINFO_XPRINTF(_one, _two) __attribute__ ((__noreturn__, __format__ (__printf__, _one, _two))) +#endif + +#include <sys/types.h> +#include <stdbool.h> + +typedef enum +{ + einfo_good, + einfo_warn, + einfo_bad, + einfo_hilite, + einfo_bracket, + einfo_normal +} einfo_color_t; + +/* Colour codes used by the below functions. */ +#define EINFO_GOOD "\033[32;01m" +#define EINFO_WARN "\033[33;01m" +#define EINFO_BAD "\033[31;01m" +#define EINFO_HILITE "\033[36;01m" +#define EINFO_BRACKET "\033[34;01m" +#define EINFO_NORMAL "\033[0m" + +/* Handy macros to easily use the above in a custom manner */ +#define PEINFO_GOOD if (colour_terminal ()) printf (EINFO_GOOD) +#define PEINFO_WARN if (colour_terminal ()) printf (EINFO_WARN) +#define PEINFO_BAD if (colour_terminal ()) printf (EINFO_BAD) +#define PEINFO_HILITE if (colour_terminal ()) printf (EINFO_HILITE) +#define PEINFO_BRACKET if (colour_terminal ()) printf (EINFO_BRACKET) +#define PEINFO_NORMAL if (colour_terminal ()) printf (EINFO_NORMAL) + +/* We work out if the terminal supports colour or not through the use + of the TERM env var. We cache the reslt in a static bool, so + subsequent calls are very fast. */ +/* The n suffix means that a newline is NOT appended to the string + The v prefix means that we only print it when RC_VERBOSE=yes */ +bool colour_terminal (void); +int einfon (const char *fmt, ...) EINFO_PRINTF (1, 2); +int ewarnn (const char *fmt, ...) EINFO_PRINTF (1, 2); +int eerrorn (const char *fmt, ...) EINFO_PRINTF (1, 2); +int einfo (const char *fmt, ...) EINFO_PRINTF(1, 2); +int ewarn (const char *fmt, ...) EINFO_PRINTF (1, 2); +void ewarnx (const char *fmt, ...) EINFO_XPRINTF (1,2); +int eerror (const char *fmt, ...) EINFO_PRINTF (1,2); +void eerrorx (const char *fmt, ...) EINFO_XPRINTF (1,2); +int ebegin (const char *fmt, ...) EINFO_PRINTF (1, 2); +int eend (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +int ewend (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +void ebracket (int col, einfo_color_t color, const char *msg); +void eindent (void); +void eoutdent (void); + +int veinfon (const char *fmt, ...) EINFO_PRINTF (1, 2); +int vewarnn (const char *fmt, ...) EINFO_PRINTF (1, 2); +int vebeginn (const char *fmt, ...) EINFO_PRINTF (1, 2); +int veendn (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +int vewendn (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +int veinfo (const char *fmt, ...) EINFO_PRINTF (1, 2); +int vewarn (const char *fmt, ...) EINFO_PRINTF (1, 2); +int vebegin (const char *fmt, ...) EINFO_PRINTF (1, 2); +int veend (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +int vewend (int retval, const char *fmt, ...) EINFO_PRINTF (2, 3); +void veindent (void); +void veoutdent (void); + +/* If RC_EBUFFER is set, then we buffer all the above commands. + As such, we need to flush the buffer when done. */ +void eflush(void); + +#endif |