Fixed assignment of the intercept
[pspp-builds.git] / src / error.c
index 142b2c9f6590fc3dc0b71a0c583b2e517931485e..7ca387aba2f3d6c6188aae4dd23954cf473cac96 100644 (file)
 #include <stdlib.h>
 #include "alloc.h"
 #include "command.h"
-#include "getline.h"
+#include "getl.h"
 #include "glob.h"
 #include "lexer.h"
 #include "main.h"
 #include "output.h"
+#include "progname.h"
 #include "settings.h"
 #include "str.h"
 #include "var.h"
 #include "version.h"
 
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
 int err_error_count;
 int err_warning_count;
 
@@ -89,10 +94,10 @@ err_failure (void)
   fflush (stdout);
   fflush (stderr);
 
-  fprintf (stderr, "%s: %s\n", pgmname,
+  fprintf (stderr, "%s: %s\n", program_name,
           _("Terminating NOW due to a fatal error!"));
 
-  err_hcf (0);
+  terminate (false);
 }
 
 /* Terminate unless we're interactive or will go interactive when the
@@ -122,7 +127,7 @@ err_push_file_locator (const struct file_locator *f)
       else
        mfile_loc *= 2;
 
-      file_loc = xrealloc (file_loc, mfile_loc * sizeof *file_loc);
+      file_loc = xnrealloc (file_loc, mfile_loc, sizeof *file_loc);
     }
 
   file_loc[nfile_loc++] = f;
@@ -189,31 +194,18 @@ err_check_count (void)
 #define EXIT_FAILURE 1
 #endif
 
-static int terminating;
+static void puts_stdout (const char *s);
+static void dump_message (char *errbuf, unsigned indent,
+                         void (*func) (const char *), unsigned width);
 
-/* Halt-catch-fire.  SUCCESS should be nonzero if exiting successfully
-   or zero if not.  Despite the name, this is the usual way to finish,
-   successfully or not. */
 void
-err_hcf (int success)
+err_done (void) 
 {
-  terminating = 1;
-
-  lex_done();
-  getl_uninitialize ();
-
-  free(file_loc);
-  outp_done ();
-  done_glob();
-
-
-  exit (success ? EXIT_SUCCESS : EXIT_FAILURE);
+  free (file_loc);
+  file_loc = NULL;
+  nfile_loc = mfile_loc = 0;
 }
 
-static void puts_stdout (const char *s);
-static void dump_message (char *errbuf, unsigned indent,
-                         void (*func) (const char *), unsigned width);
-
 void
 err_vmsg (const struct error *e, const char *format, va_list args)
 {
@@ -298,8 +290,8 @@ err_vmsg (const struct error *e, const char *format, va_list args)
 
   ds_destroy (&msg);
 
-  if (e->class == FE && !terminating)
-    err_hcf (0);
+  if (e->class == FE)
+    terminate (0);
 }
 \f
 /* Private functions. */
@@ -510,7 +502,9 @@ request_bug_report_and_abort(const char *msg )
          "default_config_path: %s\n"
          "include_path:        %s\n"
          "groff_font_path:     %s\n"
-         "locale_dir:          %s\n",
+         "locale_dir:          %s\n"
+         "compiler version:    %s\n"
+         ,
 
          bare_version,         
          version,
@@ -520,7 +514,13 @@ request_bug_report_and_abort(const char *msg )
          default_config_path,
          include_path, 
          groff_font_path,
-         locale_dir);     
+         locale_dir,
+#ifdef __VERSION__
+         __VERSION__
+#else
+         "Unknown"
+#endif
+         );     
 
   if ( msg )
     fprintf(stderr,"Diagnosis: %s\n",msg);