summaryrefslogtreecommitdiffstats
path: root/src/day.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/day.c')
-rwxr-xr-xsrc/day.c1432
1 files changed, 747 insertions, 685 deletions
diff --git a/src/day.c b/src/day.c
index e2a587f..fcb8d6c 100755
--- a/src/day.c
+++ b/src/day.c
@@ -1,4 +1,4 @@
-/* $calcurse: day.c,v 1.35 2008/04/09 20:38:29 culot Exp $ */
+/* $calcurse: day.c,v 1.36 2008/04/12 21:14:03 culot Exp $ */
/*
* Calcurse - text-based organizer
@@ -36,83 +36,90 @@
#include "custom.h"
#include "day.h"
-static struct day_item_s *day_items_ptr;
-static struct day_saved_item_s *day_saved_item = NULL;
+static struct day_item_s *day_items_ptr;
+static struct day_saved_item_s *day_saved_item = NULL;
/* Free the current day linked list containing the events and appointments. */
-static void
-day_free_list(void)
+static void
+day_free_list (void)
{
- struct day_item_s *p, *q;
-
- for (p = day_items_ptr; p != 0; p = q) {
- q = p->next;
- free(p->mesg);
- free(p);
- }
- day_items_ptr = NULL;
+ struct day_item_s *p, *q;
+
+ for (p = day_items_ptr; p != 0; p = q)
+ {
+ q = p->next;
+ free (p->mesg);
+ free (p);
+ }
+ day_items_ptr = NULL;
}
/* Add an event in the current day list */
static struct day_item_s *
-day_add_event(int type, char *mesg, char *note, long day, int id)
+day_add_event (int type, char *mesg, char *note, long day, int id)
{
- struct day_item_s *o, **i;
- o = (struct day_item_s *) malloc(sizeof(struct day_item_s));
- o->mesg = (char *) malloc(strlen(mesg) + 1);
- strncpy(o->mesg, mesg, strlen(mesg) + 1);
- o->note = note;
- o->type = type;
- o->appt_dur = 0;
- o->appt_pos = 0;
- o->start = day;
- o->evnt_id = id;
- i = &day_items_ptr;
- for (;;) {
- if (*i == 0) {
- o->next = *i;
- *i = o;
- break;
- }
- i = &(*i)->next;
+ struct day_item_s *o, **i;
+ o = (struct day_item_s *) malloc (sizeof (struct day_item_s));
+ o->mesg = (char *) malloc (strlen (mesg) + 1);
+ strncpy (o->mesg, mesg, strlen (mesg) + 1);
+ o->note = note;
+ o->type = type;
+ o->appt_dur = 0;
+ o->appt_pos = 0;
+ o->start = day;
+ o->evnt_id = id;
+ i = &day_items_ptr;
+ for (;;)
+ {
+ if (*i == 0)
+ {
+ o->next = *i;
+ *i = o;
+ break;
}
- return o;
+ i = &(*i)->next;
+ }
+ return (o);
}
/* Add an appointment in the current day list. */
static struct day_item_s *
-day_add_apoint(int type, char *mesg, char *note, long start, long dur,
- char state, int real_pos)
+day_add_apoint (int type, char *mesg, char *note, long start, long dur,
+ char state, int real_pos)
{
- struct day_item_s *o, **i;
- int insert_item = 0;
-
- o = (struct day_item_s *) malloc(sizeof(struct day_item_s));
- o->mesg = (char *) malloc(strlen(mesg) + 1);
- strncpy(o->mesg, mesg, strlen(mesg) + 1);
- o->note = note;
- o->start = start;
- o->appt_dur = dur;
- o->appt_pos = real_pos;
- o->state = state;
- o->type = type;
- o->evnt_id = 0;
- i = &day_items_ptr;
- for (;;) {
- if (*i == 0) {
- insert_item = 1;
- } else if ( ((*i)->start > start) &&
- ((*i)->type > EVNT) ) {
- insert_item = 1;
- }
- if (insert_item) {
- o->next = *i;
- *i = o;
- break;
- }
- i = &(*i)->next;
+ struct day_item_s *o, **i;
+ int insert_item = 0;
+
+ o = (struct day_item_s *) malloc (sizeof (struct day_item_s));
+ o->mesg = (char *) malloc (strlen (mesg) + 1);
+ strncpy (o->mesg, mesg, strlen (mesg) + 1);
+ o->note = note;
+ o->start = start;
+ o->appt_dur = dur;
+ o->appt_pos = real_pos;
+ o->state = state;
+ o->type = type;
+ o->evnt_id = 0;
+ i = &day_items_ptr;
+ for (;;)
+ {
+ if (*i == 0)
+ {
+ insert_item = 1;
+ }
+ else if (((*i)->start > start) && ((*i)->type > EVNT))
+ {
+ insert_item = 1;
+ }
+ if (insert_item)
+ {
+ o->next = *i;
+ *i = o;
+ break;
}
- return o;
+ i = &(*i)->next;
+ }
+ return (o);
}
/*
@@ -122,22 +129,23 @@ 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)
{
- struct event_s *j;
- struct day_item_s *ptr;
- int e_nb = 0;
-
- for (j = eventlist; j != 0; j = j->next) {
- if (event_inday(j, date)) {
- e_nb++;
- ptr = day_add_event(EVNT, j->mesg, j->note, j->day,
- j->id);
- }
+ struct event_s *j;
+ struct day_item_s *ptr;
+ int e_nb = 0;
+
+ for (j = eventlist; j != 0; j = j->next)
+ {
+ if (event_inday (j, date))
+ {
+ e_nb++;
+ ptr = day_add_event (EVNT, j->mesg, j->note, j->day, j->id);
}
+ }
- return e_nb;
+ return (e_nb);
}
/*
@@ -147,23 +155,24 @@ 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)
{
- struct recur_event_s *j;
- struct day_item_s *ptr;
- int e_nb = 0;
-
- for (j = recur_elist; j != 0; j = j->next) {
- if (recur_item_inday(j->day, j->exc, j->rpt->type, j->rpt->freq,
- j->rpt->until, date)) {
- e_nb++;
- ptr = day_add_event(RECUR_EVNT, j->mesg, j->note,
- j->day, j->id);
- }
+ struct recur_event_s *j;
+ struct day_item_s *ptr;
+ int e_nb = 0;
+
+ for (j = recur_elist; j != 0; j = j->next)
+ {
+ if (recur_item_inday (j->day, j->exc, j->rpt->type, j->rpt->freq,
+ j->rpt->until, date))
+ {
+ e_nb++;
+ ptr = day_add_event (RECUR_EVNT, j->mesg, j->note, j->day, j->id);
}
+ }
- return e_nb;
+ return (e_nb);
}
/*
@@ -173,24 +182,26 @@ 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)
{
- apoint_llist_node_t *j;
- struct day_item_s *ptr;
- int a_nb = 0;
-
- pthread_mutex_lock(&(alist_p->mutex));
- for (j = alist_p->root; j != 0; j = j->next) {
- if (apoint_inday(j, date)) {
- a_nb++;
- ptr = day_add_apoint(APPT, j->mesg, j->note, j->start,
- j->dur, j->state, 0);
- }
+ apoint_llist_node_t *j;
+ struct day_item_s *ptr;
+ int a_nb = 0;
+
+ pthread_mutex_lock (&(alist_p->mutex));
+ for (j = alist_p->root; j != 0; j = j->next)
+ {
+ if (apoint_inday (j, date))
+ {
+ a_nb++;
+ ptr = day_add_apoint (APPT, j->mesg, j->note, j->start,
+ j->dur, j->state, 0);
}
- pthread_mutex_unlock(&(alist_p->mutex));
+ }
+ pthread_mutex_unlock (&(alist_p->mutex));
- return a_nb;
+ return (a_nb);
}
/*
@@ -200,27 +211,30 @@ 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)
{
- recur_apoint_llist_node_t *j;
- struct day_item_s *ptr;
- long real_start;
- int a_nb = 0, n = 0;
-
- pthread_mutex_lock(&(recur_alist_p->mutex));
- for (j = recur_alist_p->root; j != 0; j = j->next) {
- if ((real_start = recur_item_inday(j->start, j->exc,
- j->rpt->type, j->rpt->freq, j->rpt->until, date)) ){
- a_nb++;
- ptr = day_add_apoint(RECUR_APPT, j->mesg, j->note,
- real_start, j->dur, j->state, n);
- n++;
- }
+ recur_apoint_llist_node_t *j;
+ struct day_item_s *ptr;
+ long real_start;
+ int a_nb = 0, n = 0;
+
+ pthread_mutex_lock (&(recur_alist_p->mutex));
+ for (j = recur_alist_p->root; j != 0; j = j->next)
+ {
+ if ((real_start = recur_item_inday (j->start, j->exc,
+ j->rpt->type, j->rpt->freq,
+ j->rpt->until, date)))
+ {
+ a_nb++;
+ ptr = day_add_apoint (RECUR_APPT, j->mesg, j->note,
+ real_start, j->dur, j->state, n);
+ n++;
}
- pthread_mutex_unlock(&(recur_alist_p->mutex));
+ }
+ pthread_mutex_unlock (&(recur_alist_p->mutex));
- return a_nb;
+ return (a_nb);
}
/*
@@ -231,30 +245,30 @@ day_store_recur_apoints(long date)
* and the length of the new pad to write is returned.
* 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)
+static int
+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;
-
- pad_length = nb_events = nb_apoints = 0;
- nb_recur_events = nb_recur_apoints = 0;
-
- if (day_items_ptr != 0)
- day_free_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);
- *pnb_apoints = nb_apoints;
- pad_length = nb_recur_events + nb_events + 1 +
- 3*(nb_recur_apoints + nb_apoints);
- *pnb_apoints += nb_recur_apoints;
- *pnb_events += nb_recur_events;
-
- return pad_length;
+ int pad_length;
+ int nb_events, nb_recur_events;
+ int nb_apoints, nb_recur_apoints;
+
+ pad_length = nb_events = nb_apoints = 0;
+ nb_recur_events = nb_recur_apoints = 0;
+
+ if (day_items_ptr != 0)
+ day_free_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);
+ *pnb_apoints = nb_apoints;
+ pad_length = (nb_recur_events + nb_events + 1 +
+ 3 * (nb_recur_apoints + nb_apoints));
+ *pnb_apoints += nb_recur_apoints;
+ *pnb_events += nb_recur_events;
+
+ return (pad_length);
}
/*
@@ -263,32 +277,32 @@ day_store_items(long date, unsigned *pnb_events, unsigned *pnb_apoints)
* day. This is useful to speed up the appointment panel update.
*/
day_items_nb_t *
-day_process_storage(date_t *slctd_date, bool day_changed, day_items_nb_t *inday)
+day_process_storage (date_t *slctd_date, bool day_changed,
+ day_items_nb_t *inday)
{
- long date;
- date_t day;
+ long date;
+ date_t day;
- if (slctd_date)
- day = *slctd_date;
- else
- calendar_store_current_date(&day);
+ if (slctd_date)
+ day = *slctd_date;
+ else
+ calendar_store_current_date (&day);
- date = date2sec(day, 0, 0);
+ date = date2sec (day, 0, 0);
- /* Inits */
- if (apad->length != 0)
- delwin(apad->ptrwin);
+ /* Inits */
+ if (apad->length != 0)
+ delwin (apad->ptrwin);
- /* Store the events and appointments (recursive and normal items). */
- apad->length = day_store_items(date,
- &inday->nb_events, &inday->nb_apoints);
+ /* Store the events and appointments (recursive and normal items). */
+ 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);
+ /* Create the new pad with its new length. */
+ if (day_changed)
+ apad->first_onscreen = 0;
+ apad->ptrwin = newpad (apad->length, apad->width);
- return (inday);
+ return (inday);
}
/*
@@ -296,69 +310,70 @@ day_process_storage(date_t *slctd_date, bool day_changed, day_items_nb_t *inday)
* day_item_s
*/
static void
-day_item_s2apoint_s(apoint_llist_node_t *a, struct day_item_s *p)
+day_item_s2apoint_s (apoint_llist_node_t *a, struct day_item_s *p)
{
- a->state = p->state;
- a->start = p->start;
- a->dur = p->appt_dur;
- a->mesg = p->mesg;
+ a->state = p->state;
+ a->start = p->start;
+ a->dur = p->appt_dur;
+ a->mesg = p->mesg;
}
/*
* Print an item date in the appointment panel.
*/
-static void
-display_item_date(int incolor, apoint_llist_node_t *i, int type, long date,
- int y, int x)
+static void
+display_item_date (int incolor, apoint_llist_node_t *i, int type, long date,
+ int y, int x)
{
- WINDOW *win;
- char a_st[100], a_end[100];
- int recur = 0;
-
- win = apad->ptrwin;
- apoint_sec2str(i, type, date, a_st, a_end);
- if (type == RECUR_EVNT || type == RECUR_APPT)
- recur = 1;
- if (incolor == 0)
- custom_apply_attr(win, ATTR_HIGHEST);
- if (recur)
- if (i->state & APOINT_NOTIFY)
- mvwprintw(win, y, x, " *!%s -> %s", a_st, a_end);
- else
- mvwprintw(win, y, x, " * %s -> %s", a_st, a_end);
- else
- if (i->state & APOINT_NOTIFY)
- mvwprintw(win, y, x, " -!%s -> %s", a_st, a_end);
- else
- mvwprintw(win, y, x, " - %s -> %s", a_st, a_end);
- if (incolor == 0)
- custom_remove_attr(win, ATTR_HIGHEST);
+ WINDOW *win;
+ char a_st[100], a_end[100];
+ int recur = 0;
+
+ win = apad->ptrwin;
+ apoint_sec2str (i, type, date, a_st, a_end);
+ if (type == RECUR_EVNT || type == RECUR_APPT)
+ recur = 1;
+ if (incolor == 0)
+ custom_apply_attr (win, ATTR_HIGHEST);
+ if (recur)
+ if (i->state & APOINT_NOTIFY)
+ mvwprintw (win, y, x, " *!%s -> %s", a_st, a_end);
+ else
+ mvwprintw (win, y, x, " * %s -> %s", a_st, a_end);
+ else if (i->state & APOINT_NOTIFY)
+ mvwprintw (win, y, x, " -!%s -> %s", a_st, a_end);
+ else
+ mvwprintw (win, y, x, " - %s -> %s", a_st, a_end);
+ if (incolor == 0)
+ custom_remove_attr (win, ATTR_HIGHEST);
}
/*
* Print an item description in the corresponding panel window.
*/
-static void
-display_item(int incolor, char *msg, int recur, int note, int len, int y, int x)
+static void
+display_item (int incolor, char *msg, int recur, int note, int len, int y,
+ int x)
{
- WINDOW *win;
- int ch_recur, ch_note;
- char buf[len];
-
- win = apad->ptrwin;
- ch_recur = (recur) ? '*' : ' ';
- ch_note = (note) ? '>' : ' ';
- if (incolor == 0)
- custom_apply_attr(win, ATTR_HIGHEST);
- if (strlen(msg) < len)
- mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_note, msg);
- else {
- strncpy(buf, msg, len - 1);
- buf[len - 1] = '\0';
- mvwprintw(win, y, x, " %c%c%s...", ch_recur, ch_note, buf);
- }
- if (incolor == 0)
- custom_remove_attr(win, ATTR_HIGHEST);
+ WINDOW *win;
+ int ch_recur, ch_note;
+ char buf[len];
+
+ win = apad->ptrwin;
+ ch_recur = (recur) ? '*' : ' ';
+ ch_note = (note) ? '>' : ' ';
+ if (incolor == 0)
+ custom_apply_attr (win, ATTR_HIGHEST);
+ if (strlen (msg) < len)
+ mvwprintw (win, y, x, " %c%c%s", ch_recur, ch_note, msg);
+ else
+ {
+ strncpy (buf, msg, len - 1);
+ buf[len - 1] = '\0';
+ mvwprintw (win, y, x, " %c%c%s...", ch_recur, ch_note, buf);
+ }
+ if (incolor == 0)
+ custom_remove_attr (win, ATTR_HIGHEST);
}
/*
@@ -368,394 +383,426 @@ display_item(int incolor, char *msg, int recur, int note, int len, int y, int x)
* 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)
{
- struct day_item_s *p;
- apoint_llist_node_t a;
- int line, item_number, max_pos, recur;
- const int x_pos = 0;
- bool draw_line = false;
-
- line = item_number = 0;
- max_pos = length;
-
- /* Initialize the structure used to store highlited item. */
- if (day_saved_item == NULL) {
- day_saved_item = (struct day_saved_item_s *)
- malloc(sizeof(struct day_saved_item_s));
- day_saved_item->mesg = (char *) malloc(sizeof(char));
- }
-
- for (p = day_items_ptr; p != 0; p = p->next) {
- if (p->type == RECUR_EVNT || p->type == RECUR_APPT)
- recur = 1;
- else
- recur = 0;
- /* First print the events for current day. */
- if (p->type < RECUR_APPT) {
- item_number++;
- if (item_number - incolor == 0) {
- day_saved_item->type = p->type;
- day_saved_item->mesg = p->mesg;
- }
- display_item(item_number - incolor, p->mesg, recur,
- (p->note != NULL) ? 1 : 0, width - 7, line, x_pos);
- line++;
- draw_line = true;
- } 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 = false;
- }
-
- /* Last print the appointments for current day. */
- item_number++;
- day_item_s2apoint_s(&a, p);
- if (item_number - incolor == 0) {
- day_saved_item->type = p->type;
- day_saved_item->mesg = p->mesg;
- apoint_sec2str(&a, p->type, date,
- day_saved_item->start, day_saved_item->end);
- }
- display_item_date(item_number - incolor, &a, p->type,
- date, line + 1, x_pos);
- display_item(item_number - incolor, p->mesg, 0,
- (p->note != NULL) ? 1 : 0, width - 7, line + 2,
- x_pos);
- line += 3;
- }
+ struct day_item_s *p;
+ apoint_llist_node_t a;
+ int line, item_number, max_pos, recur;
+ const int x_pos = 0;
+ bool draw_line = false;
+
+ line = item_number = 0;
+ max_pos = length;
+
+ /* Initialize the structure used to store highlited item. */
+ if (day_saved_item == NULL)
+ {
+ day_saved_item = (struct day_saved_item_s *)
+ malloc (sizeof (struct day_saved_item_s));
+ day_saved_item->mesg = (char *) malloc (sizeof (char));
+ }
+
+ for (p = day_items_ptr; p != 0; p = p->next)
+ {
+ if (p->type == RECUR_EVNT || p->type == RECUR_APPT)
+ recur = 1;
+ else
+ recur = 0;
+ /* First print the events for current day. */
+ if (p->type < RECUR_APPT)
+ {
+ item_number++;
+ if (item_number - incolor == 0)
+ {
+ day_saved_item->type = p->type;
+ day_saved_item->mesg = p->mesg;
+ }
+ display_item (item_number - incolor, p->mesg, recur,
+ (p->note != NULL) ? 1 : 0, width - 7, line, x_pos);
+ line++;
+ draw_line = true;
+ }
+ 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 = false;
+ }
+ /* Last print the appointments for current day. */
+ item_number++;
+ day_item_s2apoint_s (&a, p);
+ if (item_number - incolor == 0)
+ {
+ day_saved_item->type = p->type;
+ day_saved_item->mesg = p->mesg;
+ apoint_sec2str (&a, p->type, date,
+ day_saved_item->start, day_saved_item->end);
+ }
+ display_item_date (item_number - incolor, &a, p->type,
+ date, line + 1, x_pos);
+ display_item (item_number - incolor, p->mesg, 0,
+ (p->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)
{
- char *error =
- _("FATAL ERROR in day_popup_item: unknown item type\n");
-
- if (day_saved_item->type == EVNT || day_saved_item->type == RECUR_EVNT)
- 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 :"));
- else
- ierror(error, IERROR_FATAL);
- /* NOTREACHED */
+ char *error = _("FATAL ERROR in day_popup_item: unknown item type\n");
+
+ if (day_saved_item->type == EVNT || day_saved_item->type == RECUR_EVNT)
+ 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 :"));
+ else
+ ierror (error, IERROR_FATAL);
+ /* NOTREACHED */
}
/*
* 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(date_t day)
+int
+day_check_if_item (date_t day)
{
- struct recur_event_s *re;
- recur_apoint_llist_node_t *ra;
- struct event_s *e;
- apoint_llist_node_t *a;
- const long date = date2sec(day, 0, 0);
-
- for (re = recur_elist; re != 0; re = re->next)
- if (recur_item_inday(re->day, re->exc, re->rpt->type,
- re->rpt->freq, re->rpt->until, date))
- return 1;
-
- pthread_mutex_lock(&(recur_alist_p->mutex));
- for (ra = recur_alist_p->root; ra != 0; ra = ra->next)
- if (recur_item_inday(ra->start, ra->exc, ra->rpt->type,
- ra->rpt->freq, ra->rpt->until, date)) {
- pthread_mutex_unlock(
- &(recur_alist_p->mutex));
- return 1;
- }
- pthread_mutex_unlock(&(recur_alist_p->mutex));
-
- for (e = eventlist; e != 0; e = e->next)
- if (event_inday(e, date))
- return 1;
-
- pthread_mutex_lock(&(alist_p->mutex));
- for (a = alist_p->root; a != 0; a = a->next)
- if (apoint_inday(a, date)) {
- pthread_mutex_unlock(&(alist_p->mutex));
- return 1;
- }
- pthread_mutex_unlock(&(alist_p->mutex));
-
- return 0;
+ struct recur_event_s *re;
+ recur_apoint_llist_node_t *ra;
+ struct event_s *e;
+ apoint_llist_node_t *a;
+ const long date = date2sec (day, 0, 0);
+
+ for (re = recur_elist; re != 0; re = re->next)
+ if (recur_item_inday (re->day, re->exc, re->rpt->type,
+ re->rpt->freq, re->rpt->until, date))
+ return (1);
+
+ pthread_mutex_lock (&(recur_alist_p->mutex));
+ for (ra = recur_alist_p->root; ra != 0; ra = ra->next)
+ if (recur_item_inday (ra->start, ra->exc, ra->rpt->type,
+ ra->rpt->freq, ra->rpt->until, date))
+ {
+ pthread_mutex_unlock (&(recur_alist_p->mutex));
+ return (1);
+ }
+ pthread_mutex_unlock (&(recur_alist_p->mutex));
+
+ for (e = eventlist; e != 0; e = e->next)
+ if (event_inday (e, date))
+ return (1);
+
+ pthread_mutex_lock (&(alist_p->mutex));
+ for (a = alist_p->root; a != 0; a = a->next)
+ if (apoint_inday (a, date))
+ {
+ pthread_mutex_unlock (&(alist_p->mutex));
+ return (1);
+ }
+ pthread_mutex_unlock (&(alist_p->mutex));
+
+ return (0);
}
/* Request the user to enter a new time. */
static char *
-day_edit_time(long time)
+day_edit_time (long time)
{
- char *timestr;
- char *msg_time = _("Enter the new time ([hh:mm] or [h:mm]) : ");
- char *enter_str = _("Press [Enter] to continue");
- char *fmt_msg =
- _("You entered an invalid time, should be [h:mm] or [hh:mm]");
-
- while (1) {
- status_mesg(msg_time, "");
- timestr = date_sec2hour_str(time);
- updatestring(win[STA].p, &timestr, 0, 1);
- if (check_time(timestr) != 1 || strlen(timestr) == 0) {
- status_mesg(fmt_msg, enter_str);
- wgetch(win[STA].p);
- } else
- return (timestr);
+ char *timestr;
+ char *msg_time = _("Enter the new time ([hh:mm] or [h:mm]) : ");
+ char *enter_str = _("Press [Enter] to continue");
+ char *fmt_msg = _("You entered an invalid time, should be [h:mm] or [hh:mm]");
+
+ while (1)
+ {
+ status_mesg (msg_time, "");
+ timestr = date_sec2hour_str (time);
+ updatestring (win[STA].p, &timestr, 0, 1);
+ if (check_time (timestr) != 1 || strlen (timestr) == 0)
+ {
+ status_mesg (fmt_msg, enter_str);
+ wgetch (win[STA].p);
}
+ else
+ return (timestr);
+ }
}
static void
-update_start_time(long *start, long *dur)
+update_start_time (long *start, long *dur)
{
- long newtime;
- unsigned hr, mn;
- int valid_date;
- char *timestr;
- char *msg_wrong_time =
- _("Invalid time: start time must be before end time!");
- char *msg_enter = _("Press [Enter] to continue");
-
- do {
- timestr = day_edit_time(*start);
- sscanf(timestr, "%u:%u", &hr, &mn);
- free(timestr);
- 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);
+ long newtime;
+ unsigned hr, mn;
+ int valid_date;
+ char *timestr;
+ char *msg_wrong_time = _("Invalid time: start time must be before end time!");
+ char *msg_enter = _("Press [Enter] to continue");
+
+ do
+ {
+ timestr = day_edit_time (*start);
+ sscanf (timestr, "%u:%u", &hr, &mn);
+ free (timestr);
+ 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)
+update_duration (long *start, long *dur)
{
- long newtime;
- unsigned hr, mn;
- char *timestr;
-
- timestr = day_edit_time(*start + *dur);
- sscanf(timestr, "%u:%u", &hr, &mn);
- free(timestr);
- newtime = update_time_in_date(*start, hr, mn);
- *dur = (newtime > *start) ? newtime - *start :
- DAYINSEC + newtime - *start;
+ long newtime;
+ unsigned hr, mn;
+ char *timestr;
+
+ timestr = day_edit_time (*start + *dur);
+ sscanf (timestr, "%u:%u", &hr, &mn);
+ free (timestr);
+ newtime = update_time_in_date (*start, hr, mn);
+ *dur = (newtime > *start) ? newtime - *start : DAYINSEC + newtime - *start;
}
static void
-update_desc(char **desc)
+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_s **rpt, const long start, conf_t *conf)
+update_rept (struct rpt_s **rpt, const long start, conf_t *conf)
{
- const int SINGLECHAR = 2;
- int ch, cancel, newfreq, date_entered;
- long newuntil;
- char outstr[BUFSIZ];
- char *typstr, *freqstr, *timstr;
- char *msg_rpt_type =
- _("Enter the new repetition type: (D)aily, (W)eekly, "
- "(M)onthly, (Y)early");
- char *msg_rpt_ans = _("[D/W/M/Y] ");
- char *msg_wrong_freq = _("The frequence you entered is not valid.");
- char *msg_wrong_time =
- _("Invalid time: start time must be before end time!");
- char *msg_wrong_date = _("The entered date is not valid.");
- char *msg_fmts = "Possible formats are [%s] or '0' "
- "for an endless repetetition";
- char *msg_enter = _("Press [Enter] to continue");
-
- do {
- status_mesg(msg_rpt_type, msg_rpt_ans);
- typstr = (char *)malloc(sizeof(char) * SINGLECHAR);
- snprintf(typstr, SINGLECHAR, "%c", recur_def2char((*rpt)->type));
- cancel = updatestring(win[STA].p, &typstr, 0, 1);
- if (cancel) {
- free(typstr);
- return;
- } else {
- ch = toupper(*typstr);
- free(typstr);
- }
- } while ((ch != 'D') && (ch != 'W') && (ch != 'M') && (ch != 'Y'));
-
- do {
- status_mesg(_("Enter the new repetition frequence:"), "");
- freqstr = (char *)malloc(BUFSIZ);
- snprintf(freqstr, BUFSIZ, "%d", (*rpt)->freq);
- cancel = updatestring(win[STA].p, &freqstr, 0, 1);
- if (cancel) {
- free(freqstr);
- return;
- } else {
- newfreq = atoi(freqstr);
- free(freqstr);
- if (newfreq == 0) {
- status_mesg(msg_wrong_freq, msg_enter);
- wgetch(win[STA].p);
- }
- }
- } 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));
- cancel = updatestring(win[STA].p, &timstr, 0, 1);
- if (cancel) {
- free(timstr);
- return;
- }
- if (strcmp(timstr, "0") == 0) {
- newuntil = 0;
- date_entered = 1;
- } else {
- struct tm *lt;
- time_t t;
- date_t new_date;
- int newmonth, newday, newyear;
-
- if (parse_date(timstr, conf->input_datefmt,
- &newyear, &newmonth, &newday)) {
- 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;
- }
+ const int SINGLECHAR = 2;
+ int ch, cancel, newfreq, date_entered;
+ long newuntil;
+ char outstr[BUFSIZ];
+ char *typstr, *freqstr, *timstr;
+ char *msg_rpt_type = _("Enter the new repetition type: (D)aily, (W)eekly, "
+ "(M)onthly, (Y)early");
+ char *msg_rpt_ans = _("[D/W/M/Y] ");
+ char *msg_wrong_freq = _("The frequence you entered is not valid.");
+ char *msg_wrong_time = _("Invalid time: start time must be before end time!");
+ char *msg_wrong_date = _("The entered date is not valid.");
+ char *msg_fmts =
+ "Possible formats are [%s] or '0' for an endless repetetition";
+ char *msg_enter = _("Press [Enter] to continue");
+
+ do
+ {
+ status_mesg (msg_rpt_type, msg_rpt_ans);
+ typstr = (char *) malloc (sizeof (char) * SINGLECHAR);
+ snprintf (typstr, SINGLECHAR, "%c", recur_def2char ((*rpt)->type));
+ cancel = updatestring (win[STA].p, &typstr, 0, 1);
+ if (cancel)
+ {
+ free (typstr);
+ return;
+ }
+ else
+ {
+ ch = toupper (*typstr);
+ free (typstr);
+ }
+ }
+ while ((ch != 'D') && (ch != 'W') && (ch != 'M') && (ch != 'Y'));
+
+ do
+ {
+ status_mesg (_("Enter the new repetition frequence:"), "");
+ freqstr = (char *) malloc (BUFSIZ);
+ snprintf (freqstr, BUFSIZ, "%d", (*rpt)->freq);
+ cancel = updatestring (win[STA].p, &freqstr, 0, 1);
+ if (cancel)
+ {
+ free (freqstr);
+ return;
+ }
+ else
+ {
+ newfreq = atoi (freqstr);
+ free (freqstr);
+ if (newfreq == 0)
+ {
+ status_mesg (msg_wrong_freq, msg_enter);
+ wgetch (win[STA].p);
+ }
+ }
+ }
+ 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));
+ cancel = updatestring (win[STA].p, &timstr, 0, 1);
+ if (cancel)
+ {
+ free (timstr);
+ return;
+ }
+ if (strcmp (timstr, "0") == 0)
+ {
+ newuntil = 0;
+ date_entered = 1;
+ }
+ else
+ {
+ struct tm *lt;
+ time_t t;
+ date_t new_date;
+ int newmonth, newday, newyear;
+
+ if (parse_date (timstr, conf->input_datefmt,
+ &newyear, &newmonth, &newday))
+ {
+ 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;
}
- } while (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;
+ }
+ }
+ }
+ while (date_entered == 0);
- free(timstr);
- (*rpt)->type = recur_char2def(ch);
- (*rpt)->freq = newfreq;
- (*rpt)->until = newuntil;
+ free (timstr);
+ (*rpt)->type = recur_char2def (ch);
+ (*rpt)->freq = newfreq;
+ (*rpt)->until = newuntil;
}
/* Edit an already existing item. */
-void
-day_edit_item(conf_t *conf)
+void
+day_edit_item (conf_t *conf)
{
#define STRT '1'
#define END '2'
#define DESC '3'
#define REPT '4'
- struct day_item_s *p;
- struct recur_event_s *re;
- struct event_s *e;
- recur_apoint_llist_node_t *ra;
- apoint_llist_node_t *a;
- long date;
- int item_num, ch;
-
- item_num = apoint_hilt();
- p = day_get_item(item_num);
- date = calendar_get_slctd_day_sec();
-
- ch = 0;
- switch (p->type) {
- case RECUR_EVNT:
- re = recur_get_event(date,
- day_item_nb(date, item_num, RECUR_EVNT));
- status_mesg(_("Edit: (1)Description or (2)Repetition?"),
- "[1/2] ");
- while (ch != '1' && ch != '2' && ch != ESCAPE)
- ch = wgetch(win[STA].p);
- switch (ch) {
- case '1':
- update_desc(&re->mesg);
- break;
- case '2':
- update_rept(&re->rpt, re->day, conf);
- break;
- 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));
- status_mesg(_("Edit: (1)Start time, (2)End time, "
- "(3)Description or (4)Repetition?"), "[1/2/3/4] ");
- while (ch != STRT && ch != END && ch != DESC &&
- ch != REPT && ch != ESCAPE)
- ch = wgetch(win[STA].p);
- switch (ch) {
- case STRT:
- update_start_time(&ra->start, &ra->dur);
- break;
- case END:
- update_duration(&ra->start, &ra->dur);
- break;
- case DESC:
- update_desc(&ra->mesg);
- break;
- case REPT:
- update_rept(&ra->rpt, ra->start, conf);
- break;
- case ESCAPE:
- return;
- }
- break;
- case APPT:
- a = apoint_get(date, day_item_nb(date, item_num, APPT));
- status_mesg(_("Edit: (1)Start time, (2)End time "
- "or (3)Description?"), "[1/2/3] ");
- while (ch != STRT && ch != END && ch != DESC && ch != ESCAPE)
- ch = wgetch(win[STA].p);
- switch (ch) {
- case STRT:
- update_start_time(&a->start, &a->dur);
- break;
- case END:
- update_duration(&a->start, &a->dur);
- break;
- case DESC:
- update_desc(&a->mesg);
- break;
- case ESCAPE:
- return;
- }
- break;
+ struct day_item_s *p;
+ struct recur_event_s *re;
+ struct event_s *e;
+ recur_apoint_llist_node_t *ra;
+ apoint_llist_node_t *a;
+ long date;
+ int item_num, ch;
+
+ item_num = apoint_hilt ();
+ p = day_get_item (item_num);
+ date = calendar_get_slctd_day_sec ();
+
+ ch = 0;
+ switch (p->type)
+ {
+ case RECUR_EVNT:
+ re = recur_get_event (date, day_item_nb (date, item_num, RECUR_EVNT));
+ status_mesg (_("Edit: (1)Description or (2)Repetition?"), "[1/2] ");
+ while (ch != '1' && ch != '2' && ch != ESCAPE)
+ ch = wgetch (win[STA].p);
+ switch (ch)
+ {
+ case '1':
+ update_desc (&re->mesg);
+ break;
+ case '2':
+ update_rept (&re->rpt, re->day, conf);
+ break;
+ 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));
+ status_mesg (_("Edit: (1)Start time, (2)End time, "
+ "(3)Description or (4)Repetition?"), "[1/2/3/4] ");
+ while (ch != STRT && ch != END && ch != DESC &&
+ ch != REPT && ch != ESCAPE)
+ ch = wgetch (win[STA].p);
+ switch (ch)
+ {
+ case STRT:
+ update_start_time (&ra->start, &ra->dur);
+ break;
+ case END:
+ update_duration (&ra->start, &ra->dur);
+ break;
+ case DESC:
+ update_desc (&ra->mesg);
+ break;
+ case REPT:
+ update_rept (&ra->rpt, ra->start, conf);
+ break;
+ case ESCAPE:
+ return;
}
+ break;
+ case APPT:
+ a = apoint_get (date, day_item_nb (date, item_num, APPT));
+ status_mesg (_("Edit: (1)Start time, (2)End time "
+ "or (3)Description?"), "[1/2/3] ");
+ while (ch != STRT && ch != END && ch != DESC && ch != ESCAPE)
+ ch = wgetch (win[STA].p);
+ switch (ch)
+ {
+ case STRT:
+ update_start_time (&a->start, &a->dur);
+ break;
+ case END:
+ update_duration (&a->start, &a->dur);
+ break;
+ case DESC:
+ update_desc (&a->mesg);
+ break;
+ case ESCAPE:
+ return;
+ }
+ break;
+ }
}
/*
@@ -764,158 +811,173 @@ day_edit_item(conf_t *conf)
* 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, erase_flag_e flag)
+int
+day_erase_item (long date, int item_number, erase_flag_e flag)
{
- struct day_item_s *p;
- char *erase_warning =
- _("This item is recurrent. "
- "Delete (a)ll occurences or just this (o)ne ?");
- char *note_warning =
- _("This item has a note attached to it. "
- "Delete (i)tem or just its (n)ote ?");
- char *note_choice = _("[i/n] ");
- char *erase_choice = _("[a/o] ");
- int ch = 0, ans;
- unsigned delete_whole;
-
- p = day_get_item(item_number);
- if (flag == ERASE_DONT_FORCE) {
- ans = 0;
- if (p->note == NULL)
- ans = 'i';
- while (ans != 'i' && ans != 'n') {
- status_mesg(note_warning, note_choice);
- ans = wgetch(win[STA].p);
- }
- if (ans == 'i')
- flag = ERASE_FORCE;
- else
- flag = ERASE_FORCE_ONLY_NOTE;
+ struct day_item_s *p;
+ char *erase_warning =
+ _("This item is recurrent. "
+ "Delete (a)ll occurences or just this (o)ne ?");
+ char *note_warning =
+ _("This item has a note attached to it. "
+ "Delete (i)tem or just its (n)ote ?");
+ char *note_choice = _("[i/n] ");
+ char *erase_choice = _("[a/o] ");
+ int ch = 0, ans;
+ unsigned delete_whole;
+
+ p = day_get_item (item_number);
+ if (flag == ERASE_DONT_FORCE)
+ {
+ ans = 0;
+ if (p->note == NULL)
+ ans = 'i';
+ while (ans != 'i' && ans != 'n')
+ {
+ status_mesg (note_warning, note_choice);
+ ans = wgetch (win[STA].p);
}
- 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)
- ch = 'a';
- while ( (ch != 'a') && (ch != 'o') && (ch != ESCAPE)) {
- status_mesg(erase_warning, erase_choice);
- ch = wgetch(win[STA].p);
- }
- if (ch == 'a') {
- delete_whole = 1;
- } else if (ch == 'o') {
- delete_whole = 0;
- } else {
- 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 (ans == 'i')
+ flag = ERASE_FORCE;
+ else
+ flag = ERASE_FORCE_ONLY_NOTE;
+ }
+ 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)
+ ch = 'a';
+ while ((ch != 'a') && (ch != 'o') && (ch != ESCAPE))
+ {
+ status_mesg (erase_warning, erase_choice);
+ ch = wgetch (win[STA].p);
+ }
+ if (ch == 'a')
+ {
+ delete_whole = 1;
+ }
+ else if (ch == 'o')
+ {
+ delete_whole = 0;
+ }
+ else
+ {
+ return (0);
+ }
+ if (p->type == RECUR_EVNT)
+ {
+ recur_event_erase (date, day_item_nb (date, item_number, RECUR_EVNT),
+ delete_whole, flag);
}
- return (p->type);
+ else
+ {
+ recur_apoint_erase (date, p->appt_pos, delete_whole, flag);
+ }
+ }
+ return (p->type);
}
/* Returns a structure containing the selected item. */
-struct day_item_s *day_get_item(int item_number)
+struct day_item_s *
+day_get_item (int item_number)
{
- struct day_item_s *o;
- int i;
-
- o = day_items_ptr;
- for (i = 1; i < item_number; i++) {
- o = o->next;
- }
- return o;
+ struct day_item_s *o;
+ int i;
+
+ o = day_items_ptr;
+ for (i = 1; i < item_number; i++)
+ {
+ o = o->next;
+ }
+ return (o);
}
/* Returns the real item number, given its type. */
int
-day_item_nb(long date, int day_num, int type)
+day_item_nb (long date, int day_num, int type)
{
- int i, nb_item[MAX_TYPES];
- struct day_item_s *p;
+ int i, nb_item[MAX_TYPES];
+ struct day_item_s *p;
- for (i = 0; i < MAX_TYPES; i++)
- nb_item[i] = 0;
+ for (i = 0; i < MAX_TYPES; i++)
+ nb_item[i] = 0;
- p = day_items_ptr;
+ p = day_items_ptr;
- for (i = 1; i < day_num; i++) {
- nb_item[p->type - 1]++;
- p = p->next;
- }
+ for (i = 1; i < day_num; i++)
+ {
+ nb_item[p->type - 1]++;
+ p = p->next;
+ }
- return (nb_item[type - 1]);
+ return (nb_item[type - 1]);
}
/* Attach a note to an appointment or event. */
void
-day_edit_note(char *editor)
+day_edit_note (char *editor)
{
- struct day_item_s *p;
- recur_apoint_llist_node_t *ra;
- apoint_llist_node_t *a;
- struct recur_event_s *re;
- struct event_s *e;
- char fullname[BUFSIZ];
- char *filename;
- long date;
- int item_num;
-
- item_num = apoint_hilt();
- p = day_get_item(item_num);
- if (p->note == NULL) {
- if ((filename = new_tempfile(path_notes, NOTESIZ)) == NULL)
- return;
- else
- p->note = filename;
- }
- snprintf(fullname, BUFSIZ, "%s%s", path_notes, p->note);
- wins_launch_external(fullname, 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;
- }
+ struct day_item_s *p;
+ recur_apoint_llist_node_t *ra;
+ apoint_llist_node_t *a;
+ struct recur_event_s *re;
+ struct event_s *e;
+ char fullname[BUFSIZ];
+ char *filename;
+ long date;
+ int item_num;
+
+ item_num = apoint_hilt ();
+ p = day_get_item (item_num);
+ if (p->note == NULL)
+ {
+ if ((filename = new_tempfile (path_notes, NOTESIZ)) == NULL)
+ return;
+ else
+ p->note = filename;
+ }
+ snprintf (fullname, BUFSIZ, "%s%s", path_notes, p->note);
+ wins_launch_external (fullname, 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(char *pager)
+void
+day_view_note (char *pager)
{
- struct day_item_s *p;
- char fullname[BUFSIZ];
-
- p = day_get_item(apoint_hilt());
- if (p->note == NULL)
- return;
- snprintf(fullname, BUFSIZ, "%s%s", path_notes, p->note);
- wins_launch_external(fullname, pager);
+ struct day_item_s *p;
+ char fullname[BUFSIZ];
+
+ p = day_get_item (apoint_hilt ());
+ if (p->note == NULL)
+ return;
+ snprintf (fullname, BUFSIZ, "%s%s", path_notes, p->note);
+ wins_launch_external (fullname, pager);
}