X-Git-Url: http://pileus.org/git/?p=lackey;a=blobdiff_plain;f=src%2Fdate.c;h=84414413dd43c3b488dc1401b0cc7cc32bb55ef5;hp=f55ae3468b34722fb364e00ec7c7fd19d4f63d0c;hb=569a0db79c00169e15d5abed2a82f28d1b2391c4;hpb=328bd5c03655ddda1b43aadc72b1753d69048d74 diff --git a/src/date.c b/src/date.c index f55ae34..8441441 100644 --- a/src/date.c +++ b/src/date.c @@ -1,16 +1,16 @@ /* * Copyright (C) 2012 Andy Spencer - * + * * 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 . */ @@ -23,9 +23,8 @@ #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) @@ -33,14 +32,24 @@ 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; - /* Testing */ - //YEAR = 2009; - //MONTH = MAY; - //DAY = 1; + date_sync(); +} + +void date_sync(void) +{ + time_t sec = time(NULL); + struct tm *tm = localtime(&sec); + + 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 */ @@ -126,16 +135,40 @@ int get_mins(date_t *start, date_t *end) 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) { @@ -177,7 +210,7 @@ const char *day_to_string(wday_t day) 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);