GRASS Programmer's Manual  6.4.2(2012)
values.c
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 1995.  Bill Brown <brown@gis.uiuc.edu> & Michael Shapiro
00003  *
00004  * This program is free software under the GPL (>=v2)
00005  * Read the file GPL.TXT coming with GRASS for details.
00006  */
00007 #include <grass/datetime.h>
00008 
00009 
00010 static int have(int x, const DateTime * dt)
00011 {
00012     return datetime_is_between(x, dt->from, dt->to);
00013 }
00014 
00015 
00029 int datetime_check_year(const DateTime * dt, int year)
00030 {
00031     if (!have(DATETIME_YEAR, dt))
00032         return datetime_error(-2, "datetime has no year");
00033     if (year < 0)
00034         return datetime_error(-1, "invalid datetime year");
00035     if (datetime_is_absolute(dt) && year <= 0)
00036         return datetime_error(-1, "invalid datetime year");
00037 
00038     return 0;
00039 }
00040 
00041 
00055 int datetime_check_month(const DateTime * dt, int month)
00056 {
00057     if (!have(DATETIME_MONTH, dt))
00058         return datetime_error(-2, "datetime has no month");
00059     if (month < 0)
00060         return datetime_error(-1, "invalid datetime month");
00061     if (datetime_is_absolute(dt) && (month < 1 || month > 12))
00062         return datetime_error(-1, "invalid datetime month");
00063     /*
00064        if (dt->from != DATETIME_MONTH && month > 11)
00065        return datetime_error(-1,"invalid datetime month");
00066        BILL CHANGED TO: */
00067 
00068     if (datetime_is_relative(dt) && dt->from != DATETIME_MONTH && month > 11)
00069         return datetime_error(-1, "invalid datetime month");
00070 
00071     return 0;
00072 }
00073 
00074 
00091 int datetime_check_day(const DateTime * dt, int day)
00092 {
00093     int month, year, ad;
00094     int stat;
00095 
00096     if (!have(DATETIME_DAY, dt))
00097         return datetime_error(-2, "datetime has no day");
00098     if (day < 0)
00099         return datetime_error(-1, "invalid datetime day");
00100     if (datetime_is_absolute(dt)) {
00101         stat = datetime_get_month(dt, &month);
00102         if (stat != 0)
00103             return stat;
00104         stat = datetime_get_year(dt, &year);
00105         if (stat != 0)
00106             return stat;
00107         ad = datetime_is_positive(dt);
00108         if (day < 1 || day > datetime_days_in_month(year, month, ad))
00109             return datetime_error(-1, "invalid datetime day");
00110     }
00111 
00112     return 0;
00113 }
00114 
00115 
00129 int datetime_check_hour(const DateTime * dt, int hour)
00130 {
00131     if (!have(DATETIME_HOUR, dt))
00132         return datetime_error(-2, "datetime has no hour");
00133     if (hour < 0)
00134         return datetime_error(-1, "invalid datetime hour");
00135     if (dt->from != DATETIME_HOUR && hour > 23)
00136         return datetime_error(-1, "invalid datetime hour");
00137 
00138     return 0;
00139 }
00140 
00141 
00155 int datetime_check_minute(const DateTime * dt, int minute)
00156 {
00157     if (!have(DATETIME_MINUTE, dt))
00158         return datetime_error(-2, "datetime has no minute");
00159     if (minute < 0)
00160         return datetime_error(-1, "invalid datetime minute");
00161     if (dt->from != DATETIME_MINUTE && minute > 59)
00162         return datetime_error(-1, "invalid datetime minute");
00163 
00164     return 0;
00165 }
00166 
00167 
00181 int datetime_check_second(const DateTime * dt, double second)
00182 {
00183     if (!have(DATETIME_SECOND, dt))
00184         return datetime_error(-2, "datetime has no second");
00185     if (second < 0)
00186         return datetime_error(-1, "invalid datetime second");
00187     if (dt->from != DATETIME_SECOND && second >= 60.0)
00188         return datetime_error(-1, "invalid datetime second");
00189 
00190     return 0;
00191 }
00192 
00193 
00207 int datetime_check_fracsec(const DateTime * dt, int fracsec)
00208 {
00209     if (!have(DATETIME_SECOND, dt))
00210         return datetime_error(-2, "datetime has no fracsec");
00211     if (fracsec < 0)
00212         return datetime_error(-1, "invalid datetime fracsec");
00213     return 0;
00214 }
00215 
00216 
00227 int datetime_get_year(const DateTime * dt, int *year)
00228 {
00229     int stat;
00230 
00231     stat = datetime_check_year(dt, dt->year);
00232     if (stat == 0)
00233         *year = dt->year;
00234 
00235     return stat;
00236 }
00237 
00238 
00251 int datetime_set_year(DateTime * dt, int year)
00252 {
00253     int stat;
00254 
00255     stat = datetime_check_year(dt, year);
00256     if (stat == 0) {
00257         dt->year = year;
00258         if (datetime_is_absolute(dt))
00259             dt->day = 0;
00260     }
00261 
00262     return stat;
00263 }
00264 
00265 
00276 int datetime_get_month(const DateTime * dt, int *month)
00277 {
00278     int stat;
00279 
00280     stat = datetime_check_month(dt, dt->month);
00281     if (stat == 0)
00282         *month = dt->month;
00283 
00284     return stat;
00285 }
00286 
00287 
00300 int datetime_set_month(DateTime * dt, int month)
00301 {
00302     int stat;
00303 
00304     stat = datetime_check_month(dt, month);
00305     if (stat == 0) {
00306         dt->month = month;
00307         if (datetime_is_absolute(dt))
00308             dt->day = 0;
00309     }
00310 
00311     return stat;
00312 }
00313 
00314 
00325 int datetime_get_day(const DateTime * dt, int *day)
00326 {
00327     int stat;
00328 
00329     stat = datetime_check_day(dt, dt->day);
00330     if (stat == 0)
00331         *day = dt->day;
00332 
00333     return stat;
00334 }
00335 
00336 
00354 int datetime_set_day(DateTime * dt, int day)
00355 {
00356     int stat;
00357 
00358     stat = datetime_check_day(dt, day);
00359     if (stat == 0)
00360         dt->day = day;
00361 
00362     return stat;
00363 }
00364 
00365 
00376 int datetime_get_hour(const DateTime * dt, int *hour)
00377 {
00378     int stat;
00379 
00380     stat = datetime_check_hour(dt, dt->hour);
00381     if (stat == 0)
00382         *hour = dt->hour;
00383 
00384     return stat;
00385 }
00386 
00387 
00398 int datetime_set_hour(DateTime * dt, int hour)
00399 {
00400     int stat;
00401 
00402     stat = datetime_check_hour(dt, hour);
00403     if (stat == 0)
00404         dt->hour = hour;
00405 
00406     return stat;
00407 }
00408 
00409 
00420 int datetime_get_minute(const DateTime * dt, int *minute)
00421 {
00422     int stat;
00423 
00424     stat = datetime_check_minute(dt, dt->minute);
00425     if (stat == 0)
00426         *minute = dt->minute;
00427 
00428     return stat;
00429 }
00430 
00431 
00442 int datetime_set_minute(DateTime * dt, int minute)
00443 {
00444     int stat;
00445 
00446     stat = datetime_check_minute(dt, minute);
00447     if (stat == 0)
00448         dt->minute = minute;
00449 
00450     return stat;
00451 }
00452 
00453 
00464 int datetime_get_second(const DateTime * dt, double *second)
00465 {
00466     int stat;
00467 
00468     stat = datetime_check_second(dt, dt->second);
00469     if (stat == 0)
00470         *second = dt->second;
00471 
00472     return stat;
00473 }
00474 
00475 
00486 int datetime_set_second(DateTime * dt, double second)
00487 {
00488     int stat;
00489 
00490     stat = datetime_check_second(dt, second);
00491     if (stat == 0)
00492         dt->second = second;
00493 
00494     return stat;
00495 }
00496 
00497 
00508 int datetime_get_fracsec(const DateTime * dt, int *fracsec)
00509 {
00510     int stat;
00511 
00512     stat = datetime_check_fracsec(dt, dt->fracsec);
00513     if (stat == 0)
00514         *fracsec = dt->fracsec;
00515 
00516     return stat;
00517 }
00518 
00519 
00530 int datetime_set_fracsec(DateTime * dt, int fracsec)
00531 {
00532     int stat;
00533 
00534     stat = datetime_check_fracsec(dt, fracsec);
00535     if (stat == 0)
00536         dt->fracsec = fracsec;
00537 
00538     return stat;
00539 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines