/*
 * translation of tojul
 * VMS-fortran compatible
 *
 * converts month, day, year to days after
 * January 0, 1945
 */

#include <stdio.h>


static int monthjday[12] = {
	0,31,59,90,120,151,181,212,243,273,304,334};

int tojul(int month, int day, int year) {
	int jday, year1;

	jday = monthjday[month-1] + (year-1945)*365 + (year-1945)/4 + day;
	if (month > 2 && (year % 4) == 0) jday++;
	return jday;
}


/*
 * converts from the # of days after Jan 0, 1945
 * day, month, year
 */

#define  YEARS4  (4*365+1)
#define  YEAR	 365
#define  FEB29	 (31+29)

void unjul(int julday, int *month, int *day, int *years) {

	int absday, year, i;

	absday = julday - 1;	/* absday=0 -> Jan 1, 1945 */

	year = 1945 + 4*(absday / YEARS4);
	/* year is now correct to within 3 years */
	absday = (absday % YEARS4);

	i = absday / YEAR;
	/* i is the year increment 0..3 */
	/* i can be for if dec 31 of a leap year ! */
	if (i == 4) i = 3;

	year += i;
	absday = absday - (YEAR*i) + 1;
	/* absday is # of day in the year starting from 1 */
	if ((year % 4) == 0 && absday == FEB29) {
		*month = 2;
		*day = 29;
	}
	else {
		if ((year % 4) == 0 && absday > FEB29) absday--;
		for (i=11; monthjday[i] >= absday; --i);
		*month = i+1;
		*day = absday - monthjday[i];
	}
	*years = year;
}