02111-1307, USA. */
#include <config.h>
+#include "main.h"
#include <assert.h>
#include <stdio.h>
+#include "cmdline.h"
#include "command.h"
#include "error.h"
#include "getline.h"
+#include "glob.h"
#include "lexer.h"
#include "output.h"
+#include "version.h"
+#include <signal.h>
#include <stdlib.h>
-#undef DEBUGGING
-/*#define DEBUGGING 1*/
#include "debug-print.h"
-static void parse_script (void) __attribute__ ((noreturn));
+static void parse_script (void) NO_RETURN;
static void handle_error (int code);
static int execute_command (void);
/* The current date in the form DD MMM YYYY. */
char curdate[12];
+
+/* If a segfault happens, issue a message to that effect and halt */
+void bug_handler(int sig);
+
/* Whether we're dropping down to interactive mode immediately because
we hit end-of-file unexpectedly (or whatever). */
int start_interactive;
int
main (int argc, char **argv)
{
- void init_glob (int, char **); /* Exported by glob.c. */
- void parse_command_line (int, char **); /* Exported by cmdline.c */
+ signal (SIGSEGV, bug_handler);
/* Initialization. */
if (!outp_init ())
msg (FE, _("Error initializing output drivers."));
lex_init ();
- cmd_init ();
/* Execution. */
parse_script ();
+
+ /* Should never be reached */
+ return (-1);
}
/* Parses the entire script. */
handle_error (execute_command ());
}
- err_hcf (1);
+ err_hcf (err_error_count==0);
}
/* Parse and execute a command, returning its return code. */
break;
if (!getl_perform_delayed_reset ())
- err_hcf (1);
+ err_hcf (err_error_count==0);
}
/* Parse the command. */
else
lex_discard_line ();
}
+
+
+
+/* If a segfault happens, issue a message to that effect and halt */
+void
+bug_handler(int sig UNUSED)
+{
+ fprintf(stderr,
+ "******************************************************************\n"
+ "You have discovered a bug in PSPP.\n\n"
+ " Please report this, by sending "
+ "an email to " PACKAGE_BUGREPORT ",\n"
+ "explaining what you were doing when this happened, and including\n"
+ "a sample of your input file which caused it.\n");
+
+ fprintf(stderr,
+ "Also, please copy the following lines into your bug report:\n\n"
+ "bare_version: %s\n"
+ "version: %s\n"
+ "stat_version: %s\n"
+ "host_system: %s\n"
+ "build_system: %s\n"
+ "default_config_path: %s\n"
+ "include_path: %s\n"
+ "groff_font_path: %s\n"
+ "locale_dir: %s\n"
+ "******************************************************************\n",
+ bare_version,
+ version,
+ stat_version,
+ host_system,
+ build_system,
+ default_config_path,
+ include_path,
+ groff_font_path,
+ locale_dir);
+
+ exit(-1);
+}
+