/* date.h The BMS (DATE) type is the number of days since 12/31/69. The BMS (JULDAY) type is the number of days since ???? B.C. */ #ifndef MAXDATE #include /* some routines using this expect yy to be 2 digits, and some expect 4 */ struct mmddyy { short mm; short dd; short yy; mmddyy() {} mmddyy(short m, short d, short y) : mm(m),dd(d),yy(y) {} mmddyy(long d); long encode() const { long yr = mm < 100 ? 10000L : 1000000L; return mm * yr + dd * 100L + yy; } }; extern "C" { long stoJ(const char *); unsigned short stoD(const char *), sysD(); long julian(const mmddyy *); void julmdy(long,mmddyy *); void decode(mmddyy *,long); void tm_mask(const struct tm *,const char *,char *); void timemask(time_t,const char *,char *); } class String; String tm_mask(const struct tm *,const char *); inline mmddyy::mmddyy(long d) { decode(this,d); } class Date { unsigned short dayno; public: Date() { dayno = sysD(); } /* todays date */ operator unsigned short() const { return dayno; } Date(unsigned short d) { dayno = d; } Date(const char *s) { dayno = stoD(s); } Date(const mmddyy &d); Date(short mm,short dd,short yy) { dayno = Date(mmddyy(mm,dd,yy)); } Date(long d) { dayno = Date(mmddyy(d)); } char *fmt(char *buf,int size) const; mmddyy mdy() const; }; #define MAXDATE Date((unsigned short)~0) class Julday { long dayno; public: Julday() { dayno = julian(0); } Julday(long d) { dayno = d; } Julday(Date d) { dayno = d ? d + 2415385L : 0; } operator Date() const { return (unsigned short)(dayno ? dayno - 2415385L : 0); } Julday(const mmddyy &d) { dayno = julian(&d); } Julday(short mm,short dd,short yy) { *this = Julday(mmddyy(mm,dd,yy)); } Julday(const char *s) { dayno = stoJ(s); } Julday operator+(int j) const { return dayno + j; } Julday operator-(int j) const { return dayno - j; } long operator-(const Julday &j) const { return dayno - j.dayno; } operator long() const { return dayno; } mmddyy mdy() const { mmddyy mdy; julmdy(dayno,&mdy); return mdy; } operator mmddyy() const { mmddyy mdy; julmdy(dayno,&mdy); return mdy; } void mdy(struct tm &) const; String pic(const char *mask) const; }; #endif