diff --git a/src/funcs.c b/src/funcs.c index 7076882d..b65e9fe9 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -209,7 +209,7 @@ Operator Func[] = { { "dosubst", 1, 3, FDosubst }, { "dusk", 0, 1, FDusk }, { "easterdate", 1, 1, FEasterdate }, - { "evaltrig", 1, 1, FEvalTrig }, + { "evaltrig", 1, 2, FEvalTrig }, { "filedate", 1, 1, FFiledate }, { "filedatetime", 1, 1, FFiledatetime }, { "filedir", 0, 0, FFiledir }, @@ -2570,16 +2570,31 @@ FEvalTrig(void) Parser p; Trigger trig; TimeTrig tim; - int jul; + int jul, scanfrom; int r; ASSERT_TYPE(0, STR_TYPE); + if (Nargs >= 2) { + if (!HASDATE(ARG(1))) return E_BAD_TYPE; + scanfrom = DATEPART(ARG(1)); + } else { + scanfrom = NO_DATE; + } + CreateParser(ARGSTR(0), &p); p.allownested = 0; 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 (scanfrom == NO_DATE) { + jul = ComputeTrigger(trig.scanfrom, &trig, &r, 0); + } else { + /* Hokey... */ + if (trig.scanfrom != JulianToday) { + Eprint("Warning: SCANFROM is ignored in two-argument form of evaltrig()"); + } + jul = ComputeTrigger(scanfrom, &trig, &r, 0); + } if (r) return r; if (jul < 0) { RetVal.type = INT_TYPE;