diff options
author | Lars Henriksen <LarsHenriksen@get2net.dk> | 2020-05-29 15:13:28 +0200 |
---|---|---|
committer | Lukas Fleischer <lfleischer@calcurse.org> | 2020-06-13 10:56:15 -0400 |
commit | 223f722b1dc03677a9ba1b0646c684d747d75e43 (patch) | |
tree | 88923876c9ab3a15e4410e61d909041748d8bdd9 /src/utils.c | |
parent | 382e60ba692fa8877cfa2ea531b56baa9cf2e6b7 (diff) | |
download | calcurse-223f722b1dc03677a9ba1b0646c684d747d75e43.tar.gz calcurse-223f722b1dc03677a9ba1b0646c684d747d75e43.zip |
Allow repeat count input (for until) in interactive UI
Shortened repetition type text.
Avoid "duration" in until-contexts (reserve it for appointment duration):
"duration" changed to "increment" in user texts as well as source.
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/utils.c b/src/utils.c index 552c61e..4da7f79 100644 --- a/src/utils.c +++ b/src/utils.c @@ -990,11 +990,11 @@ parse_date_interactive(const char *datestr, int *year, int *month, int *day) } /* - * Convert a date duration string into a number of days. + * Convert a date increment string into a number of days. * If start is non-zero, the final end time is validated. * * Allowed formats in lenient BNF: - * <duration> ::= <days> | <period> + * <increment>::= <days> | <period> * <period> ::= [ <weeks>w ][ <days>d ] * Notes: * <days> and <weeks> are any integer >= 0. @@ -1002,7 +1002,7 @@ parse_date_interactive(const char *datestr, int *year, int *month, int *day) * * Returns 1 on success and 0 on failure. */ -int parse_date_duration(const char *string, unsigned *days, time_t start) +int parse_date_increment(const char *string, unsigned *days, time_t start) { enum { STATE_INITIAL, @@ -1012,7 +1012,7 @@ int parse_date_duration(const char *string, unsigned *days, time_t start) const char *p; unsigned in = 0, frac = 0, denom = 1; - unsigned dur = 0; + unsigned incr = 0; if (!string || *string == '\0') return 0; @@ -1033,10 +1033,10 @@ int parse_date_duration(const char *string, unsigned *days, time_t start) switch (state) { case STATE_INITIAL: if (*p == 'w') { - dur += in * WEEKINDAYS / denom; + incr += in * WEEKINDAYS / denom; state = STATE_WWDD_DD; } else if (*p == 'd') { - dur += in / denom; + incr += in / denom; state = STATE_DONE; } else { return 0; @@ -1044,7 +1044,7 @@ int parse_date_duration(const char *string, unsigned *days, time_t start) break; case STATE_WWDD_DD: if (*p == 'd') { - dur += in / denom; + incr += in / denom; state = STATE_DONE; } else { return 0; @@ -1060,18 +1060,18 @@ int parse_date_duration(const char *string, unsigned *days, time_t start) } if (state == STATE_DONE && in > 0) return 0; - dur += in; + incr += in; if (start) { - /* wanted: start = start + dur * DAYINSEC */ + /* wanted: start = start + incr * DAYINSEC */ long p; - if (overflow_mul(dur, DAYINSEC, &p)) + if (overflow_mul(incr, DAYINSEC, &p)) return 0; if (overflow_add(start, p, &start)) return 0; if (!check_sec(&start)) return 0; } - *days = dur; + *days = incr; return 1; } |