Eliminate temp_case, and a few other cleanups.
[pspp-builds.git] / src / glob.c
index b2abbcf2b578bd2beaeafc4070f6c21f99b55138..60da1fffd3b2e54e2a6995de86fafcc833b14c01 100644 (file)
@@ -18,7 +18,7 @@
    02111-1307, USA. */
 
 #include <config.h>
-
+#include "glob.h"
 #include <assert.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -62,7 +62,7 @@ extern void stifle_history ();
 
 #if __DJGPP__
 #include <conio.h>
-#elif __WIN32__ && __BORLANDC__
+#elif defined (__WIN32__) && defined (__BORLANDC__)
 #undef gettext
 #include <conio.h>
 #define gettext(STRING)                                \
@@ -78,15 +78,17 @@ extern void stifle_history ();
 #endif
 
 #include "alloc.h"
-#include "avl.h"
 #include "command.h"
 #include "do-ifP.h"
 #include "error.h"
 #include "expr.h"
+#include "file-handle.h"
 #include "filename.h"
 #include "getline.h"
+#include "hash.h"
 #include "julcal/julcal.h"
 #include "lexer.h"
+#include "magic.h"
 #include "main.h"
 #include "settings.h"
 #include "str.h"
@@ -95,11 +97,9 @@ extern void stifle_history ();
 #include "vfm.h"
 
 /* var.h */
-struct dictionary default_dict;
+struct dictionary *default_dict;
 struct expression *process_if_expr;
 
-struct ccase *temp_case;
-
 struct trns_header **t_trns;
 int n_trns;
 int m_trns;
@@ -109,9 +109,6 @@ int FILTER_before_TEMPORARY;
 
 struct file_handle *default_handle;
 
-void (*read_active_file) (void);
-void (*cancel_input_pgm) (void);
-
 struct ctl_stmt *ctl_stack;
 
 /* log.h */
@@ -123,16 +120,16 @@ int logging;
 
 static void get_date (void);
 
-#if HAVE_LIBTERMCAP && !__CHECKER__
-static char *term_buffer;
+#if HAVE_LIBTERMCAP
+static char term_buffer[16384];
 #endif
 
 void
-init_glob (int argc unused, char **argv)
+init_glob (int argc UNUSED, char **argv)
 {
   /* FIXME: Allow i18n of other locale items (besides LC_MESSAGES). */
 #if ENABLE_NLS
-#if LC_MESSAGE
+#if HAVE_LC_MESSAGES
   setlocale (LC_MESSAGES, "");
 #endif
   setlocale (LC_MONETARY, "");
@@ -164,61 +161,8 @@ init_glob (int argc unused, char **argv)
   _control87 (0xffff, 0x137f);
 #endif
 
-#if ENDIAN==UNKNOWN
-  {
-    /* Test for endianness borrowed from acspecific.m4, which was in
-     turn borrowed from Harbison&Steele. */
-    union
-      {
-       long l;
-       char c[sizeof (long)];
-      }
-    u;
-
-    u.l = 1;
-    if (u.c[sizeof u.l - 1] == 1)
-      endian = BIG;
-    else if (u.c[0] == 1)
-      endian = LITTLE;
-    else
-      msg (FE, _("Your machine does not appear to be either big- or little-"
-                "endian.  At the moment, PSPP only supports machines of "
-                "these standard endiannesses.  If you want to hack in "
-                "others, contact the author."));
-  }
-#endif
-
-  /* PORTME: Set the value for second_lowest_value, which is the
-     "second lowest" possible value for a double.  This is the value
-     for LOWEST on MISSING VALUES, etc. */
-#ifndef SECOND_LOWEST_VALUE
-#if FPREP == FPREP_IEEE754
-  {
-    union
-      {
-       unsigned char c[8];
-       double d;
-      }
-    second_lowest_little = {{0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff}},
-    second_lowest_big = {{0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe}};
-
-    if (endian == LITTLE)
-      second_lowest_value = second_lowest_little.d;
-    else if (endian == BIG)
-      second_lowest_value = second_lowest_big.d;
-  }
-#else /* FPREP != FPREP_IEEE754 */
-#error Unknown floating-point representation.
-#endif /* FPREP != FPREP_IEEE754 */
-#endif /* !SECOND_LOWEST_VALUE */
-
   /* var.h */
-  default_dict.var_by_name = avl_create (NULL, cmp_variable, NULL);
-
-  vec_init (&reinit_sysmis);
-  vec_init (&reinit_blanks);
-  vec_init (&init_zero);
-  vec_init (&init_blanks);
+  default_dict = dict_create ();
 
   last_vfm_invocation = time (NULL);
 
@@ -304,7 +248,7 @@ init_glob (int argc unused, char **argv)
   set_nullline = 1;
   set_more = 1;
   set_prompt = xstrdup ("PSPP> ");
-  set_seed = 2000000;
+  set_seed = NOT_LONG;
 
 #if __DJGPP__ || __BORLANDC__
   {
@@ -320,20 +264,11 @@ init_glob (int argc unused, char **argv)
     int success;
 
     /* This code stolen from termcap.info, though modified. */
-#if !__CHECKER__
-    term_buffer = xmalloc (2048);
-#endif
-
     termtype = getenv ("TERM");
     if (!termtype)
       msg (FE, _("Specify a terminal type with `setenv TERM <yourtype>'."));
 
-#if __CHECKER__
-    success = tgetent (NULL, termtype);
-#else
     success = tgetent (term_buffer, termtype);
-#endif
-
     if (success <= 0)
       {
        if (success < 0)
@@ -361,60 +296,26 @@ init_glob (int argc unused, char **argv)
   logfile = NULL;
 
   /* file-handle.h */
-  {
-    extern void fh_init_files (void);
-    
-    fh_init_files ();
-  }
+  fh_init_files ();
   
   get_date ();
 }
 
 static void
-get_date ()
+get_date (void)
 {
-  static const char *months[12] =
-    {
-      N_("Jan"), N_("Feb"), N_("Mar"), N_("Apr"), N_("May"), N_("Jun"),
-      N_("Jul"), N_("Aug"), N_("Sep"), N_("Oct"), N_("Nov"), N_("Dec"),
-    };
 
   time_t t;
-  int mn, dy, yr;
   struct tm *tmp;
 
   if ((time_t) -1 == time (&t))
     {
-      strcpy (curdate, "1 Jan 1970");
+      strcpy (curdate, "?? ??? 2???");
       return;
     }
   tmp = localtime (&t);
 
-  mn = tmp->tm_mon;
-  if (mn < 0)
-    mn = 0;
-  if (mn > 11)
-    mn = 11;
-
-  dy = tmp->tm_mday;
-  if (dy < 0)
-    dy = 0;
-  if (dy > 99)
-    dy = 99;
-
-  yr = tmp->tm_year + 1900;
-  if (yr < 0)
-    yr = 0;
-  if (yr > 9999)
-    yr = 9999;
-
-  sprintf (curdate, "%2d %s %04d", dy, gettext (months[mn]), yr);
-}
-
-int
-cmp_variable (const void *a, const void *b, void *foo unused)
-{
-  return strcmp (((struct variable *) a)->name, ((struct variable *) b)->name);
+  strftime (curdate, 12, "%d %b %Y",tmp);
 }
 
 #if __BORLANDC__