pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] Changes to pspp/src/vars-prs.c


From: John Darrington
Subject: [Pspp-cvs] Changes to pspp/src/vars-prs.c
Date: Wed, 13 Apr 2005 06:10:16 -0400

Index: pspp/src/vars-prs.c
diff -u pspp/src/vars-prs.c:1.13 pspp/src/vars-prs.c:1.14
--- pspp/src/vars-prs.c:1.13    Fri Feb 11 08:22:05 2005
+++ pspp/src/vars-prs.c Wed Apr 13 10:09:59 2005
@@ -134,6 +134,7 @@
   assert (var != NULL);
   assert (cnt != NULL);
 
+ 
   vs = var_set_create_from_dict (d);
   success = parse_var_set_vars (vs, var, cnt, opts);
   if ( success == 0 )
@@ -266,7 +267,7 @@
   else
     included = NULL;
 
-  if (lex_match (T_ALL))
+if (lex_match (T_ALL))
     add_variables (v, nv, &mv, included, pv_opts,
                    vs, 0, var_set_get_cnt (vs) - 1, DC_ORDINARY);
   else 
@@ -302,7 +303,6 @@
                        first_var->name, last_var->name);
                   goto fail;
                 }
-
               if (class != last_class)
                 {
                   msg (SE, _("When using the TO keyword to specify several "
@@ -409,10 +409,10 @@
       *names = NULL;
     }
 
-  name1 = xmalloc (36);
-  name2 = &name1[1 * 9];
-  root1 = &name1[2 * 9];
-  root2 = &name1[3 * 9];
+  name1 = xmalloc (4 * (SHORT_NAME_LEN + 1));
+  name2 = &name1[1 * SHORT_NAME_LEN + 1];
+  root1 = &name1[2 * SHORT_NAME_LEN + 1];
+  root2 = &name1[3 * SHORT_NAME_LEN + 1];
   do
     {
       if (token != T_ID)
@@ -464,7 +464,7 @@
 
          for (n = n1; n <= n2; n++)
            {
-             (*names)[nvar] = xmalloc (9);
+             (*names)[nvar] = xmalloc (SHORT_NAME_LEN + 1);
              sprintf ((*names)[nvar], "%s%0*d", root1, d1, n);
              nvar++;
            }
@@ -594,7 +594,7 @@
 {
   assert (vs != NULL);
   assert (name != NULL);
-  assert (strlen (name) < 9);
+  assert (strlen (name) <= LONG_NAME_LEN );
 
   return vs->lookup_var_idx (vs, name);
 }
@@ -662,6 +662,7 @@
     struct variable *const *var;/* Array of variables. */
     size_t var_cnt;             /* Number of elements in var. */
     struct hsh_table *name_tab; /* Hash from variable names to variables. */
+    struct hsh_table *longname_tab; /* Hash of short names indexed by long 
names */
   };
 
 /* Returns the number of variables in VS. */
@@ -688,10 +689,26 @@
 static int
 array_var_set_lookup_var_idx (const struct var_set *vs, const char *name) 
 {
+  char *short_name ;
   struct array_var_set *avs = vs->aux;
   struct variable v, *vp, *const *vpp;
 
-  strcpy (v.name, name);
+  struct name_table_entry key;
+  key.longname = name;
+
+  struct name_table_entry *nte;
+
+  assert (avs->longname_tab);
+
+
+  nte = hsh_find (avs->longname_tab, &key);
+
+  if (!nte)
+    return -1;
+
+  short_name = nte->name;
+
+  strcpy (v.name, short_name);
   vp = &v;
   vpp = hsh_find (avs->name_tab, &vp);
   return vpp != NULL ? vpp - avs->var : -1;
@@ -704,6 +721,7 @@
   struct array_var_set *avs = vs->aux;
 
   hsh_destroy (avs->name_tab);
+  hsh_destroy (avs->longname_tab);
   free (avs);
   free (vs);
 }
@@ -726,14 +744,35 @@
   avs->var = var;
   avs->var_cnt = var_cnt;
   avs->name_tab = hsh_create (2 * var_cnt,
-                              compare_var_ptr_names, hash_var_ptr_name, NULL,
-                              NULL);
-  for (i = 0; i < var_cnt; i++)
-    if (hsh_insert (avs->name_tab, (void *) &var[i]) != NULL) 
-      {
-        var_set_destroy (vs);
-        return NULL;
-      }
+                              compare_var_ptr_names, hash_var_ptr_name, 
+                             NULL, NULL);
+
+  avs->longname_tab = hsh_create (2 * var_cnt, 
+                                  compare_long_names, hash_long_name, 
+                                  NULL, NULL);
   
+  for (i = 0; i < var_cnt; i++)
+    {
+      struct name_table_entry *nte ;
+
+      if (hsh_insert (avs->name_tab, &var[i]) != NULL) 
+       {
+         var_set_destroy (vs);
+         return NULL;
+       }
+
+      nte = xmalloc (sizeof (*nte));
+      nte->name = strdup(var[i]->name);
+      nte->longname = strdup(var[i]->longname);
+
+      if (hsh_insert (avs->longname_tab, nte) != NULL) 
+       {
+         var_set_destroy (vs);
+         free (nte);
+         return NULL;
+       }
+
+    }
+
   return vs;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]