
	/* print out the difference in days between two dates, given in
	   format 
	                      DD/MM/YYYY
	 */

#include <stdio.h>


static int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

main(argc, argv)
int argc;
char *argv[];
{
	int d, m, y, d1, d2, diff;

	if (argc != 3) {
		fprintf(stderr, "usage: daydiff DD/MM/YYYY DD/MM/YYYY\n");
		exit(1);
	}

	if ((read_date(argv[1], &d, &m, &y)) < 0) {
		fprintf("daydiff: invalid argument %s\n", argv[1]);
		exit(1);
	}
	d1 = since_1950(d, m, y);
	if ((read_date(argv[2], &d, &m, &y)) < 0) {
		fprintf("daydiff: invalid argument %s\n", argv[2]);
		exit(1);
	}
	d2 = since_1950(d, m, y);
	diff = d1 - d2;
	if (diff < 0)
		diff = 0 - diff;

	printf("%d\n", diff);
	exit(0);
}


	/* translate the string of form "DD/MM/YYYY" into numerical values for
	   the day, month and year. returns -1 if there's a problem, or 0
	   if all went well. */ 

int 
read_date(str, day, month, year)
char *str;
int *day, *month, *year;
{
	if (sscanf(str, "%d/%d/%d", day, month, year) != 3) 
		return(-1);
	return(0);
}

	/* return the number of days between the given date and Jan 0, 1950 */

int 
since_1950(day, month, year)
int day, month, year;
{
	int i, sum;

	sum = 0;
	for (i = 1950; i < year; i++) {
		sum += 365;
		if ((i % 4 == 0) && (i % 400 != 0))
			sum++;
	}
	for (i = 1; i < month; i++) {
		sum += days[i - 1];
		if ((i == 2) && (year % 4 == 0) && (year % 400 != 0))
			sum++;
	}
	sum += day;
	return(sum);
}

