diff options
Diffstat (limited to 'src/recur.c')
-rw-r--r-- | src/recur.c | 400 |
1 files changed, 200 insertions, 200 deletions
diff --git a/src/recur.c b/src/recur.c index fbd894d..4bdb217 100644 --- a/src/recur.c +++ b/src/recur.c @@ -66,7 +66,7 @@ static void recur_add_exc (struct days **exc, long day) { struct days **i, *o; - + o = mem_malloc (sizeof (struct days)); o->st = day; i = exc; @@ -86,7 +86,7 @@ static void exc_dup (struct days **in, struct days *exc) { struct days *p; - + for (p = exc; p; p = p->next) recur_add_exc (in, p->st); } @@ -141,7 +141,7 @@ recur_event_dup (struct recur_event *in, struct recur_event *bkp) bkp->id = in->id; bkp->day = in->day; bkp->mesg = mem_strdup (in->mesg); - + bkp->rpt = mem_malloc (sizeof (struct rpt)); bkp->rpt->type = in->rpt->type; bkp->rpt->freq = in->rpt->freq; @@ -163,7 +163,7 @@ recur_apoint_dup (struct recur_apoint *in, struct recur_apoint *bkp) bkp->dur = in->dur; bkp->state = in->state; bkp->mesg = mem_strdup (in->mesg); - + bkp->rpt = mem_malloc (sizeof (struct rpt)); bkp->rpt->type = in->rpt->type; bkp->rpt->freq = in->rpt->freq; @@ -174,7 +174,7 @@ recur_apoint_dup (struct recur_apoint *in, struct recur_apoint *bkp) if (in->note) bkp->note = mem_strdup (in->note); -} +} void recur_apoint_llist_init (void) @@ -236,10 +236,10 @@ recur_event_llist_free (void) /* 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, struct days **except) + int type, int freq, long until, struct days **except) { struct recur_apoint *o, **i; - + o = mem_malloc (sizeof (struct recur_apoint)); o->rpt = mem_malloc (sizeof (struct rpt)); o->mesg = mem_strdup (mesg); @@ -263,11 +263,11 @@ recur_apoint_new (char *mesg, char *note, long start, long dur, char state, for (;;) { if (*i == 0 || (*i)->start > start) - { - o->next = *i; - *i = o; - break; - } + { + o->next = *i; + *i = o; + break; + } i = &(*i)->next; } pthread_mutex_unlock (&(recur_alist_p->mutex)); @@ -278,14 +278,14 @@ recur_apoint_new (char *mesg, char *note, long start, long dur, char state, /* 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, struct days **except) + long until, struct days **except) { struct recur_event *o, **i; - + o = mem_malloc (sizeof (struct recur_event)); o->rpt = mem_malloc (sizeof (struct rpt)); o->mesg = mem_strdup (mesg); - o->note = (note != 0) ? mem_strdup (note) : 0; + o->note = (note != 0) ? mem_strdup (note) : 0; o->day = day; o->id = id; o->rpt->type = type; @@ -303,19 +303,19 @@ recur_event_new (char *mesg, char *note, long day, int id, int type, int freq, for (;;) { if (*i == 0 || (*i)->day > day) - { - o->next = *i; - *i = o; - break; - } + { + o->next = *i; + *i = o; + break; + } i = &(*i)->next; } return (o); } -/* - * Correspondance between the defines on recursive type, - * and the letter to be written in file. +/* + * Correspondance between the defines on recursive type, + * and the letter to be written in file. */ char recur_def2char (enum recur_type define) @@ -344,7 +344,7 @@ recur_def2char (enum recur_type define) return (recur_char); } -/* +/* * Correspondance between the letters written in file and the defines * concerning the recursive type. */ @@ -397,8 +397,8 @@ recur_write_exc (struct days *exc, FILE *f) /* 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, struct days **exc, - char state) + int freq, struct tm until, char *note, struct days **exc, + char state) { struct tm *lt; char buf[BUFSIZ], *nl; @@ -441,13 +441,13 @@ recur_apoint_scan (FILE *f, struct tm start, struct tm end, char type, _("date error in appointment")); return (recur_apoint_new (buf, note, tstart, tend - tstart, state, - recur_char2def (type), freq, tuntil, exc)); + 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, struct days **exc) + struct tm until, char *note, struct days **exc) { char buf[BUFSIZ], *nl; time_t tstart, tuntil; @@ -646,7 +646,7 @@ diff_years (struct tm lt_start, struct tm lt_end) return lt_end.tm_year - lt_start.tm_year; } -/* +/* * Check if the recurrent item belongs to the selected day, * and if yes, return the real start time. * @@ -657,7 +657,7 @@ diff_years (struct tm lt_start, struct tm lt_end) */ unsigned recur_item_inday (long item_start, struct days *item_exc, int rpt_type, - int rpt_freq, long rpt_until, long day_start) + int rpt_freq, long rpt_until, long day_start) { struct date start_date; long day_end, diff; @@ -668,7 +668,7 @@ recur_item_inday (long item_start, struct days *item_exc, int rpt_type, day_end = day_start + DAYINSEC; t = day_start; lt_day = *localtime (&t); - + for (exc = item_exc; exc != 0; exc = exc->next) if (exc->st < day_end && exc->st >= day_start) return (0); @@ -681,26 +681,26 @@ recur_item_inday (long item_start, struct days *item_exc, int rpt_type, t = item_start; lt_item = *localtime (&t); - + switch (rpt_type) { case RECUR_DAILY: diff = diff_days (lt_item, lt_day); if (diff % rpt_freq != 0) - return (0); + return (0); lt_item.tm_mday = lt_day.tm_mday; lt_item.tm_mon = lt_day.tm_mon; lt_item.tm_year = lt_day.tm_year; break; case RECUR_WEEKLY: if (lt_item.tm_wday != lt_day.tm_wday) - return (0); + return (0); else - { + { diff = diff_weeks (lt_item, lt_day); - if (diff % rpt_freq != 0) - return (0); - } + if (diff % rpt_freq != 0) + return (0); + } lt_item.tm_mday = lt_day.tm_mday; lt_item.tm_mon = lt_day.tm_mon; lt_item.tm_year = lt_day.tm_year; @@ -708,14 +708,14 @@ recur_item_inday (long item_start, struct days *item_exc, int rpt_type, case RECUR_MONTHLY: diff = diff_months (lt_item, lt_day); if (diff % rpt_freq != 0) - return (0); + return (0); lt_item.tm_mon = lt_day.tm_mon; lt_item.tm_year = lt_day.tm_year; break; case RECUR_YEARLY: diff = diff_years (lt_item, lt_day); if (diff % rpt_freq != 0) - return (0); + return (0); lt_item.tm_year = lt_day.tm_year; break; default: @@ -732,13 +732,13 @@ recur_item_inday (long item_start, struct days *item_exc, int rpt_type, return (0); } -/* +/* * Delete a recurrent event from the list (if delete_whole is not null), - * or delete only one occurence of the recurrent event. + * or delete only one occurence of the recurrent event. */ void recur_event_erase (long start, unsigned num, unsigned delete_whole, - enum eraseflg flag) + enum eraseflg flag) { unsigned n = 0; struct recur_event *i, **iptr; @@ -747,16 +747,16 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole, for (i = recur_elist; i != 0; i = i->next) { if (recur_item_inday (i->day, i->exc, i->rpt->type, - i->rpt->freq, i->rpt->until, start)) - { - if (n == num) - { - if (delete_whole) - { + i->rpt->freq, i->rpt->until, start)) + { + if (n == num) + { + if (delete_whole) + { switch (flag) { case ERASE_FORCE_ONLY_NOTE: - erase_note (&i->note, flag); + erase_note (&i->note, flag); break; case ERASE_CUT: recur_event_free_bkp (ERASE_FORCE); @@ -764,8 +764,8 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole, erase_note (&i->note, ERASE_FORCE_KEEP_NOTE); /* FALLTHROUGH */ default: - *iptr = i->next; - mem_free (i->mesg); + *iptr = i->next; + mem_free (i->mesg); if (i->rpt) { mem_free (i->rpt); @@ -778,32 +778,32 @@ recur_event_erase (long start, unsigned num, unsigned delete_whole, } if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT) erase_note (&i->note, flag); - mem_free (i); + mem_free (i); break; - } - return; - } - else - { + } + return; + } + else + { recur_add_exc (&i->exc, start); - return; - } - } - n++; - } + return; + } + } + n++; + } iptr = &i->next; } EXIT (_("event not found")); - /* NOTREACHED */ + /* NOTREACHED */ } /* * Delete a recurrent appointment from the list (if delete_whole is not null), - * or delete only one occurence of the recurrent appointment. + * or delete only one occurence of the recurrent appointment. */ void recur_apoint_erase (long start, unsigned num, unsigned delete_whole, - enum eraseflg flag) + enum eraseflg flag) { unsigned n = 0; struct recur_apoint *i, **iptr; @@ -814,14 +814,14 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole, for (i = recur_alist_p->root; i != 0; i = i->next) { if (recur_item_inday (i->start, i->exc, i->rpt->type, - i->rpt->freq, i->rpt->until, start)) - { - if (n == num) - { - if (notify_bar () && flag != ERASE_FORCE_ONLY_NOTE) - need_check_notify = notify_same_recur_item (i); - if (delete_whole) - { + i->rpt->freq, i->rpt->until, start)) + { + if (n == num) + { + if (notify_bar () && flag != ERASE_FORCE_ONLY_NOTE) + need_check_notify = notify_same_recur_item (i); + if (delete_whole) + { switch (flag) { case ERASE_FORCE_ONLY_NOTE: @@ -833,8 +833,8 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole, erase_note (&i->note, ERASE_FORCE_KEEP_NOTE); /* FALLTHROUGH */ default: - *iptr = i->next; - mem_free (i->mesg); + *iptr = i->next; + mem_free (i->mesg); if (i->rpt) { mem_free (i->rpt); @@ -847,25 +847,25 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole, } if (flag != ERASE_FORCE_KEEP_NOTE && flag != ERASE_CUT) erase_note (&i->note, flag); - mem_free (i); - pthread_mutex_unlock (&(recur_alist_p->mutex)); - if (need_check_notify) - notify_check_next_app (); + mem_free (i); + pthread_mutex_unlock (&(recur_alist_p->mutex)); + if (need_check_notify) + notify_check_next_app (); break; - } - return; - } - else - { + } + return; + } + else + { recur_add_exc (&i->exc, start); - pthread_mutex_unlock (&(recur_alist_p->mutex)); - if (need_check_notify) - notify_check_next_app (); - return; - } - } - n++; - } + pthread_mutex_unlock (&(recur_alist_p->mutex)); + if (need_check_notify) + notify_check_next_app (); + return; + } + } + n++; + } iptr = &i->next; } EXIT (_("appointment not found")); @@ -921,7 +921,7 @@ recur_repeat_item (struct conf *conf) } while ((ch != 'D') && (ch != 'W') && (ch != 'M') - && (ch != 'Y') && (ch != ESCAPE)) + && (ch != 'Y') && (ch != ESCAPE)) { status_mesg (mesg_type_1, mesg_type_2); ch = wgetch (win[STA].p); @@ -941,17 +941,17 @@ recur_repeat_item (struct conf *conf) { 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); - (void)wgetch (win[STA].p); - } - user_input[0] = '\0'; - } + { + freq = atoi (user_input); + if (freq == 0) + { + status_mesg (mesg_wrong_freq, wrong_type_2); + (void)wgetch (win[STA].p); + } + user_input[0] = '\0'; + } else - return; + return; } while (!date_entered) @@ -960,60 +960,60 @@ recur_repeat_item (struct conf *conf) 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 && strncmp (user_input, "0", 1) == 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); - (void)wgetch (win[STA].p); - date_entered = 0; - } - else - { - date_entered = 1; - } - } - else - { - (void)snprintf (outstr, BUFSIZ, mesg_wrong_2, + { + if (strlen (user_input) == 1 && strncmp (user_input, "0", 1) == 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); + (void)wgetch (win[STA].p); + date_entered = 0; + } + else + { + date_entered = 1; + } + } + else + { + (void)snprintf (outstr, BUFSIZ, mesg_wrong_2, DATEFMT_DESC (conf->input_datefmt)); - status_mesg (mesg_wrong_1, _(outstr)); - (void)wgetch (win[STA].p); - date_entered = 0; - } - } - } + status_mesg (mesg_wrong_1, _(outstr)); + (void)wgetch (win[STA].p); + date_entered = 0; + } + } + } else - return; + return; } date = calendar_get_slctd_day_sec (); if (p->type == EVNT) { re = recur_event_new (p->mesg, p->note, p->start, p->evnt_id, - type, freq, until, NULL); + 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); + p->state, type, freq, until, NULL); if (notify_bar ()) - notify_check_repeated (ra); + notify_check_repeated (ra); } else { @@ -1023,7 +1023,7 @@ recur_repeat_item (struct conf *conf) day_erase_item (date, item_nb, ERASE_FORCE_KEEP_NOTE); } -/* +/* * Read days for which recurrent items must not be repeated * (such days are called exceptions). */ @@ -1039,10 +1039,10 @@ recur_exc_scan (FILE *data_file) { (void)ungetc (c, data_file); if (fscanf (data_file, "!%u / %u / %u ", - &day.tm_mon, &day.tm_mday, &day.tm_year) != 3) - { + &day.tm_mon, &day.tm_mday, &day.tm_year) != 3) + { EXIT (_("syntax error in item date")); - } + } day.tm_hour = 12; day.tm_min = day.tm_sec = 0; day.tm_isdst = -1; @@ -1070,23 +1070,23 @@ recur_apoint_check_next (struct notify_app *app, long start, long day) for (i = recur_alist_p->root; i != 0; i = i->next) { if (i->start > app->time) - { - pthread_mutex_unlock (&(recur_alist_p->mutex)); - return (app); - } + { + pthread_mutex_unlock (&(recur_alist_p->mutex)); + return (app); + } else - { - real_recur_start_time = + { + real_recur_start_time = recur_item_inday (i->start, i->exc, i->rpt->type, i->rpt->freq, i->rpt->until, day); - if (real_recur_start_time > start) - { - app->time = real_recur_start_time; - app->txt = mem_strdup (i->mesg); - app->state = i->state; - app->got_app = 1; - } - } + if (real_recur_start_time > start) + { + app->time = real_recur_start_time; + app->txt = mem_strdup (i->mesg); + app->state = i->state; + app->got_app = 1; + } + } } pthread_mutex_unlock (&(recur_alist_p->mutex)); @@ -1104,15 +1104,15 @@ recur_get_apoint (long date, int num) for (o = recur_alist_p->root; o != 0; o = o->next) { if (recur_item_inday (o->start, o->exc, o->rpt->type, - o->rpt->freq, o->rpt->until, date)) - { - if (n == num) - { - pthread_mutex_unlock (&(recur_alist_p->mutex)); - return (o); - } - n++; - } + o->rpt->freq, o->rpt->until, date)) + { + if (n == num) + { + pthread_mutex_unlock (&(recur_alist_p->mutex)); + return (o); + } + n++; + } } EXIT (_("item not found")); return 0; @@ -1129,14 +1129,14 @@ recur_get_event (long date, int num) for (o = recur_elist; o != 0; o = o->next) { if (recur_item_inday (o->day, o->exc, o->rpt->type, - o->rpt->freq, o->rpt->until, date)) - { - if (n == num) - { - return (o); - } - n++; - } + o->rpt->freq, o->rpt->until, date)) + { + if (n == num) + { + return (o); + } + n++; + } } EXIT (_("item not found")); return 0; @@ -1157,22 +1157,22 @@ recur_apoint_switch_notify (long date, int recur_nb) for (o = recur_alist_p->root; o != 0; o = o->next) { if (recur_item_inday (o->start, o->exc, o->rpt->type, - o->rpt->freq, o->rpt->until, date)) - { - if (n == recur_nb) - { - o->state ^= APOINT_NOTIFY; - - if (notify_bar ()) - notify_check_repeated (o); - - pthread_mutex_unlock (&(recur_alist_p->mutex)); - if (need_chk_notify) - notify_check_next_app (); - return; - } - n++; - } + o->rpt->freq, o->rpt->until, date)) + { + if (n == recur_nb) + { + o->state ^= APOINT_NOTIFY; + + if (notify_bar ()) + notify_check_repeated (o); + + pthread_mutex_unlock (&(recur_alist_p->mutex)); + if (need_chk_notify) + notify_check_next_app (); + return; + } + n++; + } } EXIT (_("item not found")); /* NOTREACHED */ @@ -1192,11 +1192,11 @@ recur_event_paste_item (void) if (bkp_cut_recur_event.exc) { struct days *exc; - + for (exc = bkp_cut_recur_event.exc; exc != 0; exc = exc->next) exc->st += time_shift; } - + (void)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, @@ -1222,11 +1222,11 @@ recur_apoint_paste_item (void) if (bkp_cut_recur_apoint.exc) { struct days *exc; - + for (exc = bkp_cut_recur_apoint.exc; exc != 0; exc = exc->next) exc->st += time_shift; } - + (void)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, |