Compare commits

...

18 Commits

Author SHA1 Message Date
Dianne Skoll
2e161a1bc1 Rebuild configure from configure.in 2021-01-12 10:13:13 -05:00
Dianne Skoll
204bb00060 Update docs; prep 3.3.4 release. 2021-01-12 10:13:00 -05:00
Dianne Skoll
d6029a54aa Remove unnecessary line of code; add space after "sub" operator. 2021-01-10 17:38:25 -05:00
Dianne Skoll
f99b5c5a66 Update man page date. 2021-01-05 21:30:21 -05:00
Dianne Skoll
2df4119c1a Fix test. 2021-01-05 19:14:16 -05:00
Dianne Skoll
d06b4e5dcd Update copyright date 2021-01-05 19:13:11 -05:00
Dianne Skoll
bf8a25137d Right-align moon indicators when day numbers are left-aligned. 2021-01-05 19:08:10 -05:00
Dianne Skoll
0f302ad0fc Add clarifying comment. 2021-01-05 17:38:33 -05:00
Dianne Skoll
e3d6b283c5 Fix setpagedevice for landscape mode. 2021-01-05 17:23:47 -05:00
Dianne Skoll
2e3ed09039 Update test for setpagedevice patch. 2021-01-05 17:20:27 -05:00
Dianne Skoll
37971a3f07 Set page size (patch from Jonathan Kamens) 2021-01-05 17:19:20 -05:00
Dianne Skoll
2a1960f257 Add TkRemind option for drawing day numbers on left. 2021-01-05 16:39:57 -05:00
Dianne Skoll
350564c304 Add "-x" option to rem2ps to put day numbers at the top-left of each box.
By default, day numbers are placed at the top-right.
2021-01-05 16:32:20 -05:00
Dianne Skoll
9e2a9fea37 Use "-q" option with inotifywait 2020-12-30 11:01:25 -05:00
Dianne Skoll
3592b43629 If inotifywait is available, use it to react instantly to changes to reminder file/dir. 2020-12-30 10:59:00 -05:00
Dianne Skoll
becf1fc459 Wait 100ms to update after changes. 2020-12-29 12:48:24 -05:00
Dianne Skoll
2bccd058ed Refactor code in TkRemind to prepare for possibly using inotify to react to changes. 2020-12-29 12:46:23 -05:00
Dianne Skoll
12c6621051 Fix typo 2020-11-09 17:32:16 -05:00
9 changed files with 293 additions and 157 deletions

2
configure vendored
View File

@@ -3991,7 +3991,7 @@ _ACEOF
fi
done
VERSION=03.03.03
VERSION=03.03.04
ac_config_files="$ac_config_files src/Makefile www/Makefile src/version.h"

View File

@@ -75,6 +75,6 @@ if test "$GCC" = yes; then
fi
AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale)
VERSION=03.03.03
VERSION=03.03.04
AC_SUBST(VERSION)
AC_OUTPUT(src/Makefile www/Makefile src/version.h)

View File

@@ -1,5 +1,18 @@
CHANGES TO REMIND
* VERSION 3.3 Patch 3 - 2021-01-12
- NEW FEATURE: If "inotifywait" is installed, TkRemind uses it to refresh
the calendar display right away when the reminders file/directory is updated.
This makes TkRemind react almost instantly if external tools are editing
or updating reminders.
- MINOR NEW FEATURE: rem2ps has a new '-x' option; this puts the day numbers
on the top-left of the day's box instead of the top-right.
- MINOR FIXES: A typo in remind.1 was fixed; additional comments regarding
UNTIL were added.
* VERSION 3.3 Patch 3 - 2020-11-09
- BUG FIX: Fix startup crash in TkRemind if "Show Today's Reminders on

View File

@@ -1,4 +1,4 @@
.TH REM2PS 1 "1 January 2020"
.TH REM2PS 1 "5 January 2021"
.UC 4
.SH NAME
rem2ps \- draw a PostScript calendar from Remind output
@@ -29,6 +29,11 @@ include any document structuring comments in your prologue.
Produce the calendar in landscape mode rather than the default
portrait mode.
.TP
.B \-x
When printing the calendar, place the day numbers in the top-left of each
day's box. If this option is omitted, the day numbers appear in the
top-right.
.TP
\fB\-c\fR[\fIn\fR]
If \fIn\fR is omitted, disables the small calendars for next and previous
months which are normally generated. If \fIn\fR is supplied, it can range

View File

@@ -860,6 +860,20 @@ As a special case, you can use the \fBTHROUGH\fR keyword instead of
REM 1992-11-30 +2 THROUGH 1992-12-04 MSG Jury duty
.fi
.PP
If you have an expiry date via the use of \fBTHROUGH\fR or \fBUNTIL\fR,
then Remind will \fInever\fR trigger the reminder after the expiry
date. For example, if you have this:
.PP
.nf
OMIT 2021-01-08
REM 2021-01-01 THROUGH 2021-01-08 AFTER MSG Test
.fi
.PP
the reminder will not be triggered on 2021-01-08, and nor will it be
triggered on 2021-01-09; even though the AFTER keyword would normally
move the 8th's reminder to the 9th, the expiry date of 2021-01-08
overrides that.
.PP
.B THE ONCE KEYWORD
.PP
Sometimes, it is necessary to ensure that reminders are run only once
@@ -3671,7 +3685,7 @@ and sometimes an \fBOMITFUNC\fR; experiment and use whichever seems clearer.
.SH POSSIBLY-UNCOMPUTABLE TRIGGERS
.PP
Occasionally, you may wish to suppress the "Can't compute trigger" warnings
for reminders for which a trigger date cannot be compute. For example,
for reminders for which a trigger date cannot be computed. For example,
the following reminder is triggered on a Monday that is not a holiday
if the following Tuesday is a holiday:
.PP

View File

@@ -155,6 +155,8 @@ set OptDescr(SMTPServer) "(String) IP address or host name of SMTP server to use
set Option(ExtraRemindArgs) ""
set OptDescr(ExtraRemindArgs) "(String) Extra arguments when invoking remind"
set TimerUpdateForChanges ""
# Remind program to execute -- supply full path if you want
set Remind "remind"
#set Remind "/home/dfs/Remind/src/remind"
@@ -168,6 +170,9 @@ set ReminderFile [file nativename "~/.reminders"]
set EditorPid -1
# Inotify file
set InotifyFP ""
# Reminder file to append to -- default
set AppendFile {NOSUCHFILE}
catch {set AppendFile $ReminderFile}
@@ -218,6 +223,7 @@ set PrintDest file
set PrintSize letter
set PrintOrient landscape
set PrintFill 1
set PrintDaysRight 1
set PrintEncoding 0
set PrintMargins 36pt
set PrintSmallCalendars 1
@@ -375,8 +381,7 @@ proc MonitorReminderFile {} {
# Redraw calendar and restart daemon if needed
if {$ReminderFileModTime < $mtime} {
set ReminderFileModTime $mtime
FillCalWindow
RestartBackgroundRemindDaemon
ScheduleUpdateForChanges
}
}
#---------------------------------------------------------------------------
@@ -1078,7 +1083,7 @@ proc Status { stuff } {
# None
#---------------------------------------------------------------------------
proc DoPrint {} {
global PrintDest PrintSize PrintMargins PrintOrient PrintFill PrintEncoding PrintSmallCalendars PrintStatus Rem2PS PSCmd Option
global PrintDest PrintSize PrintMargins PrintOrient PrintFill PrintDaysRight PrintEncoding PrintSmallCalendars PrintStatus Rem2PS PSCmd Option
global CurMonth CurYear MonthNames
catch {destroy .p}
toplevel .p
@@ -1114,6 +1119,7 @@ proc DoPrint {} {
radiobutton .p.portrait -text "Portrait" -variable 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
@@ -1122,7 +1128,7 @@ proc DoPrint {} {
pack .p.f1 .p.f2 .p.f2a .p.f3 .p.f3a \
-side top -fill both -expand 1 -anchor w
pack .p.fill .p.encoding .p.calendars -in .p.f3a \
pack .p.fill .p.right .p.encoding .p.calendars -in .p.f3a \
-side top -anchor w -fill none -expand 0
pack .p.f4 -side top -fill both -expand 1 -anchor w
pack .p.f11 .p.f12 -in .p.f1 -side top -fill none -expand 0 -anchor w
@@ -1194,6 +1200,9 @@ proc DoPrint {} {
append cmd " -e"
}
if {!$PrintDaysRight} {
append cmd " -x"
}
if {$PrintEncoding} {
append cmd " -i"
}
@@ -1296,15 +1305,20 @@ proc DoGoto {} {
#---------------------------------------------------------------------------
proc Quit {} {
global Option
global InotifyFP
if { !$Option(ConfirmQuit) } {
destroy .
StopBackgroundRemindDaemon
exit
catch { exec kill [pid $InotifyFP] }
catch { close $InotifyFP }
exit 0
}
if { [tk_dialog .question "Confirm..." {Really quit?} question 0 No Yes] } {
destroy .
StopBackgroundRemindDaemon
exit
catch { exec kill [pid $InotifyFP] }
catch { close $InotifyFP }
exit 0
}
}
@@ -1777,8 +1791,7 @@ proc ModifyDay {d firstDay} {
WriteReminder $f TKTAG$HighestTagSoFar $rem $opts
close $f
FillCalWindow
RestartBackgroundRemindDaemon
ScheduleUpdateForChanges
return 0
}
}
@@ -2634,6 +2647,7 @@ proc main {} {
CreateCalWindow $DayNames
FillCalWindow
StartBackgroundRemindDaemon
SetupInotify
DisplayTimeContinuously
}
@@ -3134,12 +3148,38 @@ proc EditTaggedReminder { w } {
return 1
}
FillCalWindow
RestartBackgroundRemindDaemon
ScheduleUpdateForChanges
return 0
}
}
#***********************************************************************
# %PROCEDURE: UpdateForChanges
# Updates the calendar window and restarts background daemon because
# something has changed.
# %ARGUMENTS:
# None
# %RETURNS:
# Nothing
#***********************************************************************
proc UpdateForChanges {} {
global TimerUpdateForChanges
catch { after cancel $TimerUpdateForChanges }
FillCalWindow
RestartBackgroundRemindDaemon
}
# Schedule an update for 100ms in the future.
# That way, if we get a rapid succession of
# change notifications, we (probably) only
# end up doing one call to UpdateForChanges
proc ScheduleUpdateForChanges {} {
global TimerUpdateForChanges
catch { after cancel $TimerUpdateForChanges }
set TimerUpdateForChanges [after 100 UpdateForChanges]
}
#***********************************************************************
# %PROCEDURE: UniqueFileName
# %ARGUMENTS:
@@ -3468,8 +3508,7 @@ proc InteractiveDeleteReminder { tag } {
set ans [tk_dialog .error "Really Delete" "Really delete reminder?" warning 0 No Yes]
if {$ans == 1} {
DeleteTaggedReminder $tag
FillCalWindow
RestartBackgroundRemindDaemon
ScheduleUpdateForChanges
}
}
@@ -3522,6 +3561,30 @@ proc SetFonts {} {
set SetFontsWorked 1
}
# Set up inotify to watch for changes to reminder file/directory
proc SetupInotify {} {
global InotifyFP
global ReminderFile
set failed [catch {set InotifyFP [open "|inotifywait -q -m -e close_write -e move -e create -e delete $ReminderFile" "r"] } ]
if {$failed} {
# inotifywait probably not available... meh.
return
}
fileevent $InotifyFP readable [list InotifyReadable $InotifyFP]
}
# Called when inotifywait reports an event. Schedule a calendar update
# and daemon reload.
proc InotifyReadable { fp } {
catch { set num [gets $fp line] }
if {$num < 0} {
catch { exec kill [pid $fp] }
close $fp
return
}
ScheduleUpdateForChanges
}
### Balloon help
set Balloon(HelpTime) 400
set Balloon(StayTime) 3500

View File

@@ -5,7 +5,7 @@
/* Print a PostScript calendar. */
/* */
/* This file is part of REMIND. */
/* Copyright (C) 1992-2020 by Dianne Skoll */
/* Copyright (C) 1992-2021 by Dianne Skoll */
/* */
/***************************************************************/
@@ -99,6 +99,7 @@ CalEntry *CurEntries = NULL;
CalEntry *PsEntries[32];
PageType *CurPage;
char PortraitMode;
char DaynumRight;
char NoSmallCal;
char UseISO;
@@ -140,6 +141,18 @@ void WriteOneEntry (CalEntry *c);
void GetSmallLocations (void);
char const *EatToken(char const *in, char *out, int maxlen);
static void
put_escaped_string(char const *s)
{
while(*s) {
if (*s == '\\' || *s == '(' || *s == ')') {
PutChar('\\');
}
PutChar(*s);
s++;
}
}
/***************************************************************/
/* */
/* StrCmpi */
@@ -336,7 +349,7 @@ int main(int argc, char *argv[])
!strcmp(DBufValue(&buf), PSBEGIN2)) {
if (!validfile) {
if (Verbose) {
fprintf(stderr, "Rem2PS: Version %s Copyright 1992-2020 by Dianne Skoll\n\n", VERSION);
fprintf(stderr, "Rem2PS: Version %s Copyright 1992-2021 by Dianne Skoll\n\n", VERSION);
fprintf(stderr, "Generating PostScript calendar\n");
}
}
@@ -587,6 +600,12 @@ void WriteProlog(void)
printf("%%%%Pages: (atend)\n");
printf("%%%%Orientation: %s\n", PortraitMode ? "Portrait" : "Landscape");
printf("%%%%EndComments\n");
if (PortraitMode) {
printf("<< /PageSize [%d %d] >> setpagedevice\n", x, y);
} else {
/* They were swapped up above, so swap them back or we'll get rotated output */
printf("<< /PageSize [%d %d] >> setpagedevice\n", y, x);
}
for (i=0; PSProlog1[i]; i++) puts(PSProlog1[i]);
if (!MondayFirst)
@@ -679,7 +698,7 @@ void WriteCalEntry(void)
printf("]\n");
/* Print the day number */
printf("(%d)\n", CurDay);
printf("(%d) %d\n", CurDay, (int) DaynumRight);
/* Do it! */
printf("DoCalBox\n");
@@ -819,6 +838,7 @@ void Init(int argc, char *argv[])
FillPage = 0;
MondayFirst = 0;
SmallLocation = "bt";
DaynumRight = 1;
for(j=0; j<32; j++) PsEntries[i] = NULL;
@@ -935,6 +955,7 @@ void Init(int argc, char *argv[])
case 'i': UseISO = 1; break;
case 'x': DaynumRight = 0; break;
case 'c': k=(*s);
if (!k) {
SmallLocation = SmallCalLoc[0];
@@ -979,6 +1000,7 @@ void Usage(char const *s)
fprintf(stderr, "-b size Set border size for calendar entries\n");
fprintf(stderr, "-t size Set line thickness\n");
fprintf(stderr, "-e Make calendar fill entire page\n");
fprintf(stderr, "-x Put day numbers on left instead of right\n");
fprintf(stderr, "-o[lrtb] marg Specify left, right, top and bottom margins\n");
exit(1);
}
@@ -1054,10 +1076,10 @@ int DoQueuedPs(void)
FILE *fp;
int fnoff;
char buffer[512];
char const *size, *extra;
char fbuffer[512];
char const *size, *fsize, *extra;
char const *s;
int num, r, g, b, phase, fontsize, moonsize;
unsigned char c;
if (!MondayFirst) begin = CurDay - WkDayNum;
else begin = CurDay - (WkDayNum ? WkDayNum-1 : 6);
@@ -1129,19 +1151,28 @@ int DoQueuedPs(void)
while(*s && isspace(*s)) {
s++;
}
while(*s) {
if (*s == '\\' || *s == '(' || *s == ')') {
PutChar('\\');
}
PutChar(*s);
s++;
}
put_escaped_string(s);
printf(") show grestore\n");
break;
case SPECIAL_MOON: /* Moon phase */
num = sscanf(e->entry+fnoff, "%d %d %d", &phase, &moonsize,
&fontsize);
/* See if we have extra stuff */
extra = e->entry+fnoff;
/* Skip phase */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
/* Skip moon size */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
/* Skip font size */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
if (num == 1) {
moonsize = -1;
fontsize = -1;
@@ -1163,7 +1194,27 @@ int DoQueuedPs(void)
size = buffer;
}
printf("gsave 0 setgray newpath Border %s add BoxHeight Border sub %s sub\n", size, size);
/* Store the starting X coordinate in "moonstartx" */
if (DaynumRight) {
printf("Border %s add /moonstartx exch def", size);
} else {
printf("xincr Border sub %s sub ", size);
if (*extra) {
if (fontsize < 0) {
fsize = "EntrySize";
} else {
sprintf(fbuffer, "%d", fontsize);
fsize = fbuffer;
}
printf("/EntryFont findfont %s scalefont setfont (",
fsize);
put_escaped_string(extra);
printf(") stringwidth pop sub Border sub ");
}
printf("/moonstartx exch def\n");
}
printf(" gsave 0 setgray newpath ");
printf("moonstartx BoxHeight Border sub %s sub\n", size);
printf(" %s 0 360 arc closepath\n", size);
switch(phase) {
case 0:
@@ -1174,49 +1225,28 @@ int DoQueuedPs(void)
break;
case 1:
printf("stroke\n");
printf("newpath Border %s add BoxHeight Border sub %s sub\n",
size, size);
printf("stroke\nnewpath ");
printf("moonstartx BoxHeight Border sub %s sub\n", size);
printf("%s 90 270 arc closepath fill\n", size);
break;
default:
printf("stroke\n");
printf("newpath Border %s add BoxHeight Border sub %s sub\n",
size, size);
printf("stroke\nnewpath ");
printf("moonstartx BoxHeight Border sub %s sub\n", size);
printf("%s 270 90 arc closepath fill\n", size);
break;
}
/* See if we have extra stuff */
extra = e->entry+fnoff;
/* Skip phase */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
/* Skip moon size */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
/* Skip font size */
while(*extra && !isspace(*extra)) extra++;
while(*extra && isspace(*extra)) extra++;
/* Anything left? */
if (*extra) {
printf("Border %s add %s add Border add BoxHeight border sub %s sub %s sub moveto\n", size, size, size, size);
printf("moonstartx %s add Border add BoxHeight border sub %s sub %s sub moveto\n", size, size, size);
if (fontsize < 0) {
size = "EntrySize";
fsize = "EntrySize";
} else {
sprintf(buffer, "%d", fontsize);
size = buffer;
sprintf(fbuffer, "%d", fontsize);
fsize = fbuffer;
}
printf("/EntryFont findfont %s scalefont setfont (",
size);
while(*extra) {
c = (unsigned char) *extra++;
if (c == '\\' || c == '(' || c == ')') PutChar('\\');
PutChar(c);
}
fsize);
put_escaped_string(extra);
printf(") show\n");
}

View File

@@ -5,7 +5,7 @@
/* Define the PostScript prologue */
/* */
/* This file is part of REMIND. */
/* Copyright (C) 1992-2020 by Dianne Skoll */
/* Copyright (C) 1992-2021 by Dianne Skoll */
/* */
/***************************************************************/
@@ -13,7 +13,7 @@ char *PSProlog1[] =
{
"% This file was produced by Remind and Rem2PS, written by",
"% Dianne Skoll.",
"% Remind and Rem2PS are Copyright 1992-2020 Dianne Skoll.",
"% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.",
"/ISOLatin1Encoding where { pop save true }{ false } ifelse",
" /ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus",
" StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute",
@@ -196,9 +196,10 @@ char *PSProlog2[] =
"% Variables for calendar boxes:",
"% ytop - current top position",
"% ymin - minimum y reached for current row",
"% border ytop xleft width textarray daynum DoCalBox ybot",
"% border ytop xleft width textarray daynum onright DoCalBox ybot",
"% Do the entries for one calendar box. Returns lowest Y-coordinate reached",
"/DoCalBox {",
" /onright exch def",
" /daynum exch def",
" /textarr exch def",
" /wid exch def",
@@ -207,8 +208,10 @@ char *PSProlog2[] =
" /border exch def",
"% Do the day number",
" /DayFont findfont DaySize scalefont setfont",
" xl wid add border sub daynum stringwidth pop sub",
" yt border sub DaySize sub moveto daynum show",
" onright 1 eq",
" {xl wid add border sub daynum stringwidth pop sub yt border sub DaySize sub moveto daynum show}",
" {xl border add yt border sub DaySize sub moveto daynum show}",
" ifelse",
"% Do the text entries. Precharge the stack with current y pos.",
" /ycur yt border sub DaySize sub DaySize sub 2 add def",
" /EntryFont findfont EntrySize scalefont setfont",

View File

@@ -857,7 +857,7 @@ set a057 value("a05"+"6")
"a05" + "6" => "a056"
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
set a058 version()
version() => "03.03.03"
version() => "03.03.04"
set a059 wkday(today())
today() => 1991-02-16
wkday(1991-02-16) => "Saturday"
@@ -2426,7 +2426,7 @@ a086 4
a109 2012-01-01
a128 2018-02-03@16:45
a039 "February"
a058 "03.03.03"
a058 "03.03.04"
a077 "1992 92
"
a096 -4
@@ -4392,9 +4392,10 @@ No reminders.
%%Pages: (atend)
%%Orientation: Landscape
%%EndComments
<< /PageSize [612 792] >> setpagedevice
% This file was produced by Remind and Rem2PS, written by
% Dianne Skoll.
% Remind and Rem2PS are Copyright 1992-2020 Dianne Skoll.
% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.
/ISOLatin1Encoding where { pop save true }{ false } ifelse
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
@@ -4574,9 +4575,10 @@ def
% Variables for calendar boxes:
% ytop - current top position
% ymin - minimum y reached for current row
% border ytop xleft width textarray daynum DoCalBox ybot
% border ytop xleft width textarray daynum onright DoCalBox ybot
% Do the entries for one calendar box. Returns lowest Y-coordinate reached
/DoCalBox {
/onright exch def
/daynum exch def
/textarr exch def
/wid exch def
@@ -4585,8 +4587,10 @@ def
/border exch def
% Do the day number
/DayFont findfont DaySize scalefont setfont
xl wid add border sub daynum stringwidth pop sub
yt border sub DaySize sub moveto daynum show
onright 1 eq
{xl wid add border sub daynum stringwidth pop sub yt border sub DaySize sub moveto daynum show}
{xl border add yt border sub DaySize sub moveto daynum show}
ifelse
% Do the text entries. Precharge the stack with current y pos.
/ycur yt border sub DaySize sub DaySize sub 2 add def
/EntryFont findfont EntrySize scalefont setfont
@@ -4632,7 +4636,7 @@ ifelse
Border ytop 6 xincr mul MinX add xincr
[
]
(1)
(1) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4664,7 +4668,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(2)
(2) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4672,7 +4676,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(3)
(3) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4680,7 +4684,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(4)
(4) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4688,7 +4692,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(5)
(5) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4696,7 +4700,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(6)
(6) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4704,7 +4708,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(7)
(7) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4712,7 +4716,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(8)
(8) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4774,10 +4778,10 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
1 0.8 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (20:56) show
grestore
@@ -4831,7 +4835,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(9)
(9) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4839,7 +4843,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(10)
(10) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4847,7 +4851,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(11)
(11) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4855,7 +4859,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(12)
(12) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4863,7 +4867,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(13)
(13) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4871,7 +4875,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(14)
(14) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4879,7 +4883,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(15)
(15) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -4949,12 +4953,12 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 270 90 arc closepath fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (14:56) show
grestore
@@ -4997,7 +5001,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(16)
(16) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5005,7 +5009,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(17)
(17) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5013,7 +5017,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(18)
(18) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5021,7 +5025,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(19)
(19) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5029,7 +5033,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(20)
(20) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5037,7 +5041,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(21)
(21) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5045,7 +5049,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(22)
(22) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5115,10 +5119,10 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (06:02) show
grestore
@@ -5161,7 +5165,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(23)
(23) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5169,7 +5173,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(24)
(24) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5177,7 +5181,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(25)
(25) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5185,7 +5189,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(26)
(26) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5193,7 +5197,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(27)
(27) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5201,7 +5205,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(28)
(28) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5209,7 +5213,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(29)
(29) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5279,12 +5283,12 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 90 270 arc closepath fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (07:42) show
grestore
@@ -5327,7 +5331,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(30)
(30) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5335,7 +5339,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(31)
(31) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5492,9 +5496,10 @@ showpage
%%Pages: (atend)
%%Orientation: Landscape
%%EndComments
<< /PageSize [612 792] >> setpagedevice
% This file was produced by Remind and Rem2PS, written by
% Dianne Skoll.
% Remind and Rem2PS are Copyright 1992-2020 Dianne Skoll.
% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.
/ISOLatin1Encoding where { pop save true }{ false } ifelse
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
@@ -5674,9 +5679,10 @@ def
% Variables for calendar boxes:
% ytop - current top position
% ymin - minimum y reached for current row
% border ytop xleft width textarray daynum DoCalBox ybot
% border ytop xleft width textarray daynum onright DoCalBox ybot
% Do the entries for one calendar box. Returns lowest Y-coordinate reached
/DoCalBox {
/onright exch def
/daynum exch def
/textarr exch def
/wid exch def
@@ -5685,8 +5691,10 @@ def
/border exch def
% Do the day number
/DayFont findfont DaySize scalefont setfont
xl wid add border sub daynum stringwidth pop sub
yt border sub DaySize sub moveto daynum show
onright 1 eq
{xl wid add border sub daynum stringwidth pop sub yt border sub DaySize sub moveto daynum show}
{xl border add yt border sub DaySize sub moveto daynum show}
ifelse
% Do the text entries. Precharge the stack with current y pos.
/ycur yt border sub DaySize sub DaySize sub 2 add def
/EntryFont findfont EntrySize scalefont setfont
@@ -5732,7 +5740,7 @@ ifelse
Border ytop 6 xincr mul MinX add xincr
[
]
(1)
(1) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5764,7 +5772,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(2)
(2) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5772,7 +5780,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(3)
(3) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5780,7 +5788,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(4)
(4) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5788,7 +5796,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(5)
(5) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5796,7 +5804,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(6)
(6) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5804,7 +5812,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(7)
(7) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5812,7 +5820,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(8)
(8) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5874,10 +5882,10 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
1 0.8 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (20:56) show
grestore
@@ -5931,7 +5939,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(9)
(9) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5939,7 +5947,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(10)
(10) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5947,7 +5955,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(11)
(11) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5955,7 +5963,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(12)
(12) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5963,7 +5971,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(13)
(13) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5971,7 +5979,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(14)
(14) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -5979,7 +5987,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(15)
(15) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6049,12 +6057,12 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 270 90 arc closepath fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (14:56) show
grestore
@@ -6097,7 +6105,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(16)
(16) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6105,7 +6113,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(17)
(17) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6113,7 +6121,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(18)
(18) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6121,7 +6129,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(19)
(19) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6129,7 +6137,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(20)
(20) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6137,7 +6145,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(21)
(21) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6145,7 +6153,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(22)
(22) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6215,10 +6223,10 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (06:02) show
grestore
@@ -6261,7 +6269,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(23)
(23) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6269,7 +6277,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(24)
(24) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6277,7 +6285,7 @@ DoCalBox
Border ytop 2 xincr mul MinX add xincr
[
]
(25)
(25) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6285,7 +6293,7 @@ DoCalBox
Border ytop 3 xincr mul MinX add xincr
[
]
(26)
(26) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6293,7 +6301,7 @@ DoCalBox
Border ytop 4 xincr mul MinX add xincr
[
]
(27)
(27) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6301,7 +6309,7 @@ DoCalBox
Border ytop 5 xincr mul MinX add xincr
[
]
(28)
(28) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6309,7 +6317,7 @@ DoCalBox
Border ytop 6 xincr mul MinX add xincr
[
]
(29)
(29) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6379,12 +6387,12 @@ _A BoxHeight _A sub lineto closepath
BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto
_A BoxHeight _A sub lineto closepath
0.8 1 1 setrgbcolor fill 0.0 setgray
gsave 0 setgray newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
Border DaySize 2 div add /moonstartx exch def gsave 0 setgray newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 0 360 arc closepath
stroke
newpath Border DaySize 2 div add BoxHeight Border sub DaySize 2 div sub
newpath moonstartx BoxHeight Border sub DaySize 2 div sub
DaySize 2 div 90 270 arc closepath fill
Border DaySize 2 div add DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
moonstartx DaySize 2 div add Border add BoxHeight border sub DaySize 2 div sub DaySize 2 div sub moveto
/EntryFont findfont EntrySize scalefont setfont (07:42) show
grestore
@@ -6427,7 +6435,7 @@ MinX ymin MaxX ymin L
Border ytop 0 xincr mul MinX add xincr
[
]
(30)
(30) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def
@@ -6435,7 +6443,7 @@ DoCalBox
Border ytop 1 xincr mul MinX add xincr
[
]
(31)
(31) 1
DoCalBox
/y exch def y ymin lt {/ymin y def} if
} def