Compare commits

...

9 Commits

Author SHA1 Message Date
Dianne Skoll
a8607cb012 Add some terms to hunspell dictionary. 2025-11-10 12:15:34 -05:00
Dianne Skoll
6caa404e59 Prep for 06.02.01 release. 2025-11-10 12:14:28 -05:00
Dianne Skoll
13e1e19855 Add some tests; make tess pass on MUSL. 2025-11-10 12:08:58 -05:00
Dianne Skoll
96d40b81df Make early exit contingent upon ParseUntriggered. 2025-11-10 12:02:47 -05:00
Dianne Skoll
30e4a9fc50 Catch possible error 2025-11-06 21:42:57 -05:00
Dianne Skoll
6d0fbeed20 Hide font chooser if we kill .opts 2025-11-06 21:40:58 -05:00
Dianne Skoll
3f1aaeefd2 Raise .opts when font chooser is dismissed. 2025-11-06 21:39:42 -05:00
Dianne Skoll
326604fe18 Free trigger resources if we exit early because of expired reminder. 2025-11-04 17:07:09 -05:00
Dianne Skoll
57e93553bf Exit early if a reminder has expired. 2025-11-04 17:05:02 -05:00
10 changed files with 114 additions and 18 deletions

18
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.72 for remind 06.02.00. # Generated by GNU Autoconf 2.72 for remind 06.02.01.
# #
# #
# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
@@ -601,8 +601,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='remind' PACKAGE_NAME='remind'
PACKAGE_TARNAME='remind' PACKAGE_TARNAME='remind'
PACKAGE_VERSION='06.02.00' PACKAGE_VERSION='06.02.01'
PACKAGE_STRING='remind 06.02.00' PACKAGE_STRING='remind 06.02.01'
PACKAGE_BUGREPORT='' PACKAGE_BUGREPORT=''
PACKAGE_URL='https://dianne.skoll.ca/projects/remind/' PACKAGE_URL='https://dianne.skoll.ca/projects/remind/'
@@ -1258,7 +1258,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
'configure' configures remind 06.02.00 to adapt to many kinds of systems. 'configure' configures remind 06.02.01 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1320,7 +1320,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of remind 06.02.00:";; short | recursive ) echo "Configuration of remind 06.02.01:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1408,7 +1408,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
remind configure 06.02.00 remind configure 06.02.01
generated by GNU Autoconf 2.72 generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc. Copyright (C) 2023 Free Software Foundation, Inc.
@@ -1871,7 +1871,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by remind $as_me 06.02.00, which was It was created by remind $as_me 06.02.01, which was
generated by GNU Autoconf 2.72. Invocation command line was generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw $ $0$ac_configure_args_raw
@@ -4899,7 +4899,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by remind $as_me 06.02.00, which was This file was extended by remind $as_me 06.02.01, which was
generated by GNU Autoconf 2.72. Invocation command line was generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -4964,7 +4964,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped' ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\ ac_cs_version="\\
remind config.status 06.02.00 remind config.status 06.02.01
configured by $0, generated by GNU Autoconf 2.72, configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
AC_INIT(remind, 06.02.00, , , https://dianne.skoll.ca/projects/remind/) AC_INIT(remind, 06.02.01, , , https://dianne.skoll.ca/projects/remind/)
AC_CONFIG_SRCDIR([src/queue.c]) AC_CONFIG_SRCDIR([src/queue.c])
cat <<'EOF' cat <<'EOF'

View File

@@ -1,5 +1,17 @@
CHANGES TO REMIND CHANGES TO REMIND
* VERSION 06.02.01 - 2025-11-10
- BUG FIX: remind: Obey $ParseUntriggered in Calendar Mode. Before,
$ParseUntriggered was always being treated as 1 in Calendar Mode.
- BUG FIX: TkRemind: Fix some buggy interactions between the Options
dialog and the font chooser.
- TEST FIX: One test was consistently failing under MUSL, and it is
not clear whether MUSL's or glibc's interpretation is correct.
Remove that test so all tests pass under MUSL.
* VERSION 06.02.00 - 2025-11-03 * VERSION 06.02.00 - 2025-11-03
- MAJOR NEW FEATURE: TkRemind: A new "View..." menu lets you choose a - MAJOR NEW FEATURE: TkRemind: A new "View..." menu lets you choose a

View File

@@ -1084,6 +1084,7 @@ proc EditOptions {} {
button $w.cancel -text "Cancel" -command "CancelOptions; destroy $w" button $w.cancel -text "Cancel" -command "CancelOptions; destroy $w"
wm protocol $w WM_DELETE_WINDOW "CancelOptions; destroy $w" wm protocol $w WM_DELETE_WINDOW "CancelOptions; destroy $w"
pack $w.default $w.dark $w.save $w.cancel -in $w.b -side left -expand 0 -fill x pack $w.default $w.dark $w.save $w.cancel -in $w.b -side left -expand 0 -fill x
bind $w <Destroy> {catch { tk fontchooser hide } }
bind $w <KeyPress-Escape> "$w.cancel flash; $w.cancel invoke" bind $w <KeyPress-Escape> "$w.cancel flash; $w.cancel invoke"
bind $w <Control-KeyPress-w> "$w.cancel flash; $w.cancel invoke" bind $w <Control-KeyPress-w> "$w.cancel flash; $w.cancel invoke"
CenterWindow $w . CenterWindow $w .
@@ -5158,6 +5159,15 @@ proc balloon_calculate_geometry { w } {
return "+$tx+$ty" return "+$tx+$ty"
} }
bind . <<TkFontchooserVisibility>> [list fontchooservisibility]
proc fontchooservisibility {} {
if {[tk fontchooser configure -visible]} {
return
}
catch { raise .opt }
}
proc ChooseCalboxFont {} { proc ChooseCalboxFont {} {
tk fontchooser show tk fontchooser show
tk fontchooser configure -font [font actual CalboxFont] tk fontchooser configure -font [font actual CalboxFont]

View File

@@ -2078,6 +2078,11 @@ static int DoCalRem(ParsePtr p, int col)
FreeTrig(&trig); FreeTrig(&trig);
return OK; return OK;
} }
if (dse < 0 && !ParseUntriggered) {
/* Expired */
FreeTrig(&trig);
return OK;
}
} else { } else {
/* Calculate the trigger date */ /* Calculate the trigger date */
EnterTimezone(trig.tz); EnterTimezone(trig.tz);
@@ -2090,6 +2095,11 @@ static int DoCalRem(ParsePtr p, int col)
FreeTrig(&trig); FreeTrig(&trig);
return r; return r;
} }
if (dse < 0 && !ParseUntriggered) {
/* Expired */
FreeTrig(&trig);
return OK;
}
} }
/* Adjust trigger date/time to time zone */ /* Adjust trigger date/time to time zone */

View File

@@ -501,6 +501,9 @@ int DoOmit(ParsePtr p)
int int
AddGlobalOmit(int dse) AddGlobalOmit(int dse)
{ {
if (dse < 0) {
return OK;
}
if (NumFullOmits == MAX_FULL_OMITS) return E_2MANY_FULL; if (NumFullOmits == MAX_FULL_OMITS) return E_2MANY_FULL;
if (!BexistsIntArray(FullOmitArray, NumFullOmits, dse)) { if (!BexistsIntArray(FullOmitArray, NumFullOmits, dse)) {
InsertIntoSortedArray(FullOmitArray, NumFullOmits, dse); InsertIntoSortedArray(FullOmitArray, NumFullOmits, dse);

View File

@@ -244,6 +244,9 @@ MSC
MSF MSF
MSGPREFIX MSGPREFIX
MSGSUFFIX MSGSUFFIX
MUSL
MUSL
MUSL's
Madsen Madsen
Makefile Makefile
Makefiles Makefiles
@@ -592,6 +595,7 @@ gaa
garbhol garbhol
gcc gcc
getenv getenv
glibc's
grey grey
greyed greyed
gridline gridline

View File

@@ -957,7 +957,16 @@ REM 2025 Oct [1] MSG Expr but not nonconst [today()]
REM 2025-10-01 MSG No expr seen [1+2] REM 2025-10-01 MSG No expr seen [1+2]
EOF EOF
# Purge mode # Early exit from calendar processing
$REMIND -p - 2026-01-01 <<'EOF' >> $OUT 2>&1
REM 1 Jan 1994 MSG 1/0 = [1/0]
EOF
# No early exit from calendar processing
$REMIND -p - 2026-01-01 <<'EOF' >> $OUT 2>&1
SET $ParseUntriggered 1
REM 1 Jan 1994 MSG 1/0 = [1/0]
EOF
cmp -s $OUT $CMP cmp -s $OUT $CMP
if [ "$?" = "0" ]; then if [ "$?" = "0" ]; then

View File

@@ -1046,7 +1046,7 @@ set a057 value("a05"+"6")
"a05" + "6" => "a056" "a05" + "6" => "a056"
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH" value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
set a058 version() set a058 version()
version() => "06.02.00" version() => "06.02.01"
set a059 wkday(today()) set a059 wkday(today())
today() => 1991-02-16 today() => 1991-02-16
wkday(1991-02-16) => "Saturday" wkday(1991-02-16) => "Saturday"
@@ -2609,7 +2609,7 @@ a056 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
a007 "1991-02-16" a007 "1991-02-16"
a057 "SDFJHSDF KSJDFH KJSDFH KSJDFH" a057 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
a008 "11:44" a008 "11:44"
a058 "06.02.00" a058 "06.02.01"
a059 "Saturday" a059 "Saturday"
a010 12 a010 12
a060 6 a060 6
@@ -5563,8 +5563,8 @@ REM SATISFY ""
REM SATISFY [version() > "01.00.00"] REM SATISFY [version() > "01.00.00"]
../tests/test.rem(1074): SATISFY: expression has no reference to trigdate() or $T... ../tests/test.rem(1074): SATISFY: expression has no reference to trigdate() or $T...
../tests/test.rem(1074): Trig = Saturday, 16 February, 1991 ../tests/test.rem(1074): Trig = Saturday, 16 February, 1991
version() => "06.02.00" version() => "06.02.01"
"06.02.00" > "01.00.00" => 1 "06.02.01" > "01.00.00" => 1
../tests/test.rem(1074): Trig(satisfied) = Saturday, 16 February, 1991 ../tests/test.rem(1074): Trig(satisfied) = Saturday, 16 February, 1991
REM SATISFY [max(x, max(x, 1, 2, 3), 4, 5, 6) * 5] REM SATISFY [max(x, max(x, 1, 2, 3), 4, 5, 6) * 5]
../tests/test.rem(1075): SATISFY: expression has no reference to trigdate() or $T... ../tests/test.rem(1075): SATISFY: expression has no reference to trigdate() or $T...
@@ -23716,7 +23716,7 @@ SECURITY: Won't read world-writable file or directory!
Error reading include_dir/ww: Can't open file Error reading include_dir/ww: Can't open file
SECURITY: Won't read world-writable file or directory! SECURITY: Won't read world-writable file or directory!
Error reading include_dir/ww: No files matching *.rem Error reading include_dir/ww: No files matching *.rem
06.02.00 06.02.01
Enabling test mode: This is meant for the acceptance test. Enabling test mode: This is meant for the acceptance test.
Do not use --test in production. Do not use --test in production.
In test mode, the system time is fixed at 2025-01-06@19:00 In test mode, the system time is fixed at 2025-01-06@19:00
@@ -39559,7 +39559,6 @@ trigger(2060-08-01@23:55, 1) => "1 August 2060 AT 19:55"
utctolocal(2050-01-01@01:00) => 2049-12-31@20:00 utctolocal(2050-01-01@01:00) => 2049-12-31@20:00
localtoutc(2050-12-31@23:44) => 2051-01-01@04:44 localtoutc(2050-12-31@23:44) => 2051-01-01@04:44
localtoutc(2050-03-13@00:00) => 2050-03-13@05:00 localtoutc(2050-03-13@00:00) => 2050-03-13@05:00
localtoutc(2050-03-13@02:00) => 2050-03-13@07:00
localtoutc(2050-11-06@00:00) => 2050-11-06@04:00 localtoutc(2050-11-06@00:00) => 2050-11-06@04:00
localtoutc(2050-11-06@02:00) => 2050-11-06@07:00 localtoutc(2050-11-06@02:00) => 2050-11-06@07:00
utctolocal(2051-01-01@04:44) => 2050-12-31@23:44 utctolocal(2051-01-01@04:44) => 2050-12-31@23:44
@@ -39957,3 +39956,50 @@ REM 2025 Oct [a] MSG Nonconst IS set
#!P: Next line has expired, but contains expression... please verify #!P: Next line has expired, but contains expression... please verify
#!P: Expired: REM 2025 Oct [1] MSG Expr but not nonconst [today()] #!P: Expired: REM 2025 Oct [1] MSG Expr but not nonconst [today()]
#!P: Expired: REM 2025-10-01 MSG No expr seen [1+2] #!P: Expired: REM 2025-10-01 MSG No expr seen [1+2]
# translations
{"LANGID":"en"}
# rem2ps begin
January 2026 31 4 0
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
December 31
February 28
# rem2ps end
# translations
{"LANGID":"en"}
# rem2ps begin
January 2026 31 4 0
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
December 31
February 28
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
-stdin-(2): `/': Division by zero
# rem2ps end

View File

@@ -26,7 +26,9 @@ set a utctolocal('2050-01-01@01:00')
set a localtoutc('2050-12-31@23:44') set a localtoutc('2050-12-31@23:44')
set a localtoutc('2050-03-13@00:00') set a localtoutc('2050-03-13@00:00')
set a localtoutc('2050-03-13@02:00') # This next one fails on MUSL, so it's commented out.
# We expect 2050-03-13@07:00 but MUSL gives 2050-03-13@06:00
#set a localtoutc('2050-03-13@02:00')
set a localtoutc('2050-11-06@00:00') set a localtoutc('2050-11-06@00:00')
set a localtoutc('2050-11-06@02:00') set a localtoutc('2050-11-06@02:00')