/*fp880228*/ /*fp880409*/ /*fp910327*/ #include #include #include #include int tmp; int year; /* year */ int day; /* day */ int horm; /* hor monyh */ int verm; /* vert month */ int month; /* current month */ int daysm; /* days per month */ int days[126]; /* remember : 0..125 */ int daycnt; /* day counter */ int elcnt; /* element counter */ int hord; /* hor day */ int verd; /* vert day */ static char weekday[7][4] = {" su", " mo", " tu", " we", " th", " fr", " sa"}; static char yearmon[12][22] = {" january ", " february ", " march ", " april ", " may ", " june ", " july ", " august ", " september ", " october ", " november ", " december "}; void main(argc, argv) int argc; char *argv[]; { fprintf(stderr, "NFeRTARI calendar\nr.880409 v.01.01\n"); if (argc != 2 ) { fprintf(stderr, "Usage: calendar year\n" ); exit(1); } /* tmp = stcd_i(argv[1],&year); */ for(tmp=0; tmp 4 || year < 0 || year >= 2400 ) { fprintf(stderr, "0 <= year <= 2399\n" ); exit(1); } fprintf(stdout, " %d\n",year); if ( year <= 1582 ) tmp = 4+year+(year+3)/4; else tmp = 6+year+(year+3)/4-(year-1)/100+(year-1)/400; day = tmp%7; /* 1st day of year, 0 su, 1 mo, etc. */ for (verm=0; verm<=3; verm++) { for (horm=0; horm<=2; horm++) { month = horm+3*verm; switch(month) { case 0: daysm=31; /* january */ break; case 1: daysm=28; /* february */ if (year>1582) { if (year%4==0) daysm = 29; if (year%100==0) daysm = 28; if (year%400==0) daysm = 29; } else { if (year%4==0) daysm=29; } break; case 2: daysm=31; /* march */ break; case 3: daysm=30; /* may */ break; case 4: daysm=31; /* april */ break; case 5: daysm=30; /* june */ break; case 6: daysm=31; /* july */ break; case 7: daysm=31; /* august */ break; case 8: daysm=30; /* september */ break; case 9: daysm=31; /* october */ break; case 10: daysm=30; /* november */ break; case 11: daysm=31; /* december */ break; } daycnt = 0; for (elcnt=0; elcnt<42; elcnt++) { if (day>elcnt || daycnt>=daysm) days[42*horm+elcnt]=0; else { day++; day=day%7; if (year==1582 && month==9 && daycnt==4) daycnt=14; daycnt++; days[42*horm+elcnt]=daycnt; } } } for (horm=0; horm<=2; horm++) fprintf(stdout, yearmon[horm+verm*3]); fprintf(stdout, "\n"); for (verd=0; verd<=6; verd++) { for (horm=0; horm<=2; horm++) { fprintf(stdout, &weekday[verd][0]); for (hord=0; hord<=5; hord++ ) { if (days[42*horm+7*hord+verd]==0) fprintf(stdout, " "); else fprintf(stdout, "%3d",days[42*horm+7*hord+verd]); } } fprintf(stdout, "\n"); } fprintf(stdout, "\n"); } exit(0); }