X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fsys-file-info.c;h=ead50a6c6a0258f7951041658b86ae2a172ba270;hb=8d6bfdd2a100bf8166b3b0b3f006d46f3e7a59e9;hp=01881a995a01915a010414f6fca21701b299d319;hpb=fb0c1d5d3891f1e9e892335a17ecf39abb85b6a6;p=pspp diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index 01881a995a..ead50a6c6a 100644 --- a/src/language/dictionary/sys-file-info.c +++ b/src/language/dictionary/sys-file-info.c @@ -21,6 +21,7 @@ #include #include +#include "data/any-reader.h" #include "data/attributes.h" #include "data/casereader.h" #include "data/dataset.h" @@ -28,7 +29,6 @@ #include "data/file-handle-def.h" #include "data/format.h" #include "data/missing-values.h" -#include "data/sys-file-reader.h" #include "data/value-labels.h" #include "data/variable.h" #include "data/vector.h" @@ -56,7 +56,7 @@ #define _(msgid) gettext (msgid) /* Information to include in displaying a dictionary. */ -enum +enum { DF_DICT_INDEX = 1 << 0, DF_FORMATS = 1 << 1, @@ -76,19 +76,20 @@ static unsigned int dict_display_mask (const struct dictionary *); static struct table *describe_variable (const struct variable *v, int flags); -static void report_encodings (const struct file_handle *, - const struct sfm_reader *); +static void report_encodings (const struct file_handle *, struct pool *, + char **titles, bool *ids, + char **strings, size_t n_strings); /* SYSFILE INFO utility. */ int cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) { - struct sfm_reader *sfm_reader; + struct any_reader *any_reader; struct file_handle *h; struct dictionary *d; struct tab_table *t; struct casereader *reader; - struct sfm_read_info info; + struct any_read_info info; char *encoding; struct table *table; int r, i; @@ -130,21 +131,36 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) goto error; } - sfm_reader = sfm_open (h); - if (sfm_reader == NULL) - goto error; + any_reader = any_reader_open (h); + if (!any_reader) + { + free (encoding); + return CMD_FAILURE; + } if (encoding && !strcasecmp (encoding, "detect")) { - report_encodings (h, sfm_reader); + char **titles, **strings; + struct pool *pool; + size_t n_strings; + bool *ids; + + pool = pool_create (); + n_strings = any_reader_get_strings (any_reader, pool, + &titles, &ids, &strings); + any_reader_close (any_reader); + + report_encodings (h, pool, titles, ids, strings, n_strings); fh_unref (h); + pool_destroy (pool); + free (encoding); + return CMD_SUCCESS; } - reader = sfm_decode (sfm_reader, encoding, &d, &info); + reader = any_reader_decode (any_reader, encoding, &d, &info); if (!reader) goto error; - casereader_destroy (reader); t = tab_create (2, 11 + (info.product_ext != NULL)); @@ -198,7 +214,7 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) r++; tab_text (t, 0, r, TAB_LEFT, _("Type:")); - tab_text (t, 1, r++, TAB_LEFT, _("System File")); + tab_text (t, 1, r++, TAB_LEFT, gettext (info.klass->name)); tab_text (t, 0, r, TAB_LEFT, _("Weight:")); { @@ -210,8 +226,8 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) tab_text (t, 0, r, TAB_LEFT, _("Compression:")); tab_text_format (t, 1, r++, TAB_LEFT, - info.compression == SFM_COMP_NONE ? _("None") - : info.compression == SFM_COMP_SIMPLE ? "SAV" + info.compression == ANY_COMP_NONE ? _("None") + : info.compression == ANY_COMP_SIMPLE ? "SAV" : "ZSAV"); tab_text (t, 0, r, TAB_LEFT, _("Encoding:")); @@ -234,10 +250,11 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) table_item_submit (table_item_create (table, NULL /* XXX */, NULL)); - dict_destroy (d); + dict_unref (d); fh_unref (h); - sfm_read_info_destroy (&info); + free (encoding); + any_read_info_destroy (&info); return CMD_SUCCESS; error: @@ -290,19 +307,19 @@ cmd_display (struct lexer *lexer, struct dataset *ds) display_vectors (dataset_dict(ds), sorted); return CMD_SUCCESS; } - else if (lex_match_id (lexer, "SCRATCH")) + else if (lex_match_id (lexer, "SCRATCH")) { dict_get_vars (dataset_dict (ds), &vl, &n, DC_ORDINARY); flags = 0; } - else + else { - struct subcommand + struct subcommand { const char *name; int flags; }; - static const struct subcommand subcommands[] = + static const struct subcommand subcommands[] = { {"@ATTRIBUTES", DF_ATTRIBUTES | DF_AT_ATTRIBUTES}, {"ATTRIBUTES", DF_ATTRIBUTES}, @@ -342,7 +359,7 @@ cmd_display (struct lexer *lexer, struct dataset *ds) dict_get_vars (dict, &vl, &n, 0); } - if (n > 0) + if (n > 0) { sort (vl, n, sizeof *vl, (sorted @@ -421,7 +438,7 @@ display_variables (const struct variable **vl, size_t n, int flags) tab_headers (t, 0, 0, 1, 0); tab_hline (t, TAL_2, 0, nc - 1, 1); tab_text (t, 0, 0, TAB_LEFT | TAT_TITLE, _("Variable")); - if (flags & ~DF_DICT_INDEX) + if (flags & ~DF_DICT_INDEX) tab_text (t, 1, 0, TAB_LEFT | TAT_TITLE, (flags & ~(DF_DICT_INDEX | DF_VARIABLE_LABELS) ? _("Description") : _("Label"))); @@ -437,21 +454,21 @@ display_variables (const struct variable **vl, size_t n, int flags) } static bool -is_at_name (const char *name) +is_at_name (const char *name) { return name[0] == '@' || (name[0] == '$' && name[1] == '@'); } static size_t -count_attributes (const struct attrset *set, int flags) +count_attributes (const struct attrset *set, int flags) { struct attrset_iterator i; struct attribute *attr; size_t n_attrs; - + n_attrs = 0; for (attr = attrset_first (set, &i); attr != NULL; - attr = attrset_next (set, &i)) + attr = attrset_next (set, &i)) if (flags & DF_AT_ATTRIBUTES || !is_at_name (attribute_get_name (attr))) n_attrs += attribute_get_n_values (attr); return n_attrs; @@ -502,7 +519,7 @@ describe_attributes (const struct attrset *set, int flags) } static void -display_data_file_attributes (struct attrset *set, int flags) +display_data_file_attributes (struct attrset *set, int flags) { if (count_attributes (set, flags)) table_item_submit (table_item_create (describe_attributes (set, flags), @@ -559,7 +576,7 @@ describe_variable_details (const struct variable *v, int flags) } /* Print/write format, or print and write formats. */ - if (flags & DF_FORMATS) + if (flags & DF_FORMATS) { const struct fmt_spec *print = var_get_print_format (v); const struct fmt_spec *write = var_get_write_format (v); @@ -941,21 +958,15 @@ equal_suffix (const struct encoding *encodings, size_t n_encodings, } static void -report_encodings (const struct file_handle *h, const struct sfm_reader *r) +report_encodings (const struct file_handle *h, struct pool *pool, + char **titles, bool *ids, char **strings, size_t n_strings) { - char **titles; - char **strings; - bool *ids; struct encoding encodings[N_ENCODING_NAMES]; - size_t n_encodings, n_strings, n_unique_strings; + size_t n_encodings, n_unique_strings; size_t i, j; struct tab_table *t; - struct pool *pool; size_t row; - pool = pool_create (); - n_strings = sfm_get_strings (r, pool, &titles, &ids, &strings); - n_encodings = 0; for (i = 0; i < N_ENCODING_NAMES; i++) { @@ -990,7 +1001,6 @@ report_encodings (const struct file_handle *h, const struct sfm_reader *r) if (!n_encodings) { msg (SW, _("No valid encodings found.")); - pool_destroy (pool); return; } @@ -1026,10 +1036,7 @@ report_encodings (const struct file_handle *h, const struct sfm_reader *r) if (!all_equal (encodings, n_encodings, i)) n_unique_strings++; if (!n_unique_strings) - { - pool_destroy (pool); - return; - } + return; t = tab_create (3, (n_encodings * n_unique_strings) + 1); tab_title (t, _("%s encoded text strings."), fh_get_name (h)); @@ -1078,8 +1085,6 @@ report_encodings (const struct file_handle *h, const struct sfm_reader *r) } } tab_submit (t); - - pool_destroy (pool); } static unsigned int