/*
* Copyright (C) 2012 Andy Spencer <andy753421@gmail.com>
- *
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "date.h"
/* Global data */
-year_t YEAR;
-month_t MONTH;
-day_t DAY;
+date_t NOW;
+date_t SEL;
/* Initialize */
void date_init(void)
time_t sec = time(NULL);
struct tm *tm = localtime(&sec);
- YEAR = tm->tm_year+1900;
- MONTH = tm->tm_mon;
- DAY = tm->tm_mday-1;
+ SEL.year = tm->tm_year+1900;
+ SEL.month = tm->tm_mon;
+ SEL.day = tm->tm_mday-1;
+}
+
+void date_sync(void)
+{
+ time_t sec = time(NULL);
+ struct tm *tm = localtime(&sec);
- /* Testing */
- //YEAR = 2008;
- //MONTH = OCT;
- //DAY = 21;
+ NOW.year = tm->tm_year+1900;
+ NOW.month = tm->tm_mon;
+ NOW.day = tm->tm_mday-1;
+ NOW.hour = tm->tm_hour;
+ NOW.min = tm->tm_min;
+ NOW.sec = tm->tm_sec;
}
/* Time functions */
return (get_time(end)-get_time(start))/60;
}
-int before(date_t *start, int year, int month, int day, int hour, int min)
+int compare(date_t *a, date_t *b)
{
- int rval = start->year < year ? 1 : start->year > year ? 0 :
- start->month < month ? 1 : start->month > month? 0 :
- start->day < day ? 1 : start->day > day ? 0 :
- start->hour < hour ? 1 : start->hour > hour ? 0 :
- start->min < min ? 1 : start->min > min ? 0 : 0;
+ int rval = a->year < b->year ? -1 : a->year > b->year ? 1 :
+ a->month < b->month ? -1 : a->month > b->month ? 1 :
+ a->day < b->day ? -1 : a->day > b->day ? 1 :
+ a->hour < b->hour ? -1 : a->hour > b->hour ? 1 :
+ a->min < b->min ? -1 : a->min > b->min ? 1 : 0;
return rval;
}
+int same_day(date_t *a, date_t *b)
+{
+ return a->year == b->year &&
+ a->month == b->month &&
+ a->day == b->day;
+}
+
+int before(date_t *start, int year, int month, int day, int hour, int min)
+{
+ return compare(start, &(date_t){year, month, day, hour, min}) < 0;
+}
+
+int all_day(date_t *start, date_t *end)
+{
+ date_t test = *start;
+ add_days(&test.year, &test.month, &test.day, 1);
+ return compare(&test, end) <= 0;
+}
+
+int no_date(date_t *date)
+{
+ return date->year == 0;
+}
+
/* Debug functions */
const char *month_to_str(month_t month)
{
void date_test(void)
{
printf("Info\n");
- printf(" Year Month Start Weeks Days\n");
+ printf(" Year Month Start Weeks Days\n");
for (int y = 2012; y <= 2012; y++)
for (int m = JAN; m <= DEC; m++) {
printf(" %-5d", y);