#include "slalib.h"
#include "slamac.h"
void slaDjcl ( double djm, int *iy, int *im, int *id, double *fd, int *j)
/*
**  - - - - - - - -
**   s l a D j c l
**  - - - - - - - -
**
**  Modified Julian Date to Gregorian year, month, day,
**  and fraction of a day.
**
**  Given:
**     djm      double     Modified Julian Date (JD-2400000.5)
**
**  Returned:
**     *iy      int        year
**     *im      int        month
**     *id      int        day
**     *fd      double     fraction of day
**     *j       int        status:
**                      -1 = unacceptable date (before 4701BC March 1)
**
**  The algorithm is derived from that of Hatcher 1984 (QJRAS 25, 53-55).
**
**  Defined in slamac.h:  dmod
**
**  Last revision:   12 March 1998
**
**  Copyright P.T.Wallace.  All rights reserved.
*/
{
  double f, d;
  long jd, n4, nd10;

/* Check if date is acceptable */
   if ( ( djm <= -2395520.0 ) || ( djm >= 1e9 ) ) {
      *j = -1;
      return;
   } else {
      *j = 0;

   /* Separate day and fraction */
      f = dmod ( djm, 1.0 );
      if ( f < 0.0 ) f += 1.0;
      d = djm - f;
      d = dnint ( d );

   /* Express day in Gregorian calendar */
      jd = (long) dnint ( d ) + 2400001;
      n4 = 4L*(jd+((6L*((4L*jd-17918L)/146097L))/4L+1L)/2L-37L);
      nd10 = 10L*(((n4-237L)%1461L)/4L)+5L;
      *iy = (int) (n4/1461L-4712L);
      *im = (int) (((nd10/306L+2L)%12L)+1L);
      *id = (int) ((nd10%306L)/10L+1L);
      *fd = f;
      *j = 0;
   }
}
