Compare commits

...

40 Commits

Author SHA1 Message Date
Dianne Skoll
daf09d9d4e Fix doc bug. 2022-01-24 17:49:00 -05:00
Dianne Skoll
511cdb2784 Document changes to dynamic buffers. 2022-01-24 10:23:49 -05:00
Dianne Skoll
a567a9b777 Document that strlen() can return E_2HIGH 2022-01-22 18:42:11 -05:00
Dianne Skoll
05bc3af03d Use size_t rather than int to track dynamic buffer size.
This lets use create dynamic buffers larger than 2GB.
2022-01-22 18:40:27 -05:00
Dianne Skoll
7a048d1702 Document update to shell() 2022-01-22 18:26:22 -05:00
Dianne Skoll
8d7f9bcb8b Make shell() obey MaxStringLen 2022-01-22 18:24:38 -05:00
Dianne Skoll
9fd8b0f890 Update change to rem2html 2022-01-22 18:11:50 -05:00
Dianne Skoll
86873d0725 Use JSON::MaybeXS instead of JSON (courtesy of Ethan Rooke) 2022-01-22 18:09:02 -05:00
Dianne Skoll
b22438b489 Bump version to 03.03.12. 2022-01-22 09:21:02 -05:00
Dianne Skoll
683b38a7ab 3.3.12 will go out in 2022, not 2021. 2022-01-22 09:19:14 -05:00
Dianne Skoll
d6b4fdd6d3 Always clean up. 2022-01-20 20:10:39 -05:00
Dianne Skoll
c996649954 Update docs. 2022-01-20 19:52:29 -05:00
Dianne Skoll
d59ad77893 Document DO better. 2022-01-20 19:48:49 -05:00
Dianne Skoll
e637c20dee Don't try to do filedir() shenanigans for "DO /absolute/path" 2022-01-20 19:47:04 -05:00
Dianne Skoll
19dc588319 Update regression test file 2022-01-20 19:39:26 -05:00
Dianne Skoll
dc53ef2e71 Document DO 2022-01-20 19:39:12 -05:00
Dianne Skoll
e51d7f3c6d Add "DO file" command which is equivalent to "INCLUDE [filedir()]/file" 2022-01-20 19:30:10 -05:00
Dianne Skoll
5a7e86e443 Update WHATSNEW 2022-01-20 12:41:58 -05:00
Dianne Skoll
7f4edae006 Update test output comparison file. 2022-01-20 09:53:08 -05:00
Dianne Skoll
2f4e1462e3 Document -tt[N] and $DefaultTDelta 2022-01-20 09:52:57 -05:00
Dianne Skoll
54f5d81a8c Properly check for repeated tdelta 2022-01-20 09:52:46 -05:00
Dianne Skoll
d33c27289a Implement $DefaultTDelta system variable and -tt[N] command-line option. 2022-01-20 09:44:17 -05:00
Dianne Skoll
1675fdb499 Keep config file in $XDG_CONFIG_HOME/tkremindrc in preference to ~/.tkremindrc 2021-12-31 16:16:16 -05:00
Dianne Skoll
9321109691 Remove code that annoyed people on Windows or Mac OS X.
I think I've made my point, and the MICROSOFT-AND-APPLE file still exists.
2021-12-31 15:33:43 -05:00
Dianne Skoll
e6a4f939a3 Add brackets. 2021-12-29 20:51:01 -05:00
Dianne Skoll
c7ae214853 Remove comment. 2021-12-29 20:44:46 -05:00
Dianne Skoll
68a9cc047e Add tests for deprecation messages. 2021-12-29 10:42:30 -05:00
Dianne Skoll
1f2b25f852 Write options to a temporary file and then rename 2021-12-28 21:14:33 -05:00
Dianne Skoll
20040c8857 Update WHATSNEW 2021-12-28 21:05:13 -05:00
Dianne Skoll
ac64b0c11f Fix option descriptor. 2021-12-28 21:03:30 -05:00
Dianne Skoll
ba47ce7ca8 Make TkRemind remember printer settings. 2021-12-28 21:02:33 -05:00
Dianne Skoll
be1ab4ea36 Properly support '-i$Latitude="x.yyy"' 2021-12-28 17:56:31 -05:00
Dianne Skoll
13cd9f3d04 Fix memory leak. 2021-12-28 17:53:41 -05:00
Dianne Skoll
8e1f82de5f Get rid of _back function definition (not needed) 2021-12-28 16:59:19 -05:00
Dianne Skoll
8631ad3122 Sort function names alphabetically. 2021-12-28 15:31:03 -05:00
Dianne Skoll
90e6aef9d7 Set default location in custom.h 2021-12-28 15:26:59 -05:00
Dianne Skoll
698190fb72 Set default location right on Parliament Hill. 2021-12-28 15:25:32 -05:00
Dianne Skoll
27cfaa9404 Refactor common code in setting latitude/longitude vars 2021-12-28 14:02:07 -05:00
Dianne Skoll
9f296fe76d Update docs 2021-12-28 10:47:21 -05:00
Dianne Skoll
d0112adb08 Sleep with higher precision in -z0 mode. 2021-12-28 10:32:06 -05:00
29 changed files with 628 additions and 437 deletions

32
configure vendored
View File

@@ -2292,36 +2292,6 @@ EOF
ac_config_headers="$ac_config_headers src/config.h"
if test "`uname -s`" = "Darwin" ; then
trap 'echo Be patient...' INT TERM
cat <<'EOF'
Please don't use Apple products. This script will continue in 30 seconds
if you insist on compiling Remind on Mac OS X.
EOF
for i in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do
sleep 1
done
trap - INT
trap - TERM
fi
if uname -s | grep -i -q 'cygwin' ; then
trap 'echo Be patient...' INT TERM
cat <<'EOF'
Please don't use Microsoft products. This script will continue in 30
seconds if you insist on compiling Remind on Cygwin.
EOF
for i in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do
sleep 1
done
trap - INT
trap - TERM
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4032,7 +4002,7 @@ _ACEOF
fi
done
VERSION=03.03.11
VERSION=03.03.12
ac_config_files="$ac_config_files src/Makefile www/Makefile src/version.h rem2html/Makefile"

View File

@@ -14,36 +14,6 @@ EOF
AC_CONFIG_HEADER(src/config.h)
if test "`uname -s`" = "Darwin" ; then
trap 'echo Be patient...' INT TERM
cat <<'EOF'
Please don't use Apple products. This script will continue in 30 seconds
if you insist on compiling Remind on Mac OS X.
EOF
for i in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do
sleep 1
done
trap - INT
trap - TERM
fi
if uname -s | grep -i -q 'cygwin' ; then
trap 'echo Be patient...' INT TERM
cat <<'EOF'
Please don't use Microsoft products. This script will continue in 30
seconds if you insist on compiling Remind on Cygwin.
EOF
for i in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do
sleep 1
done
trap - INT
trap - TERM
fi
dnl Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
@@ -76,7 +46,7 @@ if test "$GCC" = yes; then
fi
AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale initgroups)
VERSION=03.03.11
VERSION=03.03.12
AC_SUBST(VERSION)
AC_SUBST(PERL)
AC_OUTPUT(src/Makefile www/Makefile src/version.h rem2html/Makefile)

View File

@@ -1,16 +1,44 @@
CHANGES TO REMIND
* VERSION 3.3 Patch 12 - 2022-01-24
- UPDATE: rem2html: Use JSON::MaybeXS instead of JSON::Any, since JSON::Any
is deprecated. NOTE INCOMPATIBILITY: If you don't have JSON::MaybeXS
installed, you'll need to install it before trying to install or update
rem2html
- NEW FEATURE: Add a DO command. This is just like INCLUDE, but relative
paths are interpreted relative to the directory containing the current
file. That is:
DO somefile.rem
is equivalent to:
INCLUDE [filedir()]/somefile.rem
- NEW FEATURE: Add the $DefaultTDelta system variable and associated
-tt[N] command-line option to set a default time delta for timed
reminder without an explicit +N delta.
- IMPROVEMENT: TkRemind: Store .tkremindrc in $XDG_CONFIG_HOME/tkremindrc
or $HOME/.config/tkremindrc as per the XDG Base Directory Specification.
- BUG FIX: remind: Make the shell() built-in function respect
$MaxStringLen
- BUG FIX: Use size_t to track the size of dynamic buffers rather than int.
This permits Remind to read in files with lines longer than 1GB and to
consume more than 1GB of output from the shell() command, both of which
will surely be massively useful. (The old limit was 1GB rather than 2GB
because of details of the dynamic buffer resizing algorithm.)
* VERSION 3.3 Patch 11 - 2021-12-30
- IMPROVEMENT: TkRemind: Save the print dialog settings so they persist.
- IMPROVEMENT: TkRemind: Show queue in sorted order.
- NEW FUNCTION: Remind: Add the isany() built-in function.
- IMPROVEMENT: rem2html: Add class names indicating number of rows in calendar
- IMPROVEMENT: rem2html: Coalesce table.rem-cal CSS into one block. Thanks
to Ian! D. Allen for pointing this out.
- IMPROVEMENT: TkRemind: Pass "-r" flag to inotifywait
- IMPROVEMENT: TkRemind: Draw moon phases with Tk canvas items rather than
@@ -21,6 +49,16 @@ CHANGES TO REMIND
them; fire up the editor with either Button-1 or Button-3 for
non-TkRemind-generated reminders.
- NEW FUNCTION: Remind: Add the isany() built-in function.
- IMPROVEMENT: rem2html: Add class names indicating number of rows in calendar
- IMPROVEMENT: remind: In -z0 mode, sleep with higher precision to ensure we
wake as close to possible to each 1-minute boundary.
- IMPROVEMENT: rem2html: Coalesce table.rem-cal CSS into one block. Thanks
to Ian! D. Allen for pointing this out.
- IMPROVEMENT: examples/defs.rem: Modernize the examples and get rid of some
cruft.

View File

@@ -92,9 +92,6 @@ SET Week_3 15
SET Week_4 22
FSET _last(mo) "1 " + MON((mo%12)+1) + " --7"
# Handy function to provide SCANFROM dates...
FSET _back(days) $U-days
#################################################################
# Function that removes a single leading zero from a string... #
#################################################################
@@ -134,7 +131,7 @@ REM 1 MSG John's [_mo_num(11, 1984)] 'monthly' anniversary
############################################################################
# Calculate the weekday of the holiday.
REM 4 July SCANFROM [_back(7)] SATISFY 1
REM 4 July SCANFROM -7 SATISFY 1
SET iday $T
IF WKDAYNUM(iday) == Sat
@@ -216,15 +213,14 @@ REM [easter+39] MSG %"Ascension Day%"
REM [easter+49] MSG %"Pentecost%"
# Some holidays are omitted, some are not. You may want to change
# which ones are omitted - use the general forms shown below.
# You'll need the _back() function and the Week_n variables defined
# way up in the file.
# which ones are omitted - use the general forms shown below. You'll
# need the Week_n variables defined way up in the file.
OMIT Jan 1 MSG %"New Year's%" Day
REM Mon Jan [Week_3] MSG Martin Luther King - %"MLK Day%"
REM Feb 2 MSG %"Ground Hog Day%"
REM Feb 14 MSG %"Valentine's%" Day
REM Mon Feb [Week_3] SCANFROM [_back(7)] ADDOMIT MSG %"President's Day%"
REM Mon Feb [Week_3] SCANFROM -7 ADDOMIT MSG %"President's Day%"
REM Mar 17 MSG %"St. Patrick's%" Day
# The DST rules are accurate for most locations in
@@ -241,18 +237,18 @@ REM May 5 MSG %"Cinco de Mayo%"
REM Sat May [Week_1] MSG %"Kentucky Derby%"
REM Sun May [Week_2] MSG %"Mother's Day%"
REM Sat May [Week_3] MSG %"Armed Forces Day%"
REM Mon [_last(May)] SCANFROM [_back(7)] ADDOMIT MSG %"Memorial Day%"
REM Mon [_last(May)] SCANFROM -7 ADDOMIT MSG %"Memorial Day%"
REM Jun 14 MSG %"Flag Day%"
REM Sun Jun [Week_3] MSG %"Father's Day%"
REM Mon Sep [Week_1] SCANFROM [_back(7)] ADDOMIT MSG %"Labor Day%"
REM Mon Sep [Week_1] SCANFROM -7 ADDOMIT MSG %"Labor Day%"
REM Mon Oct [Week_2] MSG %"Columbus Day%"
REM Nov 11 MSG %"Veterans Day%"
REM Oct 30 MSG %"Mischief Night%"
REM Oct 31 MSG %"Halloween%"
REM Tue Nov 2 SCANFROM [_back(7)] SATISFY [($Ty % 4) == 0] MSG %"Election Day%"
REM Thu Nov [Week_4] SCANFROM [_back(7)] ADDOMIT MSG %"Thanksgiving Day%"
REM Fri Nov [Week_4+1] SCANFROM [_back(7)] ADDOMIT MSG %"Thanksgiving (cont.)%"
REM Tue Nov 2 SCANFROM -7 SATISFY [($Ty % 4) == 0] MSG %"Election Day%"
REM Thu Nov [Week_4] SCANFROM -7 ADDOMIT MSG %"Thanksgiving Day%"
REM Fri Nov [Week_4+1] SCANFROM -7 ADDOMIT MSG %"Thanksgiving (cont.)%"
OMIT Dec 24 MSG %"Christmas Eve%"
OMIT Dec 25 MSG %"Christmas%" Day

View File

@@ -190,6 +190,11 @@ If you supply a number \fIn\fR after the \fB\-t\fR option, then
\fBRemind\fR pretends that each non-expired reminder has a \fIdelta\fR
of \fIn\fR days and triggers reminders accordingly.
.TP
.B \-tt\fR[\fIn\fR]
The \fB-tt\fR option causes \fBRemind\fR to assume a default delta of
\fIn\fR minutes for all timed reminders. If \fB\-tt\fR is given with
no \fIn\fR, a default delta of 5 minutes is used.
.TP
.B \-h
The \fB\-h\fR option ("hush...") suppresses certain warning and information
messages. In particular, if no reminders are triggered, this mode
@@ -1546,7 +1551,7 @@ the first day of the month. The local \fBOMIT\fR keyword causes the
Finally, the \fBAFTER\fR keyword will keep moving the reminder forward
until it has passed any holidays specified with global \fBOMIT\fR
commands.
.SH THE INCLUDE COMMAND
.SH THE DO AND INCLUDE COMMANDS
.PP
\fBRemind\fR allows you to include other files in your reminder script,
similar to the C preprocessor #include directive. For example, your
@@ -1570,7 +1575,32 @@ If you specify a \fIdirectory\fR as the argument to \fBINCLUDE\fR, then
\fBRemind\fR will process all files in that directory that match the shell
patterm "*.rem". The files are processed in sorted order; the sort order
matches that used by the shell when it expands "*.rem".
.PP
Note that the file specified by an \fBINCLUDE\fR command is interpreted
relative to the \fIcurrent working directory of the Remind process\fR.
If you want to include a file relative to the directory containing the
currently-processing file, use \fBDO\fR instead. For example,
if the current file is \fB/home/user/.reminders/foo.rem\fR and Remind's
working directory is \fB/home/user\fR, then:
.PP
.nf
# Read /home/user/.reminders/bar.rem
DO bar.rem
# Read /usr/share/bar.rem - absolute path
DO /usr/share/bar.rem
# Read /home/user/bar.rem
INCLUDE bar.rem
# Read /usr/share/bar.rem - absolute path
INCLUDE /usr/share/bar.rem
.fi
.PP
Arguably, the \fBINCLUDE\fR command should have worked the way \fBDO\fR
does right from the start, but changing it would have broken
backward-compatibility, hence the introduction of \fBDO\fR.
.PP
.SH THE RUN COMMAND
.PP
If you include other files in your reminder script, you may not always
@@ -2080,6 +2110,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 $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
set in your script. If \fB$DefaultDelta\fR is non-zero, you can use an
explicit delta of +0 in an AT clause to countermand the default delta.
.TP
.B $DontFork (read-only)
If non-zero, then the \fB\-c\fR option was supplied on the command line.
.TP
@@ -2224,7 +2260,9 @@ The maximum number of iterations for the \fBSATISFY\fR clause
.TP
.B $MaxStringLen
A limit on the longest string that \fBRemind\fR will allow you
to create. The default is 65535.
to create. The default is 65535. If you set \fB$MaxStringLen\fR to 0
or to -1, then \fBremind\fR will allow you to create arbitrarily-long
strings, at least until it runs out of memory.
.TP
.B $MinsFromUTC
The number of minutes between Universal Time Coordinated and local time. If
@@ -2389,21 +2427,6 @@ $TimeSep and $DateTimeSep when formatting its output. For example:
.PP
.RE
.TP
.B isany(arg1 [,arg2, ..., argN]);
Returns 1 if the first argument \fIarg1\fR is equal to any of the
subsequent arguments \fIarg2\fR through \fIargN\fR; returns 0 otherwise.
Also returns 0 if called with only one argument.
.RS
.PP
As an example, the following two expressions are equivalent:
.PP
.nf
(a == b) || (a == c) || (a == d) || (a == e)
isany(a, b, c, d, e)
.fi
.RE
.TP
.B args(s_fname)
Returns the number of arguments expected by the user-defined function
\fIfname\fR, or \-1 if no such user-defined function exists. Note that
@@ -2634,7 +2657,9 @@ follows:
.PP
.RS
This includes the file "stuff" in the same directory as the
current file being processed.
current file being processed. Note that this workaround is
no longer necessary because \fBDO stuff\fR will achieve the
same goal.
.RE
.TP
.B filename()
@@ -2683,6 +2708,21 @@ The optional parameter \fIstart\fR specifies the position in
\fIsearch\fR at which to start looking for \fItarget\fR.
.RE
.TP
.B isany(arg1 [,arg2, ..., argN]);
Returns 1 if the first argument \fIarg1\fR is equal to any of the
subsequent arguments \fIarg2\fR through \fIargN\fR; returns 0 otherwise.
Also returns 0 if called with only one argument.
.RS
.PP
As an example, the following two expressions are equivalent:
.PP
.nf
(a == b) || (a == c) || (a == d) || (a == e)
isany(a, b, c, d, e)
.fi
.RE
.TP
.B isdst([d_date [,t_time]]) \fRor\fB isdst(q_datetime)
Returns a positive number if daylight saving time is in
effect on the specified date and time. \fIDate\fR
@@ -2977,8 +3017,8 @@ not be executed.
.PP
If \fImaxlen\fR is specified, then \fBshell()\fR returns the first
\fImaxlen\fR characters of output (rather than the first 511). If
\fImaxlen\fR is specified as a negative number, then \fIall\fR the
output from \fIcmd\fR is returned.
\fImaxlen\fR is specified as a negative number, then it defaults to
the value of the system variable \fB$MaxStringLen\fR.
.RE
.TP
.B shellescape(s_str)
@@ -3024,7 +3064,8 @@ takes \fIa\fR back to 2009-05-13.
.RE
.TP
.B strlen(s_str)
Returns the length of \fIstr\fR.
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.
.TP
.B substr(s_str, i_start [,i_end])
Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from

View File

@@ -7,7 +7,7 @@ bindir=@bindir@
datadir=@datadir@
datarootdir=@datarootdir@
PERL=@PERL@
PERLMODS_NEEDED=JSON::Any Getopt::Long
PERLMODS_NEEDED=JSON::MaybeXS Getopt::Long
all:
true

View File

@@ -4,7 +4,7 @@ use strict;
use warnings;
use Getopt::Long;
use JSON::Any;
use JSON::MaybeXS;
my %Options;
@@ -266,7 +266,7 @@ sub parse_input
($y, $m, $d, $special, $tag, $duration, $time, $body) =
($1, $2, $3, $4, $5, $6, $7, $8);
} elsif (/\{/) {
my $obj = JSON::Any->jsonToObj($_);
my $obj = decode_json($_);
next unless ($obj->{date} =~ /^(\d+)-(\d+)-(\d+)$/);
$y = $1;
$m = $2;

View File

@@ -137,7 +137,6 @@ set TimerUpdateForChanges ""
# Remind program to execute -- supply full path if you want
set Remind "remind"
#set Remind "/home/dfs/Remind/src/remind"
# Rem2PS program to execute -- supply full path if you want
set Rem2PS "rem2ps"
@@ -147,7 +146,7 @@ set ReminderFile {NOSUCHFILE}
set ReminderFile [file nativename "~/.reminders"]
# Default options file
set ConfigFile ~/.tkremindrc
set ConfigFile ""
set EditorPid -1
@@ -200,14 +199,29 @@ set PSCmd {}
# Print options -- destination file; letter-size; landscape; fill page; default
# encoding; 36pt margins; print small calendars
set PrintDest file
set PrintSize letter
set PrintOrient landscape
set PrintFill 1
set PrintDaysRight 1
set PrintEncoding 0
set PrintMargins 36pt
set PrintSmallCalendars 1
set OptDescr(PrintDest) "Print destination: file or command"
set Option(PrintDest) file
set OptDescr(PrintSize) "Page size: a4 or letter"
set Option(PrintSize) letter
set OptDescr(PrintOrient) "Page orientation: portrait or landscape"
set Option(PrintOrient) landscape
set OptDescr(PrintFill) "(0/1) If 1, fill entire page when printing"
set Option(PrintFill) 1
set OptDescr(PrintDaysRight) "(0/1) If 1, put day numbers in the top-right of each calendar box"
set Option(PrintDaysRight) 1
set OptDescr(PrintEncoding) "(0/1) If 1, apply ISO-8859-1 encoding to PostScript output"
set Option(PrintEncoding) 0
set OptDescr(PrintMargins) "Print margins: One of 24pt, 36pt or 48pt"
set Option(PrintMargins) 36pt
set OptDescr(PrintSmallCalendars) "(0/1) If 1, print small calendars in PostScript output"
set Option(PrintSmallCalendars) 1
set WarningHeaders [list "# Lines staring with REM TAG TKTAGnnn ... were created by tkremind" "# Do not edit them by hand or results may be unpredictable."]
@@ -829,27 +843,9 @@ proc ApplyOptions { w } {
# Saves options in specified config file
#***********************************************************************
proc SaveOptions { w } {
global Option OptDescr ConfigFile
global Option OptDescr
ApplyOptions $w
set problem [catch {set f [open $ConfigFile "w"]} err]
if {$problem} {
tk_dialog .error Error "Can't write $ConfigFile: $err" 0 OK
return
}
puts $f "# TkRemind option file -- created automatically"
puts $f "# [clock format [clock seconds]]"
puts $f "# Format of each line is 'key value' where 'key'"
puts $f "# specifies the option name, and 'value' is a"
puts $f "# *legal Tcl list element* specifying the option value."
foreach name [lsort [array names Option]] {
puts $f ""
puts $f "# $OptDescr($name)"
puts $f [list $name $Option($name)]
}
puts $f ""
close $f
WriteOptionsToFile
FillCalWindow
.h.title configure -background $Option(WinBackground) -foreground $Option(LabelColor)
for {set i 0} {$i < 7} {incr i} {
@@ -868,6 +864,30 @@ proc SaveOptions { w } {
.b.options configure -foreground $Option(LabelColor) -background $Option(WinBackground)
}
proc WriteOptionsToFile {} {
global ConfigFile
global Option OptDescr
set problem [catch {set f [open "$ConfigFile.tmp" "w"]} err]
if {$problem} {
tk_dialog .error Error "Can't write $ConfigFile.tmp: $err" 0 OK
return
}
puts $f "# TkRemind option file -- created automatically"
puts $f "# [clock format [clock seconds]]"
puts $f "# Format of each line is 'key value' where 'key'"
puts $f "# specifies the option name, and 'value' is a"
puts $f "# *legal Tcl list element* specifying the option value."
foreach name [lsort [array names Option]] {
puts $f ""
puts $f "# $OptDescr($name)"
puts $f [list $name $Option($name)]
}
puts $f ""
close $f
file rename -force "$ConfigFile.tmp" $ConfigFile
}
#***********************************************************************
# %PROCEDURE: LoadOptions
# %ARGUMENTS:
@@ -1130,7 +1150,7 @@ proc Status { stuff } {
# None
#---------------------------------------------------------------------------
proc DoPrint {} {
global PrintDest PrintSize PrintMargins PrintOrient PrintFill PrintDaysRight PrintEncoding PrintSmallCalendars PrintStatus Rem2PS PSCmd Option
global Rem2PS PSCmd Option PrintStatus
global CurMonth CurYear MonthNames
catch {destroy .p}
toplevel .p
@@ -1145,30 +1165,30 @@ proc DoPrint {} {
frame .p.f3a -relief sunken -border 2
frame .p.f4
radiobutton .p.tofile -text "To file: " -variable PrintDest -value file
radiobutton .p.tofile -text "To file: " -variable Option(PrintDest) -value file
entry .p.filename
button .p.browse -text "Browse..." -command PrintFileBrowse
radiobutton .p.tocmd -text "To command: " -variable PrintDest -value command
radiobutton .p.tocmd -text "To command: " -variable Option(PrintDest) -value command
entry .p.command
.p.command insert end "lpr"
label .p.size -text "Paper Size:"
radiobutton .p.letter -text "Letter" -variable PrintSize -value letter
radiobutton .p.a4 -text "A4" -variable PrintSize -value a4
radiobutton .p.letter -text "Letter" -variable Option(PrintSize) -value letter
radiobutton .p.a4 -text "A4" -variable Option(PrintSize) -value a4
label .p.margin -text "Margins:"
radiobutton .p.24pt -text "24pt margins" -variable PrintMargins -value 24pt
radiobutton .p.36pt -text "36pt margins" -variable PrintMargins -value 36pt
radiobutton .p.48pt -text "48pt margins" -variable PrintMargins -value 48pt
radiobutton .p.24pt -text "24pt margins" -variable Option(PrintMargins) -value 24pt
radiobutton .p.36pt -text "36pt margins" -variable Option(PrintMargins) -value 36pt
radiobutton .p.48pt -text "48pt margins" -variable Option(PrintMargins) -value 48pt
label .p.orient -text "Orientation:"
radiobutton .p.landscape -text "Landscape" -variable PrintOrient -value landscape
radiobutton .p.portrait -text "Portrait" -variable PrintOrient -value portrait
radiobutton .p.landscape -text "Landscape" -variable Option(PrintOrient) -value landscape
radiobutton .p.portrait -text "Portrait" -variable Option(PrintOrient) -value portrait
checkbutton .p.fill -text "Fill page" -variable PrintFill
checkbutton .p.right -text "Day numbers at top-right" -variable PrintDaysRight
checkbutton .p.encoding -text "ISO 8859-1 PostScript encoding" -variable PrintEncoding
checkbutton .p.calendars -text "Print small calendars" -variable PrintSmallCalendars
checkbutton .p.fill -text "Fill page" -variable Option(PrintFill)
checkbutton .p.right -text "Day numbers at top-right" -variable Option(PrintDaysRight)
checkbutton .p.encoding -text "ISO 8859-1 PostScript encoding" -variable Option(PrintEncoding)
checkbutton .p.calendars -text "Print small calendars" -variable Option(PrintSmallCalendars)
button .p.print -text "Print" -command {set PrintStatus print}
button .p.cancel -text "Cancel" -command {set PrintStatus cancel}
@@ -1202,7 +1222,8 @@ proc DoPrint {} {
if {$PrintStatus == "cancel"} {
return
}
if {$PrintDest == "file"} {
WriteOptionsToFile
if {$Option(PrintDest) == "file"} {
if {$fname == ""} {
tk_dialog .error Error "No filename specified" error 0 Ok
return
@@ -1225,36 +1246,36 @@ proc DoPrint {} {
# Build the command line
set p [regsub EXTRA $PSCmd $Option(ExtraRemindArgs)]
set cmd "$p 1 [lindex $MonthNames $CurMonth] $CurYear | $Rem2PS"
if {$PrintSize == "letter"} {
if {$Option(PrintSize) == "letter"} {
append cmd " -m Letter"
} else {
append cmd " -m A4"
}
if {$PrintMargins == "24pt"} {
if {$Option(PrintMargins) == "24pt"} {
append cmd " -or 24 -ol 24 -ot 24 -ob 24"
} elseif {$PrintMargins == "36pt"} {
} elseif {$Option(PrintMargins) == "36pt"} {
append cmd " -or 36 -ol 36 -ot 36 -ob 36"
} else {
append cmd " -or 48 -ol 48 -ot 48 -ob 48"
}
if {$PrintOrient == "landscape"} {
if {$Option(PrintOrient) == "landscape"} {
append cmd " -l"
}
if {$PrintFill} {
if {$Option(PrintFill)} {
append cmd " -e"
}
if {!$PrintDaysRight} {
if {!$Option(PrintDaysRight)} {
append cmd " -x"
}
if {$PrintEncoding} {
if {$Option(PrintEncoding)} {
append cmd " -i"
}
if {$PrintSmallCalendars} {
if {$Option(PrintSmallCalendars)} {
append cmd " -c3"
} else {
append cmd " -c0"
@@ -2710,6 +2731,7 @@ proc main {} {
close $f
}
}
FindConfigFile
LoadOptions
ShowTodaysReminders
ScanForTags $AppendFile
@@ -3892,4 +3914,47 @@ proc PickColor {index button} {
raise .opt
}
proc FindConfigFile {} {
global ConfigFile
# If it was set on the command line, use that
if {"$ConfigFile" != ""} {
return
}
set confighome ""
if {[info exists env(XDG_CONFIG_HOME)]} {
set confighome $env(XDG_CONFIG_HOME)
}
if {"$confighome" == ""} {
set confighome "~/.config"
}
# If $confighome does not exist, attempt to
# create it
if {![file exists $confighome]} {
catch { file mkdir $confighome }
}
if {[file isdirectory $confighome]} {
# Migrate .tkremindrc to $confighome/tkremindrc
if {[file exists "~/.tkremindrc"]} {
if {![file exists "$confighome/tkreminderc"]} {
puts "Migrating ~/.tkremindrc to $confighome/tkremindrc"
if {[catch { file copy "~/.tkremindrc" "$confighome/tkremindrc"}]} {
puts "FAILED!\n"
set ConfigFile "~/.tkremindrc"
return
}
catch { file delete "~/.tkremindrc" }
}
set ConfigFile "$confighome/tkremindrc"
return
}
set ConfigFile "$confighome/tkremindrc"
return
}
set ConfigFile "~/.tkremindrc"
}
main

View File

@@ -1238,7 +1238,10 @@ static void GenerateCalEntries(int col)
case T_IfTrig: r=DoIfTrig(&p); break;
case T_Else: r=DoElse(&p); break;
case T_EndIf: r=DoEndif(&p); break;
case T_Include: r=DoInclude(&p); break;
case T_Include:
case T_IncludeR: r=DoInclude(&p, tok.type); break;
case T_IncludeCmd: r=DoIncludeCmd(&p); break;
case T_Exit: DoExit(&p); break;
case T_Set: r=DoSet(&p); break;
@@ -1333,7 +1336,7 @@ static void WriteCalTrailer(void)
/***************************************************************/
static int DoCalRem(ParsePtr p, int col)
{
int oldLen;
size_t oldLen;
Trigger trig;
TimeTrig tim;
Value v;

View File

@@ -22,11 +22,11 @@
/* The default values are initially set to Ottawa, Ontario, Canada. */
/*---------------------------------------------------------------------*/
#define LAT_DEG 45
#define LAT_MIN 24
#define LAT_SEC 0
#define LAT_MIN 25
#define LAT_SEC 30
#define LON_DEG 75
#define LON_MIN 39
#define LON_SEC 0
#define LON_MIN 41
#define LON_SEC 59
#define LOCATION "Ottawa"
/*---------------------------------------------------------------------*/

View File

@@ -22,11 +22,11 @@
/* The default values are initially set to Ottawa, Ontario, Canada. */
/*---------------------------------------------------------------------*/
#define LAT_DEG 45
#define LAT_MIN 24
#define LAT_SEC 0
#define LAT_MIN 25
#define LAT_SEC 30
#define LON_DEG 75
#define LON_MIN 39
#define LON_SEC 0
#define LON_MIN 41
#define LON_SEC 59
#define LOCATION "Ottawa"
/*---------------------------------------------------------------------*/

View File

@@ -234,7 +234,7 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim, int save_in_globals)
DBufInit(&(trig->tags));
trig->passthru[0] = 0;
tim->ttime = NO_TIME;
tim->delta = NO_DELTA;
tim->delta = DefaultTDelta;
tim->rep = NO_REP;
tim->duration = NO_TIME;
if (save_in_globals) {
@@ -489,7 +489,7 @@ static int ParseTimeTrig(ParsePtr s, TimeTrig *tim, int save_in_globals)
{
Token tok;
int r;
int seen_delta = 0;
DynamicBuffer buf;
DBufInit(&buf);
@@ -506,8 +506,9 @@ static int ParseTimeTrig(ParsePtr s, TimeTrig *tim, int save_in_globals)
case T_Delta:
DBufFree(&buf);
if (tim->delta != NO_DELTA) return E_DELTA_TWICE;
tim->delta = (tok.val > 0) ? tok.val : -tok.val;
if (seen_delta) return E_DELTA_TWICE;
seen_delta = 1;
tim->delta = (tok.val >= 0) ? tok.val : -tok.val;
break;
case T_Rep:

View File

@@ -27,11 +27,11 @@
Doubles the size of dynamic buffer until it has room for at least
'n' characters, not including trailing '\0'
**********************************************************************/
static int DBufMakeRoom(DynamicBuffer *dbuf, int n)
static int DBufMakeRoom(DynamicBuffer *dbuf, size_t n)
{
/* Double size until it's greater than n (strictly > to leave room
for trailing '\0' */
int size = dbuf->allocatedLen;
size_t size = dbuf->allocatedLen;
char *buf;
if (size > n) return OK;

View File

@@ -17,8 +17,8 @@
#define DBUF_STATIC_SIZE 128
typedef struct {
char *buffer;
int len;
int allocatedLen;
size_t len;
size_t allocatedLen;
char staticBuf[DBUF_STATIC_SIZE];
} DynamicBuffer;

View File

@@ -828,7 +828,7 @@ static int Add(void)
v3.type = STR_TYPE;
l1 = strlen(v1.v.str);
l2 = strlen(v2.v.str);
if (MaxStringLen && (l1 + l2 > (size_t) MaxStringLen)) {
if (MaxStringLen > 0 && (l1 + l2 > (size_t) MaxStringLen)) {
DestroyValue(v1); DestroyValue(v2);
return E_STRING_TOO_LONG;
}

View File

@@ -557,23 +557,68 @@ static int PopFile(void)
/* The INCLUDE command. */
/* */
/***************************************************************/
int DoInclude(ParsePtr p)
int DoInclude(ParsePtr p, enum TokTypes tok)
{
DynamicBuffer buf;
DynamicBuffer fullname;
DynamicBuffer path;
int r, e;
r = OK;
char const *s;
DBufInit(&buf);
DBufInit(&fullname);
DBufInit(&path);
if ( (r=ParseToken(p, &buf)) ) return r;
e = VerifyEoln(p);
if (e) Eprint("%s", ErrMsg[e]);
if ( (r=IncludeFile(DBufValue(&buf))) ) {
DBufFree(&buf);
return r;
if (tok == T_IncludeR && *(DBufValue(&buf)) != '/') {
/* Relative include: Include relative to dir
containing current file */
if (DBufPuts(&path, FileName) != OK) {
r = E_NO_MEM;
goto bailout;
}
if (DBufLen(&path) == 0) {
s = DBufValue(&buf);
} else {
char *t = DBufValue(&path) + DBufLen(&path) - 1;
while (t > DBufValue(&path) && *t != '/') t--;
if (*t == '/') {
*t = 0;
if (DBufPuts(&fullname, DBufValue(&path)) != OK) {
r = E_NO_MEM;
goto bailout;
}
if (DBufPuts(&fullname, "/") != OK) {
r = E_NO_MEM;
goto bailout;
}
if (DBufPuts(&fullname, DBufValue(&buf)) != OK) {
r = E_NO_MEM;
goto bailout;
}
s = DBufValue(&fullname);
} else {
s = DBufValue(&buf);
}
}
} else {
s = DBufValue(&buf);
}
DBufFree(&buf);
if ( (r=IncludeFile(s)) ) {
goto bailout;
}
NumIfs = 0;
IfFlags = 0;
return OK;
bailout:
DBufFree(&buf);
DBufFree(&path);
DBufFree(&fullname);
return r;
}
/***************************************************************/

View File

@@ -411,8 +411,9 @@ static int RetStrVal(char const *s, func_info *info)
if (!s) {
RetVal.v.str = malloc(1);
if (RetVal.v.str) *RetVal.v.str = 0;
} else
} else {
RetVal.v.str = StrDup(s);
}
if (!RetVal.v.str) {
RetVal.type = ERR_TYPE;
@@ -432,7 +433,9 @@ static int FStrlen(func_info *info)
Value *v = &ARG(0);
if (v->type != STR_TYPE) return E_BAD_TYPE;
RetVal.type = INT_TYPE;
RETVAL = strlen(v->v.str);
size_t l = strlen(v->v.str);
if (l > INT_MAX) return E_2HIGH;
RETVAL = (int) l;
return OK;
}
@@ -1571,6 +1574,15 @@ static int FShell(func_info *info)
ASSERT_TYPE(1, INT_TYPE);
maxlen = ARGV(1);
}
/* Don't allow maxlen to exceed the maximum length of
a string variable */
if (MaxStringLen > 0) {
if (maxlen <= 0 || maxlen > MaxStringLen) {
maxlen = MaxStringLen;
}
}
fp = popen(ARGSTR(0), "r");
if (!fp) return E_IO_ERR;
while (1) {
@@ -1584,7 +1596,7 @@ static int FShell(func_info *info)
DBufFree(&buf);
return E_NO_MEM;
}
if (maxlen > 0 && DBufLen(&buf) >= maxlen) {
if (maxlen > 0 && DBufLen(&buf) >= (size_t) maxlen) {
break;
}
}
@@ -2400,6 +2412,7 @@ static int FPsshade(func_info *info)
if (!psshade_warned) {
psshade_warned = 1;
Eprint("psshade() is deprecated; use SPECIAL SHADE instead.");
FreshLine = 1;
}
sprintf(s, "/_A LineWidth 2 div def ");
@@ -2455,6 +2468,7 @@ static int FPsmoon(func_info *info)
if (!psmoon_warned) {
psmoon_warned = 1;
Eprint("psmoon() is deprecated; use SPECIAL MOON instead.");
FreshLine = 1;
}
if (size > 0) {
sprintf(sizebuf, "%d", size);

View File

@@ -61,6 +61,7 @@ EXTERN INIT( int CalMonths, 0);
EXTERN INIT( int Hush, 0);
EXTERN INIT( int NextMode, 0);
EXTERN INIT( int InfiniteDelta, 0);
EXTERN INIT( int DefaultTDelta, 0);
EXTERN INIT( int DeltaOffset, 0);
EXTERN INIT( int RunDisabled, 0);
EXTERN INIT( int IgnoreOnce, 0);

View File

@@ -76,9 +76,6 @@
* A minus sign alone indicates to take input from stdin
*
**************************************************************/
#if defined(__APPLE__) || defined(__CYGWIN__)
static void rkrphgvba(int x);
#endif
/* For parsing an integer */
#define PARSENUM(var, s) \
@@ -145,12 +142,6 @@ void InitRemind(int argc, char const *argv[])
int x;
int jul;
#if defined(__APPLE__)
rkrphgvba(0);
#elif defined(__CYGWIN__)
rkrphgvba(1);
#endif
jul = NO_DATE;
/* If stdout is a terminal, initialize $FormWidth to terminal width-8,
@@ -193,6 +184,9 @@ void InitRemind(int argc, char const *argv[])
JulianToday = RealToday;
FromJulian(JulianToday, &CurYear, &CurMon, &CurDay);
/* Initialize Latitude and Longitude */
set_lat_and_long_from_components();
/* See if we were invoked as "rem" rather than "remind" */
if (argv[0]) {
s = strrchr(argv[0], '/');
@@ -290,7 +284,19 @@ void InitRemind(int argc, char const *argv[])
case 't':
case 'T':
if (!*arg) {
if (*arg == 'T' || *arg == 't') {
arg++;
if (!*arg) {
DefaultTDelta = 5;
} else {
PARSENUM(DefaultTDelta, arg);
if (DefaultTDelta < 0) {
DefaultTDelta = 0;
} else if (DefaultTDelta > 1440) {
DefaultTDelta = 1440;
}
}
} else if (!*arg) {
InfiniteDelta = 1;
} else {
PARSENUM(DeltaOffset, arg);
@@ -647,7 +653,6 @@ void InitRemind(int argc, char const *argv[])
}
set_lat_and_long_from_components();
/* Figure out the offset from UTC */
if (CalculateUTC)
(void) CalcMinsFromUTC(JulianToday, SystemTime(0)/60,
@@ -848,6 +853,7 @@ static void InitializeVar(char const *str)
if (*varname == '$') {
r=SetSysVar(varname+1, &val);
DestroyValue(val);
if (r) fprintf(ErrFp, ErrMsg[M_I_OPTION], ErrMsg[r]);
return;
}
@@ -881,46 +887,3 @@ AddTrustedUser(char const *username)
NumTrustedUsers++;
}
#if defined(__APPLE__) || defined(__CYGWIN__)
static char const pmsg1[] = {
0x4c, 0x62, 0x68, 0x20, 0x6e, 0x63, 0x63, 0x72, 0x6e, 0x65, 0x20,
0x67, 0x62, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x68, 0x61, 0x61, 0x76,
0x61, 0x74, 0x20, 0x45, 0x72, 0x7a, 0x76, 0x61, 0x71, 0x20, 0x62,
0x61, 0x20, 0x6e, 0x61, 0x20, 0x4e, 0x63, 0x63, 0x79, 0x72, 0x20,
0x63, 0x65, 0x62, 0x71, 0x68, 0x70, 0x67, 0x2e, 0x20, 0x20, 0x56,
0x27, 0x71, 0x20, 0x65, 0x6e, 0x67, 0x75, 0x72, 0x65, 0x20, 0x67,
0x75, 0x6e, 0x67, 0x0a, 0x6c, 0x62, 0x68, 0x20, 0x71, 0x76, 0x71,
0x61, 0x27, 0x67, 0x2e, 0x20, 0x20, 0x45, 0x72, 0x7a, 0x76, 0x61,
0x71, 0x20, 0x72, 0x6b, 0x72, 0x70, 0x68, 0x67, 0x76, 0x62, 0x61,
0x20, 0x6a, 0x76, 0x79, 0x79, 0x20, 0x70, 0x62, 0x61, 0x67, 0x76,
0x61, 0x68, 0x72, 0x20, 0x7a, 0x62, 0x7a, 0x72, 0x61, 0x67, 0x6e,
0x65, 0x76, 0x79, 0x6c, 0x2e, 0x0a, 0x00
};
static char const pmsg2[] = {
0x4c, 0x62, 0x68, 0x20, 0x6e, 0x63, 0x63, 0x72, 0x6e, 0x65, 0x20,
0x67, 0x62, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x68, 0x61, 0x61, 0x76,
0x61, 0x74, 0x20, 0x45, 0x72, 0x7a, 0x76, 0x61, 0x71, 0x20, 0x62,
0x61, 0x20, 0x6e, 0x20, 0x5a, 0x76, 0x70, 0x65, 0x62, 0x66, 0x62,
0x73, 0x67, 0x20, 0x66, 0x6c, 0x66, 0x67, 0x72, 0x7a, 0x2e, 0x20,
0x20, 0x56, 0x27, 0x71, 0x20, 0x65, 0x6e, 0x67, 0x75, 0x72, 0x65,
0x20, 0x67, 0x75, 0x6e, 0x67, 0x0a, 0x6c, 0x62, 0x68, 0x20, 0x71,
0x76, 0x71, 0x61, 0x27, 0x67, 0x2e, 0x20, 0x20, 0x45, 0x72, 0x7a,
0x76, 0x61, 0x71, 0x20, 0x72, 0x6b, 0x72, 0x70, 0x68, 0x67, 0x76,
0x62, 0x61, 0x20, 0x6a, 0x76, 0x79, 0x79, 0x20, 0x70, 0x62, 0x61,
0x67, 0x76, 0x61, 0x68, 0x72, 0x20, 0x7a, 0x62, 0x7a, 0x72, 0x61,
0x67, 0x6e, 0x65, 0x76, 0x79, 0x6c, 0x2e, 0x0a, 0x00
};
static void
rkrphgvba(int x)
{
char const *s = (x ? pmsg2 : pmsg1);
while(*s) {
int c = (int) *s++;
c=isalpha(c)?tolower(c)<0x6e?c+13:c-13:c;
putchar(c);
}
sleep(5);
}
#endif

View File

@@ -235,12 +235,13 @@ static void DoReminders(void)
case T_Else: r=DoElse(&p); break;
case T_EndIf: r=DoEndif(&p); break;
case T_Include:
case T_IncludeR:
/* In purge mode, include closes file, so we
need to echo it here! */
if (PurgeMode) {
PurgeEchoLine("%s\n", CurLine);
}
r=DoInclude(&p);
r=DoInclude(&p, tok.type);
purge_handled = 1;
break;
case T_IncludeCmd:

View File

@@ -44,7 +44,7 @@ void PrintValue (Value *v, FILE *fp);
int CopyValue (Value *dest, const Value *src);
int ReadLine (void);
int OpenFile (char const *fname);
int DoInclude (ParsePtr p);
int DoInclude (ParsePtr p, enum TokTypes tok);
int DoIncludeCmd (ParsePtr p);
int IncludeFile (char const *fname);
int GetAccessDate (char const *file);

View File

@@ -57,7 +57,7 @@ static void CheckInitialFile (void);
static int CalculateNextTime (QueuedRem *q);
static QueuedRem *FindNextReminder (void);
static int CalculateNextTimeUsingSched (QueuedRem *q);
static void DaemonWait (unsigned int sleeptime);
static void DaemonWait (struct timeval *sleep_tv);
static void reread (void);
/***************************************************************/
@@ -121,6 +121,8 @@ void HandleQueuedReminders(void)
unsigned SleepTime;
Parser p;
Trigger trig;
struct timeval tv;
struct timeval sleep_tv;
/* Suppress the BANNER from being issued */
NumTriggered = 1;
@@ -186,16 +188,20 @@ void HandleQueuedReminders(void)
/* Wake up once a minute to recalibrate sleep time in
case of laptop hibernation */
if (Daemon <= 0) {
if (Daemon < 0) {
/* Wake up on the next exact minute */
SleepTime = 60 - (SystemTime(1)%60);
}
if (Daemon >= 0) {
sleep(SleepTime);
gettimeofday(&tv, NULL);
sleep_tv.tv_sec = 60 - (tv.tv_sec % 60);
if (tv.tv_usec != 0 && sleep_tv.tv_sec != 0) {
sleep_tv.tv_sec--;
sleep_tv.tv_usec = 1000000 - tv.tv_usec;
} else {
sleep_tv.tv_usec = 0;
}
DaemonWait(&sleep_tv);
} else {
DaemonWait(SleepTime);
}
sleep(SleepTime);
}
/* If not in daemon mode and day has rolled around,
exit -- not much we can do. */
@@ -519,19 +525,16 @@ json_queue(QueuedRem const *q)
/* Sleep or read command from stdin in "daemon -1" mode */
/* */
/***************************************************************/
static void DaemonWait(unsigned int sleeptime)
static void DaemonWait(struct timeval *sleep_tv)
{
fd_set readSet;
struct timeval timeout;
int retval;
int y, m, d;
char cmdLine[256];
FD_ZERO(&readSet);
FD_SET(0, &readSet);
timeout.tv_sec = sleeptime;
timeout.tv_usec = 0;
retval = select(1, &readSet, NULL, NULL, &timeout);
retval = select(1, &readSet, NULL, NULL, sleep_tv);
/* If date has rolled around, restart */
if (RealToday != SystemDate(&y, &m, &d)) {

View File

@@ -48,6 +48,7 @@ Token TokArray[] = {
{ "clear-omit-context", 5, T_Clr, 0 },
{ "debug", 5, T_Debug, 0 },
{ "december", 3, T_Month, 11 },
{ "do", 2, T_IncludeR, 0 },
{ "dumpvars", 4, T_Dumpvars, 0 },
{ "duration", 3, T_Duration, 0 },
{ "else", 4, T_Else, 0 },

View File

@@ -151,7 +151,7 @@ typedef Parser *ParsePtr; /* Pointer to parser structure */
enum TokTypes
{ T_Illegal,
/* Commands first */
T_Rem, T_Push, T_Pop, T_Preserve, T_Include, T_IncludeCmd, T_If, T_Else, T_EndIf,
T_Rem, T_Push, T_Pop, T_Preserve, T_Include, T_IncludeR, T_IncludeCmd, T_If, T_Else, T_EndIf,
T_IfTrig, T_ErrMsg,
T_Set, T_UnSet, T_Fset, T_Omit, T_Banner, T_Exit,
T_AddOmit,

163
src/var.c
View File

@@ -48,159 +48,88 @@ static void deprecated_var(char const *var, char const *instead)
}
}
static int latdeg_func(int do_set, Value *val)
static int latlong_component_func(int do_set, Value *val, int *var, int min, int max, char const *varname, char const *newvarname)
{
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LatDeg;
val->v.val = *var;
return OK;
}
deprecated_var("$LatDeg", "$Latitude");
deprecated_var(varname, newvarname);
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -90) return E_2LOW;
if (val->v.val > 90) return E_2HIGH;
LatDeg = val->v.val;
if (val->v.val < min) return E_2LOW;
if (val->v.val > max) return E_2HIGH;
*var = val->v.val;
set_lat_and_long_from_components();
return OK;
}
static int latdeg_func(int do_set, Value *val)
{
return latlong_component_func(do_set, val, &LatDeg, -90, 90, "$LatDeg", "$Latitude");
}
static int latmin_func(int do_set, Value *val)
{
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LatMin;
return OK;
}
deprecated_var("$LatMin", "$Latitude");
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -59) return E_2LOW;
if (val->v.val > 59) return E_2HIGH;
LatMin = val->v.val;
set_lat_and_long_from_components();
return OK;
return latlong_component_func(do_set, val, &LatMin, -59, 59, "$LatMin", "$Latitude");
}
static int latsec_func(int do_set, Value *val)
{
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LatSec;
return OK;
}
deprecated_var("$LatSec", "$Latitude");
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -59) return E_2LOW;
if (val->v.val > 59) return E_2HIGH;
LatSec = val->v.val;
set_lat_and_long_from_components();
return OK;
return latlong_component_func(do_set, val, &LatSec, -59, 59, "$LatSec", "$Latitude");
}
static int longdeg_func(int do_set, Value *val)
{
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LongDeg;
return OK;
}
deprecated_var("$LongDeg", "$Longitude");
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -180) return E_2LOW;
if (val->v.val > 180) return E_2HIGH;
LongDeg = val->v.val;
set_lat_and_long_from_components();
return OK;
return latlong_component_func(do_set, val, &LongDeg, -180, 180, "$LongDeg", "$Longitude");
}
static int longmin_func(int do_set, Value *val)
{
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LongMin;
return OK;
}
deprecated_var("$LongMin", "$Longitude");
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -59) return E_2LOW;
if (val->v.val > 59) return E_2HIGH;
LongMin = val->v.val;
set_lat_and_long_from_components();
return OK;
return latlong_component_func(do_set, val, &LongMin, -59, 59, "$LongMin", "$Longitude");
}
static int longsec_func(int do_set, Value *val)
{
return latlong_component_func(do_set, val, &LongSec, -59, 59, "$LongSec", "$Longitude");
}
static int latitude_longitude_func(int do_set, Value *val, double *var, double min, double max) {
char buf[64];
double x;
char *endptr;
if (!do_set) {
val->type = INT_TYPE;
val->v.val = LongSec;
snprintf(buf, sizeof(buf), "%f", *var);
val->v.str = malloc(strlen(buf)+1);
if (!val->v.str) return E_NO_MEM;
strcpy(val->v.str, buf);
val->type = STR_TYPE;
return OK;
}
deprecated_var("$LongSec", "$Longitude");
if (val->type != INT_TYPE) return E_BAD_TYPE;
if (val->v.val < -59) return E_2LOW;
if (val->v.val > 59) return E_2HIGH;
LongSec = val->v.val;
set_lat_and_long_from_components();
if (val->type == INT_TYPE) {
x = (double) val->v.val;
} else {
if (val->type != STR_TYPE) return E_BAD_TYPE;
errno = 0;
x = strtod(val->v.str, &endptr);
if (errno) return E_BAD_TYPE;
if (*endptr) return E_BAD_TYPE;
}
if (x < min) return E_2LOW;
if (x > max) return E_2HIGH;
*var = x;
set_components_from_lat_and_long();
return OK;
}
static int longitude_func(int do_set, Value *val)
{
char buf[64];
double x;
char *endptr;
if (!do_set) {
snprintf(buf, sizeof(buf), "%f", Longitude);
val->v.str = malloc(strlen(buf)+1);
if (!val->v.str) return E_NO_MEM;
strcpy(val->v.str, buf);
val->type = STR_TYPE;
return OK;
}
if (val->type == INT_TYPE) {
x = (double) val->v.val;
} else {
if (val->type != STR_TYPE) return E_BAD_TYPE;
errno = 0;
x = strtod(val->v.str, &endptr);
if (errno) return E_BAD_TYPE;
if (*endptr) return E_BAD_TYPE;
}
if (x < -180.0) return E_2LOW;
if (x > 180.0) return E_2HIGH;
Longitude = x;
set_components_from_lat_and_long();
return OK;
return latitude_longitude_func(do_set, val, &Longitude, -180.0, 180.0);
}
static int latitude_func(int do_set, Value *val)
{
char buf[64];
double x;
char *endptr;
if (!do_set) {
snprintf(buf, sizeof(buf), "%f", Latitude);
val->v.str = malloc(strlen(buf)+1);
if (!val->v.str) return E_NO_MEM;
strcpy(val->v.str, buf);
val->type = STR_TYPE;
return OK;
}
if (val->type == INT_TYPE) {
x = (double) val->v.val;
} else {
if (val->type != STR_TYPE) return E_BAD_TYPE;
errno = 0;
x = strtod(val->v.str, &endptr);
if (errno) return E_BAD_TYPE;
if (*endptr) return E_BAD_TYPE;
}
if (x < -90.0) return E_2LOW;
if (x > 90.0) return E_2HIGH;
Latitude = x;
set_components_from_lat_and_long();
return OK;
return latitude_longitude_func(do_set, val, &Latitude, -90.0, 90.0);
}
@@ -818,6 +747,7 @@ static SysVar SysVarArr[] = {
{"DateTimeSep", 1, SPECIAL_TYPE, datetime_sep_func, 0, 0 },
{"DefaultColor", 1, SPECIAL_TYPE, default_color_func, 0, 0 },
{"DefaultPrio", 1, INT_TYPE, &DefaultPrio, 0, 9999},
{"DefaultTDelta", 1, INT_TYPE, &DefaultTDelta, 0, 1440},
{"DeltaOffset", 0, INT_TYPE, &DeltaOffset, 0, 0 },
{"DontFork", 0, INT_TYPE, &DontFork, 0, 0 },
{"DontQueue", 0, INT_TYPE, &DontQueue, 0, 0 },
@@ -881,6 +811,7 @@ static void DumpSysVar (char const *name, const SysVar *v);
/***************************************************************/
int SetSysVar(char const *name, Value *value)
{
int r;
SysVar *v = FindSysVar(name);
if (!v) return E_NOSUCH_VAR;
if (v->type != SPECIAL_TYPE &&
@@ -892,7 +823,9 @@ int SetSysVar(char const *name, Value *value)
if (v->type == SPECIAL_TYPE) {
SysVarFunc f = (SysVarFunc) v->value;
return f(1, value);
r = f(1, value);
DestroyValue(*value);
return r;
} else if (v->type == STR_TYPE) {
/* If it's a string variable, special measures must be taken */
if (v->been_malloced) free(*((char **)(v->value)));

View File

@@ -1 +1,3 @@
REM 15 MSG 02
DO subdir/04.rem
INCLUDE subdir/04.rem

View File

@@ -0,0 +1 @@
REM 16 MSG Should be included by 02.rem

View File

@@ -1020,7 +1020,7 @@ set a057 value("a05"+"6")
"a05" + "6" => "a056"
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
set a058 version()
version() => "03.03.11"
version() => "03.03.12"
set a059 wkday(today())
today() => 1991-02-16
wkday(1991-02-16) => "Saturday"
@@ -2589,7 +2589,7 @@ a086 4
a109 2012-01-01
a128 2018-02-03@16:45
a039 "February"
a058 "03.03.11"
a058 "03.03.12"
a077 "1992 92
"
a096 -4
@@ -2693,6 +2693,7 @@ Variable Value
$DateTimeSep "@"
$DefaultColor "-1 -1 -1"
$DefaultPrio 5000 [0, 9999]
$DefaultTDelta 0 [0, 1440]
$DeltaOffset 0
$DontFork 0
$DontQueue 0
@@ -3385,6 +3386,14 @@ a => "\ \!\"\#\$\%\%\&\'\(\)\*+,-./0123456789\"...
\ \!\"\#\$\\\&\'\(\)\*+,-./0123456789\:\;\<=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~
# Deprecated functions
set x psshade(50)
psshade(50) => ../tests/test.rem(637): psshade() is deprecated; use SPECIAL SHADE instead.
"/_A LineWidth 2 div def _A _A moveto Box"...
set x psmoon(0)
psmoon(0) => ../tests/test.rem(638): psmoon() is deprecated; use SPECIAL MOON instead.
"gsave 0 setgray newpath Border DaySize 2"...
# Don't want Remind to queue reminders
EXIT
@@ -3995,158 +4004,221 @@ Reading `../tests/include_dir/01.rem': Opening file on disk
Caching file `../tests/include_dir/01.rem' in memory
Reading `../tests/include_dir/02.rem': Opening file on disk
Caching file `../tests/include_dir/02.rem' in memory
Reading `../tests/include_dir/subdir/04.rem': Opening file on disk
Caching file `../tests/include_dir/subdir/04.rem' in memory
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
Found cached directory listing for `../tests/include_dir'
Reading `../tests/include_dir/01.rem': Found in cache
Reading `../tests/include_dir/02.rem': Found in cache
Reading `../tests/include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
../tests/include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `../tests/include_dir/04cantread.rem': Opening file on disk
../tests/include_dir/02.rem(1): Can't open file: ../tests/include_dir/04cantread.rem
# rem2ps begin
August 2007 31 3 0
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
@@ -4156,6 +4228,8 @@ September 30
2007/08/15 * * * * 01
# fileinfo 1 ../tests/include_dir/02.rem
2007/08/15 * * * * 02
# fileinfo 1 ../tests/include_dir/subdir/04.rem
2007/08/16 * * * * Should be included by 02.rem
# rem2ps end
Test 9
@@ -4184,8 +4258,11 @@ Reading `include_dir/01.rem': Opening file on disk
Caching file `include_dir/01.rem' in memory
Reading `include_dir/02.rem': Opening file on disk
Caching file `include_dir/02.rem' in memory
Reading `include_dir/subdir/04.rem': Opening file on disk
Caching file `include_dir/subdir/04.rem' in memory
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Scanning directory `include_dir_no_rems' for *.rem files
Caching directory `include_dir_no_rems' listing
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
@@ -4195,8 +4272,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4205,8 +4284,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4215,8 +4296,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4225,8 +4308,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4235,8 +4320,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4245,8 +4332,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4255,8 +4344,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4265,8 +4356,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4275,8 +4368,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4285,8 +4380,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4295,8 +4392,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4305,8 +4404,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4315,8 +4416,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4325,8 +4428,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4335,8 +4440,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4345,8 +4452,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4355,8 +4464,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4365,8 +4476,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4375,8 +4488,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4385,8 +4500,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4395,8 +4512,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4405,8 +4524,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4415,8 +4536,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4425,8 +4548,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4435,8 +4560,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4445,8 +4572,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4455,8 +4584,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4465,8 +4596,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4475,8 +4608,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4485,8 +4620,10 @@ Reading `../tests/include_test.rem': Found in cache
Found cached directory listing for `include_dir'
Reading `include_dir/01.rem': Found in cache
Reading `include_dir/02.rem': Found in cache
Reading `include_dir/subdir/04.rem': Found in cache
Reading `subdir/04.rem': Opening file on disk
include_dir/02.rem(3): Can't open file: subdir/04.rem
Reading `include_dir/04cantread.rem': Opening file on disk
include_dir/02.rem(1): Can't open file: include_dir/04cantread.rem
Found cached directory listing for `include_dir_no_rems'
../tests/include_test.rem(2): include_dir_no_rems: No files matching *.rem
Reading `nonexistent_include_dir': Opening file on disk
@@ -4502,6 +4639,8 @@ September 30
2007/08/15 * * * * 02
# fileinfo 5 ../tests/include_test.rem
2007/08/15 * * * * Whee!!!!
# fileinfo 1 include_dir/subdir/04.rem
2007/08/16 * * * * Should be included by 02.rem
# rem2ps end
Feb 29 Bug Test
-(1): Trig = Sunday, 3 March, 2024

View File

@@ -633,6 +633,10 @@ set a shellescape(" !\"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
msg [a]
# Deprecated functions
set x psshade(50)
set x psmoon(0)
# Don't want Remind to queue reminders
EXIT