summaryrefslogtreecommitdiff
path: root/src/libeinfo/einfo.h
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-01-05 19:25:55 +0000
committerRoy Marples <roy@marples.name>2008-01-05 19:25:55 +0000
commitac21d75300dabe83578e4373fcfd09d67c3a083b (patch)
treed5f8e2a16920add2277c79ff8a1b7e99ec2976df /src/libeinfo/einfo.h
parent112fbde453d55c49b7999d2e35496a8758aaa7b5 (diff)
downloadopenrc-ac21d75300dabe83578e4373fcfd09d67c3a083b.tar.gz
openrc-ac21d75300dabe83578e4373fcfd09d67c3a083b.tar.bz2
openrc-ac21d75300dabe83578e4373fcfd09d67c3a083b.tar.xz
Add some .mk stubs to impersonate bsk .mk files to make writing our Makefiles easier. libeinfo, librc and rc now have their own seperate directories. More work is needed to tidy this up though.
Diffstat (limited to 'src/libeinfo/einfo.h')
-rw-r--r--src/libeinfo/einfo.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/libeinfo/einfo.h b/src/libeinfo/einfo.h
new file mode 100644
index 0000000..2720e45
--- /dev/null
+++ b/src/libeinfo/einfo.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2007 Roy Marples
+ * All rights reserved
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __EINFO_H__
+#define __EINFO_H__
+
+#ifdef __GNUC__
+# define __EINFO_PRINTF __attribute__ ((__format__ (__printf__, 1, 2)))
+# define __EINFO_XPRINTF __attribute__ ((__noreturn__, __format__ (__printf__, 1, 2)))
+# define __EEND_PRINTF __attribute__ ((__format__ (__printf__, 2, 3)))
+#else
+# define __EINFO_PRINTF
+# define __EINFO_XPRINTF
+# define __EEND_PRINTF
+#endif
+
+#include <sys/types.h>
+#include <stdbool.h>
+
+/* Although OpenRC requires C99, linking to us should not. */
+#ifdef restrict
+# define __EINFO_RESTRICT restrict
+#else
+# ifdef __restrict
+# define __EINFO_RESTRICT __restrict
+# else
+# define __EINFO_RESTRICT
+# endif
+#endif
+
+/*! @brief Color types to use */
+typedef enum
+{
+ ECOLOR_NORMAL = 1,
+ ECOLOR_GOOD = 2,
+ ECOLOR_WARN = 3,
+ ECOLOR_BAD = 4,
+ ECOLOR_HILITE = 5,
+ ECOLOR_BRACKET = 6
+} einfo_color_t;
+
+/*! @brief Returns the ASCII code for the color */
+const char *ecolor (einfo_color_t);
+
+/*! @brief Writes to syslog. */
+void elog (int __level, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+
+/*!
+ * @brief Display informational messages.
+ *
+ * The einfo family of functions display messages in a consistent manner
+ * across applications. Basically they prefix the message with
+ * " * ". If the terminal can handle color then we color the * based on
+ * the command used. Otherwise we are identical to the printf function.
+ *
+ * - einfo - green
+ * - ewarn - yellow
+ * - eerror - red
+ *
+ * The n suffix denotes that no new line should be printed.
+ * The v suffix means only print if EINFO_VERBOSE is yes.
+ */
+/*@{*/
+int einfon (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ewarnn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int eerrorn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int einfo (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ewarn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+void ewarnx (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_XPRINTF;
+int eerror (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+void eerrorx (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_XPRINTF;
+
+int einfovn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ewarnvn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ebeginvn (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int eendvn (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+int ewendvn (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+int einfov (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ewarnv (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+/*@}*/
+
+/*! @ingroup ebegin
+ * @brief Display informational messages that may take some time.
+ *
+ * Similar to einfo, but we add ... to the end of the message */
+/*@{*/
+int ebeginv (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+int ebegin (const char * __EINFO_RESTRICT __fmt, ...) __EINFO_PRINTF;
+/*@}*/
+
+/*! @ingroup eend
+ * @brief End an ebegin.
+ *
+ * If you ebegin, you should eend also.
+ * eend places [ ok ] or [ !! ] at the end of the terminal line depending on
+ * retval (0 or ok, anything else for !!)
+ *
+ * ebracket allows you to specifiy the position, color and message */
+/*@{*/
+int eend (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+int ewend (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+void ebracket (int __col, einfo_color_t __color, const char * __EINFO_RESTRICT __msg);
+
+int eendv (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+int ewendv (int __retval, const char * __EINFO_RESTRICT __fmt, ...) __EEND_PRINTF;
+/*@}*/
+
+/*! @ingroup eindent
+ * @brief Indents the einfo lines.
+ *
+ * For each indent you should outdent when done */
+/*@{*/
+void eindent (void);
+void eoutdent (void);
+void eindentv (void);
+void eoutdentv (void);
+
+/*! @brief Prefix each einfo line with something */
+void eprefix (const char * __EINFO_RESTRICT __prefix);
+
+#endif