projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added (some of the) calculations for the examine command.
[pspp]
/
src
/
loop.c
diff --git
a/src/loop.c
b/src/loop.c
index 7a31234c4f681629c7f9baf37abafc9618a9c9d1..5e3f16991393149b27e9f136a921c8cd0db1763f 100644
(file)
--- a/
src/loop.c
+++ b/
src/loop.c
@@
-18,8
+18,9
@@
02111-1307, USA. */
#include <config.h>
02111-1307, USA. */
#include <config.h>
-#include
<assert.h>
+#include
"error.h"
#include "alloc.h"
#include "alloc.h"
+#include "case.h"
#include "command.h"
#include "do-ifP.h"
#include "error.h"
#include "command.h"
#include "do-ifP.h"
#include "error.h"
@@
-166,8
+167,6
@@
internal_cmd_loop (void)
/* Name of indexing variable if applicable. */
char name[9];
/* Name of indexing variable if applicable. */
char name[9];
- lex_match_id ("LOOP");
-
/* Create and initialize transformations to facilitate
error-handling. */
two = xmalloc (sizeof *two);
/* Create and initialize transformations to facilitate
error-handling. */
two = xmalloc (sizeof *two);
@@
-200,7
+199,7
@@
internal_cmd_loop (void)
assert (token == '=');
lex_get ();
assert (token == '=');
lex_get ();
- one->init = expr_parse (
PXP
_NUMERIC);
+ one->init = expr_parse (
EXPR
_NUMERIC);
if (!one->init)
return 0;
if (!one->init)
return 0;
@@
-209,7
+208,7
@@
internal_cmd_loop (void)
expr_free (one->init);
return 0;
}
expr_free (one->init);
return 0;
}
- one->term = expr_parse (
PXP
_NUMERIC);
+ one->term = expr_parse (
EXPR
_NUMERIC);
if (!one->term)
{
expr_free (one->init);
if (!one->term)
{
expr_free (one->init);
@@
-218,7
+217,7
@@
internal_cmd_loop (void)
if (lex_match (T_BY))
{
if (lex_match (T_BY))
{
- one->incr = expr_parse (
PXP
_NUMERIC);
+ one->incr = expr_parse (
EXPR
_NUMERIC);
if (!one->incr)
return 0;
}
if (!one->incr)
return 0;
}
@@
-231,7
+230,7
@@
internal_cmd_loop (void)
{
two->flags |= LPC_COND;
{
two->flags |= LPC_COND;
- two->cond = expr_parse (
PXP
_BOOLEAN);
+ two->cond = expr_parse (
EXPR
_BOOLEAN);
if (!two->cond)
return 0;
}
if (!two->cond)
return 0;
}
@@
-261,15
+260,6
@@
internal_cmd_loop (void)
add_transformation ((struct trns_header *) one);
add_transformation ((struct trns_header *) two);
add_transformation ((struct trns_header *) one);
add_transformation ((struct trns_header *) two);
-#if DEBUGGING
- printf ("LOOP");
- if (two->flags & LPC_INDEX)
- printf ("(INDEX)");
- if (two->flags & LPC_COND)
- printf ("(IF)");
- printf ("\n");
-#endif
-
return 1;
}
return 1;
}
@@
-315,7
+305,7
@@
internal_cmd_end_loop (void)
/* Parse the expression if any. */
if (lex_match_id ("IF"))
{
/* Parse the expression if any. */
if (lex_match_id ("IF"))
{
- thr->cond = expr_parse (
PXP
_BOOLEAN);
+ thr->cond = expr_parse (
EXPR
_BOOLEAN);
if (!thr->cond)
return 0;
}
if (!thr->cond)
return 0;
}
@@
-330,13
+320,6
@@
internal_cmd_end_loop (void)
/* Pop off the top of stack. */
ctl_stack = ctl_stack->down;
/* Pop off the top of stack. */
ctl_stack = ctl_stack->down;
-#if DEBUGGING
- printf ("END LOOP");
- if (thr->cond)
- printf ("(IF)");
- printf ("\n");
-#endif
-
return 1;
}
return 1;
}
@@
-362,7
+345,7
@@
loop_1_trns_proc (struct trns_header * trns, struct ccase * c,
/* Even if the loop is never entered, force the index variable
to assume the initial value. */
/* Even if the loop is never entered, force the index variable
to assume the initial value. */
- c
->data[two->index->fv].
f = t1.f;
+ c
ase_data_rw (c, two->index->fv)->
f = t1.f;
/* Throw out various pathological cases. */
if (!finite (t1.f) || !finite (t2.f) || !finite (t3.f) || t2.f == 0.0)
/* Throw out various pathological cases. */
if (!finite (t1.f) || !finite (t2.f) || !finite (t3.f) || t2.f == 0.0)
@@
-430,7
+413,7
@@
loop_2_trns_proc (struct trns_header * trns, struct ccase * c,
return two->loop_term;
/* Set the current value into the case. */
return two->loop_term;
/* Set the current value into the case. */
- c
->data[two->index->fv].
f = two->curr;
+ c
ase_data_rw (c, two->index->fv)->
f = two->curr;
/* Decrement the current value. */
two->curr += two->incr;
/* Decrement the current value. */
two->curr += two->incr;
@@
-443,7
+426,7
@@
loop_2_trns_proc (struct trns_header * trns, struct ccase * c,
return two->loop_term;
/* Set the current value into the case. */
return two->loop_term;
/* Set the current value into the case. */
- c
->data[two->index->fv].
f = two->curr;
+ c
ase_data_rw (c, two->index->fv)->
f = two->curr;
/* Increment the current value. */
two->curr += two->incr;
/* Increment the current value. */
two->curr += two->incr;
@@
-502,8
+485,6
@@
cmd_break (void)
/* New transformation. */
struct break_trns *t;
/* New transformation. */
struct break_trns *t;
- lex_match_id ("BREAK");
-
for (loop = ctl_stack; loop; loop = loop->down)
if (loop->type == CST_LOOP)
break;
for (loop = ctl_stack; loop; loop = loop->down)
if (loop->type == CST_LOOP)
break;