X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fcrosstabs.q;h=d13a14328449768115255cbcc17b0810100c84e1;hb=82a9572a7a0ec2f7fc572cc9807bc5205a5e8a8d;hp=18eb26ec3fdc2ec0c55be2efe9bdd8743d2d13e4;hpb=2322678e8fddbbf158b01b2720db2636404bba3b;p=pspp-builds.git diff --git a/src/language/stats/crosstabs.q b/src/language/stats/crosstabs.q index 18eb26ec..d13a1432 100644 --- a/src/language/stats/crosstabs.q +++ b/src/language/stats/crosstabs.q @@ -30,29 +30,33 @@ */ #include -#include "message.h" + #include +#include #include #include -#include -#include "array.h" -#include "alloc.h" -#include "case.h" -#include "dictionary.h" -#include "hash.h" -#include "pool.h" -#include "command.h" -#include "compiler.h" -#include "lexer.h" -#include "message.h" -#include "magic.h" -#include "misc.h" -#include "output.h" -#include "str.h" -#include "table.h" -#include "value-labels.h" -#include "variable.h" -#include "procedure.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "gettext.h" #define _(msgid) gettext (msgid) @@ -60,13 +64,11 @@ /* (headers) */ -#include "debug-print.h" - /* (specification) crosstabs (crs_): *^tables=custom; +variables=custom; - +missing=miss:!table/include/report; + missing=miss:!table/include/report; +write[wr_]=none,cells,all; +format=fmt:!labels/nolabels/novallabs, val:!avalue/dvalue, @@ -173,9 +175,9 @@ static struct pool *pl_tc; /* For table cells. */ static struct pool *pl_col; /* For column data. */ static int internal_cmd_crosstabs (void); -static void precalc (void *); -static bool calc_general (struct ccase *, void *); -static bool calc_integer (struct ccase *, void *); +static void precalc (const struct ccase *, void *); +static bool calc_general (const struct ccase *, void *); +static bool calc_integer (const struct ccase *, void *); static void postcalc (void *); static void submit (struct tab_table *); @@ -209,7 +211,7 @@ internal_cmd_crosstabs (void) pl_tc = pool_create (); pl_col = pool_create (); - if (!parse_crosstabs (&cmd)) + if (!parse_crosstabs (&cmd, NULL)) return CMD_FAILURE; mode = variables ? INTEGER : GENERAL; @@ -299,7 +301,7 @@ internal_cmd_crosstabs (void) /* Parses the TABLES subcommand. */ static int -crs_custom_tables (struct cmd_crosstabs *cmd UNUSED) +crs_custom_tables (struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED) { struct var_set *var_set; int n_by; @@ -403,7 +405,7 @@ crs_custom_tables (struct cmd_crosstabs *cmd UNUSED) /* Parses the VARIABLES subcommand. */ static int -crs_custom_variables (struct cmd_crosstabs *cmd UNUSED) +crs_custom_variables (struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED) { if (nxtab) { @@ -485,8 +487,9 @@ static unsigned hash_table_entry (const void *, void *); /* Set up the crosstabulation tables for processing. */ static void -precalc (void *aux UNUSED) +precalc (const struct ccase *first, void *aux UNUSED) { + output_split_file_values (first); if (mode == GENERAL) { gen_tab = hsh_create (512, compare_table_entry, hash_table_entry, @@ -558,7 +561,7 @@ precalc (void *aux UNUSED) /* Form crosstabulations for general mode. */ static bool -calc_general (struct ccase *c, void *aux UNUSED) +calc_general (const struct ccase *c, void *aux UNUSED) { int bad_warn = 1; @@ -632,7 +635,7 @@ calc_general (struct ccase *c, void *aux UNUSED) } static bool -calc_integer (struct ccase *c, void *aux UNUSED) +calc_integer (const struct ccase *c, void *aux UNUSED) { int bad_warn = 1; @@ -809,7 +812,7 @@ make_summary_table (void) int cur_tab = 0; summary = tab_create (7, 3 + nxtab, 1); - tab_title (summary, 0, _("Summary.")); + tab_title (summary, _("Summary.")); tab_headers (summary, 1, 0, 3, 0); tab_joint_text (summary, 1, 0, 6, 0, TAB_CENTER, _("Cases")); tab_joint_text (summary, 1, 1, 2, 1, TAB_CENTER, _("Valid")); @@ -1088,7 +1091,7 @@ output_pivot_table (struct table_entry **pb, struct table_entry **pe, } strcpy (cp, "]."); - tab_title (table, 0, title); + tab_title (table, "%s", title); local_free (title); } @@ -1104,7 +1107,7 @@ output_pivot_table (struct table_entry **pb, struct table_entry **pe, (pe - pb) / n_cols * 3 / 2 * N_CHISQ + 10, 1); tab_headers (chisq, 1 + (nvar - 2), 0, 1, 0); - tab_title (chisq, 0, "Chi-square tests."); + tab_title (chisq, _("Chi-square tests.")); tab_offset (chisq, nvar - 2, 0); tab_text (chisq, 0, 0, TAB_LEFT | TAT_TITLE, _("Statistic")); @@ -1130,7 +1133,7 @@ output_pivot_table (struct table_entry **pb, struct table_entry **pe, { sym = tab_create (6 + (nvar - 2), (pe - pb) / n_cols * 7 + 10, 1); tab_headers (sym, 2 + (nvar - 2), 0, 1, 0); - tab_title (sym, 0, "Symmetric measures."); + tab_title (sym, _("Symmetric measures.")); tab_offset (sym, nvar - 2, 0); tab_text (sym, 0, 0, TAB_LEFT | TAT_TITLE, _("Category")); @@ -1149,11 +1152,11 @@ output_pivot_table (struct table_entry **pb, struct table_entry **pe, { risk = tab_create (4 + (nvar - 2), (pe - pb) / n_cols * 4 + 10, 1); tab_headers (risk, 1 + nvar - 2, 0, 2, 0); - tab_title (risk, 0, "Risk estimate."); + tab_title (risk, _("Risk estimate.")); tab_offset (risk, nvar - 2, 0); tab_joint_text (risk, 2, 0, 3, 0, TAB_CENTER | TAT_TITLE | TAT_PRINTF, - _(" 95%% Confidence Interval")); + _("95%% Confidence Interval")); tab_text (risk, 0, 1, TAB_LEFT | TAT_TITLE, _("Statistic")); tab_text (risk, 1, 1, TAB_RIGHT | TAT_TITLE, _("Value")); tab_text (risk, 2, 1, TAB_RIGHT | TAT_TITLE, _("Lower")); @@ -1171,7 +1174,7 @@ output_pivot_table (struct table_entry **pb, struct table_entry **pe, { direct = tab_create (7 + (nvar - 2), (pe - pb) / n_cols * 7 + 10, 1); tab_headers (direct, 3 + (nvar - 2), 0, 1, 0); - tab_title (direct, 0, "Directional measures."); + tab_title (direct, _("Directional measures.")); tab_offset (direct, nvar - 2, 0); tab_text (direct, 0, 0, TAB_LEFT | TAT_TITLE, _("Category")); @@ -1466,7 +1469,7 @@ submit (struct tab_table *t) tab_box (t, TAL_2, TAL_2, -1, -1, 0, 0, tab_nc (t) - 1, tab_nr (t) - 1); tab_box (t, -1, -1, -1, TAL_1, tab_l (t), tab_t (t) - 1, tab_nc (t) - 1, tab_nr (t) - 1); - tab_box (t, -1, -1, -1, TAL_1 | TAL_SPACING, 0, tab_t (t), tab_l (t) - 1, + tab_box (t, -1, -1, -1, TAL_GAP, 0, tab_t (t), tab_l (t) - 1, tab_nr (t) - 1); tab_vline (t, TAL_2, tab_l (t), 0, tab_nr (t) - 1); tab_dim (t, crosstabs_dim); @@ -1481,14 +1484,20 @@ crosstabs_dim (struct tab_table *t, struct outp_driver *d) int i; /* Width of a numerical column. */ - int c = outp_string_width (d, "0.000000"); + int c = outp_string_width (d, "0.000000", OUTP_PROPORTIONAL); if (cmd.miss == CRS_REPORT) - c += outp_string_width (d, "M"); + c += outp_string_width (d, "M", OUTP_PROPORTIONAL); /* Set width for header columns. */ if (t->l != 0) { - int w = (d->width - t->vr_tot - c * (t->nc - t->l)) / t->l; + size_t i; + int w; + + w = d->width - c * (t->nc - t->l); + for (i = 0; i <= t->nc; i++) + w -= t->wrv[i]; + w /= t->l; if (w < d->prop_em_width * 8) w = d->prop_em_width * 8; @@ -1653,7 +1662,7 @@ static void table_value_missing (struct tab_table *table, int c, int r, unsigned char opt, const union value *v, const struct variable *var) { - struct fixed_string s; + struct substring s; const char *label = val_labs_find (var->val_labs, *v); if (label) @@ -1700,7 +1709,7 @@ format_cell_entry (struct tab_table *table, int c, int r, double value, { const struct fmt_spec f = {FMT_F, 10, 1}; union value v; - struct fixed_string s; + struct substring s; s.length = 10; s.string = tab_alloc (table, 16);