#include #include #include "date.h" char *month_str (int month); void init_date_1 (DATE_T *date) /* initialization function */ { date -> day = 1; date -> month = 1; date -> year = 1; } void init_date (DATE_T *date, int d, int m, int y) /* initialization function */ { date -> day = d; date -> month = m; date -> year = y; } int date_equal (DATE_T date1, DATE_T date2) /* compares two dates and returns 1 if they're equal */ { if (date1.day == date2.day && date1.month == date2.month && date1.year == date2.year) return 1; else return 0; } int date_less_than (DATE_T date1, DATE_T date2) /* compares two dates and returns 1 if date1 is less than date2 */ { if (date1.year < date2.year) return 1; else if (date1.year == date2.year) { if (date1.month < date2.month) return 1; else if (date1.month == date2.month) if (date1.day < date2.day) return 1; } return 0; } void format_date (DATE_T date, char *str) /* formats a date into a "month day, year" format (e.g. March 2, 2000 */ { sprintf (str, "%s %d, %d", month_str (date.month), date.day, date.year); } static int leap_year (int year) /* returns true if year is a leap year */ { int result = 0; if (year % 400 == 0) result = 1; else if (year % 100 == 0) result = 0; else if (year % 4 == 0) result = 1; else result = 0; return result; } void next_day (DATE_T *date) /* increments the current date by one day */ { int is_leap = 0; date -> day += 1; is_leap = leap_year (date -> month); /* month rollover */ if (date -> day > month_length (date -> month, is_leap)) { date -> day = 1; date -> month += 1; } /* year rollover */ if (date -> month > 12) { date -> month = 1; date -> year +=1; } } static int month_length (int month, int leap) /* returns the number of days in month */ { int result; if (month == 9 || month == 4 || month == 6 || month == 11) { result = 30; } else if (month == 2) { if (leap) result = 29; else result = 28; } else result = 31; return result; } static char *month_str (month) /* returns string name corresponding to month number */ { switch (month) { case (1) : return "January"; case (2) : return "February"; case (3) : return "March"; case (4) : return "April"; case (5) : return "May"; case (6) : return "June"; case (7) : return "July"; case (8) : return "August"; case (9) : return "September"; case (10) : return "October"; case (11) : return "November"; case (12) : return "December"; } return "unknown"; }