X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fsys-file-info.c;h=6a0c81acac768b50ee782a3ef979ff96db57f615;hb=2cf38ce51a9f34961d68a75e0b312a591b5c9abf;hp=6d033419d1f404e8a0a6dcfd3ff0cabe32f919cd;hpb=f4768c8822dcce37de6286b2b5acccb69c61de97;p=pspp-builds.git diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index 6d033419..6a0c81ac 100644 --- a/src/language/dictionary/sys-file-info.c +++ b/src/language/dictionary/sys-file-info.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -69,7 +69,7 @@ static int describe_variable (const struct variable *v, struct tab_table *t, /* Sets the widths of all the columns and heights of all the rows in table T for driver D. */ static void -sysfile_info_dim (struct tab_table *t, struct outp_driver *d) +sysfile_info_dim (struct tab_table *t, struct outp_driver *d, void *aux UNUSED) { static const int max[] = {20, 5, 35, 3, 0}; const int *p; @@ -120,8 +120,8 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) tab_text (t, 1, 1, TAB_LEFT, label); } tab_text (t, 0, 2, TAB_LEFT, _("Created:")); - tab_text (t, 1, 2, TAB_LEFT | TAT_PRINTF, "%s %s by %s", - info.creation_date, info.creation_time, info.product); + tab_text_format (t, 1, 2, TAB_LEFT, "%s %s by %s", + info.creation_date, info.creation_time, info.product); tab_text (t, 0, 3, TAB_LEFT, _("Integer Format:")); tab_text (t, 1, 3, TAB_LEFT, info.integer_format == INTEGER_MSB_FIRST ? _("Big Endian.") @@ -136,11 +136,11 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) : info.float_format == FLOAT_Z_LONG ? _("IBM 390 Hex Long.") : _("Unknown.")); tab_text (t, 0, 5, TAB_LEFT, _("Variables:")); - tab_text (t, 1, 5, TAB_LEFT | TAT_PRINTF, "%zu", dict_get_var_cnt (d)); + tab_text_format (t, 1, 5, TAB_LEFT, "%zu", dict_get_var_cnt (d)); tab_text (t, 0, 6, TAB_LEFT, _("Cases:")); - tab_text (t, 1, 6, TAB_LEFT | TAT_PRINTF, - info.case_cnt == -1 ? _("Unknown") : "%ld", - (long int) info.case_cnt); + tab_text_format (t, 1, 6, TAB_LEFT, + info.case_cnt == -1 ? _("Unknown") : "%ld", + (long int) info.case_cnt); tab_text (t, 0, 7, TAB_LEFT, _("Type:")); tab_text (t, 1, 7, TAB_LEFT, _("System File.")); tab_text (t, 0, 8, TAB_LEFT, _("Weight:")); @@ -151,20 +151,20 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) ? var_get_name (weight_var) : _("Not weighted."))); } tab_text (t, 0, 9, TAB_LEFT, _("Mode:")); - tab_text (t, 1, 9, TAB_LEFT | TAT_PRINTF, - _("Compression %s."), info.compressed ? _("on") : _("off")); + tab_text_format (t, 1, 9, TAB_LEFT, + _("Compression %s."), info.compressed ? _("on") : _("off")); tab_text (t, 0, 10, TAB_LEFT, _("Charset:")); - tab_text (t, 1, 10, TAB_LEFT | TAT_PRINTF, - dict_get_encoding(d) ? dict_get_encoding(d) : _("Unknown")); + tab_text_format (t, 1, 10, TAB_LEFT, + dict_get_encoding(d) ? dict_get_encoding(d) : _("Unknown")); - tab_dim (t, tab_natural_dimensions); + tab_dim (t, tab_natural_dimensions, NULL); tab_submit (t); t = tab_create (4, 1 + 2 * dict_get_var_cnt (d), 1); - tab_dim (t, sysfile_info_dim); + tab_dim (t, sysfile_info_dim, NULL); tab_headers (t, 0, 0, 1, 0); tab_text (t, 0, 0, TAB_LEFT | TAT_TITLE, _("Variable")); tab_joint_text (t, 1, 0, 2, 0, TAB_LEFT | TAT_TITLE, _("Description")); @@ -344,7 +344,7 @@ static int _flags; /* Sets the widths of all the columns and heights of all the rows in table T for driver D. */ static void -variables_dim (struct tab_table *t, struct outp_driver *d) +variables_dim (struct tab_table *t, struct outp_driver *d, void *aux UNUSED) { int pc; int i; @@ -397,7 +397,7 @@ display_variables (const struct variable **vl, size_t n, int flags) ? _("Description") : _("Label"))); if (flags & DF_DICT_INDEX) tab_text (t, pc, 0, TAB_LEFT | TAT_TITLE, _("Position")); - tab_dim (t, variables_dim); + tab_dim (t, variables_dim, NULL); r = 1; for (i = 0; i < n; i++) @@ -459,8 +459,7 @@ display_attributes (struct tab_table *t, const struct attrset *set, int flags, for (i = 0; i < n_values; i++) { if (n_values > 1) - tab_text (t, c, r, TAB_LEFT | TAT_PRINTF, "%s[%d]", - name, i + 1); + tab_text_format (t, c, r, TAB_LEFT, "%s[%d]", name, i + 1); else tab_text (t, c, r, TAB_LEFT, name); tab_text (t, c + 1, r, TAB_LEFT, attribute_get_value (attr, i)); @@ -487,7 +486,7 @@ display_data_file_attributes (struct attrset *set, int flags) tab_text (t, 1, 0, TAB_LEFT | TAT_TITLE, _("Value")); display_attributes (t, set, flags, 0, 1); tab_columns (t, TAB_COL_DOWN, 1); - tab_dim (t, tab_natural_dimensions); + tab_dim (t, tab_natural_dimensions, NULL); tab_title (t, "Custom data file attributes."); tab_submit (t); } @@ -523,7 +522,7 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, /* Put the name, var label, and position into the first row. */ tab_text (t, 0, r, TAB_LEFT, var_get_name (v)); if (flags & DF_DICT_INDEX) - tab_text (t, pc, r, TAT_PRINTF, "%zu", var_get_dict_index (v) + 1); + tab_text_format (t, pc, r, 0, "%zu", var_get_dict_index (v) + 1); if (flags & DF_VARIABLE_LABELS && var_has_label (v)) { @@ -540,18 +539,20 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, if (fmt_equal (print, write)) { char str[FMT_STRING_LEN_MAX + 1]; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Format: %s"), fmt_to_string (print, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Format: %s"), fmt_to_string (print, str)); r++; } else { char str[FMT_STRING_LEN_MAX + 1]; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Print Format: %s"), fmt_to_string (print, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Print Format: %s"), + fmt_to_string (print, str)); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Write Format: %s"), fmt_to_string (write, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Write Format: %s"), + fmt_to_string (write, str)); r++; } } @@ -562,38 +563,39 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, enum measure m = var_get_measure (v); enum alignment a = var_get_alignment (v); - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Measure: %s"), - m == MEASURE_NOMINAL ? _("Nominal") - : m == MEASURE_ORDINAL ? _("Ordinal") - : _("Scale")); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Measure: %s"), + m == MEASURE_NOMINAL ? _("Nominal") + : m == MEASURE_ORDINAL ? _("Ordinal") + : _("Scale")); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Display Alignment: %s"), - a == ALIGN_LEFT ? _("Left") - : a == ALIGN_CENTRE ? _("Center") - : _("Right")); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Display Alignment: %s"), + a == ALIGN_LEFT ? _("Left") + : a == ALIGN_CENTRE ? _("Center") + : _("Right")); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Display Width: %d"), var_get_display_width (v)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Display Width: %d"), + var_get_display_width (v)); r++; } /* Missing values if any. */ if (flags & DF_MISSING_VALUES && var_has_missing_values (v)) { + const struct missing_values *mv = var_get_missing_values (v); char buf[128]; char *cp; - struct missing_values mv; int cnt = 0; + int i; cp = stpcpy (buf, _("Missing Values: ")); - mv_copy (&mv, var_get_missing_values (v)); - if (mv_has_range (&mv)) + if (mv_has_range (mv)) { double x, y; - mv_pop_range (&mv, &x, &y); + mv_get_range (mv, &x, &y); if (x == LOWEST) cp += sprintf (cp, "LOWEST THRU %g", y); else if (y == HIGHEST) @@ -602,19 +604,21 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, cp += sprintf (cp, "%g THRU %g", x, y); cnt++; } - while (mv_has_value (&mv)) + for (i = 0; i < mv_n_values (mv); i++) { - union value value; - mv_pop_value (&mv, &value); + const union value *value = mv_get_value (mv, i); if (cnt++ > 0) cp += sprintf (cp, "; "); if (var_is_numeric (v)) - cp += sprintf (cp, "%g", value.f); + cp += sprintf (cp, "%g", value->f); else { + int width = var_get_width (v); + int mv_width = MIN (width, MV_MAX_STRING); + *cp++ = '"'; - memcpy (cp, value.s, var_get_width (v)); - cp += var_get_width (v); + memcpy (cp, value_str (value, width), mv_width); + cp += mv_width; *cp++ = '"'; *cp = '\0'; } @@ -628,9 +632,10 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, if (flags & DF_VALUE_LABELS && var_has_value_labels (v)) { const struct val_labs *val_labs = var_get_value_labels (v); - struct val_labs_iterator *i; - struct val_lab *vl; + size_t n_labels = val_labs_count (val_labs); + const struct val_lab **labels; int orig_r = r; + size_t i; #if 0 tab_text (t, 1, r, TAB_LEFT, _("Value")); @@ -639,23 +644,27 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, #endif tab_hline (t, TAL_1, 1, 2, r); - for (vl = val_labs_first_sorted (val_labs, &i); vl != NULL; - vl = val_labs_next (val_labs, &i)) + + labels = val_labs_sorted (val_labs); + for (i = 0; i < n_labels; i++) { - char buf[128]; + const struct val_lab *vl = labels[i]; + char buf[MAX_STRING + 1]; if (var_is_alpha (v)) { - memcpy (buf, vl->value.s, var_get_width (v)); - buf[var_get_width (v)] = 0; + int width = var_get_width (v); + memcpy (buf, value_str (&vl->value, width), width); + buf[width] = 0; } else sprintf (buf, "%g", vl->value.f); tab_text (t, 1, r, TAB_NONE, buf); - tab_text (t, 2, r, TAB_LEFT, vl->label); + tab_text (t, 2, r, TAB_LEFT, val_lab_get_label (vl)); r++; } + free (labels); tab_vline (t, TAL_1, 2, orig_r, r - 1); } @@ -707,7 +716,7 @@ display_vectors (const struct dictionary *dict, int sorted) t = tab_create (4, nrow + 1, 0); tab_headers (t, 0, 0, 1, 0); tab_columns (t, TAB_COL_DOWN, 1); - tab_dim (t, tab_natural_dimensions); + tab_dim (t, tab_natural_dimensions, NULL); tab_box (t, TAL_1, TAL_1, -1, -1, 0, 0, 3, nrow); tab_box (t, -1, -1, -1, TAL_1, 0, 0, 3, nrow); tab_hline (t, TAL_2, 0, 3, 1); @@ -732,7 +741,7 @@ display_vectors (const struct dictionary *dict, int sorted) char fmt_string[FMT_STRING_LEN_MAX + 1]; fmt_to_string (var_get_print_format (var), fmt_string); - tab_text (t, 1, row, TAB_RIGHT | TAT_PRINTF, "%zu", j + 1); + tab_text_format (t, 1, row, TAB_RIGHT, "%zu", j + 1); tab_text (t, 2, row, TAB_LEFT, var_get_name (var)); tab_text (t, 3, row, TAB_LEFT, fmt_string); row++;