home *** CD-ROM | disk | FTP | other *** search
- /* *** jtoj.c *** */
- /* */
- /* IBM - PC microsoft "C" */
- /* */
- /* integer function that returns the julian date (1 = 1st day AD) */
- /* associated with the julian date in the form (yddd). Returns a -1 */
- /* if an error occured. */
- /* */
- /* Written by L. Cuthbertson, March 1983. */
- /* */
- /*********************************************************************/
-
- #define CENTRY 19 /* current century */
- #define DECADE 80 /* current decade */
-
- long jtoj(jin)
- char jin[];
- {
- static int monthd[] = {31,28,31,30,31,30,31,31,30,31,30,31};
- int i;
- int leapd,iyr,idays;
- static long cdays = 36524, ydays = 365;
-
- /* parse input julian date into its pieces */
- sscanf(jin,"%1d%3d",iyr,idays);
-
- /* calculate year */
- iyr += DECADE;
- if (iyr < 0 || iyr > 99) return(-1);
-
- /* check for invalid number of days */
- if (idays < 1)
- return(-1);
-
- if ((iyr%4 == 0) && ((iyr != 0) || (CENTRY%4 == 0))) {
- if (idays > (ydays+1))
- return(-1);
- } else {
- if (idays > ydays)
- return(-1);
- }
-
- /* determine the number of "extra" leap years caused by the */
- /* %400 criteria and add to it the number of leap years that */
- /* has occured up to the prior year of current century. */
- leapd = CENTRY/4;
- if (iyr != 0) leapd += (iyr-1)/4;
-
- /* calculate julian date */
- return (CENTRY*cdays + iyr*ydays + leapd + idays);
- }