Remove "Written by Ben Pfaff <blp@gnu.org>" lines everywhere.
[pspp-builds.git] / src / libpspp / message.h
index f906458524ac3bc867ffcf5eee7060401f81943c..9e876e410b29b20a744a748e0744d5b8ab790b4d 100644 (file)
@@ -1,6 +1,5 @@
 /* PSPP - computes sample statistics.
-   Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
-   Written by Ben Pfaff <blp@gnu.org>.
+   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA. */
 
-#if !error_h
-#define error_h 1
+#ifndef MESSAGE_H
+#define MESSAGE_H 1
 
 #include <stdarg.h>
 #include <stdbool.h>
-#include "compiler.h"
+#include <libpspp/compiler.h>
 
-/* Message classes. */
-enum
+/* What kind of message is this? */
+enum msg_category 
   {
-    SE, SW, SM,                        /* Script error/warning/message. */
-    DE, DW,                    /* Data-file error/warning. */
-    ME, MW, MM,                        /* General error/warning/message. */
-    ERR_CLASS_COUNT,           /* Number of message classes. */
-    ERR_CLASS_MASK = 0xf,      /* Bitmask for class. */
-    ERR_VERBOSITY_SHIFT = 4,   /* Shift count for verbosity. */
-    ERR_VERBOSITY_MASK = 0xf   /* Bitmask for verbosity. */
+    MSG_GENERAL,        /* General info. */
+    MSG_SYNTAX,         /* Messages that relate to syntax files. */
+    MSG_DATA            /* Messages that relate to data files. */
   };
 
-/* If passed to msg() as CLASS, the return value will cause the message
-   to be displayed only if `verbosity' is at least LEVEL. */
-#define VM(LEVEL) (MM | ((LEVEL) << ERR_VERBOSITY_SHIFT))
-
-/* A file location.  */
-struct file_locator
+/* How important a condition is it? */
+enum msg_severity 
   {
-    const char *filename;              /* Filename. */
-    int line_number;                   /* Line number. */
+    MSG_ERROR,
+    MSG_WARNING,
+    MSG_NOTE
   };
 
-/* An error message. */
-struct error
+/* Combination of a category and a severity for convenience. */
+enum msg_class
   {
-    int class;                 /* One of the classes above. */
-    struct file_locator where; /* File location, or (NULL, -1). */
-    const char *title;         /* Special text inserted if not null. */
+    ME, MW, MN,                        /* General error/warning/note. */
+    SE, SW, SN,                        /* Script error/warning/note. */
+    DE, DW, DN,                        /* Data-file error/note. */
+    MSG_CLASS_CNT,
   };
 
-/* Number of errors, warnings reported. */
-extern int err_error_count;
-extern int err_warning_count;
 
-/* If number of allowable errors/warnings is exceeded, then a message
-   is displayed and this flag is set to suppress subsequent
-   messages. */
-extern int err_already_flagged;
+static inline enum msg_category
+msg_class_to_category (enum msg_class class) 
+{
+  return class / 3;
+}
 
-/* Nonnegative verbosity level.  Higher value == more verbose. */
-extern int err_verbosity;
+static inline enum msg_severity
+msg_class_to_severity (enum msg_class class) 
+{
+  return class % 3;
+}
 
-/* Functions. */
-void msg (int class, const char *format, ...)
-     PRINTF_FORMAT (2, 3);
-void tmsg (int class, const char *title, const char *format, ...)
-     PRINTF_FORMAT (3, 4);
+static inline enum msg_class
+msg_class_from_category_and_severity (enum msg_category category,
+                                      enum msg_severity severity) 
+{
+  return category * 3 + severity;
+}
+
+/* A file location.  */
+struct msg_locator
+  {
+    const char *file_name;             /* File name. */
+    int line_number;                   /* Line number. */
+  };
 
-/* File-locator stack. */
-void err_push_file_locator (const struct file_locator *);
-void err_pop_file_locator (const struct file_locator *);
-void err_location (struct file_locator *);
+/* A message. */
+struct msg
+  {
+    enum msg_category category; /* Message category. */
+    enum msg_severity severity; /* Message severity. */
+    struct msg_locator where;  /* File location, or (NULL, -1). */
+    char *text;                 /* Error text. */
+  };
 
-/* Obscure functions. */
-void err_set_command_name (const char *);
-void err_done (void);
-void err_check_count (void);
-void err_vmsg (const struct error *, const char *, va_list);
+struct source_stream ;
 
-/* Used in panic situations only */
-void request_bug_report_and_abort(const char *msg );
+/* Initialization. */
+void msg_init (struct source_stream *, void (*handler) (const struct msg *) );
 
-void err_assert_fail(const char *expr, const char *file, int line);
+void msg_done (void);
+
+struct msg * msg_dup(const struct msg *m);
+void msg_destroy(struct msg *m);
+
+/* Emitting messages. */
+void msg (enum msg_class, const char *format, ...)
+     PRINTF_FORMAT (2, 3);
+void msg_emit (struct msg *);
 
-#undef __STRING
-#define __STRING(x) #x
-#undef assert
+/* Enable and disable messages. */
+void msg_enable (void);
+void msg_disable (void);
 
-                              
-#define assert(expr) ( (void) ( expr ? (void) 0 : \
-              err_assert_fail(__STRING(expr), __FILE__, __LINE__)) )
+/* Error context. */
+void msg_set_command_name (const char *);
+const char *msg_get_command_name (void);
+void msg_push_msg_locator (const struct msg_locator *);
+void msg_pop_msg_locator (const struct msg_locator *);
 
 
+/* Used in panic situations only. */
+void request_bug_report_and_abort (const char *msg) NO_RETURN;
 
-#endif /* error.h */
+#endif /* message.h */