X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata-out.c;h=44ab511c3910cbd684cff0f215b8d15613c343fa;hb=fad826ff86720f76220b05e00dc7dfa46e418859;hp=c1f3ff8120feaa93c13844c4c280ed87babe4b1c;hpb=60d7d619ee7885ad065f178eb0cf1e5d432b1921;p=pspp-builds.git diff --git a/src/data-out.c b/src/data-out.c index c1f3ff81..44ab511c 100644 --- a/src/data-out.c +++ b/src/data-out.c @@ -18,15 +18,15 @@ 02111-1307, USA. */ #include -#include +#include "error.h" #include #include #include #include #include +#include "calendar.h" #include "error.h" #include "format.h" -#include "julcal/julcal.h" #include "magic.h" #include "misc.h" #include "misc.h" @@ -103,9 +103,11 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v) case FMT_A: assert (0); + abort (); case FMT_AHEX: assert (0); + abort (); case FMT_IB: ok = convert_IB (s, fp, number); @@ -159,6 +161,7 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v) default: assert (0); + abort (); } } else @@ -178,6 +181,7 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v) default: assert (0); + abort (); } } @@ -413,8 +417,8 @@ convert_E (char *dst, const struct fmt_spec *fp, double number) /* The C locale always uses a period `.' as a decimal point. Translate to comma if necessary. */ - if ((set_decimal == ',' && fp->type != FMT_DOT) - || (set_decimal == '.' && fp->type == FMT_DOT)) + if ((get_decimal() == ',' && fp->type != FMT_DOT) + || (get_decimal() == '.' && fp->type == FMT_DOT)) { char *cp = strchr (buf, '.'); if (cp) @@ -748,9 +752,13 @@ convert_date (char *dst, const struct fmt_spec *fp, double number) }; char buf[64] = {0}; + int ofs = number / 86400.; int month, day, year; - julian_to_calendar (number / 86400., &year, &month, &day); + if (ofs < 1) + return 0; + + calendar_offset_to_gregorian (ofs, &year, &month, &day); switch (fp->type) { case FMT_DATE: @@ -779,15 +787,13 @@ convert_date (char *dst, const struct fmt_spec *fp, double number) break; case FMT_JDATE: { - int yday = (number / 86400.) - calendar_to_julian (year, 1, 1) + 1; + int yday = calendar_offset_to_yday (ofs); - if (fp->w >= 7) - { - if (year4 (year)) - sprintf (buf, "%04d%03d", year, yday); - } - else - sprintf (buf, "%02d%03d", year % 100, yday); + if (fp->w < 7) + sprintf (buf, "%02d%03d", year % 100, yday); + else if (year4 (year)) + sprintf (buf, "%04d%03d", year, yday); + else break; } case FMT_QYR: @@ -804,7 +810,7 @@ convert_date (char *dst, const struct fmt_spec *fp, double number) break; case FMT_WKYR: { - int yday = (number / 86400.) - calendar_to_julian (year, 1, 1) + 1; + int yday = calendar_offset_to_yday (ofs); if (fp->w >= 10) sprintf (buf, "%02d WK% 04d", (yday - 1) / 7 + 1, year); @@ -1026,7 +1032,7 @@ insert_commas (char *dst, const char *src, const struct fmt_spec *fp) if (i % 3 == 0 && n_digits > i && n_items > n_reserved) { n_items--; - *dst++ = fp->type == FMT_COMMA ? set_grouping : set_decimal; + *dst++ = fp->type == FMT_COMMA ? get_grouping() : get_decimal(); } *dst++ = *sp++; } @@ -1052,7 +1058,7 @@ year4 (int year) static int try_CCx (char *dst, const struct fmt_spec *fp, double number) { - struct set_cust_currency *cc = &set_cc[fp->type - FMT_CCA]; + const struct set_cust_currency *cc = get_cc(fp->type - FMT_CCA); struct fmt_spec f; @@ -1062,7 +1068,7 @@ try_CCx (char *dst, const struct fmt_spec *fp, double number) /* Determine length available, decimal character for number proper. */ - f.type = cc->decimal == set_decimal ? FMT_COMMA : FMT_DOT; + f.type = cc->decimal == get_decimal() ? FMT_COMMA : FMT_DOT; f.w = fp->w - strlen (cc->prefix) - strlen (cc->suffix); if (number < 0) f.w -= strlen (cc->neg_prefix) + strlen (cc->neg_suffix) - 1; @@ -1297,8 +1303,8 @@ try_F (char *dst, const struct fmt_spec *fp, double number) if (n == n_int + n_dec) { /* Convert periods `.' to commas `,' for our foreign friends. */ - if ((set_decimal == ',' && fp->type != FMT_DOT) - || (set_decimal == '.' && fp->type == FMT_DOT)) + if ((get_decimal() == ',' && fp->type != FMT_DOT) + || (get_decimal() == '.' && fp->type == FMT_DOT)) { cp = strchr (cp, '.'); if (cp)