diff --git a/src/calendar.c b/src/calendar.c index 1862944c..c097286e 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -763,7 +763,7 @@ static int DoCalRem(ParsePtr p, int col) DBufInit(&pre_buf); /* Parse the trigger date and time */ - if ( (r=ParseRem(p, &trig, &tim)) ) return r; + if ( (r=ParseRem(p, &trig, &tim, 1)) ) return r; /* Don't include timed reminders in calendar if -a option supplied. */ if (DontIssueAts && tim.ttime != NO_TIME) return OK; diff --git a/src/dorem.c b/src/dorem.c index d3375e02..cd51b630 100644 --- a/src/dorem.c +++ b/src/dorem.c @@ -29,7 +29,7 @@ static char const DontEscapeMe[] = "1234567890_-=+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@.,"; -static int ParseTimeTrig (ParsePtr s, TimeTrig *tim); +static int ParseTimeTrig (ParsePtr s, TimeTrig *tim, int save_in_globals); static int ParseLocalOmit (ParsePtr s, Trigger *t); static int ParseScanFrom (ParsePtr s, Trigger *t, int type); static int ParsePriority (ParsePtr s, Trigger *t); @@ -56,7 +56,7 @@ int DoRem(ParsePtr p) DBufInit(&buf); /* Parse the trigger date and time */ - if ( (r=ParseRem(p, &trig, &tim)) ) return r; + if ( (r=ParseRem(p, &trig, &tim, 1)) ) return r; if (trig.typ == NO_TYPE) return E_EOLN; if (trig.typ == SAT_TYPE) { @@ -121,7 +121,7 @@ int DoRem(ParsePtr p) /* trigger structure. */ /* */ /***************************************************************/ -int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim) +int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim, int save_in_globals) { register int r; DynamicBuffer buf; @@ -152,7 +152,9 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim) tim->delta = NO_DELTA; tim->rep = NO_REP; tim->duration = NO_TIME; - LastTriggerTime = NO_TIME; + if (save_in_globals) { + LastTriggerTime = NO_TIME; + } while(1) { /* Read space-delimited string */ @@ -188,7 +190,7 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim) case T_At: DBufFree(&buf); - r=ParseTimeTrig(s, tim); + r=ParseTimeTrig(s, tim, save_in_globals); if (r) return r; break; @@ -337,7 +339,7 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim) /* ParseTimeTrig - parse the AT part of a timed reminder */ /* */ /***************************************************************/ -static int ParseTimeTrig(ParsePtr s, TimeTrig *tim) +static int ParseTimeTrig(ParsePtr s, TimeTrig *tim, int save_in_globals) { Token tok; int r; @@ -369,7 +371,9 @@ static int ParseTimeTrig(ParsePtr s, TimeTrig *tim) if (tim->ttime == NO_TIME) return E_EXPECT_TIME; /* Save trigger time in global variable */ - LastTriggerTime = tim->ttime; + if (save_in_globals) { + LastTriggerTime = tim->ttime; + } PushToken(DBufValue(&buf), s); DBufFree(&buf); return OK; diff --git a/src/funcs.c b/src/funcs.c index 0a841267..7076882d 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -2576,16 +2576,20 @@ FEvalTrig(void) ASSERT_TYPE(0, STR_TYPE); CreateParser(ARGSTR(0), &p); p.allownested = 0; - r = ParseRem(&p, &trig, &tim); + r = ParseRem(&p, &trig, &tim, 0); if (r) return r; if (trig.typ != NO_TYPE) return E_PARSE_ERR; jul = ComputeTrigger(trig.scanfrom, &trig, &r, 0); if (r) return r; if (jul < 0) { RetVal.type = INT_TYPE; - } else { + RetVal.v.val = jul; + } else if (tim.ttime == NO_TIME) { RetVal.type = DATE_TYPE; + RetVal.v.val = jul; + } else { + RetVal.type = DATETIME_TYPE; + RetVal.v.val = (MINUTES_PER_DAY * jul) + tim.ttime; } - RetVal.v.val = jul; return OK; } diff --git a/src/main.c b/src/main.c index 64c0916e..5dde1973 100644 --- a/src/main.c +++ b/src/main.c @@ -734,7 +734,7 @@ int DoIfTrig(ParsePtr p) if (NumIfs >= IF_NEST) return E_NESTED_IF; if (ShouldIgnoreLine()) syndrome = IF_TRUE | BEFORE_ELSE; else { - if ( (r=ParseRem(p, &trig, &tim)) ) return r; + if ( (r=ParseRem(p, &trig, &tim, 1)) ) return r; if (trig.typ != NO_TYPE) return E_PARSE_ERR; jul = ComputeTrigger(trig.scanfrom, &trig, &r, 1); if (r) syndrome = IF_TRUE | BEFORE_ELSE; diff --git a/src/protos.h b/src/protos.h index c5e7a3a6..1d4f9502 100644 --- a/src/protos.h +++ b/src/protos.h @@ -26,7 +26,7 @@ char const *CalendarTime (int tim, int duration); int DoRem (ParsePtr p); int DoFlush (ParsePtr p); void DoExit (ParsePtr p); -int ParseRem (ParsePtr s, Trigger *trig, TimeTrig *tim); +int ParseRem (ParsePtr s, Trigger *trig, TimeTrig *tim, int save_in_globals); int TriggerReminder (ParsePtr p, Trigger *t, TimeTrig *tim, int jul); int ShouldTriggerReminder (Trigger *t, TimeTrig *tim, int jul); int DoSubst (ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul, int mode);