/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <language/lexer/lexer.h>
#include <language/lexer/value-parser.h>
#include <language/lexer/variable-parser.h>
-#include <libpspp/hash.h>
#include <libpspp/message.h>
#include <libpspp/str.h>
size_t var_cnt; /* Number of variables. */
int parse_err=0; /* true if error parsing variables */
- lex_match (lexer, '/');
+ lex_match (lexer, T_SLASH);
- while (lex_token (lexer) != '.')
+ while (lex_token (lexer) != T_ENDCMD)
{
parse_err = !parse_variables (lexer, dict, &vars, &var_cnt,
PV_SAME_WIDTH);
}
if (erase)
erase_labels (vars, var_cnt);
- while (lex_token (lexer) != '/' && lex_token (lexer) != '.')
+ while (lex_token (lexer) != T_SLASH && lex_token (lexer) != T_ENDCMD)
if (!get_label (lexer, vars, var_cnt))
goto lossage;
- if (lex_token (lexer) != '/')
+ if (lex_token (lexer) != T_SLASH)
{
free (vars);
break;
/* Parse all the labels and add them to the variables. */
do
{
+ enum { MAX_LABEL_LEN = 255 };
int width = var_get_width (vars[0]);
union value value;
struct string label;
value_destroy (&value, width);
return 0;
}
- lex_match (lexer, ',');
+ lex_match (lexer, T_COMMA);
/* Set label. */
if (lex_token (lexer) != T_ID && !lex_force_string (lexer))
return 0;
}
- ds_init_string (&label, lex_tokstr (lexer));
+ ds_init_substring (&label, lex_tokss (lexer));
- if (ds_length (&label) > 60)
+ if (ds_length (&label) > MAX_LABEL_LEN)
{
- msg (SW, _("Truncating value label to 60 characters."));
- ds_truncate (&label, 60);
+ msg (SW, _("Truncating value label to %d bytes."), MAX_LABEL_LEN);
+ ds_truncate (&label, MAX_LABEL_LEN);
}
for (i = 0; i < var_cnt; i++)
value_destroy (&value, width);
lex_get (lexer);
- lex_match (lexer, ',');
+ lex_match (lexer, T_COMMA);
}
- while (lex_token (lexer) != '/' && lex_token (lexer) != '.');
+ while (lex_token (lexer) != T_SLASH && lex_token (lexer) != T_ENDCMD);
return 1;
}