Rewrite expression code.
[pspp-builds.git] / src / data-out.c
index de9bfad31a42afb2cd96294ee2edbdcce65848e8..44ab511c3910cbd684cff0f215b8d15613c343fa 100644 (file)
@@ -24,9 +24,9 @@
 #include <float.h>
 #include <stdlib.h>
 #include <time.h>
+#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 ();
         }
     }
 
@@ -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);