X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fsys-file-info.c;h=ed2f5d07fa5c0194a6fef382d09637ff10ddd646;hb=5c3291dc396b795696e94f47780308fd7ace6fc4;hp=d6279159a6587e8cf2d8c82524e52581c50ba979;hpb=c3ac5a8af9c449072c7e872ca70a78c1755ae309;p=pspp-builds.git diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index d6279159..ed2f5d07 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; @@ -108,7 +108,7 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) } casereader_destroy (reader); - t = tab_create (2, 10, 0); + t = tab_create (2, 11, 0); tab_vline (t, TAL_GAP, 1, 0, 8); tab_text (t, 0, 0, TAB_LEFT, _("File:")); tab_text (t, 1, 0, TAB_LEFT, fh_get_file_name (h)); @@ -153,11 +153,18 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) tab_text (t, 0, 9, TAB_LEFT, _("Mode:")); tab_text (t, 1, 9, TAB_LEFT | TAT_PRINTF, _("Compression %s."), info.compressed ? _("on") : _("off")); - tab_dim (t, tab_natural_dimensions); + + + 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_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")); @@ -337,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; @@ -390,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++) @@ -480,7 +487,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); } @@ -606,11 +613,13 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, else { *cp++ = '"'; - memcpy (cp, value.s, var_get_width (v)); + memcpy (cp, value_str (&value, var_get_width (v)), + var_get_width (v)); cp += var_get_width (v); *cp++ = '"'; *cp = '\0'; } + value_destroy (&value, var_get_width (v)); } tab_joint_text (t, 1, r, 2, r, TAB_LEFT, buf); @@ -621,9 +630,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")); @@ -632,23 +642,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); } @@ -700,7 +714,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);