aboutsummaryrefslogtreecommitdiff
path: root/backend/message.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/message.h')
-rw-r--r--backend/message.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/backend/message.h b/backend/message.h
new file mode 100644
index 0000000..622f2a1
--- /dev/null
+++ b/backend/message.h
@@ -0,0 +1,191 @@
+/* message.h -- consistent error, progress and debugging feedback
+ * Copyright (C) 2019 SEIKO EPSON Corporation
+ *
+ * License: EPSON END USER SOFTWARE LICENSE
+ * Author : SEIKO EPSON Corporation
+ *
+ * This file is part of Image Scan! for Linux.
+ * It is distributed under the terms of the EPSON END USER SOFTWARE LICENSE.
+ *
+ * You should have received a verbatim copy of the EPSON END USER SOFTWARE
+ * LICENSE along with the software.
+ */
+
+
+#ifndef message_h
+#define message_h
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#ifndef ENABLE_DEBUG
+#define ENABLE_DEBUG 0
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+ typedef enum
+ {
+ ERR_FATAL = (1 << 0),
+ ERR_MAJOR = (1 << 1),
+ ERR_MINOR = (1 << 2),
+
+ LOG_INFO = (1 << 3),
+ LOG_CALL = (1 << 4),
+ LOG_DATA = (1 << 5),
+
+ DBG_CMD = (1 << 6),
+ DBG_HEX = (1 << 7),
+ DBG_IMG = (1 << 8),
+ }
+ msg_level_type;
+
+
+ extern unsigned long msg_level;
+
+
+ /*! \brief Maximum buffer size not considered to be image data
+ *
+ * This value can be used by low-level I/O functions that want to
+ * log the interesting data they handle but lack the knowledge to
+ * distinguish between that data and boring old image bytes.
+ */
+#define MSG_DBG_IMG_THRESHOLD 512
+
+
+#define FMT_FILE __FILE__ ":%d: "
+#define FMT_LINE , __LINE__
+#define FMT_MODULE FMT_FILE "[%s]"
+
+#define FMT_FATAL FMT_MODULE "[F] "
+#define FMT_MAJOR FMT_MODULE "[M] "
+#define FMT_MINOR FMT_MODULE "[m] "
+#define FMT_INFO FMT_MODULE "{I} "
+#define FMT_CALL FMT_MODULE "{C} " "%s "
+#define FMT_DATA FMT_MODULE "{D} "
+#define FMT_CMD FMT_MODULE "(e) "
+#define FMT_HEX "[" MSG_MODULE "]" "(x) "
+#define FMT_IMG "[" MSG_MODULE "]" "(i) "
+
+#if ENABLE_DEBUG
+
+#define err_fatal(fmt,arg...) \
+ do \
+ { \
+ if (ERR_FATAL <= msg_level) \
+ fprintf (stderr, FMT_FATAL fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define err_major(fmt,arg...) \
+ do \
+ { \
+ if (ERR_MAJOR <= msg_level) \
+ fprintf (stderr, FMT_MAJOR fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define err_minor(fmt,arg...) \
+ do \
+ { \
+ if (ERR_MINOR <= msg_level) \
+ fprintf (stderr, FMT_MINOR fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define log_info(fmt,arg...) \
+ do \
+ { \
+ if (LOG_INFO <= msg_level) \
+ fprintf (stderr, FMT_INFO fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define log_call(fmt,arg...) \
+ do \
+ { \
+ if (LOG_CALL <= msg_level) \
+ fprintf (stderr, FMT_CALL fmt "\n" FMT_LINE, MSG_MODULE, \
+ __func__, ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define log_data(fmt,arg...) \
+ do \
+ { \
+ if (LOG_DATA <= msg_level) \
+ fprintf (stderr, FMT_DATA fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define dbg_cmd(buf,sz) \
+ do \
+ { \
+ if (DBG_CMD <= msg_level) \
+ fprintf (stderr, FMT_CMD fmt "\n" FMT_LINE, MSG_MODULE, \
+ ## arg); \
+ } \
+ while (0) \
+ /**/
+
+#define dbg_hex(buf,sz) \
+ do \
+ { \
+ if (DBG_HEX <= msg_level) \
+ msg_dump (FMT_HEX, buf, sz); \
+ } \
+ while (0) \
+ /**/
+
+#define dbg_img(buf,sz) \
+ do \
+ { \
+ if (DBG_IMG <= msg_level) \
+ msg_dump (FMT_IMG, buf, sz); \
+ } \
+ while (0) \
+ /**/
+
+ void msg_init (void);
+ void msg_dump (const char *, const void *, size_t);
+
+#else /* !ENABLE_DEBUG */
+
+#define err_fatal(fmt,arg...)
+#define err_major(fmt,arg...)
+#define err_minor(fmt,arg...)
+#define log_info(fmt,arg...)
+#define log_call(fmt,arg...)
+#define log_data(fmt,arg...)
+#define dbg_cmd(buf,sz)
+#define dbg_hex(buf,sz)
+#define dbg_img(buf,sz)
+
+#define msg_init()
+#define msg_dump(fmt,buf,sz)
+
+#endif /* !ENABLE_DEBUG */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* !defined (message_h) */