X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Futil.c;h=582b65deff8b70adc0c2f06dd248ac7fd92f6250;hb=daded0f3fb930e7758e1009683c0cdb46eada3f6;hp=3d6aa200f542e830e77fbe56dc3010dd220a1d83;hpb=ee82a6d611fb17b94462b7b2a87b0b5cc3ec1178;p=lackey diff --git a/src/util.c b/src/util.c index 3d6aa20..582b65d 100644 --- a/src/util.c +++ b/src/util.c @@ -1,136 +1,70 @@ /* * 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 . */ -/* Time Keeping Bugs Abound! */ - #include -#include - -#include "util.h" - -/* Time functions */ -int is_leap_year(year_t year) -{ - return (year % 400 == 0) ? 1 : - (year % 100 == 0) ? 0 : - (year % 4 == 0) ? 1 : 0; -} - -int days_in_year(year_t year) -{ - return 365 + is_leap_year(year); -} +#include +#include +#include -int days_in_month(year_t year, month_t month) -{ - static int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - int days = mdays[month]; - if (month == FEB) - days += is_leap_year(year); - return days; -} +#include "date.h" +#include "cal.h" +#include "view.h" -int weeks_in_month(year_t year, month_t month) -{ - int start = start_of_month(year, month); - int days = days_in_month(year, month); - return ((start + days)-1) / 7 + 1; -} +/* Static data */ +static FILE *debug_fd = NULL; -wday_t day_of_week(year_t year, month_t month, day_t day) +/* Initialize */ +void util_init(void) { - static int tmp[] = {0, 3, 2, 5, 0, 3, - 5, 1, 4, 6, 2, 4}; - if (month < 3) - year--; - int start = year + year / 4 - - year / 100 - + year / 400 - + tmp[month]; - return (start + day) % 7; + debug_fd = fopen("/tmp/lackey.log", "w+"); } -wday_t start_of_month(year_t year, month_t month) +/* String functions */ +void strsub(char *str, char find, char repl) { - return day_of_week(year, month, 1); + for (char *cur = str; *cur; cur++) + if (*cur == find) + *cur = repl; } -void add_days(year_t *year, month_t *month, day_t *day, int days) +/* Debugging functions */ +int debug(char *fmt, ...) { - time_t time = mktime(&(struct tm){ - .tm_year = *year-1900, - .tm_mon = *month, - .tm_mday = *day+1, - .tm_hour = 12}); - time += days*24*60*60; - struct tm *tm = localtime(&time); - *year = tm->tm_year+1900; - *month = tm->tm_mon; - *day = tm->tm_mday-1; -} + int rval; + va_list ap; -/* Debug functions */ -const char *month_to_str(month_t month) -{ - static const char *map[] = - { "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", }; - return map[month%12]; -} -const char *month_to_string(month_t month) -{ - static const char *map[] = - { "January", "February", "March", "April", - "May", "June", "July", "August", - "September", "October", "November", "December" }; - return map[month%12]; -} - -const char *day_to_st(wday_t day) -{ - static const char *map[] = - { "Su","Mo", "Tu", "We", "Th", "Fr", "Sa" }; - return map[day%7]; -} -const char *day_to_str(wday_t day) -{ - static const char *map[] = - { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - return map[day%7]; -} -const char *day_to_string(wday_t day) -{ - static const char *map[] = - { "Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday" }; - return map[day%7]; -} + /* Log to debug file */ + if (debug_fd) { + va_start(ap, fmt); + vfprintf(debug_fd, "debug: ", ap); + rval = vfprintf(debug_fd, fmt, ap); + } -/* Test functions */ -void test_time(void) -{ - printf("Year Month Start Weeks Days\n"); - for (int y = 2012; y <= 2012; y++) - for (int m = JAN; m <= DEC; m++) { - printf("%-5d", y); - printf("%-10s", month_to_string(m)); - printf("%-6s", day_to_str(start_of_month(y,m))); - printf("%-6d", weeks_in_month(y,m)); - printf("%-2d", days_in_month(y,m)); - printf("\n"); + /* Log to status bar */ + if (stdscr) { + va_start(ap, fmt); + mvhline(LINES-2, 0, ACS_HLINE, COLS); + move(LINES-1, 0); + attron(COLOR_PAIR(COLOR_ERROR)); + vwprintw(stdscr, fmt, ap); + attroff(COLOR_PAIR(COLOR_ERROR)); + clrtoeol(); } + + va_end(ap); + return rval; }