/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010 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 "format.h"
#include "value.h"
#include "xalloc.h"
+#include <data/case.h>
+#include <libpspp/i18n.h>
#include <libpspp/integer-format.h>
#include <libpspp/message.h>
-#include <libpspp/i18n.h>
#include "error.h"
+#include "minmax.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
int *viewlength;
int *viewwidth;
bool safer_mode;
- bool do_echo;
bool include;
int epoch;
- bool errorbreak;
bool route_errors_to_terminal;
bool route_errors_to_listing;
bool scompress;
bool undefined;
double blanks;
- int mxwarns;
- int mxerrs;
+ int max_messages[MSG_N_SEVERITIES];
bool printback;
bool mprint;
int mxloops;
int syntax;
struct fmt_number_style *styles;
+
+ enum settings_output_devices output_routing[SETTINGS_N_OUTPUT_TYPES];
};
static struct settings the_settings = {
/* viewwidth */
NULL,
/* safer_mode */
- false,
- /* do_echo */
false,
/* include */
true,
/* epoch */
-1,
- /* errorbreak */
- false,
/* route_errors_to_terminal */
true,
/* route_errors_to_listing */
true,
/* blanks */
SYSMIS,
- /* mxwarns */
- 100,
- /* mxerrs */
- 100,
+ /* max_messages */
+ {
+ 100, /* MSG_S_ERROR */
+ 100, /* MSG_S_WARNING */
+ 100 /* MSG_S_NOTE */
+ },
/* printback */
true,
/* mprint */
/* syntax */
ENHANCED,
/* styles */
- NULL
+ NULL,
+ /* output devices */
+ {SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL,
+ SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL,
+ 0,
+ SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL}
};
static void init_viewport ( int *, int *);
the_settings.safer_mode = true;
}
-/* Echo commands to the listing file/printer? */
-bool
-settings_get_echo (void)
-{
- return the_settings.do_echo;
-}
-
-/* Set echo. */
-void
-settings_set_echo ( bool echo)
-{
- the_settings.do_echo = echo;
-}
-
/* If echo is on, whether commands from include files are echoed. */
bool
settings_get_include (void)
assert (the_settings.epoch >= 0);
}
-/* Does an error stop execution? */
-bool
-settings_get_errorbreak (void)
-{
- return the_settings.errorbreak;
-}
-
-/* Sets whether an error stops execution. */
-void
-settings_set_errorbreak ( bool errorbreak)
-{
- the_settings.errorbreak = errorbreak;
-}
-
-/* Route error messages to terminal? */
-bool
-settings_get_error_routing_to_terminal (void)
-{
- return the_settings.route_errors_to_terminal;
-}
-
-/* Sets whether error messages should be routed to the
- terminal. */
-void
-settings_set_error_routing_to_terminal ( bool route_to_terminal)
-{
- the_settings.route_errors_to_terminal = route_to_terminal;
-}
-
-/* Route error messages to listing file? */
-bool
-settings_get_error_routing_to_listing (void)
-{
- return the_settings.route_errors_to_listing;
-}
-
-/* Sets whether error messages should be routed to the
- listing file. */
-void
-settings_set_error_routing_to_listing ( bool route_to_listing)
-{
- the_settings.route_errors_to_listing = route_to_listing;
-}
-
/* Compress system files by default? */
bool
settings_get_scompression (void)
the_settings.blanks = blanks;
}
-/* Maximum number of warnings + errors. */
-int
-settings_get_mxwarns (void)
-{
- return the_settings.mxwarns;
-}
-
-/* Sets maximum number of warnings + errors. */
-void
-settings_set_mxwarns ( int mxwarns)
-{
- the_settings.mxwarns = mxwarns;
-}
-
-/* Maximum number of errors. */
+/* Returns the maximum number of messages to show of the given SEVERITY before
+ aborting. (The value for MSG_S_WARNING is interpreted as maximum number of
+ warnings and errors combined.) */
int
-settings_get_mxerrs (void)
+settings_get_max_messages (enum msg_severity severity)
{
- return the_settings.mxerrs;
+ assert (severity < MSG_N_SEVERITIES);
+ return the_settings.max_messages[severity];
}
-/* Sets maximum number of errors. */
+/* Sets the maximum number of messages to show of the given SEVERITY before
+ aborting to MAX. (The value for MSG_S_WARNING is interpreted as maximum
+ number of warnings and errors combined.) In addition, in the case of
+ warnings the special value of zero indicates that no warnings are to be
+ issued.
+*/
void
-settings_set_mxerrs ( int mxerrs)
+settings_set_max_messages (enum msg_severity severity, int max)
{
- the_settings.mxerrs = mxerrs;
-}
+ assert (severity < MSG_N_SEVERITIES);
-/* Whether commands are written to the display. */
-bool
-settings_get_printback (void)
-{
- return the_settings.printback;
-}
+ if (severity == MSG_S_WARNING)
+ {
+ if ( max == 0)
+ {
+ msg (MW,
+ _("MXWARNS set to zero. No further warnings will be given even when potentially problematic situations are encountered."));
+ msg_ui_disable_warnings (true);
+ }
+ else if ( the_settings.max_messages [MSG_S_WARNING] == 0)
+ {
+ msg_ui_disable_warnings (false);
+ the_settings.max_messages[MSG_S_WARNING] = max;
+ msg (MW, _("Warnings re-enabled. %d warnings will be issued before aborting syntax processing."), max);
+ }
+ }
-/* Sets whether commands are written to the display. */
-void
-settings_set_printback ( bool printback)
-{
- the_settings.printback = printback;
+ the_settings.max_messages[severity] = max;
}
/* Independent of get_printback, controls whether the commands
}
/* Approximate maximum number of cases to allocate in-core, given
- that each case contains VALUE_CNT values. */
+ that each case has the format given in PROTO. */
size_t
-settings_get_workspace_cases (size_t value_cnt)
+settings_get_workspace_cases (const struct caseproto *proto)
{
- size_t case_size = sizeof (union value) * value_cnt + 4 * sizeof (void *);
- size_t case_cnt = MAX (settings_get_workspace () / case_size, 4);
- return case_cnt;
+ size_t n_cases = settings_get_workspace () / case_get_cost (proto);
+ return MAX (n_cases, 4);
}
/* Set approximate maximum amount of memory to use for cases, in
return ds_cstr (&str);
}
+
+void
+settings_set_output_routing (enum settings_output_type type,
+ enum settings_output_devices devices)
+{
+ assert (type < SETTINGS_N_OUTPUT_TYPES);
+ the_settings.output_routing[type] = devices;
+}
+
+enum settings_output_devices
+settings_get_output_routing (enum settings_output_type type)
+{
+ assert (type < SETTINGS_N_OUTPUT_TYPES);
+ return the_settings.output_routing[type] | SETTINGS_DEVICE_UNFILTERED;
+}