/* Test program to feed year transition times to week number programs. * * Written by A.D.S.Benham, June 1998 * */ #include #include #include #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 \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); }