projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed buglet which manifested itself when running two consecutive EXAMINE
[pspp-builds.git]
/
src
/
examine.q
diff --git
a/src/examine.q
b/src/examine.q
index f92bba1fd2160709f263a860b9bd0dd22699e38d..43ecc13037d3d6a2faf3ab0ae762a08cd78022ae 100644
(file)
--- a/
src/examine.q
+++ b/
src/examine.q
@@
-15,8
+15,8
@@
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
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., 5
9 Temple Place - Suite 330
, Boston, MA
-0211
1-1307
, USA. */
+Foundation, Inc., 5
1 Franklin Street, Fifth Floor
, Boston, MA
+0211
0-1301
, USA. */
#include <config.h>
#include <gsl/gsl_cdf.h>
#include <config.h>
#include <gsl/gsl_cdf.h>
@@
-44,6
+44,10
@@
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "moments.h"
#include "percentiles.h"
#include "moments.h"
#include "percentiles.h"
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
/* (headers) */
#include "chart.h"
/* (headers) */
#include "chart.h"
@@
-73,7
+77,7
@@
static struct cmd_examine cmd;
static struct variable **dependent_vars;
static struct variable **dependent_vars;
-static
in
t n_dependent_vars;
+static
size_
t n_dependent_vars;
struct factor
struct factor
@@
-165,7
+169,7
@@
const char *factor_to_string_concise(const struct factor *fctr,
/* Function to use for testing for missing values */
/* Function to use for testing for missing values */
-static is_missing_func value_is_missing;
+static is_missing_func
*
value_is_missing;
/* PERCENTILES */
/* PERCENTILES */
@@
-189,9
+193,9
@@
cmd_examine(void)
/* If /MISSING=INCLUDE is set, then user missing values are ignored */
if (cmd.incl == XMN_INCLUDE )
/* If /MISSING=INCLUDE is set, then user missing values are ignored */
if (cmd.incl == XMN_INCLUDE )
- value_is_missing =
is
_system_missing;
+ value_is_missing =
mv_is_value
_system_missing;
else
else
- value_is_missing =
is
_missing;
+ value_is_missing =
mv_is_value
_missing;
if ( cmd.st_n == SYSMIS )
cmd.st_n = 5;
if ( cmd.st_n == SYSMIS )
cmd.st_n = 5;
@@
-229,6
+233,7
@@
cmd_examine(void)
hsh_destroy ( ff->fstats ) ;
free ( ff ) ;
}
hsh_destroy ( ff->fstats ) ;
free ( ff ) ;
}
+ factors = 0;
}
subc_list_double_destroy(&percentile_list);
}
subc_list_double_destroy(&percentile_list);
@@
-324,7
+329,7
@@
output_examine(void)
if ( cmd.sbc_plot)
{
if ( cmd.sbc_plot)
{
-
in
t v;
+
size_
t v;
struct factor_statistics **fs = fctr->fs ;
struct factor_statistics **fs = fctr->fs ;
@@
-390,7
+395,7
@@
list_to_ptile_hash(const subc_list_double *l)
for ( i = 0 ; i < subc_list_double_count(l) ; ++i )
{
for ( i = 0 ; i < subc_list_double_count(l) ; ++i )
{
- struct percentile *p = xmalloc (sizeof
(struct percentile)
);
+ struct percentile *p = xmalloc (sizeof
*p
);
p->p = subc_list_double_at(l,i);
p->v = SYSMIS;
p->p = subc_list_double_at(l,i);
p->v = SYSMIS;
@@
-413,9
+418,9
@@
xmn_custom_percentiles(struct cmd_examine *p UNUSED)
lex_match('(');
lex_match('(');
- while ( lex_
double_p
() )
+ while ( lex_
is_number
() )
{
{
- subc_list_double_push(&percentile_list,lex_
double
());
+ subc_list_double_push(&percentile_list,lex_
number
());
lex_get();
lex_get();
@@
-507,7
+512,7
@@
xmn_custom_variables(struct cmd_examine *cmd )
assert(n_dependent_vars);
assert(n_dependent_vars);
- totals = x
malloc( sizeof(struct metrics) * n_dependent_var
s);
+ totals = x
nmalloc (n_dependent_vars, sizeof *total
s);
if ( lex_match(T_BY))
{
if ( lex_match(T_BY))
{
@@
-530,7
+535,7
@@
static int
examine_parse_independent_vars(struct cmd_examine *cmd)
{
int success;
examine_parse_independent_vars(struct cmd_examine *cmd)
{
int success;
- struct factor *sf = xmalloc
(sizeof(struct factor)
);
+ struct factor *sf = xmalloc
(sizeof *sf
);
if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
&& token != T_ALL)
if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
&& token != T_ALL)
@@
-607,11
+612,12
@@
static int bad_weight_warn = 1;
void
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
{
void
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
{
-
in
t v;
+
size_
t v;
struct factor *fctr = factors;
while ( fctr)
{
struct factor *fctr = factors;
while ( fctr)
{
+ struct factor_statistics **foo ;
union value indep_vals[2] ;
indep_vals[0] = * case_data(c, fctr->indep_var[0]->fv);
union value indep_vals[2] ;
indep_vals[0] = * case_data(c, fctr->indep_var[0]->fv);
@@
-623,7
+629,7
@@
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
assert(fctr->fstats);
assert(fctr->fstats);
-
struct factor_statistics **
foo = ( struct factor_statistics ** )
+ foo = ( struct factor_statistics ** )
hsh_probe(fctr->fstats, (void *) &indep_vals);
if ( !*foo )
hsh_probe(fctr->fstats, (void *) &indep_vals);
if ( !*foo )
@@
-645,7
+651,7
@@
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
const struct variable *var = dependent_vars[v];
const union value *val = case_data (c, var->fv);
const struct variable *var = dependent_vars[v];
const union value *val = case_data (c, var->fv);
- if ( value_is_missing
(val,var
) || case_missing )
+ if ( value_is_missing
(&var->miss, val
) || case_missing )
val = 0;
metrics_calc( &(*foo)->m[v], val, weight, case_no);
val = 0;
metrics_calc( &(*foo)->m[v], val, weight, case_no);
@@
-658,9
+664,6
@@
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
}
}
-
-
-
static void
run_examine(const struct casefile *cf, void *cmd_ )
{
static void
run_examine(const struct casefile *cf, void *cmd_ )
{
@@
-672,7
+675,6
@@
run_examine(const struct casefile *cf, void *cmd_ )
/* Make sure we haven't got rubbish left over from a
previous split */
/* Make sure we haven't got rubbish left over from a
previous split */
-
struct factor *fctr = factors;
while (fctr)
{
struct factor *fctr = factors;
while (fctr)
{
@@
-707,7
+709,7
@@
run_examine(const struct casefile *cf, void *cmd_ )
const struct variable *var = dependent_vars[v];
const union value *val = case_data (&c, var->fv);
const struct variable *var = dependent_vars[v];
const union value *val = case_data (&c, var->fv);
- if ( value_is_missing(
val,var
))
+ if ( value_is_missing(
&var->miss, val
))
case_missing = 1;
}
case_missing = 1;
}
@@
-718,7
+720,7
@@
run_examine(const struct casefile *cf, void *cmd_ )
const struct variable *var = dependent_vars[v];
const union value *val = case_data (&c, var->fv);
const struct variable *var = dependent_vars[v];
const union value *val = case_data (&c, var->fv);
- if ( value_is_missing(
val,var
) || case_missing )
+ if ( value_is_missing(
&var->miss, val
) || case_missing )
val = 0;
metrics_calc(&totals[v], val, weight, case_no);
val = 0;
metrics_calc(&totals[v], val, weight, case_no);
@@
-807,7
+809,7
@@
run_examine(const struct casefile *cf, void *cmd_ )
hsh_probe(fctr->fstats, (void *) &key );
if ( !*ffs ) {
hsh_probe(fctr->fstats, (void *) &key );
if ( !*ffs ) {
-
in
t i;
+
size_
t i;
(*ffs) = create_factor_statistics (n_dependent_vars,
&key[0], &key[1]);
for ( i = 0 ; i < n_dependent_vars ; ++i )
(*ffs) = create_factor_statistics (n_dependent_vars,
&key[0], &key[1]);
for ( i = 0 ; i < n_dependent_vars ; ++i )
@@
-829,7
+831,7
@@
run_examine(const struct casefile *cf, void *cmd_ )
if ( totals )
{
if ( totals )
{
-
in
t i;
+
size_
t i;
for ( i = 0 ; i < n_dependent_vars ; ++i )
{
metrics_destroy(&totals[i]);
for ( i = 0 ; i < n_dependent_vars ; ++i )
{
metrics_destroy(&totals[i]);
@@
-1508,8
+1510,8
@@
populate_descriptives(struct tab_table *tbl, int col, int row,
tab_text (tbl, col,
row + 3,
tab_text (tbl, col,
row + 3,
- TAB_LEFT | TAT_TITLE,
- _("5% Trimmed Mean"));
+ TAB_LEFT | TAT_TITLE
| TAT_PRINTF
,
+ _("5%
%
Trimmed Mean"));
tab_float (tbl, col + 2,
row + 3,
tab_float (tbl, col + 2,
row + 3,
@@
-1689,10
+1691,7
@@
box_plot_variables(const struct factor *fctr,
{
double y_min = DBL_MAX;
double y_max = -DBL_MAX;
{
double y_min = DBL_MAX;
double y_max = -DBL_MAX;
- struct chart *ch;
-
- ch = chart_create();
-
+ struct chart *ch = chart_create();
const char *s = factor_to_string(fctr, *fs, 0 );
chart_write_title(ch, s);
const char *s = factor_to_string(fctr, *fs, 0 );
chart_write_title(ch, s);
@@
-1777,7
+1776,7
@@
box_plot_group(const struct factor *fctr,
s);
}
}
s);
}
}
- else
+ else
if ( ch )
{
const double box_width = (ch->data_right - ch->data_left) / 3.0;
const double box_centre = (ch->data_right + ch->data_left) / 2.0;
{
const double box_width = (ch->data_right - ch->data_left) / 3.0;
const double box_centre = (ch->data_right + ch->data_left) / 2.0;
@@
-1856,8
+1855,7
@@
np_plot(const struct metrics *m, const char *factorname)
{
/* We have to cache the detrended data, beacause we need to
find its limits before we can plot it */
{
/* We have to cache the detrended data, beacause we need to
find its limits before we can plot it */
- double *d_data;
- d_data = xmalloc (m->n_data * sizeof(double));
+ double *d_data = xnmalloc (m->n_data, sizeof *d_data);
double d_max = -DBL_MAX;
double d_min = DBL_MAX;
for ( i = 0 ; i < m->n_data; ++i )
double d_max = -DBL_MAX;
double d_min = DBL_MAX;
for ( i = 0 ; i < m->n_data; ++i )