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 <stdlib.h>
#include "alloc.h"
+#include "case.h"
#include "command.h"
+#include "dictionary.h"
#include "error.h"
#include "lexer.h"
#include "str.h"
struct cnt_var_info *next;
struct variable *d; /* Destination variable. */
- char n[9]; /* Name of dest var. */
+ char n[SHORT_NAME_LEN + 1]; /* Name of dest var. */
struct counting *c; /* The counting specifications. */
};
}
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;
count_numeric (struct counting * cnt, struct ccase * c)
{
int counter = 0;
-
- struct cnt_num *num;
-
- double cmp;
int i;
for (i = 0; i < cnt->n; i++)
{
+ struct cnt_num *num;
+
/* Extract the variable value and eliminate missing values. */
- cmp = c->data[cnt->v[i]->fv].f;
+ double cmp = case_num (c, cnt->v[i]->fv);
if (cmp == SYSMIS)
{
if (cnt->missing >= 1)
count_string (struct counting * cnt, struct ccase * c)
{
int counter = 0;
-
- struct cnt_str *str;
-
- char *cmp;
- int len;
-
int i;
for (i = 0; i < cnt->n; i++)
{
- /* Extract the variable value, variable width. */
- cmp = c->data[cnt->v[i]->fv].s;
- len = cnt->v[i]->width;
+ struct cnt_str *str;
+ /* Extract the variable value, variable width. */
for (str = cnt->crit.s;; str++)
switch (str->type)
{
case CNT_ERROR:
assert (0);
case CNT_SINGLE:
- if (memcmp (cmp, str->s, len))
+ if (memcmp (case_str (c, cnt->v[i]->fv), str->s,
+ cnt->v[i]->width))
break;
counter++;
goto done;
counter += count_numeric (cnt, c);
else
counter += count_string (cnt, c);
- c->data[info->d->fv].f = counter;
+ case_data_rw (c, info->d->fv)->f = counter;
}
return -1;
}