* Makefile.am: Add pspp-mode.el to EXTRA_DIST.
[pspp] / src / count.c
index a6e70616460cf7ce40583c0f858e5801095d75a7..e3220d79485a5d94ea9c39f8c24374897c46fcd0 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
 #include "error.h"
@@ -23,6 +23,7 @@
 #include "alloc.h"
 #include "case.h"
 #include "command.h"
+#include "dictionary.h"
 #include "error.h"
 #include "lexer.h"
 #include "str.h"
@@ -107,7 +108,7 @@ struct cnt_var_info
     struct cnt_var_info *next;
 
     struct variable *d;                /* Destination variable. */
-    char n[9];                 /* Name of dest var. */
+    char n[LONG_NAME_LEN + 1]; /* Name of dest var. */
 
     struct counting *c;                /* The counting specifications. */
   };
@@ -144,7 +145,7 @@ cmd_count (void)
       cnt->d = NULL;
       cnt->c = NULL;
 
-      /* Get destination struct variable, or at least its name. */
+      /* Get destination variable, or at least its name. */
       if (!lex_force_id ())
        goto fail;
       cnt->d = dict_lookup_var (default_dict, tokid);
@@ -157,7 +158,7 @@ cmd_count (void)
            }
        }
       else
-       strcpy (cnt->n, tokid);
+       str_copy_trunc (cnt->n, sizeof cnt->n, tokid);
 
       lex_get ();
       if (!lex_force_match ('='))
@@ -243,13 +244,13 @@ parse_numeric_criteria (struct counting * c)
        }
 
       cur = &c->crit.n[n++];
-      if (token == T_NUM)
+      if (lex_is_number ())
        {
          cur->a = tokval;
          lex_get ();
          if (lex_match_id ("THRU"))
            {
-             if (token == T_NUM)
+             if (lex_is_number ())
                {
                  if (!lex_force_num ())
                    return 0;
@@ -281,7 +282,7 @@ parse_numeric_criteria (struct counting * c)
        {
          if (!lex_force_match_id ("THRU"))
            return 0;
-         if (token == T_NUM)
+         if (lex_is_number ())
            {
              cur->type = CNT_LOW;
              cur->a = tokval;
@@ -348,7 +349,7 @@ parse_string_criteria (struct counting * c)
       cur = &c->crit.s[n++];
       cur->type = CNT_SINGLE;
       cur->s = malloc (len + 1);
-      st_pad_copy (cur->s, ds_c_str (&tokstr), len + 1);
+      str_copy_rpad (cur->s, len + 1, ds_c_str (&tokstr));
       lex_get ();
 
       lex_match (',');