Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package remind for openSUSE:Factory checked in at 2022-08-10 17:14:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/remind (Old) and /work/SRC/openSUSE:Factory/.remind.new.1521 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "remind" Wed Aug 10 17:14:34 2022 rev:27 rq:994207 version:4.0.2 Changes: -------- --- /work/SRC/openSUSE:Factory/remind/remind.changes 2022-06-12 17:43:20.250501764 +0200 +++ /work/SRC/openSUSE:Factory/.remind.new.1521/remind.changes 2022-08-10 17:15:43.414087542 +0200 @@ -1,0 +2,19 @@ +Tue Aug 2 21:54:06 UTC 2022 - Detlef Steuer <detlef.ste...@gmx.de> + +- VERSION 4.0 Patch 2 - 2022-08-02 + +- IMPROVEMENT: remind: Allow more forms of OMIT as per Ian D. Allen!'s request: + + OMIT Month [THROUGH Month] + OMIT Day Month [THROUGH Day Month] + OMIT Day Month Year [THROUGH Day Month Year] + +- BUG FIX: Make $T behave as documented, exactly like trigdate(). $T would + return '1989-12-31' rather than 0 if the trigger date was not valid. + +- BUG FIX: TkRemind: Fix resizing bug for a calendar with 6 rows. + +- DOCUMENTATION IMPROVEMENT: Improve TkRemind documentation; document use + of inotifywait if available. + +------------------------------------------------------------------- Old: ---- remind-04.00.01.tar.gz New: ---- remind-04.00.02.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ remind.spec ++++++ --- /var/tmp/diff_new_pack.5TAr6Y/_old 2022-08-10 17:15:44.074089265 +0200 +++ /var/tmp/diff_new_pack.5TAr6Y/_new 2022-08-10 17:15:44.078089275 +0200 @@ -17,9 +17,9 @@ Name: remind -Version: 4.0.1 +Version: 4.0.2 Release: 0 -%define tar_version 04.00.01 +%define tar_version 04.00.02 Summary: A sophisticated calendar and alarm program License: GPL-2.0-only Group: Productivity/Office/Organizers ++++++ remind-04.00.01.tar.gz -> remind-04.00.02.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/.github/README.md new/remind-04.00.02/.github/README.md --- old/remind-04.00.01/.github/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/remind-04.00.02/.github/README.md 2022-08-02 20:58:15.000000000 +0200 @@ -0,0 +1,7 @@ +# Remind has moved + +For various reasons, I have decided to move Remind off GitHub. This repo +will be archived. To create merge requests or issues, please visit +Remind's new home at https://salsa.debian.org/dskoll/remind + +-- Dianne Skoll diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/configure new/remind-04.00.02/configure --- old/remind-04.00.01/configure 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/configure 2022-08-02 20:58:15.000000000 +0200 @@ -4006,7 +4006,7 @@ fi done -VERSION=04.00.01 +VERSION=04.00.02 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/configure.in new/remind-04.00.02/configure.in --- old/remind-04.00.01/configure.in 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/configure.in 2022-08-02 20:58:15.000000000 +0200 @@ -65,7 +65,7 @@ fi AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale initgroups) -VERSION=04.00.01 +VERSION=04.00.02 AC_SUBST(VERSION) AC_SUBST(PERL) AC_SUBST(PERLARTIFACTS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/docs/WHATSNEW new/remind-04.00.02/docs/WHATSNEW --- old/remind-04.00.01/docs/WHATSNEW 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/docs/WHATSNEW 2022-08-02 20:58:15.000000000 +0200 @@ -1,5 +1,21 @@ CHANGES TO REMIND +* VERSION 4.0 Patch 2 - 2022-08-02 + +- IMPROVEMENT: remind: Allow more forms of OMIT as per Ian D. Allen!'s request: + + OMIT Month [THROUGH Month] + OMIT Day Month [THROUGH Day Month] + OMIT Day Month Year [THROUGH Day Month Year] + +- BUG FIX: Make $T behave as documented, exactly like trigdate(). $T would + return '1989-12-31' rather than 0 if the trigger date was not valid. + +- BUG FIX: TkRemind: Fix resizing bug for a calendar with 6 rows. + +- DOCUMENTATION IMPROVEMENT: Improve TkRemind documentation; document use + of inotifywait if available. + * VERSION 4.0 Patch 1 - 2022-06-03 - IMPROVEMENT: Add $SuppressLRM system variable to suppress the UTF-8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/man/remind.1 new/remind-04.00.02/man/remind.1 --- old/remind-04.00.01/man/remind.1 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/man/remind.1 2022-08-02 20:58:15.000000000 +0200 @@ -1532,11 +1532,11 @@ \fBOMIT\fR is a command in its own right. Its syntax is: .PP .RS -\fBOMIT\fR \fIday\fR \fImonth\fR [\fIyear\fR] +\fBOMIT\fR [\fIday\fR] \fImonth\fR [\fIyear\fR] .PP or: .PP -\fBOMIT\fR \fIday1\fR \fImonth1\fR \fIyear1\fR \fBTHROUGH\fR \fIday2\fR \fImonth2\fR \fIyear2\fR +\fBOMIT\fR [\fIday1\fR] \fImonth1\fR [\fIyear1\fR] \fBTHROUGH\fR [\fIday2\fR] \fImonth2\fR [\fIyear2\fR] .RE .PP The \fBOMIT\fR command is used to "globally" omit certain days @@ -1545,8 +1545,13 @@ "\-\-" and "\+\+" forms. Some examples: .PP .nf - OMIT 1 Jan - OMIT 7 Sep 1992 + OMIT 1 Jan + OMIT 7 Sep 1992 + OMIT 15 Jan THROUGH 14 Feb + OMIT May # Equivalent to OMIT May 1 THROUGH May 31 + OMIT 25 Dec THROUGH 4 Jan + OMIT 2023-05-03 THROUGH 2023-05-12 + OMIT Jun THROUGH July # Equivalent to OMIT Jun 1 THROUGH July 31 .fi .PP The first example specifies a holiday that occurs on the same date each @@ -1578,9 +1583,7 @@ .fi .PP The \fBTHROUGH\fR keyword lets you conveniently OMIT a range of days. -The starting and ending points must be fully-specified (ie, they must -include day, month and year.). For example, the following sequences -are equivalent: +For example, the following sequences are equivalent: .PP .nf OMIT 3 Jan 2011 @@ -1592,12 +1595,28 @@ OMIT 3 Jan 2011 THROUGH 5 Jan 2011 .fi .PP -You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command: +You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command as +long as both dates are fully specified .PP .nf OMIT 6 Sep 2010 THROUGH 10 Sep 2010 MSG Vacation .fi - +.PP +If you use a THROUGH clause, then either the year must be supplied before +and after the THROUGH, or it must be missing before and after the THROUGH. +The following are legal: +.PP +.nf + OMIT 25 Dec THROUGH 6 Jan + OMIT 25 Dec 2024 THROUGH 6 Jan 2025 +.fi +.PP +But the following are not: +.PP +.nf + OMIT 25 Dec THROUGH 6 Jan 2025 + OMIT 25 Dec 2024 THROUGH 6 Jan +.nf .PP You can debug your global OMITs with the following command: .PP @@ -2342,8 +2361,8 @@ are approximately set by: .PP .nf - SET $Latitude "40.68933" - SET $Longitude "-74.04454" + SET $Latitude "40.68933" + SET $Longitude "-74.04454" .fi .RE .TP @@ -3238,7 +3257,7 @@ .TP .B strlen(s_str) Returns the length of \fIstr\fR. If the length of \fIstr\fR is too large -to represent as an integers, emits a "Number too high" error. +to represent as an integer, emits a "Number too high" error. .TP .B substr(s_str, i_start [,i_end]) Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/man/tkremind.1 new/remind-04.00.02/man/tkremind.1 --- old/remind-04.00.01/man/tkremind.1 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/man/tkremind.1 2022-08-02 20:58:15.000000000 +0200 @@ -18,13 +18,13 @@ binary. If you are using Tcl/Tk 8.5, you may also need either the Img or the tkpng extension to handle PNG images. -.SH OPTIONS -\fBTkRemind\fR itself has no options. However, it passes certain options -on to \fBRemind\fR. The options it passes are -\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR. -See the \fBRemind\fR man page for details about the options. -Note that \fBTkRemind\fR will respect the \fB\-m\fR and -\fB\-b1\fR options and adjust its appearance accordingly. +.SH COMMAND-LINE OPTIONS +\fBTkRemind\fR itself has no command-line options. However, it passes +certain options on to \fBRemind\fR. The options it passes are +\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR. See the +\fBRemind\fR man page for details about the options. Note that +\fBTkRemind\fR will respect the \fB\-m\fR and \fB\-b1\fR options and +adjust its appearance accordingly. \fIRead_file\fR is the file from which \fBTkRemind\fR reads reminders. It is in standard \fBRemind\fR format. \fIWrite_file\fR is the file @@ -44,8 +44,14 @@ .PP \fIConfig_file\fR is the file in which \fBTkRemind\fR stores -its options. If it is omitted, it defaults to \fI$HOME/.tkremindrt\fR. +its options. If it is omitted, it defaults to \fI$HOME/.config/tkremindrc\fR. +.PP +If \fB$HOME/.reminders\fR is a \fIdirectory\fR, then \fBTkRemind\fR defaults to +reading \fB$HOME/.reminders\fR and writing new reminders to +\fB$HOME/.reminders/100-tkremind.rem\fR. If you want to keep your +reminders in a directory \fB$HOME/.reminders\fR, you should create that +directory before starting \fBTkRemind\fR. .SH THE CALENDAR WINDOW When you start \fBTkRemind\fR, it displays a calendar for the current month, with today's date highlighted. Reminders are filled into each @@ -274,7 +280,7 @@ .PP Once you've configured the options the way you like them, press \fBApply Options\fR to put them into effect, \fBSave Options\fR -to put them into effect and save them in $HOME/.tkremindrc, or +to put them into effect and save them in $HOME/.config/tkremindrc, or \fBCancel\fR to cancel any changes you made. .SH KEYBOARD SHORTCUTS @@ -293,6 +299,19 @@ .B Home Today +.SH IMMEDIATE UPDATES + +If you are running \fBTkRemind\fR on Linux and have the +\fBinotifywait\fR program installed (part of the \fBinotify-tools\fR +or similar package), then \fBTkRemind\fR redraws the calendar window +\fIimmediately\fR if \fB$HOME/.reminders\fR changes (or, if it is a +directory, any files in that directory change.) +.PP +This lets \fBTkRemind\fR react immediately to hand-edited reminders or +to reminder files that are imported from another calendar system (for example, +you may have a cron job that periodically imports your Google Calendar +entries into Remind format.) + .SH ODDS AND ENDS \fBTkRemind\fR performs some basic consistency checks when you add or preview a reminder. However, if you edit a reminder in the previewer, @@ -323,8 +342,7 @@ for \fBTkRemind\fR (for example). .PP \fBTkRemind\fR uses tags to keep track of reminders in the -script file. It also places special comments in the reminder -file to store additional state. You can certainly mix +script file. You can certainly mix "hand-crafted" reminders with reminders created by \fBTkRemind\fR if you are aware of the following rules and limitations: .TP @@ -334,15 +352,16 @@ in hand-crafted reminders. .TP o -Do not edit lines starting with "# TKTAGnnn", "# TKEND", or any -lines in between. You can move such lines, but be careful to move -them as a single block. -.TP -o Hand-crafted reminders cannot be edited with \fBTkRemind\fR, and for hand-crafted timed reminders, you will not be presented with the "Don't remind me again" option when they pop up. +.PP +However, rather than mixing hand-edited files with \fBTkRemind\fR-generated +ones, it is better to make \fB$HOME/.reminders\fR a directory and keep +your hand-edited files in a separate \fB*.rem\fR file than \fBTkRemind\fR's +\fB100-tkremind.rem\fR file. + .SH SERVER MODE \fBRemind\fR has a special mode for interacting with programs like @@ -400,13 +419,13 @@ .SH AUTHOR TkRemind was written by Dianne Skoll <dia...@skoll.ca> -\fBTkRemind\fR is Copyright 1996-2020 by Dianne Skoll. +\fBTkRemind\fR is Copyright 1996-2022 by Dianne Skoll. .SH FILES -$HOME/.reminders -- default reminder file. +$HOME/.reminders -- default reminder file or directory. -$HOME/.tkremindrc -- \fBTkRemind\fR saved options. +$HOME/.config/tkremindrc -- \fBTkRemind\fR saved options. .SH SEE ALSO \fBremind\fR, \fBrem2ps\fR, \fBrem2pdf\fR, \fBrem2html\fR diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/scripts/tkremind new/remind-04.00.02/scripts/tkremind --- old/remind-04.00.01/scripts/tkremind 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/scripts/tkremind 2022-08-02 20:58:15.000000000 +0200 @@ -547,7 +547,9 @@ $w.t$i configure -state disabled -takefocus 0 } for {set i $first} {$i <= $last} {incr i} { + set row [expr ($i/7)+1] grid $w.f$i + grid rowconfigure $w $row -weight 1 pack $w.l$i -in $w.f$i -side top -expand 0 -fill x pack $w.t$i -in $w.f$i -side top -expand 1 -fill both raise $w.l$i @@ -581,7 +583,7 @@ pack $w.t$i -in $w.f$i -side top -expand 1 -fill both raise $w.l$i raise $w.t$i - grid rowconfigure $w [expr $row+1] -weight 1 + grid rowconfigure $w $row -weight 1 } $w.l$i configure -text "" -command "" -state normal -relief flat -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) $w.l$i configure -state disabled diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/err.h new/remind-04.00.02/src/err.h --- old/remind-04.00.01/src/err.h 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/err.h 2022-08-02 20:58:15.000000000 +0200 @@ -70,7 +70,7 @@ #define E_MON_TWICE 51 #define E_DAY_TWICE 52 #define E_UNKNOWN_TOKEN 53 -#define E_SPEC_MON_DAY 54 +#define E_SPEC_MON 54 #define E_2MANY_PART 55 #define E_2MANY_FULL 56 #define E_PUSH_NOPOP 57 @@ -187,7 +187,7 @@ "Month specified twice", "Day specified twice", "Unknown token", - "Must specify month and day in OMIT command", + "Must specify month in OMIT command", "Too many partial OMITs", "Too many full OMITs", "Warning: PUSH-OMIT-CONTEXT without matching POP-OMIT-CONTEXT", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/langs/finnish.h new/remind-04.00.02/src/langs/finnish.h --- old/remind-04.00.01/src/langs/finnish.h 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/langs/finnish.h 2022-08-02 20:58:15.000000000 +0200 @@ -195,7 +195,7 @@ "Kuukausi annettu kahdesti", "P??iv?? annettu kahdesti", "Tuntematon sana tai merkki", - "OMIT-komennossa on annettava kuukausi ja p??iv??", + "OMIT-komennossa on annettava kuukausi", "Liian monta osittaista OMIT-komentoa", "Liian monta t??ydellist?? OMIT-komentoa", "Varoitus: PUSH-OMIT-CONTEXT ilman POP-OMIT-CONTEXTia", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/langs/polish.h new/remind-04.00.02/src/langs/polish.h --- old/remind-04.00.01/src/langs/polish.h 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/langs/polish.h 2022-08-02 20:58:15.000000000 +0200 @@ -185,7 +185,7 @@ "Miesi??c podany dw??krotnie", "Dzie?? podany dw??krotnie", "Nieznane s??owo", - "W komendzie OMIT trzeba poda?? miesi??c i dzie??", + "W komendzie OMIT trzeba poda?? miesi??c", "Za du??o cz????ciowych komend OMIT", "Za du??o pe??nych komend OMIT", "Ostrze??enie: PUSH-OMIT-CONTEXT bez POP-OMIT-CONTEXT", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/langs/portbr.h new/remind-04.00.02/src/langs/portbr.h --- old/remind-04.00.01/src/langs/portbr.h 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/langs/portbr.h 2022-08-02 20:58:15.000000000 +0200 @@ -194,7 +194,7 @@ "Mes especificado duas vezes", "Dia especificado duas vezes", "Token desconhecido", - "Mes e dia devem ser especificados no comando OMIT", + "O mes deve ser especificados no comando OMIT", "Muitos OMITs parciais", "Muitos OMITs full", "Aviso: PUSH-OMIT-CONTEXT sem POP-OMIT-CONTEXT correspondente", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/omit.c new/remind-04.00.02/src/omit.c --- old/remind-04.00.01/src/omit.c 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/omit.c 2022-08-02 20:58:15.000000000 +0200 @@ -271,7 +271,6 @@ *cur = key; } -static int DoThroughOmit(ParsePtr p, int y, int m, int d); static void DumpOmits(void); /***************************************************************/ @@ -283,11 +282,15 @@ /***************************************************************/ int DoOmit(ParsePtr p) { - int y = NO_YR, m = NO_MON, d = NO_DAY, r; + int y[2] = {NO_YR, NO_YR}, m[2] = {NO_MON, NO_MON}, d[2] = {NO_DAY, NO_DAY}, r; Token tok; - int parsing=1; + int parsing = 1; + int seen_through = 0; int syndrome; int not_first_token = -1; + int start, end, tmp; + + int mc, dc; DynamicBuffer buf; DBufInit(&buf); @@ -308,28 +311,28 @@ case T_Date: DBufFree(&buf); - if (y != NO_YR) return E_YR_TWICE; - if (m != NO_MON) return E_MON_TWICE; - if (d != NO_DAY) return E_DAY_TWICE; - FromJulian(tok.val, &y, &m, &d); + if (y[seen_through] != NO_YR) return E_YR_TWICE; + if (m[seen_through] != NO_MON) return E_MON_TWICE; + if (d[seen_through] != NO_DAY) return E_DAY_TWICE; + FromJulian(tok.val, &y[seen_through], &m[seen_through], &d[seen_through]); break; case T_Year: DBufFree(&buf); - if (y != NO_YR) return E_YR_TWICE; - y = tok.val; + if (y[seen_through] != NO_YR) return E_YR_TWICE; + y[seen_through] = tok.val; break; case T_Month: DBufFree(&buf); - if (m != NO_MON) return E_MON_TWICE; - m = tok.val; + if (m[seen_through] != NO_MON) return E_MON_TWICE; + m[seen_through] = tok.val; break; case T_Day: DBufFree(&buf); - if (d != NO_DAY) return E_DAY_TWICE; - d = tok.val; + if (d[seen_through] != NO_DAY) return E_DAY_TWICE; + d[seen_through] = tok.val; break; case T_Delta: @@ -338,8 +341,9 @@ case T_Through: DBufFree(&buf); - if (y == NO_YR || m == NO_MON || d == NO_DAY) return E_INCOMPLETE; - return DoThroughOmit(p, y, m, d); + if (seen_through) return E_UNTIL_TWICE; + seen_through = 1; + break; case T_Empty: case T_Comment: @@ -358,26 +362,85 @@ return E_UNKNOWN_TOKEN; } } - if (m == NO_MON || d == NO_DAY) return E_SPEC_MON_DAY; - if (y == NO_YR) { - if (NumPartialOmits == MAX_PARTIAL_OMITS) return E_2MANY_PART; + if (!seen_through) { + /* We must have at least a month */ + if (m[0] == NO_MON) return E_SPEC_MON; + m[1] = m[0]; + y[1] = y[0]; + if (d[0] == NO_DAY) { + d[0] = 1; + if (y[0] == NO_YR) { + d[1] = MonthDays[m[0]]; + } else { + d[1] = DaysInMonth(m[0], y[0]); + } + } else { + d[1] = d[0]; + m[1] = m[0]; + y[1] = y[0]; + } + } else { + if (m[0] == NO_MON) return E_SPEC_MON; + if (m[1] == NO_MON) return E_SPEC_MON; + if ((y[0] != NO_YR && y[1] == NO_YR) || + (y[0] == NO_YR && y[1] != NO_YR)) { + return E_BAD_DATE; + } + if (d[0] == NO_DAY) d[0] = 1; + if (d[1] == NO_DAY) { + if (y[1] == NO_YR) { + d[1] = MonthDays[m[1]]; + } else { + d[1] = DaysInMonth(m[1], y[1]); + } + } + } - if (d > MonthDays[m]) return E_BAD_DATE; - syndrome = (m<<5) + d; - if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) { - InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome); - NumPartialOmits++; - } + if (y[0] == NO_YR) { + /* Partial OMITs */ + if (d[0] > MonthDays[m[0]]) return E_BAD_DATE; + if (d[1] > MonthDays[m[1]]) return E_BAD_DATE; + dc = d[0]; + mc = m[0]; + while(1) { + syndrome = (mc<<5) + dc; + if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) { + InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome); + NumPartialOmits++; + } + if (mc == m[1] && dc == d[1]) { + break; + } + dc++; + if (dc > MonthDays[mc]) { + dc = 1; + mc++; + if (mc > 11) { + mc = 0; + } + } + } } else { + /* Full OMITs */ + if (d[0] > DaysInMonth(m[0], y[0])) return E_BAD_DATE; + if (d[1] > DaysInMonth(m[1], y[1])) return E_BAD_DATE; + start = Julian(y[0], m[0], d[0]); + end = Julian(y[1], m[1], d[1]); + if (end < start) { + Eprint("Error: THROUGH date earlier than start date"); + return E_BAD_DATE; + } - if (d > DaysInMonth(m, y)) return E_BAD_DATE; - syndrome = Julian(y, m, d); - r = AddGlobalOmit(syndrome); - if (r) { - return r; + for (tmp = start; tmp <= end; tmp++) { + if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) { + if (NumFullOmits >= MAX_FULL_OMITS) return E_2MANY_FULL; + InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp); + NumFullOmits++; + } } } + if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM; return OK; @@ -394,95 +457,6 @@ return OK; } -static int -DoThroughOmit(ParsePtr p, int ystart, int mstart, int dstart) -{ - int yend = NO_YR, mend = NO_MON, dend = NO_DAY, r; - int start, end, tmp; - int parsing = 1; - - Token tok; - - DynamicBuffer buf; - DBufInit(&buf); - - while(parsing) { - if ( (r=ParseToken(p, &buf)) ) return r; - FindToken(DBufValue(&buf), &tok); - - switch(tok.type) { - case T_Date: - DBufFree(&buf); - if (yend != NO_YR) return E_YR_TWICE; - if (mend != NO_MON) return E_MON_TWICE; - if (dend != NO_DAY) return E_DAY_TWICE; - FromJulian(tok.val, ¥d, &mend, &dend); - break; - - case T_Year: - DBufFree(&buf); - if (yend != NO_YR) return E_YR_TWICE; - yend = tok.val; - break; - - case T_Month: - DBufFree(&buf); - if (mend != NO_MON) return E_MON_TWICE; - mend = tok.val; - break; - - case T_Day: - DBufFree(&buf); - if (dend != NO_DAY) return E_DAY_TWICE; - dend = tok.val; - break; - - case T_Empty: - case T_Comment: - case T_RemType: - case T_Priority: - case T_Tag: - case T_Duration: - DBufFree(&buf); - parsing = 0; - break; - - default: - Eprint("%s: `%s' (OMIT)", ErrMsg[E_UNKNOWN_TOKEN], - DBufValue(&buf)); - DBufFree(&buf); - return E_UNKNOWN_TOKEN; - - } - } - if (yend == NO_YR || mend == NO_MON || dend == NO_DAY) return E_INCOMPLETE; - if (dend > DaysInMonth(mend, yend)) return E_BAD_DATE; - if (dstart > DaysInMonth(mstart, ystart)) return E_BAD_DATE; - - start = Julian(ystart, mstart, dstart); - end = Julian(yend, mend, dend); - - if (end < start) { - Wprint("Warning: Swapping dates on OMIT ... THROUGH ... line"); - tmp = start; - start = end; - end = tmp; - } - - tmp = end - start + 1; - - /* Don't create any OMITs if there would be too many. */ - if (NumFullOmits + tmp >= MAX_FULL_OMITS) return E_2MANY_FULL; - for (tmp = start; tmp <= end; tmp++) { - if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) { - InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp); - NumFullOmits++; - } - } - if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM; - return OK; -} - void DumpOmits(void) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/src/var.c new/remind-04.00.02/src/var.c --- old/remind-04.00.01/src/var.c 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/src/var.c 2022-08-02 20:58:15.000000000 +0200 @@ -170,10 +170,11 @@ static int trig_date_func(int do_set, Value *val) { UNUSED(do_set); - val->type = DATE_TYPE; if (!LastTrigValid) { + val->type = INT_TYPE; val->v.val = 0; } else { + val->type = DATE_TYPE; val->v.val = LastTriggerDate; } return OK; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/tests/test.cmp new/remind-04.00.02/tests/test.cmp --- old/remind-04.00.01/tests/test.cmp 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/tests/test.cmp 2022-08-02 20:58:15.000000000 +0200 @@ -1024,7 +1024,7 @@ "a05" + "6" => "a056" value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH" set a058 version() -version() => "04.00.01" +version() => "04.00.02" set a059 wkday(today()) today() => 1991-02-16 wkday(1991-02-16) => "Saturday" @@ -2594,7 +2594,7 @@ a109 2012-01-01 a128 2018-02-03@16:45 a039 "February" -a058 "04.00.01" +a058 "04.00.02" a077 "1992 92 " a096 -4 @@ -2766,7 +2766,7 @@ $SubsIndent 0 [0, 132] $Sunday "Sunday" $SuppressLRM 0 [0, 1] - $T 1990-01-01 + $T 0 $Td -1 $Thursday "Thursday" $TimeSep ":" @@ -3943,6 +3943,118 @@ pad("foo", "0", 65536) => String too long ../tests/test.rem(799): String too long +# Test OMIT +CLEAR-OMIT-CONTEXT + +OMIT Apr +OMIT Jun THROUGH July 15 +OMIT Sep 5 THROUGH Sep 10 +OMIT 2024-12-25 THROUGH 2025-01-04 +OMIT Apr 2022 through July +../tests/test.rem(808): Bad date specification + +OMIT DUMP +Global Full OMITs (11 of maximum allowed 1000): + 2024-12-25 + 2024-12-26 + 2024-12-27 + 2024-12-28 + 2024-12-29 + 2024-12-30 + 2024-12-31 + 2025-01-01 + 2025-01-02 + 2025-01-03 + 2025-01-04 +Global Partial OMITs (81 of maximum allowed 366): + 04-01 + 04-02 + 04-03 + 04-04 + 04-05 + 04-06 + 04-07 + 04-08 + 04-09 + 04-10 + 04-11 + 04-12 + 04-13 + 04-14 + 04-15 + 04-16 + 04-17 + 04-18 + 04-19 + 04-20 + 04-21 + 04-22 + 04-23 + 04-24 + 04-25 + 04-26 + 04-27 + 04-28 + 04-29 + 04-30 + 06-01 + 06-02 + 06-03 + 06-04 + 06-05 + 06-06 + 06-07 + 06-08 + 06-09 + 06-10 + 06-11 + 06-12 + 06-13 + 06-14 + 06-15 + 06-16 + 06-17 + 06-18 + 06-19 + 06-20 + 06-21 + 06-22 + 06-23 + 06-24 + 06-25 + 06-26 + 06-27 + 06-28 + 06-29 + 06-30 + 07-01 + 07-02 + 07-03 + 07-04 + 07-05 + 07-06 + 07-07 + 07-08 + 07-09 + 07-10 + 07-11 + 07-12 + 07-13 + 07-14 + 07-15 + 09-05 + 09-06 + 09-07 + 09-08 + 09-09 + 09-10 +CLEAR-OMIT-CONTEXT +OMIT 2000-01-01 THROUGH 2020-12-31 +../tests/test.rem(812): Too many full OMITs + +OMIT Dec 5 2029 through Dec 4 2029 +../tests/test.rem(814): Error: THROUGH date earlier than start date + # Don't want Remind to queue reminders EXIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/remind-04.00.01/tests/test.rem new/remind-04.00.02/tests/test.rem --- old/remind-04.00.01/tests/test.rem 2022-06-03 22:22:19.000000000 +0200 +++ new/remind-04.00.02/tests/test.rem 2022-08-02 20:58:15.000000000 +0200 @@ -798,6 +798,21 @@ set a pad(11:33, " ", 12, 1) set a pad("foo", "0", $MaxStringLen+1) +# Test OMIT +CLEAR-OMIT-CONTEXT + +OMIT Apr +OMIT Jun THROUGH July 15 +OMIT Sep 5 THROUGH Sep 10 +OMIT 2024-12-25 THROUGH 2025-01-04 +OMIT Apr 2022 through July + +OMIT DUMP +CLEAR-OMIT-CONTEXT +OMIT 2000-01-01 THROUGH 2020-12-31 + +OMIT Dec 5 2029 through Dec 4 2029 + # Don't want Remind to queue reminders EXIT