X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdata-out.c;h=fa8d59e74ced3dd4df1c0977a5f25b6d70fe76c9;hb=9254d30d06a0565c89daccedd93a94c4c6086004;hp=cef445209a6ef874394f7798b47bafdd173b1317;hpb=a9afcdd223cc1c1b7889601e405cff0bd47300d7;p=pspp-builds.git diff --git a/src/data/data-out.c b/src/data/data-out.c index cef44520..fa8d59e7 100644 --- a/src/data/data-out.c +++ b/src/data/data-out.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 @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -84,13 +83,10 @@ static void output_binary_integer (uint64_t, int bytes, enum integer_format, char *); static void output_hex (const void *, size_t bytes, char *); -/* Converts the INPUT value into printable form in the exactly - FORMAT->W characters in OUTPUT according to format - specification FORMAT. The output is recoded from native form - into the given legacy character ENCODING. No null terminator - is appended to the buffer. */ +/* Same as data_out, and additionally recodes the output from + native form into the given legacy character ENCODING. */ void -data_out_legacy (const union value *input, enum legacy_encoding encoding, +data_out_legacy (const union value *input, const char *encoding, const struct fmt_spec *format, char *output) { static data_out_converter_func *const converters[FMT_NUMBER_OF_FORMATS] = @@ -102,17 +98,23 @@ data_out_legacy (const union value *input, enum legacy_encoding encoding, assert (fmt_check_output (format)); converters[format->type] (input, format, output); - if (encoding != LEGACY_NATIVE + if (0 != strcmp (encoding, LEGACY_NATIVE) && fmt_get_category (format->type) != FMT_CAT_BINARY) legacy_recode (LEGACY_NATIVE, output, encoding, output, format->w); } -/* Same as data_out_legacy with ENCODING set to LEGACY_NATIVE. */ +/* Converts the INPUT value into printable form in the exactly + FORMAT->W characters in OUTPUT according to format + specification FORMAT. No null terminator is appended to the + buffer. + + VALUE must be the correct width for FORMAT, that is, its + width must be fmt_var_width(FORMAT). */ void -data_out (const union value *value, const struct fmt_spec *format, +data_out (const union value *input, const struct fmt_spec *format, char *output) { - return data_out_legacy (value, LEGACY_NATIVE, format, output); + return data_out_legacy (input, LEGACY_NATIVE, format, output); } @@ -416,7 +418,7 @@ output_date (const union value *input, const struct fmt_spec *format, } } - buf_copy_lpad (output, format->w, tmp, p - tmp); + buf_copy_lpad (output, format->w, tmp, p - tmp, ' '); return; overflow: @@ -440,7 +442,7 @@ output_WKDAY (const union value *input, const struct fmt_spec *format, }; if (input->f >= 1 && input->f < 8) - buf_copy_str_rpad (output, format->w, weekdays[(int) input->f - 1]); + buf_copy_str_rpad (output, format->w, weekdays[(int) input->f - 1], ' '); else { if (input->f != SYSMIS) @@ -461,7 +463,7 @@ output_MONTH (const union value *input, const struct fmt_spec *format, }; if (input->f >= 1 && input->f < 13) - buf_copy_str_rpad (output, format->w, months[(int) input->f - 1]); + buf_copy_str_rpad (output, format->w, months[(int) input->f - 1], ' '); else { if (input->f != SYSMIS) @@ -475,7 +477,7 @@ static void output_A (const union value *input, const struct fmt_spec *format, char *output) { - memcpy (output, input->s, format->w); + memcpy (output, value_str (input, format->w), format->w); } /* Outputs AHEX format. */ @@ -483,7 +485,7 @@ static void output_AHEX (const union value *input, const struct fmt_spec *format, char *output) { - output_hex (input->s, format->w / 2, output); + output_hex (value_str (input, format->w), format->w / 2, output); } /* Decimal and scientific formatting. */ @@ -928,14 +930,14 @@ output_infinite (double number, const struct fmt_spec *format, char *output) { const char *s; - if (gsl_isnan (number)) + if (isnan (number)) s = "NaN"; - else if (gsl_isinf (number)) + else if (isinf (number)) s = number > 0 ? "+Infinity" : "-Infinity"; else s = "Unknown"; - buf_copy_str_lpad (output, format->w, s); + buf_copy_str_lpad (output, format->w, s, ' '); } else output_overflow (format, output);