/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2010, 2011, 2014 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 published by
#include <stdarg.h>
#include <stdbool.h>
+#include <stddef.h>
#include "libpspp/compiler.h"
+struct string;
+
/* What kind of message is this? */
enum msg_category
{
MSG_N_SEVERITIES
};
+const char *msg_severity_to_string (enum msg_severity);
+
/* Combination of a category and a severity for convenience. */
enum msg_class
{
return category * 3 + severity;
}
+struct msg_location
+ {
+ const char *file_name; /* Interned file name, or NULL. */
+ int first_line; /* 1-based line number, or 0 if none. */
+ int last_line; /* 1-based exclusive last line (0=none). */
+ int first_column; /* 1-based first column, or 0 if none. */
+ int last_column; /* 1-based exclusive last column (0=none). */
+ };
+
+void msg_location_uninit (struct msg_location *);
+void msg_location_destroy (struct msg_location *);
+struct msg_location *msg_location_dup (const struct msg_location *);
+
+bool msg_location_is_empty (const struct msg_location *);
+void msg_location_format (const struct msg_location *, struct string *);
+
+struct msg_stack
+ {
+ struct msg_location *location;
+ char *description;
+ };
+
+void msg_stack_destroy (struct msg_stack *);
+struct msg_stack *msg_stack_dup (const struct msg_stack *);
+
/* A message. */
struct msg
{
enum msg_category category; /* Message category. */
enum msg_severity severity; /* Message severity. */
- char *file_name; /* Name of file containing error, or NULL. */
- int first_line; /* 1-based line number, or 0 if none. */
- int last_line; /* 1-based exclusive last line (0=none). */
- int first_column; /* 1-based first column, or 0 if none. */
- int last_column; /* 1-based exclusive last column (0=none). */
+ struct msg_location *location; /* Code location. */
+ struct msg_stack **stack;
+ size_t n_stack;
+ char *command_name; /* Name of erroneous command, or NULL. */
char *text; /* Error text. */
};
/* Working with messages. */
struct msg *msg_dup (const struct msg *);
void msg_destroy(struct msg *);
-char *msg_to_string (const struct msg *, const char *command_name);
+char *msg_to_string (const struct msg *);
/* Emitting messages. */
+void vmsg (enum msg_class class, const char *format, va_list args)
+ PRINTF_FORMAT (2, 0);
void msg (enum msg_class, const char *format, ...)
PRINTF_FORMAT (2, 3);
void msg_emit (struct msg *);
+void msg_error (int errnum, const char *format, ...)
+ PRINTF_FORMAT (2, 3);
+
+
/* Enable and disable messages. */
void msg_enable (void);
void msg_disable (void);
/* Used in panic situations only. */
+const char * prepare_diagnostic_information (void);
+const char * prepare_fatal_error_message (void);
void request_bug_report (const char *msg);