
/*	days() is hereby placed in the public domain
	Alan Coates 17 JUN 1984

	The function accepts a 6 digit ASCII argument ddmmyy
	and returns a (long) number of days from 1.1.1900,
	corrected for leap years up to 31.12.2099

 */

#include "local.h"	/* from Thomas Plum, or use "libc.h" */


long days(date)
char date[];
{
int dd,mm,dmax;
long daytot,yy;
char *s;
	dd = mm = yy = 0;
	for(s = date;s < date+2 && isdigit(*s); )
		dd = dd*10 + *(s++) -48;
	for(s = date + 2;s < date+4 && isdigit(*s); )
		mm = mm*10 + *(s++) -48;
	for(s = date + 4 ;s < date+ 6 && isdigit(*s); )
		yy = yy*10 + *(s++) -48;
	daytot = dd;
	/*	add months, correct for time of year	*/
	daytot += 30*(mm - 1);
	switch (mm)
			{

		case 2:
			if (!((yy-4)%4))
				dmax = 29;
			else
				dmax = 28;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			dmax = 30;
			break;
		default:
			dmax = 31;
			break;
			}
	if (dd <1 || dd > dmax)
		remark("bad day  ",dd);
	switch (mm)
			{
		case 1:
		case 4:
		case 5:
			daytot += 0; /*	no correction	*/
			break;
		case 3:
			daytot -= 1;
			break;
		case 2:
		case 6:
		case 7:
			daytot += 1;
			break;
		case 8:
			daytot += 2;
			break;
		case 9:
		case 10:
			daytot += 3;
			break;
		case 11:
		case 12:
			daytot += 4;
			break;
		default:
			remark("Bad month",mm);
			break;
			}
	/*	add for completed years	*/
		daytot += 365*yy;
	/*	correct within a leap year iff after Feb 29	*/
		if(mm > 2 && yy%4 == 0 && yy > 0)
			daytot += 1;
	/*	correct for elapsed leap years	*/
		daytot += (yy-1)/4;
	return(daytot);
}
remark(s1,x)
	char s1[] ;
	int x;
	{
	printf("%s   %d\n",s1,x);
	return;
	}


