X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fprint.c;h=c0fc3d84f115bfbeebcb761ad880ab2ab16b1f33;hb=e609c7d767ffd600fd844327b292590259cbb0de;hp=5ee7fdd36998b12a0f46e7411255691da0d3117c;hpb=464a7a97da808da1d8a608e9254dfaad30c9de72;p=pspp diff --git a/src/language/data-io/print.c b/src/language/data-io/print.c index 5ee7fdd369..c0fc3d84f1 100644 --- a/src/language/data-io/print.c +++ b/src/language/data-io/print.c @@ -40,9 +40,10 @@ #include "libpspp/misc.h" #include "libpspp/pool.h" #include "libpspp/u8-line.h" +#include "output/driver.h" #include "output/pivot-table.h" #include "output/table.h" -#include "output/text-item.h" +#include "output/output-item.h" #include "gl/xalloc.h" @@ -174,7 +175,7 @@ internal_cmd_print (struct lexer *lexer, struct dataset *ds, { lex_match (lexer, T_EQUALS); lex_match (lexer, T_LPAREN); - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "RECORDS", 0, INT_MAX)) goto error; trns->record_cnt = lex_integer (lexer); lex_get (lexer); @@ -450,7 +451,7 @@ dump_table (struct print_trns *trns) pivot_value_new_integer (spec->record)); int last_column = spec->first_column + spec->format.w - 1; pivot_table_put2 (table, 1, row, pivot_value_new_user_text_nocopy ( - xasprintf ("%3d-%3d", + xasprintf ("%d-%d", spec->first_column, last_column))); char fmt_string[FMT_STRING_LEN_MAX + 1]; @@ -504,7 +505,7 @@ print_text_trns_proc (void *trns_, struct ccase **c, char *s; s = data_out (input, var_get_encoding (spec->var), - &spec->format); + &spec->format, settings_get_fmt_settings ()); len = strlen (s); width = u8_width (CHAR_CAST (const uint8_t *, s), len, UTF8); x1 = x0 + width; @@ -555,14 +556,14 @@ print_text_flush_records (struct print_trns *trns, struct u8_line *line, { *eject = false; if (trns->writer == NULL) - text_item_submit (text_item_create (TEXT_ITEM_EJECT_PAGE, "")); + output_item_submit (page_break_item_create ()); else leader = '1'; } *u8_line_reserve (line, 0, 1, 1) = leader; if (trns->writer == NULL) - table_output_text (TAB_FIX, ds_cstr (&line->s) + 1); + output_log ("%s", ds_cstr (&line->s) + 1); else { size_t len = ds_length (&line->s); @@ -574,14 +575,7 @@ print_text_flush_records (struct print_trns *trns, struct u8_line *line, len--; } - if (is_encoding_utf8 (trns->encoding)) - dfm_put_record (trns->writer, s, len); - else - { - char *recoded = recode_string (trns->encoding, UTF8, s, len); - dfm_put_record (trns->writer, recoded, strlen (recoded)); - free (recoded); - } + dfm_put_record_utf8 (trns->writer, s, len); } } } @@ -616,7 +610,8 @@ print_binary_trns_proc (void *trns_, struct ccase **c, const union value *input = case_data (*c, spec->var); if (!spec->sysmis_as_spaces || input->f != SYSMIS) data_out_recode (input, var_get_encoding (spec->var), - &spec->format, &line, trns->encoding); + &spec->format, settings_get_fmt_settings (), + &line, trns->encoding); else ds_put_byte_multiple (&line, encoded_space, spec->format.w); if (spec->add_space)