/* PSPP - computes sample statistics.
Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
- Written by Ben Pfaff <blp@gnu.org>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
#include <config.h>
-#include <libpspp/message.h>
+#include "message.h"
+#include "msg-locator.h"
+#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
/* Message handler as set by msg_init(). */
static void (*msg_handler) (const struct msg *);
-static void (*msg_location) (struct msg_locator *);
+/* Disables emitting messages if positive. */
+static int messages_disabled;
/* Public functions. */
msg_emit (&m);
}
+static struct source_stream *s_stream;
+
void
-msg_init ( void (*handler) (const struct msg *),
- void (*location) (struct msg_locator *) )
+msg_init (struct source_stream *ss, void (*handler) (const struct msg *) )
{
+ s_stream = ss;
msg_handler = handler;
- msg_location = location;
}
void
free(m);
}
-
/* Emits M as an error message.
Frees allocated data in M. */
void
msg_emit (struct msg *m)
{
- msg_location (&m->where);
- msg_handler (m);
+ get_msg_location (s_stream, &m->where);
+ if (!messages_disabled)
+ msg_handler (m);
free (m->text);
}
+
+/* Disables message output until the next call to msg_enable. If
+ this function is called multiple times, msg_enable must be
+ called an equal number of times before messages are actually
+ re-enabled. */
+void
+msg_disable (void)
+{
+ messages_disabled++;
+}
+
+/* Enables message output that was disabled by msg_disable. */
+void
+msg_enable (void)
+{
+ assert (messages_disabled > 0);
+ messages_disabled--;
+}
\f
/* Private functions. */