+/* Event setting helper functions */
+void move_event(int events, int days, int *line)
+{
+ /* Move forward/back in event list */
+ if (events && EVENT) {
+ for (int i=0; i<events && EVENT->next &&
+ same_day(&EVENT->start, &EVENT->next->start); i++)
+ EVENT = EVENT->next;
+ for (int i=0; i>events && EVENT->next &&
+ same_day(&EVENT->start, &EVENT->prev->start); i--)
+ EVENT = EVENT->prev;
+ }
+
+ /* Set current event */
+ if (days) {
+ add_days(&SEL.year, &SEL.month, &SEL.day, days);
+ date_t target = SEL;
+ if (EVENT) {
+ target.hour = EVENT->start.hour;
+ target.min = EVENT->start.min;
+ target.sec = EVENT->start.sec;
+ }
+ if ((EVENT = find_event(&target)))
+ SEL = EVENT->start;
+ }
+
+ /* Update line */
+ if (line && EVENT && !all_day(&EVENT->start, &EVENT->end)) {
+ int lines = LINES-4+COMPACT+COMPACT;
+ int begin = EVENT->start.hour * 4
+ + EVENT->start.min / 15;
+ if (begin+4 > *line+lines)
+ *line = begin-lines+4;
+ if (begin < *line)
+ *line = begin;
+ }
+}
+