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. */
/* FIXME:
#include "var.h"
#include "vfm.h"
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
/* (headers) */
#include "debug-print.h"
/* (specification)
crosstabs (crs_):
- *tables=custom;
+ *^tables=custom;
+variables=custom;
+missing=miss:!table/include/report;
+write[wr_]=none,cells,all;
}
{
- int *by_iter = xcalloc (sizeof *by_iter * n_by);
+ int *by_iter = xcalloc (n_by, sizeof *by_iter);
int i;
xtab = xrealloc (xtab, sizeof *xtab * (nxtab + nx));
assert (x != NULL);
for (j = 0; j < x->nvar; j++)
{
- if ((cmd.miss == CRS_TABLE
- && is_missing (case_data (c, x->vars[j]->fv), x->vars[j]))
+ const union value *v = case_data (c, x->vars[j]->fv);
+ const struct missing_values *mv = &x->vars[j]->miss;
+ if ((cmd.miss == CRS_TABLE && mv_is_value_missing (mv, v))
|| (cmd.miss == CRS_INCLUDE
- && is_system_missing (case_data (c, x->vars[j]->fv),
- x->vars[j])))
+ && mv_is_value_system_missing (mv, v)))
{
x->missing += weight;
goto next_crosstab;
/* Note that the first test also rules out SYSMIS. */
if ((value < vr->min || value >= vr->max)
- || (cmd.miss == CRS_TABLE && is_num_user_missing (value, v)))
+ || (cmd.miss == CRS_TABLE
+ && mv_is_num_user_missing (&v->miss, value)))
{
x->missing += weight;
goto next_crosstab;
int r;
for (r = 0; r < n_rows; r++)
- if (is_num_user_missing (rows[r].f, x->vars[ROW_VAR]))
+ if (mv_is_num_user_missing (&x->vars[ROW_VAR]->miss, rows[r].f))
{
int c;
int c;
for (c = 0; c < n_cols; c++)
- if (is_num_user_missing (cols[c].f, x->vars[COL_VAR]))
+ if (mv_is_num_user_missing (&x->vars[COL_VAR]->miss, cols[c].f))
{
int r;
table_value_missing (struct tab_table *table, int c, int r, unsigned char opt,
const union value *v, const struct variable *var)
{
- struct len_string s;
+ struct fixed_string s;
const char *label = val_labs_find (var->val_labs, *v);
if (label)
s.string = tab_alloc (table, var->print.w);
format_short (s.string, &var->print, v);
s.length = strlen (s.string);
- if (cmd.miss == CRS_REPORT && is_num_user_missing (v->f, var))
+ if (cmd.miss == CRS_REPORT && mv_is_num_user_missing (&var->miss, v->f))
s.string[s.length++] = 'M';
while (s.length && *s.string == ' ')
{
{
const struct fmt_spec f = {FMT_F, 10, 1};
union value v;
- struct len_string s;
+ struct fixed_string s;
s.length = 10;
s.string = tab_alloc (table, 16);
int mark_missing = 0;
double expected_value = row_tot[r] * col_tot[c] / W;
if (cmd.miss == CRS_REPORT
- && (is_num_user_missing (cols[c].f, x->vars[COL_VAR])
- || is_num_user_missing (rows[r].f, x->vars[ROW_VAR])))
+ && (mv_is_num_user_missing (&x->vars[COL_VAR]->miss, cols[c].f)
+ || mv_is_num_user_missing (&x->vars[ROW_VAR]->miss,
+ rows[r].f)))
mark_missing = 1;
for (i = 0; i < num_cells; i++)
{
int mark_missing = 0;
if (cmd.miss == CRS_REPORT
- && is_num_user_missing (rows[r].f, x->vars[ROW_VAR]))
+ && mv_is_num_user_missing (&x->vars[ROW_VAR]->miss, rows[r].f))
mark_missing = 1;
for (i = 0; i < num_cells; i++)
int i;
if (cmd.miss == CRS_REPORT && c < n_cols
- && is_num_user_missing (cols[c].f, x->vars[COL_VAR]))
+ && mv_is_num_user_missing (&x->vars[COL_VAR]->miss, cols[c].f))
mark_missing = 1;
for (i = 0; i < num_cells; i++)