X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fdata%2Fdata-out.c;h=26abc7cc112a9897f1ebf4b928a429000ed67b5a;hb=09f992ebd556113e28cdf0829459121e3d2ec865;hp=335f6d86523e1892fecf2bc8cd88169d6594dbcd;hpb=f5c108becd49d78f4898cab11352291f5689d24e;p=pspp diff --git a/src/data/data-out.c b/src/data/data-out.c index 335f6d8652..26abc7cc11 100644 --- a/src/data/data-out.c +++ b/src/data/data-out.c @@ -1,20 +1,18 @@ -/* PSPP - computes sample statistics. +/* PSPP - a program for statistical analysis. Copyright (C) 1997-9, 2000, 2006 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 the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ + along with this program. If not, see . */ #include @@ -26,20 +24,17 @@ #include #include #include -#include -#include "calendar.h" -#include "format.h" -#include "settings.h" -#include "value.h" +#include +#include +#include +#include #include #include #include -#include #include #include -#include #include #include "minmax.h" @@ -96,11 +91,12 @@ 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. No null terminator is appended to the - buffer. */ + specification FORMAT. The output is recoded from native form + into the given legacy character ENCODING. No null terminator + is appended to the buffer. */ void -data_out (const union value *input, const struct fmt_spec *format, - char *output) +data_out_legacy (const union value *input, enum legacy_encoding encoding, + const struct fmt_spec *format, char *output) { static data_out_converter_func *const converters[FMT_NUMBER_OF_FORMATS] = { @@ -111,6 +107,17 @@ data_out (const union value *input, const struct fmt_spec *format, assert (fmt_check_output (format)); converters[format->type] (input, format, output); + if (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. */ +void +data_out (const union value *value, const struct fmt_spec *format, + char *output) +{ + return data_out_legacy (value, LEGACY_NATIVE, format, output); } /* Returns the current output integer format. */ @@ -153,7 +160,7 @@ output_number (const union value *input, const struct fmt_spec *format, if (number == SYSMIS) output_missing (format, output); - else if (!gsl_finite (number)) + else if (!isfinite (number)) output_infinite (number, format, output); else { @@ -713,16 +720,6 @@ output_scientific (double number, const struct fmt_spec *format, return true; } -#ifndef HAVE_ROUND -/* Return X rounded to the nearest integer, - rounding ties away from zero. */ -static double -round (double x) -{ - return x >= 0.0 ? floor (x + .5) : ceil (x - .5); -} -#endif /* !HAVE_ROUND */ - /* Returns true if the magnitude represented by R should be rounded up when chopped off at DECIMALS decimal places, false if it should be rounded down. */ @@ -951,7 +948,7 @@ power256 (int x) static void output_infinite (double number, const struct fmt_spec *format, char *output) { - assert (!gsl_finite (number)); + assert (!isfinite (number)); if (format->w >= 3) {