From f1591140d4a4af27672d524087420140b2b92bc4 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Wed, 13 Nov 2024 21:45:54 -0500 Subject: [PATCH] - Add $DefaultDelta system variable. - Make FRENAME delete definition of newname if oldname is not defined. - Document FRENAME, $DefaultDelta and the char(8) hack. --- man/remind.1.in | 47 ++++++++++++++++++++++++++++++++++++++++---- src/dorem.c | 2 +- src/globals.h | 1 + src/userfns.c | 14 +++++++------ src/var.c | 1 + tests/test.cmp | 52 ++++++++++++++++++++++++++++++++++++------------- tests/test.rem | 19 ++++++++++++++++++ 7 files changed, 112 insertions(+), 24 deletions(-) diff --git a/man/remind.1.in b/man/remind.1.in index 3cb88170..1f096568 100644 --- a/man/remind.1.in +++ b/man/remind.1.in @@ -2593,6 +2593,12 @@ blocks of reminders without having to type priorities for individual reminders. At startup, \fB$DefaultPrio\fR is set to 5000; it can range from 0 to 9999. .TP +.B $DefaultDelta +You can set this variable to a number from 0 through 10000. If set to +a non-zero number, then \fBRemind\fR triggers any \fBREM\fR statement +that lacks a delta as if it had a delta of \fB++$DefaultDelta\fR. +By default, \fB$DefaultDelta\fR is zero. +.TP .B $DefaultTDelta The default time delta used if no +N is given in an AT clause. This is normally 0, but can be set with the \fB\-tt\fR option or explicitly @@ -4657,6 +4663,35 @@ or thirdfunc will exist. \fBRemind\fR does not issue an error if you try to \fBFUNSET\fR a nonexistent user-defined function; it simply does nothing in that case. .PP +You can rename a user-defined function with \fBFRENAME\fR. This takes +two names: An old name and a new name. Consider this command: +.PP +.nf + FRENAME func_a func_b +.fi +.PP +If \fIfunc_a\fR does not exist, the command unsets \fIfunc_b\fR if +it is defined. However, if \fIfunc_a\fR exists, then it is renamed to +\fIfunc_b\fR, and \fIfunc_a\fR is no longer defined. If \fIfunc_b\fR +was defined prior to the \fBFRENAME\fR command, then that old +definition is lost. +.PP +\fBFRENAME\fR is useful if you want to save and restore the definition +of a user-defined function. For example, you might want to define +a \fBmsgprefix\fR function for a block of reminders, but not permanently +overwrite any existing definition. You could do something like this: +.PP +.nf + FRENAME msgprefix saved_msgprefix + FSET msgprefix(x) "My new prefix: " + INCLUDE block_of_reminders.rem + FRENAME saved_msgprefix msgprefix +.PP +The file \fBblock_of_reminders.rem\fR would be executed with the +\fBmsgprefix\fR function defined above. After the second FRENAME, +\fBmsgprefix\fR would be restored to its previous definition if +it had one, or simply unset if it was not previously defined. +.PP If you define a user-defined function and then later on redefine it, \fBRemind\fR will issue a warning. If you do not want this warning, then use \fBFUNSET\fR to remove the existing definition before you @@ -5463,10 +5498,14 @@ produce an entry in the calendar (i.e., \fBCAL\fR- and possibly .PP Normally, the body of a reminder is followed by a carriage return. Thus, the results of \fBmsgsuffix()\fR will appear on the next -line. If you don't want this, end the body of the reminder with a -percentage sign, "%". If you want a space between your reminders, -simply include a carriage return (\fBchar(13)\fR) as part of the -\fBmsgsuffix()\fR return value. +line. If you don't want this, make sure the output of \fBmsgsuffix\fR +begins with a backspace. This places the suffix \fIbefore\fR rather than +after the carriage return. Here is an example: +.PP +.nf + FSET msgsuffix(x) char(8) + " - suffix on same line" +.fi +.PP .PP If \fBRemind\fR has problems evaluating \fBmsgprefix()\fR, \fBmsgsuffix()\fR or \fBsortbanner()\fR, you will see a lot of diff --git a/src/dorem.c b/src/dorem.c index 12e97de1..887cb8c4 100644 --- a/src/dorem.c +++ b/src/dorem.c @@ -381,7 +381,7 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim) trig->d = NO_DAY; trig->wd = NO_WD; trig->back = NO_BACK; - trig->delta = NO_DELTA; + trig->delta = -DefaultDelta; trig->until = NO_UNTIL; trig->rep = NO_REP; trig->localomit = NO_WD; diff --git a/src/globals.h b/src/globals.h index 7cca86c3..736b00af 100644 --- a/src/globals.h +++ b/src/globals.h @@ -73,6 +73,7 @@ EXTERN INIT( int Hush, 0); EXTERN INIT( int NextMode, 0); EXTERN INIT( int InfiniteDelta, 0); EXTERN INIT( int DefaultTDelta, 0); +EXTERN INIT( int DefaultDelta, NO_DELTA); EXTERN INIT( int DeltaOverride, 0); EXTERN INIT( int RunDisabled, 0); EXTERN INIT( int ExpressionEvaluationDisabled, 0); diff --git a/src/userfns.c b/src/userfns.c index 5d7e8903..fb95f2bb 100644 --- a/src/userfns.c +++ b/src/userfns.c @@ -446,8 +446,9 @@ UnsetAllUserFuncs(void) /* */ /* RenameUserFunc */ /* */ -/* Rename a user-defined function. Does nothing if oldname */ -/* does not exist. If newname exists, it is deleted */ +/* Rename a user-defined function. */ +/* If newname exists, it is deleted. */ +/* If oldname exists, it is renamed to newname. */ /* */ /***************************************************************/ static void @@ -460,14 +461,15 @@ RenameUserFunc(char const *oldname, char const *newname) /* Same name; do nothing */ return; } - /* If oldname does not exist, do nothing */ - if (!f) { - return; - } /* Unset newname */ FUnset(newname); + /* If oldname does not exist, we're done. */ + if (!f) { + return; + } + /* Remove from hash table */ int h = HashVal_nocase(f->name) % FUNC_HASH_SIZE; cur = FuncHash[h]; diff --git a/src/var.c b/src/var.c index b40e5419..419663d4 100644 --- a/src/var.c +++ b/src/var.c @@ -866,6 +866,7 @@ static SysVar SysVarArr[] = { {"December", 1, STR_TYPE, &DynamicMonthName[11],0, 0 }, {"DedupeReminders",1, INT_TYPE, &DedupeReminders, 0, 1 }, {"DefaultColor", 1, SPECIAL_TYPE, default_color_func, 0, 0 }, + {"DefaultDelta", 1, INT_TYPE, &DefaultDelta, 0, 10000 }, {"DefaultPrio", 1, INT_TYPE, &DefaultPrio, 0, 9999 }, {"DefaultTDelta", 1, INT_TYPE, &DefaultTDelta, 0, 1440 }, {"DeltaOverride", 0, INT_TYPE, &DeltaOverride, 0, 0 }, diff --git a/tests/test.cmp b/tests/test.cmp index 1afca9a6..375f9efc 100644 --- a/tests/test.cmp +++ b/tests/test.cmp @@ -2731,6 +2731,7 @@ Variable Value $December "December" $DedupeReminders 0 [0, 1] $DefaultColor "-1 -1 -1" + $DefaultDelta 0 [0, 10000] $DefaultPrio 5000 [0, 9999] $DefaultTDelta 0 [0, 1440] $DeltaOverride 0 @@ -5860,20 +5861,15 @@ Leaving UserFN square(9) => 81 FRENAME nonexistent square REM MSG [square(9)] ../tests/test.rem(1143): Trig = Saturday, 16 February, 1991 -Entering UserFN square(9) -x => 9 -x => 9 -9 * 9 => 81 -Leaving UserFN square(9) => 81 -81 - +../tests/test.rem(1143): Undefined function: `square' +FSET square(x) x*x FRENAME square sq REM MSG [square(9)] -../tests/test.rem(1146): Trig = Saturday, 16 February, 1991 -../tests/test.rem(1146): Undefined function: `square' -REM MSG [sq(9)] ../tests/test.rem(1147): Trig = Saturday, 16 February, 1991 +../tests/test.rem(1147): Undefined function: `square' +REM MSG [sq(9)] +../tests/test.rem(1148): Trig = Saturday, 16 February, 1991 Entering UserFN sq(9) x => 9 x => 9 @@ -5884,7 +5880,7 @@ Leaving UserFN sq(9) => 81 FRENAME sq square REM MSG [square(9)] -../tests/test.rem(1150): Trig = Saturday, 16 February, 1991 +../tests/test.rem(1151): Trig = Saturday, 16 February, 1991 Entering UserFN square(9) x => 9 x => 9 @@ -5893,8 +5889,37 @@ Leaving UserFN square(9) => 81 81 REM MSG [sq(9)] -../tests/test.rem(1151): Trig = Saturday, 16 February, 1991 -../tests/test.rem(1151): Undefined function: `sq' +../tests/test.rem(1152): Trig = Saturday, 16 February, 1991 +../tests/test.rem(1152): Undefined function: `sq' + +# Test $DefaultDelta +SET $DefaultDelta 0 +CLEAR-OMIT-CONTEXT +OMIT 17 Feb 1991 +REM 18 Feb MSG This should not be seen +../tests/test.rem(1158): Trig = Monday, 18 February, 1991 + +SET $DefaultDelta 1 +REM 18 Feb MSG This should also not be seen +../tests/test.rem(1161): Trig = Monday, 18 February, 1991 + +SET $DefaultDelta 2 +REM 18 Feb MSG But this should be seen +../tests/test.rem(1164): Trig = Monday, 18 February, 1991 +But this should be seen + + +REM 18 Feb ++1 MSG Explicit delta should not be seen. +../tests/test.rem(1166): Trig = Monday, 18 February, 1991 +REM 18 Feb ++0 MSG Explicit delta should not be seen. +../tests/test.rem(1167): Trig = Monday, 18 February, 1991 + +REM 18 Feb +1 MSG Explicit delta should be seen - don't count OMITS +../tests/test.rem(1169): Trig = Monday, 18 February, 1991 +Explicit delta should be seen - don't count OMITS + +REM 18 Feb +0 MSG Explicit delta should not be seen. +../tests/test.rem(1170): Trig = Monday, 18 February, 1991 # Output expression-node stats DEBUG +s @@ -13778,6 +13803,7 @@ $DateTimeSep $December $DedupeReminders $DefaultColor +$DefaultDelta $DefaultPrio $DefaultTDelta $DeltaOverride diff --git a/tests/test.rem b/tests/test.rem index 8a7ed20e..c21643f0 100644 --- a/tests/test.rem +++ b/tests/test.rem @@ -1142,6 +1142,7 @@ REM MSG [square(9)] FRENAME nonexistent square REM MSG [square(9)] +FSET square(x) x*x FRENAME square sq REM MSG [square(9)] REM MSG [sq(9)] @@ -1150,6 +1151,24 @@ FRENAME sq square REM MSG [square(9)] REM MSG [sq(9)] +# Test $DefaultDelta +SET $DefaultDelta 0 +CLEAR-OMIT-CONTEXT +OMIT 17 Feb 1991 +REM 18 Feb MSG This should not be seen + +SET $DefaultDelta 1 +REM 18 Feb MSG This should also not be seen + +SET $DefaultDelta 2 +REM 18 Feb MSG But this should be seen + +REM 18 Feb ++1 MSG Explicit delta should not be seen. +REM 18 Feb ++0 MSG Explicit delta should not be seen. + +REM 18 Feb +1 MSG Explicit delta should be seen - don't count OMITS +REM 18 Feb +0 MSG Explicit delta should not be seen. + # Output expression-node stats DEBUG +s # Don't want Remind to queue reminders