/* CALENDAR.C */ /* PRINT MONTHLY CALENDAR */ #INCLUDE #DEFINE ÃÌÓ 147 #DEFINE ÖÅÒÔÌÉÎÅ 124 #DEFINE ÐÒÉÎÔÃÈÎ 5 /* PRINTER CONSTANTS BELOW */ #DEFINE ÆÆ 12 #DEFINE ÅØÐÁÎÄ 14 #DEFINE ÎÏÒÍÁÌ 15 MAIN () STATIC UNSIGNED MONTH, FULLYEAR; STATIC UNSIGNED CAL[7][6]; UNSIGNED YEAR, WKDAY, LASTDAY; INPUT (&MONTH,&FULLYEAR); YEAR = (FULLYEAR % 100); WKDAY = WEEKDAY (MONTH,1,YEAR); LASTDAY = NODAYS (MONTH,YEAR); MAKECAL (WKDAY,LASTDAY,CAL); PRINTCAL (MONTH,FULLYEAR,CAL); INPUT (MONTH,YEAR) UNSIGNED *MONTH, *YEAR; PUTCHAR (ÃÌÓ); PRINTF ("\N ÐRINT A ÍONTHLY ÃALENDAR\N\N"); *MONTH = *YEAR = 0; WHILE ((*MONTH < 1) (*MONTH > 12)) PRINTF (" ÅNTER THE ÍONTH ÎUMBER (1-12): "); SCANF ("%D",MONTH); PUTCHAR ('\N'); WHILE ((*YEAR < 1980) (*YEAR > 2079)) PRINTF (" ÅNTER THE ÙEAR (1980-2079): "); SCANF ("%D",YEAR); PUTCHAR ('\N'); MAKECAL (WKDAY,NUMDAYS,CAL) UNSIGNED WKDAY, NUMDAYS, CAL[][6]; UNSIGNED ROW, COL, STARTCOL; UNSIGNED DAYNUM = 1; STARTCOL = WKDAY; FOR (COL = 0; COL < STARTCOL; COL++) CAL[COL][0] = 0; FOR (ROW = 0; ROW < 6; ROW++) FOR (COL = STARTCOL; COL < 7; COL++) IF (DAYNUM <= NUMDAYS) CAL[COL][ROW] = DAYNUM++; ELSE CAL[COL][ROW] = 0; STARTCOL = 0; PRINTCAL (MONTH,YEAR,CAL) UNSIGNED MONTH,YEAR,CAL[][6]; CHAR *MONTHNAME (); CHAR *MONTHPTR; STATIC CHAR DAYSOFWK[] = " ÓUNDAY ÍONDAY ÔUESDAY ×EDNESDAY ÔHURSDAY ÆRIDAY ÓATURDAY"; CHAR HORZLINE[79]; UNSIGNED ROW, COL, COLDEPTH; OPEN (ÐÒÉÎÔÃÈÎ,4,7,""); FOR (COL = 0; COL < 78; COL++) HORZLINE[COL] = '-'; HORZLINE[78] = '\0'; MONTHPTR = MONTHNAME (MONTH); FPRINTF (ÐÒÉÎÔÃÈÎ,"\N\N\N\N\N\N"); FPRINTF (ÐÒÉÎÔÃÈÎ,"%C%S %U\N\N",ÅØÐÁÎÄ,MONTHPTR,YEAR); FPRINTF (ÐÒÉÎÔÃÈÎ,"%S\N",DAYSOFWK); FPRINTF (ÐÒÉÎÔÃÈÎ,"%S\N",HORZLINE); FOR (ROW = 0; ROW < 6; ROW++) IF ((ROW) && (CAL[0][ROW] == 0)) BREAK; FPRINTF (ÐÒÉÎÔÃÈÎ,"%C",ÖÅÒÔÌÉÎÅ); FOR (COL = 0; COL < 7; COL++) IF (CAL[COL][ROW]) FPRINTF (ÐÒÉÎÔÃÈÎ," %C%4U%C",ÅØÐÁÎÄ,CAL[COL][ROW],ÎÏÒÍÁÌ); FPRINTF (ÐÒÉÎÔÃÈÎ," %C",ÖÅÒÔÌÉÎÅ); ELSE FPRINTF (ÐÒÉÎÔÃÈÎ," %C",ÖÅÒÔÌÉÎÅ); FPRINTF (ÐÒÉÎÔÃÈÎ,"\N"); FOR (COLDEPTH = 0; COLDEPTH < 5; COLDEPTH++) FPRINTF (ÐÒÉÎÔÃÈÎ,"%C",ÖÅÒÔÌÉÎÅ); FOR (COL = 0; COL < 7; COL++) FPRINTF (ÐÒÉÎÔÃÈÎ," %C",ÖÅÒÔÌÉÎÅ); FPRINTF (ÐÒÉÎÔÃÈÎ,"\N"); FPRINTF (ÐÒÉÎÔÃÈÎ,"%S\N",HORZLINE); PUTC (ÆÆ,ÐÒÉÎÔÃÈÎ); CLOSE (ÐÒÉÎÔÃÈÎ); /* ==================================== * DAYNO.C * CALCULATE REFERENCE DAY NUMBER * ------------------------------------ * IN: MONTH, DAY, YEAR * OUT: REFERENCE NUMBER * (# DAYS PAST REFERENCE DATE) * ==================================== */ DAYNO (MONTH, DAY, YEAR) INT MONTH, DAY, YEAR; INT REFYEAR = 80; /* REFERENCE DAY IS 01/01/80 */ INT DAYS = 0; INT CURYEAR; UNSIGNED I; CURYEAR = YEAR; /* COUNT NUMBER OF DAYS IN WHOLE YEARS */ YEAR --; IF (YEAR < (REFYEAR - 1)) YEAR += 100; IF (REFYEAR <= YEAR) FOR (I = REFYEAR; I <= YEAR; I++) DAYS += 365; IF ((I % 4) == 0) DAYS ++; /* COUNT NUMBER OF DAYS IN WHOLE MONTHS */ MONTH --; IF (MONTH > 0) FOR (I = 1; I <= MONTH; I++) DAYS += NODAYS (I,CURYEAR); /* ADD NUMBER OF DAYS IN CURRENT MONTH */ DAYS += DAY; DAYS --; RETURN (DAYS); /* ==================================== * MONTHNAME.C * RETURN NAME OF MONTH * ------------------------------------ * IN: MONTH NUMBER (1-12) * OUT: POINTER TO NAME OF MONTH * ==================================== */ MONTHNAME (MONTHNO) UNSIGNED MONTHNO; STATIC CHAR *MONTHNMS[12] = "ÊÁÎÕÁÒÙ", "ÆÅÂÒÕÁÒÙ", "ÍÁÒÃÈ", "ÁÐÒÉÌ", "ÍÁÙ", "ÊÕÎÅ", "ÊÕÌÙ", "ÁÕÇÕÓÔ", "ÓÅÐÔÅÍÂÅÒ", "ÏÃÔÏÂÅÒ", "ÎÏÖÅÍÂÅÒ", "ÄÅÃÅÍÂÅÒ" ; RETURN (MONTHNMS[MONTHNO - 1]); /* ==================================== * NODAYS.C * CALCULATE NUMBER OF DAYS IN A MONTH * ------------------------------------ * IN: MONTH, YEAR * OUT: NUMBER OF DAYS IN THAT MONTH * ==================================== */ NODAYS (MONTH, YEAR) UNSIGNED MONTH, YEAR; STATIC UNSIGNED NODAYS[] = 31,28,31,30,31,30,31,31,30,31,30,31; UNSIGNED DAYS; DAYS = NODAYS[MONTH - 1]; IF ((MONTH == 2) && ((YEAR % 4) == 0)) DAYS++; RETURN (DAYS); /* ==================================== * WEEKDAY.C * CALCULATE DAY OF WEEK FOR DATE * ------------------------------------ * IN: MONTH, DAY, YEAR * OUT: DAY OF WEEK (0=ÓUN ... 6=ÓAT) * ==================================== */ WEEKDAY (MONTH, DAY, YEAR) UNSIGNED MONTH, DAY, YEAR; /* REFWKDAY IS THE WEEKDAY OF THE * REFERENCE DATE USED BY DAYNO - * THE REFERENCE DATE IS 01/01/80; * THE WEEKDAY IS 2 (ÔUESDAY) */ UNSIGNED REFWKDAY = 2; UNSIGNED WKDAY; WKDAY = DAYNO (MONTH, DAY, YEAR); WKDAY %= 7; WKDAY += REFWKDAY; IF (WKDAY > 6) WKDAY -= 7; RETURN (WKDAY);