#include #include #include "date.h" using namespace std; const int date::subscript = ostream::xalloc(); const int date::length[12 + 1] = { 0, 31, //january, 28, //february, 31, //march, 30, //april, 31, //may, 30, //june, 31, //july, 31, //august, 30, //september, 31, //october, 30, //november, 31, //december }; const string french_month[12] = { "Vendemiare", "Brumaire", "Frumaire", "Nivoise", "Pluviose", "Ventose", "Germinal", "Floreal", "Priaral", "Messidore", "Thermidore", "Fructidore" }; date::date(int initial_month, int initial_day, int initial_year) { year = initial_year; month = initial_month; day = initial_day; } ostream& operator<<(ostream& ost, const date& d) { int d1 = d.day; for (int m = 1; m < d.month; ++m) { d1 += date::length[m]; } int frday = d1 - 259; //259 less than the Julian date. switch (ost.iword(date::subscript)) { case 0: return ost << d.month << "/" << d.day << "/" << d.year; case 1: int fryear = d.year - 1792; if (d1 >= 264) { ++fryear; } int frmonth; //initialized here and after frday == 5 if (frday <= 0) { frday += 360; frmonth = frday / 30; } else if (frday == 1) { return ost << "Fete de la vertu " << fryear << " de La Republic\n"; } else if (frday == 2) { return ost << "Fete de la genie " << fryear << " de La Republic\n"; } else if (frday == 3) { return ost << "Fete de la travail " << fryear << " de La Republic\n"; } else if (frday == 4) { return ost << "Fete de la opinion " << fryear << " de La Republic\n"; } else if (frday == 5) { return ost << "Fete des recompenses " << fryear << " de La Republic\n"; } else { frmonth = frday / 30; } if (frday > 30) { frday -= frmonth * 30; } else { frday -= 5; } return ost << frday << " " << french_month[frmonth] << " de l Anne " << fryear << " de la Repulic\n"; default: cerr << "i.word(" << date::subscript << ") == " << ost.iword(date::subscript) << " is neither 0 nor 1.\n"; exit(EXIT_FAILURE); } }