00001
00002
00003
00004 #include "cddefines.h"
00005 #include "timesc.h"
00006 #include "parse.h"
00007 #include "parser.h"
00008
00009 #define NUMBEROF(a) (sizeof(a)/sizeof((a)[0]))
00010
00011 namespace Time {
00012 const double YEAR=3.15569e7,
00013 MILLENIUM=YEAR*1000.,
00014 CENTURY=YEAR*100.,
00015 MONTH=YEAR/12.,
00016 FORTNIGHT=(24.*3600.*14.),
00017 WEEK=(24.*3600.*7.),
00018 DAY=(24.*3600.),
00019 HOUR=3600.,
00020 MINUTE=60.,
00021 SECOND=1.;
00022
00023 KeyAction<UnitConverter> TimeUnits[] =
00024 {
00025 MakeKeyAction("MILL", UnitConverter(MILLENIUM)),
00026 MakeKeyAction("CENT", UnitConverter(CENTURY)),
00027 MakeKeyAction("YEAR", UnitConverter(YEAR)),
00028 MakeKeyAction("MONT", UnitConverter(MONTH)),
00029 MakeKeyAction("FORT", UnitConverter(FORTNIGHT)),
00030 MakeKeyAction("WEEK", UnitConverter(WEEK)),
00031 MakeKeyAction("DAY ", UnitConverter(DAY)),
00032 MakeKeyAction("HOUR", UnitConverter(HOUR)),
00033 MakeKeyAction("MINU", UnitConverter(MINUTE)),
00034 MakeKeyAction("SECO", UnitConverter(SECOND)),
00035 };
00036
00037 }
00038
00039 void ParseAge( Parser &p )
00040 {
00041 DEBUG_ENTRY( "ParseAge()" );
00042
00043
00044
00045
00046 realnum value = (realnum)p.FFmtRead();
00047
00048
00049 if( p.lgEOL() && (!p.nWord(" OFF")) )
00050 {
00051 fprintf( ioQQQ, " The age must be on this line.\n" );
00052 cdEXIT(EXIT_FAILURE);
00053 }
00054
00055
00056 if( p.nWord(" LOG") )
00057 {
00058 value = (realnum)pow((realnum)10.f, value);
00059 }
00060
00061 parserProcess(p, Time::TimeUnits, NUMBEROF(Time::TimeUnits), &value);
00062
00063 timesc.CloudAgeSet = value;
00064
00065 return;
00066 }