text: #include "sofa.h"
  
  int iauJd2cal(double dj1, double dj2,
                int *iy, int *im, int *id, double *fd)
  /*
  **  - - - - - - - - - -
  **   i a u J d 2 c a l
  **  - - - - - - - - - -
  **
  **  Julian Date to Gregorian year, month, day, and fraction of a day.
  **
  **  This function is part of the International Astronomical Union's
  **  SOFA (Standards Of Fundamental Astronomy) software collection.
  **
  **  Status:  support function.
  **
  **  Given:
  **     dj1,dj2   double   Julian Date (Notes 1, 2)
  **
  **  Returned (arguments):
  **     iy        int      year
  **     im        int      month
  **     id        int      day
  **     fd        double   fraction of day
  **
  **  Returned (function value):
  **               int      status:
  **                           0 = OK
  **                          -1 = unacceptable date (Note 3)
  **
  **  Notes:
  **
  **  1) The earliest valid date is -68569.5 (-4900 March 1).  The
  **     largest value accepted is 1e9.
  **
  **  2) The Julian Date is apportioned in any convenient way between
  **     the arguments dj1 and dj2.  For example, JD=2450123.7 could
  **     be expressed in any of these ways, among others:
  **
  **            dj1             dj2
  **
  **         2450123.7           0.0       (JD method)
  **         2451545.0       -1421.3       (J2000 method)
  **         2400000.5       50123.2       (MJD method)
  **         2450123.5           0.2       (date & time method)
  **
  **  3) In early eras the conversion is from the "proleptic Gregorian
  **     calendar";  no account is taken of the date(s) of adoption of
  **     the Gregorian calendar, nor is the AD/BC numbering convention
  **     observed.
  **
  **  Reference:
  **
  **     Explanatory Supplement to the Astronomical Almanac,
  **     P. Kenneth Seidelmann (ed), University Science Books (1992),
  **     Section 12.92 (p604).
  **
  **  This revision:  2013 August 7
  **
  **  SOFA release 2013-12-02
  **
  **  Copyright (C) 2013 IAU SOFA Board.  See notes at end.
  */
  {
  /* Minimum and maximum allowed JD */
     const double DJMIN = -68569.5;
     const double DJMAX = 1e9;
  
     long jd, l, n, i, k;
     double dj, d1, d2, f1, f2, f, d;
  
  
  /* Verify date is acceptable. */
     dj = dj1 + dj2;
     if (dj < DJMIN || dj > DJMAX) return -1;
  
  /* Copy the date, big then small, and re-align to midnight. */
     if (dj1 >= dj2) {
        d1 = dj1;
        d2 = dj2;
     } else {
        d1 = dj2;
        d2 = dj1;
     }
     d2 -= 0.5;
  
  /* Separate day and fraction. */
     f1 = fmod(d1, 1.0);
     f2 = fmod(d2, 1.0);
     f = fmod(f1 + f2, 1.0);
     if (f < 0.0) f += 1.0;
     d = floor(d1 - f1) + floor(d2 - f2) + floor(f1 + f2 - f);
     jd = (long) floor(d) + 1L;
  
  /* Express day in Gregorian calendar. */
     l = jd + 68569L;
     n = (4L * l) / 146097L;
     l -= (146097L * n + 3L) / 4L;
     i = (4000L * (l + 1L)) / 1461001L;
     l -= (1461L * i) / 4L - 31L;
     k = (80L * l) / 2447L;
     *id = (int) (l - (2447L * k) / 80L);
     l = k / 11L;
     *im = (int) (k + 2L - 12L * l);
     *iy = (int) (100L * (n - 49L) + i + l);
     *fd = f;
  
     return 0;
  
  /*----------------------------------------------------------------------
  **
  **  Copyright (C) 2013
  **  Standards Of Fundamental Astronomy Board
  **  of the International Astronomical Union.
  **
  **  =====================
  **  SOFA Software License
  **  =====================
  **
  **  NOTICE TO USER:
  **
  **  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
  **  CONDITIONS WHICH APPLY TO ITS USE.
  **
  **  1. The Software is owned by the IAU SOFA Board ("SOFA").
  **
  **  2. Permission is granted to anyone to use the SOFA software for any
  **     purpose, including commercial applications, free of charge and
  **     without payment of royalties, subject to the conditions and
  **     restrictions listed below.
  **
  **  3. You (the user) may copy and distribute SOFA source code to others,
  **     and use and adapt its code and algorithms in your own software,
  **     on a world-wide, royalty-free basis.  That portion of your
  **     distribution that does not consist of intact and unchanged copies
  **     of SOFA source code files is a "derived work" that must comply
  **     with the following requirements:
  **
  **     a) Your work shall be marked or carry a statement that it
  **        (i) uses routines and computations derived by you from
  **        software provided by SOFA under license to you; and
  **        (ii) does not itself constitute software provided by and/or
  **        endorsed by SOFA.
  **
  **     b) The source code of your derived work must contain descriptions
  **        of how the derived work is based upon, contains and/or differs
  **        from the original SOFA software.
  **
  **     c) The names of all routines in your derived work shall not
  **        include the prefix "iau" or "sofa" or trivial modifications
  **        thereof such as changes of case.
  **
  **     d) The origin of the SOFA components of your derived work must
  **        not be misrepresented;  you must not claim that you wrote the
  **        original software, nor file a patent application for SOFA
  **        software or algorithms embedded in the SOFA software.
  **
  **     e) These requirements must be reproduced intact in any source
  **        distribution and shall apply to anyone to whom you have
  **        granted a further right to modify the source code of your
  **        derived work.
  **
  **     Note that, as originally distributed, the SOFA software is
  **     intended to be a definitive implementation of the IAU standards,
  **     and consequently third-party modifications are discouraged.  All
  **     variations, no matter how minor, must be explicitly marked as
  **     such, as explained above.
  **
  **  4. You shall not cause the SOFA software to be brought into
  **     disrepute, either by misuse, or use for inappropriate tasks, or
  **     by inappropriate modification.
  **
  **  5. The SOFA software is provided "as is" and SOFA makes no warranty
  **     as to its use or performance.   SOFA does not and cannot warrant
  **     the performance or results which the user may obtain by using the
  **     SOFA software.  SOFA makes no warranties, express or implied, as
  **     to non-infringement of third party rights, merchantability, or
  **     fitness for any particular purpose.  In no event will SOFA be
  **     liable to the user for any consequential, incidental, or special
  **     damages, including any lost profits or lost savings, even if a
  **     SOFA representative has been advised of such damages, or for any
  **     claim by any third party.
  **
  **  6. The provision of any version of the SOFA software under the terms
  **     and conditions specified herein does not imply that future
  **     versions will also be made available under the same terms and
  **     conditions.
  *
  **  In any published work or commercial product which uses the SOFA
  **  software directly, acknowledgement (see www.iausofa.org) is
  **  appreciated.
  **
  **  Correspondence concerning SOFA software should be addressed as
  **  follows:
  **
  **      By email:  sofa@ukho.gov.uk
  **      By post:   IAU SOFA Center
  **                 HM Nautical Almanac Office
  **                 UK Hydrographic Office
  **                 Admiralty Way, Taunton
  **                 Somerset, TA1 2DN
  **                 United Kingdom
  **
  **--------------------------------------------------------------------*/
  }
  