From 296fd1bb5f87b1961e98c7ea4c224219012f7161 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sun, 16 Jun 2013 23:21:55 +0000 Subject: [PATCH] Convert YEAR/MONTH/DAY to Selection struct This lets us add more precision in the selection (hours/minutes) without having to keep adding variables. --- src/cal.c | 2 +- src/date.c | 10 ++++------ src/date.h | 4 +--- views/day.c | 20 ++++++++++---------- views/events.c | 8 ++++---- views/month.c | 28 ++++++++++++++-------------- views/week.c | 12 ++++++------ views/year.c | 44 ++++++++++++++++++++++---------------------- 8 files changed, 62 insertions(+), 66 deletions(-) diff --git a/src/cal.c b/src/cal.c index ee574b7..b519d58 100644 --- a/src/cal.c +++ b/src/cal.c @@ -111,7 +111,7 @@ void cal_init(void) ical_cals()); /* Load data */ - cal_load(YEAR, MONTH, DAY, 1); + cal_load(SEL.year, SEL.month, SEL.day, 1); /* Debug */ #ifdef DEBUG_CALS diff --git a/src/date.c b/src/date.c index f171928..9bcf816 100644 --- a/src/date.c +++ b/src/date.c @@ -23,9 +23,7 @@ #include "date.h" /* Global data */ -year_t YEAR; -month_t MONTH; -day_t DAY; +date_t SEL; /* Initialize */ void date_init(void) @@ -33,9 +31,9 @@ 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; } /* Time functions */ diff --git a/src/date.h b/src/date.h index 4d6438b..a04d0de 100644 --- a/src/date.h +++ b/src/date.h @@ -57,9 +57,7 @@ typedef struct { } date_t; /* Global data */ -extern year_t YEAR; -extern month_t MONTH; -extern day_t DAY; +extern date_t SEL; // date and time the user is looking at /* Initialize */ void date_init(void); diff --git a/views/day.c b/views/day.c index 3873204..b0f4c1e 100644 --- a/views/day.c +++ b/views/day.c @@ -108,27 +108,27 @@ void day_size(int rows, int cols) /* Day draw */ void day_draw(void) { - const char *mstr = month_to_string(MONTH); - const char *dstr = day_to_string(day_of_week(YEAR, MONTH, DAY)); + const char *mstr = month_to_string(SEL.month); + const char *dstr = day_to_string(day_of_week(SEL.year, SEL.month, SEL.day)); int y = !COMPACT+1; event_t *event; /* Load cal data */ - cal_load(YEAR, MONTH, DAY, 1); + cal_load(SEL.year, SEL.month, SEL.day, 1); /* Print Header */ if (COMPACT) wattron(win, A_REVERSE | A_BOLD); mvwhline(win, 0, 0, ' ', COLS); - mvwprintw(win, 0, 0, "%s, %s %d", dstr, mstr, DAY+1); - mvwprintw(win, 0, COLS-10, "%d-%02d-%02d", YEAR, MONTH, DAY+1); + mvwprintw(win, 0, 0, "%s, %s %d", dstr, mstr, SEL.day+1); + mvwprintw(win, 0, COLS-10, "%d-%02d-%02d", SEL.year, SEL.month, SEL.day+1); if (COMPACT) wattroff(win, A_REVERSE | A_BOLD); /* Print all day events */ event = EVENTS; int allday = 0; - while (event && before(&event->start, YEAR, MONTH, DAY, 24, 0)) { - if (!before(&event->end, YEAR, MONTH, DAY, 0, 1) && + while (event && before(&event->start, SEL.year, SEL.month, SEL.day, 24, 0)) { + if (!before(&event->end, SEL.year, SEL.month, SEL.day, 0, 1) && get_mins(&event->start, &event->end) > 23*60) event_line(win, event, y+allday++, 6, COLS, SHOW_DETAILS); event = event->next; @@ -152,8 +152,8 @@ void day_draw(void) for (int h = 0; h < 24; h++) for (int m = 0; m < 60; m+=15) while (event && before(&event->start, - YEAR, MONTH, DAY, h+(m+15)/60, (m+15)%60)) { - if (!before(&event->start, YEAR, MONTH, DAY, h, m) && + SEL.year, SEL.month, SEL.day, h+(m+15)/60, (m+15)%60)) { + if (!before(&event->start, SEL.year, SEL.month, SEL.day, h, m) && get_mins(&event->start, &event->end) <= 23*60) { int col = get_col(active, N_ELEMENTS(active), event, &ncols); int left = ROUND((col+0.0)*(COLS-6)/ncols) + 1; @@ -188,7 +188,7 @@ int day_run(int key, mmask_t btn, int row, int col) } line = CLAMP(line, 0, 24*4); if (days) - add_days(&YEAR, &MONTH, &DAY, days); + add_days(&SEL.year, &SEL.month, &SEL.day, days); if (ref) { werase(win); day_draw(); diff --git a/views/events.c b/views/events.c index 56d6aab..ced1a3f 100644 --- a/views/events.c +++ b/views/events.c @@ -44,11 +44,11 @@ void events_draw(void) int days = 2*7; int min = 12; - date_t start = {YEAR, MONTH, DAY, 0, 0}; - date_t cur = {YEAR, MONTH, DAY-1, 0, 0}; - date_t end = {YEAR, MONTH, DAY, 24, 0}; + date_t start = {SEL.year, SEL.month, SEL.day, 0, 0}; + date_t cur = {SEL.year, SEL.month, SEL.day-1, 0, 0}; + date_t end = {SEL.year, SEL.month, SEL.day, 24, 0}; add_days(&end.year, &end.month, &end.day, days); - cal_load(YEAR, MONTH, DAY, days); + cal_load(SEL.year, SEL.month, SEL.day, days); int row = 0; int count = 0; diff --git a/views/month.c b/views/month.c index a51935d..99fd09f 100644 --- a/views/month.c +++ b/views/month.c @@ -42,23 +42,23 @@ void month_size(int rows, int cols) /* Month draw */ void month_draw(void) { - const char *name = month_to_string(MONTH); - const int start = start_of_month(YEAR, MONTH); - const int days = days_in_month(YEAR, MONTH); - const int weeks = weeks_in_month(YEAR, MONTH); + const char *name = month_to_string(SEL.month); + const int start = start_of_month(SEL.year, SEL.month); + const int days = days_in_month(SEL.year, SEL.month); + const int weeks = weeks_in_month(SEL.year, SEL.month); const int hdr = COMPACT ? 3 : 4; const float midpt = (float)COLS/2.0 - (strlen(name) + 1 + 4)/2.0; const float hstep = (float)(COLS-1)/7.0; const float vstep = (float)(LINES-2-hdr+COMPACT)/weeks; /* Load cal data */ - cal_load(YEAR, MONTH, 0, days); + cal_load(SEL.year, SEL.month, 0, days); /* Print Header */ if (COMPACT) wattron(win, A_REVERSE | A_BOLD); if (COMPACT) mvwhline(win, 0, 0, ' ' | A_REVERSE | A_BOLD, COLS); if (COMPACT) mvwhline(win, 1, 0, ' ' | A_REVERSE | A_BOLD, COLS); - mvwprintw(win, 0, midpt, "%s %d", name, YEAR); + mvwprintw(win, 0, midpt, "%s %d", name, SEL.year); for (int d = 0; d < 7; d++) { const char *str = hstep >= 10 ? day_to_string(d+SUN) : day_to_str(d+SUN); mvwprintw(win, 1, ROUND(1+d*hstep), "%s", str); @@ -70,9 +70,9 @@ void month_draw(void) for (int d = 0; d < days; d++) { int row = (start + d) / 7; int col = (start + d) % 7; - if (d == DAY) wattron(win, A_BOLD); + if (d == SEL.day) wattron(win, A_BOLD); mvwprintw(win, ROUND(hdr+row*vstep), ROUND(1+col*hstep), "%d", d+1); - if (d == DAY) wattroff(win, A_BOLD); + if (d == SEL.day) wattroff(win, A_BOLD); } /* Print events */ @@ -82,8 +82,8 @@ void month_draw(void) int e = ROUND(hdr+(((start + d) / 7)+1)*vstep)-2; int x = ROUND(1 +(((start + d) % 7) )*hstep)+3; int w = ROUND(1 +(((start + d) % 7)+1)*hstep)-x-1; - while (event && before(&event->start, YEAR, MONTH, d, 24, 0)) { - if (!before(&event->start, YEAR, MONTH, d, 0, 0)){ + while (event && before(&event->start, SEL.year, SEL.month, d, 24, 0)) { + if (!before(&event->start, SEL.year, SEL.month, d, 0, 0)){ if (y == e) mvwhline(win, y, x-3, ACS_DARROW, 2); if (y <= e) event_line(win, event, y, x, w, 0); y++; @@ -108,8 +108,8 @@ void month_draw(void) } /* Draw today */ - int col = day_of_week(YEAR, MONTH, DAY); - int row = (start+DAY) / 7; + int col = day_of_week(SEL.year, SEL.month, SEL.day); + int row = (start+SEL.day) / 7; int l = ROUND((col+0)*hstep); int r = ROUND((col+1)*hstep); int t = ROUND((row+0)*vstep+hdr-1); @@ -138,8 +138,8 @@ int month_run(int key, mmask_t btn, int row, int col) case 'o': months = 1; break; } if (days || months) { - add_days(&YEAR, &MONTH, &DAY, days); - add_months(&YEAR, &MONTH, months); + add_days(&SEL.year, &SEL.month, &SEL.day, days); + add_months(&SEL.year, &SEL.month, months); werase(win); month_draw(); wrefresh(win); diff --git a/views/week.c b/views/week.c index 25c55c8..82b56b3 100644 --- a/views/week.c +++ b/views/week.c @@ -56,9 +56,9 @@ void week_draw(void) event_t *event; /* Get start of week */ - year_t year = YEAR; - month_t month = MONTH; - day_t day = DAY; + year_t year = SEL.year; + month_t month = SEL.month; + day_t day = SEL.day; int shift = day_of_week(year, month, day); add_days(&year, &month, &day, -shift); @@ -72,8 +72,8 @@ void week_draw(void) /* Print Header */ int rev = COMPACT ? A_REVERSE | A_BOLD : 0; wattron(win, rev); - mvwprintw(win, 0, 0, "%-*s", COLS, month_to_str(MONTH)); - mvwprintw(win, 1, 0, "%-0*d", COLS, YEAR); + mvwprintw(win, 0, 0, "%-*s", COLS, month_to_str(SEL.month)); + mvwprintw(win, 1, 0, "%-0*d", COLS, SEL.year); wattroff(win, rev); mvwhline(win, 0, x+l, ' ', r-l-1); mvwhline(win, 1, x+l, ' ', r-l-1); @@ -172,7 +172,7 @@ int week_run(int key, mmask_t btn, int row, int col) } line = CLAMP(line, 0, 24*4); if (days) - add_days(&YEAR, &MONTH, &DAY, days); + add_days(&SEL.year, &SEL.month, &SEL.day, days); if (ref) { werase(win); week_draw(); diff --git a/views/year.c b/views/year.c index 56bc843..ddcf5e4 100644 --- a/views/year.c +++ b/views/year.c @@ -34,8 +34,8 @@ static void print_month(month_t month, int y, int x) { event_t *event = EVENTS; const char *name = month_to_string(month); - const int start = start_of_month(YEAR, month); - const char days = days_in_month(YEAR, month); + const int start = start_of_month(SEL.year, month); + const char days = days_in_month(SEL.year, month); mvwprintw(win, y, x+MW/2-strlen(name)/2, "%s", name); wmove(win, y+1, x); for (int d = 0; d < 7; d++) @@ -45,13 +45,13 @@ static void print_month(month_t month, int y, int x) int col = (start + d) % 7; int busy = 0; - while (event && before(&event->start, YEAR, month, d, 24, 0)) { - if (!before(&event->start, YEAR, month, d, 0, 0)) + while (event && before(&event->start, SEL.year, month, d, 24, 0)) { + if (!before(&event->start, SEL.year, month, d, 0, 0)) busy = 1; event = event->next; } - int today = month == MONTH && d == DAY; + int today = month == SEL.month && d == SEL.day; int attr = (busy ? A_BOLD|A_UNDERLINE : A_DIM) | (today ? A_REVERSE : 0 ); @@ -82,11 +82,11 @@ void year_draw(void) int h[4] = {}; /* Load cal data */ - cal_load(YEAR, 0, 0, 366); + cal_load(SEL.year, 0, 0, 366); /* Determine heights */ for (int m = 0; m < 12; m++) { - int weeks = weeks_in_month(YEAR, m); + int weeks = weeks_in_month(SEL.year, m); h[m/3] = MAX(h[m/3], weeks+2); } int sum = h[0]+h[1]+h[2]+h[3]; @@ -94,7 +94,7 @@ void year_draw(void) /* Print Header */ if (COMPACT) wattron(win, A_REVERSE | A_BOLD); if (COMPACT) mvwhline(win, y, 0, A_REVERSE | A_BOLD, COLS); - mvwprintw(win, y++, COLS/2-2, "%d", YEAR); + mvwprintw(win, y++, COLS/2-2, "%d", SEL.year); if (COMPACT) wattroff(win, A_REVERSE | A_BOLD); /* Print Months */ @@ -124,18 +124,18 @@ void year_draw(void) /* Year run */ int year_run(int key, mmask_t btn, int row, int col) { - day_t d = DAY; - month_t m = MONTH; - year_t y = YEAR; - wday_t day = day_of_week(YEAR, MONTH, DAY); + day_t d = SEL.day; + month_t m = SEL.month; + year_t y = SEL.year; + wday_t day = day_of_week(SEL.year, SEL.month, SEL.day); int week = (start_of_month(y, m) + d) / 7; int dir = 0; /* Step years */ if (key == 'i') - YEAR--; + SEL.year--; if (key == 'o') - YEAR++; + SEL.year++; /* Get direction */ if (key == 'h' || key == 'k') @@ -148,9 +148,9 @@ int year_run(int key, mmask_t btn, int row, int col) for (int i = 0; i < 90/7; i++) { add_days(&y, &m, &d, dir*7); if (day_of_week(y, m, d) == day && - y == YEAR && m%3 == MONTH%3) { - MONTH = m; - DAY = d; + y == SEL.year && m%3 == SEL.month%3) { + SEL.month = m; + SEL.day = d; break; } } @@ -161,19 +161,19 @@ int year_run(int key, mmask_t btn, int row, int col) for (int i = 0; i < 90; i++) { add_days(&y, &m, &d, dir); if ((start_of_month(y, m) + d) / 7 == week && - y == YEAR && m/3 == MONTH/3) { - MONTH = m; - DAY = d; + y == SEL.year && m/3 == SEL.month/3) { + SEL.month = m; + SEL.day = d; break; } } } /* Refresh */ - if (dir || y != YEAR) { + if (dir || y != SEL.year) { werase(win); year_draw(); wrefresh(win); } - return dir || y != YEAR; + return dir || y != SEL.year; } -- 2.43.2