Listing 1

/*
** dates.hpp -- header file for dates.cpp, a date object
*/

#define  MINMONTH    1       /* January */
#define  MAXMONTH    12      /* December */
#define  MINDAY      1
#define  MAXDAY      31
#define  MINWEEKDAY  0       /* Sunday */
#define  MAXWEEKDAY  6       /* Saturday */
#define  BADDATE     -1L
#define  MINYEAR     -4700L
#define  MAXYEAR     25000L
#define  MINDATE     4749L       /* 1 January 4700 BC */
#define  MAXDATE     10852487L   /* 31 December 25,000 */
#define  MAXDATESTRLEN   256     /* max length of date format string */

class DateObject {
  long Julian;          /* julian date */
  char *DateFormatPtr;      /* pointer to date format string */
  unsigned char Day;    /* 1 to 31 */
  unsigned char Month;      /* 1 to 12 */
  int Year;           /* negative years are BC */
  unsigned char DayOfWeek;    /* 0 to 6 */
   public:

  DateObject(void);
  DateObject(DateObject &OtherDate);
  DateObject(unsigned char InitDay, unsigned char InitMonth, int InitYear);
  DateObject(unsigned char InitDay, unsigned char InitMonth,
     int InitYear, const char *FormatStr);
      DateObject operator = (DateObject &d);
      DateObject operator - (long x);
      DateObject operator ++ (void);
      DateObject operator -- (void);
      DateObject operator += (long x);
      DateObject operator -= (long x);
      int operator == (DateObject &d) { return (Julian == d.Julian); }
      int operator != (DateObject &d) { return (Julian != d. Julian);}
      int operator > (DateObject &d) { return (Julian > d.Julian); }
      int operator < (DateObject &d) { return (Julian < d.Julian); }
      int operator >= (DateObject &d) { return (Julian >= d.Julian); }
      int operator <= (DateObject &d) { return (Julian <= d.Julian); }
  int ValidDate(void) { return (Julian != BADDATE); }
  unsigned char GetDay(void) { return (Day); }
  unsigned char GetMonth(void) { return (Month); }
  int GetYear(void) { return (Year); }
  unsigned char GetDayOfWeek(void) { return (DayOfWeek); }
  long GetJulian(void) { return (Julian); }
  const char *GetFormat(void);
  int ChangeDate(unsigned char NDay, unsigned char NMonth, int NYear);
  void ChangeFormat(const char *s);
  ~DateObject(void);
  friend DateObject operator + (DateObject &d, long x);
  friend DateObject operator + (long x, DateObject &d);
  friend long operator - (DateObject &d1, DateObject &d2)
     { return (d1.Julian - d2.Julian); };
  char *DateToString(void);
};

int ChangeDefaultDateFormat(const char *);