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"
#include "str.h"
#include "var.h"
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
/* Implementation details:
The S?SS manuals do not specify the order that COUNT subcommands are
/* variables to count */
struct variable **v;
- int n;
+ size_t n;
/* values to count */
int missing; /* (numeric only)
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. */
};
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);
}
}
else
- strcpy (cnt->n, tokid);
+ str_copy_trunc (cnt->n, sizeof cnt->n, tokid);
lex_get ();
if (!lex_force_match ('='))
/* Parses a set of numeric criterion values. */
static int
-parse_numeric_criteria (struct counting * c)
+parse_numeric_criteria (struct counting *c)
{
- int n = 0;
- int m = 0;
+ size_t n = 0;
+ size_t m = 0;
c->crit.n = 0;
c->missing = 0;
for (;;)
{
struct cnt_num *cur;
- if (n >= m - 1)
+ if (n + 1 >= m)
{
m += 16;
- c->crit.n = xrealloc (c->crit.n, m * sizeof (struct cnt_num));
+ c->crit.n = xnrealloc (c->crit.n, m, sizeof *c->crit.n);
}
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;
{
if (!lex_force_match_id ("THRU"))
return 0;
- if (token == T_NUM)
+ if (lex_is_number ())
{
cur->type = CNT_LOW;
cur->a = tokval;
/* Parses a set of string criteria values. The skeleton is the same
as parse_numeric_criteria(). */
static int
-parse_string_criteria (struct counting * c)
+parse_string_criteria (struct counting *c)
{
int len = 0;
- int n = 0;
- int m = 0;
+ size_t n = 0;
+ size_t m = 0;
- int i;
+ size_t i;
for (i = 0; i < c->n; i++)
if (c->v[i]->width > len)
for (;;)
{
struct cnt_str *cur;
- if (n >= m - 1)
+ if (n + 1 >= m)
{
m += 16;
- c->crit.n = xrealloc (c->crit.n, m * sizeof (struct cnt_str));
+ c->crit.s = xnrealloc (c->crit.s, m, sizeof *c->crit.s);
}
if (!lex_force_string ())
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 (',');
/* Counts the number of values in case C matching counting CNT. */
static inline int
-count_numeric (struct counting * cnt, struct ccase * c)
+count_numeric (struct counting *cnt, struct ccase *c)
{
int counter = 0;
- int i;
+ size_t i;
for (i = 0; i < cnt->n; i++)
{
counter++;
continue;
}
- if (cnt->missing >= 2 && is_num_user_missing (cmp, cnt->v[i]))
+ if (cnt->missing >= 2 && mv_is_num_user_missing (&cnt->v[i]->miss, cmp))
{
counter++;
continue;
/* Counts the number of values in case C matching counting CNT. */
static inline int
-count_string (struct counting * cnt, struct ccase * c)
+count_string (struct counting *cnt, struct ccase *c)
{
int counter = 0;
- int i;
+ size_t i;
for (i = 0; i < cnt->n; i++)
{
/* Performs the COUNT transformation T on case C. */
static int
-count_trns_proc (struct trns_header * trns, struct ccase * c,
+count_trns_proc (struct trns_header *trns, struct ccase *c,
int case_num UNUSED)
{
struct cnt_var_info *info;
/* Destroys all dynamic data structures associated with T. */
static void
-count_trns_free (struct trns_header * t)
+count_trns_free (struct trns_header *t)
{
struct cnt_var_info *iter, *next;