/* Test program to feed year transition times to week number programs.
 *
 * Written by A.D.S.Benham, June 1998
 *
 */

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define SECS_IN_DAY 24*60*60L
#define SECS_EITHER_SIDE 14* SECS_IN_DAY

int isleap(int);
void yearletter(int,time_t*);

int main(int argc, char **argv)
{
	int years[]={1989,1995,1984,1990,2001,1996,1991,1985,
	  1980,1997,1986,1992,1998,1981,1976,1993,1982,1988,1994,1977,2000,-1};
	int year;
	int counter=0;
	int w,y;
	time_t t,lo,hi;
	char *ct;
	char buffer[256];

	if (argc != 2) {
		fprintf(stderr,"Syntax: %s <program name>\n",argv[0]);
		return 1;
	}

	while ((year=years[counter++]) != -1) {
		printf("%d",year-1);
		yearletter(year-1,&t);

		printf(" -> %d",year);
		yearletter(year,&t);

		printf("\n");
		fflush(stdout);

		lo = t - SECS_EITHER_SIDE;
		hi = t + SECS_EITHER_SIDE;

		for (t=lo; t <= hi; t += SECS_IN_DAY) {

			ct=ctime(&t);
			ct[24]=0;
			printf("%s = ",ct);
			fflush(stdout);
			sprintf(buffer,"%s %ld",argv[1],t);
			system(buffer);
			fflush(stdout);
		}
		printf("-----------------------\n");
		fflush(stdout);
	}
	return 0;
}

int isleap(int year)
{
	if (year%100 == 0)
		if (year%400 == 0)
			return 1;
		else
			return 0;
	else
		if (year%4 == 0)
			return 1;
		else
			return 0;
}


void yearletter(int year, time_t *t)
{
	char types[]={'C','A','M','K','I','G','E'};
	char letter[3];
	struct tm timeb;
	int x;

	timeb.tm_year=year-1900;
	timeb.tm_mon=0;
	timeb.tm_mday=1;
	timeb.tm_hour=12;
	timeb.tm_min=0;
	timeb.tm_sec=0;
	timeb.tm_isdst=-1;

	*t=mktime(&timeb);

	x=(timeb.tm_yday+1-timeb.tm_wday)%7;
	if (x<0) x+=7;
	letter[0]=types[x];
	if (isleap(year)) {
		letter[0] += 1;
		letter[1]='*';
		letter[2]=0;
	} else
		letter[1]=0;

	printf("(%s)",letter);
}
