mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 23:08:40 +02:00
Add wouldtrig function.
This commit is contained in:
62
src/funcs.c
62
src/funcs.c
@@ -151,6 +151,7 @@ static int FVersion (func_info *);
|
|||||||
static int FWeekno (func_info *);
|
static int FWeekno (func_info *);
|
||||||
static int FWkday (func_info *);
|
static int FWkday (func_info *);
|
||||||
static int FWkdaynum (func_info *);
|
static int FWkdaynum (func_info *);
|
||||||
|
static int FWouldTrig (func_info *);
|
||||||
static int FYear (func_info *);
|
static int FYear (func_info *);
|
||||||
static int FShellescape (func_info *);
|
static int FShellescape (func_info *);
|
||||||
|
|
||||||
@@ -304,6 +305,7 @@ BuiltinFunc Func[] = {
|
|||||||
{ "weekno", 0, 3, 1, FWeekno },
|
{ "weekno", 0, 3, 1, FWeekno },
|
||||||
{ "wkday", 1, 1, 1, FWkday },
|
{ "wkday", 1, 1, 1, FWkday },
|
||||||
{ "wkdaynum", 1, 1, 1, FWkdaynum },
|
{ "wkdaynum", 1, 1, 1, FWkdaynum },
|
||||||
|
{ "wouldtrig", 1, 2, 0, FWouldTrig },
|
||||||
{ "year", 1, 1, 1, FYear }
|
{ "year", 1, 1, 1, FYear }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2971,8 +2973,12 @@ FEvalTrig(func_info *info)
|
|||||||
CreateParser(ARGSTR(0), &p);
|
CreateParser(ARGSTR(0), &p);
|
||||||
p.allownested = 0;
|
p.allownested = 0;
|
||||||
r = ParseRem(&p, &trig, &tim, 0);
|
r = ParseRem(&p, &trig, &tim, 0);
|
||||||
if (r) return r;
|
if (r) {
|
||||||
|
DestroyParser(&p);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
if (trig.typ != NO_TYPE) {
|
if (trig.typ != NO_TYPE) {
|
||||||
|
DestroyParser(&p);
|
||||||
FreeTrig(&trig);
|
FreeTrig(&trig);
|
||||||
return E_PARSE_ERR;
|
return E_PARSE_ERR;
|
||||||
}
|
}
|
||||||
@@ -2990,6 +2996,7 @@ FEvalTrig(func_info *info)
|
|||||||
jul = -1;
|
jul = -1;
|
||||||
}
|
}
|
||||||
FreeTrig(&trig);
|
FreeTrig(&trig);
|
||||||
|
DestroyParser(&p);
|
||||||
if (r) return r;
|
if (r) return r;
|
||||||
if (jul < 0) {
|
if (jul < 0) {
|
||||||
RetVal.type = INT_TYPE;
|
RetVal.type = INT_TYPE;
|
||||||
@@ -3003,3 +3010,56 @@ FEvalTrig(func_info *info)
|
|||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
static int
|
||||||
|
FWouldTrig(func_info *info)
|
||||||
|
{
|
||||||
|
Parser p;
|
||||||
|
Trigger trig;
|
||||||
|
TimeTrig tim;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
RetVal.type = INT_TYPE;
|
||||||
|
RETVAL = 0;
|
||||||
|
|
||||||
|
CreateParser(ARGSTR(0), &p);
|
||||||
|
p.allownested = 0;
|
||||||
|
r = ParseRem(&p, &trig, &tim, 0);
|
||||||
|
if (r) {
|
||||||
|
DestroyParser(&p);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
if (trig.typ != NO_TYPE) {
|
||||||
|
DestroyParser(&p);
|
||||||
|
FreeTrig(&trig);
|
||||||
|
return E_PARSE_ERR;
|
||||||
|
}
|
||||||
|
if (scanfrom == NO_DATE) {
|
||||||
|
jul = ComputeTrigger(trig.scanfrom, &trig, &tim, &r, 0);
|
||||||
|
} else {
|
||||||
|
/* Hokey... */
|
||||||
|
if (trig.scanfrom != JulianToday) {
|
||||||
|
Eprint("Warning: SCANFROM is ignored in two-argument form of wouldtrig()");
|
||||||
|
}
|
||||||
|
jul = ComputeTrigger(scanfrom, &trig, &tim, &r, 0);
|
||||||
|
}
|
||||||
|
if (r == E_CANT_TRIG) {
|
||||||
|
DestroyParser(&p);
|
||||||
|
FreeTrig(&trig);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
if (ShouldTriggerReminder(&trig, &tim, jul, &r)) {
|
||||||
|
RETVAL = 1;
|
||||||
|
}
|
||||||
|
DestroyParser(&p);
|
||||||
|
FreeTrig(&trig);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user