diff options
Diffstat (limited to 'src/day.c')
-rw-r--r-- | src/day.c | 937 |
1 files changed, 476 insertions, 461 deletions
@@ -46,12 +46,12 @@ static llist_t day_items; static void day_free(struct day_item *day) { - mem_free(day); + mem_free(day); } static void day_init_list(void) { - LLIST_INIT(&day_items); + LLIST_INIT(&day_items); } /* @@ -61,148 +61,149 @@ static void day_init_list(void) */ void day_free_list(void) { - LLIST_FREE_INNER(&day_items, day_free); - LLIST_FREE(&day_items); + LLIST_FREE_INNER(&day_items, day_free); + LLIST_FREE(&day_items); } static int day_cmp_start(struct day_item *a, struct day_item *b) { - if (a->type <= EVNT) { - if (b->type <= EVNT) - return 0; - else - return -1; - } else if (b->type <= EVNT) { - return 1; - } else { - return a->start < b->start ? -1 : (a->start == b->start ? 0 : 1); - } + if (a->type <= EVNT) { + if (b->type <= EVNT) + return 0; + else + return -1; + } else if (b->type <= EVNT) { + return 1; + } else { + return a->start < b->start ? -1 : (a->start == + b->start ? 0 : 1); + } } /* Add an item to the current day list. */ static void day_add_item(int type, long start, union aptev_ptr item) { - struct day_item *day = mem_malloc(sizeof(struct day_item)); - day->type = type; - day->start = start; - day->item = item; + struct day_item *day = mem_malloc(sizeof(struct day_item)); + day->type = type; + day->start = start; + day->item = item; - LLIST_ADD_SORTED(&day_items, day, day_cmp_start); + LLIST_ADD_SORTED(&day_items, day, day_cmp_start); } /* Get the message of an item. */ char *day_item_get_mesg(struct day_item *day) { - switch (day->type) { - case APPT: - return day->item.apt->mesg; - case EVNT: - return day->item.ev->mesg; - case RECUR_APPT: - return day->item.rapt->mesg; - case RECUR_EVNT: - return day->item.rev->mesg; - default: - return NULL; - } + switch (day->type) { + case APPT: + return day->item.apt->mesg; + case EVNT: + return day->item.ev->mesg; + case RECUR_APPT: + return day->item.rapt->mesg; + case RECUR_EVNT: + return day->item.rev->mesg; + default: + return NULL; + } } /* Get the note attached to an item. */ char *day_item_get_note(struct day_item *day) { - switch (day->type) { - case APPT: - return day->item.apt->note; - case EVNT: - return day->item.ev->note; - case RECUR_APPT: - return day->item.rapt->note; - case RECUR_EVNT: - return day->item.rev->note; - default: - return NULL; - } + switch (day->type) { + case APPT: + return day->item.apt->note; + case EVNT: + return day->item.ev->note; + case RECUR_APPT: + return day->item.rapt->note; + case RECUR_EVNT: + return day->item.rev->note; + default: + return NULL; + } } /* Get the note attached to an item. */ void day_item_erase_note(struct day_item *day) { - switch (day->type) { - case APPT: - erase_note(&day->item.apt->note); - break; - case EVNT: - erase_note(&day->item.ev->note); - break; - case RECUR_APPT: - erase_note(&day->item.rapt->note); - break; - case RECUR_EVNT: - erase_note(&day->item.rev->note); - break; - } + switch (day->type) { + case APPT: + erase_note(&day->item.apt->note); + break; + case EVNT: + erase_note(&day->item.ev->note); + break; + case RECUR_APPT: + erase_note(&day->item.rapt->note); + break; + case RECUR_EVNT: + erase_note(&day->item.rev->note); + break; + } } /* Get the duration of an item. */ long day_item_get_duration(struct day_item *day) { - switch (day->type) { - case APPT: - return day->item.apt->dur; - case RECUR_APPT: - return day->item.rapt->dur; - default: - return 0; - } + switch (day->type) { + case APPT: + return day->item.apt->dur; + case RECUR_APPT: + return day->item.rapt->dur; + default: + return 0; + } } /* Get the notification state of an item. */ int day_item_get_state(struct day_item *day) { - switch (day->type) { - case APPT: - return day->item.apt->state; - case RECUR_APPT: - return day->item.rapt->state; - default: - return APOINT_NULL; - } + switch (day->type) { + case APPT: + return day->item.apt->state; + case RECUR_APPT: + return day->item.rapt->state; + default: + return APOINT_NULL; + } } /* Add an exception to an item. */ void day_item_add_exc(struct day_item *day, long date) { - switch (day->type) { - case RECUR_EVNT: - recur_event_add_exc(day->item.rev, date); - case RECUR_APPT: - recur_apoint_add_exc(day->item.rapt, date); - } + switch (day->type) { + case RECUR_EVNT: + recur_event_add_exc(day->item.rev, date); + case RECUR_APPT: + recur_apoint_add_exc(day->item.rapt, date); + } } /* Clone the actual item. */ void day_item_fork(struct day_item *day_in, struct day_item *day_out) { - day_out->type = day_in->type; - day_out->start = day_in->start; - - switch (day_in->type) { - case APPT: - day_out->item.apt = apoint_dup(day_in->item.apt); - break; - case EVNT: - day_out->item.ev = event_dup(day_in->item.ev); - break; - case RECUR_APPT: - day_out->item.rapt = recur_apoint_dup(day_in->item.rapt); - break; - case RECUR_EVNT: - day_out->item.rev = recur_event_dup(day_in->item.rev); - break; - default: - EXIT(_("unknown item type")); - /* NOTREACHED */ - } + day_out->type = day_in->type; + day_out->start = day_in->start; + + switch (day_in->type) { + case APPT: + day_out->item.apt = apoint_dup(day_in->item.apt); + break; + case EVNT: + day_out->item.ev = event_dup(day_in->item.ev); + break; + case RECUR_APPT: + day_out->item.rapt = recur_apoint_dup(day_in->item.rapt); + break; + case RECUR_EVNT: + day_out->item.rev = recur_event_dup(day_in->item.rev); + break; + default: + EXIT(_("unknown item type")); + /* NOTREACHED */ + } } /* @@ -212,24 +213,24 @@ void day_item_fork(struct day_item *day_in, struct day_item *day_out) * dedicated to the selected day. * Returns the number of events for the selected day. */ -static int day_store_events(long date, regex_t *regex) +static int day_store_events(long date, regex_t * regex) { - llist_item_t *i; - union aptev_ptr p; - int e_nb = 0; + llist_item_t *i; + union aptev_ptr p; + int e_nb = 0; - LLIST_FIND_FOREACH_CONT(&eventlist, &date, event_inday, i) { - struct event *ev = LLIST_TS_GET_DATA(i); + LLIST_FIND_FOREACH_CONT(&eventlist, &date, event_inday, i) { + struct event *ev = LLIST_TS_GET_DATA(i); - if (regex && regexec(regex, ev->mesg, 0, 0, 0) != 0) - continue; + if (regex && regexec(regex, ev->mesg, 0, 0, 0) != 0) + continue; - p.ev = ev; - day_add_item(EVNT, ev->day, p); - e_nb++; - } + p.ev = ev; + day_add_item(EVNT, ev->day, p); + e_nb++; + } - return e_nb; + return e_nb; } /* @@ -239,24 +240,24 @@ static int day_store_events(long date, regex_t *regex) * dedicated to the selected day. * Returns the number of recurrent events for the selected day. */ -static int day_store_recur_events(long date, regex_t *regex) +static int day_store_recur_events(long date, regex_t * regex) { - llist_item_t *i; - union aptev_ptr p; - int e_nb = 0; + llist_item_t *i; + union aptev_ptr p; + int e_nb = 0; - LLIST_FIND_FOREACH(&recur_elist, &date, recur_event_inday, i) { - struct recur_event *rev = LLIST_TS_GET_DATA(i); + LLIST_FIND_FOREACH(&recur_elist, &date, recur_event_inday, i) { + struct recur_event *rev = LLIST_TS_GET_DATA(i); - if (regex && regexec(regex, rev->mesg, 0, 0, 0) != 0) - continue; + if (regex && regexec(regex, rev->mesg, 0, 0, 0) != 0) + continue; - p.rev = rev; - day_add_item(RECUR_EVNT, rev->day, p); - e_nb++; - } + p.rev = rev; + day_add_item(RECUR_EVNT, rev->day, p); + e_nb++; + } - return e_nb; + return e_nb; } /* @@ -266,30 +267,30 @@ static int day_store_recur_events(long date, regex_t *regex) * structure dedicated to the selected day. * Returns the number of appointments for the selected day. */ -static int day_store_apoints(long date, regex_t *regex) +static int day_store_apoints(long date, regex_t * regex) { - llist_item_t *i; - union aptev_ptr p; - int a_nb = 0; + llist_item_t *i; + union aptev_ptr p; + int a_nb = 0; - LLIST_TS_LOCK(&alist_p); - LLIST_TS_FIND_FOREACH(&alist_p, &date, apoint_inday, i) { - struct apoint *apt = LLIST_TS_GET_DATA(i); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FIND_FOREACH(&alist_p, &date, apoint_inday, i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); - if (regex && regexec(regex, apt->mesg, 0, 0, 0) != 0) - continue; + if (regex && regexec(regex, apt->mesg, 0, 0, 0) != 0) + continue; - p.apt = apt; + p.apt = apt; - if (apt->start >= date + DAYINSEC) - break; + if (apt->start >= date + DAYINSEC) + break; - day_add_item(APPT, apt->start, p); - a_nb++; - } - LLIST_TS_UNLOCK(&alist_p); + day_add_item(APPT, apt->start, p); + a_nb++; + } + LLIST_TS_UNLOCK(&alist_p); - return a_nb; + return a_nb; } /* @@ -299,30 +300,30 @@ static int day_store_apoints(long date, regex_t *regex) * structure dedicated to the selected day. * Returns the number of recurrent appointments for the selected day. */ -static int day_store_recur_apoints(long date, regex_t *regex) +static int day_store_recur_apoints(long date, regex_t * regex) { - llist_item_t *i; - union aptev_ptr p; - int a_nb = 0; + llist_item_t *i; + union aptev_ptr p; + int a_nb = 0; - LLIST_TS_LOCK(&recur_alist_p); - LLIST_TS_FIND_FOREACH(&recur_alist_p, &date, recur_apoint_inday, i) { - struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FIND_FOREACH(&recur_alist_p, &date, recur_apoint_inday, i) { + struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); - if (regex && regexec(regex, rapt->mesg, 0, 0, 0) != 0) - continue; + if (regex && regexec(regex, rapt->mesg, 0, 0, 0) != 0) + continue; - p.rapt = rapt; + p.rapt = rapt; - unsigned real_start; - if (recur_apoint_find_occurrence(rapt, date, &real_start)) { - day_add_item(RECUR_APPT, real_start, p); - a_nb++; - } - } - LLIST_TS_UNLOCK(&recur_alist_p); + unsigned real_start; + if (recur_apoint_find_occurrence(rapt, date, &real_start)) { + day_add_item(RECUR_APPT, real_start, p); + a_nb++; + } + } + LLIST_TS_UNLOCK(&recur_alist_p); - return a_nb; + return a_nb; } /* @@ -335,25 +336,25 @@ static int day_store_recur_apoints(long date, regex_t *regex) */ int day_store_items(long date, unsigned *pnb_events, unsigned *pnb_apoints, - regex_t *regex) + regex_t * regex) { - int nb_events, nb_recur_events; - int nb_apoints, nb_recur_apoints; + int nb_events, nb_recur_events; + int nb_apoints, nb_recur_apoints; - day_free_list(); - day_init_list(); + day_free_list(); + day_init_list(); - nb_recur_events = day_store_recur_events(date, regex); - nb_events = day_store_events(date, regex); - nb_recur_apoints = day_store_recur_apoints(date, regex); - nb_apoints = day_store_apoints(date, regex); + nb_recur_events = day_store_recur_events(date, regex); + nb_events = day_store_events(date, regex); + nb_recur_apoints = day_store_recur_apoints(date, regex); + nb_apoints = day_store_apoints(date, regex); - if (pnb_apoints) - *pnb_apoints = nb_apoints + nb_recur_apoints; - if (pnb_events) - *pnb_events = nb_events + nb_recur_events; + if (pnb_apoints) + *pnb_apoints = nb_apoints + nb_recur_apoints; + if (pnb_events) + *pnb_events = nb_events + nb_recur_events; - return nb_events + nb_recur_events + nb_apoints + nb_recur_apoints; + return nb_events + nb_recur_events + nb_apoints + nb_recur_apoints; } /* @@ -362,68 +363,69 @@ day_store_items(long date, unsigned *pnb_events, unsigned *pnb_apoints, * day. This is useful to speed up the appointment panel update. */ struct day_items_nb day_process_storage(struct date *slctd_date, - unsigned day_changed) + unsigned day_changed) { - long date; - struct date day; - struct day_items_nb inday; + long date; + struct date day; + struct day_items_nb inday; - if (slctd_date) - day = *slctd_date; - else - ui_calendar_store_current_date(&day); + if (slctd_date) + day = *slctd_date; + else + ui_calendar_store_current_date(&day); - date = date2sec(day, 0, 0); + date = date2sec(day, 0, 0); - /* Inits */ - if (apad.length != 0) - delwin(apad.ptrwin); + /* Inits */ + if (apad.length != 0) + delwin(apad.ptrwin); - /* Store the events and appointments (recursive and normal items). */ - day_store_items(date, &inday.nb_events, &inday.nb_apoints, NULL); - apad.length = (inday.nb_events + 1 + 3 * inday.nb_apoints); + /* Store the events and appointments (recursive and normal items). */ + day_store_items(date, &inday.nb_events, &inday.nb_apoints, NULL); + apad.length = (inday.nb_events + 1 + 3 * inday.nb_apoints); - /* Create the new pad with its new length. */ - if (day_changed) - apad.first_onscreen = 0; - apad.ptrwin = newpad(apad.length, apad.width); + /* Create the new pad with its new length. */ + if (day_changed) + apad.first_onscreen = 0; + apad.ptrwin = newpad(apad.length, apad.width); - return inday; + return inday; } /* * Print an item date in the appointment panel. */ static void -display_item_date(struct day_item *day, int incolor, long date, int y, int x) -{ - WINDOW *win; - char a_st[100], a_end[100]; - - /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary - * appointment item here. */ - struct apoint apt_tmp; - apt_tmp.start = day->start; - apt_tmp.dur = day_item_get_duration(day); - - win = apad.ptrwin; - apoint_sec2str(&apt_tmp, date, a_st, a_end); - if (incolor == 0) - custom_apply_attr(win, ATTR_HIGHEST); - - if (day->type == RECUR_EVNT || day->type == RECUR_APPT) { - if (day_item_get_state(day) & APOINT_NOTIFY) - mvwprintw(win, y, x, " *!%s -> %s", a_st, a_end); - else - mvwprintw(win, y, x, " * %s -> %s", a_st, a_end); - } else if (day_item_get_state(day) & APOINT_NOTIFY) { - mvwprintw(win, y, x, " -!%s -> %s", a_st, a_end); - } else { - mvwprintw(win, y, x, " - %s -> %s", a_st, a_end); - } - - if (incolor == 0) - custom_remove_attr(win, ATTR_HIGHEST); +display_item_date(struct day_item *day, int incolor, long date, int y, + int x) +{ + WINDOW *win; + char a_st[100], a_end[100]; + + /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary + * appointment item here. */ + struct apoint apt_tmp; + apt_tmp.start = day->start; + apt_tmp.dur = day_item_get_duration(day); + + win = apad.ptrwin; + apoint_sec2str(&apt_tmp, date, a_st, a_end); + if (incolor == 0) + custom_apply_attr(win, ATTR_HIGHEST); + + if (day->type == RECUR_EVNT || day->type == RECUR_APPT) { + if (day_item_get_state(day) & APOINT_NOTIFY) + mvwprintw(win, y, x, " *!%s -> %s", a_st, a_end); + else + mvwprintw(win, y, x, " * %s -> %s", a_st, a_end); + } else if (day_item_get_state(day) & APOINT_NOTIFY) { + mvwprintw(win, y, x, " -!%s -> %s", a_st, a_end); + } else { + mvwprintw(win, y, x, " - %s -> %s", a_st, a_end); + } + + if (incolor == 0) + custom_remove_attr(win, ATTR_HIGHEST); } /* @@ -432,37 +434,38 @@ display_item_date(struct day_item *day, int incolor, long date, int y, int x) static void display_item(struct day_item *day, int incolor, int width, int y, int x) { - WINDOW *win; - int ch_recur, ch_note; - char buf[width * UTF8_MAXLEN]; - int i; - - if (width <= 0) - return; - - char *mesg = day_item_get_mesg(day); - - win = apad.ptrwin; - ch_recur = (day->type == RECUR_EVNT || day->type == RECUR_APPT) ? '*' : ' '; - ch_note = day_item_get_note(day) ? '>' : ' '; - if (incolor == 0) - custom_apply_attr(win, ATTR_HIGHEST); - if (utf8_strwidth(mesg) < width) { - mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_note, mesg); - } else { - for (i = 0; mesg[i] && width > 0; i++) { - if (!UTF8_ISCONT(mesg[i])) - width -= utf8_width(&mesg[i]); - buf[i] = mesg[i]; - } - if (i) - buf[i - 1] = 0; - else - buf[0] = 0; - mvwprintw(win, y, x, " %c%c%s...", ch_recur, ch_note, buf); - } - if (incolor == 0) - custom_remove_attr(win, ATTR_HIGHEST); + WINDOW *win; + int ch_recur, ch_note; + char buf[width * UTF8_MAXLEN]; + int i; + + if (width <= 0) + return; + + char *mesg = day_item_get_mesg(day); + + win = apad.ptrwin; + ch_recur = (day->type == RECUR_EVNT + || day->type == RECUR_APPT) ? '*' : ' '; + ch_note = day_item_get_note(day) ? '>' : ' '; + if (incolor == 0) + custom_apply_attr(win, ATTR_HIGHEST); + if (utf8_strwidth(mesg) < width) { + mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_note, mesg); + } else { + for (i = 0; mesg[i] && width > 0; i++) { + if (!UTF8_ISCONT(mesg[i])) + width -= utf8_width(&mesg[i]); + buf[i] = mesg[i]; + } + if (i) + buf[i - 1] = 0; + else + buf[0] = 0; + mvwprintw(win, y, x, " %c%c%s...", ch_recur, ch_note, buf); + } + if (incolor == 0) + custom_remove_attr(win, ATTR_HIGHEST); } /* @@ -472,87 +475,94 @@ display_item(struct day_item *day, int incolor, int width, int y, int x) */ void day_write_pad(long date, int width, int length, int incolor) { - llist_item_t *i; - int line, item_number; - const int x_pos = 0; - unsigned draw_line = 0; - - line = item_number = 0; - - LLIST_FOREACH(&day_items, i) { - struct day_item *day = LLIST_TS_GET_DATA(i); - - /* First print the events for current day. */ - if (day->type < RECUR_APPT) { - item_number++; - display_item(day, item_number - incolor, width - 7, line, x_pos); - line++; - draw_line = 1; - } else { - /* Draw a line between events and appointments. */ - if (line > 0 && draw_line) { - wmove(apad.ptrwin, line, 0); - whline(apad.ptrwin, 0, width); - draw_line = 0; - } - /* Last print the appointments for current day. */ - item_number++; - display_item_date(day, item_number - incolor, date, line + 1, x_pos); - display_item(day, item_number - incolor, width - 7, line + 2, x_pos); - line += 3; - } - } + llist_item_t *i; + int line, item_number; + const int x_pos = 0; + unsigned draw_line = 0; + + line = item_number = 0; + + LLIST_FOREACH(&day_items, i) { + struct day_item *day = LLIST_TS_GET_DATA(i); + + /* First print the events for current day. */ + if (day->type < RECUR_APPT) { + item_number++; + display_item(day, item_number - incolor, width - 7, + line, x_pos); + line++; + draw_line = 1; + } else { + /* Draw a line between events and appointments. */ + if (line > 0 && draw_line) { + wmove(apad.ptrwin, line, 0); + whline(apad.ptrwin, 0, width); + draw_line = 0; + } + /* Last print the appointments for current day. */ + item_number++; + display_item_date(day, item_number - incolor, date, + line + 1, x_pos); + display_item(day, item_number - incolor, width - 7, + line + 2, x_pos); + line += 3; + } + } } /* Write the appointments and events for the selected day to stdout. */ void day_write_stdout(long date, const char *fmt_apt, const char *fmt_rapt, - const char *fmt_ev, const char *fmt_rev) -{ - llist_item_t *i; - - LLIST_FOREACH(&day_items, i) { - struct day_item *day = LLIST_TS_GET_DATA(i); - - switch (day->type) { - case APPT: - print_apoint(fmt_apt, date, day->item.apt); - break; - case EVNT: - print_event(fmt_ev, date, day->item.ev); - break; - case RECUR_APPT: - print_recur_apoint(fmt_rapt, date, day->start, day->item.rapt); - break; - case RECUR_EVNT: - print_recur_event(fmt_rev, date, day->item.rev); - break; - default: - EXIT(_("unknown item type")); - /* NOTREACHED */ - } - } + const char *fmt_ev, const char *fmt_rev) +{ + llist_item_t *i; + + LLIST_FOREACH(&day_items, i) { + struct day_item *day = LLIST_TS_GET_DATA(i); + + switch (day->type) { + case APPT: + print_apoint(fmt_apt, date, day->item.apt); + break; + case EVNT: + print_event(fmt_ev, date, day->item.ev); + break; + case RECUR_APPT: + print_recur_apoint(fmt_rapt, date, day->start, + day->item.rapt); + break; + case RECUR_EVNT: + print_recur_event(fmt_rev, date, day->item.rev); + break; + default: + EXIT(_("unknown item type")); + /* NOTREACHED */ + } + } } /* Display an item inside a popup window. */ void day_popup_item(struct day_item *day) { - if (day->type == EVNT || day->type == RECUR_EVNT) { - item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event :")); - } else if (day->type == APPT || day->type == RECUR_APPT) { - char a_st[100], a_end[100]; + if (day->type == EVNT || day->type == RECUR_EVNT) { + item_in_popup(NULL, NULL, day_item_get_mesg(day), + _("Event :")); + } else if (day->type == APPT || day->type == RECUR_APPT) { + char a_st[100], a_end[100]; - /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary - * appointment item here. */ - struct apoint apt_tmp; - apt_tmp.start = day->start; - apt_tmp.dur = day_item_get_duration(day); - apoint_sec2str(&apt_tmp, ui_calendar_get_slctd_day_sec(), a_st, a_end); + /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary + * appointment item here. */ + struct apoint apt_tmp; + apt_tmp.start = day->start; + apt_tmp.dur = day_item_get_duration(day); + apoint_sec2str(&apt_tmp, ui_calendar_get_slctd_day_sec(), + a_st, a_end); - item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment :")); - } else { - EXIT(_("unknown item type")); - /* NOTREACHED */ - } + item_in_popup(a_st, a_end, day_item_get_mesg(day), + _("Appointment :")); + } else { + EXIT(_("unknown item type")); + /* NOTREACHED */ + } } /* @@ -561,45 +571,47 @@ void day_popup_item(struct day_item *day) */ int day_check_if_item(struct date day) { - const long date = date2sec(day, 0, 0); + const long date = date2sec(day, 0, 0); - if (LLIST_FIND_FIRST(&recur_elist, (long *)&date, recur_event_inday)) - return 1; + if (LLIST_FIND_FIRST + (&recur_elist, (long *)&date, recur_event_inday)) + return 1; - LLIST_TS_LOCK(&recur_alist_p); - if (LLIST_TS_FIND_FIRST(&recur_alist_p, (long *)&date, recur_apoint_inday)) { - LLIST_TS_UNLOCK(&recur_alist_p); - return 1; - } - LLIST_TS_UNLOCK(&recur_alist_p); + LLIST_TS_LOCK(&recur_alist_p); + if (LLIST_TS_FIND_FIRST + (&recur_alist_p, (long *)&date, recur_apoint_inday)) { + LLIST_TS_UNLOCK(&recur_alist_p); + return 1; + } + LLIST_TS_UNLOCK(&recur_alist_p); - if (LLIST_FIND_FIRST(&eventlist, (long *)&date, event_inday)) - return 1; + if (LLIST_FIND_FIRST(&eventlist, (long *)&date, event_inday)) + return 1; - LLIST_TS_LOCK(&alist_p); - if (LLIST_TS_FIND_FIRST(&alist_p, (long *)&date, apoint_inday)) { - LLIST_TS_UNLOCK(&alist_p); - return 1; - } - LLIST_TS_UNLOCK(&alist_p); + LLIST_TS_LOCK(&alist_p); + if (LLIST_TS_FIND_FIRST(&alist_p, (long *)&date, apoint_inday)) { + LLIST_TS_UNLOCK(&alist_p); + return 1; + } + LLIST_TS_UNLOCK(&alist_p); - return 0; + return 0; } static unsigned fill_slices(int *slices, int slicesno, int first, int last) { - int i; + int i; - if (first < 0 || last < first) - return 0; + if (first < 0 || last < first) + return 0; - if (last >= slicesno) - last = slicesno - 1; /* Appointment spanning more than one day. */ + if (last >= slicesno) + last = slicesno - 1; /* Appointment spanning more than one day. */ - for (i = first; i <= last; i++) - slices[i] = 1; + for (i = first; i <= last; i++) + slices[i] = 1; - return 1; + return 1; } /* @@ -609,153 +621,156 @@ static unsigned fill_slices(int *slices, int slicesno, int first, int last) */ unsigned day_chk_busy_slices(struct date day, int slicesno, int *slices) { - llist_item_t *i; - int slicelen; - const long date = date2sec(day, 0, 0); + llist_item_t *i; + int slicelen; + const long date = date2sec(day, 0, 0); - slicelen = DAYINSEC / slicesno; + slicelen = DAYINSEC / slicesno; #define SLICENUM(tsec) ((tsec) / slicelen % slicesno) - LLIST_TS_LOCK(&recur_alist_p); - LLIST_TS_FIND_FOREACH(&recur_alist_p, (long *)&date, recur_apoint_inday, i) { - struct apoint *rapt = LLIST_TS_GET_DATA(i); - long start = get_item_time(rapt->start); - long end = get_item_time(rapt->start + rapt->dur); - - if (rapt->start < date) - start = 0; - if (rapt->start + rapt->dur >= date + DAYINSEC) - end = DAYINSEC - 1; - - if (!fill_slices(slices, slicesno, SLICENUM(start), SLICENUM(end))) { - LLIST_TS_UNLOCK(&recur_alist_p); - return 0; - } - } - LLIST_TS_UNLOCK(&recur_alist_p); - - LLIST_TS_LOCK(&alist_p); - LLIST_TS_FIND_FOREACH(&alist_p, (long *)&date, apoint_inday, i) { - struct apoint *apt = LLIST_TS_GET_DATA(i); - long start = get_item_time(apt->start); - long end = get_item_time(apt->start + apt->dur); - - if (apt->start >= date + DAYINSEC) - break; - if (apt->start < date) - start = 0; - if (apt->start + apt->dur >= date + DAYINSEC) - end = DAYINSEC - 1; - - if (!fill_slices(slices, slicesno, SLICENUM(start), SLICENUM(end))) { - LLIST_TS_UNLOCK(&alist_p); - return 0; - } - } - LLIST_TS_UNLOCK(&alist_p); + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FIND_FOREACH(&recur_alist_p, (long *)&date, + recur_apoint_inday, i) { + struct apoint *rapt = LLIST_TS_GET_DATA(i); + long start = get_item_time(rapt->start); + long end = get_item_time(rapt->start + rapt->dur); + + if (rapt->start < date) + start = 0; + if (rapt->start + rapt->dur >= date + DAYINSEC) + end = DAYINSEC - 1; + + if (!fill_slices + (slices, slicesno, SLICENUM(start), SLICENUM(end))) { + LLIST_TS_UNLOCK(&recur_alist_p); + return 0; + } + } + LLIST_TS_UNLOCK(&recur_alist_p); + + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FIND_FOREACH(&alist_p, (long *)&date, apoint_inday, i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + long start = get_item_time(apt->start); + long end = get_item_time(apt->start + apt->dur); + + if (apt->start >= date + DAYINSEC) + break; + if (apt->start < date) + start = 0; + if (apt->start + apt->dur >= date + DAYINSEC) + end = DAYINSEC - 1; + + if (!fill_slices + (slices, slicesno, SLICENUM(start), SLICENUM(end))) { + LLIST_TS_UNLOCK(&alist_p); + return 0; + } + } + LLIST_TS_UNLOCK(&alist_p); #undef SLICENUM - return 1; + return 1; } /* Cut an item so it can be pasted somewhere else later. */ struct day_item *day_cut_item(long date, int item_number) { - struct day_item *p = day_get_item(item_number); - - switch (p->type) { - case EVNT: - event_delete(p->item.ev); - break; - case RECUR_EVNT: - recur_event_erase(p->item.rev); - break; - case APPT: - apoint_delete(p->item.apt); - break; - case RECUR_APPT: - recur_apoint_erase(p->item.rapt); - break; - default: - EXIT(_("unknwon type")); - /* NOTREACHED */ - } - - return p; + struct day_item *p = day_get_item(item_number); + + switch (p->type) { + case EVNT: + event_delete(p->item.ev); + break; + case RECUR_EVNT: + recur_event_erase(p->item.rev); + break; + case APPT: + apoint_delete(p->item.apt); + break; + case RECUR_APPT: + recur_apoint_erase(p->item.rapt); + break; + default: + EXIT(_("unknwon type")); + /* NOTREACHED */ + } + + return p; } /* Paste a previously cut item. */ int day_paste_item(struct day_item *p, long date) { - switch (p->type) { - case 0: - return 0; - case EVNT: - event_paste_item(p->item.ev, date); - break; - case RECUR_EVNT: - recur_event_paste_item(p->item.rev, date); - break; - case APPT: - apoint_paste_item(p->item.apt, date); - break; - case RECUR_APPT: - recur_apoint_paste_item(p->item.rapt, date); - break; - default: - EXIT(_("unknwon type")); - /* NOTREACHED */ - } - - return p->type; + switch (p->type) { + case 0: + return 0; + case EVNT: + event_paste_item(p->item.ev, date); + break; + case RECUR_EVNT: + recur_event_paste_item(p->item.rev, date); + break; + case APPT: + apoint_paste_item(p->item.apt, date); + break; + case RECUR_APPT: + recur_apoint_paste_item(p->item.rapt, date); + break; + default: + EXIT(_("unknwon type")); + /* NOTREACHED */ + } + + return p->type; } /* Returns a structure containing the selected item. */ struct day_item *day_get_item(int item_number) { - return LLIST_GET_DATA(LLIST_NTH(&day_items, item_number - 1)); + return LLIST_GET_DATA(LLIST_NTH(&day_items, item_number - 1)); } /* Attach a note to an appointment or event. */ void day_edit_note(struct day_item *p, const char *editor) { - char *note; + char *note; - note = day_item_get_note(p); - edit_note(¬e, editor); + note = day_item_get_note(p); + edit_note(¬e, editor); - switch (p->type) { - case RECUR_EVNT: - p->item.rev->note = note; - break; - case EVNT: - p->item.ev->note = note; - break; - case RECUR_APPT: - p->item.rapt->note = note; - break; - case APPT: - p->item.apt->note = note; - break; - } + switch (p->type) { + case RECUR_EVNT: + p->item.rev->note = note; + break; + case EVNT: + p->item.ev->note = note; + break; + case RECUR_APPT: + p->item.rapt->note = note; + break; + case APPT: + p->item.apt->note = note; + break; + } } /* View a note previously attached to an appointment or event */ void day_view_note(struct day_item *p, const char *pager) { - view_note(day_item_get_note(p), pager); + view_note(day_item_get_note(p), pager); } /* Switch notification state for an item. */ void day_item_switch_notify(struct day_item *p) { - switch (p->type) { - case RECUR_APPT: - recur_apoint_switch_notify(p->item.rapt); - break; - case APPT: - apoint_switch_notify(p->item.apt); - break; - } + switch (p->type) { + case RECUR_APPT: + recur_apoint_switch_notify(p->item.rapt); + break; + case APPT: + apoint_switch_notify(p->item.apt); + break; + } } |