diff options
-rw-r--r-- | src/apoint.c | 622 | ||||
-rw-r--r-- | src/args.c | 1177 | ||||
-rw-r--r-- | src/calcurse.c | 891 | ||||
-rw-r--r-- | src/calcurse.h | 952 | ||||
-rw-r--r-- | src/calendar.c | 821 | ||||
-rw-r--r-- | src/config.c | 554 | ||||
-rw-r--r-- | src/custom.c | 1520 | ||||
-rw-r--r-- | src/day.c | 1272 | ||||
-rw-r--r-- | src/dmon.c | 179 | ||||
-rw-r--r-- | src/event.c | 162 | ||||
-rw-r--r-- | src/getstring.c | 275 | ||||
-rw-r--r-- | src/help.c | 1172 | ||||
-rw-r--r-- | src/htable.h | 2 | ||||
-rw-r--r-- | src/ical.c | 1471 | ||||
-rw-r--r-- | src/io.c | 1573 | ||||
-rw-r--r-- | src/keys.c | 613 | ||||
-rw-r--r-- | src/llist.c | 200 | ||||
-rw-r--r-- | src/llist.h | 30 | ||||
-rw-r--r-- | src/llist_ts.h | 7 | ||||
-rw-r--r-- | src/mem.c | 196 | ||||
-rw-r--r-- | src/note.c | 220 | ||||
-rw-r--r-- | src/notify.c | 834 | ||||
-rw-r--r-- | src/pcal.c | 368 | ||||
-rw-r--r-- | src/recur.c | 1213 | ||||
-rw-r--r-- | src/sha1.c | 224 | ||||
-rw-r--r-- | src/sha1.h | 10 | ||||
-rw-r--r-- | src/sigs.c | 67 | ||||
-rw-r--r-- | src/todo.c | 421 | ||||
-rw-r--r-- | src/utf8.c | 545 | ||||
-rw-r--r-- | src/utils.c | 1438 | ||||
-rw-r--r-- | src/vars.c | 20 | ||||
-rw-r--r-- | src/wins.c | 785 | ||||
-rw-r--r-- | test/run-test.c | 211 |
33 files changed, 9268 insertions, 10777 deletions
diff --git a/src/apoint.c b/src/apoint.c index 9bcde1b..1483beb 100644 --- a/src/apoint.c +++ b/src/apoint.c @@ -41,46 +41,41 @@ #include "calcurse.h" -llist_ts_t alist_p; -static struct apoint bkp_cut_apoint; -static int hilt; +llist_ts_t alist_p; +static struct apoint bkp_cut_apoint; +static int hilt; -void -apoint_free_bkp (void) +void apoint_free_bkp(void) { - if (bkp_cut_apoint.mesg) - { - mem_free (bkp_cut_apoint.mesg); - bkp_cut_apoint.mesg = 0; - } - erase_note (&bkp_cut_apoint.note); + if (bkp_cut_apoint.mesg) { + mem_free(bkp_cut_apoint.mesg); + bkp_cut_apoint.mesg = 0; + } + erase_note(&bkp_cut_apoint.note); } -static void -apoint_free (struct apoint *apt) +static void apoint_free(struct apoint *apt) { - mem_free (apt->mesg); - erase_note (&apt->note); - mem_free (apt); + mem_free(apt->mesg); + erase_note(&apt->note); + mem_free(apt); } -static void -apoint_dup (struct apoint *in, struct apoint *bkp) +static void apoint_dup(struct apoint *in, struct apoint *bkp) { - EXIT_IF (!in || !bkp, _("null pointer")); + EXIT_IF(!in || !bkp, _("null pointer")); bkp->start = in->start; bkp->dur = in->dur; bkp->state = in->state; - bkp->mesg = mem_strdup (in->mesg); + bkp->mesg = mem_strdup(in->mesg); if (in->note) - bkp->note = mem_strdup (in->note); + bkp->note = mem_strdup(in->note); } -void -apoint_llist_init (void) +void apoint_llist_init(void) { - LLIST_TS_INIT (&alist_p); + LLIST_TS_INIT(&alist_p); } /* @@ -88,60 +83,54 @@ apoint_llist_init (void) * list. No need to be thread safe, as only the main process remains when * calling this function. */ -void -apoint_llist_free (void) +void apoint_llist_free(void) { - LLIST_TS_FREE_INNER (&alist_p, apoint_free); - LLIST_TS_FREE (&alist_p); + LLIST_TS_FREE_INNER(&alist_p, apoint_free); + LLIST_TS_FREE(&alist_p); } /* Sets which appointment is highlighted. */ -void -apoint_hilt_set (int highlighted) +void apoint_hilt_set(int highlighted) { hilt = highlighted; } -void -apoint_hilt_decrease (int n) +void apoint_hilt_decrease(int n) { hilt -= n; } -void -apoint_hilt_increase (int n) +void apoint_hilt_increase(int n) { hilt += n; } /* Return which appointment is highlighted. */ -int -apoint_hilt (void) +int apoint_hilt(void) { return hilt; } -static int -apoint_cmp_start (struct apoint *a, struct apoint *b) +static int apoint_cmp_start(struct apoint *a, struct apoint *b) { return a->start < b->start ? -1 : (a->start == b->start ? 0 : 1); } -struct apoint * -apoint_new (char *mesg, char *note, long start, long dur, char state) +struct apoint *apoint_new(char *mesg, char *note, long start, long dur, + char state) { struct apoint *apt; - apt = mem_malloc (sizeof (struct apoint)); - apt->mesg = mem_strdup (mesg); - apt->note = (note != NULL) ? mem_strdup (note) : NULL; + apt = mem_malloc(sizeof(struct apoint)); + apt->mesg = mem_strdup(mesg); + apt->note = (note != NULL) ? mem_strdup(note) : NULL; apt->state = state; apt->start = start; apt->dur = dur; - LLIST_TS_LOCK (&alist_p); - LLIST_TS_ADD_SORTED (&alist_p, apt, apoint_cmp_start); - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_ADD_SORTED(&alist_p, apt, apoint_cmp_start); + LLIST_TS_UNLOCK(&alist_p); return apt; } @@ -150,20 +139,21 @@ apoint_new (char *mesg, char *note, long start, long dur, char state) * Add an item in either the appointment or the event list, * depending if the start time is entered or not. */ -void -apoint_add (void) +void apoint_add(void) { #define LTIME 6 #define LDUR 12 const char *mesg_1 = - _("Enter start time ([hh:mm]), leave blank for an all-day event : "); + _("Enter start time ([hh:mm]), leave blank for an all-day event : "); const char *mesg_2 = - _("Enter end time ([hh:mm]) or duration ([+hh:mm], [+xxxdxxhxxm] or [+mm]) : "); + _ + ("Enter end time ([hh:mm]) or duration ([+hh:mm], [+xxxdxxhxxm] or [+mm]) : "); const char *mesg_3 = _("Enter description :"); const char *format_message_1 = - _("You entered an invalid start time, should be [hh:mm]"); + _("You entered an invalid start time, should be [hh:mm]"); const char *format_message_2 = - _("Invalid end time/duration, should be [hh:mm], [+hh:mm], [+xxxdxxhxxm] or [+mm]"); + _ + ("Invalid end time/duration, should be [hh:mm], [+hh:mm], [+xxxdxxhxxm] or [+mm]"); const char *enter_str = _("Press [Enter] to continue"); int Id = 1; char item_time[LDUR] = ""; @@ -175,147 +165,122 @@ apoint_add (void) int is_appointment = 1; /* Get the starting time */ - for (;;) - { - status_mesg (mesg_1, ""); - if (getstring (win[STA].p, item_time, LTIME, 0, 1) != GETSTRING_ESC) - { - if (strlen (item_time) == 0) - { - is_appointment = 0; - break; - } - - if (parse_time (item_time, &heures, &minutes) == 1) - break; - else - { - status_mesg (format_message_1, enter_str); - wgetch (win[STA].p); - } - } - else - return; - } + for (;;) { + status_mesg(mesg_1, ""); + if (getstring(win[STA].p, item_time, LTIME, 0, 1) != GETSTRING_ESC) { + if (strlen(item_time) == 0) { + is_appointment = 0; + break; + } + + if (parse_time(item_time, &heures, &minutes) == 1) + break; + else { + status_mesg(format_message_1, enter_str); + wgetch(win[STA].p); + } + } else + return; + } /* * Check if an event or appointment is entered, * depending on the starting time, and record the * corresponding item. */ - if (is_appointment) - { /* Get the appointment duration */ - item_time[0] = '\0'; - for (;;) - { - status_mesg (mesg_2, ""); - if (getstring (win[STA].p, item_time, LDUR, 0, 1) != GETSTRING_ESC) - { - if (*item_time == '+' && parse_duration (item_time + 1, - &apoint_duration) == 1) - break; - else if (parse_time (item_time, &end_h, &end_m) == 1) - { - if (end_h < heures || ((end_h == heures) && (end_m < minutes))) - { - apoint_duration = MININSEC - minutes + end_m - + (24 + end_h - (heures + 1)) * MININSEC; - } - else - { - apoint_duration = MININSEC - minutes - + end_m + (end_h - (heures + 1)) * MININSEC; - } - break; - } - else - { - status_mesg (format_message_2, enter_str); - wgetch (win[STA].p); - } - } - else - return; + if (is_appointment) { /* Get the appointment duration */ + item_time[0] = '\0'; + for (;;) { + status_mesg(mesg_2, ""); + if (getstring(win[STA].p, item_time, LDUR, 0, 1) != GETSTRING_ESC) { + if (*item_time == '+' && parse_duration(item_time + 1, + &apoint_duration) == 1) + break; + else if (parse_time(item_time, &end_h, &end_m) == 1) { + if (end_h < heures || ((end_h == heures) && (end_m < minutes))) { + apoint_duration = MININSEC - minutes + end_m + + (24 + end_h - (heures + 1)) * MININSEC; + } else { + apoint_duration = MININSEC - minutes + + end_m + (end_h - (heures + 1)) * MININSEC; + } + break; + } else { + status_mesg(format_message_2, enter_str); + wgetch(win[STA].p); } + } else + return; } - else /* Insert the event Id */ + } else /* Insert the event Id */ Id = 1; - status_mesg (mesg_3, ""); - if (getstring (win[STA].p, item_mesg, BUFSIZ, 0, 1) == GETSTRING_VALID) - { - if (is_appointment) - { - apoint_start = date2sec (*calendar_get_slctd_day (), heures, minutes); - apoint_new (item_mesg, 0L, apoint_start, min2sec (apoint_duration), 0L); - if (notify_bar ()) - notify_check_added (item_mesg, apoint_start, 0L); - } - else - event_new (item_mesg, 0L, date2sec (*calendar_get_slctd_day (), 0, 0), Id); - - if (hilt == 0) - hilt++; - } - wins_erase_status_bar (); + status_mesg(mesg_3, ""); + if (getstring(win[STA].p, item_mesg, BUFSIZ, 0, 1) == GETSTRING_VALID) { + if (is_appointment) { + apoint_start = date2sec(*calendar_get_slctd_day(), heures, minutes); + apoint_new(item_mesg, 0L, apoint_start, min2sec(apoint_duration), 0L); + if (notify_bar()) + notify_check_added(item_mesg, apoint_start, 0L); + } else + event_new(item_mesg, 0L, date2sec(*calendar_get_slctd_day(), 0, 0), Id); + + if (hilt == 0) + hilt++; + } + wins_erase_status_bar(); } /* Delete an item from the appointment list. */ -void -apoint_delete (unsigned *nb_events, unsigned *nb_apoints) +void apoint_delete(unsigned *nb_events, unsigned *nb_apoints) { const char *del_app_str = _("Do you really want to delete this item ?"); long date; int nb_items = *nb_apoints + *nb_events; int to_be_removed = 0; - date = calendar_get_slctd_day_sec (); + date = calendar_get_slctd_day_sec(); if (nb_items == 0) return; - if (conf.confirm_delete) - { - if (status_ask_bool (del_app_str) != 1) - { - wins_erase_status_bar (); - return; - } + if (conf.confirm_delete) { + if (status_ask_bool(del_app_str) != 1) { + wins_erase_status_bar(); + return; } + } - if (nb_items != 0) - { - switch (day_erase_item (date, hilt, ERASE_DONT_FORCE)) - { - case EVNT: - case RECUR_EVNT: - (*nb_events)--; - to_be_removed = 1; - break; - case APPT: - case RECUR_APPT: - (*nb_apoints)--; - to_be_removed = 3; - break; - case 0: - return; - default: - EXIT (_("no such type")); - /* NOTREACHED */ - } + if (nb_items != 0) { + switch (day_erase_item(date, hilt, ERASE_DONT_FORCE)) { + case EVNT: + case RECUR_EVNT: + (*nb_events)--; + to_be_removed = 1; + break; + case APPT: + case RECUR_APPT: + (*nb_apoints)--; + to_be_removed = 3; + break; + case 0: + return; + default: + EXIT(_("no such type")); + /* NOTREACHED */ + } - if (hilt > 1) - hilt--; - if (apad.first_onscreen >= to_be_removed) - apad.first_onscreen = apad.first_onscreen - to_be_removed; - if (nb_items == 1) - hilt = 0; - } + if (hilt > 1) + hilt--; + if (apad.first_onscreen >= to_be_removed) + apad.first_onscreen = apad.first_onscreen - to_be_removed; + if (nb_items == 1) + hilt = 0; + } } /* Cut an item, so that it can be pasted somewhere else later. */ -int -apoint_cut (unsigned *nb_events, unsigned *nb_apoints) +int apoint_cut(unsigned *nb_events, unsigned *nb_apoints) { const int NBITEMS = *nb_apoints + *nb_events; int item_type, to_be_removed; @@ -324,20 +289,16 @@ apoint_cut (unsigned *nb_events, unsigned *nb_apoints) if (NBITEMS == 0) return 0; - date = calendar_get_slctd_day_sec (); - item_type = day_cut_item (date, hilt); - if (item_type == EVNT || item_type == RECUR_EVNT) - { - (*nb_events)--; - to_be_removed = 1; - } - else if (item_type == APPT || item_type == RECUR_APPT) - { - (*nb_apoints)--; - to_be_removed = 3; - } - else - EXIT (_("no such type")); + date = calendar_get_slctd_day_sec(); + item_type = day_cut_item(date, hilt); + if (item_type == EVNT || item_type == RECUR_EVNT) { + (*nb_events)--; + to_be_removed = 1; + } else if (item_type == APPT || item_type == RECUR_APPT) { + (*nb_apoints)--; + to_be_removed = 3; + } else + EXIT(_("no such type")); /* NOTREACHED */ if (hilt > 1) @@ -351,14 +312,13 @@ apoint_cut (unsigned *nb_events, unsigned *nb_apoints) } /* Paste a previously cut item. */ -void -apoint_paste (unsigned *nb_events, unsigned *nb_apoints, int cut_item_type) +void apoint_paste(unsigned *nb_events, unsigned *nb_apoints, int cut_item_type) { int item_type; long date; - date = calendar_get_slctd_day_sec (); - item_type = day_paste_item (date, cut_item_type); + date = calendar_get_slctd_day_sec(); + item_type = day_paste_item(date, cut_item_type); if (item_type == EVNT || item_type == RECUR_EVNT) (*nb_events)++; else if (item_type == APPT || item_type == RECUR_APPT) @@ -370,77 +330,72 @@ apoint_paste (unsigned *nb_events, unsigned *nb_apoints, int cut_item_type) hilt++; } -unsigned -apoint_inday (struct apoint *i, long start) +unsigned apoint_inday(struct apoint *i, long start) { return (i->start <= start + DAYINSEC && i->start + i->dur > start); } -void -apoint_sec2str (struct apoint *o, long day, char *start, char *end) +void apoint_sec2str(struct apoint *o, long day, char *start, char *end) { struct tm *lt; time_t t; if (o->start < day) - strncpy (start, "..:..", 6); - else - { - t = o->start; - lt = localtime (&t); - snprintf (start, HRMIN_SIZE, "%02u:%02u", lt->tm_hour, lt->tm_min); - } + strncpy(start, "..:..", 6); + else { + t = o->start; + lt = localtime(&t); + snprintf(start, HRMIN_SIZE, "%02u:%02u", lt->tm_hour, lt->tm_min); + } if (o->start + o->dur > day + DAYINSEC) - strncpy (end, "..:..", 6); - else - { - t = o->start + o->dur; - lt = localtime (&t); - snprintf (end, HRMIN_SIZE, "%02u:%02u", lt->tm_hour, lt->tm_min); - } + strncpy(end, "..:..", 6); + else { + t = o->start + o->dur; + lt = localtime(&t); + snprintf(end, HRMIN_SIZE, "%02u:%02u", lt->tm_hour, lt->tm_min); + } } -void -apoint_write (struct apoint *o, FILE *f) +void apoint_write(struct apoint *o, FILE * f) { struct tm *lt; time_t t; t = o->start; - lt = localtime (&t); - fprintf (f, "%02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); + lt = localtime(&t); + fprintf(f, "%02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); t = o->start + o->dur; - lt = localtime (&t); - fprintf (f, " -> %02u/%02u/%04u @ %02u:%02u ", lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); + lt = localtime(&t); + fprintf(f, " -> %02u/%02u/%04u @ %02u:%02u ", lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); if (o->note != NULL) - fprintf (f, ">%s ", o->note); + fprintf(f, ">%s ", o->note); if (o->state & APOINT_NOTIFY) - fputc ('!', f); + fputc('!', f); else - fputc ('|', f); + fputc('|', f); - fprintf (f, "%s\n", o->mesg); + fprintf(f, "%s\n", o->mesg); } -struct apoint * -apoint_scan (FILE *f, struct tm start, struct tm end, char state, char *note) +struct apoint *apoint_scan(FILE * f, struct tm start, struct tm end, char state, + char *note) { char buf[BUFSIZ], *newline; time_t tstart, tend, t; - t = time (NULL); - localtime (&t); + t = time(NULL); + localtime(&t); /* Read the appointment description */ - if (!fgets (buf, sizeof buf, f)) + if (!fgets(buf, sizeof buf, f)) return NULL; - newline = strchr (buf, '\n'); + newline = strchr(buf, '\n'); if (newline) *newline = '\0'; @@ -451,61 +406,58 @@ apoint_scan (FILE *f, struct tm start, struct tm end, char state, char *note) end.tm_year -= 1900; end.tm_mon--; - tstart = mktime (&start); - tend = mktime (&end); - EXIT_IF (tstart == -1 || tend == -1 || tstart > tend, - _("date error in appointment")); - return apoint_new (buf, note, tstart, tend - tstart, state); + tstart = mktime(&start); + tend = mktime(&end); + EXIT_IF(tstart == -1 || tend == -1 || tstart > tend, + _("date error in appointment")); + return apoint_new(buf, note, tstart, tend - tstart, state); } /* Retrieve an appointment from the list, given the day and item position. */ -struct apoint * -apoint_get (long day, int pos) +struct apoint *apoint_get(long day, int pos) { - llist_item_t *i = LLIST_TS_FIND_NTH (&alist_p, pos, day, apoint_inday); + llist_item_t *i = LLIST_TS_FIND_NTH(&alist_p, pos, day, apoint_inday); if (i) - return LLIST_TS_GET_DATA (i); + return LLIST_TS_GET_DATA(i); - EXIT (_("item not found")); + EXIT(_("item not found")); /* NOTREACHED */ } -void -apoint_delete_bynum (long start, unsigned num, enum eraseflg flag) +void apoint_delete_bynum(long start, unsigned num, enum eraseflg flag) { llist_item_t *i; int need_check_notify = 0; - LLIST_TS_LOCK (&alist_p); - i = LLIST_TS_FIND_NTH (&alist_p, num, start, apoint_inday); + LLIST_TS_LOCK(&alist_p); + i = LLIST_TS_FIND_NTH(&alist_p, num, start, apoint_inday); if (!i) - EXIT (_("no such appointment")); - struct apoint *apt = LLIST_TS_GET_DATA (i); - - switch (flag) - { - case ERASE_FORCE_ONLY_NOTE: - erase_note (&apt->note); - break; - case ERASE_CUT: - apoint_free_bkp (); - apoint_dup (apt, &bkp_cut_apoint); - erase_note (&apt->note); - /* FALLTHROUGH */ - default: - if (notify_bar ()) - need_check_notify = notify_same_item (apt->start); - LLIST_TS_REMOVE (&alist_p, i); - mem_free (apt->mesg); - mem_free (apt); - if (need_check_notify) - notify_check_next_app (0); - break; - } - - LLIST_TS_UNLOCK (&alist_p); + EXIT(_("no such appointment")); + struct apoint *apt = LLIST_TS_GET_DATA(i); + + switch (flag) { + case ERASE_FORCE_ONLY_NOTE: + erase_note(&apt->note); + break; + case ERASE_CUT: + apoint_free_bkp(); + apoint_dup(apt, &bkp_cut_apoint); + erase_note(&apt->note); + /* FALLTHROUGH */ + default: + if (notify_bar()) + need_check_notify = notify_same_item(apt->start); + LLIST_TS_REMOVE(&alist_p, i); + mem_free(apt->mesg); + mem_free(apt); + if (need_check_notify) + notify_check_next_app(0); + break; + } + + LLIST_TS_UNLOCK(&alist_p); } /* @@ -513,8 +465,7 @@ apoint_delete_bynum (long start, unsigned num, enum eraseflg flag) * the appointment panel. This is to help the appointment scroll function * to place beggining of the pad correctly. */ -static int -get_item_line (int item_nb, int nb_events_inday) +static int get_item_line(int item_nb, int nb_events_inday) { int separator = 2; int line = 0; @@ -523,7 +474,7 @@ get_item_line (int item_nb, int nb_events_inday) line = item_nb - 1; else line = nb_events_inday + separator - + (item_nb - (nb_events_inday + 1)) * 3 - 1; + + (item_nb - (nb_events_inday + 1)) * 3 - 1; return line; } @@ -531,15 +482,14 @@ get_item_line (int item_nb, int nb_events_inday) * Update (if necessary) the first displayed pad line to make the * appointment panel scroll down next time pnoutrefresh is called. */ -void -apoint_scroll_pad_down (int nb_events_inday, int win_length) +void apoint_scroll_pad_down(int nb_events_inday, int win_length) { int pad_last_line = 0; int item_first_line = 0, item_last_line = 0; int borders = 6; int awin_length = win_length - borders; - item_first_line = get_item_line (hilt, nb_events_inday); + item_first_line = get_item_line(hilt, nb_events_inday); if (hilt < nb_events_inday) item_last_line = item_first_line; else @@ -553,18 +503,16 @@ apoint_scroll_pad_down (int nb_events_inday, int win_length) * Update (if necessary) the first displayed pad line to make the * appointment panel scroll up next time pnoutrefresh is called. */ -void -apoint_scroll_pad_up (int nb_events_inday) +void apoint_scroll_pad_up(int nb_events_inday) { int item_first_line = 0; - item_first_line = get_item_line (hilt, nb_events_inday); + item_first_line = get_item_line(hilt, nb_events_inday); if (item_first_line < apad.first_onscreen) apad.first_onscreen = item_first_line; } -static int -apoint_starts_after (struct apoint *apt, long time) +static int apoint_starts_after(struct apoint *apt, long time) { return apt->start > time; } @@ -573,28 +521,25 @@ apoint_starts_after (struct apoint *apt, long time) * Look in the appointment list if we have an item which starts before the item * stored in the notify_app structure (which is the next item to be notified). */ -struct notify_app * -apoint_check_next (struct notify_app *app, long start) +struct notify_app *apoint_check_next(struct notify_app *app, long start) { llist_item_t *i; - LLIST_TS_LOCK (&alist_p); - i = LLIST_TS_FIND_FIRST (&alist_p, start, apoint_starts_after); + LLIST_TS_LOCK(&alist_p); + i = LLIST_TS_FIND_FIRST(&alist_p, start, apoint_starts_after); - if (i) - { - struct apoint *apt = LLIST_TS_GET_DATA (i); - - if (apt->start <= app->time) - { - app->time = apt->start; - app->txt = mem_strdup (apt->mesg); - app->state = apt->state; - app->got_app = 1; - } + if (i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + + if (apt->start <= app->time) { + app->time = apt->start; + app->txt = mem_strdup(apt->mesg); + app->state = apt->state; + app->got_app = 1; } + } - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_UNLOCK(&alist_p); return app; } @@ -602,44 +547,40 @@ apoint_check_next (struct notify_app *app, long start) /* * Switch notification state. */ -void -apoint_switch_notify (void) +void apoint_switch_notify(void) { struct day_item *p; long date; int apoint_nb = 0, need_chk_notify; - p = day_get_item (hilt); + p = day_get_item(hilt); if (p->type != APPT && p->type != RECUR_APPT) return; - date = calendar_get_slctd_day_sec (); + date = calendar_get_slctd_day_sec(); - if (p->type == RECUR_APPT) - { - recur_apoint_switch_notify (date, p->appt_pos); - return; - } - else if (p->type == APPT) - apoint_nb = day_item_nb (date, hilt, APPT); + if (p->type == RECUR_APPT) { + recur_apoint_switch_notify(date, p->appt_pos); + return; + } else if (p->type == APPT) + apoint_nb = day_item_nb(date, hilt, APPT); need_chk_notify = 0; - LLIST_TS_LOCK (&alist_p); + LLIST_TS_LOCK(&alist_p); - struct apoint *apt = apoint_get (date, apoint_nb); + struct apoint *apt = apoint_get(date, apoint_nb); apt->state ^= APOINT_NOTIFY; - if (notify_bar ()) - notify_check_added (apt->mesg, apt->start, apt->state); + if (notify_bar()) + notify_check_added(apt->mesg, apt->start, apt->state); if (need_chk_notify) - notify_check_next_app (0); + notify_check_next_app(0); - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_UNLOCK(&alist_p); } /* Updates the Appointment panel */ -void -apoint_update_panel (int which_pan) +void apoint_update_panel(int which_pan) { int title_xpos; int bordr = 1; @@ -650,56 +591,53 @@ apoint_update_panel (int which_pan) struct date slctd_date; /* variable inits */ - slctd_date = *calendar_get_slctd_day (); - title_xpos = win[APP].w - (strlen (_(monthnames[slctd_date.mm - 1])) + 16); + slctd_date = *calendar_get_slctd_day(); + title_xpos = win[APP].w - (strlen(_(monthnames[slctd_date.mm - 1])) + 16); if (slctd_date.dd < 10) title_xpos++; - date = date2sec (slctd_date, 0, 0); - day_write_pad (date, app_width, app_length, (which_pan == APP) ? hilt : 0); + date = date2sec(slctd_date, 0, 0); + day_write_pad(date, app_width, app_length, (which_pan == APP) ? hilt : 0); /* Print current date in the top right window corner. */ - erase_window_part (win[APP].p, 1, title_lines, win[APP].w - 2, - win[APP].h - 2); - custom_apply_attr (win[APP].p, ATTR_HIGHEST); - mvwprintw (win[APP].p, title_lines, title_xpos, "%s %s %d, %d", - calendar_get_pom (date), _(monthnames[slctd_date.mm - 1]), - slctd_date.dd, slctd_date.yyyy); - custom_remove_attr (win[APP].p, ATTR_HIGHEST); + erase_window_part(win[APP].p, 1, title_lines, win[APP].w - 2, win[APP].h - 2); + custom_apply_attr(win[APP].p, ATTR_HIGHEST); + mvwprintw(win[APP].p, title_lines, title_xpos, "%s %s %d, %d", + calendar_get_pom(date), _(monthnames[slctd_date.mm - 1]), + slctd_date.dd, slctd_date.yyyy); + custom_remove_attr(win[APP].p, ATTR_HIGHEST); /* Draw the scrollbar if necessary. */ - if ((apad.length >= app_length) || (apad.first_onscreen > 0)) - { - float ratio = ((float) app_length) / ((float) apad.length); - int sbar_length = (int) (ratio * app_length); - int highend = (int) (ratio * apad.first_onscreen); - unsigned hilt_bar = (which_pan == APP) ? 1 : 0; - int sbar_top = highend + title_lines + 1; - - if ((sbar_top + sbar_length) > win[APP].h - 1) - sbar_length = win[APP].h - 1 - sbar_top; - draw_scrollbar (win[APP].p, sbar_top, win[APP].w - 2, sbar_length, - title_lines + 1, win[APP].h - 1, hilt_bar); - } - - wnoutrefresh (win[APP].p); - pnoutrefresh (apad.ptrwin, apad.first_onscreen, 0, - win[APP].y + title_lines + 1, win[APP].x + bordr, - win[APP].y + win[APP].h - 2 * bordr, - win[APP].x + win[APP].w - 3 * bordr); + if ((apad.length >= app_length) || (apad.first_onscreen > 0)) { + float ratio = ((float)app_length) / ((float)apad.length); + int sbar_length = (int)(ratio * app_length); + int highend = (int)(ratio * apad.first_onscreen); + unsigned hilt_bar = (which_pan == APP) ? 1 : 0; + int sbar_top = highend + title_lines + 1; + + if ((sbar_top + sbar_length) > win[APP].h - 1) + sbar_length = win[APP].h - 1 - sbar_top; + draw_scrollbar(win[APP].p, sbar_top, win[APP].w - 2, sbar_length, + title_lines + 1, win[APP].h - 1, hilt_bar); + } + + wnoutrefresh(win[APP].p); + pnoutrefresh(apad.ptrwin, apad.first_onscreen, 0, + win[APP].y + title_lines + 1, win[APP].x + bordr, + win[APP].y + win[APP].h - 2 * bordr, + win[APP].x + win[APP].w - 3 * bordr); } -void -apoint_paste_item (void) +void apoint_paste_item(void) { long bkp_time, bkp_start; - bkp_time = get_item_time (bkp_cut_apoint.start); - bkp_start = calendar_get_slctd_day_sec () + bkp_time; - apoint_new (bkp_cut_apoint.mesg, bkp_cut_apoint.note, bkp_start, - bkp_cut_apoint.dur, bkp_cut_apoint.state); + bkp_time = get_item_time(bkp_cut_apoint.start); + bkp_start = calendar_get_slctd_day_sec() + bkp_time; + apoint_new(bkp_cut_apoint.mesg, bkp_cut_apoint.note, bkp_start, + bkp_cut_apoint.dur, bkp_cut_apoint.state); - if (notify_bar ()) - notify_check_added (bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state); + if (notify_bar()) + notify_check_added(bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state); - apoint_free_bkp (); + apoint_free_bkp(); } @@ -58,105 +58,101 @@ enum { /* * Print Calcurse usage and exit. */ -static void -usage (void) +static void usage(void) { const char *arg_usage = - _("Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i<file>] [-x[format]]\n" - " [-d <date>|<num>] [-s[date]] [-r[range]]\n" - " [-c<file> | -D<dir>] [-S<regex>] [--status]\n" - " [--read-only]\n"); - fputs (arg_usage, stdout); + _("Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i<file>] [-x[format]]\n" + " [-d <date>|<num>] [-s[date]] [-r[range]]\n" + " [-c<file> | -D<dir>] [-S<regex>] [--status]\n" + " [--read-only]\n"); + fputs(arg_usage, stdout); } -static void -usage_try (void) +static void usage_try(void) { const char *arg_usage_try = _("Try 'calcurse -h' for more information.\n"); - fputs (arg_usage_try, stdout); + fputs(arg_usage_try, stdout); } /* * Print Calcurse version with a short copyright text and exit. */ -static void -version_arg (void) +static void version_arg(void) { const char *vtext = _("\nCopyright (c) 2004-2012 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n"); - fprintf (stdout, _("Calcurse %s - text-based organizer\n"), VERSION); - fputs (vtext, stdout); + fprintf(stdout, _("Calcurse %s - text-based organizer\n"), VERSION); + fputs(vtext, stdout); } /* * Print the command line options and exit. */ -static void -help_arg (void) +static void help_arg(void) { const char *htext = - _("\nMiscellaneous:\n" - " -h, --help\n" - " print this help and exit.\n" - "\n -v, --version\n" - " print calcurse version and exit.\n" - "\n --status\n" - " display the status of running instances of calcurse.\n" - "\n --read-only\n" - " Don't save configuration nor appointments/todos. Use with care.\n" - "\nFiles:\n" - " -c <file>, --calendar <file>\n" - " specify the calendar <file> to use (incompatible with '-D').\n" - "\n -D <dir>, --directory <dir>\n" - " specify the data directory to use (incompatible with '-c').\n" - "\tIf not specified, the default directory is ~/.calcurse\n" - "\nNon-interactive:\n" - " -a, --appointment\n" - " print events and appointments for current day and exit.\n" - "\n -d <date|num>, --day <date|num>\n" - " print events and appointments for <date> or <num> upcoming days and" - "\n\texit. To specify both a starting date and a range, use the\n" - "\t'--startday' and the '--range' option.\n" - "\n -g, --gc\n" - " run the garbage collector for note files and exit. \n" - "\n -i <file>, --import <file>\n" - " import the icalendar data contained in <file>. \n" - "\n -n, --next\n" - " print next appointment within upcoming 24 hours " - "and exit. Also given\n\tis the remaining time before this " - "next appointment.\n" - "\n -r[num], --range[=num]\n" - " print events and appointments for the [num] number of days" - "\n\tand exit. If no [num] is given, a range of 1 day is considered.\n" - "\n -s[date], --startday[=date]\n" - " print events and appointments from [date] and exit.\n" - "\tIf no [date] is given, the current day is considered.\n" - "\n -S<regex>, --search=<regex>\n" - " search for the given regular expression within events, appointments,\n" - "\tand todos description.\n" - "\n -t[num], --todo[=num]\n" - " print todo list and exit. If the optional number [num] is given,\n" - "\tthen only todos having a priority equal to [num] will be returned.\n" - "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" - "\tIt is also possible to specify '0' for the priority, in which case\n" - "\tonly completed tasks will be shown.\n" - "\n -x[format], --export[=format]\n" - " export user data to the specified format. Events, appointments and\n" - "\ttodos are converted and echoed to stdout.\n" - "\tTwo possible formats are available: 'ical' and 'pcal'.\n" - "\tIf the optional argument format is not given, ical format is\n" - "\tselected by default.\n" - "\tnote: redirect standard output to export data to a file,\n" - "\tby issuing a command such as: calcurse --export > calcurse.dat\n" - "\nFor more information, type '?' from within Calcurse, " - "or read the manpage.\n" - "Mail bug reports and suggestions to <misc@calcurse.org>.\n"); - - fprintf (stdout, _("Calcurse %s - text-based organizer\n"), VERSION); - usage (); - fputs (htext, stdout); + _("\nMiscellaneous:\n" + " -h, --help\n" + " print this help and exit.\n" + "\n -v, --version\n" + " print calcurse version and exit.\n" + "\n --status\n" + " display the status of running instances of calcurse.\n" + "\n --read-only\n" + " Don't save configuration nor appointments/todos. Use with care.\n" + "\nFiles:\n" + " -c <file>, --calendar <file>\n" + " specify the calendar <file> to use (incompatible with '-D').\n" + "\n -D <dir>, --directory <dir>\n" + " specify the data directory to use (incompatible with '-c').\n" + "\tIf not specified, the default directory is ~/.calcurse\n" + "\nNon-interactive:\n" + " -a, --appointment\n" + " print events and appointments for current day and exit.\n" + "\n -d <date|num>, --day <date|num>\n" + " print events and appointments for <date> or <num> upcoming days and" + "\n\texit. To specify both a starting date and a range, use the\n" + "\t'--startday' and the '--range' option.\n" + "\n -g, --gc\n" + " run the garbage collector for note files and exit. \n" + "\n -i <file>, --import <file>\n" + " import the icalendar data contained in <file>. \n" + "\n -n, --next\n" + " print next appointment within upcoming 24 hours " + "and exit. Also given\n\tis the remaining time before this " + "next appointment.\n" + "\n -r[num], --range[=num]\n" + " print events and appointments for the [num] number of days" + "\n\tand exit. If no [num] is given, a range of 1 day is considered.\n" + "\n -s[date], --startday[=date]\n" + " print events and appointments from [date] and exit.\n" + "\tIf no [date] is given, the current day is considered.\n" + "\n -S<regex>, --search=<regex>\n" + " search for the given regular expression within events, appointments,\n" + "\tand todos description.\n" + "\n -t[num], --todo[=num]\n" + " print todo list and exit. If the optional number [num] is given,\n" + "\tthen only todos having a priority equal to [num] will be returned.\n" + "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" + "\tIt is also possible to specify '0' for the priority, in which case\n" + "\tonly completed tasks will be shown.\n" + "\n -x[format], --export[=format]\n" + " export user data to the specified format. Events, appointments and\n" + "\ttodos are converted and echoed to stdout.\n" + "\tTwo possible formats are available: 'ical' and 'pcal'.\n" + "\tIf the optional argument format is not given, ical format is\n" + "\tselected by default.\n" + "\tnote: redirect standard output to export data to a file,\n" + "\tby issuing a command such as: calcurse --export > calcurse.dat\n" + "\nFor more information, type '?' from within Calcurse, " + "or read the manpage.\n" + "Mail bug reports and suggestions to <misc@calcurse.org>.\n"); + + fprintf(stdout, _("Calcurse %s - text-based organizer\n"), VERSION); + usage(); + fputs(htext, stdout); } /* @@ -170,26 +166,24 @@ help_arg (void) * The status is obtained by looking at pid files in user data directory * (.calcurse.pid and .daemon.pid). */ -static void -status_arg (void) +static void status_arg(void) { int cpid, dpid; - cpid = io_get_pid (path_cpid); - dpid = io_get_pid (path_dpid); + cpid = io_get_pid(path_cpid); + dpid = io_get_pid(path_dpid); - EXIT_IF (cpid && dpid, - _("Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" - "seem to be running at the same time!\n" - "Please check manually and restart calcurse.\n"), - cpid, dpid); + EXIT_IF(cpid && dpid, + _("Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" + "seem to be running at the same time!\n" + "Please check manually and restart calcurse.\n"), cpid, dpid); if (cpid) - fprintf (stdout, _("calcurse is running (pid %d)\n"), cpid); + fprintf(stdout, _("calcurse is running (pid %d)\n"), cpid); else if (dpid) - fprintf (stdout, _("calcurse is running in background (pid %d)\n"), dpid); + fprintf(stdout, _("calcurse is running in background (pid %d)\n"), dpid); else - puts (_("calcurse is not running\n")); + puts(_("calcurse is not running\n")); } /* @@ -199,8 +193,7 @@ status_arg (void) * If priority == 0, only completed tasks will be displayed. * If regex is not null, only the matching todos are printed. */ -static void -todo_arg (int priority, const char *format, regex_t *regex) +static void todo_arg(int priority, const char *format, regex_t * regex) { llist_item_t *i; int title = 1; @@ -218,39 +211,32 @@ todo_arg (int priority, const char *format, regex_t *regex) } \ } while (0) - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_TS_GET_DATA (i); - if (regex && regexec (regex, todo->mesg, 0, 0, 0) != 0) - continue; - - if (todo->id < 0) /* completed task */ - { - if (priority == 0) - { - DISPLAY_TITLE; - print_todo (format, todo); - } - } - else - { - if (priority < 0 || todo->id == priority) - { - DISPLAY_TITLE; - print_todo (format, todo); - } - } + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_TS_GET_DATA(i); + if (regex && regexec(regex, todo->mesg, 0, 0, 0) != 0) + continue; + + if (todo->id < 0) { /* completed task */ + if (priority == 0) { + DISPLAY_TITLE; + print_todo(format, todo); + } + } else { + if (priority < 0 || todo->id == priority) { + DISPLAY_TITLE; + print_todo(format, todo); + } } + } #undef DISPLAY_TITLE } /* Print the next appointment within the upcoming 24 hours. */ -static void -next_arg (void) +static void next_arg(void) { struct notify_app next_app; - const long current_time = now (); + const long current_time = now(); int time_left, hours_left, min_left; char mesg[BUFSIZ]; @@ -258,37 +244,35 @@ next_arg (void) next_app.got_app = 0; next_app.txt = NULL; - next_app = *recur_apoint_check_next (&next_app, current_time, get_today ()); - next_app = *apoint_check_next (&next_app, current_time); - - if (next_app.got_app) - { - time_left = next_app.time - current_time; - hours_left = (time_left / HOURINSEC); - min_left = (time_left - hours_left * HOURINSEC) / MININSEC; - fputs (_("next appointment:\n"), stdout); - snprintf (mesg, BUFSIZ, " [%02d:%02d] %s\n", hours_left, min_left, - next_app.txt); - fputs (mesg, stdout); - mem_free (next_app.txt); - } + next_app = *recur_apoint_check_next(&next_app, current_time, get_today()); + next_app = *apoint_check_next(&next_app, current_time); + + if (next_app.got_app) { + time_left = next_app.time - current_time; + hours_left = (time_left / HOURINSEC); + min_left = (time_left - hours_left * HOURINSEC) / MININSEC; + fputs(_("next appointment:\n"), stdout); + snprintf(mesg, BUFSIZ, " [%02d:%02d] %s\n", hours_left, min_left, + next_app.txt); + fputs(mesg, stdout); + mem_free(next_app.txt); + } } /* * Print the date on stdout. */ -static void -arg_print_date (long date) +static void arg_print_date(long date) { char date_str[BUFSIZ]; time_t t; struct tm *lt; t = date; - lt = localtime (&t); - strftime (date_str, BUFSIZ, conf.output_datefmt, lt); - fputs (date_str, stdout); - fputs (":\n", stdout); + lt = localtime(&t); + strftime(date_str, BUFSIZ, conf.output_datefmt, lt); + fputs(date_str, stdout); + fputs(":\n", stdout); } /* @@ -298,9 +282,9 @@ arg_print_date (long date) * If regex is not null, only the matching appointments or events are printed. */ static int -app_arg (int add_line, struct date *day, long date, const char *fmt_apt, - const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, - regex_t *regex) +app_arg(int add_line, struct date *day, long date, const char *fmt_apt, + const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, + regex_t * regex) { llist_item_t *i, *j; long today; @@ -308,7 +292,7 @@ app_arg (int add_line, struct date *day, long date, const char *fmt_apt, int app_found = 0; if (date == 0) - today = get_sec_date (*day); + today = get_sec_date(*day); else today = date; @@ -317,132 +301,114 @@ app_arg (int add_line, struct date *day, long date, const char *fmt_apt, * that date and it is the first one, and then print all the events for * that date. */ - LLIST_FIND_FOREACH (&recur_elist, today, recur_event_inday, i) - { - struct recur_event *re = LLIST_GET_DATA (i); - if (regex && regexec (regex, re->mesg, 0, 0, 0) != 0) - continue; - - app_found = 1; - if (add_line) - { - fputs ("\n", stdout); - add_line = 0; - } - if (print_date) - { - arg_print_date (today); - print_date = 0; - } - print_recur_event (fmt_rev, today, re); + LLIST_FIND_FOREACH(&recur_elist, today, recur_event_inday, i) { + struct recur_event *re = LLIST_GET_DATA(i); + if (regex && regexec(regex, re->mesg, 0, 0, 0) != 0) + continue; + + app_found = 1; + if (add_line) { + fputs("\n", stdout); + add_line = 0; } - - LLIST_FIND_FOREACH_CONT (&eventlist, today, event_inday, i) - { - struct event *ev = LLIST_TS_GET_DATA (i); - if (regex && regexec (regex, ev->mesg, 0, 0, 0) != 0) - continue; - - app_found = 1; - if (add_line) - { - fputs ("\n", stdout); - add_line = 0; - } - if (print_date) - { - arg_print_date (today); - print_date = 0; - } - print_event (fmt_ev, today, ev); + if (print_date) { + arg_print_date(today); + print_date = 0; + } + print_recur_event(fmt_rev, today, re); + } + + LLIST_FIND_FOREACH_CONT(&eventlist, today, event_inday, i) { + struct event *ev = LLIST_TS_GET_DATA(i); + if (regex && regexec(regex, ev->mesg, 0, 0, 0) != 0) + continue; + + app_found = 1; + if (add_line) { + fputs("\n", stdout); + add_line = 0; } + if (print_date) { + arg_print_date(today); + print_date = 0; + } + print_event(fmt_ev, today, ev); + } /* Same process is performed but this time on the appointments. */ - LLIST_TS_LOCK (&alist_p); - LLIST_TS_LOCK (&recur_alist_p); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_LOCK(&recur_alist_p); /* * Iterate over regular appointments and recurrent ones simultaneously (fixes * http://lists.calcurse.org/bugs/msg00002.html). */ - i = LLIST_TS_FIND_FIRST (&alist_p, today, apoint_inday); - j = LLIST_TS_FIND_FIRST (&recur_alist_p, today, recur_apoint_inday); - while (i || j) - { - struct apoint *apt = LLIST_TS_GET_DATA (i); - struct recur_apoint *ra = LLIST_TS_GET_DATA (j); - unsigned occurrence; - - while (i && regex && regexec (regex, apt->mesg, 0, 0, 0) != 0) - { - i = LLIST_TS_FIND_NEXT (i, today, apoint_inday); - apt = LLIST_TS_GET_DATA (i); - } + i = LLIST_TS_FIND_FIRST(&alist_p, today, apoint_inday); + j = LLIST_TS_FIND_FIRST(&recur_alist_p, today, recur_apoint_inday); + while (i || j) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + struct recur_apoint *ra = LLIST_TS_GET_DATA(j); + unsigned occurrence; + + while (i && regex && regexec(regex, apt->mesg, 0, 0, 0) != 0) { + i = LLIST_TS_FIND_NEXT(i, today, apoint_inday); + apt = LLIST_TS_GET_DATA(i); + } - while (j && regex && regexec (regex, ra->mesg, 0, 0, 0) != 0) - { - j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday); - ra = LLIST_TS_GET_DATA (j); - } + while (j && regex && regexec(regex, ra->mesg, 0, 0, 0) != 0) { + j = LLIST_TS_FIND_NEXT(j, today, recur_apoint_inday); + ra = LLIST_TS_GET_DATA(j); + } - if (apt && ra) - { - if (recur_apoint_find_occurrence (ra, today, &occurrence) && - apt->start <= occurrence) - ra = NULL; - else - apt = NULL; - } + if (apt && ra) { + if (recur_apoint_find_occurrence(ra, today, &occurrence) && + apt->start <= occurrence) + ra = NULL; + else + apt = NULL; + } - if (apt) - { - app_found = 1; - if (add_line) - { - fputs ("\n", stdout); - add_line = 0; - } - if (print_date) - { - arg_print_date (today); - print_date = 0; - } - print_apoint (fmt_apt, today, apt); - i = LLIST_TS_FIND_NEXT (i, today, apoint_inday); - } - else if (ra) - { - app_found = 1; - if (add_line) - { - fputs ("\n", stdout); - add_line = 0; - } - if (print_date) - { - arg_print_date (today); - print_date = 0; - } - recur_apoint_find_occurrence (ra, today, &occurrence); - print_recur_apoint (fmt_rapt, today, occurrence, ra); - apt = NULL; - j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday); - } + if (apt) { + app_found = 1; + if (add_line) { + fputs("\n", stdout); + add_line = 0; + } + if (print_date) { + arg_print_date(today); + print_date = 0; + } + print_apoint(fmt_apt, today, apt); + i = LLIST_TS_FIND_NEXT(i, today, apoint_inday); + } else if (ra) { + app_found = 1; + if (add_line) { + fputs("\n", stdout); + add_line = 0; + } + if (print_date) { + arg_print_date(today); + print_date = 0; + } + recur_apoint_find_occurrence(ra, today, &occurrence); + print_recur_apoint(fmt_rapt, today, occurrence, ra); + apt = NULL; + j = LLIST_TS_FIND_NEXT(j, today, recur_apoint_inday); } + } - LLIST_TS_UNLOCK (&recur_alist_p); - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_UNLOCK(&recur_alist_p); + LLIST_TS_UNLOCK(&alist_p); return app_found; } -static void -more_info (void) +static void more_info(void) { - fputs (_("\nFor more information, type '?' from within Calcurse, " - "or read the manpage.\n"), stdout); - fputs (_("Mail bug reports and suggestions to " - "<misc@calcurse.org>.\n"), stdout); + fputs(_("\nFor more information, type '?' from within Calcurse, " + "or read the manpage.\n"), stdout); + fputs(_("Mail bug reports and suggestions to " + "<misc@calcurse.org>.\n"), stdout); } /* @@ -451,25 +417,24 @@ more_info (void) * to format the output correctly. */ static void -display_app (struct tm *t, int numdays, int add_line, const char *fmt_apt, - const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, - regex_t *regex) +display_app(struct tm *t, int numdays, int add_line, const char *fmt_apt, + const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, + regex_t * regex) { int i, app_found; struct date day; - for (i = 0; i < numdays; i++) - { - day.dd = t->tm_mday; - day.mm = t->tm_mon + 1; - day.yyyy = t->tm_year + 1900; - app_found = app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, - fmt_rev, regex); - if (app_found) - add_line = 1; - t->tm_mday++; - mktime (t); - } + for (i = 0; i < numdays; i++) { + day.dd = t->tm_mday; + day.mm = t->tm_mon + 1; + day.yyyy = t->tm_year + 1900; + app_found = app_arg(add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, + fmt_rev, regex); + if (app_found) + add_line = 1; + t->tm_mday++; + mktime(t); + } } /* @@ -477,9 +442,9 @@ display_app (struct tm *t, int numdays, int add_line, const char *fmt_apt, * days. */ static void -date_arg (const char *ddate, int add_line, const char *fmt_apt, - const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, - regex_t *regex) +date_arg(const char *ddate, int add_line, const char *fmt_apt, + const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, + regex_t * regex) { int i; struct date day; @@ -492,45 +457,38 @@ date_arg (const char *ddate, int add_line, const char *fmt_apt, * Check (with the argument length) if a date or a number of days * was entered, and then call app_arg() to print appointments */ - arg_len = strlen (ddate); - if (arg_len <= 4) - { /* a number of days was entered */ - for (i = 0; i <= arg_len - 1; i++) - { - if (isdigit (ddate[i])) - num_digit++; - } - if (num_digit == arg_len) - numdays = atoi (ddate); - - /* - * Get current date, and print appointments for each day - * in the chosen interval. app_found and add_line are used - * to format the output correctly. - */ - timer = time (NULL); - t = *localtime (&timer); - display_app (&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, - regex); + arg_len = strlen(ddate); + if (arg_len <= 4) { /* a number of days was entered */ + for (i = 0; i <= arg_len - 1; i++) { + if (isdigit(ddate[i])) + num_digit++; } - else - { /* a date was entered */ - if (parse_date (ddate, conf.input_datefmt, (int *)&day.yyyy, - (int *)&day.mm, (int *)&day.dd, NULL)) - { - app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, regex); - } - else - { - char outstr[BUFSIZ]; - fputs (_("Argument to the '-d' flag is not valid\n"), stderr); - snprintf (outstr, BUFSIZ, - "Possible argument format are: '%s' or 'n'\n", - DATEFMT_DESC (conf.input_datefmt)); - fputs (_(outstr), stdout); - more_info (); - } + if (num_digit == arg_len) + numdays = atoi(ddate); + + /* + * Get current date, and print appointments for each day + * in the chosen interval. app_found and add_line are used + * to format the output correctly. + */ + timer = time(NULL); + t = *localtime(&timer); + display_app(&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + regex); + } else { /* a date was entered */ + if (parse_date(ddate, conf.input_datefmt, (int *)&day.yyyy, + (int *)&day.mm, (int *)&day.dd, NULL)) { + app_arg(add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, regex); + } else { + char outstr[BUFSIZ]; + fputs(_("Argument to the '-d' flag is not valid\n"), stderr); + snprintf(outstr, BUFSIZ, + "Possible argument format are: '%s' or 'n'\n", + DATEFMT_DESC(conf.input_datefmt)); + fputs(_(outstr), stdout); + more_info(); } + } } /* @@ -542,9 +500,9 @@ date_arg (const char *ddate, int add_line, const char *fmt_apt, * Many thanks to Erik Saule for providing this function. */ static void -date_arg_extended (const char *startday, const char *range, int add_line, - const char *fmt_apt, const char *fmt_rapt, - const char *fmt_ev, const char *fmt_rev, regex_t *regex) +date_arg_extended(const char *startday, const char *range, int add_line, + const char *fmt_apt, const char *fmt_rapt, + const char *fmt_ev, const char *fmt_rev, regex_t * regex) { int i, numdays = 1, error = 0, arg_len = 0; static struct tm t; @@ -553,76 +511,65 @@ date_arg_extended (const char *startday, const char *range, int add_line, /* * Check arguments and extract information */ - if (range != NULL) - { - arg_len = strlen (range); - for (i = 0; i <= arg_len - 1; i++) - { - if (!isdigit (range[i])) - error = 1; - } - if (!error) - numdays = atoi (range); - } - timer = time (NULL); - t = *localtime (&timer); - if (startday != NULL) - { - if (parse_date (startday, conf.input_datefmt, (int *)&t.tm_year, - (int *)&t.tm_mon, (int *)&t.tm_mday, NULL)) - { - t.tm_year -= 1900; - t.tm_mon--; - mktime (&t); - } - else - { - error = 1; - } + if (range != NULL) { + arg_len = strlen(range); + for (i = 0; i <= arg_len - 1; i++) { + if (!isdigit(range[i])) + error = 1; } - if (!error) - { - display_app (&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, - regex); - } - else - { - char outstr[BUFSIZ]; - fputs (_("Argument is not valid\n"), stderr); - snprintf (outstr, BUFSIZ, - "Argument format for -s and --startday is: '%s'\n", - DATEFMT_DESC (conf.input_datefmt)); - fputs (_(outstr), stdout); - fputs (_("Argument format for -r and --range is: 'n'\n"), stdout); - more_info (); + if (!error) + numdays = atoi(range); + } + timer = time(NULL); + t = *localtime(&timer); + if (startday != NULL) { + if (parse_date(startday, conf.input_datefmt, (int *)&t.tm_year, + (int *)&t.tm_mon, (int *)&t.tm_mday, NULL)) { + t.tm_year -= 1900; + t.tm_mon--; + mktime(&t); + } else { + error = 1; } + } + if (!error) { + display_app(&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + regex); + } else { + char outstr[BUFSIZ]; + fputs(_("Argument is not valid\n"), stderr); + snprintf(outstr, BUFSIZ, + "Argument format for -s and --startday is: '%s'\n", + DATEFMT_DESC(conf.input_datefmt)); + fputs(_(outstr), stdout); + fputs(_("Argument format for -r and --range is: 'n'\n"), stdout); + more_info(); + } } - /* * Parse the command-line arguments and call the appropriate * routines to handle those arguments. Also initialize the data paths. */ -int -parse_args (int argc, char **argv) +int parse_args(int argc, char **argv) { int ch, add_line = 0; int unknown_flag = 0; /* Command-line flags */ - int aflag = 0; /* -a: print appointments for current day */ - int cflag = 0; /* -c: specify the calendar file to use */ - int dflag = 0; /* -d: print appointments for a specified days */ - int Dflag = 0; /* -D: specify data directory to use */ - int hflag = 0; /* -h: print help text */ - int gflag = 0; /* -g: run garbage collector */ - int iflag = 0; /* -i: import data */ - int nflag = 0; /* -n: print next appointment */ - int rflag = 0; /* -r: specify the range of days to consider */ - int sflag = 0; /* -s: specify the first day to consider */ - int Sflag = 0; /* -S: specify a regex to search for */ - int tflag = 0; /* -t: print todo list */ - int vflag = 0; /* -v: print version number */ - int xflag = 0; /* -x: export data */ + int aflag = 0; /* -a: print appointments for current day */ + int cflag = 0; /* -c: specify the calendar file to use */ + int dflag = 0; /* -d: print appointments for a specified days */ + int Dflag = 0; /* -D: specify data directory to use */ + int hflag = 0; /* -h: print help text */ + int gflag = 0; /* -g: run garbage collector */ + int iflag = 0; /* -i: import data */ + int nflag = 0; /* -n: print next appointment */ + int rflag = 0; /* -r: specify the range of days to consider */ + int sflag = 0; /* -s: specify the first day to consider */ + int Sflag = 0; /* -S: specify a regex to search for */ + int tflag = 0; /* -t: print todo list */ + int vflag = 0; /* -v: print version number */ + int xflag = 0; /* -x: export data */ /* Format strings */ const char *fmt_apt = " - %S -> %E\n\t%m\n"; const char *fmt_rapt = " - %S -> %E\n\t%m\n"; @@ -636,9 +583,8 @@ parse_args (int argc, char **argv) regex_t reg, *preg = NULL; /* Long options only */ - int statusflag = 0; /* --status: get the status of running instances */ - enum - { + int statusflag = 0; /* --status: get the status of running instances */ + enum { STATUS_OPT = CHAR_MAX + 1 }; @@ -671,284 +617,243 @@ parse_args (int argc, char **argv) {NULL, no_argument, NULL, 0} }; - while ((ch = getopt_long (argc, argv, optstr, longopts, NULL)) != -1) - { - switch (ch) - { - case STATUS_OPT: - statusflag = 1; - break; - case 'a': - aflag = 1; - multiple_flag++; - load_data++; - break; - case 'c': - cflag = 1; - multiple_flag++; - cfile = optarg; - load_data++; - break; - case 'd': - dflag = 1; - multiple_flag++; - load_data++; - ddate = optarg; - break; - case 'D': - Dflag = 1; - datadir = optarg; - break; - case 'h': - hflag = 1; - break; - case 'g': - gflag = 1; - break; - case 'i': - iflag = 1; - multiple_flag++; - load_data++; - ifile = optarg; - break; - case 'n': - nflag = 1; - multiple_flag++; - load_data++; - break; - case 'r': - rflag = 1; - multiple_flag++; - load_data++; - range = optarg; - break; - case 's': - sflag = 1; - multiple_flag++; - load_data++; - startday = optarg; - break; - case 'S': - EXIT_IF (Sflag > 0, - _("Can not handle more than one regular expression.")); - Sflag = 1; - if (regcomp (®, optarg, REG_EXTENDED)) - EXIT (_("Could not compile regular expression.")); - preg = ® - break; - case 't': - tflag = 1; - multiple_flag++; - load_data++; - add_line = 1; - if (optarg != NULL) - { - tnum = atoi (optarg); - if (tnum < 0 || tnum > 9) - { - usage (); - usage_try (); - return EXIT_FAILURE; - } - } - else - tnum = -1; - break; - case 'v': - vflag = 1; - break; - case 'x': - xflag = 1; - multiple_flag++; - load_data++; - if (optarg != NULL) - { - if (strcmp (optarg, "ical") == 0) - xfmt = IO_EXPORT_ICAL; - else if (strcmp (optarg, "pcal") == 0) - xfmt = IO_EXPORT_PCAL; - else - { - fputs (_("Argument for '-x' should be either " - "'ical' or 'pcal'\n"), stderr); - usage (); - usage_try (); - return EXIT_FAILURE; - } - } - else - { - xfmt = IO_EXPORT_ICAL; - } - break; - case OPT_FMT_APT: - fmt_apt = optarg; - break; - case OPT_FMT_RAPT: - fmt_rapt = optarg; - break; - case OPT_FMT_EV: - fmt_ev = optarg; - break; - case OPT_FMT_REV: - fmt_rev = optarg; - break; - case OPT_FMT_TODO: - fmt_todo = optarg; - break; - case OPT_READ_ONLY: - read_only = 1; - break; - default: - usage (); - usage_try (); - unknown_flag = 1; - non_interactive = 1; - /* NOTREACHED */ + while ((ch = getopt_long(argc, argv, optstr, longopts, NULL)) != -1) { + switch (ch) { + case STATUS_OPT: + statusflag = 1; + break; + case 'a': + aflag = 1; + multiple_flag++; + load_data++; + break; + case 'c': + cflag = 1; + multiple_flag++; + cfile = optarg; + load_data++; + break; + case 'd': + dflag = 1; + multiple_flag++; + load_data++; + ddate = optarg; + break; + case 'D': + Dflag = 1; + datadir = optarg; + break; + case 'h': + hflag = 1; + break; + case 'g': + gflag = 1; + break; + case 'i': + iflag = 1; + multiple_flag++; + load_data++; + ifile = optarg; + break; + case 'n': + nflag = 1; + multiple_flag++; + load_data++; + break; + case 'r': + rflag = 1; + multiple_flag++; + load_data++; + range = optarg; + break; + case 's': + sflag = 1; + multiple_flag++; + load_data++; + startday = optarg; + break; + case 'S': + EXIT_IF(Sflag > 0, _("Can not handle more than one regular expression.")); + Sflag = 1; + if (regcomp(®, optarg, REG_EXTENDED)) + EXIT(_("Could not compile regular expression.")); + preg = ® + break; + case 't': + tflag = 1; + multiple_flag++; + load_data++; + add_line = 1; + if (optarg != NULL) { + tnum = atoi(optarg); + if (tnum < 0 || tnum > 9) { + usage(); + usage_try(); + return EXIT_FAILURE; + } + } else + tnum = -1; + break; + case 'v': + vflag = 1; + break; + case 'x': + xflag = 1; + multiple_flag++; + load_data++; + if (optarg != NULL) { + if (strcmp(optarg, "ical") == 0) + xfmt = IO_EXPORT_ICAL; + else if (strcmp(optarg, "pcal") == 0) + xfmt = IO_EXPORT_PCAL; + else { + fputs(_("Argument for '-x' should be either " + "'ical' or 'pcal'\n"), stderr); + usage(); + usage_try(); + return EXIT_FAILURE; } + } else { + xfmt = IO_EXPORT_ICAL; + } + break; + case OPT_FMT_APT: + fmt_apt = optarg; + break; + case OPT_FMT_RAPT: + fmt_rapt = optarg; + break; + case OPT_FMT_EV: + fmt_ev = optarg; + break; + case OPT_FMT_REV: + fmt_rev = optarg; + break; + case OPT_FMT_TODO: + fmt_todo = optarg; + break; + case OPT_READ_ONLY: + read_only = 1; + break; + default: + usage(); + usage_try(); + unknown_flag = 1; + non_interactive = 1; + /* NOTREACHED */ } + } argc -= optind; - if (argc >= 1) - { - usage (); - usage_try (); - return EXIT_FAILURE; - /* Incorrect arguments */ - } - else if (Dflag && cflag) - { - fputs (_("Options '-D' and '-c' cannot be used at the same time\n"), - stderr); - usage (); - usage_try (); - return EXIT_FAILURE; - } - else if (Sflag && !(aflag || dflag || rflag || sflag || tflag)) - { - fputs (_("Option '-S' must be used with either '-d', '-r', '-s', " - "'-a' or '-t'\n"), stderr); - usage (); - usage_try (); - return EXIT_FAILURE; - } - else - { - if (unknown_flag) - { - non_interactive = 1; - } - else if (hflag) - { - help_arg (); - non_interactive = 1; - } - else if (vflag) - { - version_arg (); - non_interactive = 1; - } - else if (statusflag) - { - io_init (cfile, datadir); - status_arg (); - non_interactive = 1; - } - else if (gflag) - { - io_init (cfile, datadir); - io_check_dir (path_dir, NULL); - io_check_dir (path_notes, NULL); - io_check_file (path_apts, NULL); - io_check_file (path_todo, NULL); - io_load_app (); - io_load_todo (); - note_gc (); - non_interactive = 1; - } - else if (multiple_flag) - { - if (load_data) - { - io_init (cfile, datadir); - io_check_dir (path_dir, NULL); - io_check_dir (path_notes, NULL); - } - if (iflag) - { - io_check_file (path_apts, NULL); - io_check_file (path_todo, NULL); - /* Get default pager in case we need to show a log file. */ - vars_init (); - io_load_app (); - io_load_todo (); - io_import_data (IO_IMPORT_ICAL, ifile); - io_save_apts (); - io_save_todo (); - non_interactive = 1; - } - if (xflag) - { - io_check_file (path_apts, NULL); - io_check_file (path_todo, NULL); - io_load_app (); - io_load_todo (); - io_export_data (xfmt); - non_interactive = 1; - return non_interactive; - } - if (tflag) - { - io_check_file (path_todo, NULL); - io_load_todo (); - todo_arg (tnum, fmt_todo, preg); - non_interactive = 1; - } - if (nflag) - { - io_check_file (path_apts, NULL); - io_load_app (); - next_arg (); - non_interactive = 1; - } - if (dflag || rflag || sflag) - { - io_check_file (path_apts, NULL); - io_check_file (path_conf, NULL); - io_load_app (); - config_load (); /* To get output date format. */ - if (dflag) - date_arg (ddate, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, - preg); - if (rflag || sflag) - date_arg_extended (startday, range, add_line, fmt_apt, - fmt_rapt, fmt_ev, fmt_rev, preg); - non_interactive = 1; - } - else if (aflag) - { - struct date day; - - io_check_file (path_apts, NULL); - io_check_file (path_conf, NULL); - vars_init (); - config_load (); /* To get output date format. */ - io_load_app (); - day.dd = day.mm = day.yyyy = 0; - app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, - preg); - non_interactive = 1; - } - } - else - { - non_interactive = 0; - io_init (cfile, datadir); - } + if (argc >= 1) { + usage(); + usage_try(); + return EXIT_FAILURE; + /* Incorrect arguments */ + } else if (Dflag && cflag) { + fputs(_("Options '-D' and '-c' cannot be used at the same time\n"), stderr); + usage(); + usage_try(); + return EXIT_FAILURE; + } else if (Sflag && !(aflag || dflag || rflag || sflag || tflag)) { + fputs(_("Option '-S' must be used with either '-d', '-r', '-s', " + "'-a' or '-t'\n"), stderr); + usage(); + usage_try(); + return EXIT_FAILURE; + } else { + if (unknown_flag) { + non_interactive = 1; + } else if (hflag) { + help_arg(); + non_interactive = 1; + } else if (vflag) { + version_arg(); + non_interactive = 1; + } else if (statusflag) { + io_init(cfile, datadir); + status_arg(); + non_interactive = 1; + } else if (gflag) { + io_init(cfile, datadir); + io_check_dir(path_dir, NULL); + io_check_dir(path_notes, NULL); + io_check_file(path_apts, NULL); + io_check_file(path_todo, NULL); + io_load_app(); + io_load_todo(); + note_gc(); + non_interactive = 1; + } else if (multiple_flag) { + if (load_data) { + io_init(cfile, datadir); + io_check_dir(path_dir, NULL); + io_check_dir(path_notes, NULL); + } + if (iflag) { + io_check_file(path_apts, NULL); + io_check_file(path_todo, NULL); + /* Get default pager in case we need to show a log file. */ + vars_init(); + io_load_app(); + io_load_todo(); + io_import_data(IO_IMPORT_ICAL, ifile); + io_save_apts(); + io_save_todo(); + non_interactive = 1; + } + if (xflag) { + io_check_file(path_apts, NULL); + io_check_file(path_todo, NULL); + io_load_app(); + io_load_todo(); + io_export_data(xfmt); + non_interactive = 1; + return non_interactive; + } + if (tflag) { + io_check_file(path_todo, NULL); + io_load_todo(); + todo_arg(tnum, fmt_todo, preg); + non_interactive = 1; + } + if (nflag) { + io_check_file(path_apts, NULL); + io_load_app(); + next_arg(); + non_interactive = 1; + } + if (dflag || rflag || sflag) { + io_check_file(path_apts, NULL); + io_check_file(path_conf, NULL); + io_load_app(); + config_load(); /* To get output date format. */ + if (dflag) + date_arg(ddate, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, preg); + if (rflag || sflag) + date_arg_extended(startday, range, add_line, fmt_apt, + fmt_rapt, fmt_ev, fmt_rev, preg); + non_interactive = 1; + } else if (aflag) { + struct date day; + + io_check_file(path_apts, NULL); + io_check_file(path_conf, NULL); + vars_init(); + config_load(); /* To get output date format. */ + io_load_app(); + day.dd = day.mm = day.yyyy = 0; + app_arg(add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, preg); + non_interactive = 1; + } + } else { + non_interactive = 0; + io_init(cfile, datadir); } + } if (preg) - regfree (preg); + regfree(preg); return non_interactive; } diff --git a/src/calcurse.c b/src/calcurse.c index ee85ea7..9e42eee 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -42,14 +42,13 @@ * Store the events and appointments for the selected day and reset the * appointment highlight pointer if a new day was selected. */ -static struct day_items_nb -do_storage (int day_changed) +static struct day_items_nb do_storage(int day_changed) { - struct day_items_nb inday = *day_process_storage (calendar_get_slctd_day (), - day_changed, &inday); + struct day_items_nb inday = *day_process_storage(calendar_get_slctd_day(), + day_changed, &inday); if (day_changed) - apoint_hilt_set (1); + apoint_hilt_set(1); return inday; } @@ -61,8 +60,7 @@ do_storage (int day_changed) * and one can choose between different color schemes and layouts. * All of the commands are documented within an online help system. */ -int -main (int argc, char **argv) +int main(int argc, char **argv) { struct day_items_nb inday; int no_data_file = 1; @@ -70,504 +68,455 @@ main (int argc, char **argv) int count; #if ENABLE_NLS - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); #endif /* ENABLE_NLS */ /* Thread-safe data structure init */ - apoint_llist_init (); - recur_apoint_llist_init (); + apoint_llist_init(); + recur_apoint_llist_init(); /* Initialize non-thread-safe data structures. */ - event_llist_init (); - todo_init_list (); + event_llist_init(); + todo_init_list(); /* * Begin by parsing and handling command line arguments. * The data path is also initialized here. */ - if (parse_args (argc, argv)) - { - /* Non-interactive mode. */ - exit_calcurse (EXIT_SUCCESS); - } - else - { - no_data_file = io_check_data_files (); - dmon_stop (); - io_set_lock (); - } + if (parse_args(argc, argv)) { + /* Non-interactive mode. */ + exit_calcurse(EXIT_SUCCESS); + } else { + no_data_file = io_check_data_files(); + dmon_stop(); + io_set_lock(); + } /* Begin of interactive mode with ncurses interface. */ - sigs_init (); /* signal handling init */ - initscr (); /* start the curses mode */ - cbreak (); /* control chars generate a signal */ - noecho (); /* controls echoing of typed chars */ - curs_set (0); /* make cursor invisible */ - calendar_set_current_date (); - notify_init_vars (); - wins_get_config (); + sigs_init(); /* signal handling init */ + initscr(); /* start the curses mode */ + cbreak(); /* control chars generate a signal */ + noecho(); /* controls echoing of typed chars */ + curs_set(0); /* make cursor invisible */ + calendar_set_current_date(); + notify_init_vars(); + wins_get_config(); /* Check if terminal supports color. */ - if (has_colors ()) - { - colorize = 1; - background = COLOR_BLACK; - foreground = COLOR_WHITE; - start_color (); + if (has_colors()) { + colorize = 1; + background = COLOR_BLACK; + foreground = COLOR_WHITE; + start_color(); #ifdef NCURSES_VERSION - if (use_default_colors () != ERR) - { - background = -1; - foreground = -1; - } -#endif /* NCURSES_VERSION */ - - /* Color assignment */ - init_pair (COLR_RED, COLOR_RED, background); - init_pair (COLR_GREEN, COLOR_GREEN, background); - init_pair (COLR_YELLOW, COLOR_YELLOW, background); - init_pair (COLR_BLUE, COLOR_BLUE, background); - init_pair (COLR_MAGENTA, COLOR_MAGENTA, background); - init_pair (COLR_CYAN, COLOR_CYAN, background); - init_pair (COLR_DEFAULT, foreground, background); - init_pair (COLR_HIGH, COLOR_BLACK, COLOR_GREEN); - init_pair (COLR_CUSTOM, COLOR_RED, background); - } - else - { - colorize = 0; - background = COLOR_BLACK; + if (use_default_colors() != ERR) { + background = -1; + foreground = -1; } +#endif /* NCURSES_VERSION */ - vars_init (); - wins_init (); - wins_slctd_init (); - notify_init_bar (); - wins_reset_status_page (); + /* Color assignment */ + init_pair(COLR_RED, COLOR_RED, background); + init_pair(COLR_GREEN, COLOR_GREEN, background); + init_pair(COLR_YELLOW, COLOR_YELLOW, background); + init_pair(COLR_BLUE, COLOR_BLUE, background); + init_pair(COLR_MAGENTA, COLOR_MAGENTA, background); + init_pair(COLR_CYAN, COLOR_CYAN, background); + init_pair(COLR_DEFAULT, foreground, background); + init_pair(COLR_HIGH, COLOR_BLACK, COLOR_GREEN); + init_pair(COLR_CUSTOM, COLOR_RED, background); + } else { + colorize = 0; + background = COLOR_BLACK; + } + + vars_init(); + wins_init(); + wins_slctd_init(); + notify_init_bar(); + wins_reset_status_page(); /* * Read the data from files : first the user * configuration (the display is then updated), and then * the todo list, appointments and events. */ - config_load (); - wins_erase_status_bar (); - io_load_keys (conf.pager); - io_load_todo (); - io_load_app (); - wins_reinit (); - if (conf.system_dialogs) - { - wins_update (FLAG_ALL); - io_startup_screen (no_data_file); - } - inday = *day_process_storage (0, 0, &inday); - wins_slctd_set (CAL); - wins_update (FLAG_ALL); + config_load(); + wins_erase_status_bar(); + io_load_keys(conf.pager); + io_load_todo(); + io_load_app(); + wins_reinit(); + if (conf.system_dialogs) { + wins_update(FLAG_ALL); + io_startup_screen(no_data_file); + } + inday = *day_process_storage(0, 0, &inday); + wins_slctd_set(CAL); + wins_update(FLAG_ALL); /* Start miscellaneous threads. */ - if (notify_bar ()) - notify_start_main_thread (); - calendar_start_date_thread (); + if (notify_bar()) + notify_start_main_thread(); + calendar_start_date_thread(); if (conf.periodic_save > 0) - io_start_psave_thread (); + io_start_psave_thread(); /* User input */ - for (;;) - { - int key; - - if (resize) - { - resize = 0; - wins_reset (); - } - - key = keys_getch (win[STA].p, &count); - switch (key) - { - case KEY_GENERIC_REDRAW: - resize = 1; - break; - - case KEY_GENERIC_CHANGE_VIEW: - wins_reset_status_page (); - wins_slctd_next (); - - /* Select the event to highlight. */ - switch (wins_slctd ()) - { - case TOD: - if ((todo_hilt () == 0) && (todo_nb () > 0)) - todo_hilt_set (1); - break; - case APP: - if ((apoint_hilt () == 0) && - ((inday.nb_events + inday.nb_apoints) > 0)) - apoint_hilt_set (1); - break; - default: - break; - } - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_OTHER_CMD: - wins_other_status_page (wins_slctd ()); - wins_update (FLAG_STA); - break; - - case KEY_GENERIC_GOTO: - case KEY_GENERIC_GOTO_TODAY: - wins_erase_status_bar (); - calendar_set_current_date (); - if (key == KEY_GENERIC_GOTO_TODAY) - calendar_goto_today (); - else - calendar_change_day (conf.input_datefmt); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - break; - - case KEY_VIEW_ITEM: - if ((wins_slctd () == APP) && (apoint_hilt () != 0)) - day_popup_item (); - else if ((wins_slctd () == TOD) && (todo_hilt () != 0)) - item_in_popup (NULL, NULL, todo_saved_mesg (), _("To do :")); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_CONFIG_MENU: - wins_erase_status_bar (); - custom_config_main (); - inday = do_storage (0); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_ADD_APPT: - apoint_add (); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - break; - - case KEY_GENERIC_ADD_TODO: - todo_new_item (); - if (todo_hilt () == 0 && todo_nb () == 1) - todo_hilt_increase (1); - wins_update (FLAG_TOD | FLAG_STA); - break; - - case KEY_ADD_ITEM: - switch (wins_slctd ()) - { - case APP: - apoint_add (); - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - break; - case TOD: - todo_new_item (); - if (todo_hilt () == 0 && todo_nb () == 1) - todo_hilt_increase (1); - wins_update (FLAG_TOD | FLAG_STA); - break; - default: - break; - } - break; - - case KEY_EDIT_ITEM: - if (wins_slctd () == APP && apoint_hilt () != 0) - { - day_edit_item (); - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - } - else if (wins_slctd () == TOD && todo_hilt () != 0) - { - todo_edit_item (); - wins_update (FLAG_TOD | FLAG_STA); - } - break; - - case KEY_DEL_ITEM: - if (wins_slctd () == APP && apoint_hilt () != 0) - { - apoint_delete (&inday.nb_events, &inday.nb_apoints); - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - } - else if (wins_slctd () == TOD && todo_hilt () != 0) - { - todo_delete (); - wins_update (FLAG_TOD | FLAG_STA); - } - break; - - case KEY_GENERIC_CUT: - if (wins_slctd () == APP && apoint_hilt () != 0) - { - cut_item = apoint_cut (&inday.nb_events, &inday.nb_apoints); - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_GENERIC_PASTE: - if (wins_slctd () == APP) - { - apoint_paste (&inday.nb_events, &inday.nb_apoints, cut_item); - cut_item = 0; - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_REPEAT_ITEM: - if (wins_slctd () == APP && apoint_hilt () != 0) - recur_repeat_item (); - inday = do_storage (0); - wins_update (FLAG_CAL | FLAG_APP | FLAG_STA); - break; - - case KEY_FLAG_ITEM: - if (wins_slctd () == APP && apoint_hilt () != 0) - { - apoint_switch_notify (); - inday = do_storage (0); - wins_update (FLAG_APP); - } - else if (wins_slctd () == TOD && todo_hilt () != 0) - { - todo_flag (); - wins_update (FLAG_TOD); - } - break; - - case KEY_PIPE_ITEM: - if (wins_slctd () == APP && apoint_hilt () != 0) - day_pipe_item (); - else if (wins_slctd () == TOD && todo_hilt () != 0) - todo_pipe_item (); - wins_update (FLAG_ALL); - break; - - case KEY_RAISE_PRIORITY: - case KEY_LOWER_PRIORITY: - if (wins_slctd () == TOD && todo_hilt () != 0) - { - todo_chg_priority (key); - if (todo_hilt_pos () < 0) - todo_set_first (todo_hilt ()); - else if (todo_hilt_pos () >= win[TOD].h - 4) - todo_set_first (todo_hilt () - win[TOD].h + 5); - wins_update (FLAG_TOD); - } - break; - - case KEY_EDIT_NOTE: - if (wins_slctd () == APP && apoint_hilt () != 0) - { - day_edit_note (conf.editor); - inday = do_storage (0); - } - else if (wins_slctd () == TOD && todo_hilt () != 0) - todo_edit_note (conf.editor); - wins_update (FLAG_ALL); - break; - - case KEY_VIEW_NOTE: - if (wins_slctd () == APP && apoint_hilt () != 0) - day_view_note (conf.pager); - else if (wins_slctd () == TOD && todo_hilt () != 0) - todo_view_note (conf.pager); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_HELP: - wins_status_bar (); - help_screen (); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_SAVE: - io_save_cal (IO_SAVE_DISPLAY_BAR); - wins_update (FLAG_STA); - break; - - case KEY_GENERIC_IMPORT: - wins_erase_status_bar (); - io_import_data (IO_IMPORT_ICAL, NULL); - inday = do_storage (0); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_EXPORT: - wins_erase_status_bar (); - io_export_bar (); - while ((key = wgetch (win[STA].p)) != 'q') - { - switch (key) - { - case 'I': - case 'i': - io_export_data (IO_EXPORT_ICAL); - break; - case 'P': - case 'p': - io_export_data (IO_EXPORT_PCAL); - break; - } - wins_reset (); - wins_update (FLAG_ALL); - wins_erase_status_bar (); - io_export_bar (); - } - inday = do_storage (0); - wins_update (FLAG_ALL); - break; - - case KEY_GENERIC_NEXT_DAY: - case KEY_MOVE_RIGHT: - if (wins_slctd () == CAL || key == KEY_GENERIC_NEXT_DAY) - { - calendar_move (RIGHT, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - break; + for (;;) { + int key; - case KEY_GENERIC_PREV_DAY: - case KEY_MOVE_LEFT: - if (wins_slctd () == CAL || key == KEY_GENERIC_PREV_DAY) - { - calendar_move (LEFT, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_GENERIC_PREV_WEEK: - case KEY_MOVE_UP: - if (wins_slctd () == CAL || key == KEY_GENERIC_PREV_WEEK) - { - calendar_move (UP, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - else if (wins_slctd () == APP) - { - if (count >= apoint_hilt ()) - count = apoint_hilt () - 1; - apoint_hilt_decrease (count); - apoint_scroll_pad_up (inday.nb_events); - wins_update (FLAG_APP); - } - else if (wins_slctd () == TOD) - { - if (count >= todo_hilt ()) - count = todo_hilt () - 1; - todo_hilt_decrease (count); - if (todo_hilt_pos () < 0) - todo_first_increase (todo_hilt_pos ()); - wins_update (FLAG_TOD); - } - break; - - case KEY_GENERIC_NEXT_WEEK: - case KEY_MOVE_DOWN: - if (wins_slctd () == CAL || key == KEY_GENERIC_NEXT_WEEK) - { - calendar_move (DOWN, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - else if (wins_slctd () == APP) - { - if (count > inday.nb_events + inday.nb_apoints - apoint_hilt ()) - count = inday.nb_events + inday.nb_apoints - apoint_hilt (); - apoint_hilt_increase (count); - apoint_scroll_pad_down (inday.nb_events, win[APP].h); - wins_update (FLAG_APP); - } - else if (wins_slctd () == TOD) - { - if (count > todo_nb () - todo_hilt ()) - count = todo_nb () - todo_hilt (); - todo_hilt_increase (count); - if (todo_hilt_pos () >= win[TOD].h - 4) - todo_first_increase (todo_hilt_pos () - win[TOD].h + 5); - wins_update (FLAG_TOD); - } - break; - - case KEY_START_OF_WEEK: - if (wins_slctd () == CAL) - { - calendar_move (WEEK_START, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_END_OF_WEEK: - if (wins_slctd () == CAL) - { - calendar_move (WEEK_END, count); - inday = do_storage (1); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_GENERIC_SCROLL_UP: - if (wins_slctd () == CAL) - { - calendar_view_prev (); - wins_update (FLAG_CAL | FLAG_APP); - } - break; - - case KEY_GENERIC_SCROLL_DOWN: - if (wins_slctd () == CAL) - { - calendar_view_next (); - wins_update (FLAG_CAL | FLAG_APP); - } - break; + if (resize) { + resize = 0; + wins_reset(); + } - case KEY_GENERIC_QUIT: - if (conf.auto_save) - io_save_cal (IO_SAVE_DISPLAY_BAR); - if (conf.auto_gc) - note_gc (); - - if (conf.confirm_quit) - { - if (status_ask_bool (_("Do you really want to quit ?")) == 1) - exit_calcurse (EXIT_SUCCESS); - else - { - wins_erase_status_bar (); - wins_update (FLAG_STA); - break; - } - } - else - exit_calcurse (EXIT_SUCCESS); + key = keys_getch(win[STA].p, &count); + switch (key) { + case KEY_GENERIC_REDRAW: + resize = 1; + break; + + case KEY_GENERIC_CHANGE_VIEW: + wins_reset_status_page(); + wins_slctd_next(); + + /* Select the event to highlight. */ + switch (wins_slctd()) { + case TOD: + if ((todo_hilt() == 0) && (todo_nb() > 0)) + todo_hilt_set(1); + break; + case APP: + if ((apoint_hilt() == 0) && ((inday.nb_events + inday.nb_apoints) > 0)) + apoint_hilt_set(1); + break; + default: + break; + } + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_OTHER_CMD: + wins_other_status_page(wins_slctd()); + wins_update(FLAG_STA); + break; + + case KEY_GENERIC_GOTO: + case KEY_GENERIC_GOTO_TODAY: + wins_erase_status_bar(); + calendar_set_current_date(); + if (key == KEY_GENERIC_GOTO_TODAY) + calendar_goto_today(); + else + calendar_change_day(conf.input_datefmt); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + break; + + case KEY_VIEW_ITEM: + if ((wins_slctd() == APP) && (apoint_hilt() != 0)) + day_popup_item(); + else if ((wins_slctd() == TOD) && (todo_hilt() != 0)) + item_in_popup(NULL, NULL, todo_saved_mesg(), _("To do :")); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_CONFIG_MENU: + wins_erase_status_bar(); + custom_config_main(); + inday = do_storage(0); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_ADD_APPT: + apoint_add(); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + break; + + case KEY_GENERIC_ADD_TODO: + todo_new_item(); + if (todo_hilt() == 0 && todo_nb() == 1) + todo_hilt_increase(1); + wins_update(FLAG_TOD | FLAG_STA); + break; + + case KEY_ADD_ITEM: + switch (wins_slctd()) { + case APP: + apoint_add(); + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + break; + case TOD: + todo_new_item(); + if (todo_hilt() == 0 && todo_nb() == 1) + todo_hilt_increase(1); + wins_update(FLAG_TOD | FLAG_STA); + break; + default: + break; + } + break; + + case KEY_EDIT_ITEM: + if (wins_slctd() == APP && apoint_hilt() != 0) { + day_edit_item(); + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + } else if (wins_slctd() == TOD && todo_hilt() != 0) { + todo_edit_item(); + wins_update(FLAG_TOD | FLAG_STA); + } + break; + + case KEY_DEL_ITEM: + if (wins_slctd() == APP && apoint_hilt() != 0) { + apoint_delete(&inday.nb_events, &inday.nb_apoints); + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + } else if (wins_slctd() == TOD && todo_hilt() != 0) { + todo_delete(); + wins_update(FLAG_TOD | FLAG_STA); + } + break; + + case KEY_GENERIC_CUT: + if (wins_slctd() == APP && apoint_hilt() != 0) { + cut_item = apoint_cut(&inday.nb_events, &inday.nb_apoints); + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_PASTE: + if (wins_slctd() == APP) { + apoint_paste(&inday.nb_events, &inday.nb_apoints, cut_item); + cut_item = 0; + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_REPEAT_ITEM: + if (wins_slctd() == APP && apoint_hilt() != 0) + recur_repeat_item(); + inday = do_storage(0); + wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); + break; + + case KEY_FLAG_ITEM: + if (wins_slctd() == APP && apoint_hilt() != 0) { + apoint_switch_notify(); + inday = do_storage(0); + wins_update(FLAG_APP); + } else if (wins_slctd() == TOD && todo_hilt() != 0) { + todo_flag(); + wins_update(FLAG_TOD); + } + break; + + case KEY_PIPE_ITEM: + if (wins_slctd() == APP && apoint_hilt() != 0) + day_pipe_item(); + else if (wins_slctd() == TOD && todo_hilt() != 0) + todo_pipe_item(); + wins_update(FLAG_ALL); + break; + + case KEY_RAISE_PRIORITY: + case KEY_LOWER_PRIORITY: + if (wins_slctd() == TOD && todo_hilt() != 0) { + todo_chg_priority(key); + if (todo_hilt_pos() < 0) + todo_set_first(todo_hilt()); + else if (todo_hilt_pos() >= win[TOD].h - 4) + todo_set_first(todo_hilt() - win[TOD].h + 5); + wins_update(FLAG_TOD); + } + break; + + case KEY_EDIT_NOTE: + if (wins_slctd() == APP && apoint_hilt() != 0) { + day_edit_note(conf.editor); + inday = do_storage(0); + } else if (wins_slctd() == TOD && todo_hilt() != 0) + todo_edit_note(conf.editor); + wins_update(FLAG_ALL); + break; + + case KEY_VIEW_NOTE: + if (wins_slctd() == APP && apoint_hilt() != 0) + day_view_note(conf.pager); + else if (wins_slctd() == TOD && todo_hilt() != 0) + todo_view_note(conf.pager); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_HELP: + wins_status_bar(); + help_screen(); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_SAVE: + io_save_cal(IO_SAVE_DISPLAY_BAR); + wins_update(FLAG_STA); + break; + + case KEY_GENERIC_IMPORT: + wins_erase_status_bar(); + io_import_data(IO_IMPORT_ICAL, NULL); + inday = do_storage(0); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_EXPORT: + wins_erase_status_bar(); + io_export_bar(); + while ((key = wgetch(win[STA].p)) != 'q') { + switch (key) { + case 'I': + case 'i': + io_export_data(IO_EXPORT_ICAL); + break; + case 'P': + case 'p': + io_export_data(IO_EXPORT_PCAL); break; - - case KEY_RESIZE: - case ERR: - /* Do not reset the count parameter on resize or error. */ - continue; - - default: + } + wins_reset(); + wins_update(FLAG_ALL); + wins_erase_status_bar(); + io_export_bar(); + } + inday = do_storage(0); + wins_update(FLAG_ALL); + break; + + case KEY_GENERIC_NEXT_DAY: + case KEY_MOVE_RIGHT: + if (wins_slctd() == CAL || key == KEY_GENERIC_NEXT_DAY) { + calendar_move(RIGHT, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_PREV_DAY: + case KEY_MOVE_LEFT: + if (wins_slctd() == CAL || key == KEY_GENERIC_PREV_DAY) { + calendar_move(LEFT, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_PREV_WEEK: + case KEY_MOVE_UP: + if (wins_slctd() == CAL || key == KEY_GENERIC_PREV_WEEK) { + calendar_move(UP, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } else if (wins_slctd() == APP) { + if (count >= apoint_hilt()) + count = apoint_hilt() - 1; + apoint_hilt_decrease(count); + apoint_scroll_pad_up(inday.nb_events); + wins_update(FLAG_APP); + } else if (wins_slctd() == TOD) { + if (count >= todo_hilt()) + count = todo_hilt() - 1; + todo_hilt_decrease(count); + if (todo_hilt_pos() < 0) + todo_first_increase(todo_hilt_pos()); + wins_update(FLAG_TOD); + } + break; + + case KEY_GENERIC_NEXT_WEEK: + case KEY_MOVE_DOWN: + if (wins_slctd() == CAL || key == KEY_GENERIC_NEXT_WEEK) { + calendar_move(DOWN, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } else if (wins_slctd() == APP) { + if (count > inday.nb_events + inday.nb_apoints - apoint_hilt()) + count = inday.nb_events + inday.nb_apoints - apoint_hilt(); + apoint_hilt_increase(count); + apoint_scroll_pad_down(inday.nb_events, win[APP].h); + wins_update(FLAG_APP); + } else if (wins_slctd() == TOD) { + if (count > todo_nb() - todo_hilt()) + count = todo_nb() - todo_hilt(); + todo_hilt_increase(count); + if (todo_hilt_pos() >= win[TOD].h - 4) + todo_first_increase(todo_hilt_pos() - win[TOD].h + 5); + wins_update(FLAG_TOD); + } + break; + + case KEY_START_OF_WEEK: + if (wins_slctd() == CAL) { + calendar_move(WEEK_START, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_END_OF_WEEK: + if (wins_slctd() == CAL) { + calendar_move(WEEK_END, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_SCROLL_UP: + if (wins_slctd() == CAL) { + calendar_view_prev(); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_SCROLL_DOWN: + if (wins_slctd() == CAL) { + calendar_view_next(); + wins_update(FLAG_CAL | FLAG_APP); + } + break; + + case KEY_GENERIC_QUIT: + if (conf.auto_save) + io_save_cal(IO_SAVE_DISPLAY_BAR); + if (conf.auto_gc) + note_gc(); + + if (conf.confirm_quit) { + if (status_ask_bool(_("Do you really want to quit ?")) == 1) + exit_calcurse(EXIT_SUCCESS); + else { + wins_erase_status_bar(); + wins_update(FLAG_STA); break; } + } else + exit_calcurse(EXIT_SUCCESS); + break; - count = 0; + case KEY_RESIZE: + case ERR: + /* Do not reset the count parameter on resize or error. */ + continue; + + default: + break; } + + count = 0; + } } diff --git a/src/calcurse.h b/src/calcurse.h index dad9f44..9efb4fd 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -40,13 +40,13 @@ #include "config.h" #ifdef HAVE_NCURSES_H -# include <ncurses.h> +#include <ncurses.h> #elif defined HAVE_NCURSES_NCURSES_H -# include <ncurses/ncurses.h> +#include <ncurses/ncurses.h> #elif defined HAVE_NCURSESW_NCURSES_H -# include <ncursesw/ncurses.h> +#include <ncursesw/ncurses.h> #else -# error "Missing ncurses header. Aborting..." +#error "Missing ncurses header. Aborting..." #endif #include <pthread.h> @@ -60,24 +60,24 @@ /* Internationalization. */ #if ENABLE_NLS -# include <locale.h> -# include <libintl.h> -# undef _ -# define _(String) gettext(String) -# ifdef gettext_noop -# define N_(String) gettext_noop(String) -# else -# define N_(String) (String) -# endif +#include <locale.h> +#include <libintl.h> +#undef _ +#define _(String) gettext(String) +#ifdef gettext_noop +#define N_(String) gettext_noop(String) +#else +#define N_(String) (String) +#endif #else /* NLS disabled */ -# define _(String) (String) -# define N_(String) (String) -# define textdomain(String) (String) -# define gettext(String) (String) -# define dgettext(String) (String) -# define dcgettext(String) (String) -# define bindtextdomain(String) (String) -# define bind_textdomain_codeset(Domain,Codeset) (Codeset) +#define _(String) (String) +#define N_(String) (String) +#define textdomain(String) (String) +#define gettext(String) (String) +#define dgettext(String) (String) +#define dcgettext(String) (String) +#define bindtextdomain(String) (String) +#define bind_textdomain_codeset(Domain,Codeset) (Codeset) #endif /* ENABLE_NLS */ /* Paths configuration. */ @@ -152,9 +152,9 @@ #define TAB 9 #define SPACE 32 -#define KEYS_KEYLEN 3 /* length of each keybinding */ -#define KEYS_LABELEN 8 /* length of command description */ -#define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */ +#define KEYS_KEYLEN 3 /* length of each keybinding */ +#define KEYS_LABELEN 8 /* length of command description */ +#define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */ /* Size of the hash table the note garbage collector uses. */ #define NOTE_GC_HSIZE 1024 @@ -228,23 +228,23 @@ /* General configuration variables. */ struct conf { - unsigned auto_save; - unsigned auto_gc; - unsigned periodic_save; - unsigned confirm_quit; - unsigned confirm_delete; - unsigned system_dialogs; - unsigned progress_bar; + unsigned auto_save; + unsigned auto_gc; + unsigned periodic_save; + unsigned confirm_quit; + unsigned confirm_delete; + unsigned system_dialogs; + unsigned progress_bar; const char *editor; const char *pager; - char output_datefmt[BUFSIZ]; /* format for displaying date */ - int input_datefmt; /* format for reading date */ + char output_datefmt[BUFSIZ]; /* format for displaying date */ + int input_datefmt; /* format for reading date */ }; /* Daemon-related configuration. */ struct dmon_conf { - unsigned enable; /* launch daemon automatically when exiting */ - unsigned log; /* log daemon activity */ + unsigned enable; /* launch daemon automatically when exiting */ + unsigned log; /* log daemon activity */ }; enum datefmt { @@ -270,33 +270,32 @@ struct date { }; /* Appointment definition. */ -struct apoint -{ - long start; /* seconds since 1 jan 1970 */ - long dur; /* duration of the appointment in seconds */ +struct apoint { + long start; /* seconds since 1 jan 1970 */ + long dur; /* duration of the appointment in seconds */ #define APOINT_NULL 0x0 -#define APOINT_NOTIFY 0x1 /* Item needs to be notified */ -#define APOINT_NOTIFIED 0x2 /* Item was already notified */ - int state; +#define APOINT_NOTIFY 0x1 /* Item needs to be notified */ +#define APOINT_NOTIFIED 0x2 /* Item was already notified */ + int state; - char *mesg; - char *note; + char *mesg; + char *note; }; /* Event definition. */ struct event { - int id; /* event identifier */ - long day; /* seconds since 1 jan 1970 */ - char *mesg; - char *note; + int id; /* event identifier */ + long day; /* seconds since 1 jan 1970 */ + char *mesg; + char *note; }; /* Todo item definition. */ struct todo { - char *mesg; - int id; - char *note; + char *mesg; + int id; + char *note; }; /* Number of items in current day. */ @@ -307,18 +306,18 @@ struct day_items_nb { /* Generic item description (to hold appointments, events...). */ struct day_item { - long start; /* seconds since 1 jan 1970 */ - long appt_dur; /* appointment duration in seconds */ - int type; /* (recursive or normal) event or appointment */ - int evnt_id; /* event identifier */ - int appt_pos; /* real position in recurrent list */ - char state; /* appointment state */ - char *mesg; /* item description */ - char *note; /* note attached to item */ + long start; /* seconds since 1 jan 1970 */ + long appt_dur; /* appointment duration in seconds */ + int type; /* (recursive or normal) event or appointment */ + int evnt_id; /* event identifier */ + int appt_pos; /* real position in recurrent list */ + char state; /* appointment state */ + char *mesg; /* item description */ + char *note; /* note attached to item */ }; struct excp { - long st; /* beggining of the considered day, in seconds */ + long st; /* beggining of the considered day, in seconds */ }; enum recur_type { @@ -332,43 +331,43 @@ enum recur_type { /* To describe an item's repetition. */ struct rpt { - enum recur_type type; /* repetition type */ - int freq; /* repetition frequence */ - long until; /* ending date for repeated event */ + enum recur_type type; /* repetition type */ + int freq; /* repetition frequence */ + long until; /* ending date for repeated event */ }; /* Recurrent appointment definition. */ struct recur_apoint { - struct rpt *rpt; /* information about repetition */ - llist_t exc; /* days when the item should not be repeated */ - long start; /* beggining of the appointment */ - long dur; /* duration of the appointment */ - char state; /* 8 bits to store item state */ - char *mesg; /* appointment description */ - char *note; /* note attached to appointment */ + struct rpt *rpt; /* information about repetition */ + llist_t exc; /* days when the item should not be repeated */ + long start; /* beggining of the appointment */ + long dur; /* duration of the appointment */ + char state; /* 8 bits to store item state */ + char *mesg; /* appointment description */ + char *note; /* note attached to appointment */ }; /* Reccurent event definition. */ struct recur_event { - struct rpt *rpt; /* information about repetition */ - llist_t exc; /* days when the item should not be repeated */ - int id; /* event type */ - long day; /* day at which event occurs */ - char *mesg; /* event description */ - char *note; /* note attached to event */ + struct rpt *rpt; /* information about repetition */ + llist_t exc; /* days when the item should not be repeated */ + int id; /* event type */ + long day; /* day at which event occurs */ + char *mesg; /* event description */ + char *note; /* note attached to event */ }; struct notify_app { - long time; - int got_app; - char *txt; - char state; - pthread_mutex_t mutex; + long time; + int got_app; + char *txt; + char state; + pthread_mutex_t mutex; }; struct io_file { FILE *fd; - char name[BUFSIZ]; + char name[BUFSIZ]; }; /* Available keys. */ @@ -422,8 +421,8 @@ enum key { /* To describe a key binding. */ struct binding { - char *label; - enum key action; + char *label; + enum key action; }; enum win { @@ -450,41 +449,41 @@ enum ui_mode { /* Generic window structure. */ struct window { - WINDOW *p; /* pointer to window */ - unsigned w; /* width */ - unsigned h; /* height */ - int x; /* x position */ - int y; /* y position */ + WINDOW *p; /* pointer to window */ + unsigned w; /* width */ + unsigned h; /* height */ + int x; /* x position */ + int y; /* y position */ }; /* Generic scrolling window structure. */ struct scrollwin { - struct window win; - struct window pad; - unsigned first_visible_line; - unsigned total_lines; - const char *label; + struct window win; + struct window pad; + unsigned first_visible_line; + unsigned total_lines; + const char *label; }; /* Pad structure to handle scrolling. */ struct pad { - int width; - int length; - int first_onscreen; /* first line to be displayed inside window */ - WINDOW *ptrwin; /* pointer to the pad window */ + int width; + int length; + int first_onscreen; /* first line to be displayed inside window */ + WINDOW *ptrwin; /* pointer to the pad window */ }; /* Notification bar definition. */ struct nbar { - unsigned show; /* display or hide the notify-bar */ - int cntdwn; /* warn when time left before next app - becomes lesser than cntdwn */ - char datefmt[BUFSIZ]; /* format for displaying date */ - char timefmt[BUFSIZ]; /* format for displaying time */ - char cmd[BUFSIZ]; /* notification command */ - const char *shell; /* user shell to launch notif. cmd */ - unsigned notify_all; /* notify all appointments */ - pthread_mutex_t mutex; + unsigned show; /* display or hide the notify-bar */ + int cntdwn; /* warn when time left before next app + becomes lesser than cntdwn */ + char datefmt[BUFSIZ]; /* format for displaying date */ + char timefmt[BUFSIZ]; /* format for displaying time */ + char cmd[BUFSIZ]; /* notification command */ + const char *shell; /* user shell to launch notif. cmd */ + unsigned notify_all; /* notify all appointments */ + pthread_mutex_t mutex; }; /* Available types of items. */ @@ -507,8 +506,8 @@ enum eraseflg { /* Return codes for the getstring() function. */ enum getstr { GETSTRING_VALID, - GETSTRING_ESC, /* user pressed escape to cancel editing. */ - GETSTRING_RET /* return was pressed without entering any text. */ + GETSTRING_ESC, /* user pressed escape to cancel editing. */ + GETSTRING_RET /* return was pressed without entering any text. */ }; /* Week days. */ @@ -569,438 +568,429 @@ enum save_display { /* apoint.c */ extern llist_ts_t alist_p; -void apoint_free_bkp (void); -void apoint_llist_init (void); -void apoint_llist_free (void); -void apoint_hilt_set (int); -void apoint_hilt_decrease (int); -void apoint_hilt_increase (int); -int apoint_hilt (void); -struct apoint *apoint_new (char *, char *, long, long, char); -void apoint_add (void); -void apoint_delete (unsigned *, unsigned *); -int apoint_cut (unsigned *, unsigned *); -void apoint_paste (unsigned *, unsigned *, int); -unsigned apoint_inday (struct apoint *, long); -void apoint_sec2str (struct apoint *, long, char *, char *); -void apoint_write (struct apoint *, FILE *); -struct apoint *apoint_scan (FILE *, struct tm, struct tm, char, char *); -struct apoint *apoint_get (long, int); -void apoint_delete_bynum (long, unsigned, enum eraseflg); -void apoint_scroll_pad_down (int, int); -void apoint_scroll_pad_up (int); -struct notify_app *apoint_check_next (struct notify_app *, long); -void apoint_switch_notify (void); -void apoint_update_panel (int); -void apoint_paste_item (void); +void apoint_free_bkp(void); +void apoint_llist_init(void); +void apoint_llist_free(void); +void apoint_hilt_set(int); +void apoint_hilt_decrease(int); +void apoint_hilt_increase(int); +int apoint_hilt(void); +struct apoint *apoint_new(char *, char *, long, long, char); +void apoint_add(void); +void apoint_delete(unsigned *, unsigned *); +int apoint_cut(unsigned *, unsigned *); +void apoint_paste(unsigned *, unsigned *, int); +unsigned apoint_inday(struct apoint *, long); +void apoint_sec2str(struct apoint *, long, char *, char *); +void apoint_write(struct apoint *, FILE *); +struct apoint *apoint_scan(FILE *, struct tm, struct tm, char, char *); +struct apoint *apoint_get(long, int); +void apoint_delete_bynum(long, unsigned, enum eraseflg); +void apoint_scroll_pad_down(int, int); +void apoint_scroll_pad_up(int); +struct notify_app *apoint_check_next(struct notify_app *, long); +void apoint_switch_notify(void); +void apoint_update_panel(int); +void apoint_paste_item(void); /* args.c */ -int parse_args (int, char **); +int parse_args(int, char **); /* calendar.c */ -void calendar_view_next (void); -void calendar_view_prev (void); -void calendar_set_view (int); -int calendar_get_view (void); -void calendar_start_date_thread (void); -void calendar_stop_date_thread (void); -void calendar_set_current_date (void); -void calendar_set_first_day_of_week (enum wday); -void calendar_change_first_day_of_week (void); -unsigned calendar_week_begins_on_monday (void); -void calendar_store_current_date (struct date *); -void calendar_init_slctd_day (void); -struct date *calendar_get_slctd_day (void); -long calendar_get_slctd_day_sec (void); -void calendar_update_panel (struct window *); -void calendar_goto_today (void); -void calendar_change_day (int); -void calendar_move (enum move, int); -long calendar_start_of_year (void); -long calendar_end_of_year (void); -const char *calendar_get_pom (time_t); +void calendar_view_next(void); +void calendar_view_prev(void); +void calendar_set_view(int); +int calendar_get_view(void); +void calendar_start_date_thread(void); +void calendar_stop_date_thread(void); +void calendar_set_current_date(void); +void calendar_set_first_day_of_week(enum wday); +void calendar_change_first_day_of_week(void); +unsigned calendar_week_begins_on_monday(void); +void calendar_store_current_date(struct date *); +void calendar_init_slctd_day(void); +struct date *calendar_get_slctd_day(void); +long calendar_get_slctd_day_sec(void); +void calendar_update_panel(struct window *); +void calendar_goto_today(void); +void calendar_change_day(int); +void calendar_move(enum move, int); +long calendar_start_of_year(void); +long calendar_end_of_year(void); +const char *calendar_get_pom(time_t); /* config.c */ -void config_load (void); -unsigned config_save (void); +void config_load(void); +unsigned config_save(void); /* custom.c */ -void custom_init_attr (void); -void custom_apply_attr (WINDOW *, int); -void custom_remove_attr (WINDOW *, int); -void custom_config_bar (void); -void custom_layout_config (void); -void custom_sidebar_config (void); -void custom_color_config (void); -void custom_color_theme_name (char *); -void custom_confwin_init (struct window *, const char *); -void custom_set_swsiz (struct scrollwin *); -void custom_general_config (void); -void custom_keys_config (void); -void custom_config_main (void); +void custom_init_attr(void); +void custom_apply_attr(WINDOW *, int); +void custom_remove_attr(WINDOW *, int); +void custom_config_bar(void); +void custom_layout_config(void); +void custom_sidebar_config(void); +void custom_color_config(void); +void custom_color_theme_name(char *); +void custom_confwin_init(struct window *, const char *); +void custom_set_swsiz(struct scrollwin *); +void custom_general_config(void); +void custom_keys_config(void); +void custom_config_main(void); /* day.c */ -void day_free_list (void); -struct day_items_nb *day_process_storage (struct date *, unsigned, - struct day_items_nb *); -void day_write_pad (long, int, int, int); -void day_popup_item (void); -int day_check_if_item (struct date); -unsigned day_chk_busy_slices (struct date, int, int *); -void day_edit_item (void); -int day_erase_item (long, int, enum eraseflg); -int day_cut_item (long, int); -int day_paste_item (long, int); -struct day_item *day_get_item (int); -int day_item_nb (long, int, int); -void day_edit_note (const char *); -void day_view_note (const char *); -void day_pipe_item (void); +void day_free_list(void); +struct day_items_nb *day_process_storage(struct date *, unsigned, + struct day_items_nb *); +void day_write_pad(long, int, int, int); +void day_popup_item(void); +int day_check_if_item(struct date); +unsigned day_chk_busy_slices(struct date, int, int *); +void day_edit_item(void); +int day_erase_item(long, int, enum eraseflg); +int day_cut_item(long, int); +int day_paste_item(long, int); +struct day_item *day_get_item(int); +int day_item_nb(long, int, int); +void day_edit_note(const char *); +void day_view_note(const char *); +void day_pipe_item(void); /* dmon.c */ -void dmon_start (int); -void dmon_stop (void); +void dmon_start(int); +void dmon_stop(void); /* event.c */ extern llist_t eventlist; -void event_free_bkp (void); -void event_llist_init (void); -void event_llist_free (void); -struct event *event_new (char *, char *, long, int); -unsigned event_inday (struct event *, long); -void event_write (struct event *, FILE *); -struct event *event_scan (FILE *, struct tm, int, char *); -struct event *event_get (long, int); -void event_delete_bynum (long, unsigned, enum eraseflg); -void event_paste_item (void); +void event_free_bkp(void); +void event_llist_init(void); +void event_llist_free(void); +struct event *event_new(char *, char *, long, int); +unsigned event_inday(struct event *, long); +void event_write(struct event *, FILE *); +struct event *event_scan(FILE *, struct tm, int, char *); +struct event *event_get(long, int); +void event_delete_bynum(long, unsigned, enum eraseflg); +void event_paste_item(void); /* help.c */ -void help_wins_init (struct scrollwin *, int, int, int, int); -void help_screen (void); +void help_wins_init(struct scrollwin *, int, int, int, int); +void help_screen(void); /* getstring.c */ -enum getstr getstring (WINDOW *, char *, int, int, int); -int updatestring (WINDOW *, char **, int, int); +enum getstr getstring(WINDOW *, char *, int, int, int); +int updatestring(WINDOW *, char **, int, int); /* ical.c */ -void ical_import_data (FILE *, FILE *, unsigned *, unsigned *, unsigned *, - unsigned *, unsigned *); -void ical_export_data (FILE *); +void ical_import_data(FILE *, FILE *, unsigned *, unsigned *, unsigned *, + unsigned *, unsigned *); +void ical_export_data(FILE *); /* io.c */ -unsigned io_fprintln (const char *, const char *, ...); -void io_init (const char *, const char *); -void io_extract_data (char *, const char *, int); -unsigned io_save_apts (void); -unsigned io_save_todo (void); -unsigned io_save_keys (void); -void io_save_cal (enum save_display); -void io_load_app (void); -void io_load_todo (void); -void io_load_keys (const char *); -void io_check_dir (char *, int *); -unsigned io_file_exist (char *); -void io_check_file (char *, int *); -int io_check_data_files (void); -void io_startup_screen (int); -void io_export_data (enum export_type); -void io_export_bar (void); -void io_import_data (enum import_type, const char *); -struct io_file *io_log_init (void); -void io_log_print (struct io_file *, int, const char *); -void io_log_display (struct io_file *, const char *, const char *); -void io_log_free (struct io_file *); -void io_start_psave_thread (void); -void io_stop_psave_thread (void); -void io_set_lock (void); -unsigned io_dump_pid (char *); -unsigned io_get_pid (char *); -int io_file_is_empty (char *); -int io_file_cp (const char *, const char *); +unsigned io_fprintln(const char *, const char *, ...); +void io_init(const char *, const char *); +void io_extract_data(char *, const char *, int); +unsigned io_save_apts(void); +unsigned io_save_todo(void); +unsigned io_save_keys(void); +void io_save_cal(enum save_display); +void io_load_app(void); +void io_load_todo(void); +void io_load_keys(const char *); +void io_check_dir(char *, int *); +unsigned io_file_exist(char *); +void io_check_file(char *, int *); +int io_check_data_files(void); +void io_startup_screen(int); +void io_export_data(enum export_type); +void io_export_bar(void); +void io_import_data(enum import_type, const char *); +struct io_file *io_log_init(void); +void io_log_print(struct io_file *, int, const char *); +void io_log_display(struct io_file *, const char *, const char *); +void io_log_free(struct io_file *); +void io_start_psave_thread(void); +void io_stop_psave_thread(void); +void io_set_lock(void); +unsigned io_dump_pid(char *); +unsigned io_get_pid(char *); +int io_file_is_empty(char *); +int io_file_cp(const char *, const char *); /* keys.c */ -void keys_init (void); -void keys_free (void); -void keys_dump_defaults (char *); -const char *keys_get_label (enum key); -enum key keys_get_action (int); -enum key keys_getch (WINDOW *win, int *); -int keys_assign_binding (int, enum key); -void keys_remove_binding (int, enum key); -int keys_str2int (const char *); -const char *keys_int2str (int); -int keys_action_count_keys (enum key); -const char *keys_action_firstkey (enum key); -const char *keys_action_nkey (enum key, int); -char *keys_action_allkeys (enum key); -void keys_display_bindings_bar (WINDOW *, struct binding *[], int, int, - int, struct binding *); -void keys_popup_info (enum key); -void keys_save_bindings (FILE *); -int keys_check_missing_bindings (void); -void keys_fill_missing (void); +void keys_init(void); +void keys_free(void); +void keys_dump_defaults(char *); +const char *keys_get_label(enum key); +enum key keys_get_action(int); +enum key keys_getch(WINDOW * win, int *); +int keys_assign_binding(int, enum key); +void keys_remove_binding(int, enum key); +int keys_str2int(const char *); +const char *keys_int2str(int); +int keys_action_count_keys(enum key); +const char *keys_action_firstkey(enum key); +const char *keys_action_nkey(enum key, int); +char *keys_action_allkeys(enum key); +void keys_display_bindings_bar(WINDOW *, struct binding *[], int, int, + int, struct binding *); +void keys_popup_info(enum key); +void keys_save_bindings(FILE *); +int keys_check_missing_bindings(void); +void keys_fill_missing(void); /* mem.c */ -void *xmalloc (size_t); -void *xcalloc (size_t, size_t); -void *xrealloc (void *, size_t, size_t); -char *xstrdup (const char *); -void xfree (void *); +void *xmalloc(size_t); +void *xcalloc(size_t, size_t); +void *xrealloc(void *, size_t, size_t); +char *xstrdup(const char *); +void xfree(void *); #ifdef CALCURSE_MEMORY_DEBUG -# define mem_malloc(s) dbg_malloc ((s), __FILE_POS__) -# define mem_calloc(n, s) dbg_calloc ((n), (s), __FILE_POS__) -# define mem_realloc(p, n, s) dbg_realloc ((p), (n), (s), __FILE_POS__) -# define mem_strdup(s) dbg_strdup ((s), __FILE_POS__) -# define mem_free(p) dbg_free ((p), __FILE_POS__) +#define mem_malloc(s) dbg_malloc ((s), __FILE_POS__) +#define mem_calloc(n, s) dbg_calloc ((n), (s), __FILE_POS__) +#define mem_realloc(p, n, s) dbg_realloc ((p), (n), (s), __FILE_POS__) +#define mem_strdup(s) dbg_strdup ((s), __FILE_POS__) +#define mem_free(p) dbg_free ((p), __FILE_POS__) -void *dbg_malloc (size_t, const char *); -void *dbg_calloc (size_t, size_t, const char *); -void *dbg_realloc (void *, size_t, size_t, const char *); -char *dbg_strdup (const char *, const char *); -void dbg_free (void *, const char *); -void mem_stats (void); +void *dbg_malloc(size_t, const char *); +void *dbg_calloc(size_t, size_t, const char *); +void *dbg_realloc(void *, size_t, size_t, const char *); +char *dbg_strdup(const char *, const char *); +void dbg_free(void *, const char *); +void mem_stats(void); #else /* MEMORY DEBUG disabled */ -# define mem_malloc(s) xmalloc ((s)) -# define mem_calloc(n, s) xcalloc ((n), (s)) -# define mem_realloc(p, n, s) xrealloc ((p), (n), (s)) -# define mem_strdup(s) xstrdup ((s)) -# define mem_free(p) xfree ((p)) -# define mem_stats() +#define mem_malloc(s) xmalloc ((s)) +#define mem_calloc(n, s) xcalloc ((n), (s)) +#define mem_realloc(p, n, s) xrealloc ((p), (n), (s)) +#define mem_strdup(s) xstrdup ((s)) +#define mem_free(p) xfree ((p)) +#define mem_stats() #endif /* CALCURSE_MEMORY_DEBUG */ /* note.c */ -char *generate_note (const char *); -void edit_note (char **, const char *); -void view_note (const char *, const char *); -void erase_note (char **); -void note_read (char *, FILE *); -void note_gc (void); +char *generate_note(const char *); +void edit_note(char **, const char *); +void view_note(const char *, const char *); +void erase_note(char **); +void note_read(char *, FILE *); +void note_gc(void); /* notify.c */ -int notify_time_left (void); -unsigned notify_needs_reminder (void); -void notify_update_app (long, char, char *); -int notify_bar (void); -void notify_init_vars (void); -void notify_init_bar (void); -void notify_free_app (void); -void notify_start_main_thread (void); -void notify_stop_main_thread (void); -void notify_reinit_bar (void); -unsigned notify_launch_cmd (void); -void notify_update_bar (void); -unsigned notify_get_next (struct notify_app *); -unsigned notify_get_next_bkgd (void); -char *notify_app_txt (void); -void notify_check_next_app (int); -void notify_check_added (char *, long, char); -void notify_check_repeated (struct recur_apoint *); -int notify_same_item (long); -int notify_same_recur_item (struct recur_apoint *); -void notify_config_bar (void); +int notify_time_left(void); +unsigned notify_needs_reminder(void); +void notify_update_app(long, char, char *); +int notify_bar(void); +void notify_init_vars(void); +void notify_init_bar(void); +void notify_free_app(void); +void notify_start_main_thread(void); +void notify_stop_main_thread(void); +void notify_reinit_bar(void); +unsigned notify_launch_cmd(void); +void notify_update_bar(void); +unsigned notify_get_next(struct notify_app *); +unsigned notify_get_next_bkgd(void); +char *notify_app_txt(void); +void notify_check_next_app(int); +void notify_check_added(char *, long, char); +void notify_check_repeated(struct recur_apoint *); +int notify_same_item(long); +int notify_same_recur_item(struct recur_apoint *); +void notify_config_bar(void); /* pcal.c */ -void pcal_export_data (FILE *); +void pcal_export_data(FILE *); /* recur.c */ extern llist_ts_t recur_alist_p; extern llist_t recur_elist; -void recur_event_free_bkp (void); -void recur_apoint_free_bkp (void); -void recur_apoint_llist_init (void); -void recur_apoint_llist_free (void); -void recur_event_llist_free (void); -struct recur_apoint *recur_apoint_new (char *, char *, long, long, char, - int, int, long, llist_t *); -struct recur_event *recur_event_new (char *, char *, long, int, int, int, - long, llist_t *); -char recur_def2char (enum recur_type); -int recur_char2def (char); -struct recur_apoint *recur_apoint_scan (FILE *, struct tm, struct tm, - char, int, struct tm, char *, - llist_t *, char); -struct recur_event *recur_event_scan (FILE *, struct tm, int, char, - int, struct tm, char *, - llist_t *); -void recur_apoint_write (struct recur_apoint *, FILE *); -void recur_event_write (struct recur_event *, FILE *); -void recur_save_data (FILE *); -unsigned recur_item_find_occurrence (long, long, llist_t *, int, - int, long, long, unsigned *); -unsigned recur_apoint_find_occurrence (struct recur_apoint *, - long, unsigned *); -unsigned recur_event_find_occurrence (struct recur_event *, long, - unsigned *); -unsigned recur_item_inday (long, long, llist_t *, int, int, long, - long); -unsigned recur_apoint_inday(struct recur_apoint *, long); -unsigned recur_event_inday(struct recur_event *, long); -void recur_event_erase (long, unsigned, unsigned, - enum eraseflg); -void recur_apoint_erase (long, unsigned, unsigned, - enum eraseflg); -void recur_repeat_item (void); -void recur_exc_scan (llist_t *, FILE *); -struct notify_app *recur_apoint_check_next (struct notify_app *, long, long); -struct recur_apoint *recur_get_apoint (long, int); -struct recur_event *recur_get_event (long, int); -void recur_apoint_switch_notify (long, int); -void recur_event_paste_item (void); -void recur_apoint_paste_item (void); +void recur_event_free_bkp(void); +void recur_apoint_free_bkp(void); +void recur_apoint_llist_init(void); +void recur_apoint_llist_free(void); +void recur_event_llist_free(void); +struct recur_apoint *recur_apoint_new(char *, char *, long, long, char, + int, int, long, llist_t *); +struct recur_event *recur_event_new(char *, char *, long, int, int, int, + long, llist_t *); +char recur_def2char(enum recur_type); +int recur_char2def(char); +struct recur_apoint *recur_apoint_scan(FILE *, struct tm, struct tm, + char, int, struct tm, char *, + llist_t *, char); +struct recur_event *recur_event_scan(FILE *, struct tm, int, char, + int, struct tm, char *, llist_t *); +void recur_apoint_write(struct recur_apoint *, FILE *); +void recur_event_write(struct recur_event *, FILE *); +void recur_save_data(FILE *); +unsigned recur_item_find_occurrence(long, long, llist_t *, int, + int, long, long, unsigned *); +unsigned recur_apoint_find_occurrence(struct recur_apoint *, long, unsigned *); +unsigned recur_event_find_occurrence(struct recur_event *, long, unsigned *); +unsigned recur_item_inday(long, long, llist_t *, int, int, long, long); +unsigned recur_apoint_inday(struct recur_apoint *, long); +unsigned recur_event_inday(struct recur_event *, long); +void recur_event_erase(long, unsigned, unsigned, enum eraseflg); +void recur_apoint_erase(long, unsigned, unsigned, enum eraseflg); +void recur_repeat_item(void); +void recur_exc_scan(llist_t *, FILE *); +struct notify_app *recur_apoint_check_next(struct notify_app *, long, long); +struct recur_apoint *recur_get_apoint(long, int); +struct recur_event *recur_get_event(long, int); +void recur_apoint_switch_notify(long, int); +void recur_event_paste_item(void); +void recur_apoint_paste_item(void); /* sigs.c */ -void sigs_init (void); -unsigned sigs_set_hdlr (int, void (*)(int)); +void sigs_init(void); +unsigned sigs_set_hdlr(int, void (*)(int)); /* todo.c */ extern llist_t todolist; -void todo_hilt_set (int); -void todo_hilt_decrease (int); -void todo_hilt_increase (int); -int todo_hilt (void); -int todo_nb (void); -void todo_set_nb (int); -void todo_set_first (int); -void todo_first_increase (int); -void todo_first_decrease (int); -int todo_hilt_pos (void); -char *todo_saved_mesg (void); -void todo_new_item (void); -struct todo *todo_add (char *, int, char *); -void todo_write (struct todo *, FILE *); -void todo_flag (void); -void todo_delete (void); -void todo_chg_priority (int); -void todo_edit_item (void); -void todo_update_panel (int); -void todo_edit_note (const char *); -void todo_view_note (const char *); -void todo_pipe_item (void); -void todo_init_list (void); -void todo_free_list (void); +void todo_hilt_set(int); +void todo_hilt_decrease(int); +void todo_hilt_increase(int); +int todo_hilt(void); +int todo_nb(void); +void todo_set_nb(int); +void todo_set_first(int); +void todo_first_increase(int); +void todo_first_decrease(int); +int todo_hilt_pos(void); +char *todo_saved_mesg(void); +void todo_new_item(void); +struct todo *todo_add(char *, int, char *); +void todo_write(struct todo *, FILE *); +void todo_flag(void); +void todo_delete(void); +void todo_chg_priority(int); +void todo_edit_item(void); +void todo_update_panel(int); +void todo_edit_note(const char *); +void todo_view_note(const char *); +void todo_pipe_item(void); +void todo_init_list(void); +void todo_free_list(void); /* utf8.c */ -int utf8_width (char *); -int utf8_strwidth (char *); +int utf8_width(char *); +int utf8_strwidth(char *); /* utils.c */ -void exit_calcurse (int) __attribute__((__noreturn__)); -void free_user_data (void); -void fatalbox (const char *); -void warnbox (const char *); -void status_mesg (const char *, const char *); -int status_ask_choice (const char *, const char[], int); -int status_ask_bool (const char *); -int status_ask_simplechoice (const char *, const char *[], int); -void erase_window_part (WINDOW *, int, int, int, int); -WINDOW *popup (int, int, int, int, const char *, const char *, int); -void print_in_middle (WINDOW *, int, int, int, const char *); -int is_all_digit (const char *); -long get_item_time (long); -int get_item_hour (long); -int get_item_min (long); -long date2sec (struct date, unsigned, unsigned); -char *date_sec2date_str (long, const char *); -void date_sec2date_fmt (long, const char *, char *); -long date_sec_change (long, int, int); -long update_time_in_date (long, unsigned, unsigned); -long get_sec_date (struct date); -long min2sec (unsigned); -void draw_scrollbar (WINDOW *, int, int, int, int, int, unsigned); -void item_in_popup (const char *, const char *, const char *, - const char *); -long get_today (void); -long now (void); -char *nowstr (void); -long mystrtol (const char *); -void print_bool_option_incolor (WINDOW *, unsigned, int, int); -const char *get_tempdir (void); -char *new_tempfile (const char *, int); -int parse_date (const char *, enum datefmt, int *, int *, int *, - struct date *); -int parse_time (const char *, unsigned *, unsigned *); -int parse_duration (const char *, unsigned *); -void str_toupper (char *); -void file_close (FILE *, const char *); -void psleep (unsigned); -int fork_exec (int *, int *, const char *, const char *const *); -int shell_exec (int *, int *, const char *, const char *const *); -int child_wait (int *, int *, int); -void press_any_key (void); -void print_apoint (const char *, long, struct apoint *); -void print_event (const char *, long, struct event *); -void print_recur_apoint (const char *, long, unsigned, - struct recur_apoint *); -void print_recur_event (const char *, long, struct recur_event *); -void print_todo (const char *, struct todo *); +void exit_calcurse(int) __attribute__ ((__noreturn__)); +void free_user_data(void); +void fatalbox(const char *); +void warnbox(const char *); +void status_mesg(const char *, const char *); +int status_ask_choice(const char *, const char[], int); +int status_ask_bool(const char *); +int status_ask_simplechoice(const char *, const char *[], int); +void erase_window_part(WINDOW *, int, int, int, int); +WINDOW *popup(int, int, int, int, const char *, const char *, int); +void print_in_middle(WINDOW *, int, int, int, const char *); +int is_all_digit(const char *); +long get_item_time(long); +int get_item_hour(long); +int get_item_min(long); +long date2sec(struct date, unsigned, unsigned); +char *date_sec2date_str(long, const char *); +void date_sec2date_fmt(long, const char *, char *); +long date_sec_change(long, int, int); +long update_time_in_date(long, unsigned, unsigned); +long get_sec_date(struct date); +long min2sec(unsigned); +void draw_scrollbar(WINDOW *, int, int, int, int, int, unsigned); +void item_in_popup(const char *, const char *, const char *, const char *); +long get_today(void); +long now(void); +char *nowstr(void); +long mystrtol(const char *); +void print_bool_option_incolor(WINDOW *, unsigned, int, int); +const char *get_tempdir(void); +char *new_tempfile(const char *, int); +int parse_date(const char *, enum datefmt, int *, int *, int *, struct date *); +int parse_time(const char *, unsigned *, unsigned *); +int parse_duration(const char *, unsigned *); +void str_toupper(char *); +void file_close(FILE *, const char *); +void psleep(unsigned); +int fork_exec(int *, int *, const char *, const char *const *); +int shell_exec(int *, int *, const char *, const char *const *); +int child_wait(int *, int *, int); +void press_any_key(void); +void print_apoint(const char *, long, struct apoint *); +void print_event(const char *, long, struct event *); +void print_recur_apoint(const char *, long, unsigned, struct recur_apoint *); +void print_recur_event(const char *, long, struct recur_event *); +void print_todo(const char *, struct todo *); /* vars.c */ -extern int col, row; -extern int resize; -extern unsigned colorize; -extern int foreground, background; -extern enum ui_mode ui_mode; -extern int read_only; -extern int days[12]; -extern const char *monthnames[12]; -extern const char *daynames[8]; -extern char path_dir[BUFSIZ]; -extern char path_todo[BUFSIZ]; -extern char path_apts[BUFSIZ]; -extern char path_conf[BUFSIZ]; -extern char path_keys[BUFSIZ]; -extern char path_notes[BUFSIZ]; -extern char path_cpid[BUFSIZ]; -extern char path_dpid[BUFSIZ]; -extern char path_dmon_log[BUFSIZ]; -extern struct conf conf; -extern struct pad apad; -extern struct nbar nbar; -extern struct dmon_conf dmon; -void vars_init (void); +extern int col, row; +extern int resize; +extern unsigned colorize; +extern int foreground, background; +extern enum ui_mode ui_mode; +extern int read_only; +extern int days[12]; +extern const char *monthnames[12]; +extern const char *daynames[8]; +extern char path_dir[BUFSIZ]; +extern char path_todo[BUFSIZ]; +extern char path_apts[BUFSIZ]; +extern char path_conf[BUFSIZ]; +extern char path_keys[BUFSIZ]; +extern char path_notes[BUFSIZ]; +extern char path_cpid[BUFSIZ]; +extern char path_dpid[BUFSIZ]; +extern char path_dmon_log[BUFSIZ]; +extern struct conf conf; +extern struct pad apad; +extern struct nbar nbar; +extern struct dmon_conf dmon; +void vars_init(void); /* wins.c */ extern struct window win[NBWINS]; -int wins_refresh (void); -int wins_wrefresh (WINDOW *); -int wins_doupdate (void); -int wins_layout (void); -void wins_set_layout (int); -unsigned wins_sbar_width (void); -unsigned wins_sbar_wperc (void); -void wins_set_sbar_width (unsigned); -void wins_sbar_winc (void); -void wins_sbar_wdec (void); -void wins_slctd_init (void); -enum win wins_slctd (void); -void wins_slctd_set (enum win); -void wins_slctd_next (void); -void wins_init (void); -void wins_scrollwin_init (struct scrollwin *); -void wins_scrollwin_delete (struct scrollwin *); -void wins_scrollwin_display (struct scrollwin *); -void wins_scrollwin_up (struct scrollwin *, int); -void wins_scrollwin_down (struct scrollwin *, int); -void wins_reinit (void); -void wins_reinit_panels (void); -void wins_show (WINDOW *, const char *); -void wins_get_config (void); -void wins_update_border (int); -void wins_update_panels (int); -void wins_update (int); -void wins_reset (void); -void wins_prepare_external (void); -void wins_unprepare_external (void); -void wins_launch_external (const char *, const char *); -void wins_status_bar (void); -void wins_erase_status_bar (void); -void wins_other_status_page (int); -void wins_reset_status_page (void); +int wins_refresh(void); +int wins_wrefresh(WINDOW *); +int wins_doupdate(void); +int wins_layout(void); +void wins_set_layout(int); +unsigned wins_sbar_width(void); +unsigned wins_sbar_wperc(void); +void wins_set_sbar_width(unsigned); +void wins_sbar_winc(void); +void wins_sbar_wdec(void); +void wins_slctd_init(void); +enum win wins_slctd(void); +void wins_slctd_set(enum win); +void wins_slctd_next(void); +void wins_init(void); +void wins_scrollwin_init(struct scrollwin *); +void wins_scrollwin_delete(struct scrollwin *); +void wins_scrollwin_display(struct scrollwin *); +void wins_scrollwin_up(struct scrollwin *, int); +void wins_scrollwin_down(struct scrollwin *, int); +void wins_reinit(void); +void wins_reinit_panels(void); +void wins_show(WINDOW *, const char *); +void wins_get_config(void); +void wins_update_border(int); +void wins_update_panels(int); +void wins_update(int); +void wins_reset(void); +void wins_prepare_external(void); +void wins_unprepare_external(void); +void wins_launch_external(const char *, const char *); +void wins_status_bar(void); +void wins_erase_status_bar(void); +void wins_other_status_page(int); +void wins_reset_status_page(void); #endif /* CALCURSE_H */ diff --git a/src/calendar.c b/src/calendar.c index 564ee70..7328718 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -48,12 +48,12 @@ #endif #define EPOCH 90 -#define EPSILONg 279.403303 /* solar ecliptic long at EPOCH */ -#define RHOg 282.768422 /* solar ecliptic long of perigee at EPOCH */ -#define ECCEN 0.016713 /* solar orbit eccentricity */ -#define lzero 318.351648 /* lunar mean long at EPOCH */ -#define Pzero 36.340410 /* lunar mean long of perigee at EPOCH */ -#define Nzero 318.510107 /* lunar mean long of node at EPOCH */ +#define EPSILONg 279.403303 /* solar ecliptic long at EPOCH */ +#define RHOg 282.768422 /* solar ecliptic long of perigee at EPOCH */ +#define ECCEN 0.016713 /* solar orbit eccentricity */ +#define lzero 318.351648 /* lunar mean long at EPOCH */ +#define Pzero 36.340410 /* lunar mean long of perigee at EPOCH */ +#define Nzero 318.510107 /* lunar mean long of node at EPOCH */ #define ISLEAP(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) @@ -77,198 +77,175 @@ static unsigned calendar_view, week_begins_on_monday; static pthread_mutex_t date_thread_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_t calendar_t_date; -static void draw_monthly_view (struct window *, struct date *, unsigned); -static void draw_weekly_view (struct window *, struct date *, unsigned); +static void draw_monthly_view(struct window *, struct date *, unsigned); +static void draw_weekly_view(struct window *, struct date *, unsigned); static void (*draw_calendar[CAL_VIEWS]) (struct window *, struct date *, - unsigned) = - {draw_monthly_view, draw_weekly_view}; + unsigned) = { +draw_monthly_view, draw_weekly_view}; /* Switch between calendar views (monthly view is selected by default). */ -void -calendar_view_next (void) +void calendar_view_next(void) { calendar_view++; if (calendar_view == CAL_VIEWS) calendar_view = 0; } -void -calendar_view_prev (void) +void calendar_view_prev(void) { if (calendar_view == 0) calendar_view = CAL_VIEWS; calendar_view--; } -void -calendar_set_view (int view) +void calendar_set_view(int view) { calendar_view = (view < 0 || view >= CAL_VIEWS) ? CAL_MONTH_VIEW : view; } -int -calendar_get_view (void) +int calendar_get_view(void) { return (int)calendar_view; } /* Thread needed to update current date in calendar. */ /* ARGSUSED0 */ -static void * -calendar_date_thread (void *arg) +static void *calendar_date_thread(void *arg) { time_t actual, tomorrow; - for (;;) - { - tomorrow = (time_t) (get_today () + DAYINSEC); + for (;;) { + tomorrow = (time_t) (get_today() + DAYINSEC); - while ((actual = time (NULL)) < tomorrow) - sleep (tomorrow - actual); + while ((actual = time(NULL)) < tomorrow) + sleep(tomorrow - actual); - calendar_set_current_date (); - calendar_update_panel (&win[CAL]); - } + calendar_set_current_date(); + calendar_update_panel(&win[CAL]); + } return NULL; } /* Launch the calendar date thread. */ -void -calendar_start_date_thread (void) +void calendar_start_date_thread(void) { - pthread_create (&calendar_t_date, NULL, calendar_date_thread, NULL); + pthread_create(&calendar_t_date, NULL, calendar_date_thread, NULL); } /* Stop the calendar date thread. */ -void -calendar_stop_date_thread (void) +void calendar_stop_date_thread(void) { - if (calendar_t_date) - { - pthread_cancel (calendar_t_date); - pthread_join (calendar_t_date, NULL); - } + if (calendar_t_date) { + pthread_cancel(calendar_t_date); + pthread_join(calendar_t_date, NULL); + } } /* Set static variable today to current date */ -void -calendar_set_current_date (void) +void calendar_set_current_date(void) { time_t timer; struct tm *tm; - timer = time (NULL); - tm = localtime (&timer); + timer = time(NULL); + tm = localtime(&timer); - pthread_mutex_lock (&date_thread_mutex); + pthread_mutex_lock(&date_thread_mutex); today.dd = tm->tm_mday; today.mm = tm->tm_mon + 1; today.yyyy = tm->tm_year + 1900; - pthread_mutex_unlock (&date_thread_mutex); + pthread_mutex_unlock(&date_thread_mutex); } /* Needed to display sunday or monday as the first day of week in calendar. */ -void -calendar_set_first_day_of_week (enum wday first_day) -{ - switch (first_day) - { - case SUNDAY: - week_begins_on_monday = 0; - break; - case MONDAY: - week_begins_on_monday = 1; - break; - default: - ERROR_MSG (_("ERROR setting first day of week")); - week_begins_on_monday = 0; - /* NOTREACHED */ - } +void calendar_set_first_day_of_week(enum wday first_day) +{ + switch (first_day) { + case SUNDAY: + week_begins_on_monday = 0; + break; + case MONDAY: + week_begins_on_monday = 1; + break; + default: + ERROR_MSG(_("ERROR setting first day of week")); + week_begins_on_monday = 0; + /* NOTREACHED */ + } } /* Swap first day of week in calendar. */ -void -calendar_change_first_day_of_week (void) +void calendar_change_first_day_of_week(void) { week_begins_on_monday = !week_begins_on_monday; } /* Return 1 if week begins on monday, 0 otherwise. */ -unsigned -calendar_week_begins_on_monday (void) +unsigned calendar_week_begins_on_monday(void) { return week_begins_on_monday; } /* Fill in the given variable with the current date. */ -void -calendar_store_current_date (struct date *date) +void calendar_store_current_date(struct date *date) { - pthread_mutex_lock (&date_thread_mutex); + pthread_mutex_lock(&date_thread_mutex); *date = today; - pthread_mutex_unlock (&date_thread_mutex); + pthread_mutex_unlock(&date_thread_mutex); } /* This is to start at the current date in calendar. */ -void -calendar_init_slctd_day (void) +void calendar_init_slctd_day(void) { - calendar_store_current_date (&slctd_day); + calendar_store_current_date(&slctd_day); } /* Return the selected day in calendar */ -struct date * -calendar_get_slctd_day (void) +struct date *calendar_get_slctd_day(void) { return &slctd_day; } /* Returned value represents the selected day in calendar (in seconds) */ -long -calendar_get_slctd_day_sec (void) +long calendar_get_slctd_day_sec(void) { - return date2sec (slctd_day, 0, 0); + return date2sec(slctd_day, 0, 0); } -static int -calendar_get_wday (struct date *date) +static int calendar_get_wday(struct date *date) { struct tm t; - memset (&t, 0, sizeof (struct tm)); + memset(&t, 0, sizeof(struct tm)); t.tm_mday = date->dd; t.tm_mon = date->mm - 1; t.tm_year = date->yyyy - 1900; - mktime (&t); + mktime(&t); return t.tm_wday; } -static unsigned -months_to_days (unsigned month) +static unsigned months_to_days(unsigned month) { return (month * 3057 - 3007) / 100; } - -static long -years_to_days (unsigned year) +static long years_to_days(unsigned year) { return year * 365L + year / 4 - year / 100 + year / 400; } -static long -ymd_to_scalar (unsigned year, unsigned month, unsigned day) +static long ymd_to_scalar(unsigned year, unsigned month, unsigned day) { long scalar; - scalar = day + months_to_days (month); + scalar = day + months_to_days(month); if (month > 2) - scalar -= ISLEAP (year) ? 1 : 2; + scalar -= ISLEAP(year) ? 1 : 2; year--; - scalar += years_to_days (year); + scalar += years_to_days(year); return scalar; } @@ -277,8 +254,7 @@ ymd_to_scalar (unsigned year, unsigned month, unsigned day) * Used to change date by adding a certain amount of days or weeks. * Returns 0 on success, 1 otherwise. */ -static int -date_change (struct tm *date, int delta_month, int delta_day) +static int date_change(struct tm *date, int delta_month, int delta_day) { struct tm t; @@ -286,19 +262,18 @@ date_change (struct tm *date, int delta_month, int delta_day) t.tm_mon += delta_month; t.tm_mday += delta_day; - if (mktime (&t) == -1) + if (mktime(&t) == -1) return 1; - else - { - *date = t; - return 0; - } + else { + *date = t; + return 0; + } } /* Draw the monthly view inside calendar panel. */ static void -draw_monthly_view (struct window *cwin, struct date *current_day, - unsigned sunday_first) +draw_monthly_view(struct window *cwin, struct date *current_day, + unsigned sunday_first) { const int OFFY = 2 + (CALHEIGHT - 9) / 2; struct date check_day; @@ -311,106 +286,92 @@ draw_monthly_view (struct window *cwin, struct date *current_day, yr = slctd_day.yyyy; /* offset for centering calendar in window */ - SBAR_WIDTH = wins_sbar_width (); + SBAR_WIDTH = wins_sbar_width(); OFFX = (SBAR_WIDTH - 27) / 2; ofs_y = OFFY; ofs_x = OFFX; /* checking the number of days in february */ numdays = days[mo - 1]; - if (2 == mo && ISLEAP (yr)) + if (2 == mo && ISLEAP(yr)) ++numdays; /* * the first calendar day will be monday or sunday, depending on * 'week_begins_on_monday' value */ - c_day_1 = (int) ((ymd_to_scalar (yr, mo, 1 + sunday_first) - (long) 1) % 7L); + c_day_1 = (int)((ymd_to_scalar(yr, mo, 1 + sunday_first) - (long)1) % 7L); /* Write the current month and year on top of the calendar */ - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwprintw (cwin->p, ofs_y, - (SBAR_WIDTH - (strlen (_(monthnames[mo - 1])) + 5)) / 2, - "%s %d", _(monthnames[mo - 1]), slctd_day.yyyy); - custom_remove_attr (cwin->p, ATTR_HIGHEST); + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwprintw(cwin->p, ofs_y, + (SBAR_WIDTH - (strlen(_(monthnames[mo - 1])) + 5)) / 2, + "%s %d", _(monthnames[mo - 1]), slctd_day.yyyy); + custom_remove_attr(cwin->p, ATTR_HIGHEST); ++ofs_y; /* print the days, with regards to the first day of the week */ - custom_apply_attr (cwin->p, ATTR_HIGHEST); - for (j = 0; j < WEEKINDAYS; j++) - { - mvwprintw (cwin->p, ofs_y, ofs_x + 4 * j, "%s", - _(daynames[1 + j - sunday_first])); - } - custom_remove_attr (cwin->p, ATTR_HIGHEST); + custom_apply_attr(cwin->p, ATTR_HIGHEST); + for (j = 0; j < WEEKINDAYS; j++) { + mvwprintw(cwin->p, ofs_y, ofs_x + 4 * j, "%s", + _(daynames[1 + j - sunday_first])); + } + custom_remove_attr(cwin->p, ATTR_HIGHEST); day_1_sav = (c_day_1 + 1) * 3 + c_day_1 - 7; - for (c_day = 1; c_day <= numdays; ++c_day, ++c_day_1, c_day_1 %= 7) - { - check_day.dd = c_day; - check_day.mm = slctd_day.mm; - check_day.yyyy = slctd_day.yyyy; - - /* check if the day contains an event or an appointment */ - item_this_day = day_check_if_item (check_day); + for (c_day = 1; c_day <= numdays; ++c_day, ++c_day_1, c_day_1 %= 7) { + check_day.dd = c_day; + check_day.mm = slctd_day.mm; + check_day.yyyy = slctd_day.yyyy; - /* Go to next line, the week is over. */ - if (!c_day_1 && 1 != c_day) - { - ofs_y++; - ofs_x = OFFX - day_1_sav - 4 * c_day; - } + /* check if the day contains an event or an appointment */ + item_this_day = day_check_if_item(check_day); - /* This is today, so print it in yellow. */ - if (c_day == current_day->dd - && current_day->mm == slctd_day.mm - && current_day->yyyy == slctd_day.yyyy - && current_day->dd != slctd_day.dd) - { - custom_apply_attr (cwin->p, ATTR_LOWEST); - mvwprintw (cwin->p, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); - custom_remove_attr (cwin->p, ATTR_LOWEST); - } - else if (c_day == slctd_day.dd) - { - /* This is the selected day, print it according to user's theme. */ - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwprintw (cwin->p, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - custom_remove_attr (cwin->p, ATTR_HIGHEST); - } - else if (item_this_day) - { - custom_apply_attr (cwin->p, ATTR_LOW); - mvwprintw (cwin->p, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - custom_remove_attr (cwin->p, ATTR_LOW); - } - else - /* otherwise, print normal days in black */ - mvwprintw (cwin->p, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); + /* Go to next line, the week is over. */ + if (!c_day_1 && 1 != c_day) { + ofs_y++; + ofs_x = OFFX - day_1_sav - 4 * c_day; } -} -static int -weeknum (const struct tm *t, int firstweekday) + /* This is today, so print it in yellow. */ + if (c_day == current_day->dd + && current_day->mm == slctd_day.mm + && current_day->yyyy == slctd_day.yyyy + && current_day->dd != slctd_day.dd) { + custom_apply_attr(cwin->p, ATTR_LOWEST); + mvwprintw(cwin->p, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); + custom_remove_attr(cwin->p, ATTR_LOWEST); + } else if (c_day == slctd_day.dd) { + /* This is the selected day, print it according to user's theme. */ + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwprintw(cwin->p, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); + custom_remove_attr(cwin->p, ATTR_HIGHEST); + } else if (item_this_day) { + custom_apply_attr(cwin->p, ATTR_LOW); + mvwprintw(cwin->p, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); + custom_remove_attr(cwin->p, ATTR_LOW); + } else + /* otherwise, print normal days in black */ + mvwprintw(cwin->p, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); + } +} + +static int weeknum(const struct tm *t, int firstweekday) { int wday, wnum; wday = t->tm_wday; - if (firstweekday == MONDAY) - { - if (wday == SUNDAY) - wday = 6; - else - wday--; - } + if (firstweekday == MONDAY) { + if (wday == SUNDAY) + wday = 6; + else + wday--; + } wnum = ((t->tm_yday + WEEKINDAYS - wday) / WEEKINDAYS); if (wnum < 0) wnum = 0; @@ -421,64 +382,60 @@ weeknum (const struct tm *t, int firstweekday) /* * Compute the week number according to ISO 8601. */ -static int -ISO8601weeknum (const struct tm *t) +static int ISO8601weeknum(const struct tm *t) { int wnum, jan1day; - wnum = weeknum (t, MONDAY); + wnum = weeknum(t, MONDAY); jan1day = t->tm_wday - (t->tm_yday % WEEKINDAYS); if (jan1day < 0) jan1day += WEEKINDAYS; - switch (jan1day) - { - case MONDAY: - break; - case TUESDAY: - case WEDNESDAY: - case THURSDAY: - wnum++; - break; - case FRIDAY: - case SATURDAY: - case SUNDAY: - if (wnum == 0) - { - /* Get week number of last week of last year. */ - struct tm dec31ly; /* 12/31 last year */ - - dec31ly = *t; - dec31ly.tm_year--; - dec31ly.tm_mon = 11; - dec31ly.tm_mday = 31; - dec31ly.tm_wday = (jan1day == SUNDAY) ? 6 : jan1day - 1; - dec31ly.tm_yday = 364 + ISLEAP (dec31ly.tm_year + 1900); - wnum = ISO8601weeknum (&dec31ly); - } - break; + switch (jan1day) { + case MONDAY: + break; + case TUESDAY: + case WEDNESDAY: + case THURSDAY: + wnum++; + break; + case FRIDAY: + case SATURDAY: + case SUNDAY: + if (wnum == 0) { + /* Get week number of last week of last year. */ + struct tm dec31ly; /* 12/31 last year */ + + dec31ly = *t; + dec31ly.tm_year--; + dec31ly.tm_mon = 11; + dec31ly.tm_mday = 31; + dec31ly.tm_wday = (jan1day == SUNDAY) ? 6 : jan1day - 1; + dec31ly.tm_yday = 364 + ISLEAP(dec31ly.tm_year + 1900); + wnum = ISO8601weeknum(&dec31ly); } + break; + } - if (t->tm_mon == 11) - { - int wday, mday; + if (t->tm_mon == 11) { + int wday, mday; - wday = t->tm_wday; - mday = t->tm_mday; - if ((wday == MONDAY && (mday >= 29 && mday <= 31)) - || (wday == TUESDAY && (mday == 30 || mday == 31)) - || (wday == WEDNESDAY && mday == 31)) - wnum = 1; - } + wday = t->tm_wday; + mday = t->tm_mday; + if ((wday == MONDAY && (mday >= 29 && mday <= 31)) + || (wday == TUESDAY && (mday == 30 || mday == 31)) + || (wday == WEDNESDAY && mday == 31)) + wnum = 1; + } return wnum; } /* Draw the weekly view inside calendar panel. */ static void -draw_weekly_view (struct window *cwin, struct date *current_day, - unsigned sunday_first) +draw_weekly_view(struct window *cwin, struct date *current_day, + unsigned sunday_first) { #define DAYSLICESNO 6 const int WCALWIDTH = 30; @@ -486,129 +443,123 @@ draw_weekly_view (struct window *cwin, struct date *current_day, struct tm t; int OFFX, j, c_wday, days_to_remove, weeknum; - OFFX = (wins_sbar_width () - WCALWIDTH) / 2 + 1; + OFFX = (wins_sbar_width() - WCALWIDTH) / 2 + 1; /* Fill in a tm structure with the first day of the selected week. */ - c_wday = calendar_get_wday (&slctd_day); + c_wday = calendar_get_wday(&slctd_day); if (sunday_first) days_to_remove = c_wday; else days_to_remove = c_wday == 0 ? WEEKINDAYS - 1 : c_wday - 1; - memset (&t, 0, sizeof (struct tm)); + memset(&t, 0, sizeof(struct tm)); t.tm_mday = slctd_day.dd; t.tm_mon = slctd_day.mm - 1; t.tm_year = slctd_day.yyyy - 1900; - mktime (&t); - date_change (&t, 0, -days_to_remove); + mktime(&t); + date_change(&t, 0, -days_to_remove); /* Print the week number. */ - weeknum = ISO8601weeknum (&t); - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwprintw (cwin->p, 2, cwin->w - 9, "(# %02d)", weeknum); - custom_remove_attr (cwin->p, ATTR_HIGHEST); + weeknum = ISO8601weeknum(&t); + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwprintw(cwin->p, 2, cwin->w - 9, "(# %02d)", weeknum); + custom_remove_attr(cwin->p, ATTR_HIGHEST); /* Now draw calendar view. */ - for (j = 0; j < WEEKINDAYS; j++) - { - struct date date; - unsigned attr, item_this_day; - int i, slices[DAYSLICESNO]; - - /* print the day names, with regards to the first day of the week */ - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwprintw (cwin->p, OFFY, OFFX + 4 * j, "%s", - _(daynames[1 + j - sunday_first])); - custom_remove_attr (cwin->p, ATTR_HIGHEST); - - /* Check if the day to be printed has an item or not. */ - date.dd = t.tm_mday; - date.mm = t.tm_mon + 1; - date.yyyy = t.tm_year + 1900; - item_this_day = day_check_if_item (date); - - /* Print the day numbers with appropriate decoration. */ - if (t.tm_mday == current_day->dd - && current_day->mm == slctd_day.mm - && current_day->yyyy == slctd_day.yyyy - && current_day->dd != slctd_day.dd) - attr = ATTR_LOWEST; /* today, but not selected */ - else if (t.tm_mday == slctd_day.dd) - attr = ATTR_HIGHEST; /* selected day */ - else if (item_this_day) - attr = ATTR_LOW; - else - attr = 0; - - if (attr) - custom_apply_attr (cwin->p, attr); - mvwprintw (cwin->p, OFFY + 1, OFFX + 1 + 4 * j, "%02d", t.tm_mday); - if (attr) - custom_remove_attr (cwin->p, attr); - - /* Draw slices indicating appointment times. */ - memset (slices, 0, DAYSLICESNO * sizeof *slices); - if (day_chk_busy_slices (date, DAYSLICESNO, slices)) - { - for (i = 0; i < DAYSLICESNO; i++) - { - if (j != WEEKINDAYS - 1 && i != DAYSLICESNO - 1) - mvwhline (cwin->p, OFFY + 2 + i, OFFX + 3 + 4 * j, ACS_S9, 2); - if (slices[i]) - { - int highlight; - - highlight = (t.tm_mday == slctd_day.dd) ? 1 : 0; - if (highlight) - custom_apply_attr (cwin->p, attr); - wattron (cwin->p, A_REVERSE); - mvwprintw (cwin->p, OFFY + 2 + i, OFFX + 1 + 4 * j, " "); - mvwprintw (cwin->p, OFFY + 2 + i, OFFX + 2 + 4 * j, " "); - wattroff (cwin->p, A_REVERSE); - if (highlight) - custom_remove_attr (cwin->p, attr); - } - } + for (j = 0; j < WEEKINDAYS; j++) { + struct date date; + unsigned attr, item_this_day; + int i, slices[DAYSLICESNO]; + + /* print the day names, with regards to the first day of the week */ + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwprintw(cwin->p, OFFY, OFFX + 4 * j, "%s", + _(daynames[1 + j - sunday_first])); + custom_remove_attr(cwin->p, ATTR_HIGHEST); + + /* Check if the day to be printed has an item or not. */ + date.dd = t.tm_mday; + date.mm = t.tm_mon + 1; + date.yyyy = t.tm_year + 1900; + item_this_day = day_check_if_item(date); + + /* Print the day numbers with appropriate decoration. */ + if (t.tm_mday == current_day->dd + && current_day->mm == slctd_day.mm + && current_day->yyyy == slctd_day.yyyy + && current_day->dd != slctd_day.dd) + attr = ATTR_LOWEST; /* today, but not selected */ + else if (t.tm_mday == slctd_day.dd) + attr = ATTR_HIGHEST; /* selected day */ + else if (item_this_day) + attr = ATTR_LOW; + else + attr = 0; + + if (attr) + custom_apply_attr(cwin->p, attr); + mvwprintw(cwin->p, OFFY + 1, OFFX + 1 + 4 * j, "%02d", t.tm_mday); + if (attr) + custom_remove_attr(cwin->p, attr); + + /* Draw slices indicating appointment times. */ + memset(slices, 0, DAYSLICESNO * sizeof *slices); + if (day_chk_busy_slices(date, DAYSLICESNO, slices)) { + for (i = 0; i < DAYSLICESNO; i++) { + if (j != WEEKINDAYS - 1 && i != DAYSLICESNO - 1) + mvwhline(cwin->p, OFFY + 2 + i, OFFX + 3 + 4 * j, ACS_S9, 2); + if (slices[i]) { + int highlight; + + highlight = (t.tm_mday == slctd_day.dd) ? 1 : 0; + if (highlight) + custom_apply_attr(cwin->p, attr); + wattron(cwin->p, A_REVERSE); + mvwprintw(cwin->p, OFFY + 2 + i, OFFX + 1 + 4 * j, " "); + mvwprintw(cwin->p, OFFY + 2 + i, OFFX + 2 + 4 * j, " "); + wattroff(cwin->p, A_REVERSE); + if (highlight) + custom_remove_attr(cwin->p, attr); } - - /* get next day */ - date_change (&t, 0, 1); + } } + /* get next day */ + date_change(&t, 0, 1); + } + /* Draw marks to indicate midday on the sides of the calendar. */ - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwhline (cwin->p, OFFY + 1 + DAYSLICESNO / 2, OFFX, ACS_S9, 1); - mvwhline (cwin->p, OFFY + 1 + DAYSLICESNO / 2, - OFFX + WCALWIDTH - 3, ACS_S9, 1); - custom_remove_attr (cwin->p, ATTR_HIGHEST); + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwhline(cwin->p, OFFY + 1 + DAYSLICESNO / 2, OFFX, ACS_S9, 1); + mvwhline(cwin->p, OFFY + 1 + DAYSLICESNO / 2, + OFFX + WCALWIDTH - 3, ACS_S9, 1); + custom_remove_attr(cwin->p, ATTR_HIGHEST); #undef DAYSLICESNO } /* Function used to display the calendar panel. */ -void -calendar_update_panel (struct window *cwin) +void calendar_update_panel(struct window *cwin) { struct date current_day; unsigned sunday_first; - calendar_store_current_date (¤t_day); - erase_window_part (cwin->p, 1, 3, cwin->w - 2, cwin->h - 2); - mvwhline (cwin->p, 2, 1, ACS_HLINE, cwin->w - 2); - sunday_first = calendar_week_begins_on_monday () ? 0 : 1; + calendar_store_current_date(¤t_day); + erase_window_part(cwin->p, 1, 3, cwin->w - 2, cwin->h - 2); + mvwhline(cwin->p, 2, 1, ACS_HLINE, cwin->w - 2); + sunday_first = calendar_week_begins_on_monday()? 0 : 1; draw_calendar[calendar_view] (cwin, ¤t_day, sunday_first); - wnoutrefresh (cwin->p); + wnoutrefresh(cwin->p); } /* Set the selected day in calendar to current day. */ -void -calendar_goto_today (void) +void calendar_goto_today(void) { struct date today; - calendar_store_current_date (&today); + calendar_store_current_date(&today); slctd_day.dd = today.dd; slctd_day.mm = today.mm; slctd_day.yyyy = today.yyyy; @@ -620,8 +571,7 @@ calendar_goto_today (void) * If the entered date is empty, automatically jump to the current date. * slctd_day is updated with the newly selected date. */ -void -calendar_change_day (int datefmt) +void calendar_change_day(int datefmt) { #define LDAY 11 char selected_day[LDAY] = ""; @@ -629,149 +579,135 @@ calendar_change_day (int datefmt) int dday, dmonth, dyear; int wrong_day = 1; const char *mesg_line1 = - _("The day you entered is not valid " - "(should be between 01/01/1902 and 12/31/2037)"); + _("The day you entered is not valid " + "(should be between 01/01/1902 and 12/31/2037)"); const char *mesg_line2 = _("Press [ENTER] to continue"); const char *request_date = "Enter the day to go to [ENTER for today] : %s"; - while (wrong_day) - { - snprintf (outstr, BUFSIZ, request_date, DATEFMT_DESC (datefmt)); - status_mesg (_(outstr), ""); - if (getstring (win[STA].p, selected_day, LDAY, 0, 1) == GETSTRING_ESC) - return; - else - { - if (strlen (selected_day) == 0) - { - wrong_day = 0; - calendar_goto_today (); - } - else if (parse_date (selected_day, datefmt, &dyear, &dmonth, &dday, - calendar_get_slctd_day ())) - { - wrong_day = 0; - /* go to chosen day */ - slctd_day.dd = dday; - slctd_day.mm = dmonth; - slctd_day.yyyy = dyear; - } - if (wrong_day) - { - status_mesg (mesg_line1, mesg_line2); - wgetch (win[STA].p); - } - } + while (wrong_day) { + snprintf(outstr, BUFSIZ, request_date, DATEFMT_DESC(datefmt)); + status_mesg(_(outstr), ""); + if (getstring(win[STA].p, selected_day, LDAY, 0, 1) == GETSTRING_ESC) + return; + else { + if (strlen(selected_day) == 0) { + wrong_day = 0; + calendar_goto_today(); + } else if (parse_date(selected_day, datefmt, &dyear, &dmonth, &dday, + calendar_get_slctd_day())) { + wrong_day = 0; + /* go to chosen day */ + slctd_day.dd = dday; + slctd_day.mm = dmonth; + slctd_day.yyyy = dyear; + } + if (wrong_day) { + status_mesg(mesg_line1, mesg_line2); + wgetch(win[STA].p); + } } + } return; } -void -calendar_move (enum move move, int count) +void calendar_move(enum move move, int count) { int ret, days_to_remove, days_to_add; struct tm t; - memset (&t, 0, sizeof (struct tm)); + memset(&t, 0, sizeof(struct tm)); t.tm_mday = slctd_day.dd; t.tm_mon = slctd_day.mm - 1; t.tm_year = slctd_day.yyyy - 1900; - switch (move) - { - case UP: - ret = date_change (&t, 0, -count * WEEKINDAYS); - break; - case DOWN: - ret = date_change (&t, 0, count * WEEKINDAYS); - break; - case LEFT: - ret = date_change (&t, 0, -count); - break; - case RIGHT: - ret = date_change (&t, 0, count); - break; - case WEEK_START: - /* Normalize struct tm to get week day number. */ - mktime (&t); - if (calendar_week_begins_on_monday ()) - days_to_remove = ((t.tm_wday == 0) ? WEEKINDAYS - 1 : t.tm_wday - 1); - else - days_to_remove = ((t.tm_wday == 0) ? 0 : t.tm_wday); - days_to_remove += (count - 1) * WEEKINDAYS; - ret = date_change (&t, 0, -days_to_remove); - break; - case WEEK_END: - mktime (&t); - if (calendar_week_begins_on_monday ()) - days_to_add = ((t.tm_wday == 0) ? 0 : WEEKINDAYS - t.tm_wday); - else - days_to_add = ((t.tm_wday == 0) ? - WEEKINDAYS - 1 : WEEKINDAYS - 1 - t.tm_wday); - days_to_add += (count - 1) * WEEKINDAYS; - ret = date_change (&t, 0, days_to_add); - break; - default: - ret = 1; - /* NOTREACHED */ + switch (move) { + case UP: + ret = date_change(&t, 0, -count * WEEKINDAYS); + break; + case DOWN: + ret = date_change(&t, 0, count * WEEKINDAYS); + break; + case LEFT: + ret = date_change(&t, 0, -count); + break; + case RIGHT: + ret = date_change(&t, 0, count); + break; + case WEEK_START: + /* Normalize struct tm to get week day number. */ + mktime(&t); + if (calendar_week_begins_on_monday()) + days_to_remove = ((t.tm_wday == 0) ? WEEKINDAYS - 1 : t.tm_wday - 1); + else + days_to_remove = ((t.tm_wday == 0) ? 0 : t.tm_wday); + days_to_remove += (count - 1) * WEEKINDAYS; + ret = date_change(&t, 0, -days_to_remove); + break; + case WEEK_END: + mktime(&t); + if (calendar_week_begins_on_monday()) + days_to_add = ((t.tm_wday == 0) ? 0 : WEEKINDAYS - t.tm_wday); + else + days_to_add = ((t.tm_wday == 0) ? + WEEKINDAYS - 1 : WEEKINDAYS - 1 - t.tm_wday); + days_to_add += (count - 1) * WEEKINDAYS; + ret = date_change(&t, 0, days_to_add); + break; + default: + ret = 1; + /* NOTREACHED */ + } + + if (ret == 0) { + if (t.tm_year < 2) { + t.tm_mday = 1; + t.tm_mon = 0; + t.tm_year = 2; + } else if (t.tm_year > 137) { + t.tm_mday = 31; + t.tm_mon = 11; + t.tm_year = 137; } - if (ret == 0) - { - if (t.tm_year < 2) - { - t.tm_mday = 1; - t.tm_mon = 0; - t.tm_year = 2; - } - else if (t.tm_year > 137) - { - t.tm_mday = 31; - t.tm_mon = 11; - t.tm_year = 137; - } - - slctd_day.dd = t.tm_mday; - slctd_day.mm = t.tm_mon + 1; - slctd_day.yyyy = t.tm_year + 1900; - } + slctd_day.dd = t.tm_mday; + slctd_day.mm = t.tm_mon + 1; + slctd_day.yyyy = t.tm_year + 1900; + } } /* Returns the beginning of current year as a long. */ -long -calendar_start_of_year (void) +long calendar_start_of_year(void) { time_t timer; struct tm *tm; - timer = time (NULL); - tm = localtime (&timer); + timer = time(NULL); + tm = localtime(&timer); tm->tm_mon = 0; tm->tm_mday = 1; tm->tm_hour = 0; tm->tm_min = 0; tm->tm_sec = 0; - timer = mktime (tm); + timer = mktime(tm); return (long)timer; } -long -calendar_end_of_year (void) +long calendar_end_of_year(void) { time_t timer; struct tm *tm; - timer = time (NULL); - tm = localtime (&timer); + timer = time(NULL); + tm = localtime(&timer); tm->tm_mon = 0; tm->tm_mday = 1; tm->tm_hour = 0; tm->tm_min = 0; tm->tm_sec = 0; tm->tm_year++; - timer = mktime (tm); + timer = mktime(tm); return (long)(timer - 1); } @@ -817,8 +753,7 @@ calendar_end_of_year (void) * dtor -- * convert degrees to radians */ -static double -dtor (double deg) +static double dtor(double deg) { return deg * M_PI / 180; } @@ -827,8 +762,7 @@ dtor (double deg) * adj360 -- * adjust value so 0 <= deg <= 360 */ -static void -adj360 (double *deg) +static void adj360(double *deg) { for (;;) if (*deg < 0.0) @@ -843,36 +777,35 @@ adj360 (double *deg) * potm -- * return phase of the moon */ -static double -potm (double days) +static double potm(double days) { double N, Msol, Ec, LambdaSol, l, Mm, Ev, Ac, A3, Mmprime; double A4, lprime, V, ldprime, D, Nm; - N = 360.0 * days / 365.242191; /* sec 46 #3 */ - adj360 (&N); - Msol = N + EPSILONg - RHOg; /* sec 46 #4 */ - adj360 (&Msol); - Ec = 360 / M_PI * ECCEN * sin (dtor (Msol)); /* sec 46 #5 */ - LambdaSol = N + Ec + EPSILONg; /* sec 46 #6 */ - adj360 (&LambdaSol); - l = 13.1763966 * days + lzero; /* sec 65 #4 */ - adj360 (&l); - Mm = l - (0.1114041 * days) - Pzero; /* sec 65 #5 */ - adj360 (&Mm); - Nm = Nzero - (0.0529539 * days); /* sec 65 #6 */ - adj360 (&Nm); - Ev = 1.2739 * sin (dtor (2 * (l - LambdaSol) - Mm)); /* sec 65 #7 */ - Ac = 0.1858 * sin (dtor (Msol)); /* sec 65 #8 */ - A3 = 0.37 * sin (dtor (Msol)); - Mmprime = Mm + Ev - Ac - A3; /* sec 65 #9 */ - Ec = 6.2886 * sin (dtor (Mmprime)); /* sec 65 #10 */ - A4 = 0.214 * sin (dtor (2 * Mmprime)); /* sec 65 #11 */ - lprime = l + Ev + Ec - Ac + A4; /* sec 65 #12 */ - V = 0.6583 * sin (dtor (2 * (lprime - LambdaSol))); /* sec 65 #13 */ - ldprime = lprime + V; /* sec 65 #14 */ - D = ldprime - LambdaSol; /* sec 67 #2 */ - return 50.0 * (1 - cos (dtor (D))); /* sec 67 #3 */ + N = 360.0 * days / 365.242191; /* sec 46 #3 */ + adj360(&N); + Msol = N + EPSILONg - RHOg; /* sec 46 #4 */ + adj360(&Msol); + Ec = 360 / M_PI * ECCEN * sin(dtor(Msol)); /* sec 46 #5 */ + LambdaSol = N + Ec + EPSILONg; /* sec 46 #6 */ + adj360(&LambdaSol); + l = 13.1763966 * days + lzero; /* sec 65 #4 */ + adj360(&l); + Mm = l - (0.1114041 * days) - Pzero; /* sec 65 #5 */ + adj360(&Mm); + Nm = Nzero - (0.0529539 * days); /* sec 65 #6 */ + adj360(&Nm); + Ev = 1.2739 * sin(dtor(2 * (l - LambdaSol) - Mm)); /* sec 65 #7 */ + Ac = 0.1858 * sin(dtor(Msol)); /* sec 65 #8 */ + A3 = 0.37 * sin(dtor(Msol)); + Mmprime = Mm + Ev - Ac - A3; /* sec 65 #9 */ + Ec = 6.2886 * sin(dtor(Mmprime)); /* sec 65 #10 */ + A4 = 0.214 * sin(dtor(2 * Mmprime)); /* sec 65 #11 */ + lprime = l + Ev + Ec - Ac + A4; /* sec 65 #12 */ + V = 0.6583 * sin(dtor(2 * (lprime - LambdaSol))); /* sec 65 #13 */ + ldprime = lprime + V; /* sec 65 #14 */ + D = ldprime - LambdaSol; /* sec 67 #2 */ + return 50.0 * (1 - cos(dtor(D))); /* sec 67 #3 */ } /* @@ -886,23 +819,22 @@ potm (double days) * Updated to the Third Edition of Duffett-Smith's book, IX 1998 * */ -static double -pom (time_t tmpt) +static double pom(time_t tmpt) { struct tm *GMT; double days; int cnt; - GMT = gmtime (&tmpt); + GMT = gmtime(&tmpt); days = (GMT->tm_yday + 1) + ((GMT->tm_hour + (GMT->tm_min / 60.0) + (GMT->tm_sec / 3600.0)) / 24.0); for (cnt = EPOCH; cnt < GMT->tm_year; ++cnt) - days += ISLEAP (cnt + TM_YEAR_BASE) ? 366 : 365; + days += ISLEAP(cnt + TM_YEAR_BASE) ? 366 : 365; /* Selected time could be before EPOCH */ for (cnt = GMT->tm_year; cnt < EPOCH; ++cnt) - days -= ISLEAP (cnt + TM_YEAR_BASE) ? 366 : 365; + days -= ISLEAP(cnt + TM_YEAR_BASE) ? 366 : 365; - return potm (days); + return potm(days); } /* @@ -910,24 +842,23 @@ pom (time_t tmpt) * Careful: date is the selected day in calendar at 00:00, so it represents * the phase of the moon for previous day. */ -const char * -calendar_get_pom (time_t date) +const char *calendar_get_pom(time_t date) { const char *pom_pict[MOON_PHASES] = { " ", "|) ", "(|)", "(| ", " | " }; enum pom phase = NO_POM; double pom_today, relative_pom, pom_yesterday, pom_tomorrow; const double half = 50.0; - pom_yesterday = pom (date); - pom_today = pom (date + DAYINSEC); - relative_pom = abs (pom_today - half); - pom_tomorrow = pom (date + 2 * DAYINSEC); + pom_yesterday = pom(date); + pom_today = pom(date + DAYINSEC); + relative_pom = abs(pom_today - half); + pom_tomorrow = pom(date + 2 * DAYINSEC); if (pom_today > pom_yesterday && pom_today > pom_tomorrow) phase = FULL_MOON; else if (pom_today < pom_yesterday && pom_today < pom_tomorrow) phase = NEW_MOON; - else if (relative_pom < abs (pom_yesterday - half) - && relative_pom < abs (pom_tomorrow - half)) + else if (relative_pom < abs(pom_yesterday - half) + && relative_pom < abs(pom_tomorrow - half)) phase = (pom_tomorrow > pom_today) ? FIRST_QUARTER : LAST_QUARTER; return pom_pict[phase]; diff --git a/src/config.c b/src/config.c index 98e622a..edf1f3b 100644 --- a/src/config.c +++ b/src/config.c @@ -49,28 +49,28 @@ struct confvar { void *target; }; -static int config_parse_bool (unsigned *, const char *); -static int config_serialize_bool (char *, unsigned *); -static int config_parse_int (int *, const char *); -static int config_serialize_int (char *, int *); -static int config_parse_unsigned (unsigned *, const char *); -static int config_serialize_unsigned (char *, unsigned *); -static int config_parse_str (char *, const char *); -static int config_serialize_str (char *, const char *); -static int config_parse_calendar_view (void *, const char *); -static int config_serialize_calendar_view (char *, void *); -static int config_parse_first_day_of_week (void *, const char *); -static int config_serialize_first_day_of_week (char *, void *); -static int config_parse_color_theme (void *, const char *); -static int config_serialize_color_theme (char *, void *); -static int config_parse_layout (void *, const char *); -static int config_serialize_layout (char *, void *); -static int config_parse_sidebar_width (void *, const char *); -static int config_serialize_sidebar_width (char *, void *); -static int config_parse_output_datefmt (void *, const char *); -static int config_serialize_output_datefmt (char *, void *); -static int config_parse_input_datefmt (void *, const char *); -static int config_serialize_input_datefmt (char *, void *); +static int config_parse_bool(unsigned *, const char *); +static int config_serialize_bool(char *, unsigned *); +static int config_parse_int(int *, const char *); +static int config_serialize_int(char *, int *); +static int config_parse_unsigned(unsigned *, const char *); +static int config_serialize_unsigned(char *, unsigned *); +static int config_parse_str(char *, const char *); +static int config_serialize_str(char *, const char *); +static int config_parse_calendar_view(void *, const char *); +static int config_serialize_calendar_view(char *, void *); +static int config_parse_first_day_of_week(void *, const char *); +static int config_serialize_first_day_of_week(char *, void *); +static int config_parse_color_theme(void *, const char *); +static int config_serialize_color_theme(char *, void *); +static int config_parse_layout(void *, const char *); +static int config_serialize_layout(char *, void *); +static int config_parse_sidebar_width(void *, const char *); +static int config_serialize_sidebar_width(char *, void *); +static int config_parse_output_datefmt(void *, const char *); +static int config_serialize_output_datefmt(char *, void *); +static int config_parse_input_datefmt(void *, const char *); +static int config_serialize_input_datefmt(char *, void *); #define CONFIG_HANDLER_BOOL(var) (config_fn_parse_t) config_parse_bool, \ (config_fn_serialize_t) config_serialize_bool, &(var) @@ -82,44 +82,49 @@ static int config_serialize_input_datefmt (char *, void *); (config_fn_serialize_t) config_serialize_str, &(var) static const struct confvar confmap[] = { - { "appearance.calendarview", config_parse_calendar_view, config_serialize_calendar_view, NULL }, - { "appearance.layout", config_parse_layout, config_serialize_layout, NULL }, - { "appearance.notifybar", CONFIG_HANDLER_BOOL (nbar.show) }, - { "appearance.sidebarwidth", config_parse_sidebar_width, config_serialize_sidebar_width, NULL }, - { "appearance.theme", config_parse_color_theme, config_serialize_color_theme, NULL }, - { "daemon.enable", CONFIG_HANDLER_BOOL (dmon.enable) }, - { "daemon.log", CONFIG_HANDLER_BOOL (dmon.log) }, - { "format.inputdate", config_parse_input_datefmt, config_serialize_input_datefmt, NULL }, - { "format.notifydate", CONFIG_HANDLER_STR (nbar.datefmt) }, - { "format.notifytime", CONFIG_HANDLER_STR (nbar.timefmt) }, - { "format.outputdate", config_parse_output_datefmt, config_serialize_output_datefmt, NULL }, - { "general.autogc", CONFIG_HANDLER_BOOL (conf.auto_gc) }, - { "general.autosave", CONFIG_HANDLER_BOOL (conf.auto_save) }, - { "general.confirmdelete", CONFIG_HANDLER_BOOL (conf.confirm_delete) }, - { "general.confirmquit", CONFIG_HANDLER_BOOL (conf.confirm_quit) }, - { "general.firstdayofweek", config_parse_first_day_of_week, config_serialize_first_day_of_week, NULL }, - { "general.periodicsave", CONFIG_HANDLER_UNSIGNED (conf.periodic_save) }, - { "general.progressbar", CONFIG_HANDLER_BOOL (conf.progress_bar) }, - { "general.systemdialogs", CONFIG_HANDLER_BOOL (conf.system_dialogs) }, - { "notification.command", CONFIG_HANDLER_STR (nbar.cmd) }, - { "notification.notifyall", CONFIG_HANDLER_BOOL (nbar.notify_all) }, - { "notification.warning", CONFIG_HANDLER_INT (nbar.cntdwn) } + {"appearance.calendarview", config_parse_calendar_view, + config_serialize_calendar_view, NULL}, + {"appearance.layout", config_parse_layout, config_serialize_layout, NULL}, + {"appearance.notifybar", CONFIG_HANDLER_BOOL(nbar.show)}, + {"appearance.sidebarwidth", config_parse_sidebar_width, + config_serialize_sidebar_width, NULL}, + {"appearance.theme", config_parse_color_theme, config_serialize_color_theme, + NULL}, + {"daemon.enable", CONFIG_HANDLER_BOOL(dmon.enable)}, + {"daemon.log", CONFIG_HANDLER_BOOL(dmon.log)}, + {"format.inputdate", config_parse_input_datefmt, + config_serialize_input_datefmt, NULL}, + {"format.notifydate", CONFIG_HANDLER_STR(nbar.datefmt)}, + {"format.notifytime", CONFIG_HANDLER_STR(nbar.timefmt)}, + {"format.outputdate", config_parse_output_datefmt, + config_serialize_output_datefmt, NULL}, + {"general.autogc", CONFIG_HANDLER_BOOL(conf.auto_gc)}, + {"general.autosave", CONFIG_HANDLER_BOOL(conf.auto_save)}, + {"general.confirmdelete", CONFIG_HANDLER_BOOL(conf.confirm_delete)}, + {"general.confirmquit", CONFIG_HANDLER_BOOL(conf.confirm_quit)}, + {"general.firstdayofweek", config_parse_first_day_of_week, + config_serialize_first_day_of_week, NULL}, + {"general.periodicsave", CONFIG_HANDLER_UNSIGNED(conf.periodic_save)}, + {"general.progressbar", CONFIG_HANDLER_BOOL(conf.progress_bar)}, + {"general.systemdialogs", CONFIG_HANDLER_BOOL(conf.system_dialogs)}, + {"notification.command", CONFIG_HANDLER_STR(nbar.cmd)}, + {"notification.notifyall", CONFIG_HANDLER_BOOL(nbar.notify_all)}, + {"notification.warning", CONFIG_HANDLER_INT(nbar.cntdwn)} }; struct config_save_status { FILE *fp; - int done[sizeof (confmap) / sizeof (confmap[0])]; + int done[sizeof(confmap) / sizeof(confmap[0])]; }; typedef int (*config_fn_walk_cb_t) (const char *, const char *, void *); typedef int (*config_fn_walk_junk_cb_t) (const char *, void *); -static int -config_parse_bool (unsigned *dest, const char *val) +static int config_parse_bool(unsigned *dest, const char *val) { - if (strcmp (val, "yes") == 0) + if (strcmp(val, "yes") == 0) *dest = 1; - else if (strcmp (val, "no") == 0) + else if (strcmp(val, "no") == 0) *dest = 0; else return 0; @@ -127,55 +132,51 @@ config_parse_bool (unsigned *dest, const char *val) return 1; } -static int -config_parse_unsigned (unsigned *dest, const char *val) +static int config_parse_unsigned(unsigned *dest, const char *val) { - if (is_all_digit (val)) - *dest = atoi (val); + if (is_all_digit(val)) + *dest = atoi(val); else return 0; return 1; } -static int -config_parse_int (int *dest, const char *val) +static int config_parse_int(int *dest, const char *val) { - if ((*val == '+' || *val == '-' || isdigit (*val)) && is_all_digit (val + 1)) - *dest = atoi (val); + if ((*val == '+' || *val == '-' || isdigit(*val)) && is_all_digit(val + 1)) + *dest = atoi(val); else return 0; return 1; } -static int -config_parse_str (char *dest, const char *val) +static int config_parse_str(char *dest, const char *val) { - strncpy (dest, val, BUFSIZ); + strncpy(dest, val, BUFSIZ); return 1; } -static int -config_parse_color (int *dest, const char *val) +static int config_parse_color(int *dest, const char *val) { - if (!strcmp (val, "black")) + if (!strcmp(val, "black")) *dest = COLOR_BLACK; - else if (!strcmp (val, "red")) + else if (!strcmp(val, "red")) *dest = COLOR_RED; - else if (!strcmp (val, "green")) + else if (!strcmp(val, "green")) *dest = COLOR_GREEN; - else if (!strcmp (val, "yellow")) + else if (!strcmp(val, "yellow")) *dest = COLOR_YELLOW; - else if (!strcmp (val, "blue")) + else if (!strcmp(val, "blue")) *dest = COLOR_BLUE; - else if (!strcmp (val, "magenta")) + else if (!strcmp(val, "magenta")) *dest = COLOR_MAGENTA; - else if (!strcmp (val, "cyan")) + else if (!strcmp(val, "cyan")) *dest = COLOR_CYAN; - else if (!strcmp (val, "white")) + else if (!strcmp(val, "white")) *dest = COLOR_WHITE; - else if (!strcmp (val, "default")) + else if (!strcmp(val, "default")) *dest = background; else return 0; @@ -183,137 +184,119 @@ config_parse_color (int *dest, const char *val) return 1; } -static int -config_parse_color_pair (int *dest1, int *dest2, const char *val) +static int config_parse_color_pair(int *dest1, int *dest2, const char *val) { char s1[BUFSIZ], s2[BUFSIZ]; - if (sscanf (val, "%s on %s", s1, s2) != 2) + if (sscanf(val, "%s on %s", s1, s2) != 2) return 0; - return (config_parse_color (dest1, s1) && config_parse_color (dest2, s2)); + return (config_parse_color(dest1, s1) && config_parse_color(dest2, s2)); } -static int -config_parse_calendar_view (void *dummy, const char *val) +static int config_parse_calendar_view(void *dummy, const char *val) { - calendar_set_view (atoi (val)); + calendar_set_view(atoi(val)); return 1; } -static int -config_parse_first_day_of_week (void *dummy, const char *val) +static int config_parse_first_day_of_week(void *dummy, const char *val) { - if (!strcmp (val, "monday")) - calendar_set_first_day_of_week (MONDAY); - else if (!strcmp (val, "sunday")) - calendar_set_first_day_of_week (SUNDAY); + if (!strcmp(val, "monday")) + calendar_set_first_day_of_week(MONDAY); + else if (!strcmp(val, "sunday")) + calendar_set_first_day_of_week(SUNDAY); else return 0; return 1; } -static int -config_parse_color_theme (void *dummy, const char *val) +static int config_parse_color_theme(void *dummy, const char *val) { int color1, color2; - if (!config_parse_color_pair (&color1, &color2, val)) + if (!config_parse_color_pair(&color1, &color2, val)) return 0; - init_pair (COLR_CUSTOM, color1, color2); + init_pair(COLR_CUSTOM, color1, color2); return 1; } -static int -config_parse_layout (void *dummy, const char *val) +static int config_parse_layout(void *dummy, const char *val) { - wins_set_layout (atoi (val)); + wins_set_layout(atoi(val)); return 1; } -static int -config_parse_sidebar_width (void *dummy, const char *val) +static int config_parse_sidebar_width(void *dummy, const char *val) { - wins_set_sbar_width (atoi (val)); + wins_set_sbar_width(atoi(val)); return 1; } -static int -config_parse_output_datefmt (void *dummy, const char *val) +static int config_parse_output_datefmt(void *dummy, const char *val) { if (val[0] != '\0') - return config_parse_str (conf.output_datefmt, val); + return config_parse_str(conf.output_datefmt, val); return 1; } -static int -config_parse_input_datefmt (void *dummy, const char *val) +static int config_parse_input_datefmt(void *dummy, const char *val) { - if (config_parse_int (&conf.input_datefmt, val)) { + if (config_parse_int(&conf.input_datefmt, val)) { if (conf.input_datefmt <= 0 || conf.input_datefmt >= DATE_FORMATS) conf.input_datefmt = 1; return 1; - } - else + } else return 0; } /* Set a configuration variable. */ -static int -config_set_conf (const char *key, const char *value) +static int config_set_conf(const char *key, const char *value) { int i; if (!key) return -1; - for (i = 0; i < sizeof (confmap) / sizeof (confmap[0]); i++) - { - if (!strcmp (confmap[i].key, key)) - return confmap[i].fn_parse (confmap[i].target, value); - } + for (i = 0; i < sizeof(confmap) / sizeof(confmap[0]); i++) { + if (!strcmp(confmap[i].key, key)) + return confmap[i].fn_parse(confmap[i].target, value); + } return -1; } -static int -config_serialize_bool (char *dest, unsigned *val) -{ - if (*val) - { - dest[0] = 'y'; - dest[1] = 'e'; - dest[2] = 's'; - dest[3] = '\0'; - } - else - { - dest[0] = 'n'; - dest[1] = 'o'; - dest[2] = '\0'; - } +static int config_serialize_bool(char *dest, unsigned *val) +{ + if (*val) { + dest[0] = 'y'; + dest[1] = 'e'; + dest[2] = 's'; + dest[3] = '\0'; + } else { + dest[0] = 'n'; + dest[1] = 'o'; + dest[2] = '\0'; + } return 1; } -static int -config_serialize_unsigned (char *dest, unsigned *val) +static int config_serialize_unsigned(char *dest, unsigned *val) { - snprintf (dest, BUFSIZ, "%u", *val); + snprintf(dest, BUFSIZ, "%u", *val); return 1; } -static int -config_serialize_int (char *dest, int *val) +static int config_serialize_int(char *dest, int *val) { - snprintf (dest, BUFSIZ, "%d", *val); + snprintf(dest, BUFSIZ, "%d", *val); return 1; } -static int -config_serialize_str (char *dest, const char *val) +static int config_serialize_str(char *dest, const char *val) { - strncpy (dest, val, BUFSIZ); + strncpy(dest, val, BUFSIZ); return 1; } @@ -325,8 +308,7 @@ config_serialize_str (char *dest, const char *val) * If ncurses library was compiled with --enable-ext-funcs, * then default color is -1. */ -static void -config_color_theme_name (char *theme_name) +static void config_color_theme_name(char *theme_name) { #define MAXCOLORS 8 #define NBCOLORS 2 @@ -349,37 +331,32 @@ config_color_theme_name (char *theme_name) }; if (!colorize) - strncpy (theme_name, "0", BUFSIZ); - else - { - pair_content (COLR_CUSTOM, &color[0], &color[1]); - for (i = 0; i < NBCOLORS; i++) - { - if ((color[i] == DEFAULTCOLOR) || (color[i] == DEFAULTCOLOR_EXT)) - color_name[i] = default_color; - else if (color[i] >= 0 && color[i] <= MAXCOLORS) - color_name[i] = name[color[i]]; - else - { - EXIT (_("unknown color")); - /* NOTREACHED */ - } - } - snprintf (theme_name, BUFSIZ, "%s on %s", color_name[0], color_name[1]); + strncpy(theme_name, "0", BUFSIZ); + else { + pair_content(COLR_CUSTOM, &color[0], &color[1]); + for (i = 0; i < NBCOLORS; i++) { + if ((color[i] == DEFAULTCOLOR) || (color[i] == DEFAULTCOLOR_EXT)) + color_name[i] = default_color; + else if (color[i] >= 0 && color[i] <= MAXCOLORS) + color_name[i] = name[color[i]]; + else { + EXIT(_("unknown color")); + /* NOTREACHED */ + } } + snprintf(theme_name, BUFSIZ, "%s on %s", color_name[0], color_name[1]); + } } -static int -config_serialize_calendar_view (char *buf, void *dummy) +static int config_serialize_calendar_view(char *buf, void *dummy) { - int tmp = calendar_get_view (); - return config_serialize_int (buf, &tmp); + int tmp = calendar_get_view(); + return config_serialize_int(buf, &tmp); } -static int -config_serialize_first_day_of_week (char *buf, void *dummy) +static int config_serialize_first_day_of_week(char *buf, void *dummy) { - if (calendar_week_begins_on_monday ()) + if (calendar_week_begins_on_monday()) strcpy(buf, "monday"); else strcpy(buf, "sunday"); @@ -387,195 +364,177 @@ config_serialize_first_day_of_week (char *buf, void *dummy) return 1; } -static int -config_serialize_color_theme (char *buf, void *dummy) +static int config_serialize_color_theme(char *buf, void *dummy) { - config_color_theme_name (buf); + config_color_theme_name(buf); return 1; } -static int -config_serialize_layout (char *buf, void *dummy) +static int config_serialize_layout(char *buf, void *dummy) { - int tmp = wins_layout (); - return config_serialize_int (buf, &tmp); + int tmp = wins_layout(); + return config_serialize_int(buf, &tmp); } -static int -config_serialize_sidebar_width (char *buf, void *dummy) +static int config_serialize_sidebar_width(char *buf, void *dummy) { - int tmp = wins_sbar_wperc (); - return config_serialize_int (buf, &tmp); + int tmp = wins_sbar_wperc(); + return config_serialize_int(buf, &tmp); } -static int -config_serialize_output_datefmt (char *buf, void *dummy) +static int config_serialize_output_datefmt(char *buf, void *dummy) { - return config_serialize_str (buf, conf.output_datefmt); + return config_serialize_str(buf, conf.output_datefmt); } -static int -config_serialize_input_datefmt (char *buf, void *dummy) +static int config_serialize_input_datefmt(char *buf, void *dummy) { - return config_serialize_int (buf, &conf.input_datefmt); + return config_serialize_int(buf, &conf.input_datefmt); } /* Serialize the value of a configuration variable. */ static int -config_serialize_conf (char *buf, const char *key, - struct config_save_status *status) +config_serialize_conf(char *buf, const char *key, + struct config_save_status *status) { int i; if (!key) return -1; - for (i = 0; i < sizeof (confmap) / sizeof (confmap[0]); i++) - { - if (!strcmp (confmap[i].key, key)) - { - if (confmap[i].fn_serialize (buf, confmap[i].target)) - { - if (status) - status->done[i] = 1; - return 1; - } - else - return 0; - } + for (i = 0; i < sizeof(confmap) / sizeof(confmap[0]); i++) { + if (!strcmp(confmap[i].key, key)) { + if (confmap[i].fn_serialize(buf, confmap[i].target)) { + if (status) + status->done[i] = 1; + return 1; + } else + return 0; } + } return -1; } static void -config_file_walk (config_fn_walk_cb_t fn_cb, - config_fn_walk_junk_cb_t fn_junk_cb, void *data) +config_file_walk(config_fn_walk_cb_t fn_cb, + config_fn_walk_junk_cb_t fn_junk_cb, void *data) { FILE *data_file; char buf[BUFSIZ], e_conf[BUFSIZ]; char *key, *value; - data_file = fopen (path_conf, "r"); - EXIT_IF (data_file == NULL, _("failed to open configuration file")); + data_file = fopen(path_conf, "r"); + EXIT_IF(data_file == NULL, _("failed to open configuration file")); + + pthread_mutex_lock(&nbar.mutex); + for (;;) { + if (fgets(buf, sizeof buf, data_file) == NULL) + break; + io_extract_data(e_conf, buf, sizeof buf); - pthread_mutex_lock (&nbar.mutex); - for (;;) - { - if (fgets (buf, sizeof buf, data_file) == NULL) + if (*e_conf == '\0') { + if (fn_junk_cb) + fn_junk_cb(buf, data); + continue; + } + + key = e_conf; + value = strchr(e_conf, '='); + if (value) { + *value = '\0'; + value++; + } + + if (strcmp(key, "auto_save") == 0 || + strcmp(key, "auto_gc") == 0 || + strcmp(key, "periodic_save") == 0 || + strcmp(key, "confirm_quit") == 0 || + strcmp(key, "confirm_delete") == 0 || + strcmp(key, "skip_system_dialogs") == 0 || + strcmp(key, "skip_progress_bar") == 0 || + strcmp(key, "calendar_default_view") == 0 || + strcmp(key, "week_begins_on_monday") == 0 || + strcmp(key, "color-theme") == 0 || + strcmp(key, "layout") == 0 || + strcmp(key, "side-bar_width") == 0 || + strcmp(key, "notify-bar_show") == 0 || + strcmp(key, "notify-bar_date") == 0 || + strcmp(key, "notify-bar_clock") == 0 || + strcmp(key, "notify-bar_warning") == 0 || + strcmp(key, "notify-bar_command") == 0 || + strcmp(key, "notify-all") == 0 || + strcmp(key, "output_datefmt") == 0 || + strcmp(key, "input_datefmt") == 0 || + strcmp(key, "notify-daemon_enable") == 0 || + strcmp(key, "notify-daemon_log") == 0) { + WARN_MSG(_("Pre-3.0.0 configuration file format detected, " + "please upgrade running `calcurse-upgrade`.")); + } + + if (value && (*value == '\0' || *value == '\n')) { + /* Backward compatibility mode. */ + if (fgets(buf, sizeof buf, data_file) == NULL) break; - io_extract_data (e_conf, buf, sizeof buf); - - if (*e_conf == '\0') - { - if (fn_junk_cb) - fn_junk_cb (buf, data); - continue; - } - - key = e_conf; - value = strchr (e_conf, '='); - if (value) - { - *value = '\0'; - value++; - } - - if (strcmp(key, "auto_save") == 0 || - strcmp(key, "auto_gc") == 0 || - strcmp(key, "periodic_save") == 0 || - strcmp(key, "confirm_quit") == 0 || - strcmp(key, "confirm_delete") == 0 || - strcmp(key, "skip_system_dialogs") == 0 || - strcmp(key, "skip_progress_bar") == 0 || - strcmp(key, "calendar_default_view") == 0 || - strcmp(key, "week_begins_on_monday") == 0 || - strcmp(key, "color-theme") == 0 || - strcmp(key, "layout") == 0 || - strcmp(key, "side-bar_width") == 0 || - strcmp(key, "notify-bar_show") == 0 || - strcmp(key, "notify-bar_date") == 0 || - strcmp(key, "notify-bar_clock") == 0 || - strcmp(key, "notify-bar_warning") == 0 || - strcmp(key, "notify-bar_command") == 0 || - strcmp(key, "notify-all") == 0 || - strcmp(key, "output_datefmt") == 0 || - strcmp(key, "input_datefmt") == 0 || - strcmp(key, "notify-daemon_enable") == 0 || - strcmp(key, "notify-daemon_log") == 0) - { - WARN_MSG (_("Pre-3.0.0 configuration file format detected, " - "please upgrade running `calcurse-upgrade`.")); - } - - if (value && (*value == '\0' || *value == '\n')) - { - /* Backward compatibility mode. */ - if (fgets (buf, sizeof buf, data_file) == NULL) - break; - io_extract_data (e_conf, buf, sizeof buf); - value = e_conf; - } - - fn_cb (key, value, data); + io_extract_data(e_conf, buf, sizeof buf); + value = e_conf; } - file_close (data_file, __FILE_POS__); - pthread_mutex_unlock (&nbar.mutex); + + fn_cb(key, value, data); + } + file_close(data_file, __FILE_POS__); + pthread_mutex_unlock(&nbar.mutex); } -static int -config_load_cb (const char *key, const char *value, void *dummy) +static int config_load_cb(const char *key, const char *value, void *dummy) { - int result = config_set_conf (key, value); + int result = config_set_conf(key, value); if (result < 0) - EXIT (_("configuration variable unknown: \"%s\""), key); - /* NOTREACHED */ + EXIT(_("configuration variable unknown: \"%s\""), key); + /* NOTREACHED */ else if (result == 0) - EXIT (_("wrong configuration variable format for \"%s\""), key); - /* NOTREACHED */ + EXIT(_("wrong configuration variable format for \"%s\""), key); + /* NOTREACHED */ return 1; } /* Load the user configuration. */ -void -config_load (void) +void config_load(void) { - config_file_walk (config_load_cb, NULL, NULL); + config_file_walk(config_load_cb, NULL, NULL); } -static int -config_save_cb (const char *key, const char *value, void *status) +static int config_save_cb(const char *key, const char *value, void *status) { char buf[BUFSIZ]; - int result = config_serialize_conf (buf, key, (struct config_save_status *) status); + int result = + config_serialize_conf(buf, key, (struct config_save_status *)status); if (result < 0) - EXIT (_("configuration variable unknown: \"%s\""), key); - /* NOTREACHED */ + EXIT(_("configuration variable unknown: \"%s\""), key); + /* NOTREACHED */ else if (result == 0) - EXIT (_("wrong configuration variable format for \"%s\""), key); - /* NOTREACHED */ + EXIT(_("wrong configuration variable format for \"%s\""), key); + /* NOTREACHED */ - fputs (key, ((struct config_save_status *) status)->fp); - fputc ('=', ((struct config_save_status *) status)->fp); - fputs (buf, ((struct config_save_status *) status)->fp); - fputc ('\n', ((struct config_save_status *) status)->fp); + fputs(key, ((struct config_save_status *)status)->fp); + fputc('=', ((struct config_save_status *)status)->fp); + fputs(buf, ((struct config_save_status *)status)->fp); + fputc('\n', ((struct config_save_status *)status)->fp); return 1; } -static int -config_save_junk_cb (const char *data, void *status) +static int config_save_junk_cb(const char *data, void *status) { - fputs (data, ((struct config_save_status *) status)->fp); + fputs(data, ((struct config_save_status *)status)->fp); return 1; } /* Save the user configuration. */ -unsigned -config_save (void) +unsigned config_save(void) { char tmppath[BUFSIZ]; char *tmpext; @@ -585,32 +544,31 @@ config_save (void) if (read_only) return 1; - strncpy (tmppath, get_tempdir (), BUFSIZ); - strncat (tmppath, "/" CONF_PATH_NAME ".", BUFSIZ - strlen (tmppath) - 1); - if ((tmpext = new_tempfile (tmppath, TMPEXTSIZ)) == NULL) + strncpy(tmppath, get_tempdir(), BUFSIZ); + strncat(tmppath, "/" CONF_PATH_NAME ".", BUFSIZ - strlen(tmppath) - 1); + if ((tmpext = new_tempfile(tmppath, TMPEXTSIZ)) == NULL) return 0; - strncat (tmppath, tmpext, BUFSIZ - strlen (tmppath) - 1); - mem_free (tmpext); + strncat(tmppath, tmpext, BUFSIZ - strlen(tmppath) - 1); + mem_free(tmpext); - status.fp = fopen (tmppath, "w"); + status.fp = fopen(tmppath, "w"); if (!status.fp) return 0; - memset (status.done, 0, sizeof (status.done)); + memset(status.done, 0, sizeof(status.done)); - config_file_walk (config_save_cb, config_save_junk_cb, (void *) &status); + config_file_walk(config_save_cb, config_save_junk_cb, (void *)&status); /* Set variables that were missing from the configuration file. */ - for (i = 0; i < sizeof (confmap) / sizeof (confmap[0]); i++) - { - if (!status.done[i]) - config_save_cb (confmap[i].key, NULL, &status); - } + for (i = 0; i < sizeof(confmap) / sizeof(confmap[0]); i++) { + if (!status.done[i]) + config_save_cb(confmap[i].key, NULL, &status); + } - file_close (status.fp, __FILE_POS__); + file_close(status.fp, __FILE_POS__); - if (io_file_cp (tmppath, path_conf)) - unlink (tmppath); + if (io_file_cp(tmppath, path_conf)) + unlink(tmppath); return 1; } diff --git a/src/custom.c b/src/custom.c index 017136d..ef84703 100644 --- a/src/custom.c +++ b/src/custom.c @@ -56,16 +56,15 @@ static struct attribute attr; * ATTR_LOW are for days inside calendar panel which contains an event * ATTR_LOWEST are for current day inside calendar panel */ -void -custom_init_attr (void) +void custom_init_attr(void) { - attr.color[ATTR_HIGHEST] = COLOR_PAIR (COLR_CUSTOM); - attr.color[ATTR_HIGH] = COLOR_PAIR (COLR_HIGH); - attr.color[ATTR_MIDDLE] = COLOR_PAIR (COLR_RED); - attr.color[ATTR_LOW] = COLOR_PAIR (COLR_CYAN); - attr.color[ATTR_LOWEST] = COLOR_PAIR (COLR_YELLOW); - attr.color[ATTR_TRUE] = COLOR_PAIR (COLR_GREEN); - attr.color[ATTR_FALSE] = COLOR_PAIR (COLR_RED); + attr.color[ATTR_HIGHEST] = COLOR_PAIR(COLR_CUSTOM); + attr.color[ATTR_HIGH] = COLOR_PAIR(COLR_HIGH); + attr.color[ATTR_MIDDLE] = COLOR_PAIR(COLR_RED); + attr.color[ATTR_LOW] = COLOR_PAIR(COLR_CYAN); + attr.color[ATTR_LOWEST] = COLOR_PAIR(COLR_YELLOW); + attr.color[ATTR_TRUE] = COLOR_PAIR(COLR_GREEN); + attr.color[ATTR_FALSE] = COLOR_PAIR(COLR_RED); attr.nocolor[ATTR_HIGHEST] = A_BOLD; attr.nocolor[ATTR_HIGH] = A_REVERSE; @@ -77,293 +76,278 @@ custom_init_attr (void) } /* Apply window attribute */ -void -custom_apply_attr (WINDOW *win, int attr_num) +void custom_apply_attr(WINDOW * win, int attr_num) { if (colorize) - wattron (win, attr.color[attr_num]); + wattron(win, attr.color[attr_num]); else - wattron (win, attr.nocolor[attr_num]); + wattron(win, attr.nocolor[attr_num]); } /* Remove window attribute */ -void -custom_remove_attr (WINDOW *win, int attr_num) +void custom_remove_attr(WINDOW * win, int attr_num) { if (colorize) - wattroff (win, attr.color[attr_num]); + wattroff(win, attr.color[attr_num]); else - wattroff (win, attr.nocolor[attr_num]); + wattroff(win, attr.nocolor[attr_num]); } /* Draws the configuration bar */ -void -custom_config_bar (void) +void custom_config_bar(void) { const int SMLSPC = 2; const int SPC = 15; - custom_apply_attr (win[STA].p, ATTR_HIGHEST); - mvwprintw (win[STA].p, 0, 2, "Q"); - mvwprintw (win[STA].p, 1, 2, "G"); - mvwprintw (win[STA].p, 0, 2 + SPC, "L"); - mvwprintw (win[STA].p, 1, 2 + SPC, "S"); - mvwprintw (win[STA].p, 0, 2 + 2 * SPC, "C"); - mvwprintw (win[STA].p, 1, 2 + 2 * SPC, "N"); - mvwprintw (win[STA].p, 0, 2 + 3 * SPC, "K"); - custom_remove_attr (win[STA].p, ATTR_HIGHEST); - - mvwprintw (win[STA].p, 0, 2 + SMLSPC, _("Exit")); - mvwprintw (win[STA].p, 1, 2 + SMLSPC, _("General")); - mvwprintw (win[STA].p, 0, 2 + SPC + SMLSPC, _("Layout")); - mvwprintw (win[STA].p, 1, 2 + SPC + SMLSPC, _("Sidebar")); - mvwprintw (win[STA].p, 0, 2 + 2 * SPC + SMLSPC, _("Color")); - mvwprintw (win[STA].p, 1, 2 + 2 * SPC + SMLSPC, _("Notify")); - mvwprintw (win[STA].p, 0, 2 + 3 * SPC + SMLSPC, _("Keys")); - - wnoutrefresh (win[STA].p); - wmove (win[STA].p, 0, 0); - wins_doupdate (); + custom_apply_attr(win[STA].p, ATTR_HIGHEST); + mvwprintw(win[STA].p, 0, 2, "Q"); + mvwprintw(win[STA].p, 1, 2, "G"); + mvwprintw(win[STA].p, 0, 2 + SPC, "L"); + mvwprintw(win[STA].p, 1, 2 + SPC, "S"); + mvwprintw(win[STA].p, 0, 2 + 2 * SPC, "C"); + mvwprintw(win[STA].p, 1, 2 + 2 * SPC, "N"); + mvwprintw(win[STA].p, 0, 2 + 3 * SPC, "K"); + custom_remove_attr(win[STA].p, ATTR_HIGHEST); + + mvwprintw(win[STA].p, 0, 2 + SMLSPC, _("Exit")); + mvwprintw(win[STA].p, 1, 2 + SMLSPC, _("General")); + mvwprintw(win[STA].p, 0, 2 + SPC + SMLSPC, _("Layout")); + mvwprintw(win[STA].p, 1, 2 + SPC + SMLSPC, _("Sidebar")); + mvwprintw(win[STA].p, 0, 2 + 2 * SPC + SMLSPC, _("Color")); + mvwprintw(win[STA].p, 1, 2 + 2 * SPC + SMLSPC, _("Notify")); + mvwprintw(win[STA].p, 0, 2 + 3 * SPC + SMLSPC, _("Keys")); + + wnoutrefresh(win[STA].p); + wmove(win[STA].p, 0, 0); + wins_doupdate(); } -static void -layout_selection_bar (void) +static void layout_selection_bar(void) { - struct binding quit = {_("Exit"), KEY_GENERIC_QUIT}; - struct binding select = {_("Select"), KEY_GENERIC_SELECT}; - struct binding up = {_("Up"), KEY_MOVE_UP}; - struct binding down = {_("Down"), KEY_MOVE_DOWN}; - struct binding left = {_("Left"), KEY_MOVE_LEFT}; - struct binding right = {_("Right"), KEY_MOVE_RIGHT}; - struct binding help = {_("Help"), KEY_GENERIC_HELP}; + struct binding quit = { _("Exit"), KEY_GENERIC_QUIT }; + struct binding select = { _("Select"), KEY_GENERIC_SELECT }; + struct binding up = { _("Up"), KEY_MOVE_UP }; + struct binding down = { _("Down"), KEY_MOVE_DOWN }; + struct binding left = { _("Left"), KEY_MOVE_LEFT }; + struct binding right = { _("Right"), KEY_MOVE_RIGHT }; + struct binding help = { _("Help"), KEY_GENERIC_HELP }; struct binding *bindings[] = { - &quit, &select, &up, &down, &left, &right, &help + &quit, &select, &up, &down, &left, &right, &help }; - int bindings_size = sizeof (bindings) / sizeof (bindings[0]); + int bindings_size = sizeof(bindings) / sizeof(bindings[0]); - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, 0, - bindings_size, NULL); + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, + bindings_size, NULL); } #define NBLAYOUTS 8 #define LAYOUTSPERCOL 2 /* Used to display available layouts in layout configuration menu. */ -static void -display_layout_config (struct window *lwin, int mark, int cursor) +static void display_layout_config(struct window *lwin, int mark, int cursor) { #define CURSOR (32 | A_REVERSE) #define MARK 88 #define LAYOUTH 5 #define LAYOUTW 9 const char *box = "[ ]"; - const int BOXSIZ = strlen (box); + const int BOXSIZ = strlen(box); const int NBCOLS = NBLAYOUTS / LAYOUTSPERCOL; const int COLSIZ = LAYOUTW + BOXSIZ + 1; const int XSPC = (lwin->w - NBCOLS * COLSIZ) / (NBCOLS + 1); const int XOFST = (lwin->w - NBCOLS * (XSPC + COLSIZ)) / 2; - const int YSPC = (lwin->h - 8 - LAYOUTSPERCOL * LAYOUTH) / (LAYOUTSPERCOL + 1); + const int YSPC = + (lwin->h - 8 - LAYOUTSPERCOL * LAYOUTH) / (LAYOUTSPERCOL + 1); const int YOFST = (lwin->h - LAYOUTSPERCOL * (YSPC + LAYOUTH)) / 2; - enum {YPOS, XPOS, NBPOS}; + enum { YPOS, XPOS, NBPOS }; int pos[NBLAYOUTS][NBPOS]; const char *layouts[LAYOUTH][NBLAYOUTS] = { - {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+"}, - {"| | c |", "| | t |", "| c | |", "| t | |", "| | c |", "| | a |", "| c | |", "| a | |"}, - {"| a +---+", "| a +---+", "+---+ a |", "|---+ a |", "| t +---+", "| t +---+", "+---+ t |", "+---+ t |"}, - {"| | t |", "| | c |", "| t | |", "| c | |", "| | a |", "| | c |", "| a | |", "| c | |"}, - {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+"} + {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", + "+---+---+", "+---+---+", "+---+---+"}, + {"| | c |", "| | t |", "| c | |", "| t | |", "| | c |", + "| | a |", "| c | |", "| a | |"}, + {"| a +---+", "| a +---+", "+---+ a |", "|---+ a |", "| t +---+", + "| t +---+", "+---+ t |", "+---+ t |"}, + {"| | t |", "| | c |", "| t | |", "| c | |", "| | a |", + "| | c |", "| a | |", "| c | |"}, + {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", + "+---+---+", "+---+---+", "+---+---+"} }; int i; - for (i = 0; i < NBLAYOUTS; i++) - { - pos[i][YPOS] = YOFST + (i % LAYOUTSPERCOL) * (YSPC + LAYOUTH); - pos[i][XPOS] = XOFST + (i / LAYOUTSPERCOL) * (XSPC + COLSIZ); - } + for (i = 0; i < NBLAYOUTS; i++) { + pos[i][YPOS] = YOFST + (i % LAYOUTSPERCOL) * (YSPC + LAYOUTH); + pos[i][XPOS] = XOFST + (i / LAYOUTSPERCOL) * (XSPC + COLSIZ); + } - for (i = 0; i < NBLAYOUTS; i++) - { - int j; - - mvwprintw (lwin->p, pos[i][YPOS] + 2, pos[i][XPOS], box); - if (i == mark) - custom_apply_attr (lwin->p, ATTR_HIGHEST); - for (j = 0; j < LAYOUTH; j++) - { - mvwprintw (lwin->p, pos[i][YPOS] + j, pos[i][XPOS] + BOXSIZ + 1, - layouts[j][i]); - } - if (i == mark) - custom_remove_attr (lwin->p, ATTR_HIGHEST); + for (i = 0; i < NBLAYOUTS; i++) { + int j; + + mvwprintw(lwin->p, pos[i][YPOS] + 2, pos[i][XPOS], box); + if (i == mark) + custom_apply_attr(lwin->p, ATTR_HIGHEST); + for (j = 0; j < LAYOUTH; j++) { + mvwprintw(lwin->p, pos[i][YPOS] + j, pos[i][XPOS] + BOXSIZ + 1, + layouts[j][i]); } - mvwaddch (lwin->p, pos[mark][YPOS] + 2, pos[mark][XPOS] + 1, MARK); - mvwaddch (lwin->p, pos[cursor][YPOS] + 2, pos[cursor][XPOS] + 1, CURSOR); - - layout_selection_bar (); - wnoutrefresh (win[STA].p); - wnoutrefresh (lwin->p); - wins_doupdate (); - if (notify_bar ()) - notify_update_bar (); + if (i == mark) + custom_remove_attr(lwin->p, ATTR_HIGHEST); + } + mvwaddch(lwin->p, pos[mark][YPOS] + 2, pos[mark][XPOS] + 1, MARK); + mvwaddch(lwin->p, pos[cursor][YPOS] + 2, pos[cursor][XPOS] + 1, CURSOR); + + layout_selection_bar(); + wnoutrefresh(win[STA].p); + wnoutrefresh(lwin->p); + wins_doupdate(); + if (notify_bar()) + notify_update_bar(); } /* Choose the layout */ -void -custom_layout_config (void) +void custom_layout_config(void) { struct scrollwin hwin; struct window conf_win; int ch, mark, cursor, need_reset; const char *label = _("layout configuration"); const char *help_text = - _("With this configuration menu, one can choose where panels will be\n" - "displayed inside calcurse screen. \n" - "It is possible to choose between eight different configurations.\n" - "\nIn the configuration representations, letters correspond to:\n\n" - " 'c' -> calendar panel\n\n" - " 'a' -> appointment panel\n\n" - " 't' -> todo panel\n\n"); + _("With this configuration menu, one can choose where panels will be\n" + "displayed inside calcurse screen. \n" + "It is possible to choose between eight different configurations.\n" + "\nIn the configuration representations, letters correspond to:\n\n" + " 'c' -> calendar panel\n\n" + " 'a' -> appointment panel\n\n" " 't' -> todo panel\n\n"); conf_win.p = NULL; - custom_confwin_init (&conf_win, label); - cursor = mark = wins_layout () - 1; - display_layout_config (&conf_win, mark, cursor); - clear (); - - while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) - { - need_reset = 0; - switch (ch) - { - case KEY_GENERIC_HELP: - help_wins_init (&hwin, 0, 0, - (notify_bar ()) ? row - 3 : row - 2, col); - mvwprintw (hwin.pad.p, 1, 0, "%s", help_text); - hwin.total_lines = 7; - wins_scrollwin_display (&hwin); - wgetch (hwin.win.p); - wins_scrollwin_delete (&hwin); - need_reset = 1; - break; - case KEY_GENERIC_SELECT: - mark = cursor; - break; - case KEY_MOVE_DOWN: - if (cursor % LAYOUTSPERCOL < LAYOUTSPERCOL - 1) - cursor++; - break; - case KEY_MOVE_UP: - if (cursor % LAYOUTSPERCOL > 0) - cursor--; - break; - case KEY_MOVE_LEFT: - if (cursor >= LAYOUTSPERCOL) - cursor -= LAYOUTSPERCOL; - break; - case KEY_MOVE_RIGHT: - if (cursor < NBLAYOUTS - LAYOUTSPERCOL) - cursor += LAYOUTSPERCOL; - break; - case KEY_GENERIC_CANCEL: - need_reset = 1; - break; - } + custom_confwin_init(&conf_win, label); + cursor = mark = wins_layout() - 1; + display_layout_config(&conf_win, mark, cursor); + clear(); + + while ((ch = keys_getch(win[STA].p, NULL)) != KEY_GENERIC_QUIT) { + need_reset = 0; + switch (ch) { + case KEY_GENERIC_HELP: + help_wins_init(&hwin, 0, 0, (notify_bar())? row - 3 : row - 2, col); + mvwprintw(hwin.pad.p, 1, 0, "%s", help_text); + hwin.total_lines = 7; + wins_scrollwin_display(&hwin); + wgetch(hwin.win.p); + wins_scrollwin_delete(&hwin); + need_reset = 1; + break; + case KEY_GENERIC_SELECT: + mark = cursor; + break; + case KEY_MOVE_DOWN: + if (cursor % LAYOUTSPERCOL < LAYOUTSPERCOL - 1) + cursor++; + break; + case KEY_MOVE_UP: + if (cursor % LAYOUTSPERCOL > 0) + cursor--; + break; + case KEY_MOVE_LEFT: + if (cursor >= LAYOUTSPERCOL) + cursor -= LAYOUTSPERCOL; + break; + case KEY_MOVE_RIGHT: + if (cursor < NBLAYOUTS - LAYOUTSPERCOL) + cursor += LAYOUTSPERCOL; + break; + case KEY_GENERIC_CANCEL: + need_reset = 1; + break; + } - if (resize) - { - resize = 0; - endwin (); - wins_refresh (); - curs_set (0); - need_reset = 1; - } + if (resize) { + resize = 0; + endwin(); + wins_refresh(); + curs_set(0); + need_reset = 1; + } - if (need_reset) - custom_confwin_init (&conf_win, label); + if (need_reset) + custom_confwin_init(&conf_win, label); - display_layout_config (&conf_win, mark, cursor); - } - wins_set_layout (mark + 1); - delwin (conf_win.p); + display_layout_config(&conf_win, mark, cursor); + } + wins_set_layout(mark + 1); + delwin(conf_win.p); } #undef NBLAYOUTS #undef LAYOUTSPERCOL /* Sidebar configuration screen. */ -void -custom_sidebar_config (void) +void custom_sidebar_config(void) { struct scrollwin hwin; - struct binding quit = {_("Exit"), KEY_GENERIC_QUIT}; - struct binding inc = {_("Width +"), KEY_MOVE_UP}; - struct binding dec = {_("Width -"), KEY_MOVE_DOWN}; - struct binding help = {_("Help"), KEY_GENERIC_HELP}; + struct binding quit = { _("Exit"), KEY_GENERIC_QUIT }; + struct binding inc = { _("Width +"), KEY_MOVE_UP }; + struct binding dec = { _("Width -"), KEY_MOVE_DOWN }; + struct binding help = { _("Help"), KEY_GENERIC_HELP }; struct binding *bindings[] = { - &inc, &dec, &help, &quit + &inc, &dec, &help, &quit }; const char *help_text = - _("This configuration screen is used to change the width of the side bar.\n" - "The side bar is the part of the screen which contains two panels:\n" - "the calendar and, depending on the chosen layout, either the todo list\n" - "or the appointment list.\n\n" - "The side bar width can be up to 50% of the total screen width, but\n" - "can't be smaller than " TOSTRING(SBARMINWIDTH) " characters wide.\n\n"); + _ + ("This configuration screen is used to change the width of the side bar.\n" + "The side bar is the part of the screen which contains two panels:\n" + "the calendar and, depending on the chosen layout, either the todo list\n" + "or the appointment list.\n\n" + "The side bar width can be up to 50% of the total screen width, but\n" + "can't be smaller than " TOSTRING(SBARMINWIDTH) " characters wide.\n\n"); int ch, bindings_size; - bindings_size = sizeof (bindings) / sizeof (bindings[0]); - - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, 0, - bindings_size, NULL); - wins_doupdate (); - - while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) - { - switch (ch) - { - case KEY_MOVE_UP: - wins_sbar_winc (); - break; - case KEY_MOVE_DOWN: - wins_sbar_wdec (); - break; - case KEY_GENERIC_HELP: - help_wins_init (&hwin, 0, 0, - (notify_bar ()) ? row - 3 : row - 2, col); - mvwprintw (hwin.pad.p, 1, 0, "%s", help_text); - hwin.total_lines = 6; - wins_scrollwin_display (&hwin); - wgetch (hwin.win.p); - wins_scrollwin_delete (&hwin); - break; - case KEY_RESIZE: - break; - default: - continue; - } + bindings_size = sizeof(bindings) / sizeof(bindings[0]); + + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, + bindings_size, NULL); + wins_doupdate(); + + while ((ch = keys_getch(win[STA].p, NULL)) != KEY_GENERIC_QUIT) { + switch (ch) { + case KEY_MOVE_UP: + wins_sbar_winc(); + break; + case KEY_MOVE_DOWN: + wins_sbar_wdec(); + break; + case KEY_GENERIC_HELP: + help_wins_init(&hwin, 0, 0, (notify_bar())? row - 3 : row - 2, col); + mvwprintw(hwin.pad.p, 1, 0, "%s", help_text); + hwin.total_lines = 6; + wins_scrollwin_display(&hwin); + wgetch(hwin.win.p); + wins_scrollwin_delete(&hwin); + break; + case KEY_RESIZE: + break; + default: + continue; + } - if (resize) - { - resize = 0; - wins_reset (); - } - else - { - wins_reinit_panels (); - wins_update_border (FLAG_ALL); - wins_update_panels (FLAG_ALL); - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, 0, - bindings_size, NULL); - wins_doupdate (); - } + if (resize) { + resize = 0; + wins_reset(); + } else { + wins_reinit_panels(); + wins_update_border(FLAG_ALL); + wins_update_panels(FLAG_ALL); + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, + bindings_size, NULL); + wins_doupdate(); } + } } -static void -set_confwin_attr (struct window *cwin) +static void set_confwin_attr(struct window *cwin) { - cwin->h = (notify_bar ())? row - 3 : row - 2; + cwin->h = (notify_bar())? row - 3 : row - 2; cwin->w = col; cwin->x = cwin->y = 0; } @@ -372,49 +356,45 @@ set_confwin_attr (struct window *cwin) * Create a configuration window and initialize status and notification bar * (useful in case of window resize). */ -void -custom_confwin_init (struct window *confwin, const char *label) +void custom_confwin_init(struct window *confwin, const char *label) { - if (confwin->p) - { - erase_window_part (confwin->p, confwin->x, confwin->y, - confwin->x + confwin->w, confwin->y + confwin->h); - delwin (confwin->p); - } - - wins_get_config (); - set_confwin_attr (confwin); - confwin->p = newwin (confwin->h, col, 0, 0); - box (confwin->p, 0, 0); - wins_show (confwin->p, label); - delwin (win[STA].p); - win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, win[STA].x); - keypad (win[STA].p, TRUE); - if (notify_bar ()) - { - notify_reinit_bar (); - notify_update_bar (); - } + if (confwin->p) { + erase_window_part(confwin->p, confwin->x, confwin->y, + confwin->x + confwin->w, confwin->y + confwin->h); + delwin(confwin->p); + } + + wins_get_config(); + set_confwin_attr(confwin); + confwin->p = newwin(confwin->h, col, 0, 0); + box(confwin->p, 0, 0); + wins_show(confwin->p, label); + delwin(win[STA].p); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); + keypad(win[STA].p, TRUE); + if (notify_bar()) { + notify_reinit_bar(); + notify_update_bar(); + } } -static void -color_selection_bar (void) +static void color_selection_bar(void) { - struct binding quit = {_("Exit"), KEY_GENERIC_QUIT}; - struct binding select = {_("Select"), KEY_GENERIC_SELECT}; - struct binding nocolor = {_("No color"), KEY_GENERIC_CANCEL}; - struct binding up = {_("Up"), KEY_MOVE_UP}; - struct binding down = {_("Down"), KEY_MOVE_DOWN}; - struct binding left = {_("Left"), KEY_MOVE_LEFT}; - struct binding right = {_("Right"), KEY_MOVE_RIGHT}; + struct binding quit = { _("Exit"), KEY_GENERIC_QUIT }; + struct binding select = { _("Select"), KEY_GENERIC_SELECT }; + struct binding nocolor = { _("No color"), KEY_GENERIC_CANCEL }; + struct binding up = { _("Up"), KEY_MOVE_UP }; + struct binding down = { _("Down"), KEY_MOVE_DOWN }; + struct binding left = { _("Left"), KEY_MOVE_LEFT }; + struct binding right = { _("Right"), KEY_MOVE_RIGHT }; struct binding *bindings[] = { &quit, &nocolor, &up, &down, &left, &right, &select }; - int bindings_size = sizeof (bindings) / sizeof (bindings[0]); + int bindings_size = sizeof(bindings) / sizeof(bindings[0]); - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, 0, - bindings_size, NULL); + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, + bindings_size, NULL); } /* @@ -422,8 +402,8 @@ color_selection_bar (void) * This is useful for window resizing. */ static void -display_color_config (struct window *cwin, int *mark_fore, int *mark_back, - int cursor, int theme_changed) +display_color_config(struct window *cwin, int *mark_fore, int *mark_back, + int cursor, int theme_changed) { #define SIZE (2 * (NBUSERCOLORS + 1)) #define DEFAULTCOLOR 255 @@ -439,13 +419,12 @@ display_color_config (struct window *cwin, int *mark_fore, int *mark_back, const unsigned Y = 3; const unsigned XOFST = 5; const unsigned YSPC = (cwin->h - 8) / (NBUSERCOLORS + 1); - const unsigned BARSIZ = strlen (bar); - const unsigned BOXSIZ = strlen (box); + const unsigned BARSIZ = strlen(bar); + const unsigned BOXSIZ = strlen(box); const unsigned XSPC = (cwin->w - 2 * BARSIZ - 2 * BOXSIZ - 6) / 3; const unsigned XFORE = XSPC; const unsigned XBACK = 2 * XSPC + BOXSIZ + XOFST + BARSIZ; - enum - { YPOS, XPOS, NBPOS }; + enum { YPOS, XPOS, NBPOS }; unsigned i; int pos[SIZE][NBPOS]; short colr_fore, colr_back; @@ -456,92 +435,82 @@ display_color_config (struct window *cwin, int *mark_fore, int *mark_back, COLR_MAGENTA, COLR_CYAN, COLR_DEFAULT }; - for (i = 0; i < NBUSERCOLORS + 1; i++) - { - pos[i][YPOS] = Y + YSPC * (i + 1); - pos[NBUSERCOLORS + i + 1][YPOS] = Y + YSPC * (i + 1); - pos[i][XPOS] = XFORE; - pos[NBUSERCOLORS + i + 1][XPOS] = XBACK; - } - - if (colorize) - { - if (theme_changed) - { - pair_content (colr[*mark_fore], &colr_fore, 0L); - if (colr_fore == 255) - colr_fore = -1; - pair_content (colr[*mark_back], &colr_back, 0L); - if (colr_back == 255) - colr_back = -1; - init_pair (COLR_CUSTOM, colr_fore, colr_back); - } + for (i = 0; i < NBUSERCOLORS + 1; i++) { + pos[i][YPOS] = Y + YSPC * (i + 1); + pos[NBUSERCOLORS + i + 1][YPOS] = Y + YSPC * (i + 1); + pos[i][XPOS] = XFORE; + pos[NBUSERCOLORS + i + 1][XPOS] = XBACK; + } + + if (colorize) { + if (theme_changed) { + pair_content(colr[*mark_fore], &colr_fore, 0L); + if (colr_fore == 255) + colr_fore = -1; + pair_content(colr[*mark_back], &colr_back, 0L); + if (colr_back == 255) + colr_back = -1; + init_pair(COLR_CUSTOM, colr_fore, colr_back); + } else { + /* Retrieve the actual color theme. */ + pair_content(COLR_CUSTOM, &colr_fore, &colr_back); + + if ((colr_fore == DEFAULTCOLOR) || (colr_fore == DEFAULTCOLOR_EXT)) + *mark_fore = NBUSERCOLORS; else - { - /* Retrieve the actual color theme. */ - pair_content (COLR_CUSTOM, &colr_fore, &colr_back); + for (i = 0; i < NBUSERCOLORS + 1; i++) + if (colr_fore == colr[i]) + *mark_fore = i; - if ((colr_fore == DEFAULTCOLOR) || (colr_fore == DEFAULTCOLOR_EXT)) - *mark_fore = NBUSERCOLORS; - else - for (i = 0; i < NBUSERCOLORS + 1; i++) - if (colr_fore == colr[i]) - *mark_fore = i; - - if ((colr_back == DEFAULTCOLOR) || (colr_back == DEFAULTCOLOR_EXT)) - *mark_back = SIZE - 1; - else - for (i = 0; i < NBUSERCOLORS + 1; i++) - if (colr_back == colr[NBUSERCOLORS + 1 + i]) - *mark_back = NBUSERCOLORS + 1 + i; - } + if ((colr_back == DEFAULTCOLOR) || (colr_back == DEFAULTCOLOR_EXT)) + *mark_back = SIZE - 1; + else + for (i = 0; i < NBUSERCOLORS + 1; i++) + if (colr_back == colr[NBUSERCOLORS + 1 + i]) + *mark_back = NBUSERCOLORS + 1 + i; } + } /* color boxes */ - for (i = 0; i < SIZE - 1; i++) - { - mvwprintw (cwin->p, pos[i][YPOS], pos[i][XPOS], box); - wattron (cwin->p, COLOR_PAIR (colr[i]) | A_REVERSE); - mvwprintw (cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); - wattroff (cwin->p, COLOR_PAIR (colr[i]) | A_REVERSE); - } + for (i = 0; i < SIZE - 1; i++) { + mvwprintw(cwin->p, pos[i][YPOS], pos[i][XPOS], box); + wattron(cwin->p, COLOR_PAIR(colr[i]) | A_REVERSE); + mvwprintw(cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); + wattroff(cwin->p, COLOR_PAIR(colr[i]) | A_REVERSE); + } /* Terminal's default color */ i = SIZE - 1; - mvwprintw (cwin->p, pos[i][YPOS], pos[i][XPOS], box); - wattron (cwin->p, COLOR_PAIR (colr[i])); - mvwprintw (cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); - wattroff (cwin->p, COLOR_PAIR (colr[i])); - mvwprintw (cwin->p, pos[NBUSERCOLORS][YPOS] + 1, - pos[NBUSERCOLORS][XPOS] + XOFST, default_txt); - mvwprintw (cwin->p, pos[SIZE - 1][YPOS] + 1, - pos[SIZE - 1][XPOS] + XOFST, default_txt); - - custom_apply_attr (cwin->p, ATTR_HIGHEST); - mvwprintw (cwin->p, Y, XFORE + XOFST, fore_txt); - mvwprintw (cwin->p, Y, XBACK + XOFST, back_txt); - custom_remove_attr (cwin->p, ATTR_HIGHEST); - - if (colorize) - { - mvwaddch (cwin->p, pos[*mark_fore][YPOS], - pos[*mark_fore][XPOS] + 1, MARK); - mvwaddch (cwin->p, pos[*mark_back][YPOS], - pos[*mark_back][XPOS] + 1, MARK); - } - - mvwaddch (cwin->p, pos[cursor][YPOS], pos[cursor][XPOS] + 1, CURSOR); - color_selection_bar (); - wnoutrefresh (win[STA].p); - wnoutrefresh (cwin->p); - wins_doupdate (); - if (notify_bar ()) - notify_update_bar (); + mvwprintw(cwin->p, pos[i][YPOS], pos[i][XPOS], box); + wattron(cwin->p, COLOR_PAIR(colr[i])); + mvwprintw(cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); + wattroff(cwin->p, COLOR_PAIR(colr[i])); + mvwprintw(cwin->p, pos[NBUSERCOLORS][YPOS] + 1, + pos[NBUSERCOLORS][XPOS] + XOFST, default_txt); + mvwprintw(cwin->p, pos[SIZE - 1][YPOS] + 1, + pos[SIZE - 1][XPOS] + XOFST, default_txt); + + custom_apply_attr(cwin->p, ATTR_HIGHEST); + mvwprintw(cwin->p, Y, XFORE + XOFST, fore_txt); + mvwprintw(cwin->p, Y, XBACK + XOFST, back_txt); + custom_remove_attr(cwin->p, ATTR_HIGHEST); + + if (colorize) { + mvwaddch(cwin->p, pos[*mark_fore][YPOS], pos[*mark_fore][XPOS] + 1, MARK); + mvwaddch(cwin->p, pos[*mark_back][YPOS], pos[*mark_back][XPOS] + 1, MARK); + } + + mvwaddch(cwin->p, pos[cursor][YPOS], pos[cursor][XPOS] + 1, CURSOR); + color_selection_bar(); + wnoutrefresh(win[STA].p); + wnoutrefresh(cwin->p); + wins_doupdate(); + if (notify_bar()) + notify_update_bar(); } /* Color theme configuration. */ -void -custom_color_config (void) +void custom_color_config(void) { struct window conf_win; int ch, cursor, need_reset, theme_changed; @@ -549,78 +518,75 @@ custom_color_config (void) const char *label = _("color theme"); conf_win.p = 0; - custom_confwin_init (&conf_win, label); + custom_confwin_init(&conf_win, label); mark_fore = NBUSERCOLORS; mark_back = SIZE - 1; cursor = 0; theme_changed = 0; - display_color_config (&conf_win, &mark_fore, &mark_back, cursor, theme_changed); - clear (); - - while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) - { - need_reset = 0; - theme_changed = 0; - - switch (ch) - { - case KEY_GENERIC_SELECT: - colorize = 1; - need_reset = 1; - theme_changed = 1; - if (cursor > NBUSERCOLORS) - mark_back = cursor; - else - mark_fore = cursor; - break; - - case KEY_MOVE_DOWN: - if (cursor < SIZE - 1) - ++cursor; - break; - - case KEY_MOVE_UP: - if (cursor > 0) - --cursor; - break; - - case KEY_MOVE_LEFT: - if (cursor > NBUSERCOLORS) - cursor -= (NBUSERCOLORS + 1); - break; - - case KEY_MOVE_RIGHT: - if (cursor <= NBUSERCOLORS) - cursor += (NBUSERCOLORS + 1); - break; - - case KEY_GENERIC_CANCEL: - colorize = 0; - need_reset = 1; - break; - } + display_color_config(&conf_win, &mark_fore, &mark_back, cursor, + theme_changed); + clear(); + + while ((ch = keys_getch(win[STA].p, NULL)) != KEY_GENERIC_QUIT) { + need_reset = 0; + theme_changed = 0; + + switch (ch) { + case KEY_GENERIC_SELECT: + colorize = 1; + need_reset = 1; + theme_changed = 1; + if (cursor > NBUSERCOLORS) + mark_back = cursor; + else + mark_fore = cursor; + break; + + case KEY_MOVE_DOWN: + if (cursor < SIZE - 1) + ++cursor; + break; + + case KEY_MOVE_UP: + if (cursor > 0) + --cursor; + break; + + case KEY_MOVE_LEFT: + if (cursor > NBUSERCOLORS) + cursor -= (NBUSERCOLORS + 1); + break; + + case KEY_MOVE_RIGHT: + if (cursor <= NBUSERCOLORS) + cursor += (NBUSERCOLORS + 1); + break; + + case KEY_GENERIC_CANCEL: + colorize = 0; + need_reset = 1; + break; + } - if (resize) - { - resize = 0; - endwin (); - wins_refresh (); - curs_set (0); - need_reset = 1; - } + if (resize) { + resize = 0; + endwin(); + wins_refresh(); + curs_set(0); + need_reset = 1; + } - if (need_reset) - custom_confwin_init (&conf_win, label); + if (need_reset) + custom_confwin_init(&conf_win, label); - display_color_config (&conf_win, &mark_fore, &mark_back, cursor, - theme_changed); - } - delwin (conf_win.p); + display_color_config(&conf_win, &mark_fore, &mark_back, cursor, + theme_changed); + } + delwin(conf_win.p); } /* Prints the general options. */ -static int -print_general_options (WINDOW *win) +static int print_general_options(WINDOW * win) { enum { AUTO_SAVE, @@ -652,88 +618,86 @@ print_general_options (WINDOW *win) }; y = 0; - mvwprintw (win, y, XPOS, "[1] %s ", opt[AUTO_SAVE]); - print_bool_option_incolor (win, conf.auto_save, y, - XPOS + 4 + strlen (opt[AUTO_SAVE])); - mvwprintw (win, y + 1, XPOS, - _("(if set to YES, automatic save is done when quitting)")); + mvwprintw(win, y, XPOS, "[1] %s ", opt[AUTO_SAVE]); + print_bool_option_incolor(win, conf.auto_save, y, + XPOS + 4 + strlen(opt[AUTO_SAVE])); + mvwprintw(win, y + 1, XPOS, + _("(if set to YES, automatic save is done when quitting)")); y += YOFF; - mvwprintw (win, y, XPOS, "[2] %s ", opt[AUTO_GC]); - print_bool_option_incolor (win, conf.auto_gc, y, - XPOS + 4 + strlen (opt[AUTO_GC])); - mvwprintw (win, y + 1, XPOS, - _("(run the garbage collector when quitting)")); + mvwprintw(win, y, XPOS, "[2] %s ", opt[AUTO_GC]); + print_bool_option_incolor(win, conf.auto_gc, y, + XPOS + 4 + strlen(opt[AUTO_GC])); + mvwprintw(win, y + 1, XPOS, _("(run the garbage collector when quitting)")); y += YOFF; - mvwprintw (win, y, XPOS, "[3] %s ", opt[PERIODIC_SAVE]); - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, XPOS + 4 + strlen (opt[PERIODIC_SAVE]), "%d", - conf.periodic_save); - custom_remove_attr (win, ATTR_HIGHEST); - mvwprintw (win, y + 1, XPOS, - _("(if not null, automatically save data every 'periodic_save' " - "minutes)")); + mvwprintw(win, y, XPOS, "[3] %s ", opt[PERIODIC_SAVE]); + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, XPOS + 4 + strlen(opt[PERIODIC_SAVE]), "%d", + conf.periodic_save); + custom_remove_attr(win, ATTR_HIGHEST); + mvwprintw(win, y + 1, XPOS, + _("(if not null, automatically save data every 'periodic_save' " + "minutes)")); y += YOFF; - mvwprintw (win, y, XPOS, "[4] %s ", opt[CONFIRM_QUIT]); - print_bool_option_incolor (win, conf.confirm_quit, y, - XPOS + 4 + strlen (opt[CONFIRM_QUIT])); - mvwprintw (win, y + 1, XPOS, - _("(if set to YES, confirmation is required before quitting)")); + mvwprintw(win, y, XPOS, "[4] %s ", opt[CONFIRM_QUIT]); + print_bool_option_incolor(win, conf.confirm_quit, y, + XPOS + 4 + strlen(opt[CONFIRM_QUIT])); + mvwprintw(win, y + 1, XPOS, + _("(if set to YES, confirmation is required before quitting)")); y += YOFF; - mvwprintw (win, y, XPOS, "[5] %s ", opt[CONFIRM_DELETE]); - print_bool_option_incolor (win, conf.confirm_delete, y, - XPOS + 4 + strlen (opt[CONFIRM_DELETE])); - mvwprintw (win, y + 1, XPOS, - _("(if set to YES, confirmation is required " - "before deleting an event)")); + mvwprintw(win, y, XPOS, "[5] %s ", opt[CONFIRM_DELETE]); + print_bool_option_incolor(win, conf.confirm_delete, y, + XPOS + 4 + strlen(opt[CONFIRM_DELETE])); + mvwprintw(win, y + 1, XPOS, + _("(if set to YES, confirmation is required " + "before deleting an event)")); y += YOFF; - mvwprintw (win, y, XPOS, "[6] %s ", opt[SYSTEM_DIAGS]); - print_bool_option_incolor (win, conf.system_dialogs, y, - XPOS + 4 + strlen (opt[SYSTEM_DIAGS])); - mvwprintw (win, y + 1, XPOS, - _("(if set to YES, messages about loaded " - "and saved data will be displayed)")); + mvwprintw(win, y, XPOS, "[6] %s ", opt[SYSTEM_DIAGS]); + print_bool_option_incolor(win, conf.system_dialogs, y, + XPOS + 4 + strlen(opt[SYSTEM_DIAGS])); + mvwprintw(win, y + 1, XPOS, + _("(if set to YES, messages about loaded " + "and saved data will be displayed)")); y += YOFF; - mvwprintw (win, y, XPOS, "[7] %s ", opt[PROGRESS_BAR]); - print_bool_option_incolor (win, conf.progress_bar, y, - XPOS + 4 + strlen (opt[PROGRESS_BAR])); - mvwprintw (win, y + 1, XPOS, - _("(if set to YES, progress bar will be displayed " - "when saving data)")); + mvwprintw(win, y, XPOS, "[7] %s ", opt[PROGRESS_BAR]); + print_bool_option_incolor(win, conf.progress_bar, y, + XPOS + 4 + strlen(opt[PROGRESS_BAR])); + mvwprintw(win, y + 1, XPOS, + _("(if set to YES, progress bar will be displayed " + "when saving data)")); y += YOFF; - mvwprintw (win, y, XPOS, "[8] %s ", opt[FIRST_DAY_OF_WEEK]); - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, XPOS + 4 + strlen (opt[FIRST_DAY_OF_WEEK]), "%s", - calendar_week_begins_on_monday () ? _("Monday") : _("Sunday")); - custom_remove_attr (win, ATTR_HIGHEST); - mvwprintw (win, y + 1, XPOS, - _("(specifies the first day of week in the calendar view)")); + mvwprintw(win, y, XPOS, "[8] %s ", opt[FIRST_DAY_OF_WEEK]); + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, XPOS + 4 + strlen(opt[FIRST_DAY_OF_WEEK]), "%s", + calendar_week_begins_on_monday()? _("Monday") : _("Sunday")); + custom_remove_attr(win, ATTR_HIGHEST); + mvwprintw(win, y + 1, XPOS, + _("(specifies the first day of week in the calendar view)")); y += YOFF; - mvwprintw (win, y, XPOS, "[9] %s ", opt[OUTPUT_DATE_FMT]); - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, XPOS + 4 + strlen (opt[OUTPUT_DATE_FMT]), "%s", - conf.output_datefmt); - custom_remove_attr (win, ATTR_HIGHEST); - mvwprintw (win, y + 1, XPOS, - _("(Format of the date to be displayed in non-interactive mode)")); + mvwprintw(win, y, XPOS, "[9] %s ", opt[OUTPUT_DATE_FMT]); + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, XPOS + 4 + strlen(opt[OUTPUT_DATE_FMT]), "%s", + conf.output_datefmt); + custom_remove_attr(win, ATTR_HIGHEST); + mvwprintw(win, y + 1, XPOS, + _("(Format of the date to be displayed in non-interactive mode)")); y += YOFF; - mvwprintw (win, y, XPOS, "[0] %s ", opt[INPUT_DATE_FMT]); - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, XPOS + 4 + strlen (opt[INPUT_DATE_FMT]), "%d", - conf.input_datefmt); - custom_remove_attr (win, ATTR_HIGHEST); - mvwprintw (win, y + 1, XPOS, _("(Format to be used when entering a date: ")); - mvwprintw (win, y + 2, XPOS, - _(" (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd (4)yyyy-mm-dd)")); + mvwprintw(win, y, XPOS, "[0] %s ", opt[INPUT_DATE_FMT]); + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, XPOS + 4 + strlen(opt[INPUT_DATE_FMT]), "%d", + conf.input_datefmt); + custom_remove_attr(win, ATTR_HIGHEST); + mvwprintw(win, y + 1, XPOS, _("(Format to be used when entering a date: ")); + mvwprintw(win, y + 2, XPOS, + _(" (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd (4)yyyy-mm-dd)")); return y + YOFF; } -void -custom_set_swsiz (struct scrollwin *sw) +void custom_set_swsiz(struct scrollwin *sw) { sw->win.x = 0; sw->win.y = 0; - sw->win.h = (notify_bar ()) ? row - 3 : row - 2; + sw->win.h = (notify_bar())? row - 3 : row - 2; sw->win.w = col; sw->pad.x = 1; @@ -743,145 +707,132 @@ custom_set_swsiz (struct scrollwin *sw) } /* General configuration. */ -void -custom_general_config (void) +void custom_general_config(void) { struct scrollwin cwin; - const char *number_str = - _("Enter an option number to change its value"); - const char *keys = - _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); + const char *number_str = _("Enter an option number to change its value"); + const char *keys = _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); const char *output_datefmt_str = - _("Enter the date format (see 'man 3 strftime' for possible formats) "); + _("Enter the date format (see 'man 3 strftime' for possible formats) "); const char *input_datefmt_str = - _("Enter the date format (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd " - "(4)yyyy-mm-dd"); + _("Enter the date format (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd " + "(4)yyyy-mm-dd"); const char *periodic_save_str = - _("Enter the delay, in minutes, between automatic saves (0 to disable) "); + _("Enter the delay, in minutes, between automatic saves (0 to disable) "); int ch; char *buf; - clear (); - custom_set_swsiz (&cwin); + clear(); + custom_set_swsiz(&cwin); cwin.label = _("general options"); - wins_scrollwin_init (&cwin); - wins_show (cwin.win.p, cwin.label); - status_mesg (number_str, keys); - cwin.total_lines = print_general_options (cwin.pad.p); - wins_scrollwin_display (&cwin); - - buf = mem_malloc (BUFSIZ); - while ((ch = wgetch (win[STA].p)) != 'q') - { - buf[0] = '\0'; - - switch (ch) - { - case CTRL ('N'): - wins_scrollwin_down (&cwin, 1); - break; - case CTRL ('P'): - wins_scrollwin_up (&cwin, 1); - break; - case '1': - conf.auto_save = !conf.auto_save; - break; - case '2': - conf.auto_gc = !conf.auto_gc; - break; - case '3': - status_mesg (periodic_save_str, ""); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - int val = atoi (buf); - if (val >= 0) - conf.periodic_save = val; - if (conf.periodic_save > 0) - io_start_psave_thread (); - else if (conf.periodic_save == 0) - io_stop_psave_thread (); - } - status_mesg (number_str, keys); - break; - case '4': - conf.confirm_quit = !conf.confirm_quit; - break; - case '5': - conf.confirm_delete = !conf.confirm_delete; - break; - case '6': - conf.system_dialogs = !conf.system_dialogs; - break; - case '7': - conf.progress_bar = !conf.progress_bar; - break; - case '8': - calendar_change_first_day_of_week (); - break; - case '9': - status_mesg (output_datefmt_str, ""); - strncpy (buf, conf.output_datefmt, - strlen (conf.output_datefmt) + 1); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - strncpy (conf.output_datefmt, buf, strlen (buf) + 1); - } - status_mesg (number_str, keys); - break; - case '0': - status_mesg (input_datefmt_str, ""); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - int val = atoi (buf); - if (val > 0 && val <= DATE_FORMATS) - conf.input_datefmt = val; - } - status_mesg (number_str, keys); - break; - } - - if (resize) - { - resize = 0; - wins_reset (); - wins_scrollwin_delete (&cwin); - custom_set_swsiz (&cwin); - wins_scrollwin_init (&cwin); - wins_show (cwin.win.p, cwin.label); - cwin.first_visible_line = 0; - delwin (win[STA].p); - win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, - win[STA].x); - keypad (win[STA].p, TRUE); - if (notify_bar ()) - { - notify_reinit_bar (); - notify_update_bar (); - } - } + wins_scrollwin_init(&cwin); + wins_show(cwin.win.p, cwin.label); + status_mesg(number_str, keys); + cwin.total_lines = print_general_options(cwin.pad.p); + wins_scrollwin_display(&cwin); + + buf = mem_malloc(BUFSIZ); + while ((ch = wgetch(win[STA].p)) != 'q') { + buf[0] = '\0'; + + switch (ch) { + case CTRL('N'): + wins_scrollwin_down(&cwin, 1); + break; + case CTRL('P'): + wins_scrollwin_up(&cwin, 1); + break; + case '1': + conf.auto_save = !conf.auto_save; + break; + case '2': + conf.auto_gc = !conf.auto_gc; + break; + case '3': + status_mesg(periodic_save_str, ""); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + int val = atoi(buf); + if (val >= 0) + conf.periodic_save = val; + if (conf.periodic_save > 0) + io_start_psave_thread(); + else if (conf.periodic_save == 0) + io_stop_psave_thread(); + } + status_mesg(number_str, keys); + break; + case '4': + conf.confirm_quit = !conf.confirm_quit; + break; + case '5': + conf.confirm_delete = !conf.confirm_delete; + break; + case '6': + conf.system_dialogs = !conf.system_dialogs; + break; + case '7': + conf.progress_bar = !conf.progress_bar; + break; + case '8': + calendar_change_first_day_of_week(); + break; + case '9': + status_mesg(output_datefmt_str, ""); + strncpy(buf, conf.output_datefmt, strlen(conf.output_datefmt) + 1); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + strncpy(conf.output_datefmt, buf, strlen(buf) + 1); + } + status_mesg(number_str, keys); + break; + case '0': + status_mesg(input_datefmt_str, ""); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + int val = atoi(buf); + if (val > 0 && val <= DATE_FORMATS) + conf.input_datefmt = val; + } + status_mesg(number_str, keys); + break; + } - status_mesg (number_str, keys); - cwin.total_lines = print_general_options (cwin.pad.p); - wins_scrollwin_display (&cwin); + if (resize) { + resize = 0; + wins_reset(); + wins_scrollwin_delete(&cwin); + custom_set_swsiz(&cwin); + wins_scrollwin_init(&cwin); + wins_show(cwin.win.p, cwin.label); + cwin.first_visible_line = 0; + delwin(win[STA].p); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); + keypad(win[STA].p, TRUE); + if (notify_bar()) { + notify_reinit_bar(); + notify_update_bar(); + } } - mem_free (buf); - wins_scrollwin_delete (&cwin); -} + status_mesg(number_str, keys); + cwin.total_lines = print_general_options(cwin.pad.p); + wins_scrollwin_display(&cwin); + } + mem_free(buf); + wins_scrollwin_delete(&cwin); +} static void -print_key_incolor (WINDOW *win, const char *option, int pos_y, int pos_x) +print_key_incolor(WINDOW * win, const char *option, int pos_y, int pos_x) { const int color = ATTR_HIGHEST; - RETURN_IF (!option, _("Undefined option!")); - custom_apply_attr (win, color); - mvwprintw (win, pos_y, pos_x, "%s ", option); - custom_remove_attr (win, color); + RETURN_IF(!option, _("Undefined option!")); + custom_apply_attr(win, color); + mvwprintw(win, pos_y, pos_x, "%s ", option); + custom_remove_attr(win, color); } static int -print_keys_bindings (WINDOW *win, int selected_row, int selected_elm, int yoff) +print_keys_bindings(WINDOW * win, int selected_row, int selected_elm, int yoff) { const int XPOS = 1; const int EQUALPOS = 23; @@ -889,73 +840,65 @@ print_keys_bindings (WINDOW *win, int selected_row, int selected_elm, int yoff) int noelm, action, y; noelm = y = 0; - for (action = 0; action < NBKEYS; action++) - { - char actionstr[BUFSIZ]; - int nbkeys; - - nbkeys = keys_action_count_keys (action); - snprintf (actionstr, BUFSIZ, "%s", keys_get_label (action)); - if (action == selected_row) - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, XPOS, "%s ", actionstr); - mvwprintw (win, y, EQUALPOS, "="); - if (nbkeys == 0) - mvwprintw (win, y, KEYPOS, _("undefined")); - if (action == selected_row) - custom_remove_attr (win, ATTR_HIGHEST); - if (nbkeys > 0) - { - if (action == selected_row) - { - const char *key; - int pos; - - pos = KEYPOS; - while ((key = keys_action_nkey (action, noelm)) != NULL) - { - if (noelm == selected_elm) - print_key_incolor (win, key, y, pos); - else - mvwprintw (win, y, pos, "%s ", key); - noelm++; - pos += strlen (key) + 1; - } - } + for (action = 0; action < NBKEYS; action++) { + char actionstr[BUFSIZ]; + int nbkeys; + + nbkeys = keys_action_count_keys(action); + snprintf(actionstr, BUFSIZ, "%s", keys_get_label(action)); + if (action == selected_row) + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, XPOS, "%s ", actionstr); + mvwprintw(win, y, EQUALPOS, "="); + if (nbkeys == 0) + mvwprintw(win, y, KEYPOS, _("undefined")); + if (action == selected_row) + custom_remove_attr(win, ATTR_HIGHEST); + if (nbkeys > 0) { + if (action == selected_row) { + const char *key; + int pos; + + pos = KEYPOS; + while ((key = keys_action_nkey(action, noelm)) != NULL) { + if (noelm == selected_elm) + print_key_incolor(win, key, y, pos); else - { - mvwprintw (win, y, KEYPOS, "%s", keys_action_allkeys (action)); - } + mvwprintw(win, y, pos, "%s ", key); + noelm++; + pos += strlen(key) + 1; } - y += yoff; + } else { + mvwprintw(win, y, KEYPOS, "%s", keys_action_allkeys(action)); + } } + y += yoff; + } return noelm; } -static void -custom_keys_config_bar (void) +static void custom_keys_config_bar(void) { - struct binding quit = {_("Exit"), KEY_GENERIC_QUIT}; - struct binding info = {_("Key info"), KEY_GENERIC_HELP}; - struct binding add = {_("Add key"), KEY_ADD_ITEM}; - struct binding del = {_("Del key"), KEY_DEL_ITEM}; - struct binding up = {_("Up"), KEY_MOVE_UP}; - struct binding down = {_("Down"), KEY_MOVE_DOWN}; - struct binding left = {_("Prev Key"), KEY_MOVE_LEFT}; - struct binding right = {_("Next Key"), KEY_MOVE_RIGHT}; + struct binding quit = { _("Exit"), KEY_GENERIC_QUIT }; + struct binding info = { _("Key info"), KEY_GENERIC_HELP }; + struct binding add = { _("Add key"), KEY_ADD_ITEM }; + struct binding del = { _("Del key"), KEY_DEL_ITEM }; + struct binding up = { _("Up"), KEY_MOVE_UP }; + struct binding down = { _("Down"), KEY_MOVE_DOWN }; + struct binding left = { _("Prev Key"), KEY_MOVE_LEFT }; + struct binding right = { _("Next Key"), KEY_MOVE_RIGHT }; struct binding *bindings[] = { &quit, &info, &add, &del, &up, &down, &left, &right }; - int bindings_size = sizeof (bindings) / sizeof (bindings[0]); + int bindings_size = sizeof(bindings) / sizeof(bindings[0]); - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, 0, - bindings_size, NULL); + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, + bindings_size, NULL); } -void -custom_keys_config (void) +void custom_keys_config(void) { struct scrollwin kwin; int selrow, selelm, firstrow, lastrow, nbrowelm, nbdisplayed; @@ -965,139 +908,125 @@ custom_keys_config (void) const int LINESPERKEY = 2; const int LABELLINES = 3; - clear (); - custom_set_swsiz (&kwin); + clear(); + custom_set_swsiz(&kwin); nbdisplayed = (kwin.win.h - LABELLINES) / LINESPERKEY; kwin.label = _("keys configuration"); - wins_scrollwin_init (&kwin); - wins_show (kwin.win.p, kwin.label); - custom_keys_config_bar (); + wins_scrollwin_init(&kwin); + wins_show(kwin.win.p, kwin.label); + custom_keys_config_bar(); selrow = selelm = 0; - nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, LINESPERKEY); + nbrowelm = print_keys_bindings(kwin.pad.p, selrow, selelm, LINESPERKEY); kwin.total_lines = NBKEYS * LINESPERKEY; - wins_scrollwin_display (&kwin); + wins_scrollwin_display(&kwin); firstrow = 0; lastrow = firstrow + nbdisplayed - 1; - for (;;) - { - int ch; - - ch = keys_getch (win[STA].p, NULL); - switch (ch) - { - case KEY_MOVE_UP: - if (selrow > 0) - { - selrow--; - selelm = 0; - if (selrow == firstrow) - { - firstrow--; - lastrow--; - wins_scrollwin_up (&kwin, LINESPERKEY); - } - } - break; - case KEY_MOVE_DOWN: - if (selrow < NBKEYS - 1) - { - selrow++; - selelm = 0; - if (selrow == lastrow) - { - firstrow++; - lastrow++; - wins_scrollwin_down (&kwin, LINESPERKEY); - } - } - break; - case KEY_MOVE_LEFT: - if (selelm > 0) - selelm--; - break; - case KEY_MOVE_RIGHT: - if (selelm < nbrowelm - 1) - selelm++; - break; - case KEY_GENERIC_HELP: - keys_popup_info (selrow); - break; - case KEY_ADD_ITEM: + for (;;) { + int ch; + + ch = keys_getch(win[STA].p, NULL); + switch (ch) { + case KEY_MOVE_UP: + if (selrow > 0) { + selrow--; + selelm = 0; + if (selrow == firstrow) { + firstrow--; + lastrow--; + wins_scrollwin_up(&kwin, LINESPERKEY); + } + } + break; + case KEY_MOVE_DOWN: + if (selrow < NBKEYS - 1) { + selrow++; + selelm = 0; + if (selrow == lastrow) { + firstrow++; + lastrow++; + wins_scrollwin_down(&kwin, LINESPERKEY); + } + } + break; + case KEY_MOVE_LEFT: + if (selelm > 0) + selelm--; + break; + case KEY_MOVE_RIGHT: + if (selelm < nbrowelm - 1) + selelm++; + break; + case KEY_GENERIC_HELP: + keys_popup_info(selrow); + break; + case KEY_ADD_ITEM: #define WINROW 10 #define WINCOL 50 - do - { - used = 0; - grabwin = popup (WINROW, WINCOL, (row - WINROW) / 2, - (col - WINCOL) / 2, - _("Press the key you want to assign to:"), - keys_get_label (selrow), 0); - keyval = wgetch (grabwin); - - /* First check if this key would be recognized by calcurse. */ - if (keys_str2int (keys_int2str (keyval)) == -1) - { - not_recognized = 1; - WARN_MSG (_("This key is not yet recognized by calcurse, " - "please choose another one.")); - werase (kwin.pad.p); - nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, - LINESPERKEY); - wins_scrollwin_display (&kwin); - continue; - } - else - not_recognized = 0; - - used = keys_assign_binding (keyval, selrow); - if (used) - { - enum key action; - - action = keys_get_action (keyval); - WARN_MSG (_("This key is already in use for %s, " - "please choose another one."), - keys_get_label (action)); - werase (kwin.pad.p); - nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, - LINESPERKEY); - wins_scrollwin_display (&kwin); - } - delwin (grabwin); - } - while (used || not_recognized); - nbrowelm++; - if (selelm < nbrowelm - 1) - selelm++; + do { + used = 0; + grabwin = popup(WINROW, WINCOL, (row - WINROW) / 2, + (col - WINCOL) / 2, + _("Press the key you want to assign to:"), + keys_get_label(selrow), 0); + keyval = wgetch(grabwin); + + /* First check if this key would be recognized by calcurse. */ + if (keys_str2int(keys_int2str(keyval)) == -1) { + not_recognized = 1; + WARN_MSG(_("This key is not yet recognized by calcurse, " + "please choose another one.")); + werase(kwin.pad.p); + nbrowelm = print_keys_bindings(kwin.pad.p, selrow, selelm, + LINESPERKEY); + wins_scrollwin_display(&kwin); + continue; + } else + not_recognized = 0; + + used = keys_assign_binding(keyval, selrow); + if (used) { + enum key action; + + action = keys_get_action(keyval); + WARN_MSG(_("This key is already in use for %s, " + "please choose another one."), keys_get_label(action)); + werase(kwin.pad.p); + nbrowelm = print_keys_bindings(kwin.pad.p, selrow, selelm, + LINESPERKEY); + wins_scrollwin_display(&kwin); + } + delwin(grabwin); + } + while (used || not_recognized); + nbrowelm++; + if (selelm < nbrowelm - 1) + selelm++; #undef WINROW #undef WINCOL - break; - case KEY_DEL_ITEM: - keystr = keys_action_nkey (selrow, selelm); - keyval = keys_str2int (keystr); - keys_remove_binding (keyval, selrow); - nbrowelm--; - if (selelm > 0 && selelm <= nbrowelm) - selelm--; - break; - case KEY_GENERIC_QUIT: - if (keys_check_missing_bindings () != 0) - { - WARN_MSG (_("Some actions do not have any associated " - "key bindings!")); - } - wins_scrollwin_delete (&kwin); - return; - } - custom_keys_config_bar (); - werase (kwin.pad.p); - nbrowelm = print_keys_bindings (kwin.pad.p, selrow, selelm, LINESPERKEY); - wins_scrollwin_display (&kwin); + break; + case KEY_DEL_ITEM: + keystr = keys_action_nkey(selrow, selelm); + keyval = keys_str2int(keystr); + keys_remove_binding(keyval, selrow); + nbrowelm--; + if (selelm > 0 && selelm <= nbrowelm) + selelm--; + break; + case KEY_GENERIC_QUIT: + if (keys_check_missing_bindings() != 0) { + WARN_MSG(_("Some actions do not have any associated " "key bindings!")); + } + wins_scrollwin_delete(&kwin); + return; } + custom_keys_config_bar(); + werase(kwin.pad.p); + nbrowelm = print_keys_bindings(kwin.pad.p, selrow, selelm, LINESPERKEY); + wins_scrollwin_display(&kwin); + } } -void -custom_config_main (void) +void custom_config_main(void) { const char *no_color_support = _("Sorry, colors are not supported by your terminal\n" @@ -1105,51 +1034,48 @@ custom_config_main (void) int ch; int old_layout; - custom_config_bar (); - while ((ch = wgetch (win[STA].p)) != 'q') - { - switch (ch) - { - case 'C': - case 'c': - if (has_colors ()) - custom_color_config (); - else - { - colorize = 0; - wins_erase_status_bar (); - mvwprintw (win[STA].p, 0, 0, _(no_color_support)); - wgetch (win[STA].p); - } - break; - case 'L': - case 'l': - old_layout = wins_layout (); - custom_layout_config (); - if (wins_layout () != old_layout) - wins_reset (); - break; - case 'G': - case 'g': - custom_general_config (); - break; - case 'N': - case 'n': - notify_config_bar (); - break; - case 'K': - case 'k': - custom_keys_config (); - break; - case 's': - case 'S': - custom_sidebar_config (); - break; - default: - continue; - } - wins_update (FLAG_ALL); - wins_erase_status_bar (); - custom_config_bar (); + custom_config_bar(); + while ((ch = wgetch(win[STA].p)) != 'q') { + switch (ch) { + case 'C': + case 'c': + if (has_colors()) + custom_color_config(); + else { + colorize = 0; + wins_erase_status_bar(); + mvwprintw(win[STA].p, 0, 0, _(no_color_support)); + wgetch(win[STA].p); + } + break; + case 'L': + case 'l': + old_layout = wins_layout(); + custom_layout_config(); + if (wins_layout() != old_layout) + wins_reset(); + break; + case 'G': + case 'g': + custom_general_config(); + break; + case 'N': + case 'n': + notify_config_bar(); + break; + case 'K': + case 'k': + custom_keys_config(); + break; + case 's': + case 'S': + custom_sidebar_config(); + break; + default: + continue; } + wins_update(FLAG_ALL); + wins_erase_status_bar(); + custom_config_bar(); + } } @@ -43,26 +43,24 @@ #include "calcurse.h" struct day_saved_item { - char start[BUFSIZ]; - char end[BUFSIZ]; - char state; - char type; + char start[BUFSIZ]; + char end[BUFSIZ]; + char state; + char type; char *mesg; }; -static llist_t day_items; -static struct day_saved_item day_saved_item; +static llist_t day_items; +static struct day_saved_item day_saved_item; -static void -day_free (struct day_item *day) +static void day_free(struct day_item *day) { - mem_free (day); + mem_free(day); } -static void -day_init_list (void) +static void day_init_list(void) { - LLIST_INIT (&day_items); + LLIST_INIT(&day_items); } /* @@ -70,20 +68,19 @@ day_init_list (void) * Must not free associated message and note, because their are not dynamically * allocated (only pointers to real objects are stored in this structure). */ -void -day_free_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); } /* Add an event in the current day list */ -static struct day_item * -day_add_event (int type, char *mesg, char *note, long nday, int id) +static struct day_item *day_add_event(int type, char *mesg, char *note, + long nday, int id) { struct day_item *day; - day = mem_malloc (sizeof (struct day_item)); + day = mem_malloc(sizeof(struct day_item)); day->mesg = mesg; day->note = note; day->type = type; @@ -92,35 +89,32 @@ day_add_event (int type, char *mesg, char *note, long nday, int id) day->start = nday; day->evnt_id = id; - LLIST_ADD (&day_items, day); + LLIST_ADD(&day_items, day); return day; } -static int -day_cmp_start (struct day_item *a, struct day_item *b) +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) + 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 appointment in the current day list. */ -static struct day_item * -day_add_apoint (int type, char *mesg, char *note, long start, long dur, - char state, int real_pos) +static struct day_item *day_add_apoint(int type, char *mesg, char *note, + long start, long dur, char state, + int real_pos) { struct day_item *day; - day = mem_malloc (sizeof (struct day_item)); + day = mem_malloc(sizeof(struct day_item)); day->mesg = mesg; day->note = note; day->start = start; @@ -130,7 +124,7 @@ day_add_apoint (int type, char *mesg, char *note, long start, long dur, day->type = type; day->evnt_id = 0; - LLIST_ADD_SORTED (&day_items, day, day_cmp_start); + LLIST_ADD_SORTED(&day_items, day, day_cmp_start); return day; } @@ -142,18 +136,16 @@ day_add_apoint (int type, char *mesg, char *note, long start, long dur, * dedicated to the selected day. * Returns the number of events for the selected day. */ -static int -day_store_events (long date) +static int day_store_events(long date) { llist_item_t *i; int e_nb = 0; - LLIST_FIND_FOREACH_CONT (&eventlist, date, event_inday, i) - { - struct event *ev = LLIST_TS_GET_DATA (i); - day_add_event (EVNT, ev->mesg, ev->note, ev->day, ev->id); - e_nb++; - } + LLIST_FIND_FOREACH_CONT(&eventlist, date, event_inday, i) { + struct event *ev = LLIST_TS_GET_DATA(i); + day_add_event(EVNT, ev->mesg, ev->note, ev->day, ev->id); + e_nb++; + } return e_nb; } @@ -165,18 +157,16 @@ day_store_events (long date) * dedicated to the selected day. * Returns the number of recurrent events for the selected day. */ -static int -day_store_recur_events (long date) +static int day_store_recur_events(long date) { llist_item_t *i; int e_nb = 0; - LLIST_FIND_FOREACH (&recur_elist, date, recur_event_inday, i) - { - struct recur_event *rev = LLIST_TS_GET_DATA (i); - day_add_event (RECUR_EVNT, rev->mesg, rev->note, rev->day, rev->id); - e_nb++; - } + LLIST_FIND_FOREACH(&recur_elist, date, recur_event_inday, i) { + struct recur_event *rev = LLIST_TS_GET_DATA(i); + day_add_event(RECUR_EVNT, rev->mesg, rev->note, rev->day, rev->id); + e_nb++; + } return e_nb; } @@ -188,25 +178,23 @@ day_store_recur_events (long date) * structure dedicated to the selected day. * Returns the number of appointments for the selected day. */ -static int -day_store_apoints (long date) +static int day_store_apoints(long date) { llist_item_t *i; 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 (apt->start >= date + DAYINSEC) - break; + if (apt->start >= date + DAYINSEC) + break; - day_add_apoint (APPT, apt->mesg, apt->note, apt->start, apt->dur, - apt->state, 0); - a_nb++; - } - LLIST_TS_UNLOCK (&alist_p); + day_add_apoint(APPT, apt->mesg, apt->note, apt->start, apt->dur, + apt->state, 0); + a_nb++; + } + LLIST_TS_UNLOCK(&alist_p); return a_nb; } @@ -218,25 +206,22 @@ day_store_apoints (long date) * structure dedicated to the selected day. * Returns the number of recurrent appointments for the selected day. */ -static int -day_store_recur_apoints (long date) +static int day_store_recur_apoints(long date) { llist_item_t *i; 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); - unsigned real_start; - if (recur_apoint_find_occurrence (rapt, date, &real_start)) - { - day_add_apoint (RECUR_APPT, rapt->mesg, rapt->note, real_start, - rapt->dur, rapt->state, a_nb); - a_nb++; - } + 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); + unsigned real_start; + if (recur_apoint_find_occurrence(rapt, date, &real_start)) { + day_add_apoint(RECUR_APPT, rapt->mesg, rapt->note, real_start, + rapt->dur, rapt->state, a_nb); + a_nb++; } - LLIST_TS_UNLOCK (&recur_alist_p); + } + LLIST_TS_UNLOCK(&recur_alist_p); return a_nb; } @@ -250,19 +235,19 @@ day_store_recur_apoints (long date) * The number of events and appointments in the current day are also updated. */ static int -day_store_items (long date, unsigned *pnb_events, unsigned *pnb_apoints) +day_store_items(long date, unsigned *pnb_events, unsigned *pnb_apoints) { int pad_length; int nb_events, nb_recur_events; int nb_apoints, nb_recur_apoints; - day_free_list (); - day_init_list (); - nb_recur_events = day_store_recur_events (date); - nb_events = day_store_events (date); + day_free_list(); + day_init_list(); + nb_recur_events = day_store_recur_events(date); + nb_events = day_store_events(date); *pnb_events = nb_events; - nb_recur_apoints = day_store_recur_apoints (date); - nb_apoints = day_store_apoints (date); + nb_recur_apoints = day_store_recur_apoints(date); + nb_apoints = day_store_apoints(date); *pnb_apoints = nb_apoints; pad_length = (nb_recur_events + nb_events + 1 + 3 * (nb_recur_apoints + nb_apoints)); @@ -277,9 +262,9 @@ day_store_items (long date, unsigned *pnb_events, unsigned *pnb_apoints) * those items in a pad. If selected day is null, then store items for current * 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, - struct day_items_nb *inday) +struct day_items_nb *day_process_storage(struct date *slctd_date, + unsigned day_changed, + struct day_items_nb *inday) { long date; struct date day; @@ -287,21 +272,21 @@ day_process_storage (struct date *slctd_date, unsigned day_changed, if (slctd_date) day = *slctd_date; else - calendar_store_current_date (&day); + calendar_store_current_date(&day); - date = date2sec (day, 0, 0); + date = date2sec(day, 0, 0); /* Inits */ if (apad.length != 0) - delwin (apad.ptrwin); + delwin(apad.ptrwin); /* Store the events and appointments (recursive and normal items). */ - apad.length = day_store_items (date, &inday->nb_events, &inday->nb_apoints); + apad.length = day_store_items(date, &inday->nb_events, &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); + apad.ptrwin = newpad(apad.length, apad.width); return inday; } @@ -310,8 +295,7 @@ day_process_storage (struct date *slctd_date, unsigned day_changed, * Returns a structure of type apoint_llist_node_t given a structure of type * day_item_s */ -static void -day_item_s2apoint_s (struct apoint *a, struct day_item *p) +static void day_item_s2apoint_s(struct apoint *a, struct day_item *p) { a->state = p->state; a->start = p->start; @@ -323,35 +307,35 @@ day_item_s2apoint_s (struct apoint *a, struct day_item *p) * Print an item date in the appointment panel. */ static void -display_item_date (int incolor, struct apoint *i, int type, long date, - int y, int x) +display_item_date(int incolor, struct apoint *i, int type, long date, + int y, int x) { WINDOW *win; char a_st[100], a_end[100]; win = apad.ptrwin; - apoint_sec2str (i, date, a_st, a_end); + apoint_sec2str(i, date, a_st, a_end); if (incolor == 0) - custom_apply_attr (win, ATTR_HIGHEST); + custom_apply_attr(win, ATTR_HIGHEST); if (type == RECUR_EVNT || type == RECUR_APPT) if (i->state & APOINT_NOTIFY) - mvwprintw (win, y, x, " *!%s -> %s", a_st, a_end); + mvwprintw(win, y, x, " *!%s -> %s", a_st, a_end); else - mvwprintw (win, y, x, " * %s -> %s", a_st, a_end); + mvwprintw(win, y, x, " * %s -> %s", a_st, a_end); else if (i->state & APOINT_NOTIFY) - mvwprintw (win, y, x, " -!%s -> %s", a_st, a_end); + mvwprintw(win, y, x, " -!%s -> %s", a_st, a_end); else - mvwprintw (win, y, x, " - %s -> %s", a_st, a_end); + mvwprintw(win, y, x, " - %s -> %s", a_st, a_end); if (incolor == 0) - custom_remove_attr (win, ATTR_HIGHEST); + custom_remove_attr(win, ATTR_HIGHEST); } /* * Print an item description in the corresponding panel window. */ static void -display_item (int incolor, char *msg, int recur, int note, int width, int y, - int x) +display_item(int incolor, char *msg, int recur, int note, int width, int y, + int x) { WINDOW *win; int ch_recur, ch_note; @@ -365,25 +349,23 @@ display_item (int incolor, char *msg, int recur, int note, int width, int y, ch_recur = (recur) ? '*' : ' '; ch_note = (note) ? '>' : ' '; if (incolor == 0) - custom_apply_attr (win, ATTR_HIGHEST); - if (utf8_strwidth (msg) < width) - mvwprintw (win, y, x, " %c%c%s", ch_recur, ch_note, msg); - else - { - for (i = 0; msg[i] && width > 0; i++) - { - if (!UTF8_ISCONT (msg[i])) - width -= utf8_width (&msg[i]); - buf[i] = msg[i]; - } - if (i) - buf[i - 1] = 0; - else - buf[0] = 0; - mvwprintw (win, y, x, " %c%c%s...", ch_recur, ch_note, buf); + custom_apply_attr(win, ATTR_HIGHEST); + if (utf8_strwidth(msg) < width) + mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_note, msg); + else { + for (i = 0; msg[i] && width > 0; i++) { + if (!UTF8_ISCONT(msg[i])) + width -= utf8_width(&msg[i]); + buf[i] = msg[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); + custom_remove_attr(win, ATTR_HIGHEST); } /* @@ -393,8 +375,7 @@ display_item (int incolor, char *msg, int recur, int note, int width, int y, * structure (pointed by day_saved_item), to be later displayed in a * popup window if requested. */ -void -day_write_pad (long date, int width, int length, int incolor) +void day_write_pad(long date, int width, int length, int incolor) { llist_item_t *i; struct apoint a; @@ -404,67 +385,57 @@ day_write_pad (long date, int width, int length, int incolor) line = item_number = 0; - LLIST_FOREACH (&day_items, i) - { - struct day_item *day = LLIST_TS_GET_DATA (i); - if (day->type == RECUR_EVNT || day->type == RECUR_APPT) - recur = 1; - else - recur = 0; - /* First print the events for current day. */ - if (day->type < RECUR_APPT) - { - item_number++; - if (item_number - incolor == 0) - { - day_saved_item.type = day->type; - day_saved_item.mesg = day->mesg; - } - display_item (item_number - incolor, day->mesg, recur, - (day->note != NULL) ? 1 : 0, 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++; - day_item_s2apoint_s (&a, day); - if (item_number - incolor == 0) - { - day_saved_item.type = day->type; - day_saved_item.mesg = day->mesg; - apoint_sec2str (&a, date, day_saved_item.start, - day_saved_item.end); - } - display_item_date (item_number - incolor, &a, day->type, - date, line + 1, x_pos); - display_item (item_number - incolor, day->mesg, 0, - (day->note != NULL) ? 1 : 0, width - 7, line + 2, - x_pos); - line += 3; - } + LLIST_FOREACH(&day_items, i) { + struct day_item *day = LLIST_TS_GET_DATA(i); + if (day->type == RECUR_EVNT || day->type == RECUR_APPT) + recur = 1; + else + recur = 0; + /* First print the events for current day. */ + if (day->type < RECUR_APPT) { + item_number++; + if (item_number - incolor == 0) { + day_saved_item.type = day->type; + day_saved_item.mesg = day->mesg; + } + display_item(item_number - incolor, day->mesg, recur, + (day->note != NULL) ? 1 : 0, 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++; + day_item_s2apoint_s(&a, day); + if (item_number - incolor == 0) { + day_saved_item.type = day->type; + day_saved_item.mesg = day->mesg; + apoint_sec2str(&a, date, day_saved_item.start, day_saved_item.end); + } + display_item_date(item_number - incolor, &a, day->type, + date, line + 1, x_pos); + display_item(item_number - incolor, day->mesg, 0, + (day->note != NULL) ? 1 : 0, width - 7, line + 2, x_pos); + line += 3; } + } } /* Display an item inside a popup window. */ -void -day_popup_item (void) +void day_popup_item(void) { if (day_saved_item.type == EVNT || day_saved_item.type == RECUR_EVNT) - item_in_popup (NULL, NULL, day_saved_item.mesg, _("Event :")); + item_in_popup(NULL, NULL, day_saved_item.mesg, _("Event :")); else if (day_saved_item.type == APPT || day_saved_item.type == RECUR_APPT) - item_in_popup (day_saved_item.start, day_saved_item.end, - day_saved_item.mesg, _("Appointment :")); + item_in_popup(day_saved_item.start, day_saved_item.end, + day_saved_item.mesg, _("Appointment :")); else - EXIT (_("unknown item type")); + EXIT(_("unknown item type")); /* NOTREACHED */ } @@ -472,38 +443,34 @@ day_popup_item (void) * Need to know if there is an item for the current selected day inside * calendar. This is used to put the correct colors inside calendar panel. */ -int -day_check_if_item (struct date 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, date, recur_event_inday)) + if (LLIST_FIND_FIRST(&recur_elist, date, recur_event_inday)) return 1; - LLIST_TS_LOCK (&recur_alist_p); - if (LLIST_TS_FIND_FIRST (&recur_alist_p, 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, date, recur_apoint_inday)) { + LLIST_TS_UNLOCK(&recur_alist_p); + return 1; + } + LLIST_TS_UNLOCK(&recur_alist_p); - if (LLIST_FIND_FIRST (&eventlist, date, event_inday)) + if (LLIST_FIND_FIRST(&eventlist, date, event_inday)) return 1; - LLIST_TS_LOCK (&alist_p); - if (LLIST_TS_FIND_FIRST (&alist_p, 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, date, apoint_inday)) { + LLIST_TS_UNLOCK(&alist_p); + return 1; + } + LLIST_TS_UNLOCK(&alist_p); return 0; } -static unsigned -fill_slices (int *slices, int slicesno, int first, int last) +static unsigned fill_slices(int *slices, int slicesno, int first, int last) { int i; @@ -511,7 +478,7 @@ fill_slices (int *slices, int slicesno, int first, int last) return 0; if (last >= slicesno) - last = slicesno - 1; /* Appointment spanning more than one day. */ + last = slicesno - 1; /* Appointment spanning more than one day. */ for (i = first; i <= last; i++) slices[i] = 1; @@ -524,175 +491,148 @@ fill_slices (int *slices, int slicesno, int first, int last) * appointment in the corresponding time slice, 0 otherwise. * A 24 hours day is divided into 'slicesno' number of time slices. */ -unsigned -day_chk_busy_slices (struct date day, int slicesno, int *slices) +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); + const long date = date2sec(day, 0, 0); slicelen = DAYINSEC / slicesno; #define SLICENUM(tsec) ((tsec) / slicelen % slicesno) - LLIST_TS_LOCK (&recur_alist_p); - LLIST_TS_FIND_FOREACH (&recur_alist_p, 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 (!fill_slices (slices, slicesno, SLICENUM (start), SLICENUM (end))) - { - LLIST_TS_UNLOCK (&recur_alist_p); - return 0; - } + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FIND_FOREACH(&recur_alist_p, 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 (!fill_slices(slices, slicesno, SLICENUM(start), SLICENUM(end))) { + LLIST_TS_UNLOCK(&recur_alist_p); + return 0; } - LLIST_TS_UNLOCK (&recur_alist_p); + } + LLIST_TS_UNLOCK(&recur_alist_p); - LLIST_TS_LOCK (&alist_p); - LLIST_TS_FIND_FOREACH (&alist_p, 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); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FIND_FOREACH(&alist_p, 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 + DAYINSEC) + break; - if (!fill_slices (slices, slicesno, SLICENUM (start), SLICENUM (end))) - { - LLIST_TS_UNLOCK (&alist_p); - return 0; - } + if (!fill_slices(slices, slicesno, SLICENUM(start), SLICENUM(end))) { + LLIST_TS_UNLOCK(&alist_p); + return 0; } - LLIST_TS_UNLOCK (&alist_p); + } + LLIST_TS_UNLOCK(&alist_p); #undef SLICENUM return 1; } /* Request the user to enter a new time. */ -static int -day_edit_time (int time, unsigned *new_hour, unsigned *new_minute) +static int day_edit_time(int time, unsigned *new_hour, unsigned *new_minute) { - char *timestr = date_sec2date_str (time, "%H:%M"); + char *timestr = date_sec2date_str(time, "%H:%M"); const char *msg_time = _("Enter the new time ([hh:mm]) : "); const char *enter_str = _("Press [Enter] to continue"); const char *fmt_msg = _("You entered an invalid time, should be [hh:mm]"); - for (;;) - { - status_mesg (msg_time, ""); - if (updatestring (win[STA].p, ×tr, 0, 1) == GETSTRING_VALID) - { - if (parse_time (timestr, new_hour, new_minute) == 1) - { - mem_free (timestr); - return 1; - } - else - { - status_mesg (fmt_msg, enter_str); - wgetch (win[STA].p); - } - } - else - return 0; - } + for (;;) { + status_mesg(msg_time, ""); + if (updatestring(win[STA].p, ×tr, 0, 1) == GETSTRING_VALID) { + if (parse_time(timestr, new_hour, new_minute) == 1) { + mem_free(timestr); + return 1; + } else { + status_mesg(fmt_msg, enter_str); + wgetch(win[STA].p); + } + } else + return 0; + } } /* Request the user to enter a new time or duration. */ -static int -day_edit_duration (int start, int dur, unsigned *new_duration) +static int day_edit_duration(int start, int dur, unsigned *new_duration) { - char *timestr = date_sec2date_str (start + dur, "%H:%M"); - const char *msg_time = _("Enter new end time ([hh:mm]) or duration ([+hh:mm], [+xxxdxxhxxm] or [+mm]) : "); + char *timestr = date_sec2date_str(start + dur, "%H:%M"); + const char *msg_time = + _ + ("Enter new end time ([hh:mm]) or duration ([+hh:mm], [+xxxdxxhxxm] or [+mm]) : "); const char *enter_str = _("Press [Enter] to continue"); const char *fmt_msg = _("You entered an invalid time, should be [hh:mm]"); long newtime; unsigned hr, mn; - for (;;) - { - status_mesg (msg_time, ""); - if (updatestring (win[STA].p, ×tr, 0, 1) == GETSTRING_VALID) - { - if (*timestr == '+' && parse_duration (timestr + 1, - new_duration) == 1) - { - *new_duration *= MININSEC; - break; - } - else if (parse_time (timestr, &hr, &mn) == 1) - { - newtime = update_time_in_date (start + dur, hr, mn); - *new_duration = (newtime > start) ? newtime - start : - DAYINSEC + newtime - start; - break; - } - else - { - status_mesg (fmt_msg, enter_str); - wgetch (win[STA].p); - } - } - else - return 0; - } + for (;;) { + status_mesg(msg_time, ""); + if (updatestring(win[STA].p, ×tr, 0, 1) == GETSTRING_VALID) { + if (*timestr == '+' && parse_duration(timestr + 1, new_duration) == 1) { + *new_duration *= MININSEC; + break; + } else if (parse_time(timestr, &hr, &mn) == 1) { + newtime = update_time_in_date(start + dur, hr, mn); + *new_duration = (newtime > start) ? newtime - start : + DAYINSEC + newtime - start; + break; + } else { + status_mesg(fmt_msg, enter_str); + wgetch(win[STA].p); + } + } else + return 0; + } - mem_free (timestr); + mem_free(timestr); return 1; } /* Request the user to enter a new end time or duration. */ -static void -update_start_time (long *start, long *dur) +static void update_start_time(long *start, long *dur) { long newtime; unsigned hr, mn; int valid_date; - const char *msg_wrong_time = _("Invalid time: start time must be before end time!"); + const char *msg_wrong_time = + _("Invalid time: start time must be before end time!"); const char *msg_enter = _("Press [Enter] to continue"); - do - { - day_edit_time (*start, &hr, &mn); - newtime = update_time_in_date (*start, hr, mn); - if (newtime < *start + *dur) - { - *dur -= (newtime - *start); - *start = newtime; - valid_date = 1; - } - else - { - status_mesg (msg_wrong_time, msg_enter); - wgetch (win[STA].p); - valid_date = 0; - } + do { + day_edit_time(*start, &hr, &mn); + newtime = update_time_in_date(*start, hr, mn); + if (newtime < *start + *dur) { + *dur -= (newtime - *start); + *start = newtime; + valid_date = 1; + } else { + status_mesg(msg_wrong_time, msg_enter); + wgetch(win[STA].p); + valid_date = 0; } + } while (valid_date == 0); } -static void -update_duration (long *start, long *dur) +static void update_duration(long *start, long *dur) { unsigned newdur; - day_edit_duration (*start, *dur, &newdur); + day_edit_duration(*start, *dur, &newdur); *dur = newdur; } -static void -update_desc (char **desc) +static void update_desc(char **desc) { - status_mesg (_("Enter the new item description:"), ""); - updatestring (win[STA].p, desc, 0, 1); + status_mesg(_("Enter the new item description:"), ""); + updatestring(win[STA].p, desc, 0, 1); } -static void -update_rept (struct rpt **rpt, const long start) +static void update_rept(struct rpt **rpt, const long start) { int newtype, newfreq, date_entered; long newuntil; @@ -707,148 +647,126 @@ update_rept (struct rpt **rpt, const long start) /* Find the current repetition type. */ const char *rpt_current; char msg_rpt_current[BUFSIZ]; - switch (recur_def2char ((*rpt)->type)) - { - case 'D': - rpt_current = msg_rpt_daily; - break; - case 'W': - rpt_current = msg_rpt_weekly; - break; - case 'M': - rpt_current = msg_rpt_monthly; - break; - case 'Y': - rpt_current = msg_rpt_yearly; - break; - default: - /* NOTREACHED, but makes the compiler happier. */ - rpt_current = msg_rpt_daily; - } - - snprintf (msg_rpt_current, BUFSIZ, _("(currently using %s)"), rpt_current); + switch (recur_def2char((*rpt)->type)) { + case 'D': + rpt_current = msg_rpt_daily; + break; + case 'W': + rpt_current = msg_rpt_weekly; + break; + case 'M': + rpt_current = msg_rpt_monthly; + break; + case 'Y': + rpt_current = msg_rpt_yearly; + break; + default: + /* NOTREACHED, but makes the compiler happier. */ + rpt_current = msg_rpt_daily; + } + + snprintf(msg_rpt_current, BUFSIZ, _("(currently using %s)"), rpt_current); char msg_rpt_asktype[BUFSIZ]; - snprintf (msg_rpt_asktype, BUFSIZ, "%s %s, %s, %s, %s ? %s", - msg_rpt_prefix, - msg_rpt_daily, - msg_rpt_weekly, - msg_rpt_monthly, - msg_rpt_yearly, - msg_rpt_current); + snprintf(msg_rpt_asktype, BUFSIZ, "%s %s, %s, %s, %s ? %s", + msg_rpt_prefix, + msg_rpt_daily, + msg_rpt_weekly, msg_rpt_monthly, msg_rpt_yearly, msg_rpt_current); const char *msg_rpt_choice = _("[dwmy]"); const char *msg_wrong_freq = _("The frequence you entered is not valid."); - const char *msg_wrong_time = _("Invalid time: start time must be before end time!"); + const char *msg_wrong_time = + _("Invalid time: start time must be before end time!"); const char *msg_wrong_date = _("The entered date is not valid."); const char *msg_fmts = - _("Possible formats are [%s] or '0' for an endless repetetition"); + _("Possible formats are [%s] or '0' for an endless repetetition"); const char *msg_enter = _("Press [Enter] to continue"); - switch (status_ask_choice (msg_rpt_asktype, msg_rpt_choice, 4)) - { - case 1: - newtype = 'D'; - break; - case 2: - newtype = 'W'; - break; - case 3: - newtype = 'M'; - break; - case 4: - newtype = 'Y'; - break; - default: + switch (status_ask_choice(msg_rpt_asktype, msg_rpt_choice, 4)) { + case 1: + newtype = 'D'; + break; + case 2: + newtype = 'W'; + break; + case 3: + newtype = 'M'; + break; + case 4: + newtype = 'Y'; + break; + default: + return; + } + + do { + status_mesg(_("Enter the new repetition frequence:"), ""); + freqstr = mem_malloc(BUFSIZ); + snprintf(freqstr, BUFSIZ, "%d", (*rpt)->freq); + if (updatestring(win[STA].p, &freqstr, 0, 1) == GETSTRING_VALID) { + newfreq = atoi(freqstr); + mem_free(freqstr); + if (newfreq == 0) { + status_mesg(msg_wrong_freq, msg_enter); + wgetch(win[STA].p); + } + } else { + mem_free(freqstr); return; } - - do - { - status_mesg (_("Enter the new repetition frequence:"), ""); - freqstr = mem_malloc (BUFSIZ); - snprintf (freqstr, BUFSIZ, "%d", (*rpt)->freq); - if (updatestring (win[STA].p, &freqstr, 0, 1) == GETSTRING_VALID) - { - newfreq = atoi (freqstr); - mem_free (freqstr); - if (newfreq == 0) - { - status_mesg (msg_wrong_freq, msg_enter); - wgetch (win[STA].p); - } - } - else - { - mem_free (freqstr); - return; - } - } + } while (newfreq == 0); - do - { - snprintf (outstr, BUFSIZ, "Enter the new ending date: [%s] or '0'", - DATEFMT_DESC (conf.input_datefmt)); - status_mesg (_(outstr), ""); - timstr = - date_sec2date_str ((*rpt)->until, DATEFMT (conf.input_datefmt)); - if (updatestring (win[STA].p, &timstr, 0, 1) != GETSTRING_VALID) - { - mem_free (timstr); - return; - } - if (strcmp (timstr, "0") == 0) - { - newuntil = 0; + do { + snprintf(outstr, BUFSIZ, "Enter the new ending date: [%s] or '0'", + DATEFMT_DESC(conf.input_datefmt)); + status_mesg(_(outstr), ""); + timstr = date_sec2date_str((*rpt)->until, DATEFMT(conf.input_datefmt)); + if (updatestring(win[STA].p, &timstr, 0, 1) != GETSTRING_VALID) { + mem_free(timstr); + return; + } + if (strcmp(timstr, "0") == 0) { + newuntil = 0; + date_entered = 1; + } else { + struct tm *lt; + time_t t; + struct date new_date; + int newmonth, newday, newyear; + + if (parse_date(timstr, conf.input_datefmt, &newyear, &newmonth, + &newday, calendar_get_slctd_day())) { + t = start; + lt = localtime(&t); + new_date.dd = newday; + new_date.mm = newmonth; + new_date.yyyy = newyear; + newuntil = date2sec(new_date, lt->tm_hour, lt->tm_min); + if (newuntil < start) { + status_mesg(msg_wrong_time, msg_enter); + wgetch(win[STA].p); + date_entered = 0; + } else date_entered = 1; - } - else - { - struct tm *lt; - time_t t; - struct date new_date; - int newmonth, newday, newyear; - - if (parse_date (timstr, conf.input_datefmt, &newyear, &newmonth, - &newday, calendar_get_slctd_day ())) - { - t = start; - lt = localtime (&t); - new_date.dd = newday; - new_date.mm = newmonth; - new_date.yyyy = newyear; - newuntil = date2sec (new_date, lt->tm_hour, lt->tm_min); - if (newuntil < start) - { - status_mesg (msg_wrong_time, msg_enter); - wgetch (win[STA].p); - date_entered = 0; - } - else - date_entered = 1; - } - else - { - snprintf (outstr, BUFSIZ, msg_fmts, - DATEFMT_DESC (conf.input_datefmt)); - status_mesg (msg_wrong_date, _(outstr)); - wgetch (win[STA].p); - date_entered = 0; - } - } + } else { + snprintf(outstr, BUFSIZ, msg_fmts, DATEFMT_DESC(conf.input_datefmt)); + status_mesg(msg_wrong_date, _(outstr)); + wgetch(win[STA].p); + date_entered = 0; + } } + } while (date_entered == 0); - mem_free (timstr); - (*rpt)->type = recur_char2def (newtype); + mem_free(timstr); + (*rpt)->type = recur_char2def(newtype); (*rpt)->freq = newfreq; (*rpt)->until = newuntil; } /* Edit an already existing item. */ -void -day_edit_item (void) +void day_edit_item(void) { struct day_item *p; struct recur_event *re; @@ -859,93 +777,89 @@ day_edit_item (void) int item_num; int need_check_notify = 0; - item_num = apoint_hilt (); - p = day_get_item (item_num); - date = calendar_get_slctd_day_sec (); - - switch (p->type) - { - case RECUR_EVNT: - re = recur_get_event (date, day_item_nb (date, item_num, RECUR_EVNT)); - const char *choice_recur_evnt[2] = { - "Description", - "Repetition", - }; - switch (status_ask_simplechoice (_("Edit: "), choice_recur_evnt, 2)) - { - case 1: - update_desc (&re->mesg); - break; - case 2: - update_rept (&re->rpt, re->day); - break; - default: - return; - } + item_num = apoint_hilt(); + p = day_get_item(item_num); + date = calendar_get_slctd_day_sec(); + + switch (p->type) { + case RECUR_EVNT: + re = recur_get_event(date, day_item_nb(date, item_num, RECUR_EVNT)); + const char *choice_recur_evnt[2] = { + "Description", + "Repetition", + }; + switch (status_ask_simplechoice(_("Edit: "), choice_recur_evnt, 2)) { + case 1: + update_desc(&re->mesg); break; - case EVNT: - e = event_get (date, day_item_nb (date, item_num, EVNT)); - update_desc (&e->mesg); + case 2: + update_rept(&re->rpt, re->day); break; - case RECUR_APPT: - ra = recur_get_apoint (date, day_item_nb (date, item_num, RECUR_APPT)); - const char *choice_recur_appt[4] = { - "Start time", - "End time", - "Description", - "Repetition", - }; - switch (status_ask_simplechoice (_("Edit: "), choice_recur_appt, 4)) - { - case 1: - need_check_notify = 1; - update_start_time (&ra->start, &ra->dur); - break; - case 2: - update_duration (&ra->start, &ra->dur); - break; - case 3: - if (notify_bar ()) - need_check_notify = notify_same_recur_item (ra); - update_desc (&ra->mesg); - break; - case 4: - need_check_notify = 1; - update_rept (&ra->rpt, ra->start); - break; - default: - return; - } + default: + return; + } + break; + case EVNT: + e = event_get(date, day_item_nb(date, item_num, EVNT)); + update_desc(&e->mesg); + break; + case RECUR_APPT: + ra = recur_get_apoint(date, day_item_nb(date, item_num, RECUR_APPT)); + const char *choice_recur_appt[4] = { + "Start time", + "End time", + "Description", + "Repetition", + }; + switch (status_ask_simplechoice(_("Edit: "), choice_recur_appt, 4)) { + case 1: + need_check_notify = 1; + update_start_time(&ra->start, &ra->dur); break; - case APPT: - a = apoint_get (date, day_item_nb (date, item_num, APPT)); - const char *choice_appt[3] = { - "Start time", - "End time", - "Description", - }; - switch (status_ask_simplechoice (_("Edit: "), choice_appt, 3)) - { - case 1: - need_check_notify = 1; - update_start_time (&a->start, &a->dur); - break; - case 2: - update_duration (&a->start, &a->dur); - break; - case 3: - if (notify_bar ()) - need_check_notify = notify_same_item (a->start); - update_desc (&a->mesg); - break; - default: - return; - } + case 2: + update_duration(&ra->start, &ra->dur); break; + case 3: + if (notify_bar()) + need_check_notify = notify_same_recur_item(ra); + update_desc(&ra->mesg); + break; + case 4: + need_check_notify = 1; + update_rept(&ra->rpt, ra->start); + break; + default: + return; } + break; + case APPT: + a = apoint_get(date, day_item_nb(date, item_num, APPT)); + const char *choice_appt[3] = { + "Start time", + "End time", + "Description", + }; + switch (status_ask_simplechoice(_("Edit: "), choice_appt, 3)) { + case 1: + need_check_notify = 1; + update_start_time(&a->start, &a->dur); + break; + case 2: + update_duration(&a->start, &a->dur); + break; + case 3: + if (notify_bar()) + need_check_notify = notify_same_item(a->start); + update_desc(&a->mesg); + break; + default: + return; + } + break; + } if (need_check_notify) - notify_check_next_app (1); + notify_check_next_app(1); } /* @@ -954,8 +868,7 @@ day_edit_item (void) * recurrent appointments and appointments) and then to test the * type of the item to be deleted. */ -int -day_erase_item (long date, int item_number, enum eraseflg flag) +int day_erase_item(long date, int item_number, enum eraseflg flag) { struct day_item *p; @@ -973,64 +886,52 @@ day_erase_item (long date, int item_number, enum eraseflg flag) int ans; unsigned delete_whole; - p = day_get_item (item_number); - if (flag == ERASE_DONT_FORCE) - { - if (p->note == NULL) - ans = 1; - else - ans = status_ask_choice (note_warning, note_choices, nb_note_choices); - - switch (ans) - { - case 1: - flag = ERASE_FORCE; - break; - case 2: - flag = ERASE_FORCE_ONLY_NOTE; - break; - default: /* User escaped */ - return 0; - } - } - if (p->type == EVNT) - { - event_delete_bynum (date, day_item_nb (date, item_number, EVNT), flag); + p = day_get_item(item_number); + if (flag == ERASE_DONT_FORCE) { + if (p->note == NULL) + ans = 1; + else + ans = status_ask_choice(note_warning, note_choices, nb_note_choices); + + switch (ans) { + case 1: + flag = ERASE_FORCE; + break; + case 2: + flag = ERASE_FORCE_ONLY_NOTE; + break; + default: /* User escaped */ + return 0; } - else if (p->type == APPT) - { - apoint_delete_bynum (date, day_item_nb (date, item_number, APPT), flag); + } + if (p->type == EVNT) { + event_delete_bynum(date, day_item_nb(date, item_number, EVNT), flag); + } else if (p->type == APPT) { + apoint_delete_bynum(date, day_item_nb(date, item_number, APPT), flag); + } else { + if (flag == ERASE_FORCE_ONLY_NOTE) + ans = 1; + else + ans = status_ask_choice(erase_warning, erase_choices, nb_erase_choices); + + switch (ans) { + case 1: + delete_whole = 1; + break; + case 2: + delete_whole = 0; + break; + default: + return 0; } - else - { - if (flag == ERASE_FORCE_ONLY_NOTE) - ans = 1; - else - ans = status_ask_choice (erase_warning, erase_choices, - nb_erase_choices); - - switch (ans) - { - case 1: - delete_whole = 1; - break; - case 2: - delete_whole = 0; - break; - default: - return 0; - } - - if (p->type == RECUR_EVNT) - { - recur_event_erase (date, day_item_nb (date, item_number, RECUR_EVNT), - delete_whole, flag); - } - else - { - recur_apoint_erase (date, p->appt_pos, delete_whole, flag); - } + + if (p->type == RECUR_EVNT) { + recur_event_erase(date, day_item_nb(date, item_number, RECUR_EVNT), + delete_whole, flag); + } else { + recur_apoint_erase(date, p->appt_pos, delete_whole, flag); } + } if (flag == ERASE_FORCE_ONLY_NOTE) return 0; else @@ -1038,79 +939,71 @@ day_erase_item (long date, int item_number, enum eraseflg flag) } /* Cut an item so it can be pasted somewhere else later. */ -int -day_cut_item (long date, int item_number) +int day_cut_item(long date, int item_number) { const int DELETE_WHOLE = 1; struct day_item *p; - p = day_get_item (item_number); - switch (p->type) - { - case EVNT: - event_delete_bynum (date, day_item_nb (date, item_number, EVNT), - ERASE_CUT); - break; - case RECUR_EVNT: - recur_event_erase (date, day_item_nb (date, item_number, RECUR_EVNT), - DELETE_WHOLE, ERASE_CUT); - break; - case APPT: - apoint_delete_bynum (date, day_item_nb (date, item_number, APPT), - ERASE_CUT); - break; - case RECUR_APPT: - recur_apoint_erase (date, p->appt_pos, DELETE_WHOLE, ERASE_CUT); - break; - default: - EXIT (_("unknwon type")); - /* NOTREACHED */ - } + p = day_get_item(item_number); + switch (p->type) { + case EVNT: + event_delete_bynum(date, day_item_nb(date, item_number, EVNT), ERASE_CUT); + break; + case RECUR_EVNT: + recur_event_erase(date, day_item_nb(date, item_number, RECUR_EVNT), + DELETE_WHOLE, ERASE_CUT); + break; + case APPT: + apoint_delete_bynum(date, day_item_nb(date, item_number, APPT), ERASE_CUT); + break; + case RECUR_APPT: + recur_apoint_erase(date, p->appt_pos, DELETE_WHOLE, ERASE_CUT); + break; + default: + EXIT(_("unknwon type")); + /* NOTREACHED */ + } return p->type; } /* Paste a previously cut item. */ -int -day_paste_item (long date, int cut_item_type) +int day_paste_item(long date, int cut_item_type) { int pasted_item_type; pasted_item_type = cut_item_type; - switch (cut_item_type) - { - case 0: - return 0; - case EVNT: - event_paste_item (); - break; - case RECUR_EVNT: - recur_event_paste_item (); - break; - case APPT: - apoint_paste_item (); - break; - case RECUR_APPT: - recur_apoint_paste_item (); - break; - default: - EXIT (_("unknwon type")); - /* NOTREACHED */ - } + switch (cut_item_type) { + case 0: + return 0; + case EVNT: + event_paste_item(); + break; + case RECUR_EVNT: + recur_event_paste_item(); + break; + case APPT: + apoint_paste_item(); + break; + case RECUR_APPT: + recur_apoint_paste_item(); + break; + default: + EXIT(_("unknwon type")); + /* NOTREACHED */ + } return pasted_item_type; } /* Returns a structure containing the selected item. */ -struct day_item * -day_get_item (int item_number) +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)); } /* Returns the real item number, given its type. */ -int -day_item_nb (long date, int day_num, int type) +int day_item_nb(long date, int day_num, int type) { int i, nb_item[MAX_TYPES]; llist_item_t *j; @@ -1118,20 +1011,18 @@ day_item_nb (long date, int day_num, int type) for (i = 0; i < MAX_TYPES; i++) nb_item[i] = 0; - j = LLIST_FIRST (&day_items); - for (i = 1; i < day_num; i++) - { - struct day_item *day = LLIST_TS_GET_DATA (j); - nb_item[day->type - 1]++; - j = LLIST_TS_NEXT (j); - } + j = LLIST_FIRST(&day_items); + for (i = 1; i < day_num; i++) { + struct day_item *day = LLIST_TS_GET_DATA(j); + nb_item[day->type - 1]++; + j = LLIST_TS_NEXT(j); + } return nb_item[type - 1]; } /* Attach a note to an appointment or event. */ -void -day_edit_note (const char *editor) +void day_edit_note(const char *editor) { struct day_item *p; struct recur_apoint *ra; @@ -1141,43 +1032,40 @@ day_edit_note (const char *editor) long date; int item_num; - item_num = apoint_hilt (); - p = day_get_item (item_num); - edit_note (&p->note, editor); - - date = calendar_get_slctd_day_sec (); - switch (p->type) - { - case RECUR_EVNT: - re = recur_get_event (date, day_item_nb (date, item_num, RECUR_EVNT)); - re->note = p->note; - break; - case EVNT: - e = event_get (date, day_item_nb (date, item_num, EVNT)); - e->note = p->note; - break; - case RECUR_APPT: - ra = recur_get_apoint (date, day_item_nb (date, item_num, RECUR_APPT)); - ra->note = p->note; - break; - case APPT: - a = apoint_get (date, day_item_nb (date, item_num, APPT)); - a->note = p->note; - break; - } + item_num = apoint_hilt(); + p = day_get_item(item_num); + edit_note(&p->note, editor); + + date = calendar_get_slctd_day_sec(); + switch (p->type) { + case RECUR_EVNT: + re = recur_get_event(date, day_item_nb(date, item_num, RECUR_EVNT)); + re->note = p->note; + break; + case EVNT: + e = event_get(date, day_item_nb(date, item_num, EVNT)); + e->note = p->note; + break; + case RECUR_APPT: + ra = recur_get_apoint(date, day_item_nb(date, item_num, RECUR_APPT)); + ra->note = p->note; + break; + case APPT: + a = apoint_get(date, day_item_nb(date, item_num, APPT)); + a->note = p->note; + break; + } } /* View a note previously attached to an appointment or event */ -void -day_view_note (const char *pager) +void day_view_note(const char *pager) { - struct day_item *p = day_get_item (apoint_hilt ()); - view_note (p->note, pager); + struct day_item *p = day_get_item(apoint_hilt()); + view_note(p->note, pager); } /* Pipe an appointment or event to an external program. */ -void -day_pipe_item (void) +void day_pipe_item(void) { char cmd[BUFSIZ] = ""; char const *arg[] = { cmd, NULL }; @@ -1192,41 +1080,39 @@ day_pipe_item (void) struct recur_event *re; struct event *e; - status_mesg (_("Pipe item to external command:"), ""); - if (getstring (win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) + status_mesg(_("Pipe item to external command:"), ""); + if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) return; - wins_prepare_external (); - if ((pid = shell_exec (NULL, &pout, *arg, arg))) - { - fpout = fdopen (pout, "w"); - - item_num = apoint_hilt (); - p = day_get_item (item_num); - date = calendar_get_slctd_day_sec (); - switch (p->type) - { - case RECUR_EVNT: - re = recur_get_event (date, day_item_nb (date, item_num, RECUR_EVNT)); - recur_event_write (re, fpout); - break; - case EVNT: - e = event_get (date, day_item_nb (date, item_num, EVNT)); - event_write (e, fpout); - break; - case RECUR_APPT: - ra = recur_get_apoint (date, day_item_nb (date, item_num, RECUR_APPT)); - recur_apoint_write (ra, fpout); - break; - case APPT: - a = apoint_get (date, day_item_nb (date, item_num, APPT)); - apoint_write (a, fpout); - break; - } - - fclose (fpout); - child_wait (NULL, &pout, pid); - press_any_key (); + wins_prepare_external(); + if ((pid = shell_exec(NULL, &pout, *arg, arg))) { + fpout = fdopen(pout, "w"); + + item_num = apoint_hilt(); + p = day_get_item(item_num); + date = calendar_get_slctd_day_sec(); + switch (p->type) { + case RECUR_EVNT: + re = recur_get_event(date, day_item_nb(date, item_num, RECUR_EVNT)); + recur_event_write(re, fpout); + break; + case EVNT: + e = event_get(date, day_item_nb(date, item_num, EVNT)); + event_write(e, fpout); + break; + case RECUR_APPT: + ra = recur_get_apoint(date, day_item_nb(date, item_num, RECUR_APPT)); + recur_apoint_write(ra, fpout); + break; + case APPT: + a = apoint_get(date, day_item_nb(date, item_num, APPT)); + apoint_write(a, fpout); + break; } - wins_unprepare_external (); + + fclose(fpout); + child_wait(NULL, &pout, pid); + press_any_key(); + } + wins_unprepare_external(); } @@ -64,26 +64,22 @@ static unsigned data_loaded; -static void -dmon_sigs_hdlr (int sig) +static void dmon_sigs_hdlr(int sig) { if (data_loaded) - free_user_data (); + free_user_data(); - DMON_LOG (_("terminated at %s with signal %d\n"), nowstr (), sig); + DMON_LOG(_("terminated at %s with signal %d\n"), nowstr(), sig); - if (unlink (path_dpid) != 0) - { - DMON_LOG (_("Could not remove daemon lock file: %s\n"), - strerror (errno)); - exit (EXIT_FAILURE); - } + if (unlink(path_dpid) != 0) { + DMON_LOG(_("Could not remove daemon lock file: %s\n"), strerror(errno)); + exit(EXIT_FAILURE); + } - exit (EXIT_SUCCESS); + exit(EXIT_SUCCESS); } -static unsigned -daemonize (int status) +static unsigned daemonize(int status) { int fd; @@ -93,16 +89,15 @@ daemonize (int status) * First need to fork in order to become a child of the init process, * once the father exits. */ - switch (fork ()) - { - case -1: /* fork error */ - EXIT (_("Could not fork: %s\n"), strerror (errno)); - break; - case 0: /* child */ - break; - default: /* parent */ - exit (status); - } + switch (fork()) { + case -1: /* fork error */ + EXIT(_("Could not fork: %s\n"), strerror(errno)); + break; + case 0: /* child */ + break; + default: /* parent */ + exit(status); + } /* * Process independency. @@ -110,109 +105,99 @@ daemonize (int status) * Obtain a new process group and session in order to get detached from the * controlling terminal. */ - if (setsid () == -1) - { - DMON_LOG (_("Could not detach from the controlling terminal: %s\n"), - strerror (errno)); - return 0; - } + if (setsid() == -1) { + DMON_LOG(_("Could not detach from the controlling terminal: %s\n"), + strerror(errno)); + return 0; + } /* * Change working directory to root directory, * to prevent filesystem unmounts. */ - if (chdir ("/") == -1) - { - DMON_LOG (_("Could not change working directory: %s\n"), - strerror (errno)); - return 0; - } + if (chdir("/") == -1) { + DMON_LOG(_("Could not change working directory: %s\n"), strerror(errno)); + return 0; + } /* Redirect standard file descriptors to /dev/null. */ - if ((fd = open (_PATH_DEVNULL, O_RDWR, 0)) != -1) - { - dup2 (fd, STDIN_FILENO); - dup2 (fd, STDOUT_FILENO); - dup2 (fd, STDERR_FILENO); - if (fd > 2) - close (fd); - } + if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { + dup2(fd, STDIN_FILENO); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + if (fd > 2) + close(fd); + } /* Write access for the owner only. */ - umask (0022); + umask(0022); - if (!sigs_set_hdlr (SIGINT, dmon_sigs_hdlr) - || !sigs_set_hdlr (SIGTERM, dmon_sigs_hdlr) - || !sigs_set_hdlr (SIGALRM, dmon_sigs_hdlr) - || !sigs_set_hdlr (SIGQUIT, dmon_sigs_hdlr) - || !sigs_set_hdlr (SIGCHLD, SIG_IGN)) + if (!sigs_set_hdlr(SIGINT, dmon_sigs_hdlr) + || !sigs_set_hdlr(SIGTERM, dmon_sigs_hdlr) + || !sigs_set_hdlr(SIGALRM, dmon_sigs_hdlr) + || !sigs_set_hdlr(SIGQUIT, dmon_sigs_hdlr) + || !sigs_set_hdlr(SIGCHLD, SIG_IGN)) return 0; return 1; } -void -dmon_start (int parent_exit_status) +void dmon_start(int parent_exit_status) { - if (!daemonize (parent_exit_status)) - DMON_ABRT (_("Cannot daemonize, aborting\n")); - - if (!io_dump_pid (path_dpid)) - DMON_ABRT (_("Could not set lock file\n")); - - if (!io_file_exist (path_conf)) - DMON_ABRT (_("Could not access \"%s\": %s\n"), - path_conf, strerror (errno)); - config_load (); - - if (!io_file_exist (path_apts)) - DMON_ABRT (_("Could not access \"%s\": %s\n"), - path_apts, strerror (errno)); - apoint_llist_init (); - recur_apoint_llist_init (); - event_llist_init (); - todo_init_list (); - io_load_app (); + if (!daemonize(parent_exit_status)) + DMON_ABRT(_("Cannot daemonize, aborting\n")); + + if (!io_dump_pid(path_dpid)) + DMON_ABRT(_("Could not set lock file\n")); + + if (!io_file_exist(path_conf)) + DMON_ABRT(_("Could not access \"%s\": %s\n"), path_conf, strerror(errno)); + config_load(); + + if (!io_file_exist(path_apts)) + DMON_ABRT(_("Could not access \"%s\": %s\n"), path_apts, strerror(errno)); + apoint_llist_init(); + recur_apoint_llist_init(); + event_llist_init(); + todo_init_list(); + io_load_app(); data_loaded = 1; - DMON_LOG (_("started at %s\n"), nowstr ()); - for (;;) - { - int left; - - if (!notify_get_next_bkgd ()) - DMON_ABRT (_("error loading next appointment\n")); - - left = notify_time_left (); - if (left > 0 && left < nbar.cntdwn && notify_needs_reminder ()) - { - DMON_LOG (_("launching notification at %s for: \"%s\"\n"), - nowstr (), notify_app_txt ()); - if (!notify_launch_cmd ()) - DMON_LOG (_("error while sending notification\n")); - } - - DMON_LOG (ngettext ("sleeping at %s for %d second\n", - "sleeping at %s for %d seconds\n", - DMON_SLEEP_TIME), nowstr (), DMON_SLEEP_TIME); - psleep (DMON_SLEEP_TIME); - DMON_LOG (_("awakened at %s\n"), nowstr ()); + DMON_LOG(_("started at %s\n"), nowstr()); + for (;;) { + int left; + + if (!notify_get_next_bkgd()) + DMON_ABRT(_("error loading next appointment\n")); + + left = notify_time_left(); + if (left > 0 && left < nbar.cntdwn && notify_needs_reminder()) { + DMON_LOG(_("launching notification at %s for: \"%s\"\n"), + nowstr(), notify_app_txt()); + if (!notify_launch_cmd()) + DMON_LOG(_("error while sending notification\n")); } + + DMON_LOG(ngettext("sleeping at %s for %d second\n", + "sleeping at %s for %d seconds\n", + DMON_SLEEP_TIME), nowstr(), DMON_SLEEP_TIME); + psleep(DMON_SLEEP_TIME); + DMON_LOG(_("awakened at %s\n"), nowstr()); + } } /* * Check if calcurse is running in background, and if yes, send a SIGINT * signal to stop it. */ -void -dmon_stop (void) +void dmon_stop(void) { int dpid; - dpid = io_get_pid (path_dpid); + dpid = io_get_pid(path_dpid); if (!dpid) return; - if (kill ((pid_t)dpid, SIGINT) < 0 && errno != ESRCH) - EXIT (_("Could not stop calcurse daemon: %s\n"), strerror (errno)); + if (kill((pid_t) dpid, SIGINT) < 0 && errno != ESRCH) + EXIT(_("Could not stop calcurse daemon: %s\n"), strerror(errno)); } diff --git a/src/event.c b/src/event.c index c27c078..f460ded 100644 --- a/src/event.c +++ b/src/event.c @@ -41,118 +41,106 @@ #include "calcurse.h" -llist_t eventlist; -static struct event bkp_cut_event; +llist_t eventlist; +static struct event bkp_cut_event; -void -event_free_bkp (void) +void event_free_bkp(void) { - if (bkp_cut_event.mesg) - { - mem_free (bkp_cut_event.mesg); - bkp_cut_event.mesg = 0; - } - erase_note (&bkp_cut_event.note); + if (bkp_cut_event.mesg) { + mem_free(bkp_cut_event.mesg); + bkp_cut_event.mesg = 0; + } + erase_note(&bkp_cut_event.note); } -static void -event_free (struct event *ev) +static void event_free(struct event *ev) { - mem_free (ev->mesg); - erase_note (&ev->note); - mem_free (ev); + mem_free(ev->mesg); + erase_note(&ev->note); + mem_free(ev); } -static void -event_dup (struct event *in, struct event *bkp) +static void event_dup(struct event *in, struct event *bkp) { - EXIT_IF (!in || !bkp, _("null pointer")); + EXIT_IF(!in || !bkp, _("null pointer")); bkp->id = in->id; bkp->day = in->day; - bkp->mesg = mem_strdup (in->mesg); + bkp->mesg = mem_strdup(in->mesg); if (in->note) - bkp->note = mem_strdup (in->note); + bkp->note = mem_strdup(in->note); } -void -event_llist_init (void) +void event_llist_init(void) { - LLIST_INIT (&eventlist); + LLIST_INIT(&eventlist); } -void -event_llist_free (void) +void event_llist_free(void) { - LLIST_FREE_INNER (&eventlist, event_free); - LLIST_FREE (&eventlist); + LLIST_FREE_INNER(&eventlist, event_free); + LLIST_FREE(&eventlist); } -static int -event_cmp_day (struct event *a, struct event *b) +static int event_cmp_day(struct event *a, struct event *b) { return a->day < b->day ? -1 : (a->day == b->day ? 0 : 1); } /* Create a new event */ -struct event * -event_new (char *mesg, char *note, long day, int id) +struct event *event_new(char *mesg, char *note, long day, int id) { struct event *ev; - ev = mem_malloc (sizeof (struct event)); - ev->mesg = mem_strdup (mesg); + ev = mem_malloc(sizeof(struct event)); + ev->mesg = mem_strdup(mesg); ev->day = day; ev->id = id; - ev->note = (note != NULL) ? mem_strdup (note) : NULL; + ev->note = (note != NULL) ? mem_strdup(note) : NULL; - LLIST_ADD_SORTED (&eventlist, ev, event_cmp_day); + LLIST_ADD_SORTED(&eventlist, ev, event_cmp_day); return ev; } /* Check if the event belongs to the selected day */ -unsigned -event_inday (struct event *i, long start) +unsigned event_inday(struct event *i, long start) { return (i->day < start + DAYINSEC && i->day >= start); } /* Write to file the event in user-friendly format */ -void -event_write (struct event *o, FILE *f) +void event_write(struct event *o, FILE * f) { struct tm *lt; time_t t; t = o->day; - lt = localtime (&t); - fprintf (f, "%02u/%02u/%04u [%d] ", lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year, o->id); + lt = localtime(&t); + fprintf(f, "%02u/%02u/%04u [%d] ", lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year, o->id); if (o->note != NULL) - fprintf (f, ">%s ", o->note); - fprintf (f, "%s\n", o->mesg); + fprintf(f, ">%s ", o->note); + fprintf(f, "%s\n", o->mesg); } /* Load the events from file */ -struct event * -event_scan (FILE *f, struct tm start, int id, char *note) +struct event *event_scan(FILE * f, struct tm start, int id, char *note) { char buf[BUFSIZ], *nl; time_t tstart, t; - t = time (NULL); - localtime (&t); + t = time(NULL); + localtime(&t); /* Read the event description */ - if (!fgets (buf, sizeof buf, f)) + if (!fgets(buf, sizeof buf, f)) return NULL; - nl = strchr (buf, '\n'); - if (nl) - { - *nl = '\0'; - } + nl = strchr(buf, '\n'); + if (nl) { + *nl = '\0'; + } start.tm_hour = 0; start.tm_min = 0; start.tm_sec = 0; @@ -160,57 +148,53 @@ event_scan (FILE *f, struct tm start, int id, char *note) start.tm_year -= 1900; start.tm_mon--; - tstart = mktime (&start); - EXIT_IF (tstart == -1, _("date error in the event\n")); + tstart = mktime(&start); + EXIT_IF(tstart == -1, _("date error in the event\n")); - return event_new (buf, note, tstart, id); + return event_new(buf, note, tstart, id); } /* Retrieve an event from the list, given the day and item position. */ -struct event * -event_get (long day, int pos) +struct event *event_get(long day, int pos) { - llist_item_t *i = LLIST_FIND_NTH (&eventlist, pos, day, event_inday); + llist_item_t *i = LLIST_FIND_NTH(&eventlist, pos, day, event_inday); if (i) - return LLIST_TS_GET_DATA (i); + return LLIST_TS_GET_DATA(i); - EXIT (_("event not found")); + EXIT(_("event not found")); /* NOTREACHED */ } /* Delete an event from the list. */ -void -event_delete_bynum (long start, unsigned num, enum eraseflg flag) +void event_delete_bynum(long start, unsigned num, enum eraseflg flag) { - llist_item_t *i = LLIST_FIND_NTH (&eventlist, num, start, event_inday); + llist_item_t *i = LLIST_FIND_NTH(&eventlist, num, start, event_inday); if (!i) - EXIT (_("no such appointment")); - struct event *ev = LLIST_TS_GET_DATA (i); - - switch (flag) - { - case ERASE_FORCE_ONLY_NOTE: - erase_note (&ev->note); - break; - case ERASE_CUT: - event_free_bkp (); - event_dup (ev, &bkp_cut_event); - erase_note (&ev->note); - /* FALLTHROUGH */ - default: - LLIST_REMOVE (&eventlist, i); - mem_free (ev->mesg); - mem_free (ev); - break; - } + EXIT(_("no such appointment")); + struct event *ev = LLIST_TS_GET_DATA(i); + + switch (flag) { + case ERASE_FORCE_ONLY_NOTE: + erase_note(&ev->note); + break; + case ERASE_CUT: + event_free_bkp(); + event_dup(ev, &bkp_cut_event); + erase_note(&ev->note); + /* FALLTHROUGH */ + default: + LLIST_REMOVE(&eventlist, i); + mem_free(ev->mesg); + mem_free(ev); + break; + } } -void -event_paste_item (void) +void event_paste_item(void) { - event_new (bkp_cut_event.mesg, bkp_cut_event.note, - date2sec (*calendar_get_slctd_day (), 0, 0), bkp_cut_event.id); - event_free_bkp (); + event_new(bkp_cut_event.mesg, bkp_cut_event.note, + date2sec(*calendar_get_slctd_day(), 0, 0), bkp_cut_event.id); + event_free_bkp(); } diff --git a/src/getstring.c b/src/getstring.c index 045af68..cc2a949 100644 --- a/src/getstring.c +++ b/src/getstring.c @@ -48,14 +48,13 @@ struct getstr_status { }; /* Print the string at the desired position. */ -static void -getstr_print (WINDOW *win, int x, int y, struct getstr_status *st) +static void getstr_print(WINDOW * win, int x, int y, struct getstr_status *st) { char c = 0; /* print string */ - mvwaddnstr (win, y, x, &st->s[st->ci[st->scrpos].offset], -1); - wclrtoeol (win); + mvwaddnstr(win, y, x, &st->s[st->ci[st->scrpos].offset], -1); + wclrtoeol(win); /* print scrolling indicator */ if (st->scrpos > 0 && st->ci[st->len].dpyoff - @@ -65,62 +64,57 @@ getstr_print (WINDOW *win, int x, int y, struct getstr_status *st) c = '<'; else if (st->ci[st->len].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) c = '>'; - mvwprintw (win, y, col - 2, " %c", c); + mvwprintw(win, y, col - 2, " %c", c); /* print cursor */ - wmove (win, y, st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff); - wchgat (win, 1, A_REVERSE, COLR_CUSTOM, NULL); + wmove(win, y, st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff); + wchgat(win, 1, A_REVERSE, COLR_CUSTOM, NULL); } /* Delete a character at the given position in string. */ -static void -getstr_del_char (struct getstr_status *st) +static void getstr_del_char(struct getstr_status *st) { char *str = st->s + st->ci[st->pos].offset; int cl = st->ci[st->pos + 1].offset - st->ci[st->pos].offset; int cw = st->ci[st->pos + 1].dpyoff - st->ci[st->pos].dpyoff; int i; - memmove (str, str + cl, strlen (str) + 1); + memmove(str, str + cl, strlen(str) + 1); st->len--; - for (i = st->pos; i <= st->len; i++) - { - st->ci[i].offset = st->ci[i + 1].offset - cl; - st->ci[i].dpyoff = st->ci[i + 1].dpyoff - cw; - } + for (i = st->pos; i <= st->len; i++) { + st->ci[i].offset = st->ci[i + 1].offset - cl; + st->ci[i].dpyoff = st->ci[i + 1].dpyoff - cw; + } } /* Add a character at the given position in string. */ -static void -getstr_ins_char (struct getstr_status *st, char *c) +static void getstr_ins_char(struct getstr_status *st, char *c) { char *str = st->s + st->ci[st->pos].offset; - int cl = UTF8_LENGTH (c[0]); - int cw = utf8_width (c); + int cl = UTF8_LENGTH(c[0]); + int cw = utf8_width(c); int i; - memmove (str + cl, str, strlen (str) + 1); + memmove(str + cl, str, strlen(str) + 1); for (i = 0; i < cl; i++, str++) *str = c[i]; - for (i = st->len; i >= st->pos; i--) - { - st->ci[i + 1].offset = st->ci[i].offset + cl; - st->ci[i + 1].dpyoff = st->ci[i].dpyoff + cw; - } + for (i = st->len; i >= st->pos; i--) { + st->ci[i + 1].offset = st->ci[i].offset + cl; + st->ci[i + 1].dpyoff = st->ci[i].dpyoff + cw; + } st->len++; } -static void -bell (void) +static void bell(void) { - putchar ('\a'); + putchar('\a'); } /* Initialize getstring data structure. */ static void -getstr_init (struct getstr_status *st, char *str, struct getstr_charinfo *ci) +getstr_init(struct getstr_status *st, char *str, struct getstr_charinfo *ci) { int width; @@ -128,15 +122,14 @@ getstr_init (struct getstr_status *st, char *str, struct getstr_charinfo *ci) st->ci = ci; st->len = width = 0; - while (*str) - { - st->ci[st->len].offset = str - st->s; - st->ci[st->len].dpyoff = width; - - st->len++; - width += utf8_width (str); - str += UTF8_LENGTH (*str); - } + while (*str) { + st->ci[st->len].offset = str - st->s; + st->ci[st->len].dpyoff = width; + + st->len++; + width += utf8_width(str); + str += UTF8_LENGTH(*str); + } st->ci[st->len].offset = str - st->s; st->ci[st->len].dpyoff = width; @@ -145,30 +138,25 @@ getstr_init (struct getstr_status *st, char *str, struct getstr_charinfo *ci) } /* Scroll left/right if the cursor moves outside the window range. */ -static void -getstr_fixscr (struct getstr_status *st) +static void getstr_fixscr(struct getstr_status *st) { const int pgsize = col / 3; int pgskip; - while (st->pos < st->scrpos) - { - pgskip = 0; - while (pgskip < pgsize && st->scrpos > 0) - { - st->scrpos--; - pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; - } + while (st->pos < st->scrpos) { + pgskip = 0; + while (pgskip < pgsize && st->scrpos > 0) { + st->scrpos--; + pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; } - while (st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) - { - pgskip = 0; - while (pgskip < pgsize && st->scrpos < st->len) - { - pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; - st->scrpos++; - } + } + while (st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) { + pgskip = 0; + while (pgskip < pgsize && st->scrpos < st->len) { + pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; + st->scrpos++; } + } } /* @@ -179,8 +167,7 @@ getstr_fixscr (struct getstr_status *st) * environment, otherwise the cursor would move from place to place without * control. */ -enum getstr -getstring (WINDOW *win, char *str, int l, int x, int y) +enum getstr getstring(WINDOW * win, char *str, int l, int x, int y) { struct getstr_status st; struct getstr_charinfo ci[l + 1]; @@ -188,112 +175,106 @@ getstring (WINDOW *win, char *str, int l, int x, int y) int ch, k; char c[UTF8_MAXLEN]; - getstr_init (&st, str, ci); - custom_apply_attr (win, ATTR_HIGHEST); + getstr_init(&st, str, ci); + custom_apply_attr(win, ATTR_HIGHEST); for (;;) { - getstr_fixscr (&st); - getstr_print (win, x, y, &st); - wins_doupdate (); - - if ((ch = wgetch (win)) == '\n') break; - switch (ch) - { - case KEY_BACKSPACE: /* delete one character */ - case 330: - case 127: - case CTRL ('H'): - if (st.pos > 0) - { - st.pos--; - getstr_del_char (&st); - } - else - bell (); - break; - case CTRL ('D'): /* delete next character */ - if (st.pos < st.len) - getstr_del_char (&st); - else - bell (); - break; - case CTRL ('W'): /* delete a word */ - if (st.pos > 0) { - while (st.pos && st.s[st.ci[st.pos - 1].offset] == ' ') - { - st.pos--; - getstr_del_char (&st); - } - while (st.pos && st.s[st.ci[st.pos - 1].offset] != ' ') - { - st.pos--; - getstr_del_char (&st); - } - } - else - bell (); - break; - case CTRL ('K'): /* delete to end-of-line */ - st.s[st.ci[st.pos].offset] = 0; - st.len = st.pos; - break; - case CTRL ('A'): /* go to begginning of string */ - st.pos = 0; - break; - case CTRL ('E'): /* go to end of string */ - st.pos = st.len; - break; - case KEY_LEFT: /* move one char backward */ - case CTRL ('B'): - if (st.pos > 0) st.pos--; - break; - case KEY_RIGHT: /* move one char forward */ - case CTRL ('F'): - if (st.pos < st.len) st.pos++; - break; - case ESCAPE: /* cancel editing */ - return GETSTRING_ESC; - break; - default: /* insert one character */ - c[0] = ch; - for (k = 1; k < MIN (UTF8_LENGTH (c[0]), UTF8_MAXLEN); k++) - c[k] = (unsigned char)wgetch (win); - if (st.ci[st.len].offset + k < l) - { - getstr_ins_char (&st, c); - st.pos++; - } + getstr_fixscr(&st); + getstr_print(win, x, y, &st); + wins_doupdate(); + + if ((ch = wgetch(win)) == '\n') + break; + switch (ch) { + case KEY_BACKSPACE: /* delete one character */ + case 330: + case 127: + case CTRL('H'): + if (st.pos > 0) { + st.pos--; + getstr_del_char(&st); + } else + bell(); + break; + case CTRL('D'): /* delete next character */ + if (st.pos < st.len) + getstr_del_char(&st); + else + bell(); + break; + case CTRL('W'): /* delete a word */ + if (st.pos > 0) { + while (st.pos && st.s[st.ci[st.pos - 1].offset] == ' ') { + st.pos--; + getstr_del_char(&st); + } + while (st.pos && st.s[st.ci[st.pos - 1].offset] != ' ') { + st.pos--; + getstr_del_char(&st); + } + } else + bell(); + break; + case CTRL('K'): /* delete to end-of-line */ + st.s[st.ci[st.pos].offset] = 0; + st.len = st.pos; + break; + case CTRL('A'): /* go to begginning of string */ + st.pos = 0; + break; + case CTRL('E'): /* go to end of string */ + st.pos = st.len; + break; + case KEY_LEFT: /* move one char backward */ + case CTRL('B'): + if (st.pos > 0) + st.pos--; + break; + case KEY_RIGHT: /* move one char forward */ + case CTRL('F'): + if (st.pos < st.len) + st.pos++; + break; + case ESCAPE: /* cancel editing */ + return GETSTRING_ESC; + break; + default: /* insert one character */ + c[0] = ch; + for (k = 1; k < MIN(UTF8_LENGTH(c[0]), UTF8_MAXLEN); k++) + c[k] = (unsigned char)wgetch(win); + if (st.ci[st.len].offset + k < l) { + getstr_ins_char(&st, c); + st.pos++; } + } } - custom_remove_attr (win, ATTR_HIGHEST); + custom_remove_attr(win, ATTR_HIGHEST); return st.len == 0 ? GETSTRING_RET : GETSTRING_VALID; } /* Update an already existing string. */ -int -updatestring (WINDOW *win, char **str, int x, int y) +int updatestring(WINDOW * win, char **str, int x, int y) { - int len = strlen (*str); + int len = strlen(*str); char *buf; enum getstr ret; - EXIT_IF (len + 1 > BUFSIZ, _("Internal error: line too long")); + EXIT_IF(len + 1 > BUFSIZ, _("Internal error: line too long")); - buf = mem_malloc (BUFSIZ); - memcpy (buf, *str, len + 1); + buf = mem_malloc(BUFSIZ); + memcpy(buf, *str, len + 1); - ret = getstring (win, buf, BUFSIZ, x, y); + ret = getstring(win, buf, BUFSIZ, x, y); - if (ret == GETSTRING_VALID) - { - len = strlen (buf); - *str = mem_realloc (*str, len + 1, 1); - EXIT_IF (*str == NULL, _("out of memory")); - memcpy (*str, buf, len + 1); - } + if (ret == GETSTRING_VALID) { + len = strlen(buf); + *str = mem_realloc(*str, len + 1, 1); + EXIT_IF(*str == NULL, _("out of memory")); + memcpy(*str, buf, len + 1); + } - mem_free (buf); + mem_free(buf); return ret; } @@ -48,8 +48,7 @@ typedef struct { char text[HELPTEXTSIZ]; } help_page_t; -typedef enum -{ +typedef enum { HELP_MAIN, HELP_SAVE, HELP_IMPORT, @@ -74,21 +73,18 @@ typedef enum HELP_CREDITS, HELPSCREENS, NOPAGE -} -help_pages_e; +} help_pages_e; /* Returns the number of lines in an help text. */ -static int -get_help_lines (char *text) +static int get_help_lines(char *text) { int i, newline; newline = 0; - for (i = 0; text[i]; i++) - { - if (text[i] == '\n') - newline++; - } + for (i = 0; text[i]; i++) { + if (text[i] == '\n') + newline++; + } return newline + 1; } @@ -97,7 +93,7 @@ get_help_lines (char *text) * of lines that were written. */ static int -help_write_pad (struct window *win, char *title, char *text, enum key action) +help_write_pad(struct window *win, char *title, char *text, enum key action) { int colnum, rownum; const char *bindings_title = "key bindings: %s"; @@ -105,46 +101,44 @@ help_write_pad (struct window *win, char *title, char *text, enum key action) colnum = 0; rownum = 0; - erase_window_part (win->p, rownum, colnum, BUFSIZ, win->w); - custom_apply_attr (win->p, ATTR_HIGHEST); - mvwprintw (win->p, rownum, colnum, "%s", title); - if ((int) action != KEY_RESIZE && action < NBKEYS) { - switch (action) - { - case KEY_END_OF_WEEK: - case KEY_START_OF_WEEK: - case KEY_MOVE_UP: - case KEY_MOVE_DOWN: - case KEY_MOVE_RIGHT: - case KEY_MOVE_LEFT: - case KEY_GENERIC_HELP: - case KEY_GENERIC_REDRAW: - case KEY_GENERIC_ADD_APPT: - case KEY_GENERIC_ADD_TODO: - case KEY_GENERIC_NEXT_DAY: - case KEY_GENERIC_PREV_DAY: - case KEY_GENERIC_NEXT_WEEK: - case KEY_GENERIC_PREV_WEEK: - case KEY_GENERIC_GOTO_TODAY: - case KEY_GENERIC_CREDITS: - case KEY_GENERIC_CUT: - case KEY_GENERIC_PASTE: - break; - default: - bindings = keys_action_allkeys (action); - - if (bindings) - { - colnum = win->w - strlen (bindings_title) - strlen (bindings); - mvwprintw (win->p, rownum, colnum, bindings_title, bindings); - } + erase_window_part(win->p, rownum, colnum, BUFSIZ, win->w); + custom_apply_attr(win->p, ATTR_HIGHEST); + mvwprintw(win->p, rownum, colnum, "%s", title); + if ((int)action != KEY_RESIZE && action < NBKEYS) { + switch (action) { + case KEY_END_OF_WEEK: + case KEY_START_OF_WEEK: + case KEY_MOVE_UP: + case KEY_MOVE_DOWN: + case KEY_MOVE_RIGHT: + case KEY_MOVE_LEFT: + case KEY_GENERIC_HELP: + case KEY_GENERIC_REDRAW: + case KEY_GENERIC_ADD_APPT: + case KEY_GENERIC_ADD_TODO: + case KEY_GENERIC_NEXT_DAY: + case KEY_GENERIC_PREV_DAY: + case KEY_GENERIC_NEXT_WEEK: + case KEY_GENERIC_PREV_WEEK: + case KEY_GENERIC_GOTO_TODAY: + case KEY_GENERIC_CREDITS: + case KEY_GENERIC_CUT: + case KEY_GENERIC_PASTE: + break; + default: + bindings = keys_action_allkeys(action); + + if (bindings) { + colnum = win->w - strlen(bindings_title) - strlen(bindings); + mvwprintw(win->p, rownum, colnum, bindings_title, bindings); } + } } colnum = 0; - rownum += get_help_lines (title); - custom_remove_attr (win->p, ATTR_HIGHEST); - mvwprintw (win->p, rownum, colnum, "%s", text); - rownum += get_help_lines (text); + rownum += get_help_lines(title); + custom_remove_attr(win->p, ATTR_HIGHEST); + mvwprintw(win->p, rownum, colnum, "%s", text); + rownum += get_help_lines(text); return rownum; } @@ -152,8 +146,7 @@ help_write_pad (struct window *win, char *title, char *text, enum key action) * Create and init help screen and its pad, which is used to make the scrolling * faster. */ -void -help_wins_init (struct scrollwin *hwin, int x, int y, int h, int w) +void help_wins_init(struct scrollwin *hwin, int x, int y, int h, int w) { const int PADOFFSET = 4; const int TITLELINES = 3; @@ -169,162 +162,157 @@ help_wins_init (struct scrollwin *hwin, int x, int y, int h, int w) hwin->pad.w = hwin->win.w - 2 * PADOFFSET + 1; hwin->label = _("Calcurse help"); - wins_scrollwin_init (hwin); - wins_show (hwin->win.p, hwin->label); + wins_scrollwin_init(hwin); + wins_show(hwin->win.p, hwin->label); } /* * Delete the existing windows and recreate them with their new * size and placement. */ -static void -help_wins_reinit (struct scrollwin *hwin) +static void help_wins_reinit(struct scrollwin *hwin) { - wins_scrollwin_delete (hwin); - wins_get_config (); - help_wins_init (hwin, 0, 0, (notify_bar ()) ? row - 3 : row - 2, col); + wins_scrollwin_delete(hwin); + wins_get_config(); + help_wins_init(hwin, 0, 0, (notify_bar())? row - 3 : row - 2, col); } /* Reset the screen, needed when resizing terminal for example. */ -static void -help_wins_reset (struct scrollwin *hwin) +static void help_wins_reset(struct scrollwin *hwin) { - endwin (); - wins_refresh (); - curs_set (0); - delwin (win[STA].p); - help_wins_reinit (hwin); - win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, win[STA].x); - keypad (win[STA].p, TRUE); - if (notify_bar ()) - notify_reinit_bar (); - wins_status_bar (); - if (notify_bar ()) - notify_update_bar (); + endwin(); + wins_refresh(); + curs_set(0); + delwin(win[STA].p); + help_wins_reinit(hwin); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); + keypad(win[STA].p, TRUE); + if (notify_bar()) + notify_reinit_bar(); + wins_status_bar(); + if (notify_bar()) + notify_update_bar(); } /* Association between a key pressed and its corresponding help page. */ -static int -wanted_page (int ch) +static int wanted_page(int ch) { int page; - switch (ch) - { - - case KEY_GENERIC_HELP: - page = HELP_MAIN; - break; - - case KEY_FLAG_ITEM: - page = HELP_FLAG; - break; - - case KEY_GENERIC_REDRAW: - case KEY_GENERIC_ADD_APPT: - case KEY_GENERIC_ADD_TODO: - case KEY_GENERIC_NEXT_DAY: - case KEY_GENERIC_PREV_DAY: - case KEY_GENERIC_NEXT_WEEK: - case KEY_GENERIC_PREV_WEEK: - case KEY_GENERIC_GOTO_TODAY: - page = HELP_GENERAL; - break; - - case KEY_GENERIC_SAVE: - page = HELP_SAVE; - break; - - case KEY_GENERIC_IMPORT: - page = HELP_IMPORT; - break; - - case KEY_GENERIC_EXPORT: - page = HELP_EXPORT; - break; - - case KEY_END_OF_WEEK: - case KEY_START_OF_WEEK: - case KEY_MOVE_UP: - case KEY_MOVE_DOWN: - case KEY_MOVE_RIGHT: - case KEY_MOVE_LEFT: - page = HELP_DISPLACEMENT; - break; - - case KEY_ADD_ITEM: - page = HELP_ADD; - break; - - case KEY_GENERIC_GOTO: - page = HELP_GOTO; - break; - - case KEY_DEL_ITEM: - page = HELP_DELETE; - break; - - case KEY_GENERIC_CUT: - case KEY_GENERIC_PASTE: - page = HELP_CUT_PASTE; - break; - - case KEY_EDIT_ITEM: - page = HELP_EDIT; - break; - - case KEY_EDIT_NOTE: - page = HELP_ENOTE; - break; - - case KEY_VIEW_NOTE: - page = HELP_VNOTE; - break; - - case KEY_GENERIC_CONFIG_MENU: - page = HELP_CONFIG; - break; - - case KEY_GENERIC_OTHER_CMD: - page = HELP_OTHER; - break; - - case KEY_REPEAT_ITEM: - page = HELP_REPEAT; - break; - - case KEY_VIEW_ITEM: - page = HELP_VIEW; - break; - - case KEY_PIPE_ITEM: - page = HELP_PIPE; - break; - - case KEY_RAISE_PRIORITY: - case KEY_LOWER_PRIORITY: - page = HELP_PRIORITY; - break; - - case KEY_GENERIC_CHANGE_VIEW: - page = HELP_TAB; - break; - - case KEY_GENERIC_CREDITS: - page = HELP_CREDITS; - break; - - default: - page = NOPAGE; - break; - } + switch (ch) { + + case KEY_GENERIC_HELP: + page = HELP_MAIN; + break; + + case KEY_FLAG_ITEM: + page = HELP_FLAG; + break; + + case KEY_GENERIC_REDRAW: + case KEY_GENERIC_ADD_APPT: + case KEY_GENERIC_ADD_TODO: + case KEY_GENERIC_NEXT_DAY: + case KEY_GENERIC_PREV_DAY: + case KEY_GENERIC_NEXT_WEEK: + case KEY_GENERIC_PREV_WEEK: + case KEY_GENERIC_GOTO_TODAY: + page = HELP_GENERAL; + break; + + case KEY_GENERIC_SAVE: + page = HELP_SAVE; + break; + + case KEY_GENERIC_IMPORT: + page = HELP_IMPORT; + break; + + case KEY_GENERIC_EXPORT: + page = HELP_EXPORT; + break; + + case KEY_END_OF_WEEK: + case KEY_START_OF_WEEK: + case KEY_MOVE_UP: + case KEY_MOVE_DOWN: + case KEY_MOVE_RIGHT: + case KEY_MOVE_LEFT: + page = HELP_DISPLACEMENT; + break; + + case KEY_ADD_ITEM: + page = HELP_ADD; + break; + + case KEY_GENERIC_GOTO: + page = HELP_GOTO; + break; + + case KEY_DEL_ITEM: + page = HELP_DELETE; + break; + + case KEY_GENERIC_CUT: + case KEY_GENERIC_PASTE: + page = HELP_CUT_PASTE; + break; + + case KEY_EDIT_ITEM: + page = HELP_EDIT; + break; + + case KEY_EDIT_NOTE: + page = HELP_ENOTE; + break; + + case KEY_VIEW_NOTE: + page = HELP_VNOTE; + break; + + case KEY_GENERIC_CONFIG_MENU: + page = HELP_CONFIG; + break; + + case KEY_GENERIC_OTHER_CMD: + page = HELP_OTHER; + break; + + case KEY_REPEAT_ITEM: + page = HELP_REPEAT; + break; + + case KEY_VIEW_ITEM: + page = HELP_VIEW; + break; + + case KEY_PIPE_ITEM: + page = HELP_PIPE; + break; + + case KEY_RAISE_PRIORITY: + case KEY_LOWER_PRIORITY: + page = HELP_PRIORITY; + break; + + case KEY_GENERIC_CHANGE_VIEW: + page = HELP_TAB; + break; + + case KEY_GENERIC_CREDITS: + page = HELP_CREDITS; + break; + + default: + page = NOPAGE; + break; + } return page; } /* Draws the help screen */ -void -help_screen (void) +void help_screen(void) { enum { MOVE_UP, @@ -341,460 +329,460 @@ help_screen (void) char keystr[DIRECTIONS][BUFSIZ]; hscr[HELP_MAIN].title = - _(" Welcome to Calcurse. This is the main help screen.\n"); - snprintf (hscr[HELP_MAIN].text, HELPTEXTSIZ, - _("Moving around: Press '%s' or '%s' to scroll text upward or downward\n" - " inside help screens, if necessary.\n\n" - " Exit help: When finished, press '%s' to exit help and go back to\n" - " the main Calcurse screen.\n\n" - " Help topic: At the bottom of this screen you can see a panel with\n" - " different fields, represented by a letter and a short\n" - " title. This panel contains all the available actions\n" - " you can perform when using Calcurse.\n" - " By pressing one of the letters appearing in this\n" - " panel, you will be shown a short description of the\n" - " corresponding action. At the top right side of the\n" - " description screen are indicated the user-defined key\n" - " bindings that lead to the action.\n\n" - " Credits: Press '%s' for credits."), - keys_action_firstkey (KEY_GENERIC_SCROLL_UP), - keys_action_firstkey (KEY_GENERIC_SCROLL_DOWN), - keys_action_firstkey (KEY_GENERIC_QUIT), - keys_action_firstkey (KEY_GENERIC_CREDITS)); + _(" Welcome to Calcurse. This is the main help screen.\n"); + snprintf(hscr[HELP_MAIN].text, HELPTEXTSIZ, + _ + ("Moving around: Press '%s' or '%s' to scroll text upward or downward\n" + " inside help screens, if necessary.\n\n" + " Exit help: When finished, press '%s' to exit help and go back to\n" + " the main Calcurse screen.\n\n" + " Help topic: At the bottom of this screen you can see a panel with\n" + " different fields, represented by a letter and a short\n" + " title. This panel contains all the available actions\n" + " you can perform when using Calcurse.\n" + " By pressing one of the letters appearing in this\n" + " panel, you will be shown a short description of the\n" + " corresponding action. At the top right side of the\n" + " description screen are indicated the user-defined key\n" + " bindings that lead to the action.\n\n" + " Credits: Press '%s' for credits."), + keys_action_firstkey(KEY_GENERIC_SCROLL_UP), + keys_action_firstkey(KEY_GENERIC_SCROLL_DOWN), + keys_action_firstkey(KEY_GENERIC_QUIT), + keys_action_firstkey(KEY_GENERIC_CREDITS)); hscr[HELP_SAVE].title = _("Save\n"); - snprintf (hscr[HELP_SAVE].text, HELPTEXTSIZ, - _("Save calcurse data.\n" - "Data are splitted into four different files which contain :" - "\n\n" - " / ~/.calcurse/conf -> user configuration\n" - " | (layout, color, general options)\n" - " | ~/.calcurse/apts -> data related to the appointments\n" - " | ~/.calcurse/todo -> data related to the todo list\n" - " \\ ~/.calcurse/keys -> user-defined key bindings\n" - "\nIn the config menu, you can choose to save the Calcurse data\n" - "automatically before quitting.")); + snprintf(hscr[HELP_SAVE].text, HELPTEXTSIZ, + _("Save calcurse data.\n" + "Data are splitted into four different files which contain :" + "\n\n" + " / ~/.calcurse/conf -> user configuration\n" + " | (layout, color, general options)\n" + " | ~/.calcurse/apts -> data related to the appointments\n" + " | ~/.calcurse/todo -> data related to the todo list\n" + " \\ ~/.calcurse/keys -> user-defined key bindings\n" + "\nIn the config menu, you can choose to save the Calcurse data\n" + "automatically before quitting.")); hscr[HELP_IMPORT].title = _("Import\n"); - snprintf (hscr[HELP_IMPORT].text, HELPTEXTSIZ, - _("Import data from an icalendar file.\n" - "You will be asked to enter the file name from which to load ical\n" - "items. At the end of the import process, and if the general option\n" - "'system_dialogs' is set to 'yes', a report indicating how many items\n" - "were imported is shown.\n" - "This report contains the total number of lines read, the number of\n" - "appointments, events and todo items which were successfully imported,\n" - "together with the number of items for which problems occured and that\n" - "were skipped, if any.\n\n" - "If one or more items could not be imported, one has the possibility to\n" - "read the import process report in order to identify which problems\n" - "occured.\n" - "In this report is shown one item per line, with the line in the input\n" - "stream at which this item begins, together with the description of why\n" - "the item could not be imported.\n")); + snprintf(hscr[HELP_IMPORT].text, HELPTEXTSIZ, + _("Import data from an icalendar file.\n" + "You will be asked to enter the file name from which to load ical\n" + "items. At the end of the import process, and if the general option\n" + "'system_dialogs' is set to 'yes', a report indicating how many items\n" + "were imported is shown.\n" + "This report contains the total number of lines read, the number of\n" + "appointments, events and todo items which were successfully imported,\n" + "together with the number of items for which problems occured and that\n" + "were skipped, if any.\n\n" + "If one or more items could not be imported, one has the possibility to\n" + "read the import process report in order to identify which problems\n" + "occured.\n" + "In this report is shown one item per line, with the line in the input\n" + "stream at which this item begins, together with the description of why\n" + "the item could not be imported.\n")); hscr[HELP_EXPORT].title = _("Export\n"); - snprintf (hscr[HELP_EXPORT].text, HELPTEXTSIZ, - _("Export calcurse data (appointments, events and todos).\n" - "This leads to the export submenu, from which you can choose between\n" - "two different export formats: 'ical' and 'pcal'. Choosing one of\n" - "those formats lets you export calcurse data to icalendar or pcal\n" - "format.\n\n" - "You first need to specify the file to which the data will be exported.\n" - "By default, this file is:\n\n" - " ~/calcurse.ics\n\n" - "for an ical export, and:\n\n" - " ~/calcurse.txt\n\n" - "for a pcal export.\n\n" - "Calcurse data are exported in the following order:\n" - " events, appointments, todos.\n")); - - strncpy (keystr[MOVE_UP], keys_action_allkeys (KEY_MOVE_UP), BUFSIZ); - strncpy (keystr[MOVE_DOWN], keys_action_allkeys (KEY_MOVE_DOWN), - BUFSIZ); - strncpy (keystr[MOVE_LEFT], keys_action_allkeys (KEY_MOVE_LEFT), - BUFSIZ); - strncpy (keystr[MOVE_RIGHT], keys_action_allkeys (KEY_MOVE_RIGHT), - BUFSIZ); + snprintf(hscr[HELP_EXPORT].text, HELPTEXTSIZ, + _("Export calcurse data (appointments, events and todos).\n" + "This leads to the export submenu, from which you can choose between\n" + "two different export formats: 'ical' and 'pcal'. Choosing one of\n" + "those formats lets you export calcurse data to icalendar or pcal\n" + "format.\n\n" + "You first need to specify the file to which the data will be exported.\n" + "By default, this file is:\n\n" + " ~/calcurse.ics\n\n" + "for an ical export, and:\n\n" + " ~/calcurse.txt\n\n" + "for a pcal export.\n\n" + "Calcurse data are exported in the following order:\n" + " events, appointments, todos.\n")); + + strncpy(keystr[MOVE_UP], keys_action_allkeys(KEY_MOVE_UP), BUFSIZ); + strncpy(keystr[MOVE_DOWN], keys_action_allkeys(KEY_MOVE_DOWN), BUFSIZ); + strncpy(keystr[MOVE_LEFT], keys_action_allkeys(KEY_MOVE_LEFT), BUFSIZ); + strncpy(keystr[MOVE_RIGHT], keys_action_allkeys(KEY_MOVE_RIGHT), BUFSIZ); hscr[HELP_DISPLACEMENT].title = _("Displacement keys\n"); - snprintf (hscr[HELP_DISPLACEMENT].text, HELPTEXTSIZ, - _("Move around inside calcurse screens.\n" - "The following scheme summarizes how to get around:\n\n" - " move up\n" - " move to previous week\n" - "\n" - " %s\n" - " move left ^ \n" - " move to previous day |\n" - " %s\n" - " <-- + -->\n" - " %s\n" - " | move right\n" - " v move to next day\n" - " %s\n" - "\n" - " move to next week\n" - " move down\n" - "\nMoreover, while inside the calendar panel, the '%s' key moves\n" - "to the first day of the week, and the '%s' key selects the last day of\n" - "the week.\n"), - keystr[MOVE_UP], keystr[MOVE_LEFT], - keystr[MOVE_RIGHT], keystr[MOVE_DOWN], - keys_action_firstkey (KEY_START_OF_WEEK), - keys_action_firstkey (KEY_END_OF_WEEK)); + snprintf(hscr[HELP_DISPLACEMENT].text, HELPTEXTSIZ, + _("Move around inside calcurse screens.\n" + "The following scheme summarizes how to get around:\n\n" + " move up\n" + " move to previous week\n" + "\n" + " %s\n" + " move left ^ \n" + " move to previous day |\n" + " %s\n" + " <-- + -->\n" + " %s\n" + " | move right\n" + " v move to next day\n" + " %s\n" + "\n" + " move to next week\n" + " move down\n" + "\nMoreover, while inside the calendar panel, the '%s' key moves\n" + "to the first day of the week, and the '%s' key selects the last day of\n" + "the week.\n"), + keystr[MOVE_UP], keystr[MOVE_LEFT], + keystr[MOVE_RIGHT], keystr[MOVE_DOWN], + keys_action_firstkey(KEY_START_OF_WEEK), + keys_action_firstkey(KEY_END_OF_WEEK)); hscr[HELP_VIEW].title = _("View\n"); - snprintf (hscr[HELP_VIEW].text, HELPTEXTSIZ, - _("View the item you select in either the Todo or Appointment panel.\n" - "\nThis is usefull when an event description is longer than the " - "available\nspace to display it. " - "If that is the case, the description will be\n" - "shortened and its end replaced by '...'. To be able to read the entire\n" - "description, just press '%s' and a popup window will appear, containing\n" - "the whole event.\n" - "\nPress any key to close the popup window and go back to the main\n" - "Calcurse screen."), - keys_action_firstkey (KEY_VIEW_ITEM)); + snprintf(hscr[HELP_VIEW].text, HELPTEXTSIZ, + _ + ("View the item you select in either the Todo or Appointment panel.\n" + "\nThis is usefull when an event description is longer than the " + "available\nspace to display it. " + "If that is the case, the description will be\n" + "shortened and its end replaced by '...'. To be able to read the entire\n" + "description, just press '%s' and a popup window will appear, containing\n" + "the whole event.\n" + "\nPress any key to close the popup window and go back to the main\n" + "Calcurse screen."), keys_action_firstkey(KEY_VIEW_ITEM)); hscr[HELP_PIPE].title = _("Pipe\n"); - snprintf (hscr[HELP_PIPE].text, HELPTEXTSIZ, - _("Pipe the selected item to an external program.\n" - "\nPress the '%s' key to pipe the currently selected appointment or\n" - "todo entry to an external program.\n" - "\nYou will be driven back to calcurse as soon as the program exits.\n"), - keys_action_firstkey (KEY_PIPE_ITEM)); + snprintf(hscr[HELP_PIPE].text, HELPTEXTSIZ, + _("Pipe the selected item to an external program.\n" + "\nPress the '%s' key to pipe the currently selected appointment or\n" + "todo entry to an external program.\n" + "\nYou will be driven back to calcurse as soon as the program exits.\n"), + keys_action_firstkey(KEY_PIPE_ITEM)); hscr[HELP_TAB].title = _("Tab\n"); - snprintf (hscr[HELP_TAB].text, HELPTEXTSIZ, - _("Switch between panels.\n" - "The panel currently in use has its border colorized.\n" - "\nSome actions are possible only if the right panel is selected.\n" - "For example, if you want to add a task in the TODO list, you need first" - "\nto press the '%s' key to get the TODO panel selected. Then you can\n" - "press '%s' to add your item.\n" - "\nNotice that at the bottom of the screen the list of possible actions\n" - "change while pressing '%s', so you always know what action can be\n" - "performed on the selected panel."), - keys_action_firstkey (KEY_GENERIC_CHANGE_VIEW), - keys_action_firstkey (KEY_ADD_ITEM), - keys_action_firstkey (KEY_GENERIC_CHANGE_VIEW)); + snprintf(hscr[HELP_TAB].text, HELPTEXTSIZ, + _("Switch between panels.\n" + "The panel currently in use has its border colorized.\n" + "\nSome actions are possible only if the right panel is selected.\n" + "For example, if you want to add a task in the TODO list, you need first" + "\nto press the '%s' key to get the TODO panel selected. Then you can\n" + "press '%s' to add your item.\n" + "\nNotice that at the bottom of the screen the list of possible actions\n" + "change while pressing '%s', so you always know what action can be\n" + "performed on the selected panel."), + keys_action_firstkey(KEY_GENERIC_CHANGE_VIEW), + keys_action_firstkey(KEY_ADD_ITEM), + keys_action_firstkey(KEY_GENERIC_CHANGE_VIEW)); hscr[HELP_GOTO].title = _("Goto\n"); - snprintf (hscr[HELP_GOTO].text, HELPTEXTSIZ, - _("Jump to a specific day in the calendar.\n" - "\nUsing this command, you do not need to travel to that day using\n" - "the displacement keys inside the calendar panel.\n" - "If you hit [ENTER] without specifying any date, Calcurse checks the\n" - "system current date and you will be taken to that date.\n" - "\nNotice that pressing '%s', whatever panel is\n" - "selected, will select current day in the calendar."), - keys_action_firstkey (KEY_GENERIC_GOTO_TODAY)); + snprintf(hscr[HELP_GOTO].text, HELPTEXTSIZ, + _("Jump to a specific day in the calendar.\n" + "\nUsing this command, you do not need to travel to that day using\n" + "the displacement keys inside the calendar panel.\n" + "If you hit [ENTER] without specifying any date, Calcurse checks the\n" + "system current date and you will be taken to that date.\n" + "\nNotice that pressing '%s', whatever panel is\n" + "selected, will select current day in the calendar."), + keys_action_firstkey(KEY_GENERIC_GOTO_TODAY)); hscr[HELP_DELETE].title = _("Delete\n"); - snprintf (hscr[HELP_DELETE].text, HELPTEXTSIZ, - _("Delete an element in the ToDo or Appointment list.\n" - "\nDepending on which panel is selected when you press the delete key,\n" - "the hilighted item of either the ToDo or Appointment list will be \n" - "removed from this list.\n" - "\nIf the item to be deleted is recurrent, you will be asked if you\n" - "wish to suppress all of the item occurences or just the one you\n" - "selected.\n" - "\nIf the general option 'confirm_delete' is set to 'YES', then you will" - "\nbe asked for confirmation before deleting the selected event.\n" - "Do not forget to save the calendar data to retrieve the modifications\n" - "next time you launch Calcurse.")); + snprintf(hscr[HELP_DELETE].text, HELPTEXTSIZ, + _("Delete an element in the ToDo or Appointment list.\n" + "\nDepending on which panel is selected when you press the delete key,\n" + "the hilighted item of either the ToDo or Appointment list will be \n" + "removed from this list.\n" + "\nIf the item to be deleted is recurrent, you will be asked if you\n" + "wish to suppress all of the item occurences or just the one you\n" + "selected.\n" + "\nIf the general option 'confirm_delete' is set to 'YES', then you will" + "\nbe asked for confirmation before deleting the selected event.\n" + "Do not forget to save the calendar data to retrieve the modifications\n" + "next time you launch Calcurse.")); hscr[HELP_ADD].title = _("Add\n"); - snprintf (hscr[HELP_ADD].text, HELPTEXTSIZ, - _("Add an item in either the ToDo or Appointment list, depending on which\n" - "panel is selected when you press '%s'.\n" - "\nTo enter a new item in the TODO list, you will need first to enter the" - "\ndescription of this new item. Then you will be asked to specify the " - "todo\npriority. This priority is represented by a number going from 9 " - "for the\nlowest priority, to 1 for the highest one. It is still " - "possible to\nchange the item priority afterwards, by using the '%s' and " - "'%s' keys\ninside the todo panel.\n" - "\nIf the APPOINTMENT panel is selected while pressing '%s', you will be\n" - "able to enter either a new appointment or a new all-day long event.\n" - "To enter a new event, press [ENTER] instead of the item start time, " - "and\njust fill in the event description.\n" - "To enter a new appointment to be added in the APPOINTMENT list, you\n" - "will need to enter successively the time at which the appointment\n" - "begins, the appointment length (either by specifying the end time in\n" - "[hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), \n" - "and the description of the event.\n" - "\nThe day at which occurs the event or appointment is the day currently" - "\nselected in the calendar, so you need to move to the desired day " - "before\npressing '%s'.\n" "\nNotes:\n" - " o if an appointment lasts for such a long time that it continues\n" - " on the next days, this event will be indicated on all the\n" - " corresponding days, and the beginning or ending hour will be\n" - " replaced by '..' if the event does not begin or end on the day.\n" - " o if you only press [ENTER] at the APPOINTMENT or TODO event\n" - " description prompt, without any description, no item will be\n" - " added.\n" - " o do not forget to save the calendar data to retrieve the new\n" - " event next time you launch Calcurse."), - keys_action_firstkey (KEY_ADD_ITEM), - keys_action_firstkey (KEY_RAISE_PRIORITY), - keys_action_firstkey (KEY_LOWER_PRIORITY), - keys_action_firstkey (KEY_ADD_ITEM), - keys_action_firstkey (KEY_ADD_ITEM)); + snprintf(hscr[HELP_ADD].text, HELPTEXTSIZ, + _ + ("Add an item in either the ToDo or Appointment list, depending on which\n" + "panel is selected when you press '%s'.\n" + "\nTo enter a new item in the TODO list, you will need first to enter the" + "\ndescription of this new item. Then you will be asked to specify the " + "todo\npriority. This priority is represented by a number going from 9 " + "for the\nlowest priority, to 1 for the highest one. It is still " + "possible to\nchange the item priority afterwards, by using the '%s' and " + "'%s' keys\ninside the todo panel.\n" + "\nIf the APPOINTMENT panel is selected while pressing '%s', you will be\n" + "able to enter either a new appointment or a new all-day long event.\n" + "To enter a new event, press [ENTER] instead of the item start time, " + "and\njust fill in the event description.\n" + "To enter a new appointment to be added in the APPOINTMENT list, you\n" + "will need to enter successively the time at which the appointment\n" + "begins, the appointment length (either by specifying the end time in\n" + "[hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), \n" + "and the description of the event.\n" + "\nThe day at which occurs the event or appointment is the day currently" + "\nselected in the calendar, so you need to move to the desired day " + "before\npressing '%s'.\n" "\nNotes:\n" + " o if an appointment lasts for such a long time that it continues\n" + " on the next days, this event will be indicated on all the\n" + " corresponding days, and the beginning or ending hour will be\n" + " replaced by '..' if the event does not begin or end on the day.\n" + " o if you only press [ENTER] at the APPOINTMENT or TODO event\n" + " description prompt, without any description, no item will be\n" + " added.\n" + " o do not forget to save the calendar data to retrieve the new\n" + " event next time you launch Calcurse."), + keys_action_firstkey(KEY_ADD_ITEM), + keys_action_firstkey(KEY_RAISE_PRIORITY), + keys_action_firstkey(KEY_LOWER_PRIORITY), + keys_action_firstkey(KEY_ADD_ITEM), + keys_action_firstkey(KEY_ADD_ITEM)); hscr[HELP_CUT_PASTE].title = _("Cut and Paste\n"); - snprintf (hscr[HELP_CUT_PASTE].text, HELPTEXTSIZ, - _("Cut and paste the currently selected item. This is useful to quickly\n" - "move an item from one date to another.\n" - "To do so, one must first highlight the item that needs to be moved,\n" - "then press '%s' to cut this item. It will be removed from the panel.\n" - "Once the new date is chosen in the calendar, the appointment panel must\n" - "be selected and the '%s' key must be pressed to paste the item.\n" - "The item will appear again in the appointment panel, assigned to the\n" - "newly selected date.\n\n" - "Be careful that if two cuts are performed successively without pasting\n" - "between them, the item that was cut at first will be lost, together\n" - "with its associated note if it had one."), - keys_action_firstkey (KEY_GENERIC_CUT), - keys_action_firstkey (KEY_GENERIC_PASTE)); + snprintf(hscr[HELP_CUT_PASTE].text, HELPTEXTSIZ, + _ + ("Cut and paste the currently selected item. This is useful to quickly\n" + "move an item from one date to another.\n" + "To do so, one must first highlight the item that needs to be moved,\n" + "then press '%s' to cut this item. It will be removed from the panel.\n" + "Once the new date is chosen in the calendar, the appointment panel must\n" + "be selected and the '%s' key must be pressed to paste the item.\n" + "The item will appear again in the appointment panel, assigned to the\n" + "newly selected date.\n\n" + "Be careful that if two cuts are performed successively without pasting\n" + "between them, the item that was cut at first will be lost, together\n" + "with its associated note if it had one."), + keys_action_firstkey(KEY_GENERIC_CUT), + keys_action_firstkey(KEY_GENERIC_PASTE)); hscr[HELP_EDIT].title = _("Edit Item\n"); - snprintf (hscr[HELP_EDIT].text, HELPTEXTSIZ, - _("Edit the item which is currently selected.\n" - "Depending on the item type (appointment, event, or todo), and if it is\n" - "repeated or not, you will be asked to choose one of the item properties" - "\nto modify. An item property is one of the following: the start time, " - "the\nend time, the description, or the item repetition.\n" - "Once you have chosen the property you want to modify, you will be shown" - "\nits actual value, and you will be able to change it as you like.\n" - "\nNotes:\n" - " o if you choose to edit the item repetition properties, you will\n" - " be asked to re-enter all of the repetition characteristics\n" - " (repetition type, frequence, and ending date). Moreover, the\n" - " previous data concerning the deleted occurences will be lost.\n" - " o do not forget to save the calendar data to retrieve the\n" - " modified properties next time you launch Calcurse.")); + snprintf(hscr[HELP_EDIT].text, HELPTEXTSIZ, + _("Edit the item which is currently selected.\n" + "Depending on the item type (appointment, event, or todo), and if it is\n" + "repeated or not, you will be asked to choose one of the item properties" + "\nto modify. An item property is one of the following: the start time, " + "the\nend time, the description, or the item repetition.\n" + "Once you have chosen the property you want to modify, you will be shown" + "\nits actual value, and you will be able to change it as you like.\n" + "\nNotes:\n" + " o if you choose to edit the item repetition properties, you will\n" + " be asked to re-enter all of the repetition characteristics\n" + " (repetition type, frequence, and ending date). Moreover, the\n" + " previous data concerning the deleted occurences will be lost.\n" + " o do not forget to save the calendar data to retrieve the\n" + " modified properties next time you launch Calcurse.")); hscr[HELP_ENOTE].title = _("EditNote\n"); - snprintf (hscr[HELP_ENOTE].text, HELPTEXTSIZ, - _("Attach a note to any type of item, or edit an already existing note.\n" - "This feature is useful if you do not have enough space to store all\n" - "of your item description, or if you would like to add sub-tasks to an\n" - "already existing todo item for example.\n" - "Before pressing the '%s' key, you first need to highlight the item you\n" - "want the note to be attached to. Then you will be driven to an\n" - "external editor to edit your note. This editor is chosen the following\n" - "way:\n" - " o if the 'VISUAL' environment variable is set, then this will be\n" - " the default editor to be called.\n" - " o if 'VISUAL' is not set, then the 'EDITOR' environment variable\n" - " will be used as the default editor.\n" - " o if none of the above environment variables is set, then\n" - " '/usr/bin/vi' will be used.\n" - "\nOnce the item note is edited and saved, quit your favorite editor.\n" - "You will then go back to Calcurse, and the '>' sign will appear in front" - "\nof the highlighted item, meaning there is a note attached to it."), - keys_action_firstkey (KEY_EDIT_NOTE)); + snprintf(hscr[HELP_ENOTE].text, HELPTEXTSIZ, + _ + ("Attach a note to any type of item, or edit an already existing note.\n" + "This feature is useful if you do not have enough space to store all\n" + "of your item description, or if you would like to add sub-tasks to an\n" + "already existing todo item for example.\n" + "Before pressing the '%s' key, you first need to highlight the item you\n" + "want the note to be attached to. Then you will be driven to an\n" + "external editor to edit your note. This editor is chosen the following\n" + "way:\n" + " o if the 'VISUAL' environment variable is set, then this will be\n" + " the default editor to be called.\n" + " o if 'VISUAL' is not set, then the 'EDITOR' environment variable\n" + " will be used as the default editor.\n" + " o if none of the above environment variables is set, then\n" + " '/usr/bin/vi' will be used.\n" + "\nOnce the item note is edited and saved, quit your favorite editor.\n" + "You will then go back to Calcurse, and the '>' sign will appear in front" + "\nof the highlighted item, meaning there is a note attached to it."), + keys_action_firstkey(KEY_EDIT_NOTE)); hscr[HELP_VNOTE].title = _("ViewNote\n"); - snprintf (hscr[HELP_VNOTE].text, HELPTEXTSIZ, - _("View a note which was previously attached to an item (an item which\n" - "owns a note has a '>' sign in front of it).\n" - "This command only permits to view the note, not to edit it (to do so,\n" - "use the 'EditNote' command, by pressing the '%s' key).\n" - "Once you highlighted an item with a note attached to it, and the '%s' key" - "\nwas pressed, you will be driven to an external pager to view that " - "note.\n" - "The default pager is chosen the following way:\n" - " o if the 'PAGER' environment variable is set, then this will be\n" - " the default viewer to be called.\n" - " o if the above environment variable is not set, then\n" - " '/usr/bin/less' will be used.\n" - "As for editing a note, quit the pager and you will be driven back to\n" - "Calcurse."), - keys_action_firstkey (KEY_EDIT_NOTE), - keys_action_firstkey (KEY_VIEW_NOTE)); + snprintf(hscr[HELP_VNOTE].text, HELPTEXTSIZ, + _ + ("View a note which was previously attached to an item (an item which\n" + "owns a note has a '>' sign in front of it).\n" + "This command only permits to view the note, not to edit it (to do so,\n" + "use the 'EditNote' command, by pressing the '%s' key).\n" + "Once you highlighted an item with a note attached to it, and the '%s' key" + "\nwas pressed, you will be driven to an external pager to view that " + "note.\n" "The default pager is chosen the following way:\n" + " o if the 'PAGER' environment variable is set, then this will be\n" + " the default viewer to be called.\n" + " o if the above environment variable is not set, then\n" + " '/usr/bin/less' will be used.\n" + "As for editing a note, quit the pager and you will be driven back to\n" + "Calcurse."), keys_action_firstkey(KEY_EDIT_NOTE), + keys_action_firstkey(KEY_VIEW_NOTE)); hscr[HELP_PRIORITY].title = _("Priority\n"); - snprintf (hscr[HELP_PRIORITY].text, HELPTEXTSIZ, - _("Change the priority of the currently selected item in the ToDo list.\n" - "Priorities are represented by the number appearing in front of the\n" - "todo description. This number goes from 9 for the lowest priority to\n" - "1 for the highest priority.\n" - "Todo having higher priorities are placed first (at the top) inside the\n" - "todo panel.\n\n" - "If you want to raise the priority of a todo item, you need to press " - "'%s'.\n" - "In doing so, the number in front of this item will decrease, " - "meaning its\npriority increases. The item position inside the todo " - "panel may change,\ndepending on the priority of the items above it.\n\n" - "At the opposite, to lower a todo priority, press '%s'. The todo position" - "\nmay also change depending on the priority of the items below."), - keys_action_firstkey (KEY_RAISE_PRIORITY), - keys_action_firstkey (KEY_LOWER_PRIORITY)); + snprintf(hscr[HELP_PRIORITY].text, HELPTEXTSIZ, + _ + ("Change the priority of the currently selected item in the ToDo list.\n" + "Priorities are represented by the number appearing in front of the\n" + "todo description. This number goes from 9 for the lowest priority to\n" + "1 for the highest priority.\n" + "Todo having higher priorities are placed first (at the top) inside the\n" + "todo panel.\n\n" + "If you want to raise the priority of a todo item, you need to press " + "'%s'.\n" + "In doing so, the number in front of this item will decrease, " + "meaning its\npriority increases. The item position inside the todo " + "panel may change,\ndepending on the priority of the items above it.\n\n" + "At the opposite, to lower a todo priority, press '%s'. The todo position" + "\nmay also change depending on the priority of the items below."), + keys_action_firstkey(KEY_RAISE_PRIORITY), + keys_action_firstkey(KEY_LOWER_PRIORITY)); hscr[HELP_REPEAT].title = _("Repeat\n"); - snprintf (hscr[HELP_REPEAT].text, HELPTEXTSIZ, - _("Repeat an event or an appointment.\n" - "You must first select the item to be repeated by moving inside the\n" - "appointment panel. Then pressing '%s' will lead you to a set of three\n" - "questions, with which you will be able to specify the repetition\n" - "characteristics:\n\n" - " o type: you can choose between a daily, weekly, monthly or\n" - " yearly repetition by pressing 'D', 'W', 'M' or 'Y'\n" - " respectively.\n\n" - " o frequence: this indicates how often the item shall be repeated.\n" - " For example, if you want to remember an anniversary,\n" - " choose a 'yearly' repetition with a frequence of '1',\n" - " which means it must be repeated every year. Another\n" - " example: if you go to the restaurant every two days,\n" - " choose a 'daily' repetition with a frequence of '2'.\n\n" - " o ending date: this specifies when to stop repeating the selected\n" - " event or appointment. To indicate an endless \n" - " repetition, enter '0' and the item will be repeated\n" - " forever.\n" "\nNotes:\n" - " o repeated items are marked with an '*' inside the appointment\n" - " panel, to be easily recognizable from non-repeated ones.\n" - " o the 'Repeat' and 'Delete' command can be mixed to create\n" - " complicated configurations, as it is possible to delete only\n" - " one occurence of a repeated item."), - keys_action_firstkey (KEY_REPEAT_ITEM)); + snprintf(hscr[HELP_REPEAT].text, HELPTEXTSIZ, + _("Repeat an event or an appointment.\n" + "You must first select the item to be repeated by moving inside the\n" + "appointment panel. Then pressing '%s' will lead you to a set of three\n" + "questions, with which you will be able to specify the repetition\n" + "characteristics:\n\n" + " o type: you can choose between a daily, weekly, monthly or\n" + " yearly repetition by pressing 'D', 'W', 'M' or 'Y'\n" + " respectively.\n\n" + " o frequence: this indicates how often the item shall be repeated.\n" + " For example, if you want to remember an anniversary,\n" + " choose a 'yearly' repetition with a frequence of '1',\n" + " which means it must be repeated every year. Another\n" + " example: if you go to the restaurant every two days,\n" + " choose a 'daily' repetition with a frequence of '2'.\n\n" + " o ending date: this specifies when to stop repeating the selected\n" + " event or appointment. To indicate an endless \n" + " repetition, enter '0' and the item will be repeated\n" + " forever.\n" "\nNotes:\n" + " o repeated items are marked with an '*' inside the appointment\n" + " panel, to be easily recognizable from non-repeated ones.\n" + " o the 'Repeat' and 'Delete' command can be mixed to create\n" + " complicated configurations, as it is possible to delete only\n" + " one occurence of a repeated item."), + keys_action_firstkey(KEY_REPEAT_ITEM)); hscr[HELP_FLAG].title = _("Flag Item\n"); - snprintf (hscr[HELP_FLAG].text, HELPTEXTSIZ, - _("Toggle an appointment's 'important' flag or a todo's 'completed' flag.\n" - "If a todo is flagged as completed, its priority number will be replaced\n" - "by an 'X' sign. Completed tasks will no longer appear in exported data\n" - "or when using the '-t' command line flag (unless specifying '0' as the\n" - "priority number, in which case only completed tasks will be shown).\n\n" - "If an appointment is flagged as important, an exclamation mark appears\n" - "in front of it, and you will be warned if time gets closed to the\n" - "appointment start time.\n" - "To customize the way one gets notified, the configuration submenu lets\n" - "you choose the command launched to warn user of an upcoming appointment," - "\nand how long before it he gets notified.")); + snprintf(hscr[HELP_FLAG].text, HELPTEXTSIZ, + _ + ("Toggle an appointment's 'important' flag or a todo's 'completed' flag.\n" + "If a todo is flagged as completed, its priority number will be replaced\n" + "by an 'X' sign. Completed tasks will no longer appear in exported data\n" + "or when using the '-t' command line flag (unless specifying '0' as the\n" + "priority number, in which case only completed tasks will be shown).\n\n" + "If an appointment is flagged as important, an exclamation mark appears\n" + "in front of it, and you will be warned if time gets closed to the\n" + "appointment start time.\n" + "To customize the way one gets notified, the configuration submenu lets\n" + "you choose the command launched to warn user of an upcoming appointment," + "\nand how long before it he gets notified.")); hscr[HELP_CONFIG].title = _("Config\n"); - snprintf (hscr[HELP_CONFIG].text, HELPTEXTSIZ, - _("Open the configuration submenu.\n" - "From this submenu, you can select between color, layout, notification\n" - "and general options, and you can also configure your keybindings.\n" - "\nThe color submenu lets you choose the color theme.\n" - "The layout submenu lets you choose the Calcurse screen layout, in other" - "\nwords where to place the three different panels on the screen.\n" - "The general options submenu brings a screen with the different options" - "\nwhich modifies the way Calcurse interacts with the user.\n" - "The notify submenu allows you to change the notify-bar settings.\n" - "The keys submenu lets you define your own key bindings.\n" - "\nDo not forget to save the calendar data to retrieve your configuration" - "\nnext time you launch Calcurse.")); + snprintf(hscr[HELP_CONFIG].text, HELPTEXTSIZ, + _("Open the configuration submenu.\n" + "From this submenu, you can select between color, layout, notification\n" + "and general options, and you can also configure your keybindings.\n" + "\nThe color submenu lets you choose the color theme.\n" + "The layout submenu lets you choose the Calcurse screen layout, in other" + "\nwords where to place the three different panels on the screen.\n" + "The general options submenu brings a screen with the different options" + "\nwhich modifies the way Calcurse interacts with the user.\n" + "The notify submenu allows you to change the notify-bar settings.\n" + "The keys submenu lets you define your own key bindings.\n" + "\nDo not forget to save the calendar data to retrieve your configuration" + "\nnext time you launch Calcurse.")); hscr[HELP_GENERAL].title = _("Generic keybindings\n"); - snprintf (hscr[HELP_GENERAL].text, HELPTEXTSIZ, - _("Some of the keybindings apply whatever panel is selected. They are\n" - "called generic keybinding.\n" - "Here is the list of all the generic key bindings, together with their\n" - "corresponding action:\n\n" - " '%s' : Redraw function -> redraws calcurse panels, this is useful if\n" - " you resize your terminal screen or when\n" - " garbage appears inside the display\n" - " '%s' : Add Appointment -> add an appointment or an event\n" - " '%s' : Add ToDo -> add a todo\n" - " '%s' : -1 Day -> move to previous day\n" - " '%s' : +1 Day -> move to next day\n" - " '%s' : -1 Week -> move to previous week\n" - " '%s' : +1 Week -> move to next week\n" - " '%s' : Goto today -> move to current day\n" - "\nThe '%s' and '%s' keys are used to scroll text upward or downward\n" - "when inside specific screens such the help screens for example.\n" - "They are also used when the calendar screen is selected to switch\n" - "between the available views (monthly and weekly calendar views)."), - keys_action_firstkey (KEY_GENERIC_REDRAW), - keys_action_firstkey (KEY_GENERIC_ADD_APPT), - keys_action_firstkey (KEY_GENERIC_ADD_TODO), - keys_action_firstkey (KEY_GENERIC_PREV_DAY), - keys_action_firstkey (KEY_GENERIC_NEXT_DAY), - keys_action_firstkey (KEY_GENERIC_PREV_WEEK), - keys_action_firstkey (KEY_GENERIC_NEXT_WEEK), - keys_action_firstkey (KEY_GENERIC_GOTO_TODAY), - keys_action_firstkey (KEY_GENERIC_SCROLL_UP), - keys_action_firstkey (KEY_GENERIC_SCROLL_DOWN)); + snprintf(hscr[HELP_GENERAL].text, HELPTEXTSIZ, + _ + ("Some of the keybindings apply whatever panel is selected. They are\n" + "called generic keybinding.\n" + "Here is the list of all the generic key bindings, together with their\n" + "corresponding action:\n\n" + " '%s' : Redraw function -> redraws calcurse panels, this is useful if\n" + " you resize your terminal screen or when\n" + " garbage appears inside the display\n" + " '%s' : Add Appointment -> add an appointment or an event\n" + " '%s' : Add ToDo -> add a todo\n" + " '%s' : -1 Day -> move to previous day\n" + " '%s' : +1 Day -> move to next day\n" + " '%s' : -1 Week -> move to previous week\n" + " '%s' : +1 Week -> move to next week\n" + " '%s' : Goto today -> move to current day\n" + "\nThe '%s' and '%s' keys are used to scroll text upward or downward\n" + "when inside specific screens such the help screens for example.\n" + "They are also used when the calendar screen is selected to switch\n" + "between the available views (monthly and weekly calendar views)."), + keys_action_firstkey(KEY_GENERIC_REDRAW), + keys_action_firstkey(KEY_GENERIC_ADD_APPT), + keys_action_firstkey(KEY_GENERIC_ADD_TODO), + keys_action_firstkey(KEY_GENERIC_PREV_DAY), + keys_action_firstkey(KEY_GENERIC_NEXT_DAY), + keys_action_firstkey(KEY_GENERIC_PREV_WEEK), + keys_action_firstkey(KEY_GENERIC_NEXT_WEEK), + keys_action_firstkey(KEY_GENERIC_GOTO_TODAY), + keys_action_firstkey(KEY_GENERIC_SCROLL_UP), + keys_action_firstkey(KEY_GENERIC_SCROLL_DOWN)); hscr[HELP_OTHER].title = _("OtherCmd\n"); - snprintf (hscr[HELP_OTHER].text, HELPTEXTSIZ, - _("Switch between status bar help pages.\n" - "Because the terminal screen is too narrow to display all of the\n" - "available commands, you need to press '%s' to see the next set of\n" - "commands together with their keybindings.\n" - "Once the last status bar page is reached, pressing '%s' another time\n" - "leads you back to the first page."), - keys_action_firstkey (KEY_GENERIC_OTHER_CMD), - keys_action_firstkey (KEY_GENERIC_OTHER_CMD)); + snprintf(hscr[HELP_OTHER].text, HELPTEXTSIZ, + _("Switch between status bar help pages.\n" + "Because the terminal screen is too narrow to display all of the\n" + "available commands, you need to press '%s' to see the next set of\n" + "commands together with their keybindings.\n" + "Once the last status bar page is reached, pressing '%s' another time\n" + "leads you back to the first page."), + keys_action_firstkey(KEY_GENERIC_OTHER_CMD), + keys_action_firstkey(KEY_GENERIC_OTHER_CMD)); hscr[HELP_CREDITS].title = _("Calcurse - text-based organizer"); - snprintf (hscr[HELP_CREDITS].text, HELPTEXTSIZ, - _("\nCopyright (c) 2004-2012 calcurse Development Team\n" - "All rights reserved.\n" - "\n" - "Redistribution and use in source and binary forms, with or without\n" - "modification, are permitted provided that the following conditions\n" - "are met:\n" - "\n" - "\t- Redistributions of source code must retain the above\n" - "\t copyright notice, this list of conditions and the\n" - "\t following disclaimer.\n" - "\n" - "\t- Redistributions in binary form must reproduce the above\n" - "\t copyright notice, this list of conditions and the\n" - "\t following disclaimer in the documentation and/or other\n" - "\t materials provided with the distribution.\n" - "\n\n" - "Send your feedback or comments to : misc@calcurse.org\n" - "Calcurse home page : http://calcurse.org")); - - help_wins_init (&hwin, 0, 0, (notify_bar ()) ? row - 3 : row - 2, col); + snprintf(hscr[HELP_CREDITS].text, HELPTEXTSIZ, + _("\nCopyright (c) 2004-2012 calcurse Development Team\n" + "All rights reserved.\n" + "\n" + "Redistribution and use in source and binary forms, with or without\n" + "modification, are permitted provided that the following conditions\n" + "are met:\n" + "\n" + "\t- Redistributions of source code must retain the above\n" + "\t copyright notice, this list of conditions and the\n" + "\t following disclaimer.\n" + "\n" + "\t- Redistributions in binary form must reproduce the above\n" + "\t copyright notice, this list of conditions and the\n" + "\t following disclaimer in the documentation and/or other\n" + "\t materials provided with the distribution.\n" + "\n\n" + "Send your feedback or comments to : misc@calcurse.org\n" + "Calcurse home page : http://calcurse.org")); + + help_wins_init(&hwin, 0, 0, (notify_bar())? row - 3 : row - 2, col); oldpage = HELP_MAIN; need_resize = 0; /* Display the help screen related to user input. */ - while (ch != KEY_GENERIC_QUIT) - { - erase_window_part (hwin.win.p, 1, hwin.pad.y, col - 2, - hwin.win.h - 2); - - switch (ch) { - case KEY_GENERIC_SCROLL_DOWN: - wins_scrollwin_down (&hwin, 1); - break; - - case KEY_GENERIC_SCROLL_UP: - wins_scrollwin_up (&hwin, 1); - break; - - default: - page = wanted_page (ch); - if (page != NOPAGE) { - hwin.first_visible_line = 0; - hwin.total_lines = help_write_pad (&hwin.pad, hscr[page].title, - hscr[page].text, ch); - oldpage = page; - } + while (ch != KEY_GENERIC_QUIT) { + erase_window_part(hwin.win.p, 1, hwin.pad.y, col - 2, hwin.win.h - 2); + + switch (ch) { + case KEY_GENERIC_SCROLL_DOWN: + wins_scrollwin_down(&hwin, 1); + break; + + case KEY_GENERIC_SCROLL_UP: + wins_scrollwin_up(&hwin, 1); + break; + + default: + page = wanted_page(ch); + if (page != NOPAGE) { + hwin.first_visible_line = 0; + hwin.total_lines = help_write_pad(&hwin.pad, hscr[page].title, + hscr[page].text, ch); + oldpage = page; } + } - if (resize) - { - resize = 0; - wins_get_config (); - help_wins_reset (&hwin); - hwin.first_visible_line = 0; - hwin.total_lines = help_write_pad (&hwin.pad, hscr[oldpage].title, - hscr[oldpage].text, ch); - need_resize = 1; - } - - wins_scrollwin_display (&hwin); - ch = keys_getch (win[STA].p, NULL); + if (resize) { + resize = 0; + wins_get_config(); + help_wins_reset(&hwin); + hwin.first_visible_line = 0; + hwin.total_lines = help_write_pad(&hwin.pad, hscr[oldpage].title, + hscr[oldpage].text, ch); + need_resize = 1; } - wins_scrollwin_delete (&hwin); + + wins_scrollwin_display(&hwin); + ch = keys_getch(win[STA].p, NULL); + } + wins_scrollwin_delete(&hwin); if (need_resize) - wins_reset (); + wins_reset(); } diff --git a/src/htable.h b/src/htable.h index 91d01d8..3bde5ef 100644 --- a/src/htable.h +++ b/src/htable.h @@ -69,7 +69,7 @@ struct name { \ } #define HTABLE_ENTRY(type) \ -struct type *next /* To build the bucket chain list. */ +struct type *next /* To build the bucket chain list. */ #define HTABLE_SIZE(head) \ (sizeof (*(head)->bkts) ? sizeof ((head)->bkts) / sizeof (*(head)->bkts) : 0) @@ -55,232 +55,208 @@ typedef enum { typedef struct { enum recur_type type; - int freq; - long until; - unsigned count; + int freq; + long until; + unsigned count; } ical_rpt_t; -static void ical_export_header (FILE *); -static void ical_export_recur_events (FILE *); -static void ical_export_events (FILE *); -static void ical_export_recur_apoints (FILE *); -static void ical_export_apoints (FILE *); -static void ical_export_todo (FILE *); -static void ical_export_footer (FILE *); +static void ical_export_header(FILE *); +static void ical_export_recur_events(FILE *); +static void ical_export_events(FILE *); +static void ical_export_recur_apoints(FILE *); +static void ical_export_apoints(FILE *); +static void ical_export_todo(FILE *); +static void ical_export_footer(FILE *); static const char *ical_recur_type[RECUR_TYPES] = - { "", "DAILY", "WEEKLY", "MONTHLY", "YEARLY" }; + { "", "DAILY", "WEEKLY", "MONTHLY", "YEARLY" }; /* iCal alarm notification. */ -static void -ical_export_valarm (FILE *stream) +static void ical_export_valarm(FILE * stream) { - fputs ("BEGIN:VALARM\n", stream); - pthread_mutex_lock (&nbar.mutex); - fprintf (stream, "TRIGGER:-P%dS\n", nbar.cntdwn); - pthread_mutex_unlock (&nbar.mutex); - fputs ("ACTION:DISPLAY\n", stream); - fputs ("END:VALARM\n", stream); + fputs("BEGIN:VALARM\n", stream); + pthread_mutex_lock(&nbar.mutex); + fprintf(stream, "TRIGGER:-P%dS\n", nbar.cntdwn); + pthread_mutex_unlock(&nbar.mutex); + fputs("ACTION:DISPLAY\n", stream); + fputs("END:VALARM\n", stream); } /* Export header. */ -static void -ical_export_header (FILE *stream) +static void ical_export_header(FILE * stream) { - fputs ("BEGIN:VCALENDAR\n", stream); - fprintf (stream, "PRODID:-//calcurse//NONSGML v%s//EN\n", VERSION); - fputs ("VERSION:2.0\n", stream); + fputs("BEGIN:VCALENDAR\n", stream); + fprintf(stream, "PRODID:-//calcurse//NONSGML v%s//EN\n", VERSION); + fputs("VERSION:2.0\n", stream); } /* Export footer. */ -static void -ical_export_footer (FILE *stream) +static void ical_export_footer(FILE * stream) { - fputs ("END:VCALENDAR\n", stream); + fputs("END:VCALENDAR\n", stream); } /* Export recurrent events. */ -static void -ical_export_recur_events (FILE *stream) +static void ical_export_recur_events(FILE * stream) { llist_item_t *i, *j; char ical_date[BUFSIZ]; - LLIST_FOREACH (&recur_elist, i) - { - struct recur_event *rev = LLIST_GET_DATA (i); - date_sec2date_fmt (rev->day, ICALDATEFMT, ical_date); - fputs ("BEGIN:VEVENT\n", stream); - fprintf (stream, "DTSTART:%s\n", ical_date); - fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d", - ical_recur_type[rev->rpt->type], rev->rpt->freq); - - if (rev->rpt->until != 0) - { - date_sec2date_fmt (rev->rpt->until, ICALDATEFMT, ical_date); - fprintf (stream, ";UNTIL=%s\n", ical_date); - } - else - fputc ('\n', stream); - - if (LLIST_FIRST (&rev->exc)) - { - fputs ("EXDATE:", stream); - LLIST_FOREACH (&rev->exc, j) - { - struct excp *exc = LLIST_GET_DATA (j); - date_sec2date_fmt (exc->st, ICALDATEFMT, ical_date); - fprintf (stream, "%s", ical_date); - if (LLIST_NEXT (j)) - fputc (',', stream); - else - fputc ('\n', stream); - } - } - - fprintf (stream, "SUMMARY:%s\n", rev->mesg); - fputs ("END:VEVENT\n", stream); + LLIST_FOREACH(&recur_elist, i) { + struct recur_event *rev = LLIST_GET_DATA(i); + date_sec2date_fmt(rev->day, ICALDATEFMT, ical_date); + fputs("BEGIN:VEVENT\n", stream); + fprintf(stream, "DTSTART:%s\n", ical_date); + fprintf(stream, "RRULE:FREQ=%s;INTERVAL=%d", + ical_recur_type[rev->rpt->type], rev->rpt->freq); + + if (rev->rpt->until != 0) { + date_sec2date_fmt(rev->rpt->until, ICALDATEFMT, ical_date); + fprintf(stream, ";UNTIL=%s\n", ical_date); + } else + fputc('\n', stream); + + if (LLIST_FIRST(&rev->exc)) { + fputs("EXDATE:", stream); + LLIST_FOREACH(&rev->exc, j) { + struct excp *exc = LLIST_GET_DATA(j); + date_sec2date_fmt(exc->st, ICALDATEFMT, ical_date); + fprintf(stream, "%s", ical_date); + if (LLIST_NEXT(j)) + fputc(',', stream); + else + fputc('\n', stream); + } } + + fprintf(stream, "SUMMARY:%s\n", rev->mesg); + fputs("END:VEVENT\n", stream); + } } /* Export events. */ -static void -ical_export_events (FILE *stream) +static void ical_export_events(FILE * stream) { llist_item_t *i; char ical_date[BUFSIZ]; - LLIST_FOREACH (&eventlist, i) - { - struct event *ev = LLIST_TS_GET_DATA (i); - date_sec2date_fmt (ev->day, ICALDATEFMT, ical_date); - fputs ("BEGIN:VEVENT\n", stream); - fprintf (stream, "DTSTART:%s\n", ical_date); - fprintf (stream, "SUMMARY:%s\n", ev->mesg); - fputs ("END:VEVENT\n", stream); - } + LLIST_FOREACH(&eventlist, i) { + struct event *ev = LLIST_TS_GET_DATA(i); + date_sec2date_fmt(ev->day, ICALDATEFMT, ical_date); + fputs("BEGIN:VEVENT\n", stream); + fprintf(stream, "DTSTART:%s\n", ical_date); + fprintf(stream, "SUMMARY:%s\n", ev->mesg); + fputs("END:VEVENT\n", stream); + } } /* Export recurrent appointments. */ -static void -ical_export_recur_apoints (FILE *stream) +static void ical_export_recur_apoints(FILE * stream) { llist_item_t *i, *j; char ical_datetime[BUFSIZ]; char ical_date[BUFSIZ]; - LLIST_TS_LOCK (&recur_alist_p); - LLIST_TS_FOREACH (&recur_alist_p, i) - { - struct recur_apoint *rapt = LLIST_TS_GET_DATA (i); - - date_sec2date_fmt (rapt->start, ICALDATETIMEFMT, ical_datetime); - fputs ("BEGIN:VEVENT\n", stream); - fprintf (stream, "DTSTART:%s\n", ical_datetime); - fprintf (stream, "DURATION:PT0H0M%ldS\n", rapt->dur); - fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d", - ical_recur_type[rapt->rpt->type], rapt->rpt->freq); - - if (rapt->rpt->until != 0) - { - date_sec2date_fmt (rapt->rpt->until + HOURINSEC, ICALDATEFMT, - ical_date); - fprintf (stream, ";UNTIL=%s\n", ical_date); - } - else - fputc ('\n', stream); - - if (LLIST_FIRST (&rapt->exc)) - { - fputs ("EXDATE:", stream); - LLIST_FOREACH (&rapt->exc, j) - { - struct excp *exc = LLIST_GET_DATA (j); - date_sec2date_fmt (exc->st, ICALDATEFMT, ical_date); - fprintf (stream, "%s", ical_date); - if (LLIST_NEXT (j)) - fputc (',', stream); - else - fputc ('\n', stream); - } - } - - fprintf (stream, "SUMMARY:%s\n", rapt->mesg); - if (rapt->state & APOINT_NOTIFY) - ical_export_valarm (stream); - fputs ("END:VEVENT\n", stream); + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FOREACH(&recur_alist_p, i) { + struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); + + date_sec2date_fmt(rapt->start, ICALDATETIMEFMT, ical_datetime); + fputs("BEGIN:VEVENT\n", stream); + fprintf(stream, "DTSTART:%s\n", ical_datetime); + fprintf(stream, "DURATION:PT0H0M%ldS\n", rapt->dur); + fprintf(stream, "RRULE:FREQ=%s;INTERVAL=%d", + ical_recur_type[rapt->rpt->type], rapt->rpt->freq); + + if (rapt->rpt->until != 0) { + date_sec2date_fmt(rapt->rpt->until + HOURINSEC, ICALDATEFMT, ical_date); + fprintf(stream, ";UNTIL=%s\n", ical_date); + } else + fputc('\n', stream); + + if (LLIST_FIRST(&rapt->exc)) { + fputs("EXDATE:", stream); + LLIST_FOREACH(&rapt->exc, j) { + struct excp *exc = LLIST_GET_DATA(j); + date_sec2date_fmt(exc->st, ICALDATEFMT, ical_date); + fprintf(stream, "%s", ical_date); + if (LLIST_NEXT(j)) + fputc(',', stream); + else + fputc('\n', stream); + } } - LLIST_TS_UNLOCK (&recur_alist_p); + + fprintf(stream, "SUMMARY:%s\n", rapt->mesg); + if (rapt->state & APOINT_NOTIFY) + ical_export_valarm(stream); + fputs("END:VEVENT\n", stream); + } + LLIST_TS_UNLOCK(&recur_alist_p); } /* Export appointments. */ -static void -ical_export_apoints (FILE *stream) +static void ical_export_apoints(FILE * stream) { llist_item_t *i; char ical_datetime[BUFSIZ]; - LLIST_TS_LOCK (&alist_p); - LLIST_TS_FOREACH (&alist_p, i) - { - struct apoint *apt = LLIST_TS_GET_DATA (i); - date_sec2date_fmt (apt->start, ICALDATETIMEFMT, ical_datetime); - fputs ("BEGIN:VEVENT\n", stream); - fprintf (stream, "DTSTART:%s\n", ical_datetime); - fprintf (stream, "DURATION:P%ldDT%ldH%ldM%ldS\n", - apt->dur / DAYINSEC, - (apt->dur / HOURINSEC) % DAYINHOURS, - (apt->dur / MININSEC) % HOURINMIN, - apt->dur % MININSEC); - fprintf (stream, "SUMMARY:%s\n", apt->mesg); - if (apt->state & APOINT_NOTIFY) - ical_export_valarm (stream); - fputs ("END:VEVENT\n", stream); - } - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FOREACH(&alist_p, i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + date_sec2date_fmt(apt->start, ICALDATETIMEFMT, ical_datetime); + fputs("BEGIN:VEVENT\n", stream); + fprintf(stream, "DTSTART:%s\n", ical_datetime); + fprintf(stream, "DURATION:P%ldDT%ldH%ldM%ldS\n", + apt->dur / DAYINSEC, + (apt->dur / HOURINSEC) % DAYINHOURS, + (apt->dur / MININSEC) % HOURINMIN, apt->dur % MININSEC); + fprintf(stream, "SUMMARY:%s\n", apt->mesg); + if (apt->state & APOINT_NOTIFY) + ical_export_valarm(stream); + fputs("END:VEVENT\n", stream); + } + LLIST_TS_UNLOCK(&alist_p); } /* Export todo items. */ -static void -ical_export_todo (FILE *stream) +static void ical_export_todo(FILE * stream) { llist_item_t *i; - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_TS_GET_DATA (i); - if (todo->id < 0) /* completed items */ - continue; + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_TS_GET_DATA(i); + if (todo->id < 0) /* completed items */ + continue; - fputs ("BEGIN:VTODO\n", stream); - fprintf (stream, "PRIORITY:%d\n", todo->id); - fprintf (stream, "SUMMARY:%s\n", todo->mesg); - fputs ("END:VTODO\n", stream); - } + fputs("BEGIN:VTODO\n", stream); + fprintf(stream, "PRIORITY:%d\n", todo->id); + fprintf(stream, "SUMMARY:%s\n", todo->mesg); + fputs("END:VTODO\n", stream); + } } /* Print a header to describe import log report format. */ -static void -ical_log_init (FILE *log, float version) +static void ical_log_init(FILE * log, float version) { const char *header = - "+-------------------------------------------------------------------+\n" - "| Calcurse icalendar import log. |\n" - "| |\n" - "| Items imported from icalendar file, version %1.1f |\n" - "| Some items could not be imported, they are described hereafter. |\n" - "| The log line format is as follows: |\n" - "| |\n" - "| TYPE [LINE]: DESCRIPTION |\n" - "| |\n" - "| where: |\n" - "| * TYPE represents the item type ('VEVENT' or 'VTODO') |\n" - "| * LINE is the line in the input stream at which this item begins |\n" - "| * DESCRIPTION indicates why the item could not be imported |\n" - "+-------------------------------------------------------------------+\n\n"; + "+-------------------------------------------------------------------+\n" + "| Calcurse icalendar import log. |\n" + "| |\n" + "| Items imported from icalendar file, version %1.1f |\n" + "| Some items could not be imported, they are described hereafter. |\n" + "| The log line format is as follows: |\n" + "| |\n" + "| TYPE [LINE]: DESCRIPTION |\n" + "| |\n" + "| where: |\n" + "| * TYPE represents the item type ('VEVENT' or 'VTODO') |\n" + "| * LINE is the line in the input stream at which this item begins |\n" + "| * DESCRIPTION indicates why the item could not be imported |\n" + "+-------------------------------------------------------------------+\n\n"; if (log) - fprintf (log, header, version); + fprintf(log, header, version); } /* @@ -289,76 +265,66 @@ ical_log_init (FILE *log, float version) * first line inside the icalendar file), together with a message describing the * problem. */ -static void -ical_log (FILE *log, ical_types_e type, unsigned lineno, char *msg) +static void ical_log(FILE * log, ical_types_e type, unsigned lineno, char *msg) { - const char *typestr[ICAL_TYPES] = {"VEVENT", "VTODO"}; + const char *typestr[ICAL_TYPES] = { "VEVENT", "VTODO" }; - RETURN_IF (type < 0 || type >= ICAL_TYPES, _("unknown ical type")); + RETURN_IF(type < 0 || type >= ICAL_TYPES, _("unknown ical type")); if (log) - fprintf (log, "%s [%d]: %s\n", typestr[type], lineno, msg); + fprintf(log, "%s [%d]: %s\n", typestr[type], lineno, msg); } -static void -ical_store_todo (int priority, char *mesg, char *note) +static void ical_store_todo(int priority, char *mesg, char *note) { - todo_add (mesg, priority, note); - mem_free (mesg); - erase_note (¬e); + todo_add(mesg, priority, note); + mem_free(mesg); + erase_note(¬e); } static void -ical_store_event (char *mesg, char *note, long day, long end, ical_rpt_t *rpt, - llist_t *exc) +ical_store_event(char *mesg, char *note, long day, long end, ical_rpt_t * rpt, + llist_t * exc) { const int EVENTID = 1; - if (rpt) - { - recur_event_new (mesg, note, day, EVENTID, rpt->type, rpt->freq, - rpt->until, exc); - mem_free (rpt); - } - else if (end && end != day) - { - /* Here we have an event that spans over several days. */ - rpt = mem_malloc (sizeof (ical_rpt_t)); - rpt->type = RECUR_DAILY; - rpt->freq = 1; - rpt->count = 0; - rpt->until = end; - recur_event_new (mesg, note, day, EVENTID, rpt->type, rpt->freq, - rpt->until, exc); - mem_free (rpt); - } - else - { - event_new (mesg, note, day, EVENTID); - } - mem_free (mesg); - erase_note (¬e); + if (rpt) { + recur_event_new(mesg, note, day, EVENTID, rpt->type, rpt->freq, + rpt->until, exc); + mem_free(rpt); + } else if (end && end != day) { + /* Here we have an event that spans over several days. */ + rpt = mem_malloc(sizeof(ical_rpt_t)); + rpt->type = RECUR_DAILY; + rpt->freq = 1; + rpt->count = 0; + rpt->until = end; + recur_event_new(mesg, note, day, EVENTID, rpt->type, rpt->freq, + rpt->until, exc); + mem_free(rpt); + } else { + event_new(mesg, note, day, EVENTID); + } + mem_free(mesg); + erase_note(¬e); } static void -ical_store_apoint (char *mesg, char *note, long start, long dur, - ical_rpt_t *rpt, llist_t *exc, int has_alarm) +ical_store_apoint(char *mesg, char *note, long start, long dur, + ical_rpt_t * rpt, llist_t * exc, int has_alarm) { char state = 0L; if (has_alarm) state |= APOINT_NOTIFY; - if (rpt) - { - recur_apoint_new (mesg, note, start, dur, state, rpt->type, rpt->freq, - rpt->until, exc); - mem_free (rpt); - } - else - { - apoint_new (mesg, note, start, dur, state); - } - mem_free (mesg); - erase_note (¬e); + if (rpt) { + recur_apoint_new(mesg, note, start, dur, state, rpt->type, rpt->freq, + rpt->until, exc); + mem_free(rpt); + } else { + apoint_new(mesg, note, start, dur, state); + } + mem_free(mesg); + erase_note(¬e); } /* @@ -374,112 +340,103 @@ ical_store_apoint (char *mesg, char *note, long start, long dur, * Lines of text SHOULD NOT be longer than 75 octets, excluding the line * break. */ -static char * -ical_unformat_line (char *line) +static char *ical_unformat_line(char *line) { char *p, uline[BUFSIZ]; int len; - if (strlen (line) >= BUFSIZ) + if (strlen(line) >= BUFSIZ) return NULL; - memset (uline, 0, BUFSIZ); - for (len = 0, p = line; *p; p++) - { - switch (*p) - { - case '\\': - switch (*(p + 1)) - { - case 'n': - uline[len++] = '\n'; - p++; - break; - case 't': - uline[len++] = '\t'; - p++; - break; - case ';': - case ':': - case ',': - uline[len++] = *(p + 1); - p++; - break; - default: - uline[len++] = *p; - break; - } - break; - default: - uline[len++] = *p; - break; - } + memset(uline, 0, BUFSIZ); + for (len = 0, p = line; *p; p++) { + switch (*p) { + case '\\': + switch (*(p + 1)) { + case 'n': + uline[len++] = '\n'; + p++; + break; + case 't': + uline[len++] = '\t'; + p++; + break; + case ';': + case ':': + case ',': + uline[len++] = *(p + 1); + p++; + break; + default: + uline[len++] = *p; + break; + } + break; + default: + uline[len++] = *p; + break; } + } - return mem_strdup (uline); + return mem_strdup(uline); } static void -ical_readline_init (FILE *fdi, char *buf, char *lstore, unsigned *ln) +ical_readline_init(FILE * fdi, char *buf, char *lstore, unsigned *ln) { char *eol; *buf = *lstore = '\0'; - if (fgets (lstore, BUFSIZ, fdi)) - { - if ((eol = strchr(lstore, '\n')) != NULL) - *eol = '\0'; - (*ln)++; - } + if (fgets(lstore, BUFSIZ, fdi)) { + if ((eol = strchr(lstore, '\n')) != NULL) + *eol = '\0'; + (*ln)++; + } } -static int -ical_readline (FILE *fdi, char *buf, char *lstore, unsigned *ln) +static int ical_readline(FILE * fdi, char *buf, char *lstore, unsigned *ln) { char *eol; - strncpy (buf, lstore, BUFSIZ); + strncpy(buf, lstore, BUFSIZ); (*ln)++; - while (fgets (lstore, BUFSIZ, fdi) != NULL) - { - if ((eol = strchr(lstore, '\n')) != NULL) - *eol = '\0'; - if (*lstore != SPACE && *lstore != TAB) - break; - strncat (buf, lstore + 1, BUFSIZ - strlen (buf) - 1); - (*ln)++; - } + while (fgets(lstore, BUFSIZ, fdi) != NULL) { + if ((eol = strchr(lstore, '\n')) != NULL) + *eol = '\0'; + if (*lstore != SPACE && *lstore != TAB) + break; + strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1); + (*ln)++; + } - if (feof (fdi)) - { - *lstore = '\0'; - if (*buf == '\0') - return 0; - } + if (feof(fdi)) { + *lstore = '\0'; + if (*buf == '\0') + return 0; + } return 1; } static float -ical_chk_header (FILE *fd, char *buf, char *lstore, unsigned *lineno) +ical_chk_header(FILE * fd, char *buf, char *lstore, unsigned *lineno) { const int HEADER_MALFORMED = -1; const char icalheader[] = "BEGIN:VCALENDAR"; float version; - if (!ical_readline (fd, buf, lstore, lineno)) + if (!ical_readline(fd, buf, lstore, lineno)) return HEADER_MALFORMED; - str_toupper (buf); - if (strncmp (buf, icalheader, sizeof (icalheader) - 1) != 0) + str_toupper(buf); + if (strncmp(buf, icalheader, sizeof(icalheader) - 1) != 0) return HEADER_MALFORMED; - while (!sscanf (buf, "VERSION:%f", &version)) - { - if (!ical_readline (fd, buf, lstore, lineno)) - return HEADER_MALFORMED; - } + while (!sscanf(buf, "VERSION:%f", &version)) { + if (!ical_readline(fd, buf, lstore, lineno)) + return HEADER_MALFORMED; + } return version; } @@ -495,8 +452,7 @@ ical_chk_header (FILE *fd, char *buf, char *lstore, unsigned *lineno) * * The timezone is not yet handled by calcurse. */ -static long -ical_datetime2long (char *datestr, ical_vevent_e *type) +static long ical_datetime2long(char *datestr, ical_vevent_e * type) { const int NOTFOUND = 0, FORMAT_DATE = 3, FORMAT_DATETIME = 5; struct date date; @@ -504,50 +460,43 @@ ical_datetime2long (char *datestr, ical_vevent_e *type) long datelong; int format; - format = sscanf (datestr, "%04u%02u%02uT%02u%02u", - &date.yyyy, &date.mm, &date.dd, &hour, &min); - if (format == FORMAT_DATE) - { - if (type) - *type = EVENT; - datelong = date2sec (date, 0, 0); - } - else if (format == FORMAT_DATETIME) - { - if (type) - *type = APPOINTMENT; - datelong = date2sec (date, hour, min); - } - else - { - datelong = NOTFOUND; - } + format = sscanf(datestr, "%04u%02u%02uT%02u%02u", + &date.yyyy, &date.mm, &date.dd, &hour, &min); + if (format == FORMAT_DATE) { + if (type) + *type = EVENT; + datelong = date2sec(date, 0, 0); + } else if (format == FORMAT_DATETIME) { + if (type) + *type = APPOINTMENT; + datelong = date2sec(date, hour, min); + } else { + datelong = NOTFOUND; + } return datelong; } -static long -ical_durtime2long (char *timestr) +static long ical_durtime2long(char *timestr) { long timelong; char *p; - if ((p = strchr (timestr, 'T')) == NULL) + if ((p = strchr(timestr, 'T')) == NULL) timelong = 0; - else - { - int nbmatch; - struct { - unsigned hour, min, sec; - } time; - - p++; - memset (&time, 0, sizeof time); - nbmatch = sscanf (p, "%uH%uM%uS", &time.hour, &time.min, &time.sec); - if (nbmatch < 1 || nbmatch > 3) - timelong = 0; - else - timelong = time.hour * HOURINSEC + time.min * MININSEC + time.sec; - } + else { + int nbmatch; + struct { + unsigned hour, min, sec; + } time; + + p++; + memset(&time, 0, sizeof time); + nbmatch = sscanf(p, "%uH%uM%uS", &time.hour, &time.min, &time.sec); + if (nbmatch < 1 || nbmatch > 3) + timelong = 0; + else + timelong = time.hour * HOURINSEC + time.min * MININSEC + time.sec; + } return timelong; } @@ -576,8 +525,7 @@ ical_durtime2long (char *timestr) * A duration of 7 weeks would be: * P7W */ -static long -ical_dur2long (char *durstr) +static long ical_dur2long(char *durstr) { const int NOTFOUND = -1; long durlong; @@ -586,42 +534,34 @@ ical_dur2long (char *durstr) unsigned week, day; } date; - memset (&date, 0, sizeof date); - if ((p = strchr (durstr, 'P')) == NULL) + memset(&date, 0, sizeof date); + if ((p = strchr(durstr, 'P')) == NULL) durlong = NOTFOUND; - else - { + else { + p++; + if (*p == '-') + return NOTFOUND; + else if (*p == '+') p++; - if (*p == '-') - return NOTFOUND; - else if (*p == '+') - p++; - if (*p == 'T') /* dur-time */ - durlong = ical_durtime2long (p); - else if (strchr (p, 'W')) /* dur-week */ - { - if (sscanf (p, "%u", &date.week) == 1) - durlong = date.week * WEEKINDAYS * DAYINSEC; - else - durlong = NOTFOUND; - } + if (*p == 'T') /* dur-time */ + durlong = ical_durtime2long(p); + else if (strchr(p, 'W')) { /* dur-week */ + if (sscanf(p, "%u", &date.week) == 1) + durlong = date.week * WEEKINDAYS * DAYINSEC; else - { - if (strchr (p, 'D')) /* dur-date */ - { - if (sscanf (p, "%uD", &date.day) == 1) - { - durlong = date.day * DAYINSEC; - durlong += ical_durtime2long (p); - } - else - durlong = NOTFOUND; - } - else - durlong = NOTFOUND; - } + durlong = NOTFOUND; + } else { + if (strchr(p, 'D')) { /* dur-date */ + if (sscanf(p, "%uD", &date.day) == 1) { + durlong = date.day * DAYINSEC; + durlong += ical_durtime2long(p); + } else + durlong = NOTFOUND; + } else + durlong = NOTFOUND; } + } return durlong; } @@ -633,31 +573,29 @@ ical_dur2long (char *durstr) * range-bound the recurrence. The "DTSTART" property value, if specified, * counts as the first occurrence. */ -static long -ical_compute_rpt_until (long start, ical_rpt_t *rpt) +static long ical_compute_rpt_until(long start, ical_rpt_t * rpt) { long until; - switch (rpt->type) - { - case RECUR_DAILY: - until = date_sec_change (start, 0, rpt->freq * (rpt->count - 1)); - break; - case RECUR_WEEKLY: - until = date_sec_change (start, 0, - rpt->freq * WEEKINDAYS * (rpt->count - 1)); - break; - case RECUR_MONTHLY: - until = date_sec_change (start, rpt->freq * (rpt->count - 1), 0); - break; - case RECUR_YEARLY: - until = date_sec_change (start, rpt->freq * 12 * (rpt->count - 1), 0); - break; - default: - until = 0; - break; - /* NOTREACHED */ - } + switch (rpt->type) { + case RECUR_DAILY: + until = date_sec_change(start, 0, rpt->freq * (rpt->count - 1)); + break; + case RECUR_WEEKLY: + until = date_sec_change(start, 0, + rpt->freq * WEEKINDAYS * (rpt->count - 1)); + break; + case RECUR_MONTHLY: + until = date_sec_change(start, rpt->freq * (rpt->count - 1), 0); + break; + case RECUR_YEARLY: + until = date_sec_change(start, rpt->freq * 12 * (rpt->count - 1), 0); + break; + default: + until = 0; + break; + /* NOTREACHED */ + } return until; } @@ -698,9 +636,8 @@ ical_compute_rpt_until (long start, ical_rpt_t *rpt) * ( ";" x-name "=" text ) * ) */ -static ical_rpt_t * -ical_read_rrule (FILE *log, char *rrulestr, unsigned *noskipped, - const int itemline) +static ical_rpt_t *ical_read_rrule(FILE * log, char *rrulestr, + unsigned *noskipped, const int itemline) { const char daily[] = "DAILY"; const char weekly[] = "WEEKLY"; @@ -713,115 +650,92 @@ ical_read_rrule (FILE *log, char *rrulestr, unsigned *noskipped, char *p; rpt = NULL; - if ((p = strchr (rrulestr, ':')) != NULL) - { - char freqstr[BUFSIZ]; - - p++; - rpt = mem_malloc (sizeof (ical_rpt_t)); - memset (rpt, 0, sizeof(ical_rpt_t)); - if (sscanf (p, "FREQ=%s", freqstr) != 1) - { - ical_log (log, ICAL_VEVENT, itemline, - _("recurrence frequence not found.")); - (*noskipped)++; - mem_free (rpt); - return NULL; - } - else - { - if (strncmp (freqstr, daily, sizeof (daily) - 1) == 0) - rpt->type = RECUR_DAILY; - else if (strncmp (freqstr, weekly, sizeof (weekly) - 1) == 0) - rpt->type = RECUR_WEEKLY; - else if (strncmp (freqstr, monthly, sizeof (monthly) - 1) == 0) - rpt->type = RECUR_MONTHLY; - else if (strncmp (freqstr, yearly, sizeof (yearly) - 1) == 0) - rpt->type = RECUR_YEARLY; - else - { - ical_log (log, ICAL_VEVENT, itemline, - _("recurrence frequence not recognized.")); - (*noskipped)++; - mem_free (rpt); - return NULL; - } - } - /* - The UNTIL rule part defines a date-time value which bounds the - recurrence rule in an inclusive manner. If not present, and the - COUNT rule part is also not present, the RRULE is considered to - repeat forever. - - The COUNT rule part defines the number of occurrences at which to - range-bound the recurrence. The "DTSTART" property value, if - specified, counts as the first occurrence. - */ - if ((p = strstr (rrulestr, "UNTIL")) != NULL) - { - char *untilstr; - - untilstr = strchr (p, '='); - rpt->until = ical_datetime2long (++untilstr, NULL); - } - else - { - unsigned cnt; - char *countstr; - - if ((countstr = strstr (rrulestr, count)) != NULL) - { - countstr += sizeof (count) - 1; - if (sscanf (countstr, "%u", &cnt) != 1) - { - rpt->until = 0; - /* endless repetition */ - } - else - { - rpt->count = cnt; - } - } - else - rpt->until = 0; - } - - if ((p = strstr (rrulestr, interv)) != NULL) - { - p += sizeof (interv) - 1; - if (sscanf (p, "%u", &interval) != 1) - { - rpt->freq = 1; - /* default frequence if none specified */ - } - else - { - rpt->freq = interval; - } - } - else - { - rpt->freq = 1; + if ((p = strchr(rrulestr, ':')) != NULL) { + char freqstr[BUFSIZ]; + + p++; + rpt = mem_malloc(sizeof(ical_rpt_t)); + memset(rpt, 0, sizeof(ical_rpt_t)); + if (sscanf(p, "FREQ=%s", freqstr) != 1) { + ical_log(log, ICAL_VEVENT, itemline, + _("recurrence frequence not found.")); + (*noskipped)++; + mem_free(rpt); + return NULL; + } else { + if (strncmp(freqstr, daily, sizeof(daily) - 1) == 0) + rpt->type = RECUR_DAILY; + else if (strncmp(freqstr, weekly, sizeof(weekly) - 1) == 0) + rpt->type = RECUR_WEEKLY; + else if (strncmp(freqstr, monthly, sizeof(monthly) - 1) == 0) + rpt->type = RECUR_MONTHLY; + else if (strncmp(freqstr, yearly, sizeof(yearly) - 1) == 0) + rpt->type = RECUR_YEARLY; + else { + ical_log(log, ICAL_VEVENT, itemline, + _("recurrence frequence not recognized.")); + (*noskipped)++; + mem_free(rpt); + return NULL; + } + } + /* + The UNTIL rule part defines a date-time value which bounds the + recurrence rule in an inclusive manner. If not present, and the + COUNT rule part is also not present, the RRULE is considered to + repeat forever. + + The COUNT rule part defines the number of occurrences at which to + range-bound the recurrence. The "DTSTART" property value, if + specified, counts as the first occurrence. + */ + if ((p = strstr(rrulestr, "UNTIL")) != NULL) { + char *untilstr; + + untilstr = strchr(p, '='); + rpt->until = ical_datetime2long(++untilstr, NULL); + } else { + unsigned cnt; + char *countstr; + + if ((countstr = strstr(rrulestr, count)) != NULL) { + countstr += sizeof(count) - 1; + if (sscanf(countstr, "%u", &cnt) != 1) { + rpt->until = 0; + /* endless repetition */ + } else { + rpt->count = cnt; } + } else + rpt->until = 0; } - else - { - ical_log (log, ICAL_VEVENT, itemline, _("recurrence rule malformed.")); - (*noskipped)++; + + if ((p = strstr(rrulestr, interv)) != NULL) { + p += sizeof(interv) - 1; + if (sscanf(p, "%u", &interval) != 1) { + rpt->freq = 1; + /* default frequence if none specified */ + } else { + rpt->freq = interval; + } + } else { + rpt->freq = 1; } + } else { + ical_log(log, ICAL_VEVENT, itemline, _("recurrence rule malformed.")); + (*noskipped)++; + } return rpt; } -static void -ical_add_exc (llist_t *exc_head, long date) +static void ical_add_exc(llist_t * exc_head, long date) { - if (date != 0) - { - struct excp *exc = mem_malloc (sizeof (struct excp)); - exc->st = date; + if (date != 0) { + struct excp *exc = mem_malloc(sizeof(struct excp)); + exc->st = date; - LLIST_ADD (exc_head, exc); - } + LLIST_ADD(exc_head, exc); + } } /* @@ -829,296 +743,241 @@ ical_add_exc (llist_t *exc_head, long date) * recurring calendar component. */ static void -ical_read_exdate (llist_t *exc, FILE *log, char *exstr, unsigned *noskipped, - const int itemline) +ical_read_exdate(llist_t * exc, FILE * log, char *exstr, unsigned *noskipped, + const int itemline) { char *p, *q; long date; - LLIST_INIT (exc); - if ((p = strchr (exstr, ':')) != NULL) - { - p++; - while ((q = strchr (p, ',')) != NULL) - { - char buf[BUFSIZ]; - const int buflen = q - p; - - strncpy (buf, p, buflen); - buf[buflen] = '\0'; - date = ical_datetime2long (buf, NULL); - ical_add_exc (exc, date); - p = ++q; - } - date = ical_datetime2long (p, NULL); - ical_add_exc (exc, date); - } - else - { - ical_log (log, ICAL_VEVENT, itemline, - _("recurrence exception dates malformed.")); - (*noskipped)++; + LLIST_INIT(exc); + if ((p = strchr(exstr, ':')) != NULL) { + p++; + while ((q = strchr(p, ',')) != NULL) { + char buf[BUFSIZ]; + const int buflen = q - p; + + strncpy(buf, p, buflen); + buf[buflen] = '\0'; + date = ical_datetime2long(buf, NULL); + ical_add_exc(exc, date); + p = ++q; } + date = ical_datetime2long(p, NULL); + ical_add_exc(exc, date); + } else { + ical_log(log, ICAL_VEVENT, itemline, + _("recurrence exception dates malformed.")); + (*noskipped)++; + } } /* Return an allocated string containing the name of the newly created note. */ -static char * -ical_read_note (char *line, unsigned *noskipped, ical_vevent_e item_type, - const int itemline, FILE *log) +static char *ical_read_note(char *line, unsigned *noskipped, + ical_vevent_e item_type, const int itemline, + FILE * log) { char *p, *notestr, *note; - if ((p = strchr (line, ':')) != NULL) - { - p++; - notestr = ical_unformat_line (p); - if (notestr == NULL) - { - ical_log (log, item_type, itemline, - _("could not get entire item description.")); - (*noskipped)++; - return NULL; - } - else if (strlen (notestr) == 0) - { - mem_free (notestr); - return NULL; - } - else - { - note = generate_note (notestr); - mem_free (notestr); - return note; - } - } - else - { - ical_log (log, item_type, itemline, _("description malformed.")); + if ((p = strchr(line, ':')) != NULL) { + p++; + notestr = ical_unformat_line(p); + if (notestr == NULL) { + ical_log(log, item_type, itemline, + _("could not get entire item description.")); (*noskipped)++; return NULL; + } else if (strlen(notestr) == 0) { + mem_free(notestr); + return NULL; + } else { + note = generate_note(notestr); + mem_free(notestr); + return note; } + } else { + ical_log(log, item_type, itemline, _("description malformed.")); + (*noskipped)++; + return NULL; + } } /* Returns an allocated string containing the ical item summary. */ -static char * -ical_read_summary (char *line) +static char *ical_read_summary(char *line) { char *p, *summary; - if ((p = strchr (line, ':')) != NULL) - { - p++; - summary = ical_unformat_line (p); - return summary; - } - else + if ((p = strchr(line, ':')) != NULL) { + p++; + summary = ical_unformat_line(p); + return summary; + } else return NULL; } static void -ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints, - unsigned *noskipped, char *buf, char *lstore, - unsigned *lineno) +ical_read_event(FILE * fdi, FILE * log, unsigned *noevents, unsigned *noapoints, + unsigned *noskipped, char *buf, char *lstore, unsigned *lineno) { const int ITEMLINE = *lineno; const char endevent[] = "END:VEVENT"; - const char summary[] = "SUMMARY"; - const char dtstart[] = "DTSTART"; - const char dtend[] = "DTEND"; + const char summary[] = "SUMMARY"; + const char dtstart[] = "DTSTART"; + const char dtend[] = "DTEND"; const char duration[] = "DURATION"; - const char rrule[] = "RRULE"; - const char exdate[] = "EXDATE"; - const char alarm[] = "BEGIN:VALARM"; + const char rrule[] = "RRULE"; + const char exdate[] = "EXDATE"; + const char alarm[] = "BEGIN:VALARM"; const char endalarm[] = "END:VALARM"; - const char desc[] = "DESCRIPTION"; + const char desc[] = "DESCRIPTION"; ical_vevent_e vevent_type; char *p, buf_upper[BUFSIZ]; struct { - llist_t exc; - ical_rpt_t *rpt; - char *mesg, *note; - long start, end, dur; - int has_alarm; + llist_t exc; + ical_rpt_t *rpt; + char *mesg, *note; + long start, end, dur; + int has_alarm; } vevent; int skip_alarm; vevent_type = UNDEFINED; - memset (&vevent, 0, sizeof vevent); + memset(&vevent, 0, sizeof vevent); skip_alarm = 0; - while (ical_readline (fdi, buf, lstore, lineno)) - { - strncpy (buf_upper, buf, BUFSIZ); - buf_upper[BUFSIZ - 1] = '\0'; - str_toupper (buf_upper); - - if (skip_alarm) - { - /* Need to skip VALARM properties because some keywords could - interfere, such as DURATION, SUMMARY,.. */ - if (strncmp (buf_upper, endalarm, sizeof (endalarm) - 1) == 0) - skip_alarm = 0; - continue; - } - if (strncmp (buf_upper, endevent, sizeof (endevent) - 1) == 0) - { - if (vevent.mesg) - { - if (vevent.rpt && vevent.rpt->count) - vevent.rpt->until = ical_compute_rpt_until (vevent.start, - vevent.rpt); - - switch (vevent_type) - { - case APPOINTMENT: - if (vevent.start == 0) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("appointment has no start time.")); - goto cleanup; - } - if (vevent.dur == 0) - { - if (vevent.end == 0) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("could not compute duration " - "(no end time).")); - goto cleanup; - } - else if (vevent.start == vevent.end) - { - vevent_type = EVENT; - vevent.end = 0L; - ical_store_event (vevent.mesg, vevent.note, - vevent.start, vevent.end, - vevent.rpt, &vevent.exc); - (*noevents)++; - return; - } - else - { - vevent.dur = vevent.end - vevent.start; - if (vevent.dur < 0) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("item has a negative duration.")); - goto cleanup; - } - } - } - ical_store_apoint (vevent.mesg, vevent.note, vevent.start, - vevent.dur, vevent.rpt, &vevent.exc, - vevent.has_alarm); - (*noapoints)++; - break; - case EVENT: - if (vevent.start == 0) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("event date is not defined.")); - goto cleanup; - } - ical_store_event (vevent.mesg, vevent.note, vevent.start, - vevent.end, vevent.rpt, &vevent.exc); - (*noevents)++; - break; - case UNDEFINED: - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("item could not be identified.")); - goto cleanup; - break; - } - } - else - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("could not retrieve item summary.")); + while (ical_readline(fdi, buf, lstore, lineno)) { + strncpy(buf_upper, buf, BUFSIZ); + buf_upper[BUFSIZ - 1] = '\0'; + str_toupper(buf_upper); + + if (skip_alarm) { + /* Need to skip VALARM properties because some keywords could + interfere, such as DURATION, SUMMARY,.. */ + if (strncmp(buf_upper, endalarm, sizeof(endalarm) - 1) == 0) + skip_alarm = 0; + continue; + } + if (strncmp(buf_upper, endevent, sizeof(endevent) - 1) == 0) { + if (vevent.mesg) { + if (vevent.rpt && vevent.rpt->count) + vevent.rpt->until = ical_compute_rpt_until(vevent.start, vevent.rpt); + + switch (vevent_type) { + case APPOINTMENT: + if (vevent.start == 0) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("appointment has no start time.")); + goto cleanup; + } + if (vevent.dur == 0) { + if (vevent.end == 0) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("could not compute duration " "(no end time).")); goto cleanup; + } else if (vevent.start == vevent.end) { + vevent_type = EVENT; + vevent.end = 0L; + ical_store_event(vevent.mesg, vevent.note, + vevent.start, vevent.end, + vevent.rpt, &vevent.exc); + (*noevents)++; + return; + } else { + vevent.dur = vevent.end - vevent.start; + if (vevent.dur < 0) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("item has a negative duration.")); + goto cleanup; + } } - return; + } + ical_store_apoint(vevent.mesg, vevent.note, vevent.start, + vevent.dur, vevent.rpt, &vevent.exc, + vevent.has_alarm); + (*noapoints)++; + break; + case EVENT: + if (vevent.start == 0) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("event date is not defined.")); + goto cleanup; + } + ical_store_event(vevent.mesg, vevent.note, vevent.start, + vevent.end, vevent.rpt, &vevent.exc); + (*noevents)++; + break; + case UNDEFINED: + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("item could not be identified.")); + goto cleanup; + break; } - else - { - if (strncmp (buf_upper, dtstart, sizeof (dtstart) - 1) == 0) - { - if ((p = strchr (buf, ':')) != NULL) - vevent.start = ical_datetime2long (++p, &vevent_type); - if (!vevent.start) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("could not retrieve event start time.")); - goto cleanup; - } - } - else if (strncmp (buf_upper, dtend, sizeof (dtend) - 1) == 0) - { - if ((p = strchr (buf, ':')) != NULL) - vevent.end = ical_datetime2long (++p, &vevent_type); - if (!vevent.end) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("could not retrieve event end time.")); - goto cleanup; - } - } - else if (strncmp (buf_upper, duration, sizeof (duration) - 1) == 0) - { - if ((vevent.dur = ical_dur2long (buf)) <= 0) - { - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("item duration malformed.")); - goto cleanup; - } - } - else if (strncmp (buf_upper, rrule, sizeof (rrule) - 1) == 0) - { - vevent.rpt = ical_read_rrule (log, buf, noskipped, ITEMLINE); - } - else if (strncmp (buf_upper, exdate, sizeof (exdate) - 1) == 0) - { - ical_read_exdate (&vevent.exc, log, buf, noskipped, ITEMLINE); - } - else if (strncmp (buf_upper, summary, sizeof (summary) - 1) == 0) - { - vevent.mesg = ical_read_summary (buf); - } - else if (strncmp (buf_upper, alarm, sizeof (alarm) - 1) == 0) - { - skip_alarm = 1; - vevent.has_alarm = 1; - } - else if (strncmp (buf_upper, desc, sizeof (desc) - 1) == 0) - { - vevent.note = ical_read_note (buf, noskipped, ICAL_VEVENT, - ITEMLINE, log); - } + } else { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("could not retrieve item summary.")); + goto cleanup; + } + return; + } else { + if (strncmp(buf_upper, dtstart, sizeof(dtstart) - 1) == 0) { + if ((p = strchr(buf, ':')) != NULL) + vevent.start = ical_datetime2long(++p, &vevent_type); + if (!vevent.start) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("could not retrieve event start time.")); + goto cleanup; + } + } else if (strncmp(buf_upper, dtend, sizeof(dtend) - 1) == 0) { + if ((p = strchr(buf, ':')) != NULL) + vevent.end = ical_datetime2long(++p, &vevent_type); + if (!vevent.end) { + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("could not retrieve event end time.")); + goto cleanup; + } + } else if (strncmp(buf_upper, duration, sizeof(duration) - 1) == 0) { + if ((vevent.dur = ical_dur2long(buf)) <= 0) { + ical_log(log, ICAL_VEVENT, ITEMLINE, _("item duration malformed.")); + goto cleanup; } + } else if (strncmp(buf_upper, rrule, sizeof(rrule) - 1) == 0) { + vevent.rpt = ical_read_rrule(log, buf, noskipped, ITEMLINE); + } else if (strncmp(buf_upper, exdate, sizeof(exdate) - 1) == 0) { + ical_read_exdate(&vevent.exc, log, buf, noskipped, ITEMLINE); + } else if (strncmp(buf_upper, summary, sizeof(summary) - 1) == 0) { + vevent.mesg = ical_read_summary(buf); + } else if (strncmp(buf_upper, alarm, sizeof(alarm) - 1) == 0) { + skip_alarm = 1; + vevent.has_alarm = 1; + } else if (strncmp(buf_upper, desc, sizeof(desc) - 1) == 0) { + vevent.note = ical_read_note(buf, noskipped, ICAL_VEVENT, + ITEMLINE, log); + } } - ical_log (log, ICAL_VEVENT, ITEMLINE, - _("The ical file seems to be malformed. " - "The end of item was not found.")); + } + ical_log(log, ICAL_VEVENT, ITEMLINE, + _("The ical file seems to be malformed. " + "The end of item was not found.")); cleanup: if (vevent.note) - mem_free (vevent.note); + mem_free(vevent.note); if (vevent.mesg) - mem_free (vevent.mesg); + mem_free(vevent.mesg); if (vevent.rpt) - mem_free (vevent.rpt); - LLIST_FREE (&vevent.exc); + mem_free(vevent.rpt); + LLIST_FREE(&vevent.exc); (*noskipped)++; } static void -ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped, - char *buf, char *lstore, unsigned *lineno) +ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped, + char *buf, char *lstore, unsigned *lineno) { - const char endtodo[] = "END:VTODO"; - const char summary[] = "SUMMARY"; - const char alarm[] = "BEGIN:VALARM"; + const char endtodo[] = "END:VTODO"; + const char summary[] = "SUMMARY"; + const char alarm[] = "BEGIN:VALARM"; const char endalarm[] = "END:VALARM"; - const char desc[] = "DESCRIPTION"; + const char desc[] = "DESCRIPTION"; const int LOWEST = 9; const int ITEMLINE = *lineno; char buf_upper[BUFSIZ]; @@ -1128,128 +987,104 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped, } vtodo; int skip_alarm; - memset (&vtodo, 0, sizeof vtodo); + memset(&vtodo, 0, sizeof vtodo); skip_alarm = 0; - while (ical_readline (fdi, buf, lstore, lineno)) - { - strncpy (buf_upper, buf, BUFSIZ); - buf_upper[BUFSIZ - 1] = '\0'; - str_toupper (buf_upper); - if (skip_alarm) - { - /* Need to skip VALARM properties because some keywords could - interfere, such as DURATION, SUMMARY,.. */ - if (strncmp (buf_upper, endalarm, sizeof (endalarm) - 1) == 0) - skip_alarm = 0; - continue; - } - if (strncmp (buf_upper, endtodo, sizeof (endtodo) - 1) == 0) - { - if (!vtodo.has_priority) - vtodo.priority = LOWEST; - if (vtodo.mesg) - { - ical_store_todo (vtodo.priority, vtodo.mesg, vtodo.note); - (*notodos)++; - } - else - { - ical_log (log, ICAL_VTODO, ITEMLINE, - _("could not retrieve item summary.")); - goto cleanup; - } - return; - } - else - { - int tmpint; - - if (sscanf (buf_upper, "PRIORITY:%d", &tmpint) == 1) - { - if (tmpint <= 9 && tmpint >= 1) - { - vtodo.priority = tmpint; - vtodo.has_priority = 1; - } - else - { - ical_log (log, ICAL_VTODO, ITEMLINE, - _("item priority is not acceptable " - "(must be between 1 and 9).")); - vtodo.priority = LOWEST; - } - } - else if (strncmp (buf_upper, summary, sizeof (summary) - 1) == 0) - { - vtodo.mesg = ical_read_summary (buf); - } - else if (strncmp (buf_upper, alarm, sizeof (alarm) - 1) == 0) - { - skip_alarm = 1; - } - else if (strncmp (buf_upper, desc, sizeof (desc) - 1) == 0) - { - vtodo.note = ical_read_note (buf, noskipped, ICAL_VTODO, - ITEMLINE, log); - } + while (ical_readline(fdi, buf, lstore, lineno)) { + strncpy(buf_upper, buf, BUFSIZ); + buf_upper[BUFSIZ - 1] = '\0'; + str_toupper(buf_upper); + if (skip_alarm) { + /* Need to skip VALARM properties because some keywords could + interfere, such as DURATION, SUMMARY,.. */ + if (strncmp(buf_upper, endalarm, sizeof(endalarm) - 1) == 0) + skip_alarm = 0; + continue; + } + if (strncmp(buf_upper, endtodo, sizeof(endtodo) - 1) == 0) { + if (!vtodo.has_priority) + vtodo.priority = LOWEST; + if (vtodo.mesg) { + ical_store_todo(vtodo.priority, vtodo.mesg, vtodo.note); + (*notodos)++; + } else { + ical_log(log, ICAL_VTODO, ITEMLINE, + _("could not retrieve item summary.")); + goto cleanup; + } + return; + } else { + int tmpint; + + if (sscanf(buf_upper, "PRIORITY:%d", &tmpint) == 1) { + if (tmpint <= 9 && tmpint >= 1) { + vtodo.priority = tmpint; + vtodo.has_priority = 1; + } else { + ical_log(log, ICAL_VTODO, ITEMLINE, + _("item priority is not acceptable " + "(must be between 1 and 9).")); + vtodo.priority = LOWEST; } + } else if (strncmp(buf_upper, summary, sizeof(summary) - 1) == 0) { + vtodo.mesg = ical_read_summary(buf); + } else if (strncmp(buf_upper, alarm, sizeof(alarm) - 1) == 0) { + skip_alarm = 1; + } else if (strncmp(buf_upper, desc, sizeof(desc) - 1) == 0) { + vtodo.note = ical_read_note(buf, noskipped, ICAL_VTODO, ITEMLINE, log); + } } - ical_log (log, ICAL_VTODO, ITEMLINE, - _("The ical file seems to be malformed. " - "The end of item was not found.")); + } + ical_log(log, ICAL_VTODO, ITEMLINE, + _("The ical file seems to be malformed. " + "The end of item was not found.")); cleanup: if (vtodo.note) - mem_free (vtodo.note); + mem_free(vtodo.note); if (vtodo.mesg) - mem_free (vtodo.mesg); + mem_free(vtodo.mesg); (*noskipped)++; } /* Import calcurse data. */ void -ical_import_data (FILE *stream, FILE *log, unsigned *events, unsigned *apoints, - unsigned *todos, unsigned *lines, unsigned *skipped) +ical_import_data(FILE * stream, FILE * log, unsigned *events, unsigned *apoints, + unsigned *todos, unsigned *lines, unsigned *skipped) { const char vevent[] = "BEGIN:VEVENT"; const char vtodo[] = "BEGIN:VTODO"; char buf[BUFSIZ], lstore[BUFSIZ]; float ical_version; - ical_readline_init (stream, buf, lstore, lines); - ical_version = ical_chk_header (stream, buf, lstore, lines); - RETURN_IF (ical_version < 0, - _("Warning: ical header malformed or wrong version number. " - "Aborting...")); - - ical_log_init (log, ical_version); - - while (ical_readline (stream, buf, lstore, lines)) - { - (*lines)++; - str_toupper (buf); - if (strncmp (buf, vevent, sizeof (vevent) - 1) == 0) - { - ical_read_event (stream, log, events, apoints, skipped, buf, lstore, - lines); - } - else if (strncmp (buf, vtodo, sizeof (vtodo) - 1) == 0) - { - ical_read_todo (stream, log, todos, skipped, buf, lstore, lines); - } + ical_readline_init(stream, buf, lstore, lines); + ical_version = ical_chk_header(stream, buf, lstore, lines); + RETURN_IF(ical_version < 0, + _("Warning: ical header malformed or wrong version number. " + "Aborting...")); + + ical_log_init(log, ical_version); + + while (ical_readline(stream, buf, lstore, lines)) { + (*lines)++; + str_toupper(buf); + if (strncmp(buf, vevent, sizeof(vevent) - 1) == 0) { + ical_read_event(stream, log, events, apoints, skipped, buf, lstore, + lines); + } else if (strncmp(buf, vtodo, sizeof(vtodo) - 1) == 0) { + ical_read_todo(stream, log, todos, skipped, buf, lstore, lines); } + } } /* Export calcurse data. */ -void -ical_export_data (FILE *stream) +void ical_export_data(FILE * stream) { - ical_export_header (stream); - ical_export_recur_events (stream); - ical_export_events (stream); - ical_export_recur_apoints (stream); - ical_export_apoints (stream); - ical_export_todo (stream); - ical_export_footer (stream); + ical_export_header(stream); + ical_export_recur_events(stream); + ical_export_events(stream); + ical_export_recur_apoints(stream); + ical_export_apoints(stream); + ical_export_todo(stream); + ical_export_footer(stream); } @@ -68,24 +68,23 @@ enum { struct ht_keybindings_s { const char *label; - enum key key; - HTABLE_ENTRY (ht_keybindings_s); + enum key key; + HTABLE_ENTRY(ht_keybindings_s); }; -static void load_keys_ht_getkey (struct ht_keybindings_s *, const char **, - int *); -static int load_keys_ht_compare (struct ht_keybindings_s *, - struct ht_keybindings_s *); +static void load_keys_ht_getkey(struct ht_keybindings_s *, const char **, + int *); +static int load_keys_ht_compare(struct ht_keybindings_s *, + struct ht_keybindings_s *); #define HSIZE 256 -HTABLE_HEAD (ht_keybindings, HSIZE, ht_keybindings_s); -HTABLE_PROTOTYPE (ht_keybindings, ht_keybindings_s) -HTABLE_GENERATE (ht_keybindings, ht_keybindings_s, load_keys_ht_getkey, - load_keys_ht_compare) +HTABLE_HEAD(ht_keybindings, HSIZE, ht_keybindings_s); +HTABLE_PROTOTYPE(ht_keybindings, ht_keybindings_s) + HTABLE_GENERATE(ht_keybindings, ht_keybindings_s, load_keys_ht_getkey, + load_keys_ht_compare) /* Draw a progress bar while saving, loading or exporting data. */ -static void -progress_bar (progress_bar_t type, int progress) +static void progress_bar(progress_bar_t type, int progress) { #define NBFILES 4 #define NBEXPORTED 3 @@ -107,114 +106,107 @@ progress_bar (progress_bar_t type, int progress) "[appointments]", "[ todo ]" }; - int ipos = LABELENGTH + 2; + int ipos = LABELENGTH + 2; int epos[NBFILES]; /* progress bar length init. */ ipos = LABELENGTH + 2; steps = (type == PROGRESS_BAR_EXPORT) ? NBEXPORTED : NBFILES; - step = floor (col / (steps + 1)); + step = floor(col / (steps + 1)); for (i = 0; i < steps - 1; i++) epos[i] = (i + 2) * step; epos[steps - 1] = col - 2; - switch (type) - { - case PROGRESS_BAR_SAVE: - EXIT_IF (progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); - status_mesg (mesg_sav, file[progress]); - break; - case PROGRESS_BAR_LOAD: - EXIT_IF (progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); - status_mesg (mesg_load, file[progress]); - break; - case PROGRESS_BAR_EXPORT: - EXIT_IF (progress < 0 - || progress > PROGRESS_BAR_EXPORT_TODO, "%s", error_msg); - status_mesg (mesg_export, data[progress]); - break; - } + switch (type) { + case PROGRESS_BAR_SAVE: + EXIT_IF(progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); + status_mesg(mesg_sav, file[progress]); + break; + case PROGRESS_BAR_LOAD: + EXIT_IF(progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); + status_mesg(mesg_load, file[progress]); + break; + case PROGRESS_BAR_EXPORT: + EXIT_IF(progress < 0 + || progress > PROGRESS_BAR_EXPORT_TODO, "%s", error_msg); + status_mesg(mesg_export, data[progress]); + break; + } /* Draw the progress bar. */ - mvwprintw (win[STA].p, 1, ipos, barchar); - mvwprintw (win[STA].p, 1, epos[steps - 1], barchar); - custom_apply_attr (win[STA].p, ATTR_HIGHEST); + mvwprintw(win[STA].p, 1, ipos, barchar); + mvwprintw(win[STA].p, 1, epos[steps - 1], barchar); + custom_apply_attr(win[STA].p, ATTR_HIGHEST); for (i = ipos + 1; i < epos[progress]; i++) - mvwaddch (win[STA].p, 1, i, ' ' | A_REVERSE); - custom_remove_attr (win[STA].p, ATTR_HIGHEST); - wmove (win[STA].p, 0, 0); - wins_wrefresh (win[STA].p); + mvwaddch(win[STA].p, 1, i, ' ' | A_REVERSE); + custom_remove_attr(win[STA].p, ATTR_HIGHEST); + wmove(win[STA].p, 0, 0); + wins_wrefresh(win[STA].p); #undef NBFILES #undef NBEXPORTED #undef LABELENGTH } /* Ask user for a file name to export data to. */ -static FILE * -get_export_stream (enum export_type type) +static FILE *get_export_stream(enum export_type type) { FILE *stream; int cancel; char *home, *stream_name; const char *question = _("Choose the file used to export calcurse data:"); const char *wrong_name = - _("The file cannot be accessed, please enter another file name."); + _("The file cannot be accessed, please enter another file name."); const char *press_enter = _("Press [ENTER] to continue."); - const char *file_ext[IO_EXPORT_NBTYPES] = {"ical", "txt"}; + const char *file_ext[IO_EXPORT_NBTYPES] = { "ical", "txt" }; stream = NULL; - stream_name = (char *) mem_malloc (BUFSIZ); - if ((home = getenv ("HOME")) != NULL) - snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", home, file_ext[type]); + stream_name = (char *)mem_malloc(BUFSIZ); + if ((home = getenv("HOME")) != NULL) + snprintf(stream_name, BUFSIZ, "%s/calcurse.%s", home, file_ext[type]); else - snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", get_tempdir (), - file_ext[type]); - - while (stream == NULL) - { - status_mesg (question, ""); - cancel = updatestring (win[STA].p, &stream_name, 0, 1); - if (cancel) - { - mem_free (stream_name); - return NULL; - } - stream = fopen (stream_name, "w"); - if (stream == NULL) - { - status_mesg (wrong_name, press_enter); - wgetch (win[STA].p); - } + snprintf(stream_name, BUFSIZ, "%s/calcurse.%s", get_tempdir(), + file_ext[type]); + + while (stream == NULL) { + status_mesg(question, ""); + cancel = updatestring(win[STA].p, &stream_name, 0, 1); + if (cancel) { + mem_free(stream_name); + return NULL; } - mem_free (stream_name); + stream = fopen(stream_name, "w"); + if (stream == NULL) { + status_mesg(wrong_name, press_enter); + wgetch(win[STA].p); + } + } + mem_free(stream_name); return stream; } /* Append a line to a file. */ -unsigned -io_fprintln (const char *fname, const char *fmt, ...) +unsigned io_fprintln(const char *fname, const char *fmt, ...) { FILE *fp; va_list ap; char buf[BUFSIZ]; int ret; - fp = fopen (fname, "a"); - RETVAL_IF (!fp, 0, _("Failed to open \"%s\", - %s\n"), - fname, strerror (errno)); + fp = fopen(fname, "a"); + RETVAL_IF(!fp, 0, _("Failed to open \"%s\", - %s\n"), fname, strerror(errno)); - va_start (ap, fmt); - ret = vsnprintf (buf, sizeof buf, fmt, ap); - RETVAL_IF (ret < 0, 0, _("Failed to build message\n")); - va_end (ap); + va_start(ap, fmt); + ret = vsnprintf(buf, sizeof buf, fmt, ap); + RETVAL_IF(ret < 0, 0, _("Failed to build message\n")); + va_end(ap); - ret = fprintf (fp, "%s", buf); - RETVAL_IF (ret < 0, 0, _("Failed to print message \"%s\"\n"), buf); + ret = fprintf(fp, "%s", buf); + RETVAL_IF(ret < 0, 0, _("Failed to print message \"%s\"\n"), buf); - ret = fclose (fp); - RETVAL_IF (ret != 0, 0, _("Failed to close \"%s\" - %s\n"), - fname, strerror (errno)); + ret = fclose(fp); + RETVAL_IF(ret != 0, 0, _("Failed to close \"%s\" - %s\n"), + fname, strerror(errno)); return 1; } @@ -226,122 +218,105 @@ io_fprintln (const char *fname, const char *fmt, ...) * is created. * The datadir argument can be use to specify an alternative data root dir. */ -void -io_init (const char *cfile, const char *datadir) +void io_init(const char *cfile, const char *datadir) { FILE *data_file; const char *home; char apts_file[BUFSIZ] = ""; int ch; - if (datadir != NULL) - { - home = datadir; - snprintf (path_dir, BUFSIZ, "%s", home); - snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home); - snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH_NAME, home); - snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home); - snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home); - snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home); - snprintf (path_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home); - snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home); - snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home); + if (datadir != NULL) { + home = datadir; + snprintf(path_dir, BUFSIZ, "%s", home); + snprintf(path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home); + snprintf(path_conf, BUFSIZ, "%s/" CONF_PATH_NAME, home); + snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home); + snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home); + snprintf(path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home); + snprintf(path_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home); + snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home); + snprintf(path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home); + } else { + home = getenv("HOME"); + if (home == NULL) { + home = "."; } - else - { - home = getenv ("HOME"); - if (home == NULL) - { - home = "."; - } - snprintf (path_dir, BUFSIZ, "%s/" DIR_NAME, home); - snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH, home); - snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH, home); - snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH, home); - snprintf (path_cpid, BUFSIZ, "%s/" CPID_PATH, home); - snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH, home); - snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home); - snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR, home); - if (cfile == NULL) - { - snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH, home); - } - else - { - snprintf (apts_file, BUFSIZ, "%s", cfile); - strncpy (path_apts, apts_file, BUFSIZ); - /* check if the file exists, otherwise create it */ - data_file = fopen (path_apts, "r"); - if (data_file == NULL) - { - printf (_("%s does not exist, create it now [y or n] ? "), - path_apts); - ch = getchar (); - switch (ch) - { - case 'N': - case 'n': - puts (_("aborting...\n")); - exit_calcurse (EXIT_FAILURE); - break; - - case 'Y': - case 'y': - data_file = fopen (path_apts, "w"); - if (data_file == NULL) - { - perror (path_apts); - exit_calcurse (EXIT_FAILURE); - } - else - { - printf (_("%s successfully created\n"), path_apts); - puts (_("starting interactive mode...\n")); - } - break; - - default: - puts (_("aborting...\n")); - exit_calcurse (EXIT_FAILURE); - break; - } - } - file_close (data_file, __FILE_POS__); + snprintf(path_dir, BUFSIZ, "%s/" DIR_NAME, home); + snprintf(path_todo, BUFSIZ, "%s/" TODO_PATH, home); + snprintf(path_conf, BUFSIZ, "%s/" CONF_PATH, home); + snprintf(path_keys, BUFSIZ, "%s/" KEYS_PATH, home); + snprintf(path_cpid, BUFSIZ, "%s/" CPID_PATH, home); + snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH, home); + snprintf(path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home); + snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR, home); + if (cfile == NULL) { + snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH, home); + } else { + snprintf(apts_file, BUFSIZ, "%s", cfile); + strncpy(path_apts, apts_file, BUFSIZ); + /* check if the file exists, otherwise create it */ + data_file = fopen(path_apts, "r"); + if (data_file == NULL) { + printf(_("%s does not exist, create it now [y or n] ? "), path_apts); + ch = getchar(); + switch (ch) { + case 'N': + case 'n': + puts(_("aborting...\n")); + exit_calcurse(EXIT_FAILURE); + break; + + case 'Y': + case 'y': + data_file = fopen(path_apts, "w"); + if (data_file == NULL) { + perror(path_apts); + exit_calcurse(EXIT_FAILURE); + } else { + printf(_("%s successfully created\n"), path_apts); + puts(_("starting interactive mode...\n")); + } + break; + + default: + puts(_("aborting...\n")); + exit_calcurse(EXIT_FAILURE); + break; } + } + file_close(data_file, __FILE_POS__); } + } } -void -io_extract_data (char *dst_data, const char *org, int len) +void io_extract_data(char *dst_data, const char *org, int len) { int i; - for (; *org == ' ' || *org == '\t'; org++); - for (i = 0; i < len - 1; i++) - { - if (*org == '\n' || *org == '\0' || *org == '#') - break; - *dst_data++ = *org++; - } + for (; *org == ' ' || *org == '\t'; org++) ; + for (i = 0; i < len - 1; i++) { + if (*org == '\n' || *org == '\0' || *org == '#') + break; + *dst_data++ = *org++; + } *dst_data = '\0'; } -static void -display_mark (void) +static void display_mark(void) { const int DISPLAY_TIME = 1; WINDOW *mwin; - mwin = newwin (1, 2, 1, col - 3); + mwin = newwin(1, 2, 1, col - 3); - custom_apply_attr (mwin, ATTR_HIGHEST); - mvwprintw (mwin, 0, 0, "**"); - wins_wrefresh (mwin); - sleep (DISPLAY_TIME); - mvwprintw (mwin, 0, 0, " "); - wins_wrefresh (mwin); - delwin (mwin); - wins_doupdate (); + custom_apply_attr(mwin, ATTR_HIGHEST); + mvwprintw(mwin, 0, 0, "**"); + wins_wrefresh(mwin); + sleep(DISPLAY_TIME); + mvwprintw(mwin, 0, 0, " "); + wins_wrefresh(mwin); + delwin(mwin); + wins_doupdate(); } static pthread_mutex_t io_save_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -351,8 +326,7 @@ static pthread_mutex_t io_save_mutex = PTHREAD_MUTEX_INITIALIZER; * appointments first, and then the events. * Recursive items are written first. */ -unsigned -io_save_apts (void) +unsigned io_save_apts(void) { llist_item_t *i; FILE *fp; @@ -360,34 +334,31 @@ io_save_apts (void) if (read_only) return 1; - if ((fp = fopen (path_apts, "w")) == NULL) + if ((fp = fopen(path_apts, "w")) == NULL) return 0; - recur_save_data (fp); + recur_save_data(fp); if (ui_mode == UI_CURSES) - LLIST_TS_LOCK (&alist_p); - LLIST_TS_FOREACH (&alist_p, i) - { - struct apoint *apt = LLIST_TS_GET_DATA (i); - apoint_write (apt, fp); - } + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FOREACH(&alist_p, i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + apoint_write(apt, fp); + } if (ui_mode == UI_CURSES) - LLIST_TS_UNLOCK (&alist_p); + LLIST_TS_UNLOCK(&alist_p); - LLIST_FOREACH (&eventlist, i) - { - struct event *ev = LLIST_TS_GET_DATA (i); - event_write (ev, fp); - } - file_close (fp, __FILE_POS__); + LLIST_FOREACH(&eventlist, i) { + struct event *ev = LLIST_TS_GET_DATA(i); + event_write(ev, fp); + } + file_close(fp, __FILE_POS__); return 1; } /* Save the todo data file. */ -unsigned -io_save_todo (void) +unsigned io_save_todo(void) { llist_item_t *i; FILE *fp; @@ -395,40 +366,37 @@ io_save_todo (void) if (read_only) return 1; - if ((fp = fopen (path_todo, "w")) == NULL) + if ((fp = fopen(path_todo, "w")) == NULL) return 0; - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_TS_GET_DATA (i); - todo_write (todo, fp); - } - file_close (fp, __FILE_POS__); + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_TS_GET_DATA(i); + todo_write(todo, fp); + } + file_close(fp, __FILE_POS__); return 1; } /* Save user-defined keys */ -unsigned -io_save_keys (void) +unsigned io_save_keys(void) { FILE *fp; if (read_only) return 1; - if ((fp = fopen (path_keys, "w")) == NULL) + if ((fp = fopen(path_keys, "w")) == NULL) return 0; - keys_save_bindings (fp); - file_close (fp, __FILE_POS__); + keys_save_bindings(fp); + file_close(fp, __FILE_POS__); return 1; } /* Save the calendar data */ -void -io_save_cal (enum save_display display) +void io_save_cal(enum save_display display) { const char *access_pb = _("Problems accessing data file ..."); const char *save_success = _("The data files were successfully saved"); @@ -438,44 +406,43 @@ io_save_cal (enum save_display display) if (read_only) return; - pthread_mutex_lock (&io_save_mutex); + pthread_mutex_lock(&io_save_mutex); show_bar = 0; if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_BAR && conf.progress_bar) show_bar = 1; else if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_MARK) - display_mark (); + display_mark(); if (show_bar) - progress_bar (PROGRESS_BAR_SAVE, PROGRESS_BAR_CONF); - if (!config_save ()) - ERROR_MSG ("%s", access_pb); + progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_CONF); + if (!config_save()) + ERROR_MSG("%s", access_pb); if (show_bar) - progress_bar (PROGRESS_BAR_SAVE, PROGRESS_BAR_TODO); - if (!io_save_todo ()) - ERROR_MSG ("%s", access_pb); + progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_TODO); + if (!io_save_todo()) + ERROR_MSG("%s", access_pb); if (show_bar) - progress_bar (PROGRESS_BAR_SAVE, PROGRESS_BAR_APTS); - if (!io_save_apts ()) - ERROR_MSG ("%s", access_pb); + progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_APTS); + if (!io_save_apts()) + ERROR_MSG("%s", access_pb); if (show_bar) - progress_bar (PROGRESS_BAR_SAVE, PROGRESS_BAR_KEYS); - if (!io_save_keys ()) - ERROR_MSG ("%s", access_pb); + progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_KEYS); + if (!io_save_keys()) + ERROR_MSG("%s", access_pb); /* Print a message telling data were saved */ if (ui_mode == UI_CURSES && conf.system_dialogs - && display != IO_SAVE_DISPLAY_MARK) - { - status_mesg (save_success, enter); - wgetch (win[STA].p); - } + && display != IO_SAVE_DISPLAY_MARK) { + status_mesg(save_success, enter); + wgetch(win[STA].p); + } - pthread_mutex_unlock (&io_save_mutex); + pthread_mutex_unlock(&io_save_mutex); } /* @@ -483,8 +450,7 @@ io_save_cal (enum save_display display) * and then load either: a new appointment, a new event, or a new * recursive item (which can also be either an event or an appointment). */ -void -io_load_app (void) +void io_load_app(void) { FILE *data_file; int c, is_appointment, is_event, is_recursive; @@ -496,183 +462,144 @@ io_load_app (void) char type, state = 0L; char note[MAX_NOTESIZ + 1], *notep; - t = time (NULL); - lt = localtime (&t); + t = time(NULL); + lt = localtime(&t); start = end = until = *lt; - data_file = fopen (path_apts, "r"); - EXIT_IF (data_file == NULL, _("failed to open appointment file")); + data_file = fopen(path_apts, "r"); + EXIT_IF(data_file == NULL, _("failed to open appointment file")); - for (;;) - { - LLIST_INIT (&exc); - is_appointment = is_event = is_recursive = 0; - c = getc (data_file); - if (c == EOF) - break; - ungetc (c, data_file); - - /* Read the date first: it is common to both events - * and appointments. - */ - if (fscanf (data_file, "%d / %d / %d ", - &start.tm_mon, &start.tm_mday, &start.tm_year) != 3) - EXIT (_("syntax error in the item date")); - - /* Read the next character : if it is an '@' then we have - * an appointment, else if it is an '[' we have en event. - */ - c = getc (data_file); - - if (c == '@') - is_appointment = 1; - else if (c == '[') - is_event = 1; - else - EXIT (_("no event nor appointment found")); - - /* Read the remaining informations. */ - if (is_appointment) - { - if (fscanf (data_file, " %d : %d -> %d / %d / %d @ %d : %d ", - &start.tm_hour, &start.tm_min, - &end.tm_mon, &end.tm_mday, &end.tm_year, - &end.tm_hour, &end.tm_min) != 7) - EXIT (_("syntax error in item time or duration")); - } - else if (is_event) - { - if (fscanf (data_file, " %d ", &id) != 1 || getc (data_file) != ']') - EXIT (_("syntax error in item identifier")); - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else - { - EXIT (_("wrong format in the appointment or event")); - /* NOTREACHED */ - } + for (;;) { + LLIST_INIT(&exc); + is_appointment = is_event = is_recursive = 0; + c = getc(data_file); + if (c == EOF) + break; + ungetc(c, data_file); + + /* Read the date first: it is common to both events + * and appointments. + */ + if (fscanf(data_file, "%d / %d / %d ", + &start.tm_mon, &start.tm_mday, &start.tm_year) != 3) + EXIT(_("syntax error in the item date")); + + /* Read the next character : if it is an '@' then we have + * an appointment, else if it is an '[' we have en event. + */ + c = getc(data_file); + + if (c == '@') + is_appointment = 1; + else if (c == '[') + is_event = 1; + else + EXIT(_("no event nor appointment found")); + + /* Read the remaining informations. */ + if (is_appointment) { + if (fscanf(data_file, " %d : %d -> %d / %d / %d @ %d : %d ", + &start.tm_hour, &start.tm_min, + &end.tm_mon, &end.tm_mday, &end.tm_year, + &end.tm_hour, &end.tm_min) != 7) + EXIT(_("syntax error in item time or duration")); + } else if (is_event) { + if (fscanf(data_file, " %d ", &id) != 1 || getc(data_file) != ']') + EXIT(_("syntax error in item identifier")); + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else { + EXIT(_("wrong format in the appointment or event")); + /* NOTREACHED */ + } - /* Check if we have a recursive item. */ - c = getc (data_file); - - if (c == '{') - { - is_recursive = 1; - if (fscanf (data_file, " %d%c ", &freq, &type) != 2) - EXIT (_("syntax error in item repetition")); - - c = getc (data_file); - if (c == '}') - { /* endless recurrent item */ - until.tm_year = 0; - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else if (c == '-' && getc (data_file) == '>') - { - if (fscanf (data_file, " %d / %d / %d ", &until.tm_mon, - &until.tm_mday, &until.tm_year) != 3) - EXIT (_("syntax error in item repetition")); - c = getc (data_file); - if (c == '!') - { - ungetc (c, data_file); - recur_exc_scan (&exc, data_file); - c = getc (data_file); - } - else if (c == '}') - { - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else - EXIT (_("syntax error in item repetition")); - } - else if (c == '!') - { /* endless item with exceptions */ - ungetc (c, data_file); - recur_exc_scan (&exc, data_file); - c = getc (data_file); - until.tm_year = 0; - } - else - { - EXIT (_("wrong format in the appointment or event")); - /* NOTREACHED */ - } - } - else - ungetc (c, data_file); - - /* Check if a note is attached to the item. */ - c = getc (data_file); - if (c == '>') - { - note_read (note, data_file); - notep = note; - } - else - { - notep = NULL; - ungetc (c, data_file); - } + /* Check if we have a recursive item. */ + c = getc(data_file); + + if (c == '{') { + is_recursive = 1; + if (fscanf(data_file, " %d%c ", &freq, &type) != 2) + EXIT(_("syntax error in item repetition")); + + c = getc(data_file); + if (c == '}') { /* endless recurrent item */ + until.tm_year = 0; + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else if (c == '-' && getc(data_file) == '>') { + if (fscanf(data_file, " %d / %d / %d ", &until.tm_mon, + &until.tm_mday, &until.tm_year) != 3) + EXIT(_("syntax error in item repetition")); + c = getc(data_file); + if (c == '!') { + ungetc(c, data_file); + recur_exc_scan(&exc, data_file); + c = getc(data_file); + } else if (c == '}') { + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else + EXIT(_("syntax error in item repetition")); + } else if (c == '!') { /* endless item with exceptions */ + ungetc(c, data_file); + recur_exc_scan(&exc, data_file); + c = getc(data_file); + until.tm_year = 0; + } else { + EXIT(_("wrong format in the appointment or event")); + /* NOTREACHED */ + } + } else + ungetc(c, data_file); + + /* Check if a note is attached to the item. */ + c = getc(data_file); + if (c == '>') { + note_read(note, data_file); + notep = note; + } else { + notep = NULL; + ungetc(c, data_file); + } - /* - * Last: read the item description and load it into its - * corresponding linked list, depending on the item type. - */ - if (is_appointment) - { - c = getc (data_file); - if (c == '!') - { - state |= APOINT_NOTIFY; - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else if (c == '|') - { - state = 0L; - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else - EXIT (_("syntax error in item repetition")); - if (is_recursive) - { - recur_apoint_scan (data_file, start, end, - type, freq, until, notep, &exc, state); - } - else - { - apoint_scan (data_file, start, end, state, notep); - } - } - else if (is_event) - { - if (is_recursive) - { - recur_event_scan (data_file, start, id, type, - freq, until, notep, &exc); - } - else - { - event_scan (data_file, start, id, notep); - } - } - else - { - EXIT (_("wrong format in the appointment or event")); - /* NOTREACHED */ - } + /* + * Last: read the item description and load it into its + * corresponding linked list, depending on the item type. + */ + if (is_appointment) { + c = getc(data_file); + if (c == '!') { + state |= APOINT_NOTIFY; + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else if (c == '|') { + state = 0L; + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else + EXIT(_("syntax error in item repetition")); + if (is_recursive) { + recur_apoint_scan(data_file, start, end, + type, freq, until, notep, &exc, state); + } else { + apoint_scan(data_file, start, end, state, notep); + } + } else if (is_event) { + if (is_recursive) { + recur_event_scan(data_file, start, id, type, freq, until, notep, &exc); + } else { + event_scan(data_file, start, id, notep); + } + } else { + EXIT(_("wrong format in the appointment or event")); + /* NOTREACHED */ } - file_close (data_file, __FILE_POS__); + } + file_close(data_file, __FILE_POS__); } /* Load the todo data */ -void -io_load_todo (void) +void io_load_todo(void) { FILE *data_file; char *newline; @@ -680,64 +607,59 @@ io_load_todo (void) int c, id; char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1]; - data_file = fopen (path_todo, "r"); - EXIT_IF (data_file == NULL, _("failed to open todo file")); + data_file = fopen(path_todo, "r"); + EXIT_IF(data_file == NULL, _("failed to open todo file")); - for (;;) - { - c = getc (data_file); - if (c == EOF) - break; - else if (c == '[') - { /* new style with id */ - if (fscanf (data_file, " %d ", &id) != 1 || getc (data_file) != ']') - EXIT (_("syntax error in item identifier")); - while ((c = getc (data_file)) == ' '); - ungetc (c, data_file); - } - else - { - id = 9; - ungetc (c, data_file); - } - /* Now read the attached note, if any. */ - c = getc (data_file); - if (c == '>') - note_read (note, data_file); - else - { - note[0] = '\0'; - ungetc (c, data_file); - } - /* Then read todo description. */ - if (!fgets (buf, sizeof buf, data_file)) - buf[0] = '\0'; - newline = strchr (buf, '\n'); - if (newline) - *newline = '\0'; - io_extract_data (e_todo, buf, sizeof buf); - todo_add (e_todo, id, note); - ++nb_tod; + for (;;) { + c = getc(data_file); + if (c == EOF) + break; + else if (c == '[') { /* new style with id */ + if (fscanf(data_file, " %d ", &id) != 1 || getc(data_file) != ']') + EXIT(_("syntax error in item identifier")); + while ((c = getc(data_file)) == ' ') ; + ungetc(c, data_file); + } else { + id = 9; + ungetc(c, data_file); + } + /* Now read the attached note, if any. */ + c = getc(data_file); + if (c == '>') + note_read(note, data_file); + else { + note[0] = '\0'; + ungetc(c, data_file); } - file_close (data_file, __FILE_POS__); - todo_set_nb (nb_tod); + /* Then read todo description. */ + if (!fgets(buf, sizeof buf, data_file)) + buf[0] = '\0'; + newline = strchr(buf, '\n'); + if (newline) + *newline = '\0'; + io_extract_data(e_todo, buf, sizeof buf); + todo_add(e_todo, id, note); + ++nb_tod; + } + file_close(data_file, __FILE_POS__); + todo_set_nb(nb_tod); } static void -load_keys_ht_getkey (struct ht_keybindings_s *data, const char **key, int *len) +load_keys_ht_getkey(struct ht_keybindings_s *data, const char **key, int *len) { *key = data->label; - *len = strlen (data->label); + *len = strlen(data->label); } static int -load_keys_ht_compare (struct ht_keybindings_s *data1, - struct ht_keybindings_s *data2) +load_keys_ht_compare(struct ht_keybindings_s *data1, + struct ht_keybindings_s *data2) { - const int KEYLEN = strlen (data1->label); + const int KEYLEN = strlen(data1->label); - if (strlen (data2->label) == KEYLEN - && !memcmp (data1->label, data2->label, KEYLEN)) + if (strlen(data2->label) == KEYLEN + && !memcmp(data1->label, data2->label, KEYLEN)) return 0; else return 1; @@ -748,7 +670,7 @@ load_keys_ht_compare (struct ht_keybindings_s *data1, * visible in some specific cases. Thus replace it by the following is_blank() * function. */ -static int is_blank (int c) +static int is_blank(int c) { return c == ' ' || c == '\t'; } @@ -760,8 +682,7 @@ static int is_blank (int c) * A log file is also built in case some errors were found in the key * configuration file. */ -void -io_load_keys (const char *pager) +void io_load_keys(const char *pager) { struct ht_keybindings_s keys[NBKEYS]; FILE *keyfp; @@ -770,188 +691,163 @@ io_load_keys (const char *pager) int i, skipped, loaded, line; const int MAX_ERRORS = 5; - keys_init (); + keys_init(); - struct ht_keybindings ht_keys = HTABLE_INITIALIZER (&ht_keys); + struct ht_keybindings ht_keys = HTABLE_INITIALIZER(&ht_keys); - for (i = 0; i < NBKEYS; i++) - { - keys[i].key = (enum key)i; - keys[i].label = keys_get_label ((enum key)i); - HTABLE_INSERT (ht_keybindings, &ht_keys, &keys[i]); - } + for (i = 0; i < NBKEYS; i++) { + keys[i].key = (enum key)i; + keys[i].label = keys_get_label((enum key)i); + HTABLE_INSERT(ht_keybindings, &ht_keys, &keys[i]); + } - keyfp = fopen (path_keys, "r"); - EXIT_IF (keyfp == NULL, _("failed to open key file")); + keyfp = fopen(path_keys, "r"); + EXIT_IF(keyfp == NULL, _("failed to open key file")); - log = io_log_init (); + log = io_log_init(); skipped = loaded = line = 0; - while (fgets (buf, BUFSIZ, keyfp) != NULL) - { - char key_label[BUFSIZ], *p; - struct ht_keybindings_s *ht_elm, ht_entry; - const int AWAITED = 1; - int assigned; - - line++; - if (skipped > MAX_ERRORS) - { - const char *too_many = - _("\nToo many errors while reading configuration file!\n" - "Please backup your keys file, remove it from directory, " - "and launch calcurse again.\n"); - - io_log_print (log, line, too_many); - break; - } - for (p = buf; is_blank ((int)*p); p++) - ; - if (p != buf) - memmove (buf, p, strlen (p)); - if (buf[0] == '#' || buf[0] == '\n') - continue; - - if (sscanf (buf, "%s", key_label) != AWAITED) - { - skipped++; - io_log_print (log, line, _("Could not read key label")); - continue; - } - ht_entry.label = key_label; - p = buf + strlen (key_label) + 1; - ht_elm = HTABLE_LOOKUP (ht_keybindings, &ht_keys, &ht_entry); - if (!ht_elm) - { + while (fgets(buf, BUFSIZ, keyfp) != NULL) { + char key_label[BUFSIZ], *p; + struct ht_keybindings_s *ht_elm, ht_entry; + const int AWAITED = 1; + int assigned; + + line++; + if (skipped > MAX_ERRORS) { + const char *too_many = + _("\nToo many errors while reading configuration file!\n" + "Please backup your keys file, remove it from directory, " + "and launch calcurse again.\n"); + + io_log_print(log, line, too_many); + break; + } + for (p = buf; is_blank((int)*p); p++) ; + if (p != buf) + memmove(buf, p, strlen(p)); + if (buf[0] == '#' || buf[0] == '\n') + continue; + + if (sscanf(buf, "%s", key_label) != AWAITED) { + skipped++; + io_log_print(log, line, _("Could not read key label")); + continue; + } + ht_entry.label = key_label; + p = buf + strlen(key_label) + 1; + ht_elm = HTABLE_LOOKUP(ht_keybindings, &ht_keys, &ht_entry); + if (!ht_elm) { + skipped++; + io_log_print(log, line, _("Key label not recognized")); + continue; + } + assigned = 0; + for (;;) { + char key_ch[BUFSIZ], tmpbuf[BUFSIZ]; + + while (*p == ' ') + p++; + (void)strncpy(tmpbuf, p, BUFSIZ); + if (sscanf(tmpbuf, "%s", key_ch) == AWAITED) { + int ch; + + if ((ch = keys_str2int(key_ch)) < 0) { + char unknown_key[BUFSIZ]; + skipped++; - io_log_print (log, line, _("Key label not recognized")); - continue; - } - assigned = 0; - for (;;) - { - char key_ch[BUFSIZ], tmpbuf[BUFSIZ]; - - while (*p == ' ') - p++; - (void)strncpy (tmpbuf, p, BUFSIZ); - if (sscanf (tmpbuf, "%s", key_ch) == AWAITED) - { - int ch; - - if ((ch = keys_str2int (key_ch)) < 0) - { - char unknown_key[BUFSIZ]; - - skipped++; - (void)snprintf (unknown_key, BUFSIZ, - _("Error reading key: \"%s\""), key_ch); - io_log_print (log, line, unknown_key); - } - else - { - int used; - - used = keys_assign_binding (ch, ht_elm->key); - if (used) - { - char already_assigned[BUFSIZ]; - - skipped++; - (void)snprintf (already_assigned, BUFSIZ, - _("\"%s\" assigned multiple times!"), key_ch); - io_log_print (log, line, already_assigned); - } - else - assigned++; - } - p += strlen (key_ch) + 1; - } - else - { - if (assigned) - loaded++; - break; - } + (void)snprintf(unknown_key, BUFSIZ, + _("Error reading key: \"%s\""), key_ch); + io_log_print(log, line, unknown_key); + } else { + int used; + + used = keys_assign_binding(ch, ht_elm->key); + if (used) { + char already_assigned[BUFSIZ]; + + skipped++; + (void)snprintf(already_assigned, BUFSIZ, + _("\"%s\" assigned multiple times!"), key_ch); + io_log_print(log, line, already_assigned); + } else + assigned++; } + p += strlen(key_ch) + 1; + } else { + if (assigned) + loaded++; + break; + } } - file_close (keyfp, __FILE_POS__); - file_close (log->fd, __FILE_POS__); - if (skipped > 0) - { - const char *view_log = + } + file_close(keyfp, __FILE_POS__); + file_close(log->fd, __FILE_POS__); + if (skipped > 0) { + const char *view_log = _("There were some errors when loading keys file, see log file ?"); - io_log_display (log, view_log, pager); - } - io_log_free (log); - EXIT_IF (skipped > MAX_ERRORS, - _("Too many errors while reading keys file, aborting...")); + io_log_display(log, view_log, pager); + } + io_log_free(log); + EXIT_IF(skipped > MAX_ERRORS, + _("Too many errors while reading keys file, aborting...")); if (loaded < NBKEYS) - keys_fill_missing (); - if (keys_check_missing_bindings ()) - WARN_MSG (_("Some actions do not have any associated key bindings!")); + keys_fill_missing(); + if (keys_check_missing_bindings()) + WARN_MSG(_("Some actions do not have any associated key bindings!")); } -void -io_check_dir (char *dir, int *missing) +void io_check_dir(char *dir, int *missing) { if (read_only) return; errno = 0; - if (mkdir (dir, 0700) != 0) - { - if (errno != EEXIST) - { - fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"), dir, - strerror (errno)); - exit_calcurse (EXIT_FAILURE); - } - } - else - { - if (missing) - (*missing)++; + if (mkdir(dir, 0700) != 0) { + if (errno != EEXIST) { + fprintf(stderr, _("FATAL ERROR: could not create %s: %s\n"), dir, + strerror(errno)); + exit_calcurse(EXIT_FAILURE); } + } else { + if (missing) + (*missing)++; + } } -unsigned -io_file_exist (char *file) +unsigned io_file_exist(char *file) { FILE *fd; if (!file) return 0; - if ((fd = fopen (file, "r")) == NULL) + if ((fd = fopen(file, "r")) == NULL) return 0; - fclose (fd); + fclose(fd); return 1; } -void -io_check_file (char *file, int *missing) +void io_check_file(char *file, int *missing) { if (read_only) return; errno = 0; - if (!io_file_exist (file)) - { - FILE *fd; - - if (missing) - (*missing)++; - if ((fd = fopen (file, "w")) == NULL) - { - fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"), file, - strerror (errno)); - exit_calcurse (EXIT_FAILURE); - } - file_close (fd, __FILE_POS__); + if (!io_file_exist(file)) { + FILE *fd; + + if (missing) + (*missing)++; + if ((fd = fopen(file, "w")) == NULL) { + fprintf(stderr, _("FATAL ERROR: could not create %s: %s\n"), file, + strerror(errno)); + exit_calcurse(EXIT_FAILURE); } + file_close(fd, __FILE_POS__); + } } /* @@ -966,138 +862,127 @@ io_check_file (char *file, int *missing) * |___ apts * |___ todo */ -int -io_check_data_files (void) +int io_check_data_files(void) { int missing, missing_keys; missing = missing_keys = 0; errno = 0; - io_check_dir (path_dir, &missing); - io_check_dir (path_notes, &missing); - io_check_file (path_todo, &missing); - io_check_file (path_apts, &missing); - io_check_file (path_conf, &missing); - io_check_file (path_keys, &missing_keys); - if (missing_keys) - { - missing++; - keys_dump_defaults (path_keys); - } + io_check_dir(path_dir, &missing); + io_check_dir(path_notes, &missing); + io_check_file(path_todo, &missing); + io_check_file(path_apts, &missing); + io_check_file(path_conf, &missing); + io_check_file(path_keys, &missing_keys); + if (missing_keys) { + missing++; + keys_dump_defaults(path_keys); + } return missing; } /* Draw the startup screen */ -void -io_startup_screen (int no_data_file) +void io_startup_screen(int no_data_file) { const char *enter = _("Press [ENTER] to continue"); if (no_data_file) - status_mesg (_("Data files found. Data will be loaded now."), enter); + status_mesg(_("Data files found. Data will be loaded now."), enter); else - status_mesg (_("Welcome to Calcurse. Missing data files were created."), - enter); + status_mesg(_("Welcome to Calcurse. Missing data files were created."), + enter); - wgetch (win[STA].p); + wgetch(win[STA].p); } /* Export calcurse data. */ -void -io_export_data (enum export_type type) +void io_export_data(enum export_type type) { FILE *stream; const char *success = _("The data were successfully exported"); const char *enter = _("Press [ENTER] to continue"); if (type < IO_EXPORT_ICAL || type >= IO_EXPORT_NBTYPES) - EXIT (_("unknown export type")); + EXIT(_("unknown export type")); stream = 0; - switch (ui_mode) - { - case UI_CMDLINE: - stream = stdout; - break; - case UI_CURSES: - stream = get_export_stream (type); - break; - default: - EXIT (_("wrong export mode")); - /* NOTREACHED */ - } + switch (ui_mode) { + case UI_CMDLINE: + stream = stdout; + break; + case UI_CURSES: + stream = get_export_stream(type); + break; + default: + EXIT(_("wrong export mode")); + /* NOTREACHED */ + } if (stream == NULL) return; if (type == IO_EXPORT_ICAL) - ical_export_data (stream); + ical_export_data(stream); else if (type == IO_EXPORT_PCAL) - pcal_export_data (stream); + pcal_export_data(stream); - if (conf.system_dialogs && ui_mode == UI_CURSES) - { - status_mesg (success, enter); - wgetch (win[STA].p); - } + if (conf.system_dialogs && ui_mode == UI_CURSES) { + status_mesg(success, enter); + wgetch(win[STA].p); + } } /* Draws the export format selection bar */ -void -io_export_bar (void) +void io_export_bar(void) { int smlspc, spc; smlspc = 2; spc = 15; - custom_apply_attr (win[STA].p, ATTR_HIGHEST); - mvwprintw (win[STA].p, 0, 2, "Q"); - mvwprintw (win[STA].p, 1, 2, "I"); - mvwprintw (win[STA].p, 0, 2 + spc, "P"); - custom_remove_attr (win[STA].p, ATTR_HIGHEST); + custom_apply_attr(win[STA].p, ATTR_HIGHEST); + mvwprintw(win[STA].p, 0, 2, "Q"); + mvwprintw(win[STA].p, 1, 2, "I"); + mvwprintw(win[STA].p, 0, 2 + spc, "P"); + custom_remove_attr(win[STA].p, ATTR_HIGHEST); - mvwprintw (win[STA].p, 0, 2 + smlspc, _("Exit")); - mvwprintw (win[STA].p, 1, 2 + smlspc, _("Ical")); - mvwprintw (win[STA].p, 0, 2 + spc + smlspc, _("Pcal")); + mvwprintw(win[STA].p, 0, 2 + smlspc, _("Exit")); + mvwprintw(win[STA].p, 1, 2 + smlspc, _("Ical")); + mvwprintw(win[STA].p, 0, 2 + spc + smlspc, _("Pcal")); - wnoutrefresh (win[STA].p); - wmove (win[STA].p, 0, 0); - wins_doupdate (); + wnoutrefresh(win[STA].p); + wmove(win[STA].p, 0, 0); + wins_doupdate(); } -static FILE * -get_import_stream (enum export_type type) +static FILE *get_import_stream(enum export_type type) { FILE *stream; char *stream_name; const char *ask_fname = _("Enter the file name to import data from:"); const char *wrong_file = - _("The file cannot be accessed, please enter another file name."); + _("The file cannot be accessed, please enter another file name."); const char *press_enter = _("Press [ENTER] to continue."); int cancel; stream = NULL; - stream_name = mem_malloc (BUFSIZ); - memset (stream_name, 0, BUFSIZ); - while (stream == NULL) - { - status_mesg (ask_fname, ""); - cancel = updatestring (win[STA].p, &stream_name, 0, 1); - if (cancel) - { - mem_free (stream_name); - return NULL; - } - stream = fopen (stream_name, "r"); - if (stream == NULL) - { - status_mesg (wrong_file, press_enter); - wgetch (win[STA].p); - } + stream_name = mem_malloc(BUFSIZ); + memset(stream_name, 0, BUFSIZ); + while (stream == NULL) { + status_mesg(ask_fname, ""); + cancel = updatestring(win[STA].p, &stream_name, 0, 1); + if (cancel) { + mem_free(stream_name); + return NULL; } - mem_free (stream_name); + stream = fopen(stream_name, "r"); + if (stream == NULL) { + status_mesg(wrong_file, press_enter); + wgetch(win[STA].p); + } + } + mem_free(stream_name); return stream; } @@ -1108,8 +993,7 @@ get_import_stream (enum export_type type) * A temporary log file is created in /tmp to store the import process report, * and is cleared at the end. */ -void -io_import_data (enum import_type type, const char *stream_name) +void io_import_data(enum import_type type, const char *stream_name) { const char *proc_report = _("Import process report: %04d lines read "); char stats_str[4][BUFSIZ]; @@ -1119,191 +1003,172 @@ io_import_data (enum import_type type, const char *stream_name) unsigned events, apoints, todos, lines, skipped; } stats; - EXIT_IF (type < 0 || type >= IO_IMPORT_NBTYPES, _("unknown import type")); - switch (ui_mode) - { - case UI_CMDLINE: - stream = fopen (stream_name, "r"); - EXIT_IF (stream == NULL, - _("FATAL ERROR: the input file cannot be accessed, " - "Aborting...")); - break; - case UI_CURSES: - stream = get_import_stream (type); - break; - default: - EXIT (_("FATAL ERROR: wrong import mode")); - /* NOTREACHED */ - } + EXIT_IF(type < 0 || type >= IO_IMPORT_NBTYPES, _("unknown import type")); + switch (ui_mode) { + case UI_CMDLINE: + stream = fopen(stream_name, "r"); + EXIT_IF(stream == NULL, + _("FATAL ERROR: the input file cannot be accessed, " + "Aborting...")); + break; + case UI_CURSES: + stream = get_import_stream(type); + break; + default: + EXIT(_("FATAL ERROR: wrong import mode")); + /* NOTREACHED */ + } if (stream == NULL) return; - memset (&stats, 0, sizeof stats); + memset(&stats, 0, sizeof stats); - log = io_log_init (); - if (log == NULL) - { - if (stream != stdin) - file_close (stream, __FILE_POS__); - return; - } + log = io_log_init(); + if (log == NULL) { + if (stream != stdin) + file_close(stream, __FILE_POS__); + return; + } if (type == IO_IMPORT_ICAL) - ical_import_data (stream, log->fd, &stats.events, &stats.apoints, - &stats.todos, &stats.lines, &stats.skipped); + ical_import_data(stream, log->fd, &stats.events, &stats.apoints, + &stats.todos, &stats.lines, &stats.skipped); if (stream != stdin) - file_close (stream, __FILE_POS__); + file_close(stream, __FILE_POS__); - snprintf (stats_str[0], BUFSIZ, - ngettext ("%d app", "%d apps", stats.apoints), stats.apoints); - snprintf (stats_str[1], BUFSIZ, - ngettext ("%d event", "%d events", stats.events), stats.events); - snprintf (stats_str[2], BUFSIZ, - ngettext ("%d todo", "%d todos", stats.todos), stats.todos); - snprintf (stats_str[3], BUFSIZ, _("%d skipped"), stats.skipped); + snprintf(stats_str[0], BUFSIZ, + ngettext("%d app", "%d apps", stats.apoints), stats.apoints); + snprintf(stats_str[1], BUFSIZ, + ngettext("%d event", "%d events", stats.events), stats.events); + snprintf(stats_str[2], BUFSIZ, + ngettext("%d todo", "%d todos", stats.todos), stats.todos); + snprintf(stats_str[3], BUFSIZ, _("%d skipped"), stats.skipped); /* Update the number of todo items. */ - todo_set_nb (todo_nb () + stats.todos); - - if (ui_mode == UI_CURSES && conf.system_dialogs) - { - char read[BUFSIZ], stat[BUFSIZ]; - - snprintf (read, BUFSIZ, proc_report, stats.lines); - snprintf (stat, BUFSIZ, "%s / %s / %s / %s (%s)", stats_str[0], - stats_str[1], stats_str[2], stats_str[3], - _("Press [ENTER] to continue")); - status_mesg (read, stat); - wgetch (win[STA].p); - } - else if (ui_mode == UI_CMDLINE) - { - printf (proc_report, stats.lines); - printf ("\n%s / %s / %s / %s\n", stats_str[0], stats_str[1], - stats_str[2], stats_str[3]); - } + todo_set_nb(todo_nb() + stats.todos); + + if (ui_mode == UI_CURSES && conf.system_dialogs) { + char read[BUFSIZ], stat[BUFSIZ]; + + snprintf(read, BUFSIZ, proc_report, stats.lines); + snprintf(stat, BUFSIZ, "%s / %s / %s / %s (%s)", stats_str[0], + stats_str[1], stats_str[2], stats_str[3], + _("Press [ENTER] to continue")); + status_mesg(read, stat); + wgetch(win[STA].p); + } else if (ui_mode == UI_CMDLINE) { + printf(proc_report, stats.lines); + printf("\n%s / %s / %s / %s\n", stats_str[0], stats_str[1], + stats_str[2], stats_str[3]); + } /* User has the choice to look at the log file if some items could not be imported. - */ - file_close (log->fd, __FILE_POS__); - if (stats.skipped > 0) - { - const char *view_log = _("Some items could not be imported, see log file ?"); - - io_log_display (log, view_log, conf.pager); - } - io_log_free (log); + */ + file_close(log->fd, __FILE_POS__); + if (stats.skipped > 0) { + const char *view_log = + _("Some items could not be imported, see log file ?"); + + io_log_display(log, view_log, conf.pager); + } + io_log_free(log); } -struct io_file * -io_log_init (void) +struct io_file *io_log_init(void) { char logprefix[BUFSIZ]; char *logname; struct io_file *log; - snprintf (logprefix, BUFSIZ, "%s/calcurse_log.", get_tempdir ()); - logname = new_tempfile (logprefix, TMPEXTSIZ); - RETVAL_IF (logname == NULL, 0, - _("Warning: could not create temporary log file, Aborting...")); - log = mem_malloc (sizeof (struct io_file)); - RETVAL_IF (log == NULL, 0, - _("Warning: could not open temporary log file, Aborting...")); - snprintf (log->name, sizeof (log->name), "%s%s", logprefix, logname); - mem_free (logname); - log->fd = fopen (log->name, "w"); - if (log->fd == NULL) - { - ERROR_MSG (_("Warning: could not open temporary log file, Aborting...")); - mem_free (log); - return 0; - } + snprintf(logprefix, BUFSIZ, "%s/calcurse_log.", get_tempdir()); + logname = new_tempfile(logprefix, TMPEXTSIZ); + RETVAL_IF(logname == NULL, 0, + _("Warning: could not create temporary log file, Aborting...")); + log = mem_malloc(sizeof(struct io_file)); + RETVAL_IF(log == NULL, 0, + _("Warning: could not open temporary log file, Aborting...")); + snprintf(log->name, sizeof(log->name), "%s%s", logprefix, logname); + mem_free(logname); + log->fd = fopen(log->name, "w"); + if (log->fd == NULL) { + ERROR_MSG(_("Warning: could not open temporary log file, Aborting...")); + mem_free(log); + return 0; + } return log; } -void -io_log_print (struct io_file *log, int line, const char *msg) +void io_log_print(struct io_file *log, int line, const char *msg) { if (log && log->fd) - fprintf (log->fd, "line %d: %s\n", line, msg); + fprintf(log->fd, "line %d: %s\n", line, msg); } -void -io_log_display (struct io_file *log, const char *msg, const char *pager) +void io_log_display(struct io_file *log, const char *msg, const char *pager) { int ans; - RETURN_IF (log == NULL, _("No log file to display!")); - if (ui_mode == UI_CMDLINE) - { - printf ("\n%s [y/n] ", msg); - ans = fgetc (stdin); - if (ans == 'y') - { - const char *arg[] = { pager, log->name, NULL }; - int pid; - - if ((pid = fork_exec (NULL, NULL, pager, arg))) - child_wait (NULL, NULL, pid); - } - } - else - { - if (status_ask_bool (msg) == 1) - wins_launch_external (log->name, pager); - wins_erase_status_bar (); + RETURN_IF(log == NULL, _("No log file to display!")); + if (ui_mode == UI_CMDLINE) { + printf("\n%s [y/n] ", msg); + ans = fgetc(stdin); + if (ans == 'y') { + const char *arg[] = { pager, log->name, NULL }; + int pid; + + if ((pid = fork_exec(NULL, NULL, pager, arg))) + child_wait(NULL, NULL, pid); } + } else { + if (status_ask_bool(msg) == 1) + wins_launch_external(log->name, pager); + wins_erase_status_bar(); + } } -void -io_log_free (struct io_file *log) +void io_log_free(struct io_file *log) { if (!log) return; - EXIT_IF (unlink (log->name) != 0, - _("Warning: could not erase temporary log file %s, Aborting..."), - log->name); - mem_free (log); + EXIT_IF(unlink(log->name) != 0, + _("Warning: could not erase temporary log file %s, Aborting..."), + log->name); + mem_free(log); } static pthread_t io_t_psave; /* Thread used to periodically save data. */ -static void * -io_psave_thread (void *arg) +static void *io_psave_thread(void *arg) { int delay; delay = conf.periodic_save; - EXIT_IF (delay < 0, _("Invalid delay")); + EXIT_IF(delay < 0, _("Invalid delay")); - for (;;) - { - sleep (delay * MININSEC); - io_save_cal (IO_SAVE_DISPLAY_MARK); - } + for (;;) { + sleep(delay * MININSEC); + io_save_cal(IO_SAVE_DISPLAY_MARK); + } } /* Launch the thread which handles periodic saves. */ -void -io_start_psave_thread (void) +void io_start_psave_thread(void) { - pthread_create (&io_t_psave, NULL, io_psave_thread, NULL); + pthread_create(&io_t_psave, NULL, io_psave_thread, NULL); } /* Stop periodic data saves. */ -void -io_stop_psave_thread (void) +void io_stop_psave_thread(void) { - if (io_t_psave) - { - pthread_cancel (io_t_psave); - pthread_join (io_t_psave, NULL); - } + if (io_t_psave) { + pthread_cancel(io_t_psave); + pthread_join(io_t_psave, NULL); + } } /* @@ -1317,49 +1182,40 @@ io_stop_psave_thread (void) * Note: When creating the lock file, the interactive mode is not initialized * yet. */ -void -io_set_lock (void) +void io_set_lock(void) { - FILE *lock = fopen (path_cpid, "r"); + FILE *lock = fopen(path_cpid, "r"); int pid; - if (lock != NULL) - { - /* If there is a lock file, check whether the process exists. */ - if (fscanf(lock, "%d", &pid) == 1) - { - fclose(lock); - if (kill(pid, 0) != 0 && errno == ESRCH) - lock = NULL; - } - else - fclose(lock); - } - - if (lock != NULL) - { - fprintf (stderr, - _("\nWARNING: it seems that another calcurse instance is " - "already running.\n" - "If this is not the case, please remove the following " - "lock file: \n\"%s\"\n" - "and restart calcurse.\n"), path_cpid); - exit (EXIT_FAILURE); - } - else - { - if (!io_dump_pid (path_cpid)) - EXIT (_("FATAL ERROR: could not create %s: %s\n"), - path_cpid, strerror (errno)); - } + if (lock != NULL) { + /* If there is a lock file, check whether the process exists. */ + if (fscanf(lock, "%d", &pid) == 1) { + fclose(lock); + if (kill(pid, 0) != 0 && errno == ESRCH) + lock = NULL; + } else + fclose(lock); + } + + if (lock != NULL) { + fprintf(stderr, + _("\nWARNING: it seems that another calcurse instance is " + "already running.\n" + "If this is not the case, please remove the following " + "lock file: \n\"%s\"\n" "and restart calcurse.\n"), path_cpid); + exit(EXIT_FAILURE); + } else { + if (!io_dump_pid(path_cpid)) + EXIT(_("FATAL ERROR: could not create %s: %s\n"), + path_cpid, strerror(errno)); + } } /* * Create a new file and write the process pid inside (used to create a simple * lock for example). Overwrite already existing files. */ -unsigned -io_dump_pid (char *file) +unsigned io_dump_pid(char *file) { pid_t pid; FILE *fp; @@ -1367,10 +1223,9 @@ io_dump_pid (char *file) if (!file) return 0; - pid = getpid (); - if (!(fp = fopen (file, "w")) - || fprintf (fp, "%ld\n", (long)pid) < 0 - || fclose (fp) != 0) + pid = getpid(); + if (!(fp = fopen(file, "w")) + || fprintf(fp, "%ld\n", (long)pid) < 0 || fclose(fp) != 0) return 0; return 1; @@ -1381,8 +1236,7 @@ io_dump_pid (char *file) * io_dump_pid (). * If no file was found, return 0. */ -unsigned -io_get_pid (char *file) +unsigned io_get_pid(char *file) { FILE *fp; unsigned pid; @@ -1390,13 +1244,13 @@ io_get_pid (char *file) if (!file) return 0; - if ((fp = fopen (file, "r")) == NULL) + if ((fp = fopen(file, "r")) == NULL) return 0; - if (fscanf (fp, "%u", &pid) != 1) + if (fscanf(fp, "%u", &pid) != 1) return 0; - fclose (fp); + fclose(fp); return pid; } @@ -1404,24 +1258,19 @@ io_get_pid (char *file) /* * Check whether a file is empty. */ -int -io_file_is_empty (char *file) +int io_file_is_empty(char *file) { FILE *fp; - if (file && (fp = fopen (file, "r"))) - { - if ((fgetc (fp) == '\n' && fgetc (fp) == EOF) || feof (fp)) - { - fclose (fp); - return 1; - } - else - { - fclose (fp); - return 0; - } + if (file && (fp = fopen(file, "r"))) { + if ((fgetc(fp) == '\n' && fgetc(fp) == EOF) || feof(fp)) { + fclose(fp); + return 1; + } else { + fclose(fp); + return 0; } + } return -1; } @@ -1429,32 +1278,28 @@ io_file_is_empty (char *file) /* * Copy an existing file to a new location. */ -int -io_file_cp (const char *src, const char *dst) +int io_file_cp(const char *src, const char *dst) { FILE *fp_src, *fp_dst; char *buffer[BUFSIZ]; unsigned int bytes_read; - if (!(fp_src = fopen (src, "rb"))) + if (!(fp_src = fopen(src, "rb"))) return 0; - if (!(fp_dst = fopen (dst, "wb"))) + if (!(fp_dst = fopen(dst, "wb"))) return 0; - while (!feof (fp_src)) - { - bytes_read = fread (buffer, 1, BUFSIZ, fp_src); - if (bytes_read > 0) - { - if (fwrite (buffer, 1, bytes_read, fp_dst) != bytes_read) - return 0; - } - else + while (!feof(fp_src)) { + bytes_read = fread(buffer, 1, BUFSIZ, fp_src); + if (bytes_read > 0) { + if (fwrite(buffer, 1, bytes_read, fp_dst) != bytes_read) return 0; - } + } else + return 0; + } - fclose (fp_dst); - fclose (fp_src); + fclose(fp_dst); + fclose(fp_src); return 1; } @@ -39,7 +39,7 @@ #include "calcurse.h" -#define MAXKEYVAL KEY_MAX /* ncurses defines KEY_MAX as maximum key value */ +#define MAXKEYVAL KEY_MAX /* ncurses defines KEY_MAX as maximum key value */ struct keydef_s { const char *label; @@ -94,89 +94,80 @@ static struct keydef_s keydef[NBKEYS] = { {"lower-priority", "-"}, }; -static void -dump_intro (FILE *fd) +static void dump_intro(FILE * fd) { const char *intro = - _("#\n" - "# Calcurse keys configuration file\n#\n" - "# This file sets the keybindings used by Calcurse.\n" - "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" - "# To assign a keybinding to an action, this file must contain a line\n" - "# with the following syntax:\n#\n" - "# ACTION KEY1 KEY2 ... KEYn\n#\n" - "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" - "# will be pressed.\n" - "#\n" - "# To define bindings which use the CONTROL key, prefix the key with " - "'C-'.\n" - "# The escape, space bar and horizontal Tab key can be specified using\n" - "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" - "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" - "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" - "# keywords." - "\n#\n" - "# A description of what each ACTION keyword is used for is available\n" - "# from calcurse online configuration menu.\n"); - - fprintf (fd, "%s\n", intro); + _("#\n" + "# Calcurse keys configuration file\n#\n" + "# This file sets the keybindings used by Calcurse.\n" + "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" + "# To assign a keybinding to an action, this file must contain a line\n" + "# with the following syntax:\n#\n" + "# ACTION KEY1 KEY2 ... KEYn\n#\n" + "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" + "# will be pressed.\n" + "#\n" + "# To define bindings which use the CONTROL key, prefix the key with " + "'C-'.\n" + "# The escape, space bar and horizontal Tab key can be specified using\n" + "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" + "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" + "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" + "# keywords." + "\n#\n" + "# A description of what each ACTION keyword is used for is available\n" + "# from calcurse online configuration menu.\n"); + + fprintf(fd, "%s\n", intro); } -void -keys_init (void) +void keys_init(void) { int i; for (i = 0; i < MAXKEYVAL; i++) actions[i] = KEY_UNDEF; for (i = 0; i < NBKEYS; i++) - LLIST_INIT (&keys[i]); + LLIST_INIT(&keys[i]); } -static void -key_free (char *s) +static void key_free(char *s) { - mem_free (s); + mem_free(s); } -void -keys_free (void) +void keys_free(void) { int i; - for (i = 0; i < NBKEYS; i++) - { - LLIST_FREE_INNER (&keys[i], key_free); - LLIST_FREE (&keys[i]); - } + for (i = 0; i < NBKEYS; i++) { + LLIST_FREE_INNER(&keys[i], key_free); + LLIST_FREE(&keys[i]); + } } -void -keys_dump_defaults (char *file) +void keys_dump_defaults(char *file) { FILE *fd; int i; - fd = fopen (file, "w"); - EXIT_IF (fd == NULL, _("FATAL ERROR: could not create default keys file.")); + fd = fopen(file, "w"); + EXIT_IF(fd == NULL, _("FATAL ERROR: could not create default keys file.")); - dump_intro (fd); + dump_intro(fd); for (i = 0; i < NBKEYS; i++) - fprintf (fd, "%s %s\n", keydef[i].label, keydef[i].binding); - file_close (fd, __FILE_POS__); + fprintf(fd, "%s %s\n", keydef[i].label, keydef[i].binding); + file_close(fd, __FILE_POS__); } -const char * -keys_get_label (enum key key) +const char *keys_get_label(enum key key) { - EXIT_IF (key < 0 || key > NBKEYS, - _("FATAL ERROR: key value out of bounds")); + EXIT_IF(key < 0 || key > NBKEYS, _("FATAL ERROR: key value out of bounds")); return keydef[key].label; } -enum key -keys_get_action (int pressed) +enum key keys_get_action(int pressed) { if (pressed < 0 || pressed > MAXKEYVAL) return -1; @@ -184,61 +175,52 @@ keys_get_action (int pressed) return actions[pressed]; } -enum key -keys_getch (WINDOW *win, int *count) +enum key keys_getch(WINDOW * win, int *count) { int ch = '0'; - if (count) - { - *count = 0; - do - { - *count = *count * 10 + ch - '0'; - ch = wgetch (win); - } - while ((ch == '0' && *count > 0) || (ch >= '1' && ch <= '9')); - - if (*count == 0) - *count = 1; - } - else - ch = wgetch (win); - - switch (ch) - { - case KEY_RESIZE: - return KEY_RESIZE; - default: - return keys_get_action (ch); + if (count) { + *count = 0; + do { + *count = *count * 10 + ch - '0'; + ch = wgetch(win); } + while ((ch == '0' && *count > 0) || (ch >= '1' && ch <= '9')); + + if (*count == 0) + *count = 1; + } else + ch = wgetch(win); + + switch (ch) { + case KEY_RESIZE: + return KEY_RESIZE; + default: + return keys_get_action(ch); + } } -static void -add_key_str (enum key action, int key) +static void add_key_str(enum key action, int key) { if (action < 0 || action > NBKEYS) return; - LLIST_ADD (&keys[action], mem_strdup (keys_int2str (key))); + LLIST_ADD(&keys[action], mem_strdup(keys_int2str(key))); } -int -keys_assign_binding (int key, enum key action) +int keys_assign_binding(int key, enum key action) { if (key < 0 || key > MAXKEYVAL || actions[key] != KEY_UNDEF) return 1; - else - { - actions[key] = action; - add_key_str (action, key); - } + else { + actions[key] = action; + add_key_str(action, key); + } return 0; } -static void -del_key_str (enum key action, int key) +static void del_key_str(enum key action, int key) { llist_item_t *i; char oldstr[BUFSIZ]; @@ -246,30 +228,25 @@ del_key_str (enum key action, int key) if (action < 0 || action > NBKEYS) return; - strncpy (oldstr, keys_int2str (key), BUFSIZ); + strncpy(oldstr, keys_int2str(key), BUFSIZ); - LLIST_FOREACH (&keys[action], i) - { - if (strcmp (LLIST_GET_DATA (i), oldstr) == 0) - { - LLIST_REMOVE (&keys[action], i); - return; - } + LLIST_FOREACH(&keys[action], i) { + if (strcmp(LLIST_GET_DATA(i), oldstr) == 0) { + LLIST_REMOVE(&keys[action], i); + return; } + } } -void -keys_remove_binding (int key, enum key action) +void keys_remove_binding(int key, enum key action) { - if (key >= 0 && key <= MAXKEYVAL) - { - actions[key] = KEY_UNDEF; - del_key_str (action, key); - } + if (key >= 0 && key <= MAXKEYVAL) { + actions[key] = KEY_UNDEF; + del_key_str(action, key); + } } -int -keys_str2int (const char *key) +int keys_str2int(const char *key) { const char CONTROL_KEY[] = "C-"; const char TAB_KEY[] = "TAB"; @@ -284,144 +261,132 @@ keys_str2int (const char *key) if (!key) return -1; - if (strlen (key) == 1) + if (strlen(key) == 1) return (int)key[0]; - else - { - if (key[0] == '^') - return CTRL ((int)key[1]); - else if (!strncmp (key, CONTROL_KEY, sizeof (CONTROL_KEY) - 1)) - return CTRL ((int)key[sizeof (CONTROL_KEY) - 1]); - else if (!strcmp (key, TAB_KEY)) - return TAB; - else if (!strcmp (key, ESCAPE_KEY)) - return ESCAPE; - else if (!strcmp (key, SPACE_KEY)) - return SPACE; - else if (!strcmp (key, CURSES_KEY_UP)) - return KEY_UP; - else if (!strcmp (key, CURSES_KEY_DOWN)) - return KEY_DOWN; - else if (!strcmp (key, CURSES_KEY_LEFT)) - return KEY_LEFT; - else if (!strcmp (key, CURSES_KEY_RIGHT)) - return KEY_RIGHT; - else if (!strcmp (key, CURSES_KEY_HOME)) - return KEY_HOME; - else if (!strcmp (key, CURSES_KEY_END)) - return KEY_END; - else - return -1; - } + else { + if (key[0] == '^') + return CTRL((int)key[1]); + else if (!strncmp(key, CONTROL_KEY, sizeof(CONTROL_KEY) - 1)) + return CTRL((int)key[sizeof(CONTROL_KEY) - 1]); + else if (!strcmp(key, TAB_KEY)) + return TAB; + else if (!strcmp(key, ESCAPE_KEY)) + return ESCAPE; + else if (!strcmp(key, SPACE_KEY)) + return SPACE; + else if (!strcmp(key, CURSES_KEY_UP)) + return KEY_UP; + else if (!strcmp(key, CURSES_KEY_DOWN)) + return KEY_DOWN; + else if (!strcmp(key, CURSES_KEY_LEFT)) + return KEY_LEFT; + else if (!strcmp(key, CURSES_KEY_RIGHT)) + return KEY_RIGHT; + else if (!strcmp(key, CURSES_KEY_HOME)) + return KEY_HOME; + else if (!strcmp(key, CURSES_KEY_END)) + return KEY_END; + else + return -1; + } } -const char * -keys_int2str (int key) +const char *keys_int2str(int key) { - switch (key) - { - case TAB: - return "TAB"; - case SPACE: - return "SPC"; - case ESCAPE: - return "ESC"; - case KEY_UP: - return "UP"; - case KEY_DOWN: - return "DWN"; - case KEY_LEFT: - return "LFT"; - case KEY_RIGHT: - return "RGT"; - case KEY_HOME: - return "KEY_HOME"; - case KEY_END: - return "KEY_END"; - default: - return (char *)keyname (key); - } + switch (key) { + case TAB: + return "TAB"; + case SPACE: + return "SPC"; + case ESCAPE: + return "ESC"; + case KEY_UP: + return "UP"; + case KEY_DOWN: + return "DWN"; + case KEY_LEFT: + return "LFT"; + case KEY_RIGHT: + return "RGT"; + case KEY_HOME: + return "KEY_HOME"; + case KEY_END: + return "KEY_END"; + default: + return (char *)keyname(key); + } } -int -keys_action_count_keys (enum key action) +int keys_action_count_keys(enum key action) { llist_item_t *i; int n = 0; - LLIST_FOREACH (&keys[action], i) - n++; + LLIST_FOREACH(&keys[action], i) + n++; return n; } -const char * -keys_action_firstkey (enum key action) +const char *keys_action_firstkey(enum key action) { - const char *s = LLIST_GET_DATA (LLIST_FIRST (&keys[action])); + const char *s = LLIST_GET_DATA(LLIST_FIRST(&keys[action])); return (s != NULL) ? s : "XXX"; } -const char * -keys_action_nkey (enum key action, int keynum) +const char *keys_action_nkey(enum key action, int keynum) { - return LLIST_GET_DATA (LLIST_NTH (&keys[action], keynum)); + return LLIST_GET_DATA(LLIST_NTH(&keys[action], keynum)); } -char * -keys_action_allkeys (enum key action) +char *keys_action_allkeys(enum key action) { llist_item_t *i; static char keystr[BUFSIZ]; const char *CHAR_SPACE = " "; - if (!LLIST_FIRST (&keys[action])) + if (!LLIST_FIRST(&keys[action])) return NULL; keystr[0] = '\0'; - LLIST_FOREACH (&keys[action], i) - { - const int MAXLEN = sizeof (keystr) - 1 - strlen (keystr); - strncat (keystr, LLIST_GET_DATA (i), MAXLEN - 1); - strncat (keystr, CHAR_SPACE, 1); - } + LLIST_FOREACH(&keys[action], i) { + const int MAXLEN = sizeof(keystr) - 1 - strlen(keystr); + strncat(keystr, LLIST_GET_DATA(i), MAXLEN - 1); + strncat(keystr, CHAR_SPACE, 1); + } return keystr; } /* Need this to display keys properly inside status bar. */ -static char * -keys_format_label (char *key, int keylen) +static char *keys_format_label(char *key, int keylen) { static char fmtkey[BUFSIZ]; - const int len = strlen (key); + const int len = strlen(key); const char dot = '.'; int i; if (keylen > BUFSIZ) return NULL; - memset (fmtkey, 0, sizeof(fmtkey)); + memset(fmtkey, 0, sizeof(fmtkey)); if (len == 0) - strncpy (fmtkey, "?", sizeof (fmtkey)); - else if (len <= keylen) - { - for (i = 0; i < keylen - len; i++) - fmtkey[i] = ' '; - strncat (fmtkey, key, keylen); - } - else - { - for (i = 0; i < keylen - 1; i++) - fmtkey[i] = key[i]; - fmtkey[keylen - 1] = dot; - } + strncpy(fmtkey, "?", sizeof(fmtkey)); + else if (len <= keylen) { + for (i = 0; i < keylen - len; i++) + fmtkey[i] = ' '; + strncat(fmtkey, key, keylen); + } else { + for (i = 0; i < keylen - 1; i++) + fmtkey[i] = key[i]; + fmtkey[keylen - 1] = dot; + } return fmtkey; } void -keys_display_bindings_bar (WINDOW *win, struct binding *bindings[], int count, - int page_base, int page_size, struct binding *more) +keys_display_bindings_bar(WINDOW * win, struct binding *bindings[], int count, + int page_base, int page_size, struct binding *more) { /* Padding between two key bindings. */ const int padding = (col * 2) / page_size - (KEYS_KEYLEN + KEYS_LABELEN + 1); @@ -430,203 +395,171 @@ keys_display_bindings_bar (WINDOW *win, struct binding *bindings[], int count, int i; - wins_erase_status_bar (); - for (i = 0; i < page_size && page_base + i < count; i++) - { - /* Location of key and label. */ - const int key_pos_x = (i / 2) * cmd_len; - const int key_pos_y = i % 2; - const int label_pos_x = key_pos_x + KEYS_KEYLEN + 1; - const int label_pos_y = key_pos_y; - - struct binding *binding; - char key[KEYS_KEYLEN + 1], *fmtkey; - - if (!more || i < page_size - 1 || page_base + i == count - 1) - binding = bindings[page_base + i]; - else - binding = more; - - strncpy (key, keys_action_firstkey (binding->action), KEYS_KEYLEN); - key[KEYS_KEYLEN] = '\0'; - fmtkey = keys_format_label (key, KEYS_KEYLEN); - - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, key_pos_y, key_pos_x, fmtkey); - custom_remove_attr (win, ATTR_HIGHEST); - mvwprintw (win, label_pos_y, label_pos_x, binding->label); - } - wnoutrefresh (win); + wins_erase_status_bar(); + for (i = 0; i < page_size && page_base + i < count; i++) { + /* Location of key and label. */ + const int key_pos_x = (i / 2) * cmd_len; + const int key_pos_y = i % 2; + const int label_pos_x = key_pos_x + KEYS_KEYLEN + 1; + const int label_pos_y = key_pos_y; + + struct binding *binding; + char key[KEYS_KEYLEN + 1], *fmtkey; + + if (!more || i < page_size - 1 || page_base + i == count - 1) + binding = bindings[page_base + i]; + else + binding = more; + + strncpy(key, keys_action_firstkey(binding->action), KEYS_KEYLEN); + key[KEYS_KEYLEN] = '\0'; + fmtkey = keys_format_label(key, KEYS_KEYLEN); + + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, key_pos_y, key_pos_x, fmtkey); + custom_remove_attr(win, ATTR_HIGHEST); + mvwprintw(win, label_pos_y, label_pos_x, binding->label); + } + wnoutrefresh(win); } /* * Display information about the given key. * (could not add the keys descriptions to keydef variable, because of i18n). */ -void -keys_popup_info (enum key key) +void keys_popup_info(enum key key) { char *info[NBKEYS]; WINDOW *infowin; - info[KEY_GENERIC_CANCEL] = - _("Cancel the ongoing action."); - info[KEY_GENERIC_SELECT] = - _("Select the highlighted item."); + info[KEY_GENERIC_CANCEL] = _("Cancel the ongoing action."); + info[KEY_GENERIC_SELECT] = _("Select the highlighted item."); info[KEY_GENERIC_CREDITS] = - _("Print general information about calcurse's authors, license, etc."); + _("Print general information about calcurse's authors, license, etc."); info[KEY_GENERIC_HELP] = - _("Display hints whenever some help screens are available."); - info[KEY_GENERIC_QUIT] = - _("Exit from the current menu, or quit calcurse."); - info[KEY_GENERIC_SAVE] = - _("Save calcurse data."); - info[KEY_GENERIC_CUT] = - _("Help for `generic-cut`."); - info[KEY_GENERIC_PASTE] = - _("Help for `generic-paste`."); + _("Display hints whenever some help screens are available."); + info[KEY_GENERIC_QUIT] = _("Exit from the current menu, or quit calcurse."); + info[KEY_GENERIC_SAVE] = _("Save calcurse data."); + info[KEY_GENERIC_CUT] = _("Help for `generic-cut`."); + info[KEY_GENERIC_PASTE] = _("Help for `generic-paste`."); info[KEY_GENERIC_CHANGE_VIEW] = - _("Select next panel in calcurse main screen."); - info[KEY_GENERIC_IMPORT] = - _("Import data from an external file."); - info[KEY_GENERIC_EXPORT] = - _("Export data to a new file format."); - info[KEY_GENERIC_GOTO] = - _("Select the day to go to."); + _("Select next panel in calcurse main screen."); + info[KEY_GENERIC_IMPORT] = _("Import data from an external file."); + info[KEY_GENERIC_EXPORT] = _("Export data to a new file format."); + info[KEY_GENERIC_GOTO] = _("Select the day to go to."); info[KEY_GENERIC_OTHER_CMD] = - _("Show next possible actions inside status bar."); - info[KEY_GENERIC_CONFIG_MENU] = - _("Enter the configuration menu."); - info[KEY_GENERIC_REDRAW] = - _("Redraw calcurse's screen."); + _("Show next possible actions inside status bar."); + info[KEY_GENERIC_CONFIG_MENU] = _("Enter the configuration menu."); + info[KEY_GENERIC_REDRAW] = _("Redraw calcurse's screen."); info[KEY_GENERIC_ADD_APPT] = - _("Add an appointment, whichever panel is currently selected."); + _("Add an appointment, whichever panel is currently selected."); info[KEY_GENERIC_ADD_TODO] = - _("Add a todo item, whichever panel is currently selected."); + _("Add a todo item, whichever panel is currently selected."); info[KEY_GENERIC_NEXT_DAY] = - _("Move to next day in calendar, whichever panel is currently selected."); + _("Move to next day in calendar, whichever panel is currently selected."); info[KEY_GENERIC_PREV_DAY] = - _("Move to previous day in calendar, whichever panel is currently " - "selected."); + _("Move to previous day in calendar, whichever panel is currently " + "selected."); info[KEY_GENERIC_NEXT_WEEK] = - _("Move to next week in calendar, whichever panel is currently selected."); + _ + ("Move to next week in calendar, whichever panel is currently selected."); info[KEY_GENERIC_PREV_WEEK] = - _("Move to previous week in calendar, whichever panel is currently " - "selected"); + _("Move to previous week in calendar, whichever panel is currently " + "selected"); info[KEY_GENERIC_SCROLL_DOWN] = - _("Scroll window down (e.g. when displaying text inside a popup window)."); + _ + ("Scroll window down (e.g. when displaying text inside a popup window)."); info[KEY_GENERIC_SCROLL_UP] = - _("Scroll window up (e.g. when displaying text inside a popup window)."); - info[KEY_GENERIC_GOTO_TODAY] = - _("Go to today, whichever panel is selected."); - info[KEY_MOVE_RIGHT] = - _("Move to the right."); - info[KEY_MOVE_LEFT] = - _("Move to the left."); - info[KEY_MOVE_DOWN] = - _("Move down."); - info[KEY_MOVE_UP] = - _("Move up."); + _("Scroll window up (e.g. when displaying text inside a popup window)."); + info[KEY_GENERIC_GOTO_TODAY] = _("Go to today, whichever panel is selected."); + info[KEY_MOVE_RIGHT] = _("Move to the right."); + info[KEY_MOVE_LEFT] = _("Move to the left."); + info[KEY_MOVE_DOWN] = _("Move down."); + info[KEY_MOVE_UP] = _("Move up."); info[KEY_START_OF_WEEK] = - _("Select the first day of the current week when inside the calendar " - "panel."); + _("Select the first day of the current week when inside the calendar " + "panel."); info[KEY_END_OF_WEEK] = - _("Select the last day of the current week when inside the calendar " - "panel."); - info[KEY_ADD_ITEM] = - _("Add an item to the currently selected panel."); - info[KEY_DEL_ITEM] = - _("Delete the currently selected item."); - info[KEY_EDIT_ITEM] = - _("Edit the currently seleted item."); + _("Select the last day of the current week when inside the calendar " + "panel."); + info[KEY_ADD_ITEM] = _("Add an item to the currently selected panel."); + info[KEY_DEL_ITEM] = _("Delete the currently selected item."); + info[KEY_EDIT_ITEM] = _("Edit the currently seleted item."); info[KEY_VIEW_ITEM] = - _("Display the currently selected item inside a popup window."); - info[KEY_FLAG_ITEM] = - _("Flag the currently selected item as important."); - info[KEY_REPEAT_ITEM] = - _("Repeat an item"); + _("Display the currently selected item inside a popup window."); + info[KEY_FLAG_ITEM] = _("Flag the currently selected item as important."); + info[KEY_REPEAT_ITEM] = _("Repeat an item"); info[KEY_PIPE_ITEM] = - _("Pipe the currently selected item to an external program."); + _("Pipe the currently selected item to an external program."); info[KEY_EDIT_NOTE] = - _("Attach (or edit if one exists) a note to the currently selected item"); + _("Attach (or edit if one exists) a note to the currently selected item"); info[KEY_VIEW_NOTE] = - _("View the note attached to the currently selected item."); - info[KEY_RAISE_PRIORITY] = - _("Raise a task priority inside the todo panel."); - info[KEY_LOWER_PRIORITY] = - _("Lower a task priority inside the todo panel."); + _("View the note attached to the currently selected item."); + info[KEY_RAISE_PRIORITY] = _("Raise a task priority inside the todo panel."); + info[KEY_LOWER_PRIORITY] = _("Lower a task priority inside the todo panel."); if (key < 0 || key > NBKEYS) return; #define WINROW 10 #define WINCOL (col - 4) - infowin = popup (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2, - keydef[key].label, info[key], 1); - keys_getch (infowin, NULL); - delwin (infowin); + infowin = popup(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2, + keydef[key].label, info[key], 1); + keys_getch(infowin, NULL); + delwin(infowin); #undef WINROW #undef WINCOL } -void -keys_save_bindings (FILE *fd) +void keys_save_bindings(FILE * fd) { int i; - EXIT_IF (fd == NULL, _("FATAL ERROR: null file pointer.")); - dump_intro (fd); + EXIT_IF(fd == NULL, _("FATAL ERROR: null file pointer.")); + dump_intro(fd); for (i = 0; i < NBKEYS; i++) - fprintf (fd, "%s %s\n", keydef[i].label, keys_action_allkeys (i)); + fprintf(fd, "%s %s\n", keydef[i].label, keys_action_allkeys(i)); } -int -keys_check_missing_bindings (void) +int keys_check_missing_bindings(void) { int i; - for (i = 0; i < NBKEYS; i++) - { - if (!LLIST_FIRST (&keys[i])) - return 1; - } + for (i = 0; i < NBKEYS; i++) { + if (!LLIST_FIRST(&keys[i])) + return 1; + } return 0; } -void -keys_fill_missing (void) +void keys_fill_missing(void) { int i; - for (i = 0; i < NBKEYS; i++) - { - if (!LLIST_FIRST (&keys[i])) - { - char *p, tmpbuf[BUFSIZ]; - - strncpy (tmpbuf, keydef[i].binding, BUFSIZ); - p = tmpbuf; - for (;;) - { - char key_ch[BUFSIZ]; - - while (*p == ' ') - p++; - if (sscanf (p, "%s", key_ch) == 1) - { - int ch, used; - - ch = keys_str2int (key_ch); - used = keys_assign_binding (ch, i); - if (used) - WARN_MSG (_("When adding default key for \"%s\", " - "\"%s\" was already assigned!"), - keydef[i].label, key_ch); - p += strlen (key_ch) + 1; - } - else - break; - } - } + for (i = 0; i < NBKEYS; i++) { + if (!LLIST_FIRST(&keys[i])) { + char *p, tmpbuf[BUFSIZ]; + + strncpy(tmpbuf, keydef[i].binding, BUFSIZ); + p = tmpbuf; + for (;;) { + char key_ch[BUFSIZ]; + + while (*p == ' ') + p++; + if (sscanf(p, "%s", key_ch) == 1) { + int ch, used; + + ch = keys_str2int(key_ch); + used = keys_assign_binding(ch, i); + if (used) + WARN_MSG(_("When adding default key for \"%s\", " + "\"%s\" was already assigned!"), + keydef[i].label, key_ch); + p += strlen(key_ch) + 1; + } else + break; + } } + } } diff --git a/src/llist.c b/src/llist.c index c10cde3..847b795 100644 --- a/src/llist.c +++ b/src/llist.c @@ -39,8 +39,7 @@ /* * Initialize a list. */ -void -llist_init (llist_t *l) +void llist_init(llist_t * l) { l->head = NULL; l->tail = NULL; @@ -49,16 +48,14 @@ llist_init (llist_t *l) /* * Free a list, but not the contained data. */ -void -llist_free (llist_t *l) +void llist_free(llist_t * l) { llist_item_t *i, *t; - for (i = l->head; i; i = t) - { - t = i->next; - mem_free (i); - } + for (i = l->head; i; i = t) { + t = i->next; + mem_free(i); + } l->head = NULL; l->tail = NULL; @@ -67,26 +64,22 @@ llist_free (llist_t *l) /* * Free the data contained in a list. */ -void -llist_free_inner (llist_t *l, llist_fn_free_t fn_free) +void llist_free_inner(llist_t * l, llist_fn_free_t fn_free) { llist_item_t *i; - for (i = l->head; i; i = i->next) - { - if (i->data) - { - fn_free(i->data); - i->data = NULL; - } + for (i = l->head; i; i = i->next) { + if (i->data) { + fn_free(i->data); + i->data = NULL; } + } } /* * Get the first item of a list. */ -llist_item_t * -llist_first (llist_t *l) +llist_item_t *llist_first(llist_t * l) { return l->head; } @@ -94,8 +87,7 @@ llist_first (llist_t *l) /* * Get the nth item of a list. */ -llist_item_t * -llist_nth (llist_t *l, int n) +llist_item_t *llist_nth(llist_t * l, int n) { llist_item_t *i; @@ -111,8 +103,7 @@ llist_nth (llist_t *l, int n) /* * Get the successor of a list item. */ -llist_item_t * -llist_next (llist_item_t *i) +llist_item_t *llist_next(llist_item_t * i) { return i ? i->next : NULL; } @@ -121,10 +112,10 @@ llist_next (llist_item_t *i) * Return the successor of a list item if it is matched by some filter * callback. Return NULL otherwise. */ -llist_item_t * -llist_next_filter (llist_item_t *i, long data, llist_fn_match_t fn_match) +llist_item_t *llist_next_filter(llist_item_t * i, long data, + llist_fn_match_t fn_match) { - if (i && i->next && fn_match (i->next->data, data)) + if (i && i->next && fn_match(i->next->data, data)) return i->next; else return NULL; @@ -133,8 +124,7 @@ llist_next_filter (llist_item_t *i, long data, llist_fn_match_t fn_match) /* * Get the actual data of an item. */ -void * -llist_get_data (llist_item_t *i) +void *llist_get_data(llist_item_t * i) { return i ? i->data : NULL; } @@ -142,103 +132,88 @@ llist_get_data (llist_item_t *i) /* * Add an item at the end of a list. */ -void -llist_add (llist_t *l, void *data) +void llist_add(llist_t * l, void *data) { - llist_item_t *o = mem_malloc (sizeof (llist_item_t)); - - if (o) - { - o->data = data; - o->next = NULL; - - if (!l->head) - l->head = l->tail = o; - else - { - l->tail->next = o; - l->tail = o; - } + llist_item_t *o = mem_malloc(sizeof(llist_item_t)); + + if (o) { + o->data = data; + o->next = NULL; + + if (!l->head) + l->head = l->tail = o; + else { + l->tail->next = o; + l->tail = o; } + } } /* * Add an item to a sorted list. */ -void -llist_add_sorted (llist_t *l, void *data, llist_fn_cmp_t fn_cmp) +void llist_add_sorted(llist_t * l, void *data, llist_fn_cmp_t fn_cmp) { - llist_item_t *o = mem_malloc (sizeof (llist_item_t)); + llist_item_t *o = mem_malloc(sizeof(llist_item_t)); llist_item_t *i; - if (o) - { - o->data = data; - o->next = NULL; - - if (!l->head) - l->head = l->tail = o; - else if (fn_cmp(o->data, l->tail->data) >= 0) - { - l->tail->next = o; - l->tail = o; - } - else if (fn_cmp(o->data, l->head->data) < 0) - { - o->next = l->head; - l->head = o; - } - else - { - i = l->head; - while (i->next && fn_cmp(o->data, i->next->data) >= 0) - i = i->next; - o->next = i->next; - i->next = o; - } + if (o) { + o->data = data; + o->next = NULL; + + if (!l->head) + l->head = l->tail = o; + else if (fn_cmp(o->data, l->tail->data) >= 0) { + l->tail->next = o; + l->tail = o; + } else if (fn_cmp(o->data, l->head->data) < 0) { + o->next = l->head; + l->head = o; + } else { + i = l->head; + while (i->next && fn_cmp(o->data, i->next->data) >= 0) + i = i->next; + o->next = i->next; + i->next = o; } + } } /* * Remove an item from a list. */ -void -llist_remove (llist_t *l, llist_item_t *i) +void llist_remove(llist_t * l, llist_item_t * i) { llist_item_t *j = NULL; if (l->head && i == l->head) l->head = i->next; - else - { - for (j = l->head; j && j->next != i; j = j->next) - ; - } - - if (i) - { - if (j) - j->next = i->next; - if (i == l->tail) - l->tail = j; - - mem_free (i); - } + else { + for (j = l->head; j && j->next != i; j = j->next) ; + } + + if (i) { + if (j) + j->next = i->next; + if (i == l->tail) + l->tail = j; + + mem_free(i); + } } /* * Find the first item matched by some filter callback. */ -llist_item_t * -llist_find_first (llist_t *l, long data, llist_fn_match_t fn_match) +llist_item_t *llist_find_first(llist_t * l, long data, + llist_fn_match_t fn_match) { llist_item_t *i; - for (i = l->head; i; i = i->next) - { - if (fn_match (i->data, data)) - return i; - } + for (i = l->head; i; i = i->next) { + if (fn_match(i->data, data)) + return i; + } return NULL; } @@ -246,18 +221,16 @@ llist_find_first (llist_t *l, long data, llist_fn_match_t fn_match) /* * Find the next item matched by some filter callback. */ -llist_item_t * -llist_find_next (llist_item_t *i, long data, llist_fn_match_t fn_match) +llist_item_t *llist_find_next(llist_item_t * i, long data, + llist_fn_match_t fn_match) { - if (i) - { - i = i->next; - for (; i; i = i->next) - { - if (fn_match (i->data, data)) - return i; - } + if (i) { + i = i->next; + for (; i; i = i->next) { + if (fn_match(i->data, data)) + return i; } + } return NULL; } @@ -265,19 +238,18 @@ llist_find_next (llist_item_t *i, long data, llist_fn_match_t fn_match) /* * Find the nth item matched by some filter callback. */ -llist_item_t * -llist_find_nth (llist_t *l, int n, long data, llist_fn_match_t fn_match) +llist_item_t *llist_find_nth(llist_t * l, int n, long data, + llist_fn_match_t fn_match) { llist_item_t *i; if (n < 0) return NULL; - for (i = l->head; i; i = i->next) - { - if (fn_match (i->data, data) && (n-- == 0)) - return i; - } + for (i = l->head; i; i = i->next) { + if (fn_match(i->data, data) && (n-- == 0)) + return i; + } return NULL; } diff --git a/src/llist.h b/src/llist.h index d2c61c8..c795f37 100644 --- a/src/llist.h +++ b/src/llist.h @@ -38,7 +38,7 @@ typedef struct llist_item llist_item_t; struct llist_item { struct llist_item *next; - void *data; + void *data; }; typedef struct llist llist_t; @@ -52,9 +52,9 @@ typedef int (*llist_fn_match_t) (void *, long); typedef void (*llist_fn_free_t) (void *); /* Initialization and deallocation. */ -void llist_init (llist_t *); -void llist_free (llist_t *); -void llist_free_inner (llist_t *, llist_fn_free_t); +void llist_init(llist_t *); +void llist_free(llist_t *); +void llist_free_inner(llist_t *, llist_fn_free_t); #define LLIST_INIT(l) llist_init(l) #define LLIST_FREE(l) llist_free(l) @@ -62,13 +62,13 @@ void llist_free_inner (llist_t *, llist_fn_free_t); llist_free_inner(l, (llist_fn_free_t)fn_free) /* Retrieving list items. */ -llist_item_t *llist_first (llist_t *); -llist_item_t *llist_nth (llist_t *, int); -llist_item_t *llist_next (llist_item_t *); -llist_item_t *llist_next_filter (llist_item_t *, long, llist_fn_match_t); -llist_item_t *llist_find_first (llist_t *, long, llist_fn_match_t); -llist_item_t *llist_find_next (llist_item_t *, long, llist_fn_match_t); -llist_item_t *llist_find_nth (llist_t *, int, long, llist_fn_match_t); +llist_item_t *llist_first(llist_t *); +llist_item_t *llist_nth(llist_t *, int); +llist_item_t *llist_next(llist_item_t *); +llist_item_t *llist_next_filter(llist_item_t *, long, llist_fn_match_t); +llist_item_t *llist_find_first(llist_t *, long, llist_fn_match_t); +llist_item_t *llist_find_next(llist_item_t *, long, llist_fn_match_t); +llist_item_t *llist_find_nth(llist_t *, int, long, llist_fn_match_t); #define LLIST_FIRST(l) llist_first(l) #define LLIST_NTH(l, n) llist_nth(l, n) @@ -91,14 +91,14 @@ llist_item_t *llist_find_nth (llist_t *, int, long, llist_fn_match_t); i = LLIST_NEXT_FILTER (i, data, fn_match)) /* Accessing list item data. */ -void *llist_get_data (llist_item_t *); +void *llist_get_data(llist_item_t *); #define LLIST_GET_DATA(i) llist_get_data(i) /* List manipulation. */ -void llist_add (llist_t *, void *); -void llist_add_sorted (llist_t *, void *, llist_fn_cmp_t); -void llist_remove (llist_t *, llist_item_t *); +void llist_add(llist_t *, void *); +void llist_add_sorted(llist_t *, void *, llist_fn_cmp_t); +void llist_remove(llist_t *, llist_item_t *); #define LLIST_ADD(l, data) llist_add(l, data) #define LLIST_ADD_SORTED(l, data, fn_cmp) \ diff --git a/src/llist_ts.h b/src/llist_ts.h index 552c21c..b452377 100644 --- a/src/llist_ts.h +++ b/src/llist_ts.h @@ -37,9 +37,9 @@ /* Thread-safe linked lists. */ typedef struct llist_ts llist_ts_t; struct llist_ts { - llist_item_t *head; - llist_item_t *tail; - pthread_mutex_t mutex; + llist_item_t *head; + llist_item_t *tail; + pthread_mutex_t mutex; }; /* Initialization and deallocation. */ @@ -90,4 +90,3 @@ struct llist_ts { #define LLIST_TS_REMOVE(l_ts, i) llist_remove ((llist_t *)l_ts, i) #define LLIST_TS_ADD_SORTED(l_ts, data, fn_cmp) \ llist_add_sorted ((llist_t *)l_ts, data, (llist_fn_cmp_t)fn_cmp) - @@ -71,75 +71,68 @@ static struct mem_stats mstats; #endif /* CALCURSE_MEMORY_DEBUG */ - -void * -xmalloc (size_t size) +void *xmalloc(size_t size) { void *p; - EXIT_IF (size == 0, _("xmalloc: zero size")); - p = malloc (size); - EXIT_IF (p == NULL, _("xmalloc: out of memory")); + EXIT_IF(size == 0, _("xmalloc: zero size")); + p = malloc(size); + EXIT_IF(p == NULL, _("xmalloc: out of memory")); return p; } -void * -xcalloc (size_t nmemb, size_t size) +void *xcalloc(size_t nmemb, size_t size) { void *p; - EXIT_IF (nmemb == 0 || size == 0, _("xcalloc: zero size")); - EXIT_IF (SIZE_MAX / nmemb < size, _("xcalloc: overflow")); - p = calloc (nmemb, size); - EXIT_IF (p == NULL, _("xcalloc: out of memory")); + EXIT_IF(nmemb == 0 || size == 0, _("xcalloc: zero size")); + EXIT_IF(SIZE_MAX / nmemb < size, _("xcalloc: overflow")); + p = calloc(nmemb, size); + EXIT_IF(p == NULL, _("xcalloc: out of memory")); return p; } -void * -xrealloc (void *ptr, size_t nmemb, size_t size) +void *xrealloc(void *ptr, size_t nmemb, size_t size) { void *new_ptr; size_t new_size; new_size = nmemb * size; - EXIT_IF (new_size == 0, _("xrealloc: zero size")); - EXIT_IF (SIZE_MAX / nmemb < size, _("xrealloc: overflow")); - new_ptr = realloc (ptr, new_size); - EXIT_IF (new_ptr == NULL, _("xrealloc: out of memory")); + EXIT_IF(new_size == 0, _("xrealloc: zero size")); + EXIT_IF(SIZE_MAX / nmemb < size, _("xrealloc: overflow")); + new_ptr = realloc(ptr, new_size); + EXIT_IF(new_ptr == NULL, _("xrealloc: out of memory")); return new_ptr; } -char * -xstrdup (const char *str) +char *xstrdup(const char *str) { size_t len; char *cp; - len = strlen (str) + 1; - cp = xmalloc (len); + len = strlen(str) + 1; + cp = xmalloc(len); - return strncpy (cp, str, len); + return strncpy(cp, str, len); } -void -xfree (void *p) +void xfree(void *p) { - EXIT_IF (p == NULL, _("xfree: null pointer")); - free (p); + EXIT_IF(p == NULL, _("xfree: null pointer")); + free(p); } #ifdef CALCURSE_MEMORY_DEBUG -static unsigned -stats_add_blk (size_t size, const char *pos) +static unsigned stats_add_blk(size_t size, const char *pos) { struct mem_blk *o, **i; - o = malloc (sizeof (*o)); - EXIT_IF (o == NULL, _("could not allocate memory to store block info")); + o = malloc(sizeof(*o)); + EXIT_IF(o == NULL, _("could not allocate memory to store block info")); mstats.ncall++; @@ -147,103 +140,95 @@ stats_add_blk (size_t size, const char *pos) o->size = (unsigned)size; o->next = 0; - for (i = &mstats.blk; *i; i = &(*i)->next) - ; + for (i = &mstats.blk; *i; i = &(*i)->next) ; o->id = mstats.ncall; *i = o; return o->id; } -static void -stats_del_blk (unsigned id) +static void stats_del_blk(unsigned id) { struct mem_blk *o, **i; i = &mstats.blk; - for (o = mstats.blk; o; o = o->next) - { - if (o->id == id) - { - *i = o->next; - free (o); - return; - } - i = &o->next; + for (o = mstats.blk; o; o = o->next) { + if (o->id == id) { + *i = o->next; + free(o); + return; } + i = &o->next; + } - EXIT (_("Block not found")); + EXIT(_("Block not found")); /* NOTREACHED */ } -void * -dbg_malloc (size_t size, const char *pos) +void *dbg_malloc(size_t size, const char *pos) { unsigned *buf; - if (size == 0) + if (size == 0) return NULL; - size = EXTRA_SPACE + (size + sizeof (unsigned) - 1) / sizeof (unsigned); - buf = xmalloc (size * sizeof (unsigned)); + size = EXTRA_SPACE + (size + sizeof(unsigned) - 1) / sizeof(unsigned); + buf = xmalloc(size * sizeof(unsigned)); - buf[BLK_STATE] = MAGIC_ALLOC; /* state of the block */ - buf[BLK_SIZE] = size; /* size of the block */ - buf[BLK_ID] = stats_add_blk (size, pos); /* identify a block by its id */ - buf[size - 1] = buf[BLK_ID]; /* mark at end of block */ + buf[BLK_STATE] = MAGIC_ALLOC; /* state of the block */ + buf[BLK_SIZE] = size; /* size of the block */ + buf[BLK_ID] = stats_add_blk(size, pos); /* identify a block by its id */ + buf[size - 1] = buf[BLK_ID]; /* mark at end of block */ mstats.nalloc += size; return (void *)(buf + EXTRA_SPACE_START); } -void * -dbg_calloc (size_t nmemb, size_t size, const char *pos) +void *dbg_calloc(size_t nmemb, size_t size, const char *pos) { void *buf; if (!nmemb || !size) return NULL; - EXIT_IF (nmemb > SIZE_MAX / size, _("overflow at %s"), pos); + EXIT_IF(nmemb > SIZE_MAX / size, _("overflow at %s"), pos); size *= nmemb; - if ((buf = dbg_malloc (size, pos)) == NULL) + if ((buf = dbg_malloc(size, pos)) == NULL) return NULL; - memset (buf, 0, size); + memset(buf, 0, size); return buf; } -void * -dbg_realloc (void *ptr, size_t nmemb, size_t size, const char *pos) +void *dbg_realloc(void *ptr, size_t nmemb, size_t size, const char *pos) { unsigned *buf, old_size, new_size, cpy_size; if (ptr == NULL) return NULL; - new_size = nmemb *size; + new_size = nmemb * size; if (new_size == 0) return NULL; - EXIT_IF (nmemb > SIZE_MAX / size, _("overflow at %s"), pos); + EXIT_IF(nmemb > SIZE_MAX / size, _("overflow at %s"), pos); - if ((buf = dbg_malloc (new_size, pos)) == NULL) + if ((buf = dbg_malloc(new_size, pos)) == NULL) return NULL; old_size = *((unsigned *)ptr - EXTRA_SPACE_START + BLK_SIZE); cpy_size = (old_size > new_size) ? new_size : old_size; - memmove (buf, ptr, cpy_size); + memmove(buf, ptr, cpy_size); - mem_free (ptr); + mem_free(ptr); return (void *)buf; } -char * -dbg_strdup (const char *s, const char *pos) +char *dbg_strdup(const char *s, const char *pos) { size_t size; char *buf; @@ -251,71 +236,66 @@ dbg_strdup (const char *s, const char *pos) if (s == NULL) return NULL; - size = strlen (s); - if ((buf = dbg_malloc (size + 1, pos)) == NULL) + size = strlen(s); + if ((buf = dbg_malloc(size + 1, pos)) == NULL) return NULL; - return strncpy (buf, s, size + 1); + return strncpy(buf, s, size + 1); } -void -dbg_free (void *ptr, const char *pos) +void dbg_free(void *ptr, const char *pos) { unsigned *buf, size; - EXIT_IF (ptr == NULL, _("dbg_free: null pointer at %s"), pos); + EXIT_IF(ptr == NULL, _("dbg_free: null pointer at %s"), pos); buf = (unsigned *)ptr - EXTRA_SPACE_START; size = buf[BLK_SIZE]; - EXIT_IF (buf[BLK_STATE] == MAGIC_FREE, - _("block seems already freed at %s"), pos); - EXIT_IF (buf[BLK_STATE] != MAGIC_ALLOC, - _("corrupt block header at %s"), pos); - EXIT_IF (buf[size - 1] != buf[BLK_ID], - _("corrupt block end at %s, (end = %u, should be %d)"), pos, - buf[size - 1], buf[BLK_ID]); + EXIT_IF(buf[BLK_STATE] == MAGIC_FREE, + _("block seems already freed at %s"), pos); + EXIT_IF(buf[BLK_STATE] != MAGIC_ALLOC, _("corrupt block header at %s"), pos); + EXIT_IF(buf[size - 1] != buf[BLK_ID], + _("corrupt block end at %s, (end = %u, should be %d)"), pos, + buf[size - 1], buf[BLK_ID]); buf[0] = MAGIC_FREE; - stats_del_blk (buf[BLK_ID]); + stats_del_blk(buf[BLK_ID]); - free (buf); + free(buf); mstats.nfree += size; } -static void -dump_block_info (struct mem_blk *blk) +static void dump_block_info(struct mem_blk *blk) { if (blk == NULL) return; - puts (_("---==== MEMORY BLOCK ====----------------\n")); - printf (_(" id: %u\n"), blk->id); - printf (_(" size: %u\n"), blk->size); - printf (_(" allocated in: %s\n"), blk->pos); - puts (_("-----------------------------------------\n")); + puts(_("---==== MEMORY BLOCK ====----------------\n")); + printf(_(" id: %u\n"), blk->id); + printf(_(" size: %u\n"), blk->size); + printf(_(" allocated in: %s\n"), blk->pos); + puts(_("-----------------------------------------\n")); } -void -mem_stats (void) +void mem_stats(void) { - putchar ('\n'); - puts (_("+------------------------------+\n")); - puts (_("| calcurse memory usage report |\n")); - puts (_("+------------------------------+\n")); - printf (_(" number of calls: %u\n"), mstats.ncall); - printf (_(" allocated blocks: %u\n"), mstats.nalloc); - printf (_(" unfreed blocks: %u\n"), mstats.nalloc - mstats.nfree); - putchar ('\n'); - - if (mstats.nfree < mstats.nalloc) - { - struct mem_blk *blk; - - for (blk = mstats.blk; blk; blk = blk->next) - dump_block_info (blk); - } + putchar('\n'); + puts(_("+------------------------------+\n")); + puts(_("| calcurse memory usage report |\n")); + puts(_("+------------------------------+\n")); + printf(_(" number of calls: %u\n"), mstats.ncall); + printf(_(" allocated blocks: %u\n"), mstats.nalloc); + printf(_(" unfreed blocks: %u\n"), mstats.nalloc - mstats.nfree); + putchar('\n'); + + if (mstats.nfree < mstats.nalloc) { + struct mem_blk *blk; + + for (blk = mstats.blk; blk; blk = blk->next) + dump_block_info(blk); + } } #endif /* CALCURSE_MEMORY_DEBUG */ @@ -43,135 +43,124 @@ struct note_gc_hash { char *hash; char buf[MAX_NOTESIZ + 1]; - HTABLE_ENTRY (note_gc_hash); + HTABLE_ENTRY(note_gc_hash); }; -static void note_gc_extract_key (struct note_gc_hash *, const char **, int *); -static int note_gc_cmp (struct note_gc_hash *, struct note_gc_hash *); +static void note_gc_extract_key(struct note_gc_hash *, const char **, int *); +static int note_gc_cmp(struct note_gc_hash *, struct note_gc_hash *); -HTABLE_HEAD (htp, NOTE_GC_HSIZE, note_gc_hash); -HTABLE_PROTOTYPE (htp, note_gc_hash) -HTABLE_GENERATE (htp, note_gc_hash, note_gc_extract_key, note_gc_cmp) +HTABLE_HEAD(htp, NOTE_GC_HSIZE, note_gc_hash); +HTABLE_PROTOTYPE(htp, note_gc_hash) + HTABLE_GENERATE(htp, note_gc_hash, note_gc_extract_key, note_gc_cmp) /* Create note file from a string and return a newly allocated string that * contains its name. */ -char * -generate_note (const char *str) +char *generate_note(const char *str) { - char *sha1 = mem_malloc (SHA1_DIGESTLEN * 2 + 1); + char *sha1 = mem_malloc(SHA1_DIGESTLEN * 2 + 1); char notepath[BUFSIZ]; FILE *fp; - sha1_digest (str, sha1); - snprintf (notepath, BUFSIZ, "%s%s", path_notes, sha1); - fp = fopen (notepath, "w"); - EXIT_IF (fp == NULL, _("Warning: could not open %s, Aborting..."), notepath); - fputs (str, fp); - file_close (fp, __FILE_POS__); + sha1_digest(str, sha1); + snprintf(notepath, BUFSIZ, "%s%s", path_notes, sha1); + fp = fopen(notepath, "w"); + EXIT_IF(fp == NULL, _("Warning: could not open %s, Aborting..."), notepath); + fputs(str, fp); + file_close(fp, __FILE_POS__); return sha1; } /* Edit a note with an external editor. */ -void -edit_note (char **note, const char *editor) +void edit_note(char **note, const char *editor) { char tmppath[BUFSIZ]; char *tmpext; char notepath[BUFSIZ]; - char *sha1 = mem_malloc (SHA1_DIGESTLEN * 2 + 1); + char *sha1 = mem_malloc(SHA1_DIGESTLEN * 2 + 1); FILE *fp; - strncpy (tmppath, get_tempdir (), BUFSIZ); - strncat (tmppath, "/calcurse-note.", BUFSIZ - strlen (tmppath) - 1); - if ((tmpext = new_tempfile (tmppath, TMPEXTSIZ)) == NULL) + strncpy(tmppath, get_tempdir(), BUFSIZ); + strncat(tmppath, "/calcurse-note.", BUFSIZ - strlen(tmppath) - 1); + if ((tmpext = new_tempfile(tmppath, TMPEXTSIZ)) == NULL) return; - strncat (tmppath, tmpext, BUFSIZ - strlen (tmppath) - 1); - mem_free (tmpext); + strncat(tmppath, tmpext, BUFSIZ - strlen(tmppath) - 1); + mem_free(tmpext); - if (*note != NULL) - { - snprintf (notepath, BUFSIZ, "%s%s", path_notes, *note); - io_file_cp (notepath, tmppath); - } + if (*note != NULL) { + snprintf(notepath, BUFSIZ, "%s%s", path_notes, *note); + io_file_cp(notepath, tmppath); + } - wins_launch_external (tmppath, editor); + wins_launch_external(tmppath, editor); - if (io_file_is_empty (tmppath) > 0) - erase_note (note); - else if ((fp = fopen (tmppath, "r"))) - { - sha1_stream (fp, sha1); - fclose (fp); - *note = sha1; + if (io_file_is_empty(tmppath) > 0) + erase_note(note); + else if ((fp = fopen(tmppath, "r"))) { + sha1_stream(fp, sha1); + fclose(fp); + *note = sha1; - snprintf (notepath, BUFSIZ, "%s%s", path_notes, *note); - io_file_cp (tmppath, notepath); - } + snprintf(notepath, BUFSIZ, "%s%s", path_notes, *note); + io_file_cp(tmppath, notepath); + } - unlink (tmppath); + unlink(tmppath); } /* View a note in an external pager. */ -void -view_note (const char *note, const char *pager) +void view_note(const char *note, const char *pager) { char fullname[BUFSIZ]; if (note == NULL) return; - snprintf (fullname, BUFSIZ, "%s%s", path_notes, note); - wins_launch_external (fullname, pager); + snprintf(fullname, BUFSIZ, "%s%s", path_notes, note); + wins_launch_external(fullname, pager); } /* Erase a note previously attached to an item. */ -void -erase_note (char **note) +void erase_note(char **note) { if (*note == NULL) return; - mem_free (*note); + mem_free(*note); *note = NULL; } /* Read a serialized note file name from a stream and deserialize it. */ -void -note_read (char *buffer, FILE *fp) +void note_read(char *buffer, FILE * fp) { int i; - for (i = 0; i < MAX_NOTESIZ; i++) - { - buffer[i] = getc (fp); - if (buffer[i] == ' ') - { - buffer[i] = '\0'; - return; - } + for (i = 0; i < MAX_NOTESIZ; i++) { + buffer[i] = getc(fp); + if (buffer[i] == ' ') { + buffer[i] = '\0'; + return; } + } - while (getc (fp) != ' '); + while (getc(fp) != ' ') ; buffer[MAX_NOTESIZ] = '\0'; } static void -note_gc_extract_key (struct note_gc_hash *data, const char **key, int *len) +note_gc_extract_key(struct note_gc_hash *data, const char **key, int *len) { *key = data->hash; - *len = strlen (data->hash); + *len = strlen(data->hash); } -static int -note_gc_cmp (struct note_gc_hash *a, struct note_gc_hash *b) +static int note_gc_cmp(struct note_gc_hash *a, struct note_gc_hash *b) { - return strcmp (a->hash, b->hash); + return strcmp(a->hash, b->hash); } /* Spot and unlink unused note files. */ -void -note_gc (void) +void note_gc(void) { - struct htp gc_htable = HTABLE_INITIALIZER (&gc_htable); + struct htp gc_htable = HTABLE_INITIALIZER(&gc_htable); struct note_gc_hash *hp; DIR *dirp; struct dirent *dp; @@ -179,81 +168,68 @@ note_gc (void) struct note_gc_hash tmph; char notepath[BUFSIZ]; - if (!(dirp = opendir (path_notes))) + if (!(dirp = opendir(path_notes))) return; /* Insert all note file names into a hash table. */ - do - { - if ((dp = readdir (dirp)) && *(dp->d_name) != '.') - { - hp = mem_malloc (sizeof (struct note_gc_hash)); + do { + if ((dp = readdir(dirp)) && *(dp->d_name) != '.') { + hp = mem_malloc(sizeof(struct note_gc_hash)); - strncpy (hp->buf, dp->d_name, MAX_NOTESIZ + 1); - hp->hash = hp->buf; + strncpy(hp->buf, dp->d_name, MAX_NOTESIZ + 1); + hp->hash = hp->buf; - HTABLE_INSERT (htp, &gc_htable, hp); - } + HTABLE_INSERT(htp, &gc_htable, hp); } + } while (dp); - closedir (dirp); + closedir(dirp); /* Remove hashes that are actually in use. */ - LLIST_TS_FOREACH (&alist_p, i) - { - struct apoint *apt = LLIST_GET_DATA (i); - if (apt->note) - { - tmph.hash = apt->note; - free (HTABLE_REMOVE (htp, &gc_htable, &tmph)); - } + LLIST_TS_FOREACH(&alist_p, i) { + struct apoint *apt = LLIST_GET_DATA(i); + if (apt->note) { + tmph.hash = apt->note; + free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } + } - LLIST_FOREACH (&eventlist, i) - { - struct event *ev = LLIST_GET_DATA (i); - if (ev->note) - { - tmph.hash = ev->note; - free (HTABLE_REMOVE (htp, &gc_htable, &tmph)); - } + LLIST_FOREACH(&eventlist, i) { + struct event *ev = LLIST_GET_DATA(i); + if (ev->note) { + tmph.hash = ev->note; + free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } + } - LLIST_TS_FOREACH (&recur_alist_p, i) - { - struct recur_apoint *rapt = LLIST_GET_DATA (i); - if (rapt->note) - { - tmph.hash = rapt->note; - free (HTABLE_REMOVE (htp, &gc_htable, &tmph)); - } + LLIST_TS_FOREACH(&recur_alist_p, i) { + struct recur_apoint *rapt = LLIST_GET_DATA(i); + if (rapt->note) { + tmph.hash = rapt->note; + free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } + } - LLIST_FOREACH (&recur_elist, i) - { - struct recur_event *rev = LLIST_GET_DATA (i); - if (rev->note) - { - tmph.hash = rev->note; - free (HTABLE_REMOVE (htp, &gc_htable, &tmph)); - } + LLIST_FOREACH(&recur_elist, i) { + struct recur_event *rev = LLIST_GET_DATA(i); + if (rev->note) { + tmph.hash = rev->note; + free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } + } - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_GET_DATA (i); - if (todo->note) - { - tmph.hash = todo->note; - free (HTABLE_REMOVE (htp, &gc_htable, &tmph)); - } + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_GET_DATA(i); + if (todo->note) { + tmph.hash = todo->note; + free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } + } /* Unlink unused note files. */ - HTABLE_FOREACH (hp, htp, &gc_htable) - { - snprintf (notepath, BUFSIZ, "%s%s", path_notes, hp->hash); - unlink (notepath); - } + HTABLE_FOREACH(hp, htp, &gc_htable) { + snprintf(notepath, BUFSIZ, "%s%s", path_notes, hp->hash); + unlink(notepath); + } } diff --git a/src/notify.c b/src/notify.c index de45461..2be4571 100644 --- a/src/notify.c +++ b/src/notify.c @@ -51,22 +51,21 @@ struct notify_vars { pthread_mutex_t mutex; }; -static struct notify_vars notify; -static struct notify_app notify_app; -static pthread_attr_t detached_thread_attr; -static pthread_t notify_t_main; +static struct notify_vars notify; +static struct notify_app notify_app; +static pthread_attr_t detached_thread_attr; +static pthread_t notify_t_main; /* * Return the number of seconds before next appointment * (0 if no upcoming appointment). */ -int -notify_time_left (void) +int notify_time_left(void) { time_t ntimer; int left; - ntimer = time (NULL); + ntimer = time(NULL); left = notify_app.time - ntimer; return left > 0 ? left : 0; @@ -76,8 +75,7 @@ notify_time_left (void) * Return 1 if the reminder was not sent already for the upcoming * appointment. */ -unsigned -notify_needs_reminder (void) +unsigned notify_needs_reminder(void) { if (notify_app.got_app && (((notify_app.state & APOINT_NOTIFY) && !nbar.notify_all) || @@ -92,67 +90,62 @@ notify_needs_reminder (void) * Note: the mutex associated with this structure must be locked by the * caller! */ -void -notify_update_app (long start, char state, char *msg) +void notify_update_app(long start, char state, char *msg) { - notify_free_app (); + notify_free_app(); notify_app.got_app = 1; notify_app.time = start; notify_app.state = state; - notify_app.txt = mem_strdup (msg); + notify_app.txt = mem_strdup(msg); } /* Return 1 if we need to display the notify-bar, else 0. */ -int -notify_bar (void) +int notify_bar(void) { int display_bar = 0; - pthread_mutex_lock (&nbar.mutex); + pthread_mutex_lock(&nbar.mutex); display_bar = (nbar.show) ? 1 : 0; - pthread_mutex_unlock (&nbar.mutex); + pthread_mutex_unlock(&nbar.mutex); return display_bar; } /* Initialize the nbar variable used to store notification options. */ -void -notify_init_vars (void) +void notify_init_vars(void) { const char *time_format = "%T"; const char *date_format = "%a %F"; const char *cmd = "printf '\\a'"; - pthread_mutex_init (&nbar.mutex, NULL); + pthread_mutex_init(&nbar.mutex, NULL); nbar.show = 1; nbar.cntdwn = 300; - strncpy (nbar.datefmt, date_format, strlen (date_format) + 1); - strncpy (nbar.timefmt, time_format, strlen (time_format) + 1); - strncpy (nbar.cmd, cmd, strlen (cmd) + 1); + strncpy(nbar.datefmt, date_format, strlen(date_format) + 1); + strncpy(nbar.timefmt, time_format, strlen(time_format) + 1); + strncpy(nbar.cmd, cmd, strlen(cmd) + 1); - if ((nbar.shell = getenv ("SHELL")) == NULL) + if ((nbar.shell = getenv("SHELL")) == NULL) nbar.shell = "/bin/sh"; nbar.notify_all = 0; - pthread_attr_init (&detached_thread_attr); - pthread_attr_setdetachstate (&detached_thread_attr, PTHREAD_CREATE_DETACHED); + pthread_attr_init(&detached_thread_attr); + pthread_attr_setdetachstate(&detached_thread_attr, PTHREAD_CREATE_DETACHED); } /* Extract the appointment file name from the complete file path. */ -static void -extract_aptsfile (void) +static void extract_aptsfile(void) { char *file; - file = strrchr (path_apts, '/'); + file = strrchr(path_apts, '/'); if (!file) notify.apts_file = path_apts; - else - { - notify.apts_file = file; - notify.apts_file++; - } + else { + notify.apts_file = file; + notify.apts_file++; + } } /* @@ -160,56 +153,50 @@ extract_aptsfile (void) * creating the notification window (l is the number of lines, c the * number of columns, y and x are its coordinates). */ -void -notify_init_bar (void) +void notify_init_bar(void) { - pthread_mutex_init (¬ify.mutex, NULL); - pthread_mutex_init (¬ify_app.mutex, NULL); + pthread_mutex_init(¬ify.mutex, NULL); + pthread_mutex_init(¬ify_app.mutex, NULL); notify_app.got_app = 0; notify_app.txt = 0; - notify.win = newwin (win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); - extract_aptsfile (); + notify.win = newwin(win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); + extract_aptsfile(); } /* * Free memory associated with the notify_app structure. */ -void -notify_free_app (void) +void notify_free_app(void) { notify_app.time = 0; notify_app.got_app = 0; notify_app.state = APOINT_NULL; if (notify_app.txt) - mem_free (notify_app.txt); + mem_free(notify_app.txt); notify_app.txt = 0; } /* Stop the notify-bar main thread. */ -void -notify_stop_main_thread (void) +void notify_stop_main_thread(void) { - if (notify_t_main) - { - pthread_cancel (notify_t_main); - pthread_join (notify_t_main, NULL); - } + if (notify_t_main) { + pthread_cancel(notify_t_main); + pthread_join(notify_t_main, NULL); + } } /* * The calcurse window geometry has changed so we need to reset the * notification window. */ -void -notify_reinit_bar (void) +void notify_reinit_bar(void) { - delwin (notify.win); - notify.win = newwin (win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); + delwin(notify.win); + notify.win = newwin(win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); } /* Launch user defined command as a notification. */ -unsigned -notify_launch_cmd (void) +unsigned notify_launch_cmd(void) { int pid; @@ -218,23 +205,19 @@ notify_launch_cmd (void) notify_app.state |= APOINT_NOTIFIED; - pid = fork (); + pid = fork(); - if (pid < 0) - { - ERROR_MSG (_("error while launching command: could not fork")); - return 0; - } - else if (pid == 0) - { - /* Child: launch user defined command */ - if (execlp (nbar.shell, nbar.shell, "-c", nbar.cmd, NULL) < 0) - { - ERROR_MSG (_("error while launching command")); - _exit (1); - } - _exit (0); + if (pid < 0) { + ERROR_MSG(_("error while launching command: could not fork")); + return 0; + } else if (pid == 0) { + /* Child: launch user defined command */ + if (execlp(nbar.shell, nbar.shell, "-c", nbar.cmd, NULL) < 0) { + ERROR_MSG(_("error while launching command")); + _exit(1); } + _exit(0); + } return 1; } @@ -243,8 +226,7 @@ notify_launch_cmd (void) * Update the notification bar. This is useful when changing color theme * for example. */ -void -notify_update_bar (void) +void notify_update_bar(void) { const int space = 3; int file_pos, date_pos, app_pos, txt_max_len, too_long = 0; @@ -252,84 +234,77 @@ notify_update_bar (void) char buf[BUFSIZ]; date_pos = space; - pthread_mutex_lock (¬ify.mutex); + pthread_mutex_lock(¬ify.mutex); - file_pos = strlen (notify.date) + strlen (notify.time) + 7 + 2 * space; - app_pos = file_pos + strlen (notify.apts_file) + 2 + space; + file_pos = strlen(notify.date) + strlen(notify.time) + 7 + 2 * space; + app_pos = file_pos + strlen(notify.apts_file) + 2 + space; txt_max_len = col - (app_pos + 12 + space); - custom_apply_attr (notify.win, ATTR_HIGHEST); - wattron (notify.win, A_UNDERLINE | A_REVERSE); - mvwhline (notify.win, 0, 0, ACS_HLINE, col); - mvwprintw (notify.win, 0, date_pos, "[ %s | %s ]", - notify.date, notify.time); - mvwprintw (notify.win, 0, file_pos, "(%s)", notify.apts_file); + custom_apply_attr(notify.win, ATTR_HIGHEST); + wattron(notify.win, A_UNDERLINE | A_REVERSE); + mvwhline(notify.win, 0, 0, ACS_HLINE, col); + mvwprintw(notify.win, 0, date_pos, "[ %s | %s ]", notify.date, notify.time); + mvwprintw(notify.win, 0, file_pos, "(%s)", notify.apts_file); + + pthread_mutex_lock(¬ify_app.mutex); + if (notify_app.got_app) { + if (strlen(notify_app.txt) > txt_max_len) { + int shrink_len; + + too_long = 1; + shrink_len = txt_max_len > 3 ? txt_max_len - 3 : 1; + strncpy(buf, notify_app.txt, shrink_len); + buf[shrink_len] = '\0'; + } + time_left = notify_time_left(); + if (time_left > 0) { + int hours_left, minutes_left; + + hours_left = (time_left / HOURINSEC); + minutes_left = (time_left - hours_left * HOURINSEC) / MININSEC; + pthread_mutex_lock(&nbar.mutex); + + if (time_left < nbar.cntdwn && + (((notify_app.state & APOINT_NOTIFY) && !nbar.notify_all) || + (!(notify_app.state & APOINT_NOTIFY) && nbar.notify_all))) + blinking = 1; + else + blinking = 0; - pthread_mutex_lock (¬ify_app.mutex); - if (notify_app.got_app) - { - if (strlen (notify_app.txt) > txt_max_len) - { - int shrink_len; - - too_long = 1; - shrink_len = txt_max_len > 3 ? txt_max_len - 3 : 1; - strncpy (buf, notify_app.txt, shrink_len); - buf[shrink_len] = '\0'; - } - time_left = notify_time_left (); - if (time_left > 0) - { - int hours_left, minutes_left; - - hours_left = (time_left / HOURINSEC); - minutes_left = (time_left - hours_left * HOURINSEC) / MININSEC; - pthread_mutex_lock (&nbar.mutex); - - if (time_left < nbar.cntdwn && - (((notify_app.state & APOINT_NOTIFY) && !nbar.notify_all) || - (!(notify_app.state & APOINT_NOTIFY) && nbar.notify_all))) - blinking = 1; - else - blinking = 0; - - if (blinking) - wattron (notify.win, A_BLINK); - if (too_long) - mvwprintw (notify.win, 0, app_pos, "> %02d:%02d :: %s.. <", - hours_left, minutes_left, buf); - else - mvwprintw (notify.win, 0, app_pos, "> %02d:%02d :: %s <", - hours_left, minutes_left, notify_app.txt); - if (blinking) - wattroff (notify.win, A_BLINK); - - if (blinking) - notify_launch_cmd (); - pthread_mutex_unlock (&nbar.mutex); - } + if (blinking) + wattron(notify.win, A_BLINK); + if (too_long) + mvwprintw(notify.win, 0, app_pos, "> %02d:%02d :: %s.. <", + hours_left, minutes_left, buf); else - { - notify_app.got_app = 0; - pthread_mutex_unlock (¬ify_app.mutex); - pthread_mutex_unlock (¬ify.mutex); - notify_check_next_app (0); - return; - } + mvwprintw(notify.win, 0, app_pos, "> %02d:%02d :: %s <", + hours_left, minutes_left, notify_app.txt); + if (blinking) + wattroff(notify.win, A_BLINK); + + if (blinking) + notify_launch_cmd(); + pthread_mutex_unlock(&nbar.mutex); + } else { + notify_app.got_app = 0; + pthread_mutex_unlock(¬ify_app.mutex); + pthread_mutex_unlock(¬ify.mutex); + notify_check_next_app(0); + return; } - pthread_mutex_unlock (¬ify_app.mutex); + } + pthread_mutex_unlock(¬ify_app.mutex); - wattroff (notify.win, A_UNDERLINE | A_REVERSE); - custom_remove_attr (notify.win, ATTR_HIGHEST); - wins_wrefresh (notify.win); + wattroff(notify.win, A_UNDERLINE | A_REVERSE); + custom_remove_attr(notify.win, ATTR_HIGHEST); + wins_wrefresh(notify.win); - pthread_mutex_unlock (¬ify.mutex); + pthread_mutex_unlock(¬ify.mutex); } /* Update the notication bar content */ /* ARGSUSED0 */ -static void * -notify_main_thread (void *arg) +static void *notify_main_thread(void *arg) { const unsigned thread_sleep = 1; const unsigned check_app = MININSEC; @@ -340,49 +315,46 @@ notify_main_thread (void *arg) elapse = 0; - for (;;) - { - ntimer = time (NULL); - ntime = localtime (&ntimer); - pthread_mutex_lock (¬ify.mutex); - pthread_mutex_lock (&nbar.mutex); - strftime (notify.time, NOTIFY_FIELD_LENGTH, nbar.timefmt, ntime); - strftime (notify.date, NOTIFY_FIELD_LENGTH, nbar.datefmt, ntime); - pthread_mutex_unlock (&nbar.mutex); - pthread_mutex_unlock (¬ify.mutex); - notify_update_bar (); - psleep (thread_sleep); - elapse += thread_sleep; - if (elapse >= check_app) - { - elapse = 0; - pthread_mutex_lock (¬ify_app.mutex); - got_app = notify_app.got_app; - pthread_mutex_unlock (¬ify_app.mutex); - if (!got_app) - notify_check_next_app (0); - } + for (;;) { + ntimer = time(NULL); + ntime = localtime(&ntimer); + pthread_mutex_lock(¬ify.mutex); + pthread_mutex_lock(&nbar.mutex); + strftime(notify.time, NOTIFY_FIELD_LENGTH, nbar.timefmt, ntime); + strftime(notify.date, NOTIFY_FIELD_LENGTH, nbar.datefmt, ntime); + pthread_mutex_unlock(&nbar.mutex); + pthread_mutex_unlock(¬ify.mutex); + notify_update_bar(); + psleep(thread_sleep); + elapse += thread_sleep; + if (elapse >= check_app) { + elapse = 0; + pthread_mutex_lock(¬ify_app.mutex); + got_app = notify_app.got_app; + pthread_mutex_unlock(¬ify_app.mutex); + if (!got_app) + notify_check_next_app(0); } - pthread_exit (NULL); + } + pthread_exit(NULL); } /* Fill the given structure with information about next appointment. */ -unsigned -notify_get_next (struct notify_app *a) +unsigned notify_get_next(struct notify_app *a) { time_t current_time; if (!a) return 0; - current_time = time (NULL); + current_time = time(NULL); a->time = current_time + DAYINSEC; a->got_app = 0; a->state = 0; a->txt = NULL; - recur_apoint_check_next (a, current_time, get_today ()); - apoint_check_next (a, current_time); + recur_apoint_check_next(a, current_time, get_today()); + apoint_check_next(a, current_time); return 1; } @@ -391,36 +363,31 @@ notify_get_next (struct notify_app *a) * This is used for the daemon to check if we have an upcoming appointment or * not. */ -unsigned -notify_get_next_bkgd (void) +unsigned notify_get_next_bkgd(void) { struct notify_app a; a.txt = NULL; - if (!notify_get_next (&a)) + if (!notify_get_next(&a)) return 0; - if (!a.got_app) - { - /* No next appointment, reset the previous notified one. */ - notify_app.got_app = 0; - return 1; - } - else - { - if (!notify_same_item (a.time)) - notify_update_app (a.time, a.state, a.txt); - } + if (!a.got_app) { + /* No next appointment, reset the previous notified one. */ + notify_app.got_app = 0; + return 1; + } else { + if (!notify_same_item(a.time)) + notify_update_app(a.time, a.state, a.txt); + } if (a.txt) - mem_free (a.txt); + mem_free(a.txt); return 1; } /* Return the description of next appointment to be notified. */ -char * -notify_app_txt (void) +char *notify_app_txt(void) { if (notify_app.got_app) return notify_app.txt; @@ -430,153 +397,128 @@ notify_app_txt (void) /* Look for the next appointment within the next 24 hours. */ /* ARGSUSED0 */ -static void * -notify_thread_app (void *arg) +static void *notify_thread_app(void *arg) { struct notify_app tmp_app; int force = (arg ? 1 : 0); - if (!notify_get_next (&tmp_app)) - pthread_exit (NULL); - - if (!tmp_app.got_app) - { - pthread_mutex_lock (¬ify_app.mutex); - notify_free_app (); - pthread_mutex_unlock (¬ify_app.mutex); - } - else - { - if (force || !notify_same_item (tmp_app.time)) - { - pthread_mutex_lock (¬ify_app.mutex); - notify_update_app (tmp_app.time, tmp_app.state, tmp_app.txt); - pthread_mutex_unlock (¬ify_app.mutex); - } + if (!notify_get_next(&tmp_app)) + pthread_exit(NULL); + + if (!tmp_app.got_app) { + pthread_mutex_lock(¬ify_app.mutex); + notify_free_app(); + pthread_mutex_unlock(¬ify_app.mutex); + } else { + if (force || !notify_same_item(tmp_app.time)) { + pthread_mutex_lock(¬ify_app.mutex); + notify_update_app(tmp_app.time, tmp_app.state, tmp_app.txt); + pthread_mutex_unlock(¬ify_app.mutex); } + } if (tmp_app.txt) - mem_free (tmp_app.txt); - notify_update_bar (); + mem_free(tmp_app.txt); + notify_update_bar(); - pthread_exit (NULL); + pthread_exit(NULL); } /* Launch the thread notify_thread_app to look for next appointment. */ -void -notify_check_next_app (int force) +void notify_check_next_app(int force) { pthread_t notify_t_app; void *arg = (force ? (void *)1 : NULL); - pthread_create (¬ify_t_app, &detached_thread_attr, notify_thread_app, - arg); + pthread_create(¬ify_t_app, &detached_thread_attr, notify_thread_app, arg); return; } /* Check if the newly created appointment is to be notified. */ -void -notify_check_added (char *mesg, long start, char state) +void notify_check_added(char *mesg, long start, char state) { time_t current_time; int update_notify = 0; long gap; - current_time = time (NULL); - pthread_mutex_lock (¬ify_app.mutex); - if (!notify_app.got_app) - { - gap = start - current_time; - if (gap >= 0 && gap <= DAYINSEC) - update_notify = 1; - } - else if (start < notify_app.time && start >= current_time) - { + current_time = time(NULL); + pthread_mutex_lock(¬ify_app.mutex); + if (!notify_app.got_app) { + gap = start - current_time; + if (gap >= 0 && gap <= DAYINSEC) update_notify = 1; - } - else if (start == notify_app.time && state != notify_app.state) + } else if (start < notify_app.time && start >= current_time) { + update_notify = 1; + } else if (start == notify_app.time && state != notify_app.state) update_notify = 1; - if (update_notify) - { - notify_update_app (start, state, mesg); - } - pthread_mutex_unlock (¬ify_app.mutex); - notify_update_bar (); + if (update_notify) { + notify_update_app(start, state, mesg); + } + pthread_mutex_unlock(¬ify_app.mutex); + notify_update_bar(); } /* Check if the newly repeated appointment is to be notified. */ -void -notify_check_repeated (struct recur_apoint *i) +void notify_check_repeated(struct recur_apoint *i) { unsigned real_app_time; int update_notify = 0; time_t current_time; - current_time = time (NULL); - pthread_mutex_lock (¬ify_app.mutex); - if (recur_item_find_occurrence (i->start, i->dur, &i->exc, i->rpt->type, - i->rpt->freq, i->rpt->until, get_today (), - &real_app_time)) - { - if (!notify_app.got_app) - { - if (real_app_time - current_time <= DAYINSEC) - update_notify = 1; - } - else if (real_app_time < notify_app.time && - real_app_time >= current_time) - { - update_notify = 1; - } - else if (real_app_time == notify_app.time && - i->state != notify_app.state) + current_time = time(NULL); + pthread_mutex_lock(¬ify_app.mutex); + if (recur_item_find_occurrence(i->start, i->dur, &i->exc, i->rpt->type, + i->rpt->freq, i->rpt->until, get_today(), + &real_app_time)) { + if (!notify_app.got_app) { + if (real_app_time - current_time <= DAYINSEC) update_notify = 1; - } - if (update_notify) - { - notify_update_app (real_app_time, i->state, i->mesg); - } - pthread_mutex_unlock (¬ify_app.mutex); - notify_update_bar (); + } else if (real_app_time < notify_app.time && real_app_time >= current_time) { + update_notify = 1; + } else if (real_app_time == notify_app.time && i->state != notify_app.state) + update_notify = 1; + } + if (update_notify) { + notify_update_app(real_app_time, i->state, i->mesg); + } + pthread_mutex_unlock(¬ify_app.mutex); + notify_update_bar(); } -int -notify_same_item (long time) +int notify_same_item(long time) { int same = 0; - pthread_mutex_lock (&(notify_app.mutex)); + pthread_mutex_lock(&(notify_app.mutex)); if (notify_app.got_app && notify_app.time == time) same = 1; - pthread_mutex_unlock (&(notify_app.mutex)); + pthread_mutex_unlock(&(notify_app.mutex)); return same; } -int -notify_same_recur_item (struct recur_apoint *i) +int notify_same_recur_item(struct recur_apoint *i) { int same = 0; unsigned item_start = 0; - recur_item_find_occurrence (i->start, i->dur, &i->exc, i->rpt->type, - i->rpt->freq, i->rpt->until, get_today (), - &item_start); - pthread_mutex_lock (¬ify_app.mutex); + recur_item_find_occurrence(i->start, i->dur, &i->exc, i->rpt->type, + i->rpt->freq, i->rpt->until, get_today(), + &item_start); + pthread_mutex_lock(¬ify_app.mutex); if (notify_app.got_app && item_start == notify_app.time) same = 1; - pthread_mutex_unlock (&(notify_app.mutex)); + pthread_mutex_unlock(&(notify_app.mutex)); return same; } /* Launch the notify-bar main thread. */ -void -notify_start_main_thread (void) +void notify_start_main_thread(void) { - pthread_create (¬ify_t_main, NULL, notify_main_thread, NULL); - notify_check_next_app (0); + pthread_create(¬ify_t_main, NULL, notify_main_thread, NULL); + notify_check_next_app(0); } /* @@ -585,56 +527,50 @@ notify_start_main_thread (void) * (either YES or NO), or an option holding a string value. */ static void -print_option (WINDOW *win, unsigned x, unsigned y, char *name, - char *valstr, unsigned valbool, char *desc, unsigned num) +print_option(WINDOW * win, unsigned x, unsigned y, char *name, + char *valstr, unsigned valbool, char *desc, unsigned num) { const int XOFF = 4; const int MAXCOL = col - 3; int x_opt, len; - x_opt = x + XOFF + strlen (name); - mvwprintw (win, y, x, "[%u] %s", num, name); - erase_window_part (win, x_opt, y, MAXCOL, y); - if ((len = strlen (valstr)) != 0) - { - unsigned maxlen; - - maxlen = MAXCOL - x_opt - 2; - custom_apply_attr (win, ATTR_HIGHEST); - if (len < maxlen) - mvwprintw (win, y, x_opt, "%s", valstr); - else - { - char buf[BUFSIZ]; - - strncpy (buf, valstr, maxlen - 1); - buf[maxlen - 1] = '\0'; - mvwprintw (win, y, x_opt, "%s...", buf); - } - custom_remove_attr (win, ATTR_HIGHEST); + x_opt = x + XOFF + strlen(name); + mvwprintw(win, y, x, "[%u] %s", num, name); + erase_window_part(win, x_opt, y, MAXCOL, y); + if ((len = strlen(valstr)) != 0) { + unsigned maxlen; + + maxlen = MAXCOL - x_opt - 2; + custom_apply_attr(win, ATTR_HIGHEST); + if (len < maxlen) + mvwprintw(win, y, x_opt, "%s", valstr); + else { + char buf[BUFSIZ]; + + strncpy(buf, valstr, maxlen - 1); + buf[maxlen - 1] = '\0'; + mvwprintw(win, y, x_opt, "%s...", buf); } - else - print_bool_option_incolor (win, valbool, y, x_opt); - mvwprintw (win, y + 1, x, desc); + custom_remove_attr(win, ATTR_HIGHEST); + } else + print_bool_option_incolor(win, valbool, y, x_opt); + mvwprintw(win, y + 1, x, desc); } /* Print options related to the notify-bar. */ -static unsigned -print_config_options (WINDOW *optwin) +static unsigned print_config_options(WINDOW * optwin) { const int XORIG = 3; const int YORIG = 0; - const int YOFF = 3; + const int YOFF = 3; - enum - { SHOW, DATE, CLOCK, WARN, CMD, NOTIFY_ALL, DMON, DMON_LOG, NB_OPT }; + enum { SHOW, DATE, CLOCK, WARN, CMD, NOTIFY_ALL, DMON, DMON_LOG, NB_OPT }; - struct opt_s - { - char *name; - char *desc; - char valstr[BUFSIZ]; - unsigned valnum; + struct opt_s { + char *name; + char *desc; + char valstr[BUFSIZ]; + unsigned valnum; } opt[NB_OPT]; int i; @@ -656,7 +592,8 @@ print_config_options (WINDOW *optwin) opt[CMD].desc = _("(Command used to notify user of an upcoming appointment)"); opt[NOTIFY_ALL].name = _("notification.notifyall = "); - opt[NOTIFY_ALL].desc = _("(Notify all appointments instead of flagged ones only)"); + opt[NOTIFY_ALL].desc = + _("(Notify all appointments instead of flagged ones only)"); opt[DMON].name = _("daemon.enable = "); opt[DMON].desc = _("(Run in background to get notifications after exiting)"); @@ -664,18 +601,18 @@ print_config_options (WINDOW *optwin) opt[DMON_LOG].name = _("daemon.log = "); opt[DMON_LOG].desc = _("(Log activity when running in background)"); - pthread_mutex_lock (&nbar.mutex); + pthread_mutex_lock(&nbar.mutex); /* String value options */ - strncpy (opt[DATE].valstr, nbar.datefmt, BUFSIZ); - strncpy (opt[CLOCK].valstr, nbar.timefmt, BUFSIZ); - snprintf (opt[WARN].valstr, BUFSIZ, "%d", nbar.cntdwn); - strncpy (opt[CMD].valstr, nbar.cmd, BUFSIZ); + strncpy(opt[DATE].valstr, nbar.datefmt, BUFSIZ); + strncpy(opt[CLOCK].valstr, nbar.timefmt, BUFSIZ); + snprintf(opt[WARN].valstr, BUFSIZ, "%d", nbar.cntdwn); + strncpy(opt[CMD].valstr, nbar.cmd, BUFSIZ); /* Boolean options */ opt[SHOW].valnum = nbar.show; opt[NOTIFY_ALL].valnum = nbar.notify_all; - pthread_mutex_unlock (&nbar.mutex); + pthread_mutex_unlock(&nbar.mutex); opt[DMON].valnum = dmon.enable; opt[DMON_LOG].valnum = dmon.log; @@ -683,168 +620,155 @@ print_config_options (WINDOW *optwin) opt[SHOW].valstr[0] = opt[NOTIFY_ALL].valstr[0] = opt[DMON].valstr[0] = opt[DMON_LOG].valstr[0] = '\0'; - for (i = 0; i < NB_OPT; i++) - { - int y; + for (i = 0; i < NB_OPT; i++) { + int y; - y = YORIG + i * YOFF; - print_option (optwin, XORIG, y, opt[i].name, opt[i].valstr, - opt[i].valnum, opt[i].desc, i + 1); - } + y = YORIG + i * YOFF; + print_option(optwin, XORIG, y, opt[i].name, opt[i].valstr, + opt[i].valnum, opt[i].desc, i + 1); + } return YORIG + NB_OPT * YOFF; } -static void -reinit_conf_win (struct scrollwin *win) +static void reinit_conf_win(struct scrollwin *win) { unsigned first_line; first_line = win->first_visible_line; - wins_scrollwin_delete (win); - custom_set_swsiz (win); - wins_scrollwin_init (win); - wins_show (win->win.p, win->label); + wins_scrollwin_delete(win); + custom_set_swsiz(win); + wins_scrollwin_init(win); + wins_show(win->win.p, win->label); win->first_visible_line = first_line; } /* Notify-bar configuration. */ -void -notify_config_bar (void) +void notify_config_bar(void) { struct scrollwin cwin; char *buf; - const char *number_str = - _("Enter an option number to change its value"); - const char *keys = - _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); + const char *number_str = _("Enter an option number to change its value"); + const char *keys = _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); const char *date_str = - _("Enter the date format (see 'man 3 strftime' for possible formats) "); + _("Enter the date format (see 'man 3 strftime' for possible formats) "); const char *time_str = - _("Enter the time format (see 'man 3 strftime' for possible formats) "); + _("Enter the time format (see 'man 3 strftime' for possible formats) "); const char *count_str = - _("Enter the number of seconds (0 not to be warned before an appointment)"); + _ + ("Enter the number of seconds (0 not to be warned before an appointment)"); const char *cmd_str = _("Enter the notification command "); int ch; - clear (); - custom_set_swsiz (&cwin); + clear(); + custom_set_swsiz(&cwin); cwin.label = _("notification options"); - wins_scrollwin_init (&cwin); - wins_show (cwin.win.p, cwin.label); - status_mesg (number_str, keys); - cwin.total_lines = print_config_options (cwin.pad.p); - wins_scrollwin_display (&cwin); - - buf = mem_malloc (BUFSIZ); - while ((ch = wgetch (win[STA].p)) != 'q') - { - buf[0] = '\0'; - - switch (ch) - { - case CTRL ('N'): - wins_scrollwin_down (&cwin, 1); - break; - case CTRL ('P'): - wins_scrollwin_up (&cwin, 1); - break; - case '1': - pthread_mutex_lock (&nbar.mutex); - nbar.show = !nbar.show; - pthread_mutex_unlock (&nbar.mutex); - if (notify_bar ()) - notify_start_main_thread (); - else - notify_stop_main_thread (); - wins_scrollwin_delete (&cwin); - reinit_conf_win (&cwin); - break; - case '2': - status_mesg (date_str, ""); - pthread_mutex_lock (&nbar.mutex); - strncpy (buf, nbar.datefmt, strlen (nbar.datefmt) + 1); - pthread_mutex_unlock (&nbar.mutex); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - pthread_mutex_lock (&nbar.mutex); - strncpy (nbar.datefmt, buf, strlen (buf) + 1); - pthread_mutex_unlock (&nbar.mutex); - } - break; - case '3': - status_mesg (time_str, ""); - pthread_mutex_lock (&nbar.mutex); - strncpy (buf, nbar.timefmt, strlen (nbar.timefmt) + 1); - pthread_mutex_unlock (&nbar.mutex); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - pthread_mutex_lock (&nbar.mutex); - strncpy (nbar.timefmt, buf, strlen (buf) + 1); - pthread_mutex_unlock (&nbar.mutex); - } - break; - case '4': - status_mesg (count_str, ""); - pthread_mutex_lock (&nbar.mutex); - printf (buf, "%d", nbar.cntdwn); - pthread_mutex_unlock (&nbar.mutex); - if (updatestring (win[STA].p, &buf, 0, 1) == 0 && - is_all_digit (buf) && atoi (buf) >= 0 && atoi (buf) <= DAYINSEC) - { - pthread_mutex_lock (&nbar.mutex); - nbar.cntdwn = atoi (buf); - pthread_mutex_unlock (&nbar.mutex); - } - break; - case '5': - status_mesg (cmd_str, ""); - pthread_mutex_lock (&nbar.mutex); - strncpy (buf, nbar.cmd, strlen (nbar.cmd) + 1); - pthread_mutex_unlock (&nbar.mutex); - if (updatestring (win[STA].p, &buf, 0, 1) == 0) - { - pthread_mutex_lock (&nbar.mutex); - strncpy (nbar.cmd, buf, strlen (buf) + 1); - pthread_mutex_unlock (&nbar.mutex); - } - break; - case '6': - pthread_mutex_lock (&nbar.mutex); - nbar.notify_all = !nbar.notify_all; - pthread_mutex_unlock (&nbar.mutex); - notify_check_next_app (1); - break; - case '7': - dmon.enable = !dmon.enable; - break; - case '8': - dmon.log = !dmon.log; - break; - } - - if (resize) - { - resize = 0; - wins_get_config (); - wins_reset (); - reinit_conf_win (&cwin); - delwin (win[STA].p); - win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, - win[STA].x); - keypad (win[STA].p, TRUE); - if (notify_bar ()) - { - notify_reinit_bar (); - notify_update_bar (); - } - clearok (curscr, TRUE); - } - - status_mesg (number_str, keys); - cwin.total_lines = print_config_options (cwin.pad.p); - wins_scrollwin_display (&cwin); + wins_scrollwin_init(&cwin); + wins_show(cwin.win.p, cwin.label); + status_mesg(number_str, keys); + cwin.total_lines = print_config_options(cwin.pad.p); + wins_scrollwin_display(&cwin); + + buf = mem_malloc(BUFSIZ); + while ((ch = wgetch(win[STA].p)) != 'q') { + buf[0] = '\0'; + + switch (ch) { + case CTRL('N'): + wins_scrollwin_down(&cwin, 1); + break; + case CTRL('P'): + wins_scrollwin_up(&cwin, 1); + break; + case '1': + pthread_mutex_lock(&nbar.mutex); + nbar.show = !nbar.show; + pthread_mutex_unlock(&nbar.mutex); + if (notify_bar()) + notify_start_main_thread(); + else + notify_stop_main_thread(); + wins_scrollwin_delete(&cwin); + reinit_conf_win(&cwin); + break; + case '2': + status_mesg(date_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.datefmt, strlen(nbar.datefmt) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + pthread_mutex_lock(&nbar.mutex); + strncpy(nbar.datefmt, buf, strlen(buf) + 1); + pthread_mutex_unlock(&nbar.mutex); + } + break; + case '3': + status_mesg(time_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.timefmt, strlen(nbar.timefmt) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + pthread_mutex_lock(&nbar.mutex); + strncpy(nbar.timefmt, buf, strlen(buf) + 1); + pthread_mutex_unlock(&nbar.mutex); + } + break; + case '4': + status_mesg(count_str, ""); + pthread_mutex_lock(&nbar.mutex); + printf(buf, "%d", nbar.cntdwn); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0 && + is_all_digit(buf) && atoi(buf) >= 0 && atoi(buf) <= DAYINSEC) { + pthread_mutex_lock(&nbar.mutex); + nbar.cntdwn = atoi(buf); + pthread_mutex_unlock(&nbar.mutex); + } + break; + case '5': + status_mesg(cmd_str, ""); + pthread_mutex_lock(&nbar.mutex); + strncpy(buf, nbar.cmd, strlen(nbar.cmd) + 1); + pthread_mutex_unlock(&nbar.mutex); + if (updatestring(win[STA].p, &buf, 0, 1) == 0) { + pthread_mutex_lock(&nbar.mutex); + strncpy(nbar.cmd, buf, strlen(buf) + 1); + pthread_mutex_unlock(&nbar.mutex); + } + break; + case '6': + pthread_mutex_lock(&nbar.mutex); + nbar.notify_all = !nbar.notify_all; + pthread_mutex_unlock(&nbar.mutex); + notify_check_next_app(1); + break; + case '7': + dmon.enable = !dmon.enable; + break; + case '8': + dmon.log = !dmon.log; + break; + } + + if (resize) { + resize = 0; + wins_get_config(); + wins_reset(); + reinit_conf_win(&cwin); + delwin(win[STA].p); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); + keypad(win[STA].p, TRUE); + if (notify_bar()) { + notify_reinit_bar(); + notify_update_bar(); + } + clearok(curscr, TRUE); } - mem_free (buf); - wins_scrollwin_delete (&cwin); + + status_mesg(number_str, keys); + cwin.total_lines = print_config_options(cwin.pad.p); + wins_scrollwin_display(&cwin); + } + mem_free(buf); + wins_scrollwin_delete(&cwin); } @@ -39,279 +39,253 @@ #include "calcurse.h" /* Static functions used to add export functionalities. */ -static void pcal_export_header (FILE *); -static void pcal_export_recur_events (FILE *); -static void pcal_export_events (FILE *); -static void pcal_export_recur_apoints (FILE *); -static void pcal_export_apoints (FILE *); -static void pcal_export_todo (FILE *); -static void pcal_export_footer (FILE *); +static void pcal_export_header(FILE *); +static void pcal_export_recur_events(FILE *); +static void pcal_export_events(FILE *); +static void pcal_export_recur_apoints(FILE *); +static void pcal_export_apoints(FILE *); +static void pcal_export_todo(FILE *); +static void pcal_export_footer(FILE *); /* Type definition for callbacks to export functions. */ -typedef void (*cb_dump_t)(FILE *, long, long, char *); +typedef void (*cb_dump_t) (FILE *, long, long, char *); /* * Travel through each occurence of an item, and execute the given callback * (mainly used to export data). */ static void -foreach_date_dump (const long date_end, struct rpt *rpt, llist_t *exc, - long item_first_date, long item_dur, char *item_mesg, - cb_dump_t cb_dump, FILE *stream) +foreach_date_dump(const long date_end, struct rpt *rpt, llist_t * exc, + long item_first_date, long item_dur, char *item_mesg, + cb_dump_t cb_dump, FILE * stream) { long date, item_time; struct tm lt; time_t t; t = item_first_date; - lt = *localtime (&t); + lt = *localtime(&t); lt.tm_hour = lt.tm_min = lt.tm_sec = 0; lt.tm_isdst = -1; - date = mktime (<); + date = mktime(<); item_time = item_first_date - date; - while (date <= date_end && date <= rpt->until) - { - if (recur_item_inday (item_first_date, item_dur, exc, rpt->type, - rpt->freq, rpt->until, date)) - { - (*cb_dump)(stream, date + item_time, item_dur, item_mesg); - } - switch (rpt->type) - { - case RECUR_DAILY: - date = date_sec_change (date, 0, rpt->freq); - break; - case RECUR_WEEKLY: - date = date_sec_change (date, 0, rpt->freq * WEEKINDAYS); - break; - case RECUR_MONTHLY: - date = date_sec_change (date, rpt->freq, 0); - break; - case RECUR_YEARLY: - date = date_sec_change (date, rpt->freq * 12, 0); - break; - default: - EXIT (_("incoherent repetition type")); - /* NOTREACHED */ - break; - } + while (date <= date_end && date <= rpt->until) { + if (recur_item_inday(item_first_date, item_dur, exc, rpt->type, + rpt->freq, rpt->until, date)) { + (*cb_dump) (stream, date + item_time, item_dur, item_mesg); } + switch (rpt->type) { + case RECUR_DAILY: + date = date_sec_change(date, 0, rpt->freq); + break; + case RECUR_WEEKLY: + date = date_sec_change(date, 0, rpt->freq * WEEKINDAYS); + break; + case RECUR_MONTHLY: + date = date_sec_change(date, rpt->freq, 0); + break; + case RECUR_YEARLY: + date = date_sec_change(date, rpt->freq * 12, 0); + break; + default: + EXIT(_("incoherent repetition type")); + /* NOTREACHED */ + break; + } + } } -static void -pcal_export_header (FILE *stream) +static void pcal_export_header(FILE * stream) { - fputs ("# calcurse pcal export\n", stream); - fputs ("\n# =======\n# options\n# =======\n", stream); - fprintf (stream, "opt -A -K -l -m -F %s\n", - calendar_week_begins_on_monday () ? "Monday" : "Sunday"); - fputs ("# Display week number (i.e. 1-52) on every Monday\n", stream); - fprintf (stream, "all monday in all %s %%w\n", _("Week")); - fputc ('\n', stream); + fputs("# calcurse pcal export\n", stream); + fputs("\n# =======\n# options\n# =======\n", stream); + fprintf(stream, "opt -A -K -l -m -F %s\n", + calendar_week_begins_on_monday()? "Monday" : "Sunday"); + fputs("# Display week number (i.e. 1-52) on every Monday\n", stream); + fprintf(stream, "all monday in all %s %%w\n", _("Week")); + fputc('\n', stream); } -static void -pcal_export_footer (FILE *stream) +static void pcal_export_footer(FILE * stream) { } /* Format and dump event data to a pcal formatted file. */ static void -pcal_dump_event (FILE *stream, long event_date, long event_dur, - char *event_mesg) +pcal_dump_event(FILE * stream, long event_date, long event_dur, + char *event_mesg) { char pcal_date[BUFSIZ]; - date_sec2date_fmt (event_date, "%b %d", pcal_date); - fprintf (stream, "%s %s\n", pcal_date, event_mesg); + date_sec2date_fmt(event_date, "%b %d", pcal_date); + fprintf(stream, "%s %s\n", pcal_date, event_mesg); } /* Format and dump appointment data to a pcal formatted file. */ static void -pcal_dump_apoint (FILE *stream, long apoint_date, long apoint_dur, - char *apoint_mesg) +pcal_dump_apoint(FILE * stream, long apoint_date, long apoint_dur, + char *apoint_mesg) { char pcal_date[BUFSIZ], pcal_beg[BUFSIZ], pcal_end[BUFSIZ]; - date_sec2date_fmt (apoint_date, "%b %d", pcal_date); - date_sec2date_fmt (apoint_date, "%R", pcal_beg); - date_sec2date_fmt (apoint_date + apoint_dur, "%R", pcal_end); - fprintf (stream, "%s ", pcal_date); - fprintf (stream, "(%s -> %s) %s\n", pcal_beg, pcal_end, apoint_mesg); + date_sec2date_fmt(apoint_date, "%b %d", pcal_date); + date_sec2date_fmt(apoint_date, "%R", pcal_beg); + date_sec2date_fmt(apoint_date + apoint_dur, "%R", pcal_end); + fprintf(stream, "%s ", pcal_date); + fprintf(stream, "(%s -> %s) %s\n", pcal_beg, pcal_end, apoint_mesg); } -static void -pcal_export_recur_events (FILE *stream) +static void pcal_export_recur_events(FILE * stream) { llist_item_t *i; char pcal_date[BUFSIZ]; - fputs ("\n# =============", stream); - fputs ("\n# Recur. Events", stream); - fputs ("\n# =============\n", stream); - fputs ("# (pcal does not support from..until dates specification\n", stream); + fputs("\n# =============", stream); + fputs("\n# Recur. Events", stream); + fputs("\n# =============\n", stream); + fputs("# (pcal does not support from..until dates specification\n", stream); - LLIST_FOREACH (&recur_elist, i) - { - struct recur_event *rev = LLIST_GET_DATA (i); - if (rev->rpt->until == 0 && rev->rpt->freq == 1) - { - switch (rev->rpt->type) - { - case RECUR_DAILY: - date_sec2date_fmt (rev->day, "%b %d", pcal_date); - fprintf (stream, "all day on_or_after %s %s\n", pcal_date, - rev->mesg); - break; - case RECUR_WEEKLY: - date_sec2date_fmt (rev->day, "%a", pcal_date); - fprintf (stream, "all %s on_or_after ", pcal_date); - date_sec2date_fmt (rev->day, "%b %d", pcal_date); - fprintf (stream, "%s %s\n", pcal_date, rev->mesg); - break; - case RECUR_MONTHLY: - date_sec2date_fmt (rev->day, "%d", pcal_date); - fprintf (stream, "day on all %s %s\n", pcal_date, rev->mesg); - break; - case RECUR_YEARLY: - date_sec2date_fmt (rev->day, "%b %d", pcal_date); - fprintf (stream, "%s %s\n", pcal_date, rev->mesg); - break; - default: - EXIT (_("incoherent repetition type")); - } - } - else - { - const long YEAR_START = calendar_start_of_year (); - const long YEAR_END = calendar_end_of_year (); + LLIST_FOREACH(&recur_elist, i) { + struct recur_event *rev = LLIST_GET_DATA(i); + if (rev->rpt->until == 0 && rev->rpt->freq == 1) { + switch (rev->rpt->type) { + case RECUR_DAILY: + date_sec2date_fmt(rev->day, "%b %d", pcal_date); + fprintf(stream, "all day on_or_after %s %s\n", pcal_date, rev->mesg); + break; + case RECUR_WEEKLY: + date_sec2date_fmt(rev->day, "%a", pcal_date); + fprintf(stream, "all %s on_or_after ", pcal_date); + date_sec2date_fmt(rev->day, "%b %d", pcal_date); + fprintf(stream, "%s %s\n", pcal_date, rev->mesg); + break; + case RECUR_MONTHLY: + date_sec2date_fmt(rev->day, "%d", pcal_date); + fprintf(stream, "day on all %s %s\n", pcal_date, rev->mesg); + break; + case RECUR_YEARLY: + date_sec2date_fmt(rev->day, "%b %d", pcal_date); + fprintf(stream, "%s %s\n", pcal_date, rev->mesg); + break; + default: + EXIT(_("incoherent repetition type")); + } + } else { + const long YEAR_START = calendar_start_of_year(); + const long YEAR_END = calendar_end_of_year(); - if (rev->day < YEAR_END && rev->day > YEAR_START) - foreach_date_dump (YEAR_END, rev->rpt, &rev->exc, rev->day, 0, - rev->mesg, (cb_dump_t) pcal_dump_event, stream); - } + if (rev->day < YEAR_END && rev->day > YEAR_START) + foreach_date_dump(YEAR_END, rev->rpt, &rev->exc, rev->day, 0, + rev->mesg, (cb_dump_t) pcal_dump_event, stream); } + } } -static void -pcal_export_events (FILE *stream) +static void pcal_export_events(FILE * stream) { llist_item_t *i; - fputs ("\n# ======\n# Events\n# ======\n", stream); - LLIST_FOREACH (&eventlist, i) - { - struct event *ev = LLIST_TS_GET_DATA (i); - pcal_dump_event (stream, ev->day, 0, ev->mesg); - } - fputc ('\n', stream); + fputs("\n# ======\n# Events\n# ======\n", stream); + LLIST_FOREACH(&eventlist, i) { + struct event *ev = LLIST_TS_GET_DATA(i); + pcal_dump_event(stream, ev->day, 0, ev->mesg); + } + fputc('\n', stream); } -static void -pcal_export_recur_apoints (FILE *stream) +static void pcal_export_recur_apoints(FILE * stream) { llist_item_t *i; char pcal_date[BUFSIZ], pcal_beg[BUFSIZ], pcal_end[BUFSIZ]; - fputs ("\n# ==============", stream); - fputs ("\n# Recur. Apoints", stream); - fputs ("\n# ==============\n", stream); - fputs ("# (pcal does not support from..until dates specification\n", stream); + fputs("\n# ==============", stream); + fputs("\n# Recur. Apoints", stream); + fputs("\n# ==============\n", stream); + fputs("# (pcal does not support from..until dates specification\n", stream); - LLIST_TS_FOREACH (&recur_alist_p, i) - { - struct recur_apoint *rapt = LLIST_TS_GET_DATA (i); + LLIST_TS_FOREACH(&recur_alist_p, i) { + struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); - if (rapt->rpt->until == 0 && rapt->rpt->freq == 1) - { - date_sec2date_fmt (rapt->start, "%R", pcal_beg); - date_sec2date_fmt (rapt->start + rapt->dur, "%R", pcal_end); - switch (rapt->rpt->type) - { - case RECUR_DAILY: - date_sec2date_fmt (rapt->start, "%b %d", pcal_date); - fprintf (stream, "all day on_or_after %s (%s -> %s) %s\n", - pcal_date, pcal_beg, pcal_end, rapt->mesg); - break; - case RECUR_WEEKLY: - date_sec2date_fmt (rapt->start, "%a", pcal_date); - fprintf (stream, "all %s on_or_after ", pcal_date); - date_sec2date_fmt (rapt->start, "%b %d", pcal_date); - fprintf (stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, - pcal_end, rapt->mesg); - break; - case RECUR_MONTHLY: - date_sec2date_fmt (rapt->start, "%d", pcal_date); - fprintf (stream, "day on all %s (%s -> %s) %s\n", pcal_date, - pcal_beg, pcal_end, rapt->mesg); - break; - case RECUR_YEARLY: - date_sec2date_fmt (rapt->start, "%b %d", pcal_date); - fprintf (stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, - pcal_end, rapt->mesg); - break; - default: - EXIT (_("incoherent repetition type")); - } - } - else - { - const long YEAR_START = calendar_start_of_year (); - const long YEAR_END = calendar_end_of_year (); + if (rapt->rpt->until == 0 && rapt->rpt->freq == 1) { + date_sec2date_fmt(rapt->start, "%R", pcal_beg); + date_sec2date_fmt(rapt->start + rapt->dur, "%R", pcal_end); + switch (rapt->rpt->type) { + case RECUR_DAILY: + date_sec2date_fmt(rapt->start, "%b %d", pcal_date); + fprintf(stream, "all day on_or_after %s (%s -> %s) %s\n", + pcal_date, pcal_beg, pcal_end, rapt->mesg); + break; + case RECUR_WEEKLY: + date_sec2date_fmt(rapt->start, "%a", pcal_date); + fprintf(stream, "all %s on_or_after ", pcal_date); + date_sec2date_fmt(rapt->start, "%b %d", pcal_date); + fprintf(stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, + pcal_end, rapt->mesg); + break; + case RECUR_MONTHLY: + date_sec2date_fmt(rapt->start, "%d", pcal_date); + fprintf(stream, "day on all %s (%s -> %s) %s\n", pcal_date, + pcal_beg, pcal_end, rapt->mesg); + break; + case RECUR_YEARLY: + date_sec2date_fmt(rapt->start, "%b %d", pcal_date); + fprintf(stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, + pcal_end, rapt->mesg); + break; + default: + EXIT(_("incoherent repetition type")); + } + } else { + const long YEAR_START = calendar_start_of_year(); + const long YEAR_END = calendar_end_of_year(); - if (rapt->start < YEAR_END && rapt->start > YEAR_START) - foreach_date_dump (YEAR_END, rapt->rpt, &rapt->exc, rapt->start, - rapt->dur, rapt->mesg, - (cb_dump_t)pcal_dump_apoint, stream); - } + if (rapt->start < YEAR_END && rapt->start > YEAR_START) + foreach_date_dump(YEAR_END, rapt->rpt, &rapt->exc, rapt->start, + rapt->dur, rapt->mesg, + (cb_dump_t) pcal_dump_apoint, stream); } + } } -static void -pcal_export_apoints (FILE *stream) +static void pcal_export_apoints(FILE * stream) { llist_item_t *i; - fputs ("\n# ============\n# Appointments\n# ============\n", stream); - LLIST_TS_LOCK (&alist_p); - LLIST_TS_FOREACH (&alist_p, i) - { - struct apoint *apt = LLIST_TS_GET_DATA (i); - pcal_dump_apoint (stream, apt->start, apt->dur, apt->mesg); - } - LLIST_TS_UNLOCK (&alist_p); - fputc ('\n', stream); + fputs("\n# ============\n# Appointments\n# ============\n", stream); + LLIST_TS_LOCK(&alist_p); + LLIST_TS_FOREACH(&alist_p, i) { + struct apoint *apt = LLIST_TS_GET_DATA(i); + pcal_dump_apoint(stream, apt->start, apt->dur, apt->mesg); + } + LLIST_TS_UNLOCK(&alist_p); + fputc('\n', stream); } -static void -pcal_export_todo (FILE *stream) +static void pcal_export_todo(FILE * stream) { llist_item_t *i; - fputs ("#\n# Todos\n#\n", stream); - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_TS_GET_DATA (i); - if (todo->id < 0) /* completed items */ - continue; + fputs("#\n# Todos\n#\n", stream); + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_TS_GET_DATA(i); + if (todo->id < 0) /* completed items */ + continue; - fputs ("note all ", stream); - fprintf (stream, "%d. %s\n", todo->id, todo->mesg); - } - fputc ('\n', stream); + fputs("note all ", stream); + fprintf(stream, "%d. %s\n", todo->id, todo->mesg); + } + fputc('\n', stream); } /* Export calcurse data. */ -void -pcal_export_data (FILE *stream) +void pcal_export_data(FILE * stream) { - pcal_export_header (stream); - pcal_export_recur_events (stream); - pcal_export_events (stream); - pcal_export_recur_apoints (stream); - pcal_export_apoints (stream); - pcal_export_todo (stream); - pcal_export_footer (stream); + pcal_export_header(stream); + pcal_export_recur_events(stream); + pcal_export_events(stream); + pcal_export_recur_apoints(stream); + pcal_export_apoints(stream); + pcal_export_todo(stream); + pcal_export_footer(stream); } - diff --git a/src/recur.c b/src/recur.c index d1a5516..dad9c25 100644 --- a/src/recur.c +++ b/src/recur.c @@ -42,242 +42,217 @@ #include "calcurse.h" -llist_ts_t recur_alist_p; -llist_t recur_elist; -static struct recur_event bkp_cut_recur_event; +llist_ts_t recur_alist_p; +llist_t recur_elist; +static struct recur_event bkp_cut_recur_event; static struct recur_apoint bkp_cut_recur_apoint; -static void -free_exc (struct excp *exc) +static void free_exc(struct excp *exc) { - mem_free (exc); + mem_free(exc); } -static void -free_exc_list (llist_t *exc) +static void free_exc_list(llist_t * exc) { - LLIST_FREE_INNER (exc, free_exc); - LLIST_FREE (exc); + LLIST_FREE_INNER(exc, free_exc); + LLIST_FREE(exc); } -static int -exc_cmp_day (struct excp *a, struct excp *b) +static int exc_cmp_day(struct excp *a, struct excp *b) { return a->st < b->st ? -1 : (a->st == b->st ? 0 : 1); } -static void -recur_add_exc (llist_t *exc, long day) +static void recur_add_exc(llist_t * exc, long day) { - struct excp *o = mem_malloc (sizeof (struct excp)); + struct excp *o = mem_malloc(sizeof(struct excp)); o->st = day; - LLIST_ADD_SORTED (exc, o, exc_cmp_day); + LLIST_ADD_SORTED(exc, o, exc_cmp_day); } -static void -exc_dup (llist_t *in, llist_t *exc) +static void exc_dup(llist_t * in, llist_t * exc) { llist_item_t *i; - LLIST_INIT (in); + LLIST_INIT(in); - if (exc) - { - LLIST_FOREACH (exc, i) - { - struct excp *p = LLIST_GET_DATA (i); - recur_add_exc (in, p->st); - } + if (exc) { + LLIST_FOREACH(exc, i) { + struct excp *p = LLIST_GET_DATA(i); + recur_add_exc(in, p->st); } + } } -void -recur_event_free_bkp (void) +void recur_event_free_bkp(void) { - if (bkp_cut_recur_event.mesg) - { - mem_free (bkp_cut_recur_event.mesg); - bkp_cut_recur_event.mesg = 0; - } - if (bkp_cut_recur_event.rpt) - { - mem_free (bkp_cut_recur_event.rpt); - bkp_cut_recur_event.rpt = 0; - } - free_exc_list (&bkp_cut_recur_event.exc); - erase_note (&bkp_cut_recur_event.note); + if (bkp_cut_recur_event.mesg) { + mem_free(bkp_cut_recur_event.mesg); + bkp_cut_recur_event.mesg = 0; + } + if (bkp_cut_recur_event.rpt) { + mem_free(bkp_cut_recur_event.rpt); + bkp_cut_recur_event.rpt = 0; + } + free_exc_list(&bkp_cut_recur_event.exc); + erase_note(&bkp_cut_recur_event.note); } -void -recur_apoint_free_bkp (void) +void recur_apoint_free_bkp(void) { - if (bkp_cut_recur_apoint.mesg) - { - mem_free (bkp_cut_recur_apoint.mesg); - bkp_cut_recur_apoint.mesg = 0; - } - if (bkp_cut_recur_apoint.rpt) - { - mem_free (bkp_cut_recur_apoint.rpt); - bkp_cut_recur_apoint.rpt = 0; - } - free_exc_list (&bkp_cut_recur_apoint.exc); - erase_note (&bkp_cut_recur_apoint.note); + if (bkp_cut_recur_apoint.mesg) { + mem_free(bkp_cut_recur_apoint.mesg); + bkp_cut_recur_apoint.mesg = 0; + } + if (bkp_cut_recur_apoint.rpt) { + mem_free(bkp_cut_recur_apoint.rpt); + bkp_cut_recur_apoint.rpt = 0; + } + free_exc_list(&bkp_cut_recur_apoint.exc); + erase_note(&bkp_cut_recur_apoint.note); } -static void -recur_event_dup (struct recur_event *in, struct recur_event *bkp) +static void recur_event_dup(struct recur_event *in, struct recur_event *bkp) { - EXIT_IF (!in || !bkp, _("null pointer")); + EXIT_IF(!in || !bkp, _("null pointer")); bkp->id = in->id; bkp->day = in->day; - bkp->mesg = mem_strdup (in->mesg); + bkp->mesg = mem_strdup(in->mesg); - bkp->rpt = mem_malloc (sizeof (struct rpt)); + bkp->rpt = mem_malloc(sizeof(struct rpt)); bkp->rpt->type = in->rpt->type; bkp->rpt->freq = in->rpt->freq; bkp->rpt->until = in->rpt->until; - exc_dup (&bkp->exc, &in->exc); + exc_dup(&bkp->exc, &in->exc); if (in->note) - bkp->note = mem_strdup (in->note); + bkp->note = mem_strdup(in->note); } -static void -recur_apoint_dup (struct recur_apoint *in, struct recur_apoint *bkp) +static void recur_apoint_dup(struct recur_apoint *in, struct recur_apoint *bkp) { - EXIT_IF (!in || !bkp, _("null pointer")); + EXIT_IF(!in || !bkp, _("null pointer")); bkp->start = in->start; bkp->dur = in->dur; bkp->state = in->state; - bkp->mesg = mem_strdup (in->mesg); + bkp->mesg = mem_strdup(in->mesg); - bkp->rpt = mem_malloc (sizeof (struct rpt)); + bkp->rpt = mem_malloc(sizeof(struct rpt)); bkp->rpt->type = in->rpt->type; bkp->rpt->freq = in->rpt->freq; bkp->rpt->until = in->rpt->until; - exc_dup (&bkp->exc, &in->exc); + exc_dup(&bkp->exc, &in->exc); if (in->note) - bkp->note = mem_strdup (in->note); + bkp->note = mem_strdup(in->note); } -void -recur_apoint_llist_init (void) +void recur_apoint_llist_init(void) { - LLIST_TS_INIT (&recur_alist_p); + LLIST_TS_INIT(&recur_alist_p); } -static void -recur_apoint_free (struct recur_apoint *rapt) +static void recur_apoint_free(struct recur_apoint *rapt) { - mem_free (rapt->mesg); + mem_free(rapt->mesg); if (rapt->note) - mem_free (rapt->note); + mem_free(rapt->note); if (rapt->rpt) - mem_free (rapt->rpt); - free_exc_list (&rapt->exc); - mem_free (rapt); + mem_free(rapt->rpt); + free_exc_list(&rapt->exc); + mem_free(rapt); } -static void -recur_event_free (struct recur_event *rev) +static void recur_event_free(struct recur_event *rev) { - mem_free (rev->mesg); + mem_free(rev->mesg); if (rev->note) - mem_free (rev->note); + mem_free(rev->note); if (rev->rpt) - mem_free (rev->rpt); - free_exc_list (&rev->exc); - mem_free (rev); + mem_free(rev->rpt); + free_exc_list(&rev->exc); + mem_free(rev); } -void -recur_apoint_llist_free (void) +void recur_apoint_llist_free(void) { - LLIST_TS_FREE_INNER (&recur_alist_p, recur_apoint_free); - LLIST_TS_FREE (&recur_alist_p); + LLIST_TS_FREE_INNER(&recur_alist_p, recur_apoint_free); + LLIST_TS_FREE(&recur_alist_p); } -void -recur_event_llist_free (void) +void recur_event_llist_free(void) { - LLIST_FREE_INNER (&recur_elist, recur_event_free); - LLIST_FREE (&recur_elist); + LLIST_FREE_INNER(&recur_elist, recur_event_free); + LLIST_FREE(&recur_elist); } static int -recur_apoint_cmp_start (struct recur_apoint *a, struct recur_apoint *b) +recur_apoint_cmp_start(struct recur_apoint *a, struct recur_apoint *b) { return a->start < b->start ? -1 : (a->start == b->start ? 0 : 1); } -static int -recur_event_cmp_day (struct recur_event *a, struct recur_event *b) +static int recur_event_cmp_day(struct recur_event *a, struct recur_event *b) { return a->day < b->day ? -1 : (a->day == b->day ? 0 : 1); } /* Insert a new recursive appointment in the general linked list */ -struct recur_apoint * -recur_apoint_new (char *mesg, char *note, long start, long dur, char state, - int type, int freq, long until, llist_t *except) +struct recur_apoint *recur_apoint_new(char *mesg, char *note, long start, + long dur, char state, int type, int freq, + long until, llist_t * except) { - struct recur_apoint *rapt = mem_malloc (sizeof (struct recur_apoint)); + struct recur_apoint *rapt = mem_malloc(sizeof(struct recur_apoint)); - rapt->rpt = mem_malloc (sizeof (struct rpt)); - rapt->mesg = mem_strdup (mesg); - rapt->note = (note != NULL) ? mem_strdup (note) : 0; + rapt->rpt = mem_malloc(sizeof(struct rpt)); + rapt->mesg = mem_strdup(mesg); + rapt->note = (note != NULL) ? mem_strdup(note) : 0; rapt->start = start; rapt->state = state; rapt->dur = dur; rapt->rpt->type = type; rapt->rpt->freq = freq; rapt->rpt->until = until; - if (except) - { - exc_dup (&rapt->exc, except); - free_exc_list (except); - } - else - LLIST_INIT (&rapt->exc); + if (except) { + exc_dup(&rapt->exc, except); + free_exc_list(except); + } else + LLIST_INIT(&rapt->exc); - LLIST_TS_LOCK (&recur_alist_p); - LLIST_TS_ADD_SORTED (&recur_alist_p, rapt, recur_apoint_cmp_start); - LLIST_TS_UNLOCK (&recur_alist_p); + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_ADD_SORTED(&recur_alist_p, rapt, recur_apoint_cmp_start); + LLIST_TS_UNLOCK(&recur_alist_p); return rapt; } /* Insert a new recursive event in the general linked list */ -struct recur_event * -recur_event_new (char *mesg, char *note, long day, int id, int type, int freq, - long until, llist_t *except) +struct recur_event *recur_event_new(char *mesg, char *note, long day, int id, + int type, int freq, long until, + llist_t * except) { - struct recur_event *rev = mem_malloc (sizeof (struct recur_event)); + struct recur_event *rev = mem_malloc(sizeof(struct recur_event)); - rev->rpt = mem_malloc (sizeof (struct rpt)); - rev->mesg = mem_strdup (mesg); - rev->note = (note != NULL) ? mem_strdup (note) : 0; + rev->rpt = mem_malloc(sizeof(struct rpt)); + rev->mesg = mem_strdup(mesg); + rev->note = (note != NULL) ? mem_strdup(note) : 0; rev->day = day; rev->id = id; rev->rpt->type = type; rev->rpt->freq = freq; rev->rpt->until = until; - if (except) - { - exc_dup (&rev->exc, except); - free_exc_list (except); - } - else - LLIST_INIT (&rev->exc); + if (except) { + exc_dup(&rev->exc, except); + free_exc_list(except); + } else + LLIST_INIT(&rev->exc); - LLIST_ADD_SORTED (&recur_elist, rev, recur_event_cmp_day); + LLIST_ADD_SORTED(&recur_elist, rev, recur_event_cmp_day); return rev; } @@ -286,29 +261,27 @@ recur_event_new (char *mesg, char *note, long day, int id, int type, int freq, * Correspondance between the defines on recursive type, * and the letter to be written in file. */ -char -recur_def2char (enum recur_type define) +char recur_def2char(enum recur_type define) { char recur_char; - switch (define) - { - case RECUR_DAILY: - recur_char = 'D'; - break; - case RECUR_WEEKLY: - recur_char = 'W'; - break; - case RECUR_MONTHLY: - recur_char = 'M'; - break; - case RECUR_YEARLY: - recur_char = 'Y'; - break; - default: - EXIT (_("unknown repetition type")); - return 0; - } + switch (define) { + case RECUR_DAILY: + recur_char = 'D'; + break; + case RECUR_WEEKLY: + recur_char = 'W'; + break; + case RECUR_MONTHLY: + recur_char = 'M'; + break; + case RECUR_YEARLY: + recur_char = 'Y'; + break; + default: + EXIT(_("unknown repetition type")); + return 0; + } return recur_char; } @@ -317,185 +290,166 @@ recur_def2char (enum recur_type define) * Correspondance between the letters written in file and the defines * concerning the recursive type. */ -int -recur_char2def (char type) +int recur_char2def(char type) { int recur_def; - switch (type) - { - case 'D': - recur_def = RECUR_DAILY; - break; - case 'W': - recur_def = RECUR_WEEKLY; - break; - case 'M': - recur_def = RECUR_MONTHLY; - break; - case 'Y': - recur_def = RECUR_YEARLY; - break; - default: - EXIT (_("unknown character")); - return 0; - } + switch (type) { + case 'D': + recur_def = RECUR_DAILY; + break; + case 'W': + recur_def = RECUR_WEEKLY; + break; + case 'M': + recur_def = RECUR_MONTHLY; + break; + case 'Y': + recur_def = RECUR_YEARLY; + break; + default: + EXIT(_("unknown character")); + return 0; + } return recur_def; } /* Write days for which recurrent items should not be repeated. */ -static void -recur_write_exc (llist_t *lexc, FILE *f) +static void recur_write_exc(llist_t * lexc, FILE * f) { llist_item_t *i; struct tm *lt; time_t t; int st_mon, st_day, st_year; - LLIST_FOREACH (lexc, i) - { - struct excp *exc = LLIST_GET_DATA (i); - t = exc->st; - lt = localtime (&t); - st_mon = lt->tm_mon + 1; - st_day = lt->tm_mday; - st_year = lt->tm_year + 1900; - fprintf (f, " !%02u/%02u/%04u", st_mon, st_day, st_year); - } + LLIST_FOREACH(lexc, i) { + struct excp *exc = LLIST_GET_DATA(i); + t = exc->st; + lt = localtime(&t); + st_mon = lt->tm_mon + 1; + st_day = lt->tm_mday; + st_year = lt->tm_year + 1900; + fprintf(f, " !%02u/%02u/%04u", st_mon, st_day, st_year); + } } /* Load the recursive appointment description */ -struct recur_apoint * -recur_apoint_scan (FILE *f, struct tm start, struct tm end, char type, - int freq, struct tm until, char *note, llist_t *exc, - char state) +struct recur_apoint *recur_apoint_scan(FILE * f, struct tm start, struct tm end, + char type, int freq, struct tm until, + char *note, llist_t * exc, char state) { char buf[BUFSIZ], *nl; time_t tstart, tend, tuntil; /* Read the appointment description */ - if (!fgets (buf, sizeof buf, f)) + if (!fgets(buf, sizeof buf, f)) return NULL; - nl = strchr (buf, '\n'); - if (nl) - { - *nl = '\0'; - } + nl = strchr(buf, '\n'); + if (nl) { + *nl = '\0'; + } start.tm_sec = end.tm_sec = 0; start.tm_isdst = end.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; end.tm_year -= 1900; end.tm_mon--; - tstart = mktime (&start); - tend = mktime (&end); - - if (until.tm_year != 0) - { - until.tm_hour = 23; - until.tm_min = 59; - until.tm_sec = 0; - until.tm_isdst = -1; - until.tm_year -= 1900; - until.tm_mon--; - tuntil = mktime (&until); - } - else - { - tuntil = 0; - } - EXIT_IF (tstart == -1 || tend == -1 || tstart > tend || tuntil == -1, - _("date error in appointment")); - - return recur_apoint_new (buf, note, tstart, tend - tstart, state, - recur_char2def(type), freq, tuntil, exc); + tstart = mktime(&start); + tend = mktime(&end); + + if (until.tm_year != 0) { + until.tm_hour = 23; + until.tm_min = 59; + until.tm_sec = 0; + until.tm_isdst = -1; + until.tm_year -= 1900; + until.tm_mon--; + tuntil = mktime(&until); + } else { + tuntil = 0; + } + EXIT_IF(tstart == -1 || tend == -1 || tstart > tend || tuntil == -1, + _("date error in appointment")); + + return recur_apoint_new(buf, note, tstart, tend - tstart, state, + recur_char2def(type), freq, tuntil, exc); } /* Load the recursive events from file */ -struct recur_event * -recur_event_scan (FILE *f, struct tm start, int id, char type, int freq, - struct tm until, char *note, llist_t *exc) +struct recur_event *recur_event_scan(FILE * f, struct tm start, int id, + char type, int freq, struct tm until, + char *note, llist_t * exc) { char buf[BUFSIZ], *nl; time_t tstart, tuntil; /* Read the event description */ - if (!fgets (buf, sizeof buf, f)) + if (!fgets(buf, sizeof buf, f)) return NULL; - nl = strchr (buf, '\n'); - if (nl) - { - *nl = '\0'; - } + nl = strchr(buf, '\n'); + if (nl) { + *nl = '\0'; + } start.tm_hour = until.tm_hour = 0; start.tm_min = until.tm_min = 0; start.tm_sec = until.tm_sec = 0; start.tm_isdst = until.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; - if (until.tm_year != 0) - { - until.tm_year -= 1900; - until.tm_mon--; - tuntil = mktime (&until); - } - else - { - tuntil = 0; - } - tstart = mktime (&start); - EXIT_IF (tstart == -1 || tuntil == -1, - _("date error in event")); - - return recur_event_new (buf, note, tstart, id, recur_char2def(type), freq, - tuntil, exc); + if (until.tm_year != 0) { + until.tm_year -= 1900; + until.tm_mon--; + tuntil = mktime(&until); + } else { + tuntil = 0; + } + tstart = mktime(&start); + EXIT_IF(tstart == -1 || tuntil == -1, _("date error in event")); + + return recur_event_new(buf, note, tstart, id, recur_char2def(type), freq, + tuntil, exc); } /* Writting of a recursive appointment into file. */ -void -recur_apoint_write (struct recur_apoint *o, FILE *f) +void recur_apoint_write(struct recur_apoint *o, FILE * f) { struct tm *lt; time_t t; t = o->start; - lt = localtime (&t); - fprintf (f, "%02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); + lt = localtime(&t); + fprintf(f, "%02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); t = o->start + o->dur; - lt = localtime (&t); - fprintf (f, " -> %02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); + lt = localtime(&t); + fprintf(f, " -> %02u/%02u/%04u @ %02u:%02u", lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year, lt->tm_hour, lt->tm_min); t = o->rpt->until; - if (t == 0) - { /* We have an endless recurrent appointment. */ - fprintf (f, " {%d%c", o->rpt->freq, recur_def2char (o->rpt->type)); - } - else - { - lt = localtime (&t); - fprintf (f, " {%d%c -> %02u/%02u/%04u", o->rpt->freq, - recur_def2char (o->rpt->type), lt->tm_mon + 1, lt->tm_mday, - 1900 + lt->tm_year); - } - recur_write_exc (&o->exc, f); - fputs ("} ", f); + if (t == 0) { /* We have an endless recurrent appointment. */ + fprintf(f, " {%d%c", o->rpt->freq, recur_def2char(o->rpt->type)); + } else { + lt = localtime(&t); + fprintf(f, " {%d%c -> %02u/%02u/%04u", o->rpt->freq, + recur_def2char(o->rpt->type), lt->tm_mon + 1, lt->tm_mday, + 1900 + lt->tm_year); + } + recur_write_exc(&o->exc, f); + fputs("} ", f); if (o->note != NULL) - fprintf (f, ">%s ", o->note); + fprintf(f, ">%s ", o->note); if (o->state & APOINT_NOTIFY) - fputc ('!', f); + fputc('!', f); else - fputc ('|', f); - fprintf (f, "%s\n", o->mesg); + fputc('|', f); + fprintf(f, "%s\n", o->mesg); } /* Writting of a recursive event into file. */ -void -recur_event_write (struct recur_event *o, FILE *f) +void recur_event_write(struct recur_event *o, FILE * f) { struct tm *lt; time_t t; @@ -503,55 +457,48 @@ recur_event_write (struct recur_event *o, FILE *f) int end_mon, end_day, end_year; t = o->day; - lt = localtime (&t); + lt = localtime(&t); st_mon = lt->tm_mon + 1; st_day = lt->tm_mday; st_year = lt->tm_year + 1900; t = o->rpt->until; - if (t == 0) - { /* We have an endless recurrent event. */ - fprintf (f, "%02u/%02u/%04u [%d] {%d%c", st_mon, st_day, st_year, o->id, - o->rpt->freq, recur_def2char (o->rpt->type)); - } - else - { - lt = localtime (&t); - end_mon = lt->tm_mon + 1; - end_day = lt->tm_mday; - end_year = lt->tm_year + 1900; - fprintf (f, "%02u/%02u/%04u [%d] {%d%c -> %02u/%02u/%04u", st_mon, - st_day, st_year, o->id, o->rpt->freq, - recur_def2char (o->rpt->type), end_mon, end_day, end_year); - } - recur_write_exc (&o->exc, f); - fputs ("} ", f); + if (t == 0) { /* We have an endless recurrent event. */ + fprintf(f, "%02u/%02u/%04u [%d] {%d%c", st_mon, st_day, st_year, o->id, + o->rpt->freq, recur_def2char(o->rpt->type)); + } else { + lt = localtime(&t); + end_mon = lt->tm_mon + 1; + end_day = lt->tm_mday; + end_year = lt->tm_year + 1900; + fprintf(f, "%02u/%02u/%04u [%d] {%d%c -> %02u/%02u/%04u", st_mon, + st_day, st_year, o->id, o->rpt->freq, + recur_def2char(o->rpt->type), end_mon, end_day, end_year); + } + recur_write_exc(&o->exc, f); + fputs("} ", f); if (o->note != NULL) - fprintf (f, ">%s ", o->note); - fprintf (f, "%s\n", o->mesg); + fprintf(f, ">%s ", o->note); + fprintf(f, "%s\n", o->mesg); } /* Write recursive items to file. */ -void -recur_save_data (FILE *f) +void recur_save_data(FILE * f) { llist_item_t *i; - LLIST_FOREACH (&recur_elist, i) - { - struct recur_event *rev = LLIST_GET_DATA (i); - recur_event_write (rev, f); - } - - LLIST_TS_LOCK (&recur_alist_p); - LLIST_TS_FOREACH (&recur_alist_p, i) - { - struct recur_apoint *rapt = LLIST_GET_DATA (i); - recur_apoint_write (rapt, f); - } - LLIST_TS_UNLOCK (&recur_alist_p); + LLIST_FOREACH(&recur_elist, i) { + struct recur_event *rev = LLIST_GET_DATA(i); + recur_event_write(rev, f); + } + + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FOREACH(&recur_alist_p, i) { + struct recur_apoint *rapt = LLIST_GET_DATA(i); + recur_apoint_write(rapt, f); + } + LLIST_TS_UNLOCK(&recur_alist_p); } - /* * The two following defines together with the diff_days, diff_months and * diff_years functions were provided by Lukas Fleischer to correct the wrong @@ -564,10 +511,8 @@ recur_save_data (FILE *f) #define LEAPCOUNT(start, end) \ (BC(start, end, 4) - BC(start, end, 100) + BC(start, end, 400)) - /* Calculate the difference in days between two dates. */ -static long -diff_days (struct tm lt_start, struct tm lt_end) +static long diff_days(struct tm lt_start, struct tm lt_end) { long diff; @@ -576,19 +521,17 @@ diff_days (struct tm lt_start, struct tm lt_end) diff = lt_end.tm_yday - lt_start.tm_yday; - if (lt_end.tm_year > lt_start.tm_year) - { - diff += (lt_end.tm_year - lt_start.tm_year) * YEARINDAYS; - diff += LEAPCOUNT (lt_start.tm_year + TM_YEAR_BASE, - lt_end.tm_year + TM_YEAR_BASE - 1); - } + if (lt_end.tm_year > lt_start.tm_year) { + diff += (lt_end.tm_year - lt_start.tm_year) * YEARINDAYS; + diff += LEAPCOUNT(lt_start.tm_year + TM_YEAR_BASE, + lt_end.tm_year + TM_YEAR_BASE - 1); + } return diff; } /* Calculate the difference in months between two dates. */ -static long -diff_months (struct tm lt_start, struct tm lt_end) +static long diff_months(struct tm lt_start, struct tm lt_end) { long diff; @@ -602,14 +545,12 @@ diff_months (struct tm lt_start, struct tm lt_end) } /* Calculate the difference in years between two dates. */ -static long -diff_years (struct tm lt_start, struct tm lt_end) +static long diff_years(struct tm lt_start, struct tm lt_end) { return lt_end.tm_year - lt_start.tm_year; } -static int -exc_inday (struct excp *exc, long day_start) +static int exc_inday(struct excp *exc, long day_start) { return (exc->st >= day_start && exc->st < day_start + DAYINSEC); } @@ -624,9 +565,9 @@ exc_inday (struct excp *exc, long day_start) * calculation of recurrent dates after a turn of years. */ unsigned -recur_item_find_occurrence (long item_start, long item_dur, llist_t *item_exc, - int rpt_type, int rpt_freq, long rpt_until, - long day_start, unsigned *occurrence) +recur_item_find_occurrence(long item_start, long item_dur, llist_t * item_exc, + int rpt_type, int rpt_freq, long rpt_until, + long day_start, unsigned *occurrence) { struct date start_date; long diff, span; @@ -640,81 +581,77 @@ recur_item_find_occurrence (long item_start, long item_dur, llist_t *item_exc, return 0; t = day_start; - lt_day = *localtime (&t); + lt_day = *localtime(&t); t = item_start; - lt_item = *localtime (&t); + lt_item = *localtime(&t); lt_item_day = lt_item; lt_item_day.tm_sec = lt_item_day.tm_min = lt_item_day.tm_hour = 0; - span = (item_start - mktime (<_item_day) + item_dur - 1) / DAYINSEC; - - switch (rpt_type) - { - case RECUR_DAILY: - diff = diff_days (lt_item_day, lt_day) % rpt_freq; - lt_item_day.tm_mday = lt_day.tm_mday - diff; - lt_item_day.tm_mon = lt_day.tm_mon; - lt_item_day.tm_year = lt_day.tm_year; - break; - case RECUR_WEEKLY: - diff = diff_days (lt_item_day, lt_day) % (rpt_freq * WEEKINDAYS); - lt_item_day.tm_mday = lt_day.tm_mday - diff; - lt_item_day.tm_mon = lt_day.tm_mon; - lt_item_day.tm_year = lt_day.tm_year; - break; - case RECUR_MONTHLY: - diff = diff_months (lt_item_day, lt_day) % rpt_freq; - if (lt_day.tm_mday < lt_item_day.tm_mday) - diff++; - lt_item_day.tm_mon = lt_day.tm_mon - diff; - lt_item_day.tm_year = lt_day.tm_year; - break; - case RECUR_YEARLY: - diff = diff_years (lt_item_day, lt_day) % rpt_freq; - if (lt_day.tm_mon < lt_item_day.tm_mon || - (lt_day.tm_mon == lt_item_day.tm_mon && - lt_day.tm_mday < lt_item_day.tm_mday)) - diff++; - lt_item_day.tm_year = lt_day.tm_year - diff; - break; - default: - EXIT (_("unknown item type")); - } + span = (item_start - mktime(<_item_day) + item_dur - 1) / DAYINSEC; + + switch (rpt_type) { + case RECUR_DAILY: + diff = diff_days(lt_item_day, lt_day) % rpt_freq; + lt_item_day.tm_mday = lt_day.tm_mday - diff; + lt_item_day.tm_mon = lt_day.tm_mon; + lt_item_day.tm_year = lt_day.tm_year; + break; + case RECUR_WEEKLY: + diff = diff_days(lt_item_day, lt_day) % (rpt_freq * WEEKINDAYS); + lt_item_day.tm_mday = lt_day.tm_mday - diff; + lt_item_day.tm_mon = lt_day.tm_mon; + lt_item_day.tm_year = lt_day.tm_year; + break; + case RECUR_MONTHLY: + diff = diff_months(lt_item_day, lt_day) % rpt_freq; + if (lt_day.tm_mday < lt_item_day.tm_mday) + diff++; + lt_item_day.tm_mon = lt_day.tm_mon - diff; + lt_item_day.tm_year = lt_day.tm_year; + break; + case RECUR_YEARLY: + diff = diff_years(lt_item_day, lt_day) % rpt_freq; + if (lt_day.tm_mon < lt_item_day.tm_mon || + (lt_day.tm_mon == lt_item_day.tm_mon && + lt_day.tm_mday < lt_item_day.tm_mday)) + diff++; + lt_item_day.tm_year = lt_day.tm_year - diff; + break; + default: + EXIT(_("unknown item type")); + } lt_item_day.tm_isdst = lt_day.tm_isdst; - t = mktime (<_item_day); + t = mktime(<_item_day); - if (LLIST_FIND_FIRST (item_exc, t, exc_inday)) + if (LLIST_FIND_FIRST(item_exc, t, exc_inday)) return 0; if (rpt_until != 0 && t > rpt_until) return 0; - lt_item_day = *localtime (&t); - diff = diff_days (lt_item_day, lt_day); - - if (diff <= span) - { - if (occurrence) - { - start_date.dd = lt_item_day.tm_mday; - start_date.mm = lt_item_day.tm_mon + 1; - start_date.yyyy = lt_item_day.tm_year + 1900; + lt_item_day = *localtime(&t); + diff = diff_days(lt_item_day, lt_day); - *occurrence = date2sec (start_date, lt_item.tm_hour, lt_item.tm_min); - } + if (diff <= span) { + if (occurrence) { + start_date.dd = lt_item_day.tm_mday; + start_date.mm = lt_item_day.tm_mon + 1; + start_date.yyyy = lt_item_day.tm_year + 1900; - return 1; + *occurrence = date2sec(start_date, lt_item.tm_hour, lt_item.tm_min); } - else + + return 1; + } else return 0; } unsigned -recur_apoint_find_occurrence (struct recur_apoint *rapt, long day_start, - unsigned *occurrence) +recur_apoint_find_occurrence(struct recur_apoint *rapt, long day_start, + unsigned *occurrence) { return recur_item_find_occurrence(rapt->start, rapt->dur, &rapt->exc, rapt->rpt->type, rapt->rpt->freq, @@ -722,8 +659,8 @@ recur_apoint_find_occurrence (struct recur_apoint *rapt, long day_start, } unsigned -recur_event_find_occurrence (struct recur_event *rev, long day_start, - unsigned *occurrence) +recur_event_find_occurrence(struct recur_event *rev, long day_start, + unsigned *occurrence) { return recur_item_find_occurrence(rev->day, DAYINSEC, &rev->exc, rev->rpt->type, rev->rpt->freq, @@ -732,8 +669,8 @@ recur_event_find_occurrence (struct recur_event *rev, long day_start, /* Check if a recurrent item belongs to the selected day. */ unsigned -recur_item_inday (long item_start, long item_dur, llist_t *item_exc, - int rpt_type, int rpt_freq, long rpt_until, long day_start) +recur_item_inday(long item_start, long item_dur, llist_t * item_exc, + int rpt_type, int rpt_freq, long rpt_until, long day_start) { /* We do not need the (real) start time of the occurrence here, so just * ignore the buffer. */ @@ -741,15 +678,13 @@ recur_item_inday (long item_start, long item_dur, llist_t *item_exc, rpt_freq, rpt_until, day_start, NULL); } -unsigned -recur_apoint_inday(struct recur_apoint *rapt, long day_start) +unsigned recur_apoint_inday(struct recur_apoint *rapt, long day_start) { return recur_item_inday(rapt->start, rapt->dur, &rapt->exc, rapt->rpt->type, rapt->rpt->freq, rapt->rpt->until, day_start); } -unsigned -recur_event_inday(struct recur_event *rev, long day_start) +unsigned recur_event_inday(struct recur_event *rev, long day_start) { return recur_item_inday(rev->day, DAYINSEC, &rev->exc, rev->rpt->type, rev->rpt->freq, rev->rpt->until, day_start); @@ -760,44 +695,40 @@ recur_event_inday(struct recur_event *rev, long day_start) * or delete only one occurence of the recurrent event. */ void -recur_event_erase (long start, unsigned num, unsigned delete_whole, - enum eraseflg flag) +recur_event_erase(long start, unsigned num, unsigned delete_whole, + enum eraseflg flag) { llist_item_t *i; - i = LLIST_FIND_NTH (&recur_elist, num, start, recur_event_inday); + i = LLIST_FIND_NTH(&recur_elist, num, start, recur_event_inday); if (!i) - EXIT (_("event not found")); - struct recur_event *rev = LLIST_GET_DATA (i); - - if (delete_whole) - { - switch (flag) - { - case ERASE_FORCE_ONLY_NOTE: - erase_note (&rev->note); - break; - case ERASE_CUT: - recur_event_free_bkp (); - recur_event_dup (rev, &bkp_cut_recur_event); - erase_note (&rev->note); - /* FALLTHROUGH */ - default: - LLIST_REMOVE (&recur_elist, i); - mem_free (rev->mesg); - if (rev->rpt) - { - mem_free (rev->rpt); - rev->rpt = 0; - } - free_exc_list (&rev->exc); - mem_free (rev); - break; - } + EXIT(_("event not found")); + struct recur_event *rev = LLIST_GET_DATA(i); + + if (delete_whole) { + switch (flag) { + case ERASE_FORCE_ONLY_NOTE: + erase_note(&rev->note); + break; + case ERASE_CUT: + recur_event_free_bkp(); + recur_event_dup(rev, &bkp_cut_recur_event); + erase_note(&rev->note); + /* FALLTHROUGH */ + default: + LLIST_REMOVE(&recur_elist, i); + mem_free(rev->mesg); + if (rev->rpt) { + mem_free(rev->rpt); + rev->rpt = 0; + } + free_exc_list(&rev->exc); + mem_free(rev); + break; } - else - recur_add_exc (&rev->exc, start); + } else + recur_add_exc(&rev->exc, start); } /* @@ -805,55 +736,50 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole, * or delete only one occurence of the recurrent appointment. */ void -recur_apoint_erase (long start, unsigned num, unsigned delete_whole, - enum eraseflg flag) +recur_apoint_erase(long start, unsigned num, unsigned delete_whole, + enum eraseflg flag) { llist_item_t *i; int need_check_notify = 0; - i = LLIST_TS_FIND_NTH (&recur_alist_p, num, start, recur_apoint_inday); + i = LLIST_TS_FIND_NTH(&recur_alist_p, num, start, recur_apoint_inday); if (!i) - EXIT (_("appointment not found")); - struct recur_apoint *rapt = LLIST_GET_DATA (i); - - LLIST_TS_LOCK (&recur_alist_p); - if (notify_bar () && flag != ERASE_FORCE_ONLY_NOTE) - need_check_notify = notify_same_recur_item (rapt); - if (delete_whole) - { - switch (flag) - { - case ERASE_FORCE_ONLY_NOTE: - erase_note (&rapt->note); - break; - case ERASE_CUT: - recur_apoint_free_bkp (); - recur_apoint_dup (rapt, &bkp_cut_recur_apoint); - erase_note (&rapt->note); - /* FALLTHROUGH */ - default: - LLIST_TS_REMOVE (&recur_alist_p, i); - mem_free (rapt->mesg); - if (rapt->rpt) - { - mem_free (rapt->rpt); - rapt->rpt = 0; - } - free_exc_list (&rapt->exc); - mem_free (rapt); - if (need_check_notify) - notify_check_next_app (0); - break; - } - } - else - { - recur_add_exc (&rapt->exc, start); + EXIT(_("appointment not found")); + struct recur_apoint *rapt = LLIST_GET_DATA(i); + + LLIST_TS_LOCK(&recur_alist_p); + if (notify_bar() && flag != ERASE_FORCE_ONLY_NOTE) + need_check_notify = notify_same_recur_item(rapt); + if (delete_whole) { + switch (flag) { + case ERASE_FORCE_ONLY_NOTE: + erase_note(&rapt->note); + break; + case ERASE_CUT: + recur_apoint_free_bkp(); + recur_apoint_dup(rapt, &bkp_cut_recur_apoint); + erase_note(&rapt->note); + /* FALLTHROUGH */ + default: + LLIST_TS_REMOVE(&recur_alist_p, i); + mem_free(rapt->mesg); + if (rapt->rpt) { + mem_free(rapt->rpt); + rapt->rpt = 0; + } + free_exc_list(&rapt->exc); + mem_free(rapt); if (need_check_notify) - notify_check_next_app (0); + notify_check_next_app(0); + break; } - LLIST_TS_UNLOCK (&recur_alist_p); + } else { + recur_add_exc(&rapt->exc, start); + if (need_check_notify) + notify_check_next_app(0); + } + LLIST_TS_UNLOCK(&recur_alist_p); } /* @@ -863,8 +789,7 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole, * o repetition end date * and then delete the selected item to recreate it as a recurrent one */ -void -recur_repeat_item (void) +void recur_repeat_item(void) { struct tm *lt; time_t t; @@ -882,22 +807,19 @@ recur_repeat_item (void) const char *mesg_freq_1 = _("Enter the repetition frequence:"); const char *mesg_wrong_freq = _("The frequence you entered is not valid."); const char *mesg_until_1 = - _("Enter the ending date: [%s] or '0' for an endless repetition"); + _("Enter the ending date: [%s] or '0' for an endless repetition"); const char *mesg_wrong_1 = _("The entered date is not valid."); const char *mesg_wrong_2 = - _("Possible formats are [%s] or '0' for an endless repetition"); + _("Possible formats are [%s] or '0' for an endless repetition"); const char *wrong_type_1 = _("This item is already a repeated one."); const char *wrong_type_2 = _("Press [ENTER] to continue."); const char *mesg_older = - _("Sorry, the date you entered is older than the item start time."); + _("Sorry, the date you entered is older than the item start time."); char msg_asktype[BUFSIZ]; - snprintf (msg_asktype, BUFSIZ, "%s %s, %s, %s, %s", - msg_rpt_prefix, - msg_rpt_daily, - msg_rpt_weekly, - msg_rpt_monthly, - msg_rpt_yearly); + snprintf(msg_asktype, BUFSIZ, "%s %s, %s, %s, %s", + msg_rpt_prefix, + msg_rpt_daily, msg_rpt_weekly, msg_rpt_monthly, msg_rpt_yearly); int type = 0, freq = 0; int item_nb; @@ -905,151 +827,123 @@ recur_repeat_item (void) struct recur_apoint *ra; long until, date; - item_nb = apoint_hilt (); - p = day_get_item (item_nb); - if (p->type != APPT && p->type != EVNT) - { - status_mesg (wrong_type_1, wrong_type_2); - wgetch (win[STA].p); - return; - } - - switch (status_ask_choice (msg_asktype, msg_type_choice, 4)) - { - case 1: - type = RECUR_DAILY; - break; - case 2: - type = RECUR_WEEKLY; - break; - case 3: - type = RECUR_MONTHLY; - break; - case 4: - type = RECUR_YEARLY; - break; - default: + item_nb = apoint_hilt(); + p = day_get_item(item_nb); + if (p->type != APPT && p->type != EVNT) { + status_mesg(wrong_type_1, wrong_type_2); + wgetch(win[STA].p); + return; + } + + switch (status_ask_choice(msg_asktype, msg_type_choice, 4)) { + case 1: + type = RECUR_DAILY; + break; + case 2: + type = RECUR_WEEKLY; + break; + case 3: + type = RECUR_MONTHLY; + break; + case 4: + type = RECUR_YEARLY; + break; + default: + return; + } + + while (freq == 0) { + status_mesg(mesg_freq_1, ""); + if (getstring(win[STA].p, user_input, BUFSIZ, 0, 1) == GETSTRING_VALID) { + freq = atoi(user_input); + if (freq == 0) { + status_mesg(mesg_wrong_freq, wrong_type_2); + wgetch(win[STA].p); + } + user_input[0] = '\0'; + } else return; - } - - while (freq == 0) - { - status_mesg (mesg_freq_1, ""); - if (getstring (win[STA].p, user_input, BUFSIZ, 0, 1) == GETSTRING_VALID) - { - freq = atoi (user_input); - if (freq == 0) - { - status_mesg (mesg_wrong_freq, wrong_type_2); - wgetch (win[STA].p); - } - user_input[0] = '\0'; - } - else - return; - } - - while (!date_entered) - { - snprintf (outstr, BUFSIZ, mesg_until_1, - DATEFMT_DESC (conf.input_datefmt)); - status_mesg (_(outstr), ""); - if (getstring (win[STA].p, user_input, BUFSIZ, 0, 1) == GETSTRING_VALID) - { - if (strlen (user_input) == 1 && strcmp (user_input, "0") == 0) - { - until = 0; - date_entered = 1; - } - else - { - if (parse_date (user_input, conf.input_datefmt, - &year, &month, &day, calendar_get_slctd_day ())) - { - t = p->start; - lt = localtime (&t); - until_date.dd = day; - until_date.mm = month; - until_date.yyyy = year; - until = date2sec (until_date, lt->tm_hour, lt->tm_min); - if (until < p->start) - { - status_mesg (mesg_older, wrong_type_2); - wgetch (win[STA].p); - date_entered = 0; - } - else - { - date_entered = 1; - } - } - else - { - snprintf (outstr, BUFSIZ, mesg_wrong_2, - DATEFMT_DESC (conf.input_datefmt)); - status_mesg (mesg_wrong_1, _(outstr)); - wgetch (win[STA].p); - date_entered = 0; - } - } + } + + while (!date_entered) { + snprintf(outstr, BUFSIZ, mesg_until_1, DATEFMT_DESC(conf.input_datefmt)); + status_mesg(_(outstr), ""); + if (getstring(win[STA].p, user_input, BUFSIZ, 0, 1) == GETSTRING_VALID) { + if (strlen(user_input) == 1 && strcmp(user_input, "0") == 0) { + until = 0; + date_entered = 1; + } else { + if (parse_date(user_input, conf.input_datefmt, + &year, &month, &day, calendar_get_slctd_day())) { + t = p->start; + lt = localtime(&t); + until_date.dd = day; + until_date.mm = month; + until_date.yyyy = year; + until = date2sec(until_date, lt->tm_hour, lt->tm_min); + if (until < p->start) { + status_mesg(mesg_older, wrong_type_2); + wgetch(win[STA].p); + date_entered = 0; + } else { + date_entered = 1; + } + } else { + snprintf(outstr, BUFSIZ, mesg_wrong_2, + DATEFMT_DESC(conf.input_datefmt)); + status_mesg(mesg_wrong_1, _(outstr)); + wgetch(win[STA].p); + date_entered = 0; } - else - return; - } - - date = calendar_get_slctd_day_sec (); - if (p->type == EVNT) - { - recur_event_new (p->mesg, p->note, p->start, p->evnt_id, type, freq, - until, NULL); - } - else if (p->type == APPT) - { - ra = recur_apoint_new (p->mesg, p->note, p->start, p->appt_dur, - p->state, type, freq, until, NULL); - if (notify_bar ()) - notify_check_repeated (ra); - } - else - { - EXIT (_("wrong item type")); - /* NOTREACHED */ - } - day_erase_item (date, item_nb, ERASE_FORCE); + } + } else + return; + } + + date = calendar_get_slctd_day_sec(); + if (p->type == EVNT) { + recur_event_new(p->mesg, p->note, p->start, p->evnt_id, type, freq, + until, NULL); + } else if (p->type == APPT) { + ra = recur_apoint_new(p->mesg, p->note, p->start, p->appt_dur, + p->state, type, freq, until, NULL); + if (notify_bar()) + notify_check_repeated(ra); + } else { + EXIT(_("wrong item type")); + /* NOTREACHED */ + } + day_erase_item(date, item_nb, ERASE_FORCE); } /* * Read days for which recurrent items must not be repeated * (such days are called exceptions). */ -void -recur_exc_scan (llist_t *lexc, FILE *data_file) +void recur_exc_scan(llist_t * lexc, FILE * data_file) { int c = 0; struct tm day; - LLIST_INIT (lexc); - while ((c = getc (data_file)) == '!') - { - ungetc (c, data_file); - if (fscanf (data_file, "!%d / %d / %d ", - &day.tm_mon, &day.tm_mday, &day.tm_year) != 3) - { - EXIT (_("syntax error in item date")); - } - day.tm_hour = 0; - day.tm_min = day.tm_sec = 0; - day.tm_isdst = -1; - day.tm_year -= 1900; - day.tm_mon--; - struct excp *exc = mem_malloc (sizeof (struct excp)); - exc->st = mktime (&day); - LLIST_ADD (lexc, exc); + LLIST_INIT(lexc); + while ((c = getc(data_file)) == '!') { + ungetc(c, data_file); + if (fscanf(data_file, "!%d / %d / %d ", + &day.tm_mon, &day.tm_mday, &day.tm_year) != 3) { + EXIT(_("syntax error in item date")); } + day.tm_hour = 0; + day.tm_min = day.tm_sec = 0; + day.tm_isdst = -1; + day.tm_year -= 1900; + day.tm_mon--; + struct excp *exc = mem_malloc(sizeof(struct excp)); + exc->st = mktime(&day); + LLIST_ADD(lexc, exc); + } } -static int -recur_apoint_starts_before (struct recur_apoint *rapt, long time) +static int recur_apoint_starts_before(struct recur_apoint *rapt, long time) { return rapt->start < time; } @@ -1058,135 +952,126 @@ recur_apoint_starts_before (struct recur_apoint *rapt, long time) * Look in the appointment list if we have an item which starts before the item * stored in the notify_app structure (which is the next item to be notified). */ -struct notify_app * -recur_apoint_check_next (struct notify_app *app, long start, long day) +struct notify_app *recur_apoint_check_next(struct notify_app *app, long start, + long day) { llist_item_t *i; unsigned real_recur_start_time; - LLIST_TS_LOCK (&recur_alist_p); - LLIST_TS_FIND_FOREACH (&recur_alist_p, app->time, recur_apoint_starts_before, i) - { - struct recur_apoint *rapt = LLIST_TS_GET_DATA (i); - - if (recur_apoint_find_occurrence (rapt, day, &real_recur_start_time) && - real_recur_start_time > start) - { - app->time = real_recur_start_time; - app->txt = mem_strdup (rapt->mesg); - app->state = rapt->state; - app->got_app = 1; - } + LLIST_TS_LOCK(&recur_alist_p); + LLIST_TS_FIND_FOREACH(&recur_alist_p, app->time, recur_apoint_starts_before, + i) { + struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); + + if (recur_apoint_find_occurrence(rapt, day, &real_recur_start_time) && + real_recur_start_time > start) { + app->time = real_recur_start_time; + app->txt = mem_strdup(rapt->mesg); + app->state = rapt->state; + app->got_app = 1; } - LLIST_TS_UNLOCK (&recur_alist_p); + } + LLIST_TS_UNLOCK(&recur_alist_p); return app; } /* Returns a structure containing the selected recurrent appointment. */ -struct recur_apoint * -recur_get_apoint (long date, int num) +struct recur_apoint *recur_get_apoint(long date, int num) { - llist_item_t *i = LLIST_TS_FIND_NTH (&recur_alist_p, num, date, + llist_item_t *i = LLIST_TS_FIND_NTH(&recur_alist_p, num, date, recur_apoint_inday); if (i) - return LLIST_TS_GET_DATA (i); + return LLIST_TS_GET_DATA(i); - EXIT (_("item not found")); + EXIT(_("item not found")); /* NOTREACHED */ } /* Returns a structure containing the selected recurrent event. */ -struct recur_event * -recur_get_event (long date, int num) +struct recur_event *recur_get_event(long date, int num) { - llist_item_t *i = LLIST_FIND_NTH (&recur_elist, num, date, - recur_event_inday); + llist_item_t *i = LLIST_FIND_NTH(&recur_elist, num, date, + recur_event_inday); if (i) - return LLIST_GET_DATA (i); + return LLIST_GET_DATA(i); - EXIT (_("item not found")); + EXIT(_("item not found")); /* NOTREACHED */ } /* Switch recurrent item notification state. */ -void -recur_apoint_switch_notify (long date, int recur_nb) +void recur_apoint_switch_notify(long date, int recur_nb) { llist_item_t *i; - LLIST_TS_LOCK (&recur_alist_p); - i = LLIST_TS_FIND_NTH (&recur_alist_p, recur_nb, date, recur_apoint_inday); + LLIST_TS_LOCK(&recur_alist_p); + i = LLIST_TS_FIND_NTH(&recur_alist_p, recur_nb, date, recur_apoint_inday); if (!i) - EXIT (_("item not found")); - struct recur_apoint *rapt = LLIST_TS_GET_DATA (i); + EXIT(_("item not found")); + struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); rapt->state ^= APOINT_NOTIFY; - if (notify_bar ()) - notify_check_repeated (rapt); + if (notify_bar()) + notify_check_repeated(rapt); - LLIST_TS_UNLOCK (&recur_alist_p); + LLIST_TS_UNLOCK(&recur_alist_p); } -void -recur_event_paste_item (void) +void recur_event_paste_item(void) { long new_start, time_shift; llist_item_t *i; - new_start = date2sec (*calendar_get_slctd_day (), 0, 0); + new_start = date2sec(*calendar_get_slctd_day(), 0, 0); time_shift = new_start - bkp_cut_recur_event.day; bkp_cut_recur_event.day += time_shift; if (bkp_cut_recur_event.rpt->until != 0) bkp_cut_recur_event.rpt->until += time_shift; - LLIST_FOREACH (&bkp_cut_recur_event.exc, i) - { - struct excp *exc = LLIST_GET_DATA (i); - exc->st += time_shift; - } - - recur_event_new (bkp_cut_recur_event.mesg, bkp_cut_recur_event.note, - bkp_cut_recur_event.day, bkp_cut_recur_event.id, - bkp_cut_recur_event.rpt->type, - bkp_cut_recur_event.rpt->freq, - bkp_cut_recur_event.rpt->until, &bkp_cut_recur_event.exc); - recur_event_free_bkp (); + LLIST_FOREACH(&bkp_cut_recur_event.exc, i) { + struct excp *exc = LLIST_GET_DATA(i); + exc->st += time_shift; + } + + recur_event_new(bkp_cut_recur_event.mesg, bkp_cut_recur_event.note, + bkp_cut_recur_event.day, bkp_cut_recur_event.id, + bkp_cut_recur_event.rpt->type, + bkp_cut_recur_event.rpt->freq, + bkp_cut_recur_event.rpt->until, &bkp_cut_recur_event.exc); + recur_event_free_bkp(); } -void -recur_apoint_paste_item (void) +void recur_apoint_paste_item(void) { long new_start, time_shift; llist_item_t *i; - new_start = date2sec (*calendar_get_slctd_day (), - get_item_hour (bkp_cut_recur_apoint.start), - get_item_min (bkp_cut_recur_apoint.start)); + new_start = date2sec(*calendar_get_slctd_day(), + get_item_hour(bkp_cut_recur_apoint.start), + get_item_min(bkp_cut_recur_apoint.start)); time_shift = new_start - bkp_cut_recur_apoint.start; bkp_cut_recur_apoint.start += time_shift; if (bkp_cut_recur_apoint.rpt->until != 0) bkp_cut_recur_apoint.rpt->until += time_shift; - LLIST_FOREACH (&bkp_cut_recur_event.exc, i) - { - struct excp *exc = LLIST_GET_DATA (i); - exc->st += time_shift; - } + LLIST_FOREACH(&bkp_cut_recur_event.exc, i) { + struct excp *exc = LLIST_GET_DATA(i); + exc->st += time_shift; + } - recur_apoint_new (bkp_cut_recur_apoint.mesg, bkp_cut_recur_apoint.note, - bkp_cut_recur_apoint.start, bkp_cut_recur_apoint.dur, - bkp_cut_recur_apoint.state, bkp_cut_recur_apoint.rpt->type, - bkp_cut_recur_apoint.rpt->freq, - bkp_cut_recur_apoint.rpt->until, - &bkp_cut_recur_apoint.exc); + recur_apoint_new(bkp_cut_recur_apoint.mesg, bkp_cut_recur_apoint.note, + bkp_cut_recur_apoint.start, bkp_cut_recur_apoint.dur, + bkp_cut_recur_apoint.state, bkp_cut_recur_apoint.rpt->type, + bkp_cut_recur_apoint.rpt->freq, + bkp_cut_recur_apoint.rpt->until, &bkp_cut_recur_apoint.exc); - if (notify_bar ()) - notify_check_repeated (&bkp_cut_recur_apoint); + if (notify_bar()) + notify_check_repeated(&bkp_cut_recur_apoint); - recur_apoint_free_bkp (); + recur_apoint_free_bkp(); } @@ -67,61 +67,100 @@ #define R4(v, w, x, y, z, i) z += (w ^ x ^ y) + blk (i) + 0xCA62C1D6 + \ rol (v, 5); w = rol (w, 30); -static void -sha1_transform (uint32_t state[5], const uint8_t buffer[64]) +static void sha1_transform(uint32_t state[5], const uint8_t buffer[64]) { typedef union { uint8_t c[64]; uint32_t l[16]; } b64_t; - b64_t *block = (b64_t *)buffer; + b64_t *block = (b64_t *) buffer; uint32_t a = state[0]; uint32_t b = state[1]; uint32_t c = state[2]; uint32_t d = state[3]; uint32_t e = state[4]; - R0 (a, b, c, d, e, 0); R0 (e, a, b, c, d, 1); - R0 (d, e, a, b, c, 2); R0 (c, d, e, a, b, 3); - R0 (b, c, d, e, a, 4); R0 (a, b, c, d, e, 5); - R0 (e, a, b, c, d, 6); R0 (d, e, a, b, c, 7); - R0 (c, d, e, a, b, 8); R0 (b, c, d, e, a, 9); - R0 (a, b, c, d, e, 10); R0 (e, a, b, c, d, 11); - R0 (d, e, a, b, c, 12); R0 (c, d, e, a, b, 13); - R0 (b, c, d, e, a, 14); R0 (a, b, c, d, e, 15); - R1 (e, a, b, c, d, 16); R1 (d, e, a, b, c, 17); - R1 (c, d, e, a, b, 18); R1 (b, c, d, e, a, 19); - R2 (a, b, c, d, e, 20); R2 (e, a, b, c, d, 21); - R2 (d, e, a, b, c, 22); R2 (c, d, e, a, b, 23); - R2 (b, c, d, e, a, 24); R2 (a, b, c, d, e, 25); - R2 (e, a, b, c, d, 26); R2 (d, e, a, b, c, 27); - R2 (c, d, e, a, b, 28); R2 (b, c, d, e, a, 29); - R2 (a, b, c, d, e, 30); R2 (e, a, b, c, d, 31); - R2 (d, e, a, b, c, 32); R2 (c, d, e, a, b, 33); - R2 (b, c, d, e, a, 34); R2 (a, b, c, d, e, 35); - R2 (e, a, b, c, d, 36); R2 (d, e, a, b, c, 37); - R2 (c, d, e, a, b, 38); R2 (b, c, d, e, a, 39); - R3 (a, b, c, d, e, 40); R3 (e, a, b, c, d, 41); - R3 (d, e, a, b, c, 42); R3 (c, d, e, a, b, 43); - R3 (b, c, d, e, a, 44); R3 (a, b, c, d, e, 45); - R3 (e, a, b, c, d, 46); R3 (d, e, a, b, c, 47); - R3 (c, d, e, a, b, 48); R3 (b, c, d, e, a, 49); - R3 (a, b, c, d, e, 50); R3 (e, a, b, c, d, 51); - R3 (d, e, a, b, c, 52); R3 (c, d, e, a, b, 53); - R3 (b, c, d, e, a, 54); R3 (a, b, c, d, e, 55); - R3 (e, a, b, c, d, 56); R3 (d, e, a, b, c, 57); - R3 (c, d, e, a, b, 58); R3 (b, c, d, e, a, 59); - R4 (a, b, c, d, e, 60); R4 (e, a, b, c, d, 61); - R4 (d, e, a, b, c, 62); R4 (c, d, e, a, b, 63); - R4 (b, c, d, e, a, 64); R4 (a, b, c, d, e, 65); - R4 (e, a, b, c, d, 66); R4 (d, e, a, b, c, 67); - R4 (c, d, e, a, b, 68); R4 (b, c, d, e, a, 69); - R4 (a, b, c, d, e, 70); R4 (e, a, b, c, d, 71); - R4 (d, e, a, b, c, 72); R4 (c, d, e, a, b, 73); - R4 (b, c, d, e, a, 74); R4 (a, b, c, d, e, 75); - R4 (e, a, b, c, d, 76); R4 (d, e, a, b, c, 77); - R4 (c, d, e, a, b, 78); R4 (b, c, d, e, a, 79); + R0(a, b, c, d, e, 0); + R0(e, a, b, c, d, 1); + R0(d, e, a, b, c, 2); + R0(c, d, e, a, b, 3); + R0(b, c, d, e, a, 4); + R0(a, b, c, d, e, 5); + R0(e, a, b, c, d, 6); + R0(d, e, a, b, c, 7); + R0(c, d, e, a, b, 8); + R0(b, c, d, e, a, 9); + R0(a, b, c, d, e, 10); + R0(e, a, b, c, d, 11); + R0(d, e, a, b, c, 12); + R0(c, d, e, a, b, 13); + R0(b, c, d, e, a, 14); + R0(a, b, c, d, e, 15); + R1(e, a, b, c, d, 16); + R1(d, e, a, b, c, 17); + R1(c, d, e, a, b, 18); + R1(b, c, d, e, a, 19); + R2(a, b, c, d, e, 20); + R2(e, a, b, c, d, 21); + R2(d, e, a, b, c, 22); + R2(c, d, e, a, b, 23); + R2(b, c, d, e, a, 24); + R2(a, b, c, d, e, 25); + R2(e, a, b, c, d, 26); + R2(d, e, a, b, c, 27); + R2(c, d, e, a, b, 28); + R2(b, c, d, e, a, 29); + R2(a, b, c, d, e, 30); + R2(e, a, b, c, d, 31); + R2(d, e, a, b, c, 32); + R2(c, d, e, a, b, 33); + R2(b, c, d, e, a, 34); + R2(a, b, c, d, e, 35); + R2(e, a, b, c, d, 36); + R2(d, e, a, b, c, 37); + R2(c, d, e, a, b, 38); + R2(b, c, d, e, a, 39); + R3(a, b, c, d, e, 40); + R3(e, a, b, c, d, 41); + R3(d, e, a, b, c, 42); + R3(c, d, e, a, b, 43); + R3(b, c, d, e, a, 44); + R3(a, b, c, d, e, 45); + R3(e, a, b, c, d, 46); + R3(d, e, a, b, c, 47); + R3(c, d, e, a, b, 48); + R3(b, c, d, e, a, 49); + R3(a, b, c, d, e, 50); + R3(e, a, b, c, d, 51); + R3(d, e, a, b, c, 52); + R3(c, d, e, a, b, 53); + R3(b, c, d, e, a, 54); + R3(a, b, c, d, e, 55); + R3(e, a, b, c, d, 56); + R3(d, e, a, b, c, 57); + R3(c, d, e, a, b, 58); + R3(b, c, d, e, a, 59); + R4(a, b, c, d, e, 60); + R4(e, a, b, c, d, 61); + R4(d, e, a, b, c, 62); + R4(c, d, e, a, b, 63); + R4(b, c, d, e, a, 64); + R4(a, b, c, d, e, 65); + R4(e, a, b, c, d, 66); + R4(d, e, a, b, c, 67); + R4(c, d, e, a, b, 68); + R4(b, c, d, e, a, 69); + R4(a, b, c, d, e, 70); + R4(e, a, b, c, d, 71); + R4(d, e, a, b, c, 72); + R4(c, d, e, a, b, 73); + R4(b, c, d, e, a, 74); + R4(a, b, c, d, e, 75); + R4(e, a, b, c, d, 76); + R4(d, e, a, b, c, 77); + R4(c, d, e, a, b, 78); + R4(b, c, d, e, a, 79); state[0] += a; state[1] += b; @@ -132,9 +171,7 @@ sha1_transform (uint32_t state[5], const uint8_t buffer[64]) a = b = c = d = e = 0; } - -void -sha1_init (sha1_ctx_t *ctx) +void sha1_init(sha1_ctx_t * ctx) { ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; @@ -145,8 +182,7 @@ sha1_init (sha1_ctx_t *ctx) ctx->count[0] = ctx->count[1] = 0; } -void -sha1_update (sha1_ctx_t *ctx, const uint8_t *data, unsigned int len) +void sha1_update(sha1_ctx_t * ctx, const uint8_t * data, unsigned int len) { unsigned int i, j; @@ -155,67 +191,59 @@ sha1_update (sha1_ctx_t *ctx, const uint8_t *data, unsigned int len) ctx->count[1]++; ctx->count[1] += (len >> 29); - if (j + len > 63) - { - memcpy (&ctx->buffer[j], data, (i = 64 - j)); - sha1_transform (ctx->state, ctx->buffer); - for (; i + 63 < len; i += 64) - sha1_transform (ctx->state, &data[i]); - j = 0; - } - else + if (j + len > 63) { + memcpy(&ctx->buffer[j], data, (i = 64 - j)); + sha1_transform(ctx->state, ctx->buffer); + for (; i + 63 < len; i += 64) + sha1_transform(ctx->state, &data[i]); + j = 0; + } else i = 0; - memcpy (&ctx->buffer[j], &data[i], len - i); + memcpy(&ctx->buffer[j], &data[i], len - i); } - -void -sha1_final (sha1_ctx_t *ctx, uint8_t digest[SHA1_DIGESTLEN]) +void sha1_final(sha1_ctx_t * ctx, uint8_t digest[SHA1_DIGESTLEN]) { uint32_t i, j; - uint8_t finalcount[8]; + uint8_t finalcount[8]; - for (i = 0; i < 8; i++) - { - finalcount[i] = (uint8_t)((ctx->count[(i >= 4 ? 0 : 1)] >> - ((3 - (i & 3)) * 8)) & 255); - } + for (i = 0; i < 8; i++) { + finalcount[i] = (uint8_t) ((ctx->count[(i >= 4 ? 0 : 1)] >> + ((3 - (i & 3)) * 8)) & 255); + } - sha1_update (ctx, (uint8_t *)"\200", 1); + sha1_update(ctx, (uint8_t *) "\200", 1); while ((ctx->count[0] & 504) != 448) - sha1_update (ctx, (uint8_t *)"\0", 1); + sha1_update(ctx, (uint8_t *) "\0", 1); - sha1_update (ctx, finalcount, 8); + sha1_update(ctx, finalcount, 8); for (i = 0; i < SHA1_DIGESTLEN; i++) - digest[i] = (uint8_t)((ctx->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); + digest[i] = (uint8_t) ((ctx->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); i = j = 0; - memset (ctx->buffer, 0, SHA1_BLOCKLEN); - memset (ctx->state, 0, SHA1_DIGESTLEN); - memset (ctx->count, 0, 8); - memset (&finalcount, 0, 8); + memset(ctx->buffer, 0, SHA1_BLOCKLEN); + memset(ctx->state, 0, SHA1_DIGESTLEN); + memset(ctx->count, 0, 8); + memset(&finalcount, 0, 8); } -void -sha1_digest (const char *data, char *buffer) +void sha1_digest(const char *data, char *buffer) { sha1_ctx_t ctx; uint8_t digest[SHA1_DIGESTLEN]; int i; - sha1_init (&ctx); - sha1_update (&ctx, (const uint8_t *)data, strlen (data)); - sha1_final (&ctx, (uint8_t *)digest); + sha1_init(&ctx); + sha1_update(&ctx, (const uint8_t *)data, strlen(data)); + sha1_final(&ctx, (uint8_t *) digest); - for (i = 0; i < SHA1_DIGESTLEN; i++) - { - snprintf (buffer, 3, "%02x", digest[i]); - buffer += sizeof (char) * 2; - } + for (i = 0; i < SHA1_DIGESTLEN; i++) { + snprintf(buffer, 3, "%02x", digest[i]); + buffer += sizeof(char) * 2; + } } -void -sha1_stream (FILE *fp, char *buffer) +void sha1_stream(FILE * fp, char *buffer) { sha1_ctx_t ctx; uint8_t data[BUFSIZ]; @@ -223,19 +251,17 @@ sha1_stream (FILE *fp, char *buffer) uint8_t digest[SHA1_DIGESTLEN]; int i; - sha1_init (&ctx); + sha1_init(&ctx); - while (!feof (fp)) - { - bytes_read = fread (data, 1, BUFSIZ, fp); - sha1_update (&ctx, data, bytes_read); - } + while (!feof(fp)) { + bytes_read = fread(data, 1, BUFSIZ, fp); + sha1_update(&ctx, data, bytes_read); + } - sha1_final (&ctx, (uint8_t *)digest); + sha1_final(&ctx, (uint8_t *) digest); - for (i = 0; i < SHA1_DIGESTLEN; i++) - { - snprintf (buffer, 3, "%02x", digest[i]); - buffer += sizeof (char) * 2; - } + for (i = 0; i < SHA1_DIGESTLEN; i++) { + snprintf(buffer, 3, "%02x", digest[i]); + buffer += sizeof(char) * 2; + } } @@ -50,8 +50,8 @@ typedef struct { uint8_t buffer[SHA1_BLOCKLEN]; } sha1_ctx_t; -void sha1_init (sha1_ctx_t *); -void sha1_update (sha1_ctx_t *, const uint8_t *, unsigned int); -void sha1_final (sha1_ctx_t *, uint8_t *); -void sha1_digest (const char *, char *); -void sha1_stream (FILE *, char *); +void sha1_init(sha1_ctx_t *); +void sha1_update(sha1_ctx_t *, const uint8_t *, unsigned int); +void sha1_final(sha1_ctx_t *, uint8_t *); +void sha1_digest(const char *, char *); +void sha1_stream(FILE *, char *); @@ -53,57 +53,48 @@ * This is needed to avoid zombie processes running on system. * Also catch CTRL-C (SIGINT), and SIGWINCH to resize screen automatically. */ -static void -generic_hdlr (int sig) +static void generic_hdlr(int sig) { - switch (sig) - { - case SIGCHLD: - while (waitpid (WAIT_MYPGRP, NULL, WNOHANG) > 0) - ; - break; - case SIGWINCH: - resize = 1; - clearok (curscr, TRUE); - ungetch (KEY_RESIZE); - break; - case SIGTERM: - if (unlink (path_cpid) != 0) - { - EXIT (_("Could not remove calcurse lock file: %s\n"), - strerror (errno)); - } - exit (EXIT_SUCCESS); - break; + switch (sig) { + case SIGCHLD: + while (waitpid(WAIT_MYPGRP, NULL, WNOHANG) > 0) ; + break; + case SIGWINCH: + resize = 1; + clearok(curscr, TRUE); + ungetch(KEY_RESIZE); + break; + case SIGTERM: + if (unlink(path_cpid) != 0) { + EXIT(_("Could not remove calcurse lock file: %s\n"), strerror(errno)); } + exit(EXIT_SUCCESS); + break; + } } -unsigned -sigs_set_hdlr (int sig, void (*handler)(int)) +unsigned sigs_set_hdlr(int sig, void (*handler) (int)) { struct sigaction sa; - memset (&sa, 0, sizeof sa); - sigemptyset (&sa.sa_mask); + memset(&sa, 0, sizeof sa); + sigemptyset(&sa.sa_mask); sa.sa_handler = handler; sa.sa_flags = 0; - if (sigaction (sig, &sa, NULL) == -1) - { - ERROR_MSG (_("Error setting signal #%d : %s\n"), - sig, strerror (errno)); - return 0; - } + if (sigaction(sig, &sa, NULL) == -1) { + ERROR_MSG(_("Error setting signal #%d : %s\n"), sig, strerror(errno)); + return 0; + } return 1; } /* Signal handling init. */ -void -sigs_init () +void sigs_init() { - if (!sigs_set_hdlr (SIGCHLD, generic_hdlr) - || !sigs_set_hdlr (SIGWINCH, generic_hdlr) - || !sigs_set_hdlr (SIGTERM, generic_hdlr) - || !sigs_set_hdlr (SIGINT, SIG_IGN)) - exit_calcurse (1); + if (!sigs_set_hdlr(SIGCHLD, generic_hdlr) + || !sigs_set_hdlr(SIGWINCH, generic_hdlr) + || !sigs_set_hdlr(SIGTERM, generic_hdlr) + || !sigs_set_hdlr(SIGINT, SIG_IGN)) + exit_calcurse(1); } @@ -47,67 +47,57 @@ static int first = 1; static char *msgsav; /* Returns a structure containing the selected item. */ -static struct todo * -todo_get_item (int item_number) +static struct todo *todo_get_item(int item_number) { - return LLIST_GET_DATA (LLIST_NTH (&todolist, item_number - 1)); + return LLIST_GET_DATA(LLIST_NTH(&todolist, item_number - 1)); } /* Sets which todo is highlighted. */ -void -todo_hilt_set (int highlighted) +void todo_hilt_set(int highlighted) { hilt = highlighted; } -void -todo_hilt_decrease (int n) +void todo_hilt_decrease(int n) { hilt -= n; } -void -todo_hilt_increase (int n) +void todo_hilt_increase(int n) { hilt += n; } /* Return which todo is highlighted. */ -int -todo_hilt (void) +int todo_hilt(void) { return hilt; } /* Return the number of todos. */ -int -todo_nb (void) +int todo_nb(void) { return todos; } /* Set the number of todos. */ -void -todo_set_nb (int nb) +void todo_set_nb(int nb) { todos = nb; } /* Set which one is the first todo to be displayed. */ -void -todo_set_first (int nb) +void todo_set_first(int nb) { first = nb; } -void -todo_first_increase (int n) +void todo_first_increase(int n) { first += n; } -void -todo_first_decrease (int n) +void todo_first_decrease(int n) { first -= n; } @@ -116,51 +106,46 @@ todo_first_decrease (int n) * Return the position of the hilghlighted item, relative to the first one * displayed. */ -int -todo_hilt_pos (void) +int todo_hilt_pos(void) { return hilt - first; } /* Return the last visited todo. */ -char * -todo_saved_mesg (void) +char *todo_saved_mesg(void) { return msgsav; } /* Request user to enter a new todo item. */ -void -todo_new_item (void) +void todo_new_item(void) { int ch = 0; const char *mesg = _("Enter the new ToDo item : "); - const char *mesg_id = _("Enter the ToDo priority [1 (highest) - 9 (lowest)] :"); + const char *mesg_id = + _("Enter the ToDo priority [1 (highest) - 9 (lowest)] :"); char todo_input[BUFSIZ] = ""; - status_mesg (mesg, ""); - if (getstring (win[STA].p, todo_input, BUFSIZ, 0, 1) == GETSTRING_VALID) - { - while ((ch < '1') || (ch > '9')) - { - status_mesg (mesg_id, ""); - ch = wgetch (win[STA].p); - } - todo_add (todo_input, ch - '0', NULL); - todos++; + status_mesg(mesg, ""); + if (getstring(win[STA].p, todo_input, BUFSIZ, 0, 1) == GETSTRING_VALID) { + while ((ch < '1') || (ch > '9')) { + status_mesg(mesg_id, ""); + ch = wgetch(win[STA].p); } + todo_add(todo_input, ch - '0', NULL); + todos++; + } } -static int -todo_cmp_id (struct todo *a, struct todo *b) +static int todo_cmp_id(struct todo *a, struct todo *b) { /* * As of version 2.6, todo items can have a negative id, which means they * were completed. To keep them sorted, we need to consider the absolute id * value. */ - int abs_a = abs (a->id); - int abs_b = abs (b->id); + int abs_a = abs(a->id); + int abs_b = abs(b->id); return abs_a < abs_b ? -1 : (abs_a == abs_b ? 0 : 1); } @@ -168,59 +153,55 @@ todo_cmp_id (struct todo *a, struct todo *b) /* * Add an item in the todo linked list. */ -struct todo * -todo_add (char *mesg, int id, char *note) +struct todo *todo_add(char *mesg, int id, char *note) { struct todo *todo; - todo = mem_malloc (sizeof (struct todo)); - todo->mesg = mem_strdup (mesg); + todo = mem_malloc(sizeof(struct todo)); + todo->mesg = mem_strdup(mesg); todo->id = id; - todo->note = (note != NULL && note[0] != '\0') ? mem_strdup (note) : NULL; + todo->note = (note != NULL && note[0] != '\0') ? mem_strdup(note) : NULL; - LLIST_ADD_SORTED (&todolist, todo, todo_cmp_id); + LLIST_ADD_SORTED(&todolist, todo, todo_cmp_id); return todo; } -void -todo_write (struct todo *todo, FILE *f) +void todo_write(struct todo *todo, FILE * f) { if (todo->note) - fprintf (f, "[%d]>%s %s\n", todo->id, todo->note, todo->mesg); + fprintf(f, "[%d]>%s %s\n", todo->id, todo->note, todo->mesg); else - fprintf (f, "[%d] %s\n", todo->id, todo->mesg); + fprintf(f, "[%d] %s\n", todo->id, todo->mesg); } /* Delete a note previously attached to a todo item. */ -static void -todo_delete_note_bynum (unsigned num) +static void todo_delete_note_bynum(unsigned num) { - llist_item_t *i = LLIST_NTH (&todolist, num); + llist_item_t *i = LLIST_NTH(&todolist, num); if (!i) - EXIT (_("no such todo")); - struct todo *todo = LLIST_TS_GET_DATA (i); + EXIT(_("no such todo")); + struct todo *todo = LLIST_TS_GET_DATA(i); if (!todo->note) - EXIT (_("no note attached")); - erase_note (&todo->note); + EXIT(_("no note attached")); + erase_note(&todo->note); } /* Delete an item from the todo linked list. */ -static void -todo_delete_bynum (unsigned num) +static void todo_delete_bynum(unsigned num) { - llist_item_t *i = LLIST_NTH (&todolist, num); + llist_item_t *i = LLIST_NTH(&todolist, num); if (!i) - EXIT (_("no such todo")); - struct todo *todo = LLIST_TS_GET_DATA (i); + EXIT(_("no such todo")); + struct todo *todo = LLIST_TS_GET_DATA(i); - LLIST_REMOVE (&todolist, i); - mem_free (todo->mesg); - erase_note (&todo->note); - mem_free (todo); + LLIST_REMOVE(&todolist, i); + mem_free(todo->mesg); + erase_note(&todo->note); + mem_free(todo); } /* @@ -229,18 +210,16 @@ todo_delete_bynum (unsigned num) * This way, it is easy to retrive its original priority if the user decides * that in fact it was not completed. */ -void -todo_flag (void) +void todo_flag(void) { struct todo *t; - t = todo_get_item (hilt); + t = todo_get_item(hilt); t->id = -t->id; } /* Delete an item from the ToDo list. */ -void -todo_delete (void) +void todo_delete(void) { const char *del_todo_str = _("Do you really want to delete this task ?"); const char *erase_warning = @@ -251,116 +230,109 @@ todo_delete (void) int answer; if ((todos <= 0) || - (conf.confirm_delete && (status_ask_bool (del_todo_str) != 1))) - { - wins_erase_status_bar (); - return; - } + (conf.confirm_delete && (status_ask_bool(del_todo_str) != 1))) { + wins_erase_status_bar(); + return; + } /* This todo item doesn't have any note associated. */ - if (todo_get_item (hilt)->note == NULL) + if (todo_get_item(hilt)->note == NULL) answer = 1; else - answer = status_ask_choice (erase_warning, erase_choice, nb_erase_choice); - - switch (answer) - { - case 1: - todo_delete_bynum (hilt - 1); - todos--; - if (hilt > 1) - hilt--; - if (todos == 0) - hilt = 0; - if (hilt - first < 0) - first--; - break; - case 2: - todo_delete_note_bynum (hilt - 1); - break; - default: - wins_erase_status_bar (); - return; - } + answer = status_ask_choice(erase_warning, erase_choice, nb_erase_choice); + + switch (answer) { + case 1: + todo_delete_bynum(hilt - 1); + todos--; + if (hilt > 1) + hilt--; + if (todos == 0) + hilt = 0; + if (hilt - first < 0) + first--; + break; + case 2: + todo_delete_note_bynum(hilt - 1); + break; + default: + wins_erase_status_bar(); + return; + } } /* * Returns the position into the linked list corresponding to the * given todo item. */ -static int -todo_get_position (struct todo *needle) +static int todo_get_position(struct todo *needle) { llist_item_t *i; int n = 0; - LLIST_FOREACH (&todolist, i) - { - n++; - if (LLIST_TS_GET_DATA (i) == needle) - return n; - } + LLIST_FOREACH(&todolist, i) { + n++; + if (LLIST_TS_GET_DATA(i) == needle) + return n; + } - EXIT (_("todo not found")); - return -1; /* avoid compiler warnings */ + EXIT(_("todo not found")); + return -1; /* avoid compiler warnings */ } /* Change an item priority by pressing '+' or '-' inside TODO panel. */ -void -todo_chg_priority (int action) +void todo_chg_priority(int action) { struct todo *backup; char backup_mesg[BUFSIZ]; int backup_id; char backup_note[MAX_NOTESIZ + 1]; - backup = todo_get_item (hilt); - strncpy (backup_mesg, backup->mesg, strlen (backup->mesg) + 1); + backup = todo_get_item(hilt); + strncpy(backup_mesg, backup->mesg, strlen(backup->mesg) + 1); backup_id = backup->id; if (backup->note) - strncpy (backup_note, backup->note, MAX_NOTESIZ + 1); + strncpy(backup_note, backup->note, MAX_NOTESIZ + 1); else backup_note[0] = '\0'; - switch (action) - { - case KEY_RAISE_PRIORITY: - if (backup_id > 1) - backup_id--; - else - return; - break; - case KEY_LOWER_PRIORITY: - if (backup_id > 0 && backup_id < 9) - backup_id++; - else - return; - break; - default: - EXIT (_("no such action")); - /* NOTREACHED */ - } - - todo_delete_bynum (hilt - 1); - backup = todo_add (backup_mesg, backup_id, backup_note); - hilt = todo_get_position (backup); + switch (action) { + case KEY_RAISE_PRIORITY: + if (backup_id > 1) + backup_id--; + else + return; + break; + case KEY_LOWER_PRIORITY: + if (backup_id > 0 && backup_id < 9) + backup_id++; + else + return; + break; + default: + EXIT(_("no such action")); + /* NOTREACHED */ + } + + todo_delete_bynum(hilt - 1); + backup = todo_add(backup_mesg, backup_id, backup_note); + hilt = todo_get_position(backup); } /* Edit the description of an already existing todo item. */ -void -todo_edit_item (void) +void todo_edit_item(void) { struct todo *i; const char *mesg = _("Enter the new ToDo description :"); - status_mesg (mesg, ""); - i = todo_get_item (hilt); - updatestring (win[STA].p, &i->mesg, 0, 1); + status_mesg(mesg, ""); + i = todo_get_item(hilt); + updatestring(win[STA].p, &i->mesg, 0, 1); } /* Display todo items in the corresponding panel. */ static void -display_todo_item (int incolor, char *msg, int prio, int note, int width, int y, - int x) +display_todo_item(int incolor, char *msg, int prio, int note, int width, int y, + int x) { WINDOW *w; int ch_note; @@ -370,35 +342,32 @@ display_todo_item (int incolor, char *msg, int prio, int note, int width, int y, w = win[TOD].p; ch_note = (note) ? '>' : '.'; if (prio > 0) - snprintf (priostr, sizeof priostr, "%d", prio); + snprintf(priostr, sizeof priostr, "%d", prio); else - strncpy (priostr, "X", sizeof priostr); + strncpy(priostr, "X", sizeof priostr); if (incolor == 0) - custom_apply_attr (w, ATTR_HIGHEST); - if (utf8_strwidth (msg) < width) - mvwprintw (w, y, x, "%s%c %s", priostr, ch_note, msg); - else - { - for (i = 0; msg[i] && width > 0; i++) - { - if (!UTF8_ISCONT (msg[i])) - width -= utf8_width (&msg[i]); - buf[i] = msg[i]; - } - if (i) - buf[i - 1] = 0; - else - buf[0] = 0; - mvwprintw (w, y, x, "%s%c %s...", priostr, ch_note, buf); + custom_apply_attr(w, ATTR_HIGHEST); + if (utf8_strwidth(msg) < width) + mvwprintw(w, y, x, "%s%c %s", priostr, ch_note, msg); + else { + for (i = 0; msg[i] && width > 0; i++) { + if (!UTF8_ISCONT(msg[i])) + width -= utf8_width(&msg[i]); + buf[i] = msg[i]; } + if (i) + buf[i - 1] = 0; + else + buf[0] = 0; + mvwprintw(w, y, x, "%s%c %s...", priostr, ch_note, buf); + } if (incolor == 0) - custom_remove_attr (w, ATTR_HIGHEST); + custom_remove_attr(w, ATTR_HIGHEST); } /* Updates the ToDo panel. */ -void -todo_update_panel (int which_pan) +void todo_update_panel(int which_pan) { llist_item_t *i; int len = win[TOD].w - 8; @@ -411,62 +380,54 @@ todo_update_panel (int which_pan) int incolor = -1; /* Print todo item in the panel. */ - erase_window_part (win[TOD].p, 1, title_lines, win[TOD].w - 2, - win[TOD].h - 2); - LLIST_FOREACH (&todolist, i) - { - struct todo *todo = LLIST_TS_GET_DATA (i); - num_todo++; - t_realpos = num_todo - first; - incolor = (which_pan == TOD) ? num_todo - hilt : num_todo; - if (incolor == 0) - msgsav = todo->mesg; - if (t_realpos >= 0 && t_realpos < max_items) - { - display_todo_item (incolor, todo->mesg, todo->id, - (todo->note != NULL) ? 1 : 0, len, y_offset, - x_offset); - y_offset = y_offset + todo_lines; - } + erase_window_part(win[TOD].p, 1, title_lines, win[TOD].w - 2, win[TOD].h - 2); + LLIST_FOREACH(&todolist, i) { + struct todo *todo = LLIST_TS_GET_DATA(i); + num_todo++; + t_realpos = num_todo - first; + incolor = (which_pan == TOD) ? num_todo - hilt : num_todo; + if (incolor == 0) + msgsav = todo->mesg; + if (t_realpos >= 0 && t_realpos < max_items) { + display_todo_item(incolor, todo->mesg, todo->id, + (todo->note != NULL) ? 1 : 0, len, y_offset, x_offset); + y_offset = y_offset + todo_lines; } + } /* Draw the scrollbar if necessary. */ - if (todos > max_items) - { - float ratio = ((float) max_items) / ((float) todos); - int sbar_length = (int) (ratio * (max_items + 1)); - int highend = (int) (ratio * first); - unsigned hilt_bar = (which_pan == TOD) ? 1 : 0; - int sbar_top = highend + title_lines; - - if ((sbar_top + sbar_length) > win[TOD].h - 1) - sbar_length = win[TOD].h - 1 - sbar_top; - draw_scrollbar (win[TOD].p, sbar_top, win[TOD].w - 2, - sbar_length, title_lines, win[TOD].h - 1, hilt_bar); - } - - wnoutrefresh (win[TOD].p); + if (todos > max_items) { + float ratio = ((float)max_items) / ((float)todos); + int sbar_length = (int)(ratio * (max_items + 1)); + int highend = (int)(ratio * first); + unsigned hilt_bar = (which_pan == TOD) ? 1 : 0; + int sbar_top = highend + title_lines; + + if ((sbar_top + sbar_length) > win[TOD].h - 1) + sbar_length = win[TOD].h - 1 - sbar_top; + draw_scrollbar(win[TOD].p, sbar_top, win[TOD].w - 2, + sbar_length, title_lines, win[TOD].h - 1, hilt_bar); + } + + wnoutrefresh(win[TOD].p); } /* Attach a note to a todo */ -void -todo_edit_note (const char *editor) +void todo_edit_note(const char *editor) { - struct todo *i = todo_get_item (hilt); - edit_note (&i->note, editor); + struct todo *i = todo_get_item(hilt); + edit_note(&i->note, editor); } /* View a note previously attached to a todo */ -void -todo_view_note (const char *pager) +void todo_view_note(const char *pager) { - struct todo *i = todo_get_item (hilt); - view_note (i->note, pager); + struct todo *i = todo_get_item(hilt); + view_note(i->note, pager); } /* Pipe a todo item to an external program. */ -void -todo_pipe_item (void) +void todo_pipe_item(void) { char cmd[BUFSIZ] = ""; char const *arg[] = { cmd, NULL }; @@ -475,42 +436,38 @@ todo_pipe_item (void) FILE *fpout; struct todo *todo; - status_mesg (_("Pipe item to external command:"), ""); - if (getstring (win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) + status_mesg(_("Pipe item to external command:"), ""); + if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) return; - wins_prepare_external (); - if ((pid = shell_exec (NULL, &pout, *arg, arg))) - { - fpout = fdopen (pout, "w"); + wins_prepare_external(); + if ((pid = shell_exec(NULL, &pout, *arg, arg))) { + fpout = fdopen(pout, "w"); - todo = todo_get_item (hilt); - todo_write (todo, fpout); + todo = todo_get_item(hilt); + todo_write(todo, fpout); - fclose (fpout); - child_wait (NULL, &pout, pid); - press_any_key (); - } - wins_unprepare_external (); + fclose(fpout); + child_wait(NULL, &pout, pid); + press_any_key(); + } + wins_unprepare_external(); } -static void -todo_free (struct todo *todo) +static void todo_free(struct todo *todo) { - mem_free (todo->mesg); - erase_note (&todo->note); - mem_free (todo); + mem_free(todo->mesg); + erase_note(&todo->note); + mem_free(todo); } -void -todo_init_list (void) +void todo_init_list(void) { - LLIST_INIT (&todolist); + LLIST_INIT(&todolist); } -void -todo_free_list (void) +void todo_free_list(void) { - LLIST_FREE_INNER (&todolist, todo_free); - LLIST_FREE (&todolist); + LLIST_FREE_INNER(&todolist, todo_free); + LLIST_FREE(&todolist); } @@ -41,304 +41,295 @@ struct utf8_range { }; static const struct utf8_range utf8_widthtab[] = { - { 0x00300, 0x0036f, 0 }, - { 0x00483, 0x00489, 0 }, - { 0x00591, 0x005bd, 0 }, - { 0x005bf, 0x005bf, 0 }, - { 0x005c1, 0x005c2, 0 }, - { 0x005c4, 0x005c5, 0 }, - { 0x005c7, 0x005c7, 0 }, - { 0x00610, 0x0061a, 0 }, - { 0x0064b, 0x0065e, 0 }, - { 0x00670, 0x00670, 0 }, - { 0x006d6, 0x006dc, 0 }, - { 0x006de, 0x006e4, 0 }, - { 0x006e7, 0x006e8, 0 }, - { 0x006ea, 0x006ed, 0 }, - { 0x00711, 0x00711, 0 }, - { 0x00730, 0x0074a, 0 }, - { 0x007a6, 0x007b0, 0 }, - { 0x007eb, 0x007f3, 0 }, - { 0x00816, 0x00819, 0 }, - { 0x0081b, 0x00823, 0 }, - { 0x00825, 0x00827, 0 }, - { 0x00829, 0x0082d, 0 }, - { 0x00900, 0x00903, 0 }, - { 0x0093c, 0x0093c, 0 }, - { 0x0093e, 0x0094e, 0 }, - { 0x00951, 0x00955, 0 }, - { 0x00962, 0x00963, 0 }, - { 0x00981, 0x00983, 0 }, - { 0x009bc, 0x009bc, 0 }, - { 0x009be, 0x009c4, 0 }, - { 0x009c7, 0x009c8, 0 }, - { 0x009cb, 0x009cd, 0 }, - { 0x009d7, 0x009d7, 0 }, - { 0x009e2, 0x009e3, 0 }, - { 0x00a01, 0x00a03, 0 }, - { 0x00a3c, 0x00a3c, 0 }, - { 0x00a3e, 0x00a42, 0 }, - { 0x00a47, 0x00a48, 0 }, - { 0x00a4b, 0x00a4d, 0 }, - { 0x00a51, 0x00a51, 0 }, - { 0x00a70, 0x00a71, 0 }, - { 0x00a75, 0x00a75, 0 }, - { 0x00a81, 0x00a83, 0 }, - { 0x00abc, 0x00abc, 0 }, - { 0x00abe, 0x00ac5, 0 }, - { 0x00ac7, 0x00ac9, 0 }, - { 0x00acb, 0x00acd, 0 }, - { 0x00ae2, 0x00ae3, 0 }, - { 0x00b01, 0x00b03, 0 }, - { 0x00b3c, 0x00b3c, 0 }, - { 0x00b3e, 0x00b44, 0 }, - { 0x00b47, 0x00b48, 0 }, - { 0x00b4b, 0x00b4d, 0 }, - { 0x00b56, 0x00b57, 0 }, - { 0x00b62, 0x00b63, 0 }, - { 0x00b82, 0x00b82, 0 }, - { 0x00bbe, 0x00bc2, 0 }, - { 0x00bc6, 0x00bc8, 0 }, - { 0x00bca, 0x00bcd, 0 }, - { 0x00bd7, 0x00bd7, 0 }, - { 0x00c01, 0x00c03, 0 }, - { 0x00c3e, 0x00c44, 0 }, - { 0x00c46, 0x00c48, 0 }, - { 0x00c4a, 0x00c4d, 0 }, - { 0x00c55, 0x00c56, 0 }, - { 0x00c62, 0x00c63, 0 }, - { 0x00c82, 0x00c83, 0 }, - { 0x00cbc, 0x00cbc, 0 }, - { 0x00cbe, 0x00cc4, 0 }, - { 0x00cc6, 0x00cc8, 0 }, - { 0x00cca, 0x00ccd, 0 }, - { 0x00cd5, 0x00cd6, 0 }, - { 0x00ce2, 0x00ce3, 0 }, - { 0x00d02, 0x00d03, 0 }, - { 0x00d3e, 0x00d44, 0 }, - { 0x00d46, 0x00d48, 0 }, - { 0x00d4a, 0x00d4d, 0 }, - { 0x00d57, 0x00d57, 0 }, - { 0x00d62, 0x00d63, 0 }, - { 0x00d82, 0x00d83, 0 }, - { 0x00dca, 0x00dca, 0 }, - { 0x00dcf, 0x00dd4, 0 }, - { 0x00dd6, 0x00dd6, 0 }, - { 0x00dd8, 0x00ddf, 0 }, - { 0x00df2, 0x00df3, 0 }, - { 0x00e31, 0x00e31, 0 }, - { 0x00e34, 0x00e3a, 0 }, - { 0x00e47, 0x00e4e, 0 }, - { 0x00eb1, 0x00eb1, 0 }, - { 0x00eb4, 0x00eb9, 0 }, - { 0x00ebb, 0x00ebc, 0 }, - { 0x00ec8, 0x00ecd, 0 }, - { 0x00f18, 0x00f19, 0 }, - { 0x00f35, 0x00f35, 0 }, - { 0x00f37, 0x00f37, 0 }, - { 0x00f39, 0x00f39, 0 }, - { 0x00f3e, 0x00f3f, 0 }, - { 0x00f71, 0x00f84, 0 }, - { 0x00f86, 0x00f87, 0 }, - { 0x00f90, 0x00f97, 0 }, - { 0x00f99, 0x00fbc, 0 }, - { 0x00fc6, 0x00fc6, 0 }, - { 0x0102b, 0x0103e, 0 }, - { 0x01056, 0x01059, 0 }, - { 0x0105e, 0x01060, 0 }, - { 0x01062, 0x01064, 0 }, - { 0x01067, 0x0106d, 0 }, - { 0x01071, 0x01074, 0 }, - { 0x01082, 0x0108d, 0 }, - { 0x0108f, 0x0108f, 0 }, - { 0x0109a, 0x0109d, 0 }, - { 0x01100, 0x0115f, 2 }, - { 0x011a3, 0x011a7, 2 }, - { 0x011fa, 0x011ff, 2 }, - { 0x0135f, 0x0135f, 0 }, - { 0x01712, 0x01714, 0 }, - { 0x01732, 0x01734, 0 }, - { 0x01752, 0x01753, 0 }, - { 0x01772, 0x01773, 0 }, - { 0x017b6, 0x017d3, 0 }, - { 0x017dd, 0x017dd, 0 }, - { 0x0180b, 0x0180d, 0 }, - { 0x018a9, 0x018a9, 0 }, - { 0x01920, 0x0192b, 0 }, - { 0x01930, 0x0193b, 0 }, - { 0x019b0, 0x019c0, 0 }, - { 0x019c8, 0x019c9, 0 }, - { 0x01a17, 0x01a1b, 0 }, - { 0x01a55, 0x01a5e, 0 }, - { 0x01a60, 0x01a7c, 0 }, - { 0x01a7f, 0x01a7f, 0 }, - { 0x01b00, 0x01b04, 0 }, - { 0x01b34, 0x01b44, 0 }, - { 0x01b6b, 0x01b73, 0 }, - { 0x01b80, 0x01b82, 0 }, - { 0x01ba1, 0x01baa, 0 }, - { 0x01c24, 0x01c37, 0 }, - { 0x01cd0, 0x01cd2, 0 }, - { 0x01cd4, 0x01ce8, 0 }, - { 0x01ced, 0x01ced, 0 }, - { 0x01cf2, 0x01cf2, 0 }, - { 0x01dc0, 0x01de6, 0 }, - { 0x01dfd, 0x01dff, 0 }, - { 0x020d0, 0x020f0, 0 }, - { 0x02329, 0x0232a, 2 }, - { 0x02cef, 0x02cf1, 0 }, - { 0x02de0, 0x02dff, 0 }, - { 0x02e80, 0x02e99, 2 }, - { 0x02e9b, 0x02ef3, 2 }, - { 0x02f00, 0x02fd5, 2 }, - { 0x02ff0, 0x02ffb, 2 }, - { 0x03000, 0x03029, 2 }, - { 0x0302a, 0x0302f, 0 }, - { 0x03030, 0x0303e, 2 }, - { 0x03041, 0x03096, 2 }, - { 0x03099, 0x0309a, 0 }, - { 0x0309b, 0x030ff, 2 }, - { 0x03105, 0x0312d, 2 }, - { 0x03131, 0x0318e, 2 }, - { 0x03190, 0x031b7, 2 }, - { 0x031c0, 0x031e3, 2 }, - { 0x031f0, 0x0321e, 2 }, - { 0x03220, 0x03247, 2 }, - { 0x03250, 0x032fe, 2 }, - { 0x03300, 0x04dbf, 2 }, - { 0x04e00, 0x0a48c, 2 }, - { 0x0a490, 0x0a4c6, 2 }, - { 0x0a66f, 0x0a672, 0 }, - { 0x0a67c, 0x0a67d, 0 }, - { 0x0a6f0, 0x0a6f1, 0 }, - { 0x0a802, 0x0a802, 0 }, - { 0x0a806, 0x0a806, 0 }, - { 0x0a80b, 0x0a80b, 0 }, - { 0x0a823, 0x0a827, 0 }, - { 0x0a880, 0x0a881, 0 }, - { 0x0a8b4, 0x0a8c4, 0 }, - { 0x0a8e0, 0x0a8f1, 0 }, - { 0x0a926, 0x0a92d, 0 }, - { 0x0a947, 0x0a953, 0 }, - { 0x0a960, 0x0a97c, 2 }, - { 0x0a980, 0x0a983, 0 }, - { 0x0a9b3, 0x0a9c0, 0 }, - { 0x0aa29, 0x0aa36, 0 }, - { 0x0aa43, 0x0aa43, 0 }, - { 0x0aa4c, 0x0aa4d, 0 }, - { 0x0aa7b, 0x0aa7b, 0 }, - { 0x0aab0, 0x0aab0, 0 }, - { 0x0aab2, 0x0aab4, 0 }, - { 0x0aab7, 0x0aab8, 0 }, - { 0x0aabe, 0x0aabf, 0 }, - { 0x0aac1, 0x0aac1, 0 }, - { 0x0abe3, 0x0abea, 0 }, - { 0x0abec, 0x0abed, 0 }, - { 0x0ac00, 0x0d7a3, 2 }, - { 0x0d7b0, 0x0d7c6, 2 }, - { 0x0d7cb, 0x0d7fb, 2 }, - { 0x0f900, 0x0faff, 2 }, - { 0x0fb1e, 0x0fb1e, 0 }, - { 0x0fe00, 0x0fe0f, 0 }, - { 0x0fe10, 0x0fe19, 2 }, - { 0x0fe20, 0x0fe26, 0 }, - { 0x0fe30, 0x0fe52, 2 }, - { 0x0fe54, 0x0fe66, 2 }, - { 0x0fe68, 0x0fe6b, 2 }, - { 0x0ff01, 0x0ff60, 2 }, - { 0x0ffe0, 0x0ffe6, 2 }, - { 0x101fd, 0x101fd, 0 }, - { 0x10a01, 0x10a03, 0 }, - { 0x10a05, 0x10a06, 0 }, - { 0x10a0c, 0x10a0f, 0 }, - { 0x10a38, 0x10a3a, 0 }, - { 0x10a3f, 0x10a3f, 0 }, - { 0x11080, 0x11082, 0 }, - { 0x110b0, 0x110ba, 0 }, - { 0x1d165, 0x1d169, 0 }, - { 0x1d16d, 0x1d172, 0 }, - { 0x1d17b, 0x1d182, 0 }, - { 0x1d185, 0x1d18b, 0 }, - { 0x1d1aa, 0x1d1ad, 0 }, - { 0x1d242, 0x1d244, 0 }, - { 0x1f200, 0x1f200, 2 }, - { 0x1f210, 0x1f231, 2 }, - { 0x1f240, 0x1f248, 2 }, - { 0x20000, 0x2fffd, 2 }, - { 0x30000, 0x3fffd, 2 }, - { 0xe0100, 0xe01ef, 0 } + {0x00300, 0x0036f, 0}, + {0x00483, 0x00489, 0}, + {0x00591, 0x005bd, 0}, + {0x005bf, 0x005bf, 0}, + {0x005c1, 0x005c2, 0}, + {0x005c4, 0x005c5, 0}, + {0x005c7, 0x005c7, 0}, + {0x00610, 0x0061a, 0}, + {0x0064b, 0x0065e, 0}, + {0x00670, 0x00670, 0}, + {0x006d6, 0x006dc, 0}, + {0x006de, 0x006e4, 0}, + {0x006e7, 0x006e8, 0}, + {0x006ea, 0x006ed, 0}, + {0x00711, 0x00711, 0}, + {0x00730, 0x0074a, 0}, + {0x007a6, 0x007b0, 0}, + {0x007eb, 0x007f3, 0}, + {0x00816, 0x00819, 0}, + {0x0081b, 0x00823, 0}, + {0x00825, 0x00827, 0}, + {0x00829, 0x0082d, 0}, + {0x00900, 0x00903, 0}, + {0x0093c, 0x0093c, 0}, + {0x0093e, 0x0094e, 0}, + {0x00951, 0x00955, 0}, + {0x00962, 0x00963, 0}, + {0x00981, 0x00983, 0}, + {0x009bc, 0x009bc, 0}, + {0x009be, 0x009c4, 0}, + {0x009c7, 0x009c8, 0}, + {0x009cb, 0x009cd, 0}, + {0x009d7, 0x009d7, 0}, + {0x009e2, 0x009e3, 0}, + {0x00a01, 0x00a03, 0}, + {0x00a3c, 0x00a3c, 0}, + {0x00a3e, 0x00a42, 0}, + {0x00a47, 0x00a48, 0}, + {0x00a4b, 0x00a4d, 0}, + {0x00a51, 0x00a51, 0}, + {0x00a70, 0x00a71, 0}, + {0x00a75, 0x00a75, 0}, + {0x00a81, 0x00a83, 0}, + {0x00abc, 0x00abc, 0}, + {0x00abe, 0x00ac5, 0}, + {0x00ac7, 0x00ac9, 0}, + {0x00acb, 0x00acd, 0}, + {0x00ae2, 0x00ae3, 0}, + {0x00b01, 0x00b03, 0}, + {0x00b3c, 0x00b3c, 0}, + {0x00b3e, 0x00b44, 0}, + {0x00b47, 0x00b48, 0}, + {0x00b4b, 0x00b4d, 0}, + {0x00b56, 0x00b57, 0}, + {0x00b62, 0x00b63, 0}, + {0x00b82, 0x00b82, 0}, + {0x00bbe, 0x00bc2, 0}, + {0x00bc6, 0x00bc8, 0}, + {0x00bca, 0x00bcd, 0}, + {0x00bd7, 0x00bd7, 0}, + {0x00c01, 0x00c03, 0}, + {0x00c3e, 0x00c44, 0}, + {0x00c46, 0x00c48, 0}, + {0x00c4a, 0x00c4d, 0}, + {0x00c55, 0x00c56, 0}, + {0x00c62, 0x00c63, 0}, + {0x00c82, 0x00c83, 0}, + {0x00cbc, 0x00cbc, 0}, + {0x00cbe, 0x00cc4, 0}, + {0x00cc6, 0x00cc8, 0}, + {0x00cca, 0x00ccd, 0}, + {0x00cd5, 0x00cd6, 0}, + {0x00ce2, 0x00ce3, 0}, + {0x00d02, 0x00d03, 0}, + {0x00d3e, 0x00d44, 0}, + {0x00d46, 0x00d48, 0}, + {0x00d4a, 0x00d4d, 0}, + {0x00d57, 0x00d57, 0}, + {0x00d62, 0x00d63, 0}, + {0x00d82, 0x00d83, 0}, + {0x00dca, 0x00dca, 0}, + {0x00dcf, 0x00dd4, 0}, + {0x00dd6, 0x00dd6, 0}, + {0x00dd8, 0x00ddf, 0}, + {0x00df2, 0x00df3, 0}, + {0x00e31, 0x00e31, 0}, + {0x00e34, 0x00e3a, 0}, + {0x00e47, 0x00e4e, 0}, + {0x00eb1, 0x00eb1, 0}, + {0x00eb4, 0x00eb9, 0}, + {0x00ebb, 0x00ebc, 0}, + {0x00ec8, 0x00ecd, 0}, + {0x00f18, 0x00f19, 0}, + {0x00f35, 0x00f35, 0}, + {0x00f37, 0x00f37, 0}, + {0x00f39, 0x00f39, 0}, + {0x00f3e, 0x00f3f, 0}, + {0x00f71, 0x00f84, 0}, + {0x00f86, 0x00f87, 0}, + {0x00f90, 0x00f97, 0}, + {0x00f99, 0x00fbc, 0}, + {0x00fc6, 0x00fc6, 0}, + {0x0102b, 0x0103e, 0}, + {0x01056, 0x01059, 0}, + {0x0105e, 0x01060, 0}, + {0x01062, 0x01064, 0}, + {0x01067, 0x0106d, 0}, + {0x01071, 0x01074, 0}, + {0x01082, 0x0108d, 0}, + {0x0108f, 0x0108f, 0}, + {0x0109a, 0x0109d, 0}, + {0x01100, 0x0115f, 2}, + {0x011a3, 0x011a7, 2}, + {0x011fa, 0x011ff, 2}, + {0x0135f, 0x0135f, 0}, + {0x01712, 0x01714, 0}, + {0x01732, 0x01734, 0}, + {0x01752, 0x01753, 0}, + {0x01772, 0x01773, 0}, + {0x017b6, 0x017d3, 0}, + {0x017dd, 0x017dd, 0}, + {0x0180b, 0x0180d, 0}, + {0x018a9, 0x018a9, 0}, + {0x01920, 0x0192b, 0}, + {0x01930, 0x0193b, 0}, + {0x019b0, 0x019c0, 0}, + {0x019c8, 0x019c9, 0}, + {0x01a17, 0x01a1b, 0}, + {0x01a55, 0x01a5e, 0}, + {0x01a60, 0x01a7c, 0}, + {0x01a7f, 0x01a7f, 0}, + {0x01b00, 0x01b04, 0}, + {0x01b34, 0x01b44, 0}, + {0x01b6b, 0x01b73, 0}, + {0x01b80, 0x01b82, 0}, + {0x01ba1, 0x01baa, 0}, + {0x01c24, 0x01c37, 0}, + {0x01cd0, 0x01cd2, 0}, + {0x01cd4, 0x01ce8, 0}, + {0x01ced, 0x01ced, 0}, + {0x01cf2, 0x01cf2, 0}, + {0x01dc0, 0x01de6, 0}, + {0x01dfd, 0x01dff, 0}, + {0x020d0, 0x020f0, 0}, + {0x02329, 0x0232a, 2}, + {0x02cef, 0x02cf1, 0}, + {0x02de0, 0x02dff, 0}, + {0x02e80, 0x02e99, 2}, + {0x02e9b, 0x02ef3, 2}, + {0x02f00, 0x02fd5, 2}, + {0x02ff0, 0x02ffb, 2}, + {0x03000, 0x03029, 2}, + {0x0302a, 0x0302f, 0}, + {0x03030, 0x0303e, 2}, + {0x03041, 0x03096, 2}, + {0x03099, 0x0309a, 0}, + {0x0309b, 0x030ff, 2}, + {0x03105, 0x0312d, 2}, + {0x03131, 0x0318e, 2}, + {0x03190, 0x031b7, 2}, + {0x031c0, 0x031e3, 2}, + {0x031f0, 0x0321e, 2}, + {0x03220, 0x03247, 2}, + {0x03250, 0x032fe, 2}, + {0x03300, 0x04dbf, 2}, + {0x04e00, 0x0a48c, 2}, + {0x0a490, 0x0a4c6, 2}, + {0x0a66f, 0x0a672, 0}, + {0x0a67c, 0x0a67d, 0}, + {0x0a6f0, 0x0a6f1, 0}, + {0x0a802, 0x0a802, 0}, + {0x0a806, 0x0a806, 0}, + {0x0a80b, 0x0a80b, 0}, + {0x0a823, 0x0a827, 0}, + {0x0a880, 0x0a881, 0}, + {0x0a8b4, 0x0a8c4, 0}, + {0x0a8e0, 0x0a8f1, 0}, + {0x0a926, 0x0a92d, 0}, + {0x0a947, 0x0a953, 0}, + {0x0a960, 0x0a97c, 2}, + {0x0a980, 0x0a983, 0}, + {0x0a9b3, 0x0a9c0, 0}, + {0x0aa29, 0x0aa36, 0}, + {0x0aa43, 0x0aa43, 0}, + {0x0aa4c, 0x0aa4d, 0}, + {0x0aa7b, 0x0aa7b, 0}, + {0x0aab0, 0x0aab0, 0}, + {0x0aab2, 0x0aab4, 0}, + {0x0aab7, 0x0aab8, 0}, + {0x0aabe, 0x0aabf, 0}, + {0x0aac1, 0x0aac1, 0}, + {0x0abe3, 0x0abea, 0}, + {0x0abec, 0x0abed, 0}, + {0x0ac00, 0x0d7a3, 2}, + {0x0d7b0, 0x0d7c6, 2}, + {0x0d7cb, 0x0d7fb, 2}, + {0x0f900, 0x0faff, 2}, + {0x0fb1e, 0x0fb1e, 0}, + {0x0fe00, 0x0fe0f, 0}, + {0x0fe10, 0x0fe19, 2}, + {0x0fe20, 0x0fe26, 0}, + {0x0fe30, 0x0fe52, 2}, + {0x0fe54, 0x0fe66, 2}, + {0x0fe68, 0x0fe6b, 2}, + {0x0ff01, 0x0ff60, 2}, + {0x0ffe0, 0x0ffe6, 2}, + {0x101fd, 0x101fd, 0}, + {0x10a01, 0x10a03, 0}, + {0x10a05, 0x10a06, 0}, + {0x10a0c, 0x10a0f, 0}, + {0x10a38, 0x10a3a, 0}, + {0x10a3f, 0x10a3f, 0}, + {0x11080, 0x11082, 0}, + {0x110b0, 0x110ba, 0}, + {0x1d165, 0x1d169, 0}, + {0x1d16d, 0x1d172, 0}, + {0x1d17b, 0x1d182, 0}, + {0x1d185, 0x1d18b, 0}, + {0x1d1aa, 0x1d1ad, 0}, + {0x1d242, 0x1d244, 0}, + {0x1f200, 0x1f200, 2}, + {0x1f210, 0x1f231, 2}, + {0x1f240, 0x1f248, 2}, + {0x20000, 0x2fffd, 2}, + {0x30000, 0x3fffd, 2}, + {0xe0100, 0xe01ef, 0} }; /* Get the width of a UTF-8 character. */ -int -utf8_width (char *s) +int utf8_width(char *s) { int val, low, high, cur; - if (UTF8_ISCONT (*s)) + if (UTF8_ISCONT(*s)) return 0; - switch (UTF8_LENGTH (*s)) - { - case 1: - val = s[0]; - break; - case 2: - val = (s[1] & 0x3f) | (s[0] & 0x1f) << 6; - break; - case 3: - val = ((s[2] & 0x3f) | (s[1] & 0x3f) << 6) | - (s[0] & 0x0f) << 12; - break; - case 4: - val = (((s[3] & 0x3f) | (s[2] & 0x3f) << 6) | - (s[1] & 0x3f) << 12) | (s[0] & 0x3f) << 18; - break; - case 5: - val = ((((s[4] & 0x3f) | (s[3] & 0x3f) << 6) | - (s[2] & 0x3f) << 12) | (s[1] & 0x3f) << 18) | - (s[0] & 0x3f) << 24; - break; - case 6: - val = (((((s[5] & 0x3f) | (s[4] & 0x3f) << 6) | - (s[3] & 0x3f) << 12) | (s[2] & 0x3f) << 18) | - (s[1] & 0x3f) << 24) | (s[0] & 0x3f) << 30; - break; - default: - return 0; - } + switch (UTF8_LENGTH(*s)) { + case 1: + val = s[0]; + break; + case 2: + val = (s[1] & 0x3f) | (s[0] & 0x1f) << 6; + break; + case 3: + val = ((s[2] & 0x3f) | (s[1] & 0x3f) << 6) | (s[0] & 0x0f) << 12; + break; + case 4: + val = (((s[3] & 0x3f) | (s[2] & 0x3f) << 6) | + (s[1] & 0x3f) << 12) | (s[0] & 0x3f) << 18; + break; + case 5: + val = ((((s[4] & 0x3f) | (s[3] & 0x3f) << 6) | + (s[2] & 0x3f) << 12) | (s[1] & 0x3f) << 18) | (s[0] & 0x3f) << 24; + break; + case 6: + val = (((((s[5] & 0x3f) | (s[4] & 0x3f) << 6) | + (s[3] & 0x3f) << 12) | (s[2] & 0x3f) << 18) | + (s[1] & 0x3f) << 24) | (s[0] & 0x3f) << 30; + break; + default: + return 0; + } low = 0; high = sizeof(utf8_widthtab) / sizeof(utf8_widthtab[0]); - do - { - cur = (low + high) / 2; - if (val >= utf8_widthtab[cur].min) - { - if (val <= utf8_widthtab[cur].max) - return utf8_widthtab[cur].width; - else - low = cur + 1; - } + do { + cur = (low + high) / 2; + if (val >= utf8_widthtab[cur].min) { + if (val <= utf8_widthtab[cur].max) + return utf8_widthtab[cur].width; else - high = cur - 1; - } + low = cur + 1; + } else + high = cur - 1; + } while (low <= high); return 1; } /* Get the width of a UTF-8 string. */ -int -utf8_strwidth (char *s) +int utf8_strwidth(char *s) { int width = 0; - for (; s && *s; s++) - { - if (!UTF8_ISCONT (*s)) - width += utf8_width (s); - } + for (; s && *s; s++) { + if (!UTF8_ISCONT(*s)) + width += utf8_width(s); + } return width; } diff --git a/src/utils.c b/src/utils.c index a77bbb6..5a38491 100644 --- a/src/utils.c +++ b/src/utils.c @@ -66,59 +66,52 @@ enum format_specifier { }; /* General routine to exit calcurse properly. */ -void -exit_calcurse (int status) +void exit_calcurse(int status) { int was_interactive; - if (ui_mode == UI_CURSES) - { - notify_stop_main_thread (); - clear (); - wins_refresh (); - endwin (); - ui_mode = UI_CMDLINE; - was_interactive = 1; - } - else + if (ui_mode == UI_CURSES) { + notify_stop_main_thread(); + clear(); + wins_refresh(); + endwin(); + ui_mode = UI_CMDLINE; + was_interactive = 1; + } else was_interactive = 0; - calendar_stop_date_thread (); - io_stop_psave_thread (); - free_user_data (); - keys_free (); - mem_stats (); - if (was_interactive) - { - if (unlink (path_cpid) != 0) - EXIT (_("Could not remove calcurse lock file: %s\n"), - strerror (errno)); - if (dmon.enable) - dmon_start (status); - } - - exit (status); + calendar_stop_date_thread(); + io_stop_psave_thread(); + free_user_data(); + keys_free(); + mem_stats(); + if (was_interactive) { + if (unlink(path_cpid) != 0) + EXIT(_("Could not remove calcurse lock file: %s\n"), strerror(errno)); + if (dmon.enable) + dmon_start(status); + } + + exit(status); } -void -free_user_data (void) +void free_user_data(void) { - day_free_list (); - event_llist_free (); - event_free_bkp (); - apoint_llist_free (); - apoint_free_bkp (); - recur_apoint_llist_free (); - recur_event_llist_free (); - recur_apoint_free_bkp (); - recur_event_free_bkp (); - todo_free_list (); - notify_free_app (); + day_free_list(); + event_llist_free(); + event_free_bkp(); + apoint_llist_free(); + apoint_free_bkp(); + recur_apoint_llist_free(); + recur_event_llist_free(); + recur_apoint_free_bkp(); + recur_event_free_bkp(); + todo_free_list(); + notify_free_app(); } /* Function to exit on internal error. */ -void -fatalbox (const char *errmsg) +void fatalbox(const char *errmsg) { WINDOW *errwin; const char *label = _("/!\\ INTERNAL ERROR /!\\"); @@ -131,22 +124,21 @@ fatalbox (const char *errmsg) if (errmsg == NULL) return; - strncpy (msg, errmsg, MSGLEN); - errwin = newwin (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); - custom_apply_attr (errwin, ATTR_HIGHEST); - box (errwin, 0, 0); - wins_show (errwin, label); - mvwprintw (errwin, 3, 1, reportmsg); - mvwprintw (errwin, 5, (WINCOL - strlen (msg)) / 2, "%s", msg); - custom_remove_attr (errwin, ATTR_HIGHEST); - wins_wrefresh (errwin); - wgetch (errwin); - delwin (errwin); - wins_doupdate (); + strncpy(msg, errmsg, MSGLEN); + errwin = newwin(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); + custom_apply_attr(errwin, ATTR_HIGHEST); + box(errwin, 0, 0); + wins_show(errwin, label); + mvwprintw(errwin, 3, 1, reportmsg); + mvwprintw(errwin, 5, (WINCOL - strlen(msg)) / 2, "%s", msg); + custom_remove_attr(errwin, ATTR_HIGHEST); + wins_wrefresh(errwin); + wgetch(errwin); + delwin(errwin); + wins_doupdate(); } -void -warnbox (const char *msg) +void warnbox(const char *msg) { WINDOW *warnwin; const char *label = "/!\\"; @@ -158,31 +150,30 @@ warnbox (const char *msg) if (msg == NULL) return; - strncpy (displmsg, msg, MSGLEN); - warnwin = newwin (WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); - custom_apply_attr (warnwin, ATTR_HIGHEST); - box (warnwin, 0, 0); - wins_show (warnwin, label); - mvwprintw (warnwin, 5, (WINCOL - strlen (displmsg)) / 2, "%s", displmsg); - custom_remove_attr (warnwin, ATTR_HIGHEST); - wins_wrefresh (warnwin); - wgetch (warnwin); - delwin (warnwin); - wins_doupdate (); + strncpy(displmsg, msg, MSGLEN); + warnwin = newwin(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); + custom_apply_attr(warnwin, ATTR_HIGHEST); + box(warnwin, 0, 0); + wins_show(warnwin, label); + mvwprintw(warnwin, 5, (WINCOL - strlen(displmsg)) / 2, "%s", displmsg); + custom_remove_attr(warnwin, ATTR_HIGHEST); + wins_wrefresh(warnwin); + wgetch(warnwin); + delwin(warnwin); + wins_doupdate(); } /* * Print a message in the status bar. * Message texts for first line and second line are to be provided. */ -void -status_mesg (const char *msg1, const char *msg2) +void status_mesg(const char *msg1, const char *msg2) { - wins_erase_status_bar (); - custom_apply_attr (win[STA].p, ATTR_HIGHEST); - mvwprintw (win[STA].p, 0, 0, msg1); - mvwprintw (win[STA].p, 1, 0, msg2); - custom_remove_attr (win[STA].p, ATTR_HIGHEST); + wins_erase_status_bar(); + custom_apply_attr(win[STA].p, ATTR_HIGHEST); + mvwprintw(win[STA].p, 0, 0, msg1); + mvwprintw(win[STA].p, 1, 0, msg2); + custom_remove_attr(win[STA].p, ATTR_HIGHEST); } /* @@ -196,8 +187,7 @@ status_mesg (const char *msg1, const char *msg2) * Returns the index of the key pressed by the user (starting from 1), * or -1 if the user doesn't want to answer (e.g. by escaping). */ -int -status_ask_choice(const char *message, const char choice[], int nb_choice) +int status_ask_choice(const char *message, const char choice[], int nb_choice) { int i, ch; char tmp[BUFSIZ]; @@ -207,29 +197,26 @@ status_ask_choice(const char *message, const char choice[], int nb_choice) avail_choice[0] = '['; avail_choice[1] = '\0'; - for (i = 1; i <= nb_choice; i++) - { - snprintf (tmp, BUFSIZ, (i == nb_choice) ? "%c] " : "%c/", choice[i]); - strcat (avail_choice, tmp); - } - - status_mesg (message, avail_choice); - - for (;;) - { - ch = wgetch (win[STA].p); - for (i = 1; i <= nb_choice; i++) - if (ch == choice[i]) - return i; - if (ch == ESCAPE) - return (-1); - if (resize) - { - resize = 0; - wins_reset (); - status_mesg (message, avail_choice); - } + for (i = 1; i <= nb_choice; i++) { + snprintf(tmp, BUFSIZ, (i == nb_choice) ? "%c] " : "%c/", choice[i]); + strcat(avail_choice, tmp); + } + + status_mesg(message, avail_choice); + + for (;;) { + ch = wgetch(win[STA].p); + for (i = 1; i <= nb_choice; i++) + if (ch == choice[i]) + return i; + if (ch == ESCAPE) + return (-1); + if (resize) { + resize = 0; + wins_reset(); + status_mesg(message, avail_choice); } + } } /* @@ -237,10 +224,9 @@ status_ask_choice(const char *message, const char choice[], int nb_choice) * * Returns 1 if yes, 2 if no, and -1 otherwise */ -int -status_ask_bool (const char *msg) +int status_ask_bool(const char *msg) { - return (status_ask_choice (msg, _("[yn]"), 2)); + return (status_ask_choice(msg, _("[yn]"), 2)); } /* @@ -250,8 +236,7 @@ status_ask_bool (const char *msg) * the user doesn't want to answer. */ int -status_ask_simplechoice (const char *prefix, const char *choice[], - int nb_choice) +status_ask_simplechoice(const char *prefix, const char *choice[], int nb_choice) { int i; char tmp[BUFSIZ]; @@ -264,118 +249,109 @@ status_ask_simplechoice (const char *prefix, const char *choice[], for (i = 1; i <= nb_choice; i++) char_choice[i] = '0' + i; - strcpy (choicestr, prefix); + strcpy(choicestr, prefix); - for (i = 0; i < nb_choice; i++) - { - snprintf (tmp, BUFSIZ, ((i + 1) == nb_choice) ? "(%d) %s?" : "(%d) %s, ", - (i + 1), _(choice[i])); - strcat (choicestr, tmp); - } + for (i = 0; i < nb_choice; i++) { + snprintf(tmp, BUFSIZ, ((i + 1) == nb_choice) ? "(%d) %s?" : "(%d) %s, ", + (i + 1), _(choice[i])); + strcat(choicestr, tmp); + } - return (status_ask_choice (choicestr, char_choice, nb_choice)); + return (status_ask_choice(choicestr, char_choice, nb_choice)); } /* Erase part of a window. */ void -erase_window_part (WINDOW *win, int first_col, int first_row, int last_col, - int last_row) +erase_window_part(WINDOW * win, int first_col, int first_row, int last_col, + int last_row) { int c, r; - for (r = first_row; r <= last_row; r++) - { - for (c = first_col; c <= last_col; c++) - mvwprintw (win, r, c, " "); - } + for (r = first_row; r <= last_row; r++) { + for (c = first_col; c <= last_col; c++) + mvwprintw(win, r, c, " "); + } } /* draws a popup window */ -WINDOW * -popup (int pop_row, int pop_col, int pop_y, int pop_x, const char *title, - const char *msg, int hint) +WINDOW *popup(int pop_row, int pop_col, int pop_y, int pop_x, const char *title, + const char *msg, int hint) { const char *any_key = _("Press any key to continue..."); char label[BUFSIZ]; WINDOW *popup_win; const int MSGXPOS = 5; - popup_win = newwin (pop_row, pop_col, pop_y, pop_x); - keypad (popup_win, TRUE); + popup_win = newwin(pop_row, pop_col, pop_y, pop_x); + keypad(popup_win, TRUE); if (msg) - mvwprintw (popup_win, MSGXPOS, (pop_col - strlen (msg)) / 2, "%s", msg); - custom_apply_attr (popup_win, ATTR_HIGHEST); - box (popup_win, 0, 0); - snprintf (label, BUFSIZ, "%s", title); - wins_show (popup_win, label); + mvwprintw(popup_win, MSGXPOS, (pop_col - strlen(msg)) / 2, "%s", msg); + custom_apply_attr(popup_win, ATTR_HIGHEST); + box(popup_win, 0, 0); + snprintf(label, BUFSIZ, "%s", title); + wins_show(popup_win, label); if (hint) - mvwprintw (popup_win, pop_row - 2, pop_col - (strlen (any_key) + 1), "%s", - any_key); - custom_remove_attr (popup_win, ATTR_HIGHEST); - wins_wrefresh (popup_win); + mvwprintw(popup_win, pop_row - 2, pop_col - (strlen(any_key) + 1), "%s", + any_key); + custom_remove_attr(popup_win, ATTR_HIGHEST); + wins_wrefresh(popup_win); return popup_win; } /* prints in middle of a panel */ void -print_in_middle (WINDOW *win, int starty, int startx, int width, - const char *string) +print_in_middle(WINDOW * win, int starty, int startx, int width, + const char *string) { - int len = strlen (string); + int len = strlen(string); int x, y; win = win ? win : stdscr; - getyx (win, y, x); + getyx(win, y, x); x = startx ? startx : x; y = starty ? starty : y; width = width ? width : 80; x += (width - len) / 2; - custom_apply_attr (win, ATTR_HIGHEST); - mvwprintw (win, y, x, "%s", string); - custom_remove_attr (win, ATTR_HIGHEST); + custom_apply_attr(win, ATTR_HIGHEST); + mvwprintw(win, y, x, "%s", string); + custom_remove_attr(win, ATTR_HIGHEST); } /* checks if a string is only made of digits */ -int -is_all_digit (const char *string) +int is_all_digit(const char *string) { - for (; *string; string++) - { - if (!isdigit ((int)*string)) - return 0; - } + for (; *string; string++) { + if (!isdigit((int)*string)) + return 0; + } return 1; } /* Given an item date expressed in seconds, return its start time in seconds. */ -long -get_item_time (long date) +long get_item_time(long date) { return (long)(get_item_hour(date) * HOURINSEC + get_item_min(date) * MININSEC); } -int -get_item_hour (long date) +int get_item_hour(long date) { - return (localtime ((time_t *)&date))->tm_hour; + return (localtime((time_t *) & date))->tm_hour; } -int -get_item_min (long date) +int get_item_min(long date) { - return (localtime ((time_t *)&date))->tm_min; + return (localtime((time_t *) & date))->tm_min; } -long -date2sec (struct date day, unsigned hour, unsigned min) +long date2sec(struct date day, unsigned hour, unsigned min) { - time_t t = now (); - struct tm start = *(localtime (&t)); + time_t t = now(); + struct tm start = *(localtime(&t)); start.tm_mon = day.mm - 1; start.tm_mday = day.dd; @@ -385,54 +361,50 @@ date2sec (struct date day, unsigned hour, unsigned min) start.tm_sec = 0; start.tm_isdst = -1; - t = mktime (&start); - EXIT_IF (t == -1, _("failure in mktime")); + t = mktime(&start); + EXIT_IF(t == -1, _("failure in mktime")); return t; } /* Return a string containing the date, given a date in seconds. */ -char * -date_sec2date_str (long sec, const char *datefmt) +char *date_sec2date_str(long sec, const char *datefmt) { struct tm *lt; - char *datestr = (char *) mem_calloc (BUFSIZ, sizeof (char)); + char *datestr = (char *)mem_calloc(BUFSIZ, sizeof(char)); if (sec == 0) - strncpy (datestr, "0", BUFSIZ); - else - { - lt = localtime ((time_t *)&sec); - strftime (datestr, BUFSIZ, datefmt, lt); - } + strncpy(datestr, "0", BUFSIZ); + else { + lt = localtime((time_t *) & sec); + strftime(datestr, BUFSIZ, datefmt, lt); + } return datestr; } /* Generic function to format date. */ -void -date_sec2date_fmt (long sec, const char *fmt, char *datef) +void date_sec2date_fmt(long sec, const char *fmt, char *datef) { - struct tm *lt = localtime ((time_t *)&sec); - strftime (datef, BUFSIZ, fmt, lt); + struct tm *lt = localtime((time_t *) & sec); + strftime(datef, BUFSIZ, fmt, lt); } /* * Used to change date by adding a certain amount of days or weeks. */ -long -date_sec_change (long date, int delta_month, int delta_day) +long date_sec_change(long date, int delta_month, int delta_day) { struct tm *lt; time_t t; t = date; - lt = localtime (&t); + lt = localtime(&t); lt->tm_mon += delta_month; lt->tm_mday += delta_day; lt->tm_isdst = -1; - t = mktime (lt); - EXIT_IF (t == -1, _("failure in mktime")); + t = mktime(lt); + EXIT_IF(t == -1, _("failure in mktime")); return t; } @@ -441,18 +413,17 @@ date_sec_change (long date, int delta_month, int delta_day) * Return a long containing the date which is updated taking into account * the new time and date entered by the user. */ -long -update_time_in_date (long date, unsigned hr, unsigned mn) +long update_time_in_date(long date, unsigned hr, unsigned mn) { struct tm *lt; time_t t, new_date; t = date; - lt = localtime (&t); + lt = localtime(&t); lt->tm_hour = hr; lt->tm_min = mn; - new_date = mktime (lt); - EXIT_IF (new_date == -1, _("error in mktime")); + new_date = mktime(lt); + EXIT_IF(new_date == -1, _("error in mktime")); return new_date; } @@ -461,8 +432,7 @@ update_time_in_date (long date, unsigned hr, unsigned mn) * Returns the date in seconds from year 1900. * If no date is entered, current date is chosen. */ -long -get_sec_date (struct date date) +long get_sec_date(struct date date) { struct tm *ptrtime; time_t timer; @@ -471,23 +441,21 @@ get_sec_date (struct date date) char current_month[] = "mm "; char current_year[] = "yyyy "; - if (date.yyyy == 0 && date.mm == 0 && date.dd == 0) - { - timer = time (NULL); - ptrtime = localtime (&timer); - strftime (current_day, strlen (current_day), "%d", ptrtime); - strftime (current_month, strlen (current_month), "%m", ptrtime); - strftime (current_year, strlen (current_year), "%Y", ptrtime); - date.mm = atoi (current_month); - date.dd = atoi (current_day); - date.yyyy = atoi (current_year); - } - long_date = date2sec (date, 0, 0); + if (date.yyyy == 0 && date.mm == 0 && date.dd == 0) { + timer = time(NULL); + ptrtime = localtime(&timer); + strftime(current_day, strlen(current_day), "%d", ptrtime); + strftime(current_month, strlen(current_month), "%m", ptrtime); + strftime(current_year, strlen(current_year), "%Y", ptrtime); + date.mm = atoi(current_month); + date.dd = atoi(current_day); + date.yyyy = atoi(current_year); + } + long_date = date2sec(date, 0, 0); return long_date; } -long -min2sec (unsigned minutes) +long min2sec(unsigned minutes) { return minutes * MININSEC; } @@ -497,17 +465,17 @@ min2sec (unsigned minutes) * can not be displayed inside the corresponding panel. */ void -draw_scrollbar (WINDOW *win, int y, int x, int length, - int bar_top, int bar_bottom, unsigned hilt) +draw_scrollbar(WINDOW * win, int y, int x, int length, + int bar_top, int bar_bottom, unsigned hilt) { - mvwvline (win, bar_top, x, ACS_VLINE, bar_bottom - bar_top); + mvwvline(win, bar_top, x, ACS_VLINE, bar_bottom - bar_top); if (hilt) - custom_apply_attr (win, ATTR_HIGHEST); - wattron (win, A_REVERSE); - mvwvline (win, y, x, ' ', length); - wattroff (win, A_REVERSE); + custom_apply_attr(win, ATTR_HIGHEST); + wattron(win, A_REVERSE); + mvwvline(win, y, x, ' ', length); + wattroff(win, A_REVERSE); if (hilt) - custom_remove_attr (win, ATTR_HIGHEST); + custom_remove_attr(win, ATTR_HIGHEST); } /* @@ -516,119 +484,108 @@ draw_scrollbar (WINDOW *win, int y, int x, int length, * long to fit in its corresponding panel window. */ void -item_in_popup (const char *saved_a_start, const char *saved_a_end, - const char *msg, const char *pop_title) +item_in_popup(const char *saved_a_start, const char *saved_a_end, + const char *msg, const char *pop_title) { WINDOW *popup_win, *pad; const int margin_left = 4, margin_top = 4; const int winl = row - 5, winw = col - margin_left; const int padl = winl - 2, padw = winw - margin_left; - pad = newpad (padl, padw); - popup_win = popup (winl, winw, 1, 2, pop_title, NULL, 1); - if (strcmp (pop_title, _("Appointment")) == 0) - { - mvwprintw (popup_win, margin_top, margin_left, "- %s -> %s", - saved_a_start, saved_a_end); - } - mvwprintw (pad, 0, margin_left, "%s", msg); - wmove (win[STA].p, 0, 0); - pnoutrefresh (pad, 0, 0, margin_top + 2, margin_left, padl, winw); - wins_doupdate (); - wgetch (popup_win); - delwin (pad); - delwin (popup_win); + pad = newpad(padl, padw); + popup_win = popup(winl, winw, 1, 2, pop_title, NULL, 1); + if (strcmp(pop_title, _("Appointment")) == 0) { + mvwprintw(popup_win, margin_top, margin_left, "- %s -> %s", + saved_a_start, saved_a_end); + } + mvwprintw(pad, 0, margin_left, "%s", msg); + wmove(win[STA].p, 0, 0); + pnoutrefresh(pad, 0, 0, margin_top + 2, margin_left, padl, winw); + wins_doupdate(); + wgetch(popup_win); + delwin(pad); + delwin(popup_win); } /* Returns the beginning of current day in seconds from 1900. */ -long -get_today (void) +long get_today(void) { struct tm *lt; time_t current_time; long current_day; struct date day; - current_time = time (NULL); - lt = localtime (¤t_time); + current_time = time(NULL); + lt = localtime(¤t_time); day.mm = lt->tm_mon + 1; day.dd = lt->tm_mday; day.yyyy = lt->tm_year + 1900; - current_day = date2sec (day, 0, 0); + current_day = date2sec(day, 0, 0); return current_day; } /* Returns the current time in seconds. */ -long -now (void) +long now(void) { - return (long)time (NULL); + return (long)time(NULL); } -char * -nowstr (void) +char *nowstr(void) { static char buf[BUFSIZ]; - time_t t = now (); + time_t t = now(); - strftime (buf, sizeof buf, "%a %b %d %T %Y", localtime (&t)); + strftime(buf, sizeof buf, "%a %b %d %T %Y", localtime(&t)); return buf; } -long -mystrtol (const char *str) +long mystrtol(const char *str) { char *ep; long lval; errno = 0; - lval = strtol (str, &ep, 10); + lval = strtol(str, &ep, 10); if (str[0] == '\0' || *ep != '\0') - EXIT (_("could not convert string")); + EXIT(_("could not convert string")); if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - EXIT (_("out of range")); + EXIT(_("out of range")); return lval; } /* Print the given option value with appropriate color. */ void -print_bool_option_incolor (WINDOW *win, unsigned option, int pos_y, int pos_x) +print_bool_option_incolor(WINDOW * win, unsigned option, int pos_y, int pos_x) { int color = 0; const char *option_value; - if (option == 1) - { - color = ATTR_TRUE; - option_value = _("yes"); - } - else if (option == 0) - { - color = ATTR_FALSE; - option_value = _("no"); - } - else - EXIT (_("option not defined")); - - custom_apply_attr (win, color); - mvwprintw (win, pos_y, pos_x, "%s", option_value); - custom_remove_attr (win, color); - wnoutrefresh (win); - wins_doupdate (); + if (option == 1) { + color = ATTR_TRUE; + option_value = _("yes"); + } else if (option == 0) { + color = ATTR_FALSE; + option_value = _("no"); + } else + EXIT(_("option not defined")); + + custom_apply_attr(win, color); + mvwprintw(win, pos_y, pos_x, "%s", option_value); + custom_remove_attr(win, color); + wnoutrefresh(win); + wins_doupdate(); } - /* * Get the name of the default directory for temporary files. */ -const char * -get_tempdir (void) +const char *get_tempdir(void) { - if (getenv ("TMPDIR")) - return getenv ("TMPDIR"); + if (getenv("TMPDIR")) + return getenv("TMPDIR"); #ifdef P_tmpdir else if (P_tmpdir) return P_tmpdir; @@ -641,8 +598,7 @@ get_tempdir (void) * Create a new unique file, and return a newly allocated string which contains * the random part of the file name. */ -char * -new_tempfile (const char *prefix, int trailing_len) +char *new_tempfile(const char *prefix, int trailing_len) { char fullname[BUFSIZ]; int prefix_len, fd; @@ -651,25 +607,23 @@ new_tempfile (const char *prefix, int trailing_len) if (prefix == NULL) return NULL; - prefix_len = strlen (prefix); + prefix_len = strlen(prefix); if (prefix_len + trailing_len >= BUFSIZ) return NULL; - memcpy (fullname, prefix, prefix_len); - memset (fullname + prefix_len, 'X', trailing_len); + memcpy(fullname, prefix, prefix_len); + memset(fullname + prefix_len, 'X', trailing_len); fullname[prefix_len + trailing_len] = '\0'; - if ((fd = mkstemp (fullname)) == -1 || (file = fdopen (fd, "w+")) == NULL) - { - if (fd != -1) - { - unlink (fullname); - close (fd); - } - ERROR_MSG (_("temporary file \"%s\" could not be created"), fullname); - return NULL; + if ((fd = mkstemp(fullname)) == -1 || (file = fdopen(fd, "w+")) == NULL) { + if (fd != -1) { + unlink(fullname); + close(fd); } - fclose (file); + ERROR_MSG(_("temporary file \"%s\" could not be created"), fullname); + return NULL; + } + fclose(file); - return mem_strdup (fullname + prefix_len); + return mem_strdup(fullname + prefix_len); } /* @@ -685,75 +639,68 @@ new_tempfile (const char *prefix, int trailing_len) * Returns 1 if sucessfully converted or 0 if the string is an invalid date. */ int -parse_date (const char *date_string, enum datefmt datefmt, int *year, - int *month, int *day, struct date *slctd_date) +parse_date(const char *date_string, enum datefmt datefmt, int *year, + int *month, int *day, struct date *slctd_date) { const char sep = (datefmt == DATEFMT_ISO) ? '-' : '/'; const char *p; - int in[3] = {0, 0, 0}, n = 0; + int in[3] = { 0, 0, 0 }, n = 0; int d, m, y; if (!date_string) return 0; /* parse string into in[], read up to three integers */ - for (p = date_string; *p; p++) - { - if (*p == sep) - { - if ((++n) > 2) - return 0; - } - else if ((*p >= '0') && (*p <= '9')) - in[n] = in[n] * 10 + (int)(*p - '0'); - else + for (p = date_string; *p; p++) { + if (*p == sep) { + if ((++n) > 2) return 0; - } + } else if ((*p >= '0') && (*p <= '9')) + in[n] = in[n] * 10 + (int)(*p - '0'); + else + return 0; + } if ((!slctd_date && n < 2) || in[n] == 0) return 0; /* convert into day, month and year, depending on the date format */ - switch (datefmt) - { - case DATEFMT_MMDDYYYY: - m = (n >= 1) ? in[0] : 0; - d = (n >= 1) ? in[1] : in[0]; - y = in[2]; - break; - case DATEFMT_DDMMYYYY: - d = in[0]; - m = in[1]; - y = in[2]; - break; - case DATEFMT_YYYYMMDD: - case DATEFMT_ISO: - y = (n >= 2) ? in[n - 2] : 0; - m = (n >= 1) ? in[n - 1] : 0; - d = in[n]; - break; - default: - return 0; - } - - if (slctd_date) - { - if (y > 0 && y < 100) - { - /* convert "YY" format into "YYYY" */ - y += slctd_date->yyyy - slctd_date->yyyy % 100; - } - else if (n < 2) - { - /* set year and, optionally, month if short from is used */ - y = slctd_date->yyyy; - if (n < 1) m = slctd_date->mm; - } + switch (datefmt) { + case DATEFMT_MMDDYYYY: + m = (n >= 1) ? in[0] : 0; + d = (n >= 1) ? in[1] : in[0]; + y = in[2]; + break; + case DATEFMT_DDMMYYYY: + d = in[0]; + m = in[1]; + y = in[2]; + break; + case DATEFMT_YYYYMMDD: + case DATEFMT_ISO: + y = (n >= 2) ? in[n - 2] : 0; + m = (n >= 1) ? in[n - 1] : 0; + d = in[n]; + break; + default: + return 0; + } + + if (slctd_date) { + if (y > 0 && y < 100) { + /* convert "YY" format into "YYYY" */ + y += slctd_date->yyyy - slctd_date->yyyy % 100; + } else if (n < 2) { + /* set year and, optionally, month if short from is used */ + y = slctd_date->yyyy; + if (n < 1) + m = slctd_date->mm; } + } /* check if date is valid, take leap years into account */ if (y < 1902 || y > 2037 || m < 1 || m > 12 || d < 1 || - d > days[m - 1] + (m == 2 && ISLEAP (y)) ? 1 : 0) + d > days[m - 1] + (m == 2 && ISLEAP(y)) ? 1 : 0) return 0; if (year) @@ -772,28 +719,24 @@ parse_date (const char *date_string, enum datefmt datefmt, int *year, * * Returns 1 on success and 0 on failure. */ -int -parse_time (const char *string, unsigned *hour, unsigned *minute) +int parse_time(const char *string, unsigned *hour, unsigned *minute) { const char *p; - unsigned in[2] = {0, 0}, n = 0; + unsigned in[2] = { 0, 0 }, n = 0; if (!string) return 0; /* parse string into in[], read up to two integers */ - for (p = string; *p; p++) - { - if (*p == ':') - { - if ((++n) > 1) - return 0; - } - else if ((*p >= '0') && (*p <= '9')) - in[n] = in[n] * 10 + (int)(*p - '0'); - else + for (p = string; *p; p++) { + if (*p == ':') { + if ((++n) > 1) return 0; - } + } else if ((*p >= '0') && (*p <= '9')) + in[n] = in[n] * 10 + (int)(*p - '0'); + else + return 0; + } if (n != 1 || in[0] >= DAYINHOURS || in[1] >= HOURINMIN) return 0; @@ -816,8 +759,7 @@ parse_time (const char *string, unsigned *hour, unsigned *minute) * * Returns 1 on success and 0 on failure. */ -int -parse_duration (const char *string, unsigned *duration) +int parse_duration(const char *string, unsigned *duration) { enum { STATE_INITIAL, @@ -835,75 +777,56 @@ parse_duration (const char *string, unsigned *duration) return 0; /* parse string using a simple state machine */ - for (p = string; *p; p++) - { - if ((*p >= '0') && (*p <= '9')) - { - if (state == STATE_DONE) - return 0; - else - in = in * 10 + (int)(*p - '0'); - } + for (p = string; *p; p++) { + if ((*p >= '0') && (*p <= '9')) { + if (state == STATE_DONE) + return 0; else - { - switch (state) - { - case STATE_INITIAL: - if (*p == ':') - { - dur += in * HOURINMIN; - state = STATE_HHMM_MM; - } - else if (*p == 'd') - { - dur += in * DAYINMIN; - state = STATE_DDHHMM_HH; - } - else if (*p == 'h') - { - dur += in * HOURINMIN; - state = STATE_DDHHMM_MM; - } - else if (*p == 'm') - { - dur += in; - state = STATE_DONE; - } - else - return 0; - break; - case STATE_DDHHMM_HH: - if (*p == 'h') - { - dur += in * HOURINMIN; - state = STATE_DDHHMM_MM; - } - else if (*p == 'm') - { - dur += in; - state = STATE_DONE; - } - else - return 0; - break; - case STATE_DDHHMM_MM: - if (*p == 'm') - { - dur += in; - state = STATE_DONE; - } - else - return 0; - break; - case STATE_HHMM_MM: - case STATE_DONE: - return 0; - break; - } - - in = 0; - } + in = in * 10 + (int)(*p - '0'); + } else { + switch (state) { + case STATE_INITIAL: + if (*p == ':') { + dur += in * HOURINMIN; + state = STATE_HHMM_MM; + } else if (*p == 'd') { + dur += in * DAYINMIN; + state = STATE_DDHHMM_HH; + } else if (*p == 'h') { + dur += in * HOURINMIN; + state = STATE_DDHHMM_MM; + } else if (*p == 'm') { + dur += in; + state = STATE_DONE; + } else + return 0; + break; + case STATE_DDHHMM_HH: + if (*p == 'h') { + dur += in * HOURINMIN; + state = STATE_DDHHMM_MM; + } else if (*p == 'm') { + dur += in; + state = STATE_DONE; + } else + return 0; + break; + case STATE_DDHHMM_MM: + if (*p == 'm') { + dur += in; + state = STATE_DONE; + } else + return 0; + break; + case STATE_HHMM_MM: + case STATE_DONE: + return 0; + break; + } + + in = 0; } + } if ((state == STATE_HHMM_MM && in >= HOURINMIN) || ((state == STATE_DDHHMM_HH || state == STATE_DDHHMM_MM) && in > 0)) @@ -915,19 +838,17 @@ parse_duration (const char *string, unsigned *duration) return 1; } -void -str_toupper (char *s) +void str_toupper(char *s) { if (!s) return; for (; *s; s++) - *s = toupper (*s); + *s = toupper(*s); } -void -file_close (FILE *f, const char *pos) +void file_close(FILE * f, const char *pos) { - EXIT_IF ((fclose (f)) != 0, _("Error when closing file at %s"), pos); + EXIT_IF((fclose(f)) != 0, _("Error when closing file at %s"), pos); } /* @@ -935,13 +856,11 @@ file_close (FILE *f, const char *pos) * (hence the 'p') in a way that even if a signal is caught during the sleep * process, this function will return to sleep afterwards. */ -void -psleep (unsigned secs) +void psleep(unsigned secs) { unsigned unslept; - for (unslept = sleep (secs); unslept; unslept = sleep (unslept)) - ; + for (unslept = sleep(secs); unslept; unslept = sleep(unslept)) ; } /* @@ -950,149 +869,132 @@ psleep (unsigned secs) * If pfdin and/or pfdout point to a valid address, a pipe is created and the * appropriate file descriptors are written to pfdin/pfdout. */ -int -fork_exec (int *pfdin, int *pfdout, const char *path, const char *const *arg) +int fork_exec(int *pfdin, int *pfdout, const char *path, const char *const *arg) { int pin[2], pout[2]; int pid; - if (pfdin && (pipe (pin) == -1)) + if (pfdin && (pipe(pin) == -1)) return 0; - if (pfdout && (pipe (pout) == -1)) + if (pfdout && (pipe(pout) == -1)) return 0; - if ((pid = fork ()) == 0) - { - if (pfdout) - { - if (dup2 (pout[0], STDIN_FILENO) < 0) - _exit (127); - close (pout[0]); - close (pout[1]); - } + if ((pid = fork()) == 0) { + if (pfdout) { + if (dup2(pout[0], STDIN_FILENO) < 0) + _exit(127); + close(pout[0]); + close(pout[1]); + } - if (pfdin) - { - if (dup2 (pin[1], STDOUT_FILENO) < 0) - _exit (127); - close (pin[0]); - close (pin[1]); - } - - execvp (path, (char *const *)arg); - _exit (127); + if (pfdin) { + if (dup2(pin[1], STDOUT_FILENO) < 0) + _exit(127); + close(pin[0]); + close(pin[1]); } - else - { + + execvp(path, (char *const *)arg); + _exit(127); + } else { + if (pfdin) + close(pin[1]); + if (pfdout) + close(pout[0]); + + if (pid > 0) { + if (pfdin) { + fcntl(pin[0], F_SETFD, FD_CLOEXEC); + *pfdin = pin[0]; + } + if (pfdout) { + fcntl(pout[1], F_SETFD, FD_CLOEXEC); + *pfdout = pout[1]; + } + } else { if (pfdin) - close (pin[1]); + close(pin[0]); if (pfdout) - close (pout[0]); - - if (pid > 0) - { - if (pfdin) - { - fcntl (pin[0], F_SETFD, FD_CLOEXEC); - *pfdin = pin[0]; - } - if (pfdout) - { - fcntl (pout[1], F_SETFD, FD_CLOEXEC); - *pfdout = pout[1]; - } - } - else - { - if (pfdin) - close (pin[0]); - if (pfdout) - close (pout[1]); - return 0; - } + close(pout[1]); + return 0; } + } return pid; } /* Execute an external program in a shell. */ int -shell_exec (int *pfdin, int *pfdout, const char *path, const char *const *arg) +shell_exec(int *pfdin, int *pfdout, const char *path, const char *const *arg) { int argc, i; const char **narg; char *arg0 = NULL; int ret; - for (argc = 0; arg[argc]; argc++) - ; + for (argc = 0; arg[argc]; argc++) ; if (argc < 1) return -1; - narg = mem_calloc (argc + 4, sizeof (const char *)); + narg = mem_calloc(argc + 4, sizeof(const char *)); narg[0] = "sh"; narg[1] = "-c"; - if (argc > 1) - { - arg0 = mem_malloc (strlen (path) + 6); - sprintf (arg0, "%s \"$@\"", path); - narg[2] = arg0; + if (argc > 1) { + arg0 = mem_malloc(strlen(path) + 6); + sprintf(arg0, "%s \"$@\"", path); + narg[2] = arg0; - for (i = 0; i < argc; i++) - narg[i + 3] = arg[i]; - narg[argc + 3] = NULL; - } - else - { - narg[2] = path; - narg[3] = NULL; - } + for (i = 0; i < argc; i++) + narg[i + 3] = arg[i]; + narg[argc + 3] = NULL; + } else { + narg[2] = path; + narg[3] = NULL; + } - ret = fork_exec (pfdin, pfdout, *narg, narg); + ret = fork_exec(pfdin, pfdout, *narg, narg); if (arg0) - mem_free (arg0); - mem_free (narg); + mem_free(arg0); + mem_free(narg); return ret; } /* Wait for a child process to terminate. */ -int -child_wait (int *pfdin, int *pfdout, int pid) +int child_wait(int *pfdin, int *pfdout, int pid) { int stat; if (pfdin) - close (*pfdin); + close(*pfdin); if (pfdout) - close (*pfdout); + close(*pfdout); - waitpid (pid, &stat, 0); + waitpid(pid, &stat, 0); return stat; } /* Display "Press any key to continue..." and wait for a key press. */ -void -press_any_key (void) +void press_any_key(void) { struct termios t_attr_old, t_attr; - tcgetattr (STDIN_FILENO, &t_attr_old); - memcpy (&t_attr, &t_attr_old, sizeof (struct termios)); + tcgetattr(STDIN_FILENO, &t_attr_old); + memcpy(&t_attr, &t_attr_old, sizeof(struct termios)); t_attr.c_lflag &= ~(ICANON | ECHO | ECHONL); - tcsetattr (STDIN_FILENO, TCSAFLUSH, &t_attr); + tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_attr); - fflush (stdout); - fputs (_("Press any key to continue..."), stdout); - fflush (stdout); - fgetc (stdin); - fflush (stdin); - fputs ("\r\n", stdout); + fflush(stdout); + fputs(_("Press any key to continue..."), stdout); + fflush(stdout); + fgetc(stdin); + fflush(stdin); + fputs("\r\n", stdout); - tcsetattr (STDIN_FILENO, TCSAFLUSH, &t_attr_old); + tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_attr_old); } /* @@ -1103,8 +1005,7 @@ press_any_key (void) * * (patch submitted by Erik Saule). */ -static void -print_notefile (FILE *out, const char *filename, int nbtab) +static void print_notefile(FILE * out, const char *filename, int nbtab) { char path_to_notefile[BUFSIZ]; FILE *notefile; @@ -1113,287 +1014,263 @@ print_notefile (FILE *out, const char *filename, int nbtab) int i; int printlinestarter = 1; - if (nbtab < BUFSIZ) - { - for (i = 0; i < nbtab; i++) - linestarter[i] = '\t'; - linestarter[nbtab] = '\0'; - } - else + if (nbtab < BUFSIZ) { + for (i = 0; i < nbtab; i++) + linestarter[i] = '\t'; + linestarter[nbtab] = '\0'; + } else linestarter[0] = '\0'; - snprintf (path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename); - notefile = fopen (path_to_notefile, "r"); - if (notefile) - { - while (fgets (buffer, BUFSIZ, notefile) != 0) - { - if (printlinestarter) - { - fputs (linestarter, out); - printlinestarter = 0; - } - fputs (buffer, out); - if (buffer[strlen (buffer) - 1] == '\n') - printlinestarter = 1; - } - fputs ("\n", out); - file_close (notefile, __FILE_POS__); - } - else - { - fputs (linestarter, out); - fputs (_("No note file found\n"), out); + snprintf(path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename); + notefile = fopen(path_to_notefile, "r"); + if (notefile) { + while (fgets(buffer, BUFSIZ, notefile) != 0) { + if (printlinestarter) { + fputs(linestarter, out); + printlinestarter = 0; + } + fputs(buffer, out); + if (buffer[strlen(buffer) - 1] == '\n') + printlinestarter = 1; } + fputs("\n", out); + file_close(notefile, __FILE_POS__); + } else { + fputs(linestarter, out); + fputs(_("No note file found\n"), out); + } } /* Print an escape sequence and return its length. */ -static int -print_escape (const char *s) +static int print_escape(const char *s) { - switch (*(s + 1)) - { - case 'a': - putchar ('\a'); - return 1; - case 'b': - putchar ('\b'); - return 1; - case 'f': - putchar ('\f'); - return 1; - case 'n': - putchar ('\n'); - return 1; - case 'r': - putchar ('\r'); - return 1; - case 't': - putchar ('\t'); - return 1; - case 'v': - putchar ('\v'); - return 1; - case '0': - putchar ('\0'); - return 1; - case '\'': - putchar ('\''); - return 1; - case '"': - putchar ('"'); - return 1; - case '\?': - putchar ('?'); - return 1; - case '\\': - putchar ('\\'); - return 1; - case '\0': - return 0; - default: - return 1; - } + switch (*(s + 1)) { + case 'a': + putchar('\a'); + return 1; + case 'b': + putchar('\b'); + return 1; + case 'f': + putchar('\f'); + return 1; + case 'n': + putchar('\n'); + return 1; + case 'r': + putchar('\r'); + return 1; + case 't': + putchar('\t'); + return 1; + case 'v': + putchar('\v'); + return 1; + case '0': + putchar('\0'); + return 1; + case '\'': + putchar('\''); + return 1; + case '"': + putchar('"'); + return 1; + case '\?': + putchar('?'); + return 1; + case '\\': + putchar('\\'); + return 1; + case '\0': + return 0; + default: + return 1; + } } /* Parse a format specifier. */ -static enum format_specifier -parse_fs (const char **s, char *extformat) +static enum format_specifier parse_fs(const char **s, char *extformat) { char buf[FS_EXT_MAXLEN]; int i; extformat[0] = '\0'; - switch (**s) - { - case 's': - strcpy (extformat, "epoch"); - return FS_STARTDATE; - case 'S': + switch (**s) { + case 's': + strcpy(extformat, "epoch"); + return FS_STARTDATE; + case 'S': + return FS_STARTDATE; + case 'd': + return FS_DURATION; + case 'e': + strcpy(extformat, "epoch"); + return FS_ENDDATE; + case 'E': + return FS_ENDDATE; + case 'm': + return FS_MESSAGE; + case 'n': + return FS_NOTE; + case 'N': + return FS_NOTEFILE; + case 'p': + return FS_PRIORITY; + case '(': + /* Long format specifier. */ + for ((*s)++, i = 0; **s != ':' && **s != ')'; (*s)++, i++) { + if (**s == '\0') + return FS_EOF; + + if (i < FS_EXT_MAXLEN) + buf[i] = **s; + } + + buf[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; + + if (**s == ':') { + for ((*s)++, i = 0; **s != ')'; (*s)++, i++) { + if (**s == '\0') + return FS_EOF; + + if (i < FS_EXT_MAXLEN) + extformat[i] = **s; + } + + extformat[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; + } + + if (!strcmp(buf, "start")) return FS_STARTDATE; - case 'd': + else if (!strcmp(buf, "duration")) return FS_DURATION; - case 'e': - strcpy (extformat, "epoch"); + else if (!strcmp(buf, "end")) return FS_ENDDATE; - case 'E': - return FS_ENDDATE; - case 'm': + else if (!strcmp(buf, "message")) return FS_MESSAGE; - case 'n': + else if (!strcmp(buf, "noteid")) return FS_NOTE; - case 'N': + else if (!strcmp(buf, "note")) return FS_NOTEFILE; - case 'p': + else if (!strcmp(buf, "priority")) return FS_PRIORITY; - case '(': - /* Long format specifier. */ - for ((*s)++, i = 0; **s != ':' && **s != ')'; (*s)++, i++) - { - if (**s == '\0') - return FS_EOF; - - if (i < FS_EXT_MAXLEN) - buf[i] = **s; - } - - buf[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; - - if (**s == ':') - { - for ((*s)++, i = 0; **s != ')'; (*s)++, i++) - { - if (**s == '\0') - return FS_EOF; - - if (i < FS_EXT_MAXLEN) - extformat[i] = **s; - } - - extformat[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; - } - - if (!strcmp (buf, "start")) - return FS_STARTDATE; - else if (!strcmp (buf, "duration")) - return FS_DURATION; - else if (!strcmp (buf, "end")) - return FS_ENDDATE; - else if (!strcmp (buf, "message")) - return FS_MESSAGE; - else if (!strcmp (buf, "noteid")) - return FS_NOTE; - else if (!strcmp (buf, "note")) - return FS_NOTEFILE; - else if (!strcmp (buf, "priority")) - return FS_PRIORITY; - else - return FS_UNKNOWN; - case '%': - return FS_PSIGN; - case '\0': - return FS_EOF; - default: + else return FS_UNKNOWN; - } + case '%': + return FS_PSIGN; + case '\0': + return FS_EOF; + default: + return FS_UNKNOWN; + } } /* Print a formatted date to stdout. */ -static void -print_date (long date, const char *extformat) +static void print_date(long date, const char *extformat) { char buf[BUFSIZ]; - if (!strcmp (extformat, "epoch")) - printf ("%ld", date); - else - { - time_t t = date; - struct tm *lt = localtime ((time_t *)&t); + if (!strcmp(extformat, "epoch")) + printf("%ld", date); + else { + time_t t = date; + struct tm *lt = localtime((time_t *) & t); - if (extformat[0] == '\0' || !strcmp (extformat, "default")) - strftime (buf, BUFSIZ, "%H:%M", lt); - else - strftime (buf, BUFSIZ, extformat, lt); + if (extformat[0] == '\0' || !strcmp(extformat, "default")) + strftime(buf, BUFSIZ, "%H:%M", lt); + else + strftime(buf, BUFSIZ, extformat, lt); - printf ("%s", buf); - } + printf("%s", buf); + } } /* Print a formatted appointment to stdout. */ -void -print_apoint (const char *format, long day, struct apoint *apt) +void print_apoint(const char *format, long day, struct apoint *apt) { const char *p; char extformat[FS_EXT_MAXLEN]; - for (p = format; *p; p++) - { - if (*p == '%') { - p++; - switch (parse_fs (&p, extformat)) - { - case FS_STARTDATE: - print_date (apt->start, extformat); - break; - case FS_DURATION: - printf ("%ld", apt->dur); - break; - case FS_ENDDATE: - print_date (apt->start + apt->dur, extformat); - break; - case FS_MESSAGE: - printf ("%s", apt->mesg); - break; - case FS_NOTE: - printf ("%s", apt->note); - break; - case FS_NOTEFILE: - print_notefile (stdout, apt->note, 1); - break; - case FS_PSIGN: - putchar ('%'); - break; - case FS_EOF: - return; - break; - default: - putchar ('?'); - break; - } - } - else if (*p == '\\') - p += print_escape (p); - else - putchar (*p); - } + for (p = format; *p; p++) { + if (*p == '%') { + p++; + switch (parse_fs(&p, extformat)) { + case FS_STARTDATE: + print_date(apt->start, extformat); + break; + case FS_DURATION: + printf("%ld", apt->dur); + break; + case FS_ENDDATE: + print_date(apt->start + apt->dur, extformat); + break; + case FS_MESSAGE: + printf("%s", apt->mesg); + break; + case FS_NOTE: + printf("%s", apt->note); + break; + case FS_NOTEFILE: + print_notefile(stdout, apt->note, 1); + break; + case FS_PSIGN: + putchar('%'); + break; + case FS_EOF: + return; + break; + default: + putchar('?'); + break; + } + } else if (*p == '\\') + p += print_escape(p); + else + putchar(*p); + } } /* Print a formatted event to stdout. */ -void -print_event (const char *format, long day, struct event *ev) +void print_event(const char *format, long day, struct event *ev) { const char *p; char extformat[FS_EXT_MAXLEN]; - for (p = format; *p; p++) - { - if (*p == '%') { - p++; - switch (parse_fs (&p, extformat)) - { - case FS_MESSAGE: - printf ("%s", ev->mesg); - break; - case FS_NOTE: - printf ("%s", ev->note); - break; - case FS_NOTEFILE: - print_notefile (stdout, ev->note, 1); - break; - case FS_PSIGN: - putchar ('%'); - break; - case FS_EOF: - return; - break; - default: - putchar ('?'); - break; - } - } - else if (*p == '\\') - p += print_escape (p); - else - putchar (*p); - } + for (p = format; *p; p++) { + if (*p == '%') { + p++; + switch (parse_fs(&p, extformat)) { + case FS_MESSAGE: + printf("%s", ev->mesg); + break; + case FS_NOTE: + printf("%s", ev->note); + break; + case FS_NOTEFILE: + print_notefile(stdout, ev->note, 1); + break; + case FS_PSIGN: + putchar('%'); + break; + case FS_EOF: + return; + break; + default: + putchar('?'); + break; + } + } else if (*p == '\\') + p += print_escape(p); + else + putchar(*p); + } } /* Print a formatted recurrent appointment to stdout. */ void -print_recur_apoint (const char *format, long day, unsigned occurrence, - struct recur_apoint *rapt) +print_recur_apoint(const char *format, long day, unsigned occurrence, + struct recur_apoint *rapt) { struct apoint apt; @@ -1402,60 +1279,55 @@ print_recur_apoint (const char *format, long day, unsigned occurrence, apt.mesg = rapt->mesg; apt.note = rapt->note; - print_apoint (format, day, &apt); + print_apoint(format, day, &apt); } /* Print a formatted recurrent event to stdout. */ -void -print_recur_event (const char *format, long day, struct recur_event *rev) +void print_recur_event(const char *format, long day, struct recur_event *rev) { struct event ev; ev.mesg = rev->mesg; ev.note = rev->note; - print_event (format, day, &ev); + print_event(format, day, &ev); } /* Print a formatted todo item to stdout. */ -void -print_todo (const char *format, struct todo *todo) +void print_todo(const char *format, struct todo *todo) { const char *p; char extformat[FS_EXT_MAXLEN]; - for (p = format; *p; p++) - { - if (*p == '%') { - p++; - switch (parse_fs (&p, extformat)) - { - case FS_PRIORITY: - printf ("%d", abs (todo->id)); - break; - case FS_MESSAGE: - printf ("%s", todo->mesg); - break; - case FS_NOTE: - printf ("%s", todo->note); - break; - case FS_NOTEFILE: - print_notefile (stdout, todo->note, 1); - break; - case FS_PSIGN: - putchar ('%'); - break; - case FS_EOF: - return; - break; - default: - putchar ('?'); - break; - } - } - else if (*p == '\\') - p += print_escape (p); - else - putchar (*p); - } + for (p = format; *p; p++) { + if (*p == '%') { + p++; + switch (parse_fs(&p, extformat)) { + case FS_PRIORITY: + printf("%d", abs(todo->id)); + break; + case FS_MESSAGE: + printf("%s", todo->mesg); + break; + case FS_NOTE: + printf("%s", todo->note); + break; + case FS_NOTEFILE: + print_notefile(stdout, todo->note, 1); + break; + case FS_PSIGN: + putchar('%'); + break; + case FS_EOF: + return; + break; + default: + putchar('?'); + break; + } + } else if (*p == '\\') + p += print_escape(p); + else + putchar(*p); + } } @@ -65,6 +65,7 @@ int read_only = 0; * variables to store calendar names */ int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + const char *monthnames[12] = { N_("January"), N_("February"), @@ -120,8 +121,7 @@ struct dmon_conf dmon; /* * Variables init */ -void -vars_init (void) +void vars_init(void) { const char *ed, *pg; @@ -133,33 +133,33 @@ vars_init (void) conf.periodic_save = 0; conf.system_dialogs = 1; conf.progress_bar = 1; - strncpy (conf.output_datefmt, "%D", 3); + strncpy(conf.output_datefmt, "%D", 3); conf.input_datefmt = 1; /* Default external editor and pager */ - ed = getenv ("VISUAL"); + ed = getenv("VISUAL"); if (ed == NULL || ed[0] == '\0') - ed = getenv ("EDITOR"); + ed = getenv("EDITOR"); if (ed == NULL || ed[0] == '\0') ed = DEFAULT_EDITOR; conf.editor = ed; - pg = getenv ("PAGER"); + pg = getenv("PAGER"); if (pg == NULL || pg[0] == '\0') pg = DEFAULT_PAGER; conf.pager = pg; - wins_set_layout (1); + wins_set_layout(1); - calendar_set_first_day_of_week (MONDAY); + calendar_set_first_day_of_week(MONDAY); /* Pad structure to scroll text inside the appointment panel */ apad.length = 1; apad.first_onscreen = 0; /* Attribute definitions for color and non-color terminals */ - custom_init_attr (); + custom_init_attr(); /* Start at the current date */ - calendar_init_slctd_day (); + calendar_init_slctd_day(); } @@ -63,93 +63,83 @@ static int layout; */ static pthread_mutex_t screen_mutex = PTHREAD_MUTEX_INITIALIZER; -static unsigned -screen_acquire (void) +static unsigned screen_acquire(void) { - if (pthread_mutex_lock (&screen_mutex) != 0) + if (pthread_mutex_lock(&screen_mutex) != 0) return 0; else return 1; } -static void -screen_release (void) +static void screen_release(void) { - pthread_mutex_unlock (&screen_mutex); + pthread_mutex_unlock(&screen_mutex); } -int -wins_refresh (void) +int wins_refresh(void) { int rc; - if (!screen_acquire ()) + if (!screen_acquire()) return ERR; - rc = refresh (); - screen_release (); + rc = refresh(); + screen_release(); return rc; } -int -wins_wrefresh (WINDOW *win) +int wins_wrefresh(WINDOW * win) { int rc; - if (!win || !screen_acquire ()) + if (!win || !screen_acquire()) return ERR; - rc = wrefresh (win); - screen_release (); + rc = wrefresh(win); + screen_release(); return rc; } -int -wins_doupdate (void) +int wins_doupdate(void) { int rc; - if (!screen_acquire ()) + if (!screen_acquire()) return ERR; - rc = doupdate (); - screen_release (); + rc = doupdate(); + screen_release(); return rc; } /* Get the current layout. */ -int -wins_layout (void) +int wins_layout(void) { return layout; } /* Set the current layout. */ -void -wins_set_layout (int nb) +void wins_set_layout(int nb) { layout = nb; } /* Get the current side bar width. */ -unsigned -wins_sbar_width (void) +unsigned wins_sbar_width(void) { if (sbarwidth_perc > SBARMAXWIDTHPERC) return col * SBARMAXWIDTHPERC / 100; - else - { - unsigned sbarwidth = (unsigned)(col * sbarwidth_perc / 100); - return (sbarwidth < SBARMINWIDTH) ? SBARMINWIDTH : sbarwidth; - } + else { + unsigned sbarwidth = (unsigned)(col * sbarwidth_perc / 100); + return (sbarwidth < SBARMINWIDTH) ? SBARMINWIDTH : sbarwidth; + } } /* * Return the side bar width in percentage of the total number of columns * available in calcurse's screen. */ -unsigned -wins_sbar_wperc (void) +unsigned wins_sbar_wperc(void) { return sbarwidth_perc > SBARMAXWIDTHPERC ? SBARMAXWIDTHPERC : sbarwidth_perc; } @@ -160,51 +150,44 @@ wins_sbar_wperc (void) * The side bar could not have a width representing more than 50% of the screen, * and could not be less than SBARMINWIDTH characters. */ -void -wins_set_sbar_width (unsigned perc) +void wins_set_sbar_width(unsigned perc) { sbarwidth_perc = perc; } /* Change the width of the side bar within acceptable boundaries. */ -void -wins_sbar_winc (void) +void wins_sbar_winc(void) { if (sbarwidth_perc < SBARMAXWIDTHPERC) sbarwidth_perc++; } -void -wins_sbar_wdec (void) +void wins_sbar_wdec(void) { if (sbarwidth_perc > 0) sbarwidth_perc--; } /* Initialize the selected window in calcurse's interface. */ -void -wins_slctd_init (void) +void wins_slctd_init(void) { - wins_slctd_set (CAL); + wins_slctd_set(CAL); } /* Returns an enum which corresponds to the window which is selected. */ -enum win -wins_slctd (void) +enum win wins_slctd(void) { return slctd_win; } /* Sets the selected window. */ -void -wins_slctd_set (enum win window) +void wins_slctd_set(enum win window) { slctd_win = window; } /* TAB key was hit in the interface, need to select next window. */ -void -wins_slctd_next (void) +void wins_slctd_next(void) { if (slctd_win == TOD) slctd_win = CAL; @@ -212,34 +195,32 @@ wins_slctd_next (void) slctd_win++; } -static void -wins_init_panels (void) +static void wins_init_panels(void) { - win[CAL].p = newwin (CALHEIGHT, wins_sbar_width (), win[CAL].y, win[CAL].x); - wins_show (win[CAL].p, _("Calendar")); + win[CAL].p = newwin(CALHEIGHT, wins_sbar_width(), win[CAL].y, win[CAL].x); + wins_show(win[CAL].p, _("Calendar")); - win[APP].p = newwin (win[APP].h, win[APP].w, win[APP].y, win[APP].x); - wins_show (win[APP].p, _("Appointments")); + win[APP].p = newwin(win[APP].h, win[APP].w, win[APP].y, win[APP].x); + wins_show(win[APP].p, _("Appointments")); apad.width = win[APP].w - 3; - apad.ptrwin = newpad (apad.length, apad.width); + apad.ptrwin = newpad(apad.length, apad.width); - win[TOD].p = newwin (win[TOD].h, win[TOD].w, win[TOD].y, win[TOD].x); - wins_show (win[TOD].p, _("ToDo")); + win[TOD].p = newwin(win[TOD].h, win[TOD].w, win[TOD].y, win[TOD].x); + wins_show(win[TOD].p, _("ToDo")); /* Enable function keys (i.e. arrow keys) in those windows */ - keypad (win[CAL].p, TRUE); - keypad (win[APP].p, TRUE); - keypad (win[TOD].p, TRUE); + keypad(win[CAL].p, TRUE); + keypad(win[APP].p, TRUE); + keypad(win[TOD].p, TRUE); } /* Create all the windows. */ -void -wins_init (void) +void wins_init(void) { - wins_init_panels (); - win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y, win[STA].x); + wins_init_panels(); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); - keypad (win[STA].p, TRUE); + keypad(win[STA].p, TRUE); /* Notify that the curses mode is now launched. */ ui_mode = UI_CURSES; @@ -249,116 +230,105 @@ wins_init (void) * Create a new window and its associated pad, which is used to make the * scrolling faster. */ -void -wins_scrollwin_init (struct scrollwin *sw) +void wins_scrollwin_init(struct scrollwin *sw) { - EXIT_IF (sw == NULL, "null pointer"); - sw->win.p = newwin (sw->win.h, sw->win.w, sw->win.y, sw->win.x); - sw->pad.p = newpad (sw->pad.h, sw->pad.w); + EXIT_IF(sw == NULL, "null pointer"); + sw->win.p = newwin(sw->win.h, sw->win.w, sw->win.y, sw->win.x); + sw->pad.p = newpad(sw->pad.h, sw->pad.w); sw->first_visible_line = 0; sw->total_lines = 0; } /* Free an already created scrollwin. */ -void -wins_scrollwin_delete (struct scrollwin *sw) +void wins_scrollwin_delete(struct scrollwin *sw) { - EXIT_IF (sw == NULL, "null pointer"); + EXIT_IF(sw == NULL, "null pointer"); delwin(sw->win.p); delwin(sw->pad.p); } /* Display a scrolling window. */ -void -wins_scrollwin_display (struct scrollwin *sw) +void wins_scrollwin_display(struct scrollwin *sw) { const int visible_lines = sw->win.h - sw->pad.y - 1; - if (sw->total_lines > visible_lines) - { - float ratio = ((float) visible_lines) / ((float) sw->total_lines); - int sbar_length = (int) (ratio * visible_lines); - int highend = (int) (ratio * sw->first_visible_line); - int sbar_top = highend + sw->pad.y + 1; + if (sw->total_lines > visible_lines) { + float ratio = ((float)visible_lines) / ((float)sw->total_lines); + int sbar_length = (int)(ratio * visible_lines); + int highend = (int)(ratio * sw->first_visible_line); + int sbar_top = highend + sw->pad.y + 1; - if ((sbar_top + sbar_length) > sw->win.h - 1) - sbar_length = sw->win.h - sbar_top; - draw_scrollbar (sw->win.p, sbar_top, sw->win.w + sw->win.x - 2, - sbar_length, sw->pad.y + 1, sw->win.h - 1, 1); - } - wmove (win[STA].p, 0, 0); - wnoutrefresh (sw->win.p); - pnoutrefresh (sw->pad.p, sw->first_visible_line, 0, sw->pad.y, sw->pad.x, - sw->win.h - sw->pad.y + 1, sw->win.w - sw->win.x); - wins_doupdate (); + if ((sbar_top + sbar_length) > sw->win.h - 1) + sbar_length = sw->win.h - sbar_top; + draw_scrollbar(sw->win.p, sbar_top, sw->win.w + sw->win.x - 2, + sbar_length, sw->pad.y + 1, sw->win.h - 1, 1); + } + wmove(win[STA].p, 0, 0); + wnoutrefresh(sw->win.p); + pnoutrefresh(sw->pad.p, sw->first_visible_line, 0, sw->pad.y, sw->pad.x, + sw->win.h - sw->pad.y + 1, sw->win.w - sw->win.x); + wins_doupdate(); } -void -wins_scrollwin_up (struct scrollwin *sw, int amount) +void wins_scrollwin_up(struct scrollwin *sw, int amount) { if (sw->first_visible_line > 0) sw->first_visible_line -= amount; } -void -wins_scrollwin_down (struct scrollwin *sw, int amount) +void wins_scrollwin_down(struct scrollwin *sw, int amount) { - if (sw->total_lines - > (sw->first_visible_line + sw->win.h - sw->pad.y - 1)) + if (sw->total_lines > (sw->first_visible_line + sw->win.h - sw->pad.y - 1)) sw->first_visible_line += amount; } -void -wins_reinit_panels (void) +void wins_reinit_panels(void) { - delwin (win[CAL].p); - delwin (win[APP].p); - delwin (apad.ptrwin); - delwin (win[TOD].p); - wins_get_config (); - wins_init_panels (); + delwin(win[CAL].p); + delwin(win[APP].p); + delwin(apad.ptrwin); + delwin(win[TOD].p); + wins_get_config(); + wins_init_panels(); } /* * Delete the existing windows and recreate them with their new * size and placement. */ -void -wins_reinit (void) +void wins_reinit(void) { - delwin (win[CAL].p); - delwin (win[APP].p); - delwin (apad.ptrwin); - delwin (win[TOD].p); - delwin (win[STA].p); - wins_get_config (); - wins_init (); - if (notify_bar ()) - notify_reinit_bar (); + delwin(win[CAL].p); + delwin(win[APP].p); + delwin(apad.ptrwin); + delwin(win[TOD].p); + delwin(win[STA].p); + wins_get_config(); + wins_init(); + if (notify_bar()) + notify_reinit_bar(); } /* Show the window with a border and a label. */ -void -wins_show (WINDOW *win, const char *label) +void wins_show(WINDOW * win, const char *label) { - int width = getmaxx (win); + int width = getmaxx(win); - box (win, 0, 0); - mvwaddch (win, 2, 0, ACS_LTEE); - mvwhline (win, 2, 1, ACS_HLINE, width - 2); - mvwaddch (win, 2, width - 1, ACS_RTEE); + box(win, 0, 0); + mvwaddch(win, 2, 0, ACS_LTEE); + mvwhline(win, 2, 1, ACS_HLINE, width - 2); + mvwaddch(win, 2, width - 1, ACS_RTEE); - print_in_middle (win, 1, 0, width, label); + print_in_middle(win, 1, 0, width, label); } /* * Get the screen size and recalculate the windows configurations. */ -void -wins_get_config (void) +void wins_get_config(void) { /* Get the screen configuration */ - getmaxyx (stdscr, row, col); + getmaxyx(stdscr, row, col); /* fixed values for status, notification bars and calendar */ win[STA].h = STATUSHEIGHT; @@ -366,274 +336,243 @@ wins_get_config (void) win[STA].y = row - win[STA].h; win[STA].x = 0; - if (notify_bar ()) - { - win[NOT].h = 1; - win[NOT].w = col; - win[NOT].y = win[STA].y - 1; - win[NOT].x = 0; - } - else - { - win[NOT].h = 0; - win[NOT].w = 0; - win[NOT].y = 0; - win[NOT].x = 0; - } - - win[CAL].w = wins_sbar_width (); + if (notify_bar()) { + win[NOT].h = 1; + win[NOT].w = col; + win[NOT].y = win[STA].y - 1; + win[NOT].x = 0; + } else { + win[NOT].h = 0; + win[NOT].w = 0; + win[NOT].y = 0; + win[NOT].x = 0; + } + + win[CAL].w = wins_sbar_width(); win[CAL].h = CALHEIGHT; - if (layout <= 4) - { /* APPOINTMENT is the biggest panel */ - win[APP].w = col - win[CAL].w; - win[APP].h = row - (win[STA].h + win[NOT].h); - win[TOD].w = win[CAL].w; - win[TOD].h = row - (win[CAL].h + win[STA].h + win[NOT].h); - } - else - { /* TODO is the biggest panel */ - win[TOD].w = col - win[CAL].w; - win[TOD].h = row - (win[STA].h + win[NOT].h); - win[APP].w = win[CAL].w; - win[APP].h = row - (win[CAL].h + win[STA].h + win[NOT].h); - } + if (layout <= 4) { /* APPOINTMENT is the biggest panel */ + win[APP].w = col - win[CAL].w; + win[APP].h = row - (win[STA].h + win[NOT].h); + win[TOD].w = win[CAL].w; + win[TOD].h = row - (win[CAL].h + win[STA].h + win[NOT].h); + } else { /* TODO is the biggest panel */ + win[TOD].w = col - win[CAL].w; + win[TOD].h = row - (win[STA].h + win[NOT].h); + win[APP].w = win[CAL].w; + win[APP].h = row - (win[CAL].h + win[STA].h + win[NOT].h); + } /* defining the layout */ - switch (layout) - { - case 1: - win[APP].y = 0; - win[APP].x = 0; - win[CAL].y = 0; - win[TOD].x = win[APP].w; - win[TOD].y = win[CAL].h; - win[CAL].x = win[APP].w; - break; - case 2: - win[APP].y = 0; - win[APP].x = 0; - win[TOD].y = 0; - win[TOD].x = win[APP].w; - win[CAL].x = win[APP].w; - win[CAL].y = win[TOD].h; - break; - case 3: - win[APP].y = 0; - win[TOD].x = 0; - win[CAL].x = 0; - win[CAL].y = 0; - win[APP].x = win[CAL].w; - win[TOD].y = win[CAL].h; - break; - case 4: - win[APP].y = 0; - win[TOD].x = 0; - win[TOD].y = 0; - win[CAL].x = 0; - win[APP].x = win[CAL].w; - win[CAL].y = win[TOD].h; - break; - case 5: - win[TOD].y = 0; - win[TOD].x = 0; - win[CAL].y = 0; - win[APP].y = win[CAL].h; - win[APP].x = win[TOD].w; - win[CAL].x = win[TOD].w; - break; - case 6: - win[TOD].y = 0; - win[TOD].x = 0; - win[APP].y = 0; - win[APP].x = win[TOD].w; - win[CAL].x = win[TOD].w; - win[CAL].y = win[APP].h; - break; - case 7: - win[TOD].y = 0; - win[APP].x = 0; - win[CAL].x = 0; - win[CAL].y = 0; - win[TOD].x = win[CAL].w; - win[APP].y = win[CAL].h; - break; - case 8: - win[TOD].y = 0; - win[APP].x = 0; - win[CAL].x = 0; - win[APP].y = 0; - win[TOD].x = win[CAL].w; - win[CAL].y = win[APP].h; - break; - } + switch (layout) { + case 1: + win[APP].y = 0; + win[APP].x = 0; + win[CAL].y = 0; + win[TOD].x = win[APP].w; + win[TOD].y = win[CAL].h; + win[CAL].x = win[APP].w; + break; + case 2: + win[APP].y = 0; + win[APP].x = 0; + win[TOD].y = 0; + win[TOD].x = win[APP].w; + win[CAL].x = win[APP].w; + win[CAL].y = win[TOD].h; + break; + case 3: + win[APP].y = 0; + win[TOD].x = 0; + win[CAL].x = 0; + win[CAL].y = 0; + win[APP].x = win[CAL].w; + win[TOD].y = win[CAL].h; + break; + case 4: + win[APP].y = 0; + win[TOD].x = 0; + win[TOD].y = 0; + win[CAL].x = 0; + win[APP].x = win[CAL].w; + win[CAL].y = win[TOD].h; + break; + case 5: + win[TOD].y = 0; + win[TOD].x = 0; + win[CAL].y = 0; + win[APP].y = win[CAL].h; + win[APP].x = win[TOD].w; + win[CAL].x = win[TOD].w; + break; + case 6: + win[TOD].y = 0; + win[TOD].x = 0; + win[APP].y = 0; + win[APP].x = win[TOD].w; + win[CAL].x = win[TOD].w; + win[CAL].y = win[APP].h; + break; + case 7: + win[TOD].y = 0; + win[APP].x = 0; + win[CAL].x = 0; + win[CAL].y = 0; + win[TOD].x = win[CAL].w; + win[APP].y = win[CAL].h; + break; + case 8: + win[TOD].y = 0; + win[APP].x = 0; + win[CAL].x = 0; + win[APP].y = 0; + win[TOD].x = win[CAL].w; + win[CAL].y = win[APP].h; + break; + } } /* draw panel border in color */ -static void -border_color (WINDOW *window) +static void border_color(WINDOW * window) { int color_attr = A_BOLD; int no_color_attr = A_BOLD; - if (colorize) - { - wattron (window, color_attr | COLOR_PAIR (COLR_CUSTOM)); - box (window, 0, 0); - } - else - { - wattron (window, no_color_attr); - box (window, 0, 0); - } - if (colorize) - { - wattroff (window, color_attr | COLOR_PAIR (COLR_CUSTOM)); - } - else - { - wattroff (window, no_color_attr); - } - wnoutrefresh (window); + if (colorize) { + wattron(window, color_attr | COLOR_PAIR(COLR_CUSTOM)); + box(window, 0, 0); + } else { + wattron(window, no_color_attr); + box(window, 0, 0); + } + if (colorize) { + wattroff(window, color_attr | COLOR_PAIR(COLR_CUSTOM)); + } else { + wattroff(window, no_color_attr); + } + wnoutrefresh(window); } /* draw panel border without any color */ -static void -border_nocolor (WINDOW *window) +static void border_nocolor(WINDOW * window) { int color_attr = A_BOLD; int no_color_attr = A_DIM; - if (colorize) - { - wattron (window, color_attr | COLOR_PAIR (COLR_DEFAULT)); - } - else - { - wattron (window, no_color_attr); - } - box (window, 0, 0); - if (colorize) - { - wattroff (window, color_attr | COLOR_PAIR (COLR_DEFAULT)); - } - else - { - wattroff (window, no_color_attr); - } - wnoutrefresh (window); -} - -void -wins_update_border (int flags) -{ - if (flags & FLAG_CAL) - { - if (slctd_win == CAL) - border_color (win[CAL].p); - else - border_nocolor (win[CAL].p); - } - if (flags & FLAG_APP) - { - if (slctd_win == APP) - border_color (win[APP].p); - else - border_nocolor (win[APP].p); - } - if (flags & FLAG_TOD) - { - if (slctd_win == TOD) - border_color (win[TOD].p); - else - border_nocolor (win[TOD].p); - } -} - -void -wins_update_panels (int flags) + if (colorize) { + wattron(window, color_attr | COLOR_PAIR(COLR_DEFAULT)); + } else { + wattron(window, no_color_attr); + } + box(window, 0, 0); + if (colorize) { + wattroff(window, color_attr | COLOR_PAIR(COLR_DEFAULT)); + } else { + wattroff(window, no_color_attr); + } + wnoutrefresh(window); +} + +void wins_update_border(int flags) +{ + if (flags & FLAG_CAL) { + if (slctd_win == CAL) + border_color(win[CAL].p); + else + border_nocolor(win[CAL].p); + } + if (flags & FLAG_APP) { + if (slctd_win == APP) + border_color(win[APP].p); + else + border_nocolor(win[APP].p); + } + if (flags & FLAG_TOD) { + if (slctd_win == TOD) + border_color(win[TOD].p); + else + border_nocolor(win[TOD].p); + } +} + +void wins_update_panels(int flags) { if (flags & FLAG_APP) - apoint_update_panel (slctd_win); + apoint_update_panel(slctd_win); if (flags & FLAG_TOD) - todo_update_panel (slctd_win); + todo_update_panel(slctd_win); if (flags & FLAG_CAL) - calendar_update_panel (&win[CAL]); + calendar_update_panel(&win[CAL]); } /* * Update all of the three windows and put a border around the * selected window. */ -void -wins_update (int flags) +void wins_update(int flags) { - wins_update_border (flags); - wins_update_panels (flags); + wins_update_border(flags); + wins_update_panels(flags); if (flags & FLAG_STA) - wins_status_bar (); - if ((flags & FLAG_NOT) && notify_bar ()) - notify_update_bar (); - wmove (win[STA].p, 0, 0); - wins_doupdate (); + wins_status_bar(); + if ((flags & FLAG_NOT) && notify_bar()) + notify_update_bar(); + wmove(win[STA].p, 0, 0); + wins_doupdate(); } /* Reset the screen, needed when resizing terminal for example. */ -void -wins_reset (void) +void wins_reset(void) { - endwin (); - wins_refresh (); - curs_set (0); - wins_reinit (); - wins_update (FLAG_ALL); + endwin(); + wins_refresh(); + curs_set(0); + wins_reinit(); + wins_update(FLAG_ALL); } /* Prepare windows for the execution of an external command. */ -void -wins_prepare_external (void) +void wins_prepare_external(void) { - if (notify_bar ()) - notify_stop_main_thread (); - def_prog_mode (); + if (notify_bar()) + notify_stop_main_thread(); + def_prog_mode(); ui_mode = UI_CMDLINE; - clear (); - wins_refresh (); - endwin (); + clear(); + wins_refresh(); + endwin(); } /* Restore windows when returning from an external command. */ -void -wins_unprepare_external (void) +void wins_unprepare_external(void) { - reset_prog_mode (); - clearok (curscr, TRUE); - curs_set (0); + reset_prog_mode(); + clearok(curscr, TRUE); + curs_set(0); ui_mode = UI_CURSES; - wins_refresh (); - if (notify_bar ()) - notify_start_main_thread (); + wins_refresh(); + if (notify_bar()) + notify_start_main_thread(); } /* * While inside interactive mode, launch the external command cmd on the given * file. */ -void -wins_launch_external (const char *file, const char *cmd) +void wins_launch_external(const char *file, const char *cmd) { const char *arg[] = { cmd, file, NULL }; int pid; - wins_prepare_external (); - if ((pid = shell_exec (NULL, NULL, *arg, arg))) - child_wait (NULL, NULL, pid); - wins_unprepare_external (); + wins_prepare_external(); + if ((pid = shell_exec(NULL, NULL, *arg, arg))) + child_wait(NULL, NULL, pid); + wins_unprepare_external(); } -#define NB_CAL_CMDS 27 /* number of commands while in cal view */ -#define NB_APP_CMDS 32 /* same thing while in appointment view */ -#define NB_TOD_CMDS 31 /* same thing while in todo view */ +#define NB_CAL_CMDS 27 /* number of commands while in cal view */ +#define NB_APP_CMDS 32 /* same thing while in appointment view */ +#define NB_TOD_CMDS 31 /* same thing while in todo view */ static unsigned status_page; @@ -643,47 +582,46 @@ static unsigned status_page; * table, and update the NB_CAL_CMDS, NB_APP_CMDS or NB_TOD_CMDS defines, * depending on which panel the added keybind is assigned to. */ -void -wins_status_bar (void) -{ - struct binding help = {_("Help"), KEY_GENERIC_HELP}; - struct binding quit = {_("Quit"), KEY_GENERIC_QUIT}; - struct binding save = {_("Save"), KEY_GENERIC_SAVE}; - struct binding cut = {_("Cut"), KEY_GENERIC_CUT}; - struct binding paste = {_("Paste"), KEY_GENERIC_PASTE}; - struct binding chgvu = {_("Chg Win"), KEY_GENERIC_CHANGE_VIEW}; - struct binding import = {_("Import"), KEY_GENERIC_IMPORT}; - struct binding export = {_("Export"), KEY_GENERIC_EXPORT}; - struct binding togo = {_("Go to"), KEY_GENERIC_GOTO}; - struct binding conf = {_("Config"), KEY_GENERIC_CONFIG_MENU}; - struct binding draw = {_("Redraw"), KEY_GENERIC_REDRAW}; - struct binding appt = {_("Add Appt"), KEY_GENERIC_ADD_APPT}; - struct binding todo = {_("Add Todo"), KEY_GENERIC_ADD_TODO}; - struct binding gnday = {_("+1 Day"), KEY_GENERIC_NEXT_DAY}; - struct binding gpday = {_("-1 Day"), KEY_GENERIC_PREV_DAY}; - struct binding gnweek = {_("+1 Week"), KEY_GENERIC_NEXT_WEEK}; - struct binding gpweek = {_("-1 Week"), KEY_GENERIC_PREV_WEEK}; - struct binding today = {_("Today"), KEY_GENERIC_GOTO_TODAY}; - struct binding nview = {_("Nxt View"), KEY_GENERIC_SCROLL_DOWN}; - struct binding pview = {_("Prv View"), KEY_GENERIC_SCROLL_UP}; - struct binding up = {_("Up"), KEY_MOVE_UP}; - struct binding down = {_("Down"), KEY_MOVE_DOWN}; - struct binding left = {_("Left"), KEY_MOVE_LEFT}; - struct binding right = {_("Right"), KEY_MOVE_RIGHT}; - struct binding weekb = {_("beg Week"), KEY_START_OF_WEEK}; - struct binding weeke = {_("end Week"), KEY_END_OF_WEEK}; - struct binding add = {_("Add Item"), KEY_ADD_ITEM}; - struct binding del = {_("Del Item"), KEY_DEL_ITEM}; - struct binding edit = {_("Edit Itm"), KEY_EDIT_ITEM}; - struct binding view = {_("View"), KEY_VIEW_ITEM}; - struct binding pipe = {_("Pipe"), KEY_PIPE_ITEM}; - struct binding flag = {_("Flag Itm"), KEY_FLAG_ITEM}; - struct binding rept = {_("Repeat"), KEY_REPEAT_ITEM}; - struct binding enote = {_("EditNote"), KEY_EDIT_NOTE}; - struct binding vnote = {_("ViewNote"), KEY_VIEW_NOTE}; - struct binding rprio = {_("Prio.+"), KEY_RAISE_PRIORITY}; - struct binding lprio = {_("Prio.-"), KEY_LOWER_PRIORITY}; - struct binding othr = {_("OtherCmd"), KEY_GENERIC_OTHER_CMD}; +void wins_status_bar(void) +{ + struct binding help = { _("Help"), KEY_GENERIC_HELP }; + struct binding quit = { _("Quit"), KEY_GENERIC_QUIT }; + struct binding save = { _("Save"), KEY_GENERIC_SAVE }; + struct binding cut = { _("Cut"), KEY_GENERIC_CUT }; + struct binding paste = { _("Paste"), KEY_GENERIC_PASTE }; + struct binding chgvu = { _("Chg Win"), KEY_GENERIC_CHANGE_VIEW }; + struct binding import = { _("Import"), KEY_GENERIC_IMPORT }; + struct binding export = { _("Export"), KEY_GENERIC_EXPORT }; + struct binding togo = { _("Go to"), KEY_GENERIC_GOTO }; + struct binding conf = { _("Config"), KEY_GENERIC_CONFIG_MENU }; + struct binding draw = { _("Redraw"), KEY_GENERIC_REDRAW }; + struct binding appt = { _("Add Appt"), KEY_GENERIC_ADD_APPT }; + struct binding todo = { _("Add Todo"), KEY_GENERIC_ADD_TODO }; + struct binding gnday = { _("+1 Day"), KEY_GENERIC_NEXT_DAY }; + struct binding gpday = { _("-1 Day"), KEY_GENERIC_PREV_DAY }; + struct binding gnweek = { _("+1 Week"), KEY_GENERIC_NEXT_WEEK }; + struct binding gpweek = { _("-1 Week"), KEY_GENERIC_PREV_WEEK }; + struct binding today = { _("Today"), KEY_GENERIC_GOTO_TODAY }; + struct binding nview = { _("Nxt View"), KEY_GENERIC_SCROLL_DOWN }; + struct binding pview = { _("Prv View"), KEY_GENERIC_SCROLL_UP }; + struct binding up = { _("Up"), KEY_MOVE_UP }; + struct binding down = { _("Down"), KEY_MOVE_DOWN }; + struct binding left = { _("Left"), KEY_MOVE_LEFT }; + struct binding right = { _("Right"), KEY_MOVE_RIGHT }; + struct binding weekb = { _("beg Week"), KEY_START_OF_WEEK }; + struct binding weeke = { _("end Week"), KEY_END_OF_WEEK }; + struct binding add = { _("Add Item"), KEY_ADD_ITEM }; + struct binding del = { _("Del Item"), KEY_DEL_ITEM }; + struct binding edit = { _("Edit Itm"), KEY_EDIT_ITEM }; + struct binding view = { _("View"), KEY_VIEW_ITEM }; + struct binding pipe = { _("Pipe"), KEY_PIPE_ITEM }; + struct binding flag = { _("Flag Itm"), KEY_FLAG_ITEM }; + struct binding rept = { _("Repeat"), KEY_REPEAT_ITEM }; + struct binding enote = { _("EditNote"), KEY_EDIT_NOTE }; + struct binding vnote = { _("ViewNote"), KEY_VIEW_NOTE }; + struct binding rprio = { _("Prio.+"), KEY_RAISE_PRIORITY }; + struct binding lprio = { _("Prio.-"), KEY_LOWER_PRIORITY }; + struct binding othr = { _("OtherCmd"), KEY_GENERIC_OTHER_CMD }; struct binding *bindings_cal[] = { &help, &quit, &save, &chgvu, &nview, &pview, &up, &down, &left, &right, @@ -703,70 +641,65 @@ wins_status_bar (void) &gnweek, &gpweek, &togo, &today, &conf, &appt, &todo, &draw }; - enum win active_panel = wins_slctd (); + enum win active_panel = wins_slctd(); struct binding **bindings; int bindings_size; - switch (active_panel) - { - case CAL: - bindings = bindings_cal; - bindings_size = sizeof (bindings_cal) / sizeof (bindings_cal[0]); - break; - case APP: - bindings = bindings_apoint; - bindings_size = sizeof (bindings_apoint) / sizeof (bindings_apoint[0]); - break; - case TOD: - bindings = bindings_todo; - bindings_size = sizeof (bindings_todo) / sizeof (bindings_todo[0]); - break; - default: - EXIT (_("unknown panel")); - /* NOTREACHED */ - } - - keys_display_bindings_bar (win[STA].p, bindings, bindings_size, - (KEYS_CMDS_PER_LINE * 2 - 1) * (status_page - 1), - KEYS_CMDS_PER_LINE * 2, &othr); + switch (active_panel) { + case CAL: + bindings = bindings_cal; + bindings_size = sizeof(bindings_cal) / sizeof(bindings_cal[0]); + break; + case APP: + bindings = bindings_apoint; + bindings_size = sizeof(bindings_apoint) / sizeof(bindings_apoint[0]); + break; + case TOD: + bindings = bindings_todo; + bindings_size = sizeof(bindings_todo) / sizeof(bindings_todo[0]); + break; + default: + EXIT(_("unknown panel")); + /* NOTREACHED */ + } + + keys_display_bindings_bar(win[STA].p, bindings, bindings_size, + (KEYS_CMDS_PER_LINE * 2 - 1) * (status_page - 1), + KEYS_CMDS_PER_LINE * 2, &othr); } /* Erase status bar. */ -void -wins_erase_status_bar (void) +void wins_erase_status_bar(void) { - erase_window_part (win[STA].p, 0, 0, col, STATUSHEIGHT); + erase_window_part(win[STA].p, 0, 0, col, STATUSHEIGHT); } /* Update the status bar page number to display other commands. */ -void -wins_other_status_page (int panel) +void wins_other_status_page(int panel) { int nb_item, max_page; - switch (panel) - { - case CAL: - nb_item = NB_CAL_CMDS; - break; - case APP: - nb_item = NB_APP_CMDS; - break; - case TOD: - nb_item = NB_TOD_CMDS; - break; - default: - EXIT (_("unknown panel")); - /* NOTREACHED */ - } + switch (panel) { + case CAL: + nb_item = NB_CAL_CMDS; + break; + case APP: + nb_item = NB_APP_CMDS; + break; + case TOD: + nb_item = NB_TOD_CMDS; + break; + default: + EXIT(_("unknown panel")); + /* NOTREACHED */ + } max_page = nb_item / (KEYS_CMDS_PER_LINE * 2 - 1) + 1; status_page = (status_page % max_page) + 1; } /* Reset the status bar page. */ -void -wins_reset_status_page (void) +void wins_reset_status_page(void) { status_page = 1; } diff --git a/test/run-test.c b/test/run-test.c index 64618ee..c779be7 100644 --- a/test/run-test.c +++ b/test/run-test.c @@ -50,108 +50,94 @@ * appropriate file descriptors are written to pfdin/pfdout. */ static int -fork_exec (int *pfdin, int *pfdout, const char *path, char *const *arg) +fork_exec(int *pfdin, int *pfdout, const char *path, char *const *arg) { int pin[2], pout[2]; int pid; - if (pfdin && (pipe (pin) == -1)) + if (pfdin && (pipe(pin) == -1)) return 0; - if (pfdout && (pipe (pout) == -1)) + if (pfdout && (pipe(pout) == -1)) return 0; - if ((pid = fork ()) == 0) - { - if (pfdout) - { - if (dup2 (pout[0], STDIN_FILENO) < 0) - _exit (127); - close (pout[0]); - close (pout[1]); - } + if ((pid = fork()) == 0) { + if (pfdout) { + if (dup2(pout[0], STDIN_FILENO) < 0) + _exit(127); + close(pout[0]); + close(pout[1]); + } - if (pfdin) - { - if (dup2 (pin[1], STDOUT_FILENO) < 0) - _exit (127); - close (pin[0]); - close (pin[1]); - } - - execvp (path, arg); - _exit (127); + if (pfdin) { + if (dup2(pin[1], STDOUT_FILENO) < 0) + _exit(127); + close(pin[0]); + close(pin[1]); } - else - { + + execvp(path, arg); + _exit(127); + } else { + if (pfdin) + close(pin[1]); + if (pfdout) + close(pout[0]); + + if (pid > 0) { + if (pfdin) { + fcntl(pin[0], F_SETFD, FD_CLOEXEC); + *pfdin = pin[0]; + } + if (pfdout) { + fcntl(pout[1], F_SETFD, FD_CLOEXEC); + *pfdout = pout[1]; + } + } else { if (pfdin) - close (pin[1]); + close(pin[0]); if (pfdout) - close (pout[0]); - - if (pid > 0) - { - if (pfdin) - { - fcntl (pin[0], F_SETFD, FD_CLOEXEC); - *pfdin = pin[0]; - } - if (pfdout) - { - fcntl (pout[1], F_SETFD, FD_CLOEXEC); - *pfdout = pout[1]; - } - } - else - { - if (pfdin) - close (pin[0]); - if (pfdout) - close (pout[1]); - return 0; - } + close(pout[1]); + return 0; } + } return pid; } /* Wait for a child process to terminate. */ -static int -child_wait (int *pfdin, int *pfdout, int pid) +static int child_wait(int *pfdin, int *pfdout, int pid) { int stat; if (pfdin) - close (*pfdin); + close(*pfdin); if (pfdout) - close (*pfdout); + close(*pfdout); - waitpid (pid, &stat, 0); + waitpid(pid, &stat, 0); return stat; } /* Print error message and bail out. */ -static void -die (const char *format, ...) +static void die(const char *format, ...) { va_list arg; - va_start (arg, format); - fprintf (stderr, "error: "); - vfprintf (stderr, format, arg); - va_end (arg); + va_start(arg, format); + fprintf(stderr, "error: "); + vfprintf(stderr, format, arg); + va_end(arg); - exit (1); + exit(1); } /* Print usage message. */ -static void -usage (void) +static void usage(void) { - printf ("usage: run-test [-h|--help] <test>...\n"); + printf("usage: run-test [-h|--help] <test>...\n"); } /* Run test with a specific name. */ -static int -run_test (const char *name, int expect_failure) +static int run_test(const char *name, int expect_failure) { char filename[BUFSIZ]; char *arg1[3], *arg2[3]; @@ -160,93 +146,84 @@ run_test (const char *name, int expect_failure) char buf1[BUFSIZ], buf2[BUFSIZ]; int ret = 1; - if (snprintf (filename, BUFSIZ, "./%s", name) >= BUFSIZ) - die ("file name too long\n"); + if (snprintf(filename, BUFSIZ, "./%s", name) >= BUFSIZ) + die("file name too long\n"); - if (access (filename, F_OK) != 0) - { - if (snprintf (filename, BUFSIZ, "./%s.sh", name) >= BUFSIZ) - die ("file name too long\n"); + if (access(filename, F_OK) != 0) { + if (snprintf(filename, BUFSIZ, "./%s.sh", name) >= BUFSIZ) + die("file name too long\n"); - if (access (filename, F_OK) != 0) - die ("test not found: %s\n", name); - } + if (access(filename, F_OK) != 0) + die("test not found: %s\n", name); + } - if (access (filename, X_OK) != 0) - die ("script is not executable: %s\n", filename); + if (access(filename, X_OK) != 0) + die("script is not executable: %s\n", filename); arg1[0] = arg2[0] = filename; arg1[1] = "expected"; arg2[1] = "actual"; arg1[2] = arg2[2] = NULL; - printf ("Running %s...", name); + printf("Running %s...", name); - if ((pid1 = fork_exec (&pin1, NULL, *arg1, arg1)) < 0) - die("failed to execute %s: %s\n", filename, strerror (errno)); + if ((pid1 = fork_exec(&pin1, NULL, *arg1, arg1)) < 0) + die("failed to execute %s: %s\n", filename, strerror(errno)); - if ((pid2 = fork_exec (&pin2, NULL, *arg2, arg2)) < 0) - die("failed to execute %s: %s\n", filename, strerror (errno)); + if ((pid2 = fork_exec(&pin2, NULL, *arg2, arg2)) < 0) + die("failed to execute %s: %s\n", filename, strerror(errno)); - fpin1 = fdopen (pin1, "r"); - fpin2 = fdopen (pin2, "r"); + fpin1 = fdopen(pin1, "r"); + fpin2 = fdopen(pin2, "r"); - while (fgets (buf1, BUFSIZ, fpin1)) - { - if (!fgets (buf2, BUFSIZ, fpin2) || strcmp (buf1, buf2) != 0) - { - ret = 0; - break; - } + while (fgets(buf1, BUFSIZ, fpin1)) { + if (!fgets(buf2, BUFSIZ, fpin2) || strcmp(buf1, buf2) != 0) { + ret = 0; + break; } + } if (fpin1) - fclose (fpin1); + fclose(fpin1); if (fpin2) - fclose (fpin2); + fclose(fpin2); - if (child_wait (&pin1, NULL, pid1) != 0) + if (child_wait(&pin1, NULL, pid1) != 0) ret = 0; - if (child_wait (&pin2, NULL, pid2) != 0) + if (child_wait(&pin2, NULL, pid2) != 0) ret = 0; if (expect_failure) ret = 1 - ret; if (ret == 1) - printf (" ok\n"); + printf(" ok\n"); else - printf (" FAIL\n"); + printf(" FAIL\n"); return ret; } -int -main (int argc, char **argv) +int main(int argc, char **argv) { int i; if (!argv[1]) - die ("no tests specified, bailing out\n"); - else if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) - { - usage(); - return 0; - } - - for (i = 1; i < argc; i++) - { - if (*argv[i] == '!') - { - if (!run_test (argv[i] + 1, 1)) - return 1; - } - else - { - if (!run_test (argv[i], 0)) - return 1; - } + die("no tests specified, bailing out\n"); + else if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { + usage(); + return 0; + } + + for (i = 1; i < argc; i++) { + if (*argv[i] == '!') { + if (!run_test(argv[i] + 1, 1)) + return 1; + } else { + if (!run_test(argv[i], 0)) + return 1; } + } return 0; } |