home *** CD-ROM | disk | FTP | other *** search
- /* *** jtog.c *** */
- /* */
- /* IBM - PC microsoft "C" */
- /* */
- /* function to convert a julian date (1 = 1st day AD) into a */
- /* gregorian date in the format mm/dd/yy. Returns a 0 if successful */
- /* or a -1 if not. */
- /* */
- /* WARNING - if outdate is not dimensioned at least 9 characters a */
- /* memory overwrite will occure. */
- /* */
- /* Written by L. Cuthbertson, March 1984 */
- /* */
- /*********************************************************************/
- /* */
-
- #define CENTRY 19
- #define TRUE 1
- #define FALSE 0
-
- int jtog(julian,outdate)
- char outdate[];
- register long julian;
- {
- static int monthd[] = {0,31,59,90,120,151,181,212,243,273,304,334};
- int centry,leap,i,iyr,imo,iday;
- static long cdays = 36524, ydays = 365;
-
- /* reduce julian from 1st day AD to 1st day of CENTRY */
- julian -= CENTRY*cdays + CENTRY/4;
-
- /* determine year */
- iyr = julian/ydays;
- if ((julian - (iyr*ydays + iyr/4)) < 0)
- iyr -= 1;
- if (iyr < 0)
- return(-1);
-
- /* determine if this is a leap year or not */
- if (iyr%4 == 0 && iyr != 0 || CENTRY%4 == 0)
- leap = TRUE;
- else
- leap = FALSE;
-
- /* determine month */
- julian = julian - (iyr*ydays + iyr/4);
- if (leap) julian += 1;
- for (imo=12;imo>0;imo--) {
- i=0;
- if ((leap) && (imo > 2)) i = -1;
- if ((julian - monthd[imo-1] + i) > 0) break;
- }
- if (imo == 0) imo = 1;
-
- /* determine day */
- iday = julian - monthd[imo-1] + i;
- if (iday == 0) {
- iyr -= 1;
- if (iyr < 0) return(-1);
- imo = 12;
- iday = 31;
- }
-
- /* transfer into output string */
- if (imo > 9)
- outdate[0] = '1';
- else
- outdate[0] = '0';
- outdate[1] = (char)(imo%10 + '0');
- outdate[2] = '/';
-
- if (iday > 9)
- outdate[3] = (char)(iday/10 + '0');
- else
- outdate[3] = '0';
- outdate[4] = (char)(iday%10 + '0');
- outdate[5] = '/';
-
- if (iyr > 9)
- outdate[6] = (char)(iyr/10 + '0');
- else
- outdate[6] = '0';
- outdate[7] = (char)(iyr%10 + '0');
- outdate[8] = '\0';
-
- /* done */
- return(0);
- }