mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 14:59:20 +02:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f678dc96b8 | ||
|
|
c2e371904e | ||
|
|
2a1cbff22e | ||
|
|
a2d9f277c4 | ||
|
|
d939059417 | ||
|
|
740cd4cfed | ||
|
|
91a5306a67 | ||
|
|
b78ffcbffd | ||
|
|
4f72f557b7 | ||
|
|
e3b21d6d0d | ||
|
|
af28c49d8d | ||
|
|
67f4635573 | ||
|
|
5f8d10908d | ||
|
|
7307421812 | ||
|
|
5cd3b628c5 | ||
|
|
29e483ab64 | ||
|
|
66ddba45af | ||
|
|
9325b3f035 | ||
|
|
522c4c94e1 | ||
|
|
730505cff3 | ||
|
|
019783e1fa | ||
|
|
8612bb6480 | ||
|
|
7f1e6d21d9 | ||
|
|
e6c0371be1 | ||
|
|
58feaa7e0c | ||
|
|
a828378466 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,6 +3,7 @@ autom4te.cache
|
|||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
src/Makefile
|
src/Makefile
|
||||||
|
www/Makefile
|
||||||
*.o
|
*.o
|
||||||
src/config.h
|
src/config.h
|
||||||
src/remind
|
src/remind
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ THE REMIND COPYRIGHT
|
|||||||
1. REMIND refers to the entire set of files and documentation in the
|
1. REMIND refers to the entire set of files and documentation in the
|
||||||
REMIND package.
|
REMIND package.
|
||||||
|
|
||||||
2. REMIND is Copyright 1999-2005 Roaring Penguin Software Inc.,
|
2. REMIND is Copyright 1999-2007 Roaring Penguin Software Inc.,
|
||||||
except where noted in individual files.
|
except where noted in individual files.
|
||||||
|
|
||||||
3. DISTRIBUTION AND USE
|
3. DISTRIBUTION AND USE
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -28,7 +28,7 @@ test:
|
|||||||
cd src && $(MAKE) test
|
cd src && $(MAKE) test
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f config.cache config.log config.status src/Makefile src/config.h tests/test.out
|
rm -f config.cache config.log config.status src/Makefile src/config.h tests/test.out www/Makefile
|
||||||
|
|
||||||
src/Makefile: src/Makefile.in
|
src/Makefile: src/Makefile.in
|
||||||
./configure
|
./configure
|
||||||
|
|||||||
@@ -45,4 +45,4 @@ if test "$GCC" = yes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_FUNCS(setenv unsetenv)
|
AC_CHECK_FUNCS(setenv unsetenv)
|
||||||
AC_OUTPUT(src/Makefile)
|
AC_OUTPUT(src/Makefile www/Makefile)
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ RUN OFF
|
|||||||
################################################
|
################################################
|
||||||
# Ensure required version of remind is used... #
|
# Ensure required version of remind is used... #
|
||||||
################################################
|
################################################
|
||||||
IF version() < "03.00.19"
|
IF version() < "03.01.02"
|
||||||
ERRMSG This file requires at least version 03.00.19 of Remind.%
|
ERRMSG This file requires at least version 03.01.02 of Remind.%
|
||||||
ERRMSG This version is version [version()].
|
ERRMSG This version is version [version()].
|
||||||
EXIT
|
EXIT
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -93,7 +93,7 @@ SET Week_1 1
|
|||||||
SET Week_2 8
|
SET Week_2 8
|
||||||
SET Week_3 15
|
SET Week_3 15
|
||||||
SET Week_4 22
|
SET Week_4 22
|
||||||
FSET _last(mo) "1 " + MON((mo%12)+1)+" --7"
|
FSET _last(mo) "1 " + MON((mo%12)+1) + " --7"
|
||||||
|
|
||||||
# Shorthand for commonly used expression...
|
# Shorthand for commonly used expression...
|
||||||
FSET _trig() TRIGGER(TRIGDATE())
|
FSET _trig() TRIGGER(TRIGDATE())
|
||||||
@@ -101,46 +101,6 @@ FSET _trig() TRIGGER(TRIGDATE())
|
|||||||
# Handy function to provide SCANFROM dates...
|
# Handy function to provide SCANFROM dates...
|
||||||
FSET _back(days) TRIGGER(TODAY()-days)
|
FSET _back(days) TRIGGER(TODAY()-days)
|
||||||
|
|
||||||
###########################################################
|
|
||||||
# On MS-DOS systems, the standard C library functions are #
|
|
||||||
# not reliable for computing offsets from local time to #
|
|
||||||
# UTC. The following provides a work-around for the #
|
|
||||||
# sunrise() and sunset() functions. Note, however, that #
|
|
||||||
# if Daylight Savings Time is in effect for today(), the #
|
|
||||||
# sun functions return times in DST even for dates on #
|
|
||||||
# which DST is not in effect; the converse can also occur.#
|
|
||||||
# #
|
|
||||||
# Change the timezone to your timezone - the default is #
|
|
||||||
# for EST which is 5 hours (300 minutes) behind UTC. #
|
|
||||||
# The code is correct for places in which Daylight Savings#
|
|
||||||
# Time begins on the last Sunday in April and ends on the #
|
|
||||||
# last Sunday in October. #
|
|
||||||
###########################################################
|
|
||||||
|
|
||||||
IF OSTYPE() == "MSDOS"
|
|
||||||
# Eastern Standard Time
|
|
||||||
SET TimeZone -300
|
|
||||||
|
|
||||||
# Use --8 rather than --7 because we want the last day BEFORE
|
|
||||||
# the time switch occurs.
|
|
||||||
REM Sun 1 May --8 SATISFY 1
|
|
||||||
SET BegDst TRIGDATE()
|
|
||||||
|
|
||||||
REM Sun 1 Nov --8 SATISFY 1
|
|
||||||
SET EndDst TRIGDATE()
|
|
||||||
|
|
||||||
SET $CalcUTC 0
|
|
||||||
|
|
||||||
# Check out the following IF statement and figure out why it works!
|
|
||||||
IF EndDst < BegDst
|
|
||||||
# Daylight Savings Time
|
|
||||||
SET $MinsFromUTC TimeZone+60
|
|
||||||
ELSE
|
|
||||||
# Standard Time
|
|
||||||
SET $MinsFromUTC TimeZone
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
# Function which returns a string in "am/pm" format based #
|
# Function which returns a string in "am/pm" format based #
|
||||||
# on the time. For example, set a am_pm(NOW())... #
|
# on the time. For example, set a am_pm(NOW())... #
|
||||||
@@ -347,7 +307,12 @@ REM Feb 14 MSG %"Valentine's%" Day
|
|||||||
REM Mon Feb [Week_3] SCANFROM [_back(7)] SATISFY 1
|
REM Mon Feb [Week_3] SCANFROM [_back(7)] SATISFY 1
|
||||||
OMIT [_trig()] MSG %"President's Day%"
|
OMIT [_trig()] MSG %"President's Day%"
|
||||||
REM Mar 17 MSG %"St. Patrick's%" Day
|
REM Mar 17 MSG %"St. Patrick's%" Day
|
||||||
REM Sun Apr 1 ++2 MSG Daylight Savings Time - %"DST starts%" %b
|
|
||||||
|
# The DST rules are accurate for most locations in
|
||||||
|
# North America
|
||||||
|
REM Sun Apr 1 ++2 UNTIL 1 Jan 2007 MSG Daylight Savings Time - %"DST starts%" %b
|
||||||
|
REM Sun Mar 8 ++2 FROM 1 Jan 2007 MSG Daylight Savings Time - %"DST starts%" %b
|
||||||
|
|
||||||
REM Apr 1 MSG %"April Fool's%" Day
|
REM Apr 1 MSG %"April Fool's%" Day
|
||||||
REM Mon Tue Wed Thu Fri Sat 15 Apr MSG %"Income tax%" due
|
REM Mon Tue Wed Thu Fri Sat 15 Apr MSG %"Income tax%" due
|
||||||
REM May 5 MSG %"Cinco de Mayo%"
|
REM May 5 MSG %"Cinco de Mayo%"
|
||||||
@@ -362,7 +327,12 @@ REM Mon Sep [Week_1] SCANFROM [_back(7)] SATISFY 1
|
|||||||
OMIT [_trig()] MSG %"Labor Day%"
|
OMIT [_trig()] MSG %"Labor Day%"
|
||||||
REM Mon Oct [Week_2] MSG %"Columbus Day%"
|
REM Mon Oct [Week_2] MSG %"Columbus Day%"
|
||||||
REM Nov 11 MSG %"Veterans Day%"
|
REM Nov 11 MSG %"Veterans Day%"
|
||||||
REM Sun [_last(Oct)] MSG Daylight Savings Time - %"DST over%"
|
|
||||||
|
# The DST rules are accurate for most locations in
|
||||||
|
# North America
|
||||||
|
REM Sun [_last(Oct)] UNTIL 1 Jan 2007 MSG Daylight Savings Time - %"DST over%"
|
||||||
|
REM Sun 1 Nov FROM 1 Jan 2007 MSG Daylight Savings Time - %"DST over%"
|
||||||
|
|
||||||
REM Oct 30 MSG %"Mischief Night%"
|
REM Oct 30 MSG %"Mischief Night%"
|
||||||
REM Oct 31 MSG %"Halloween%"
|
REM Oct 31 MSG %"Halloween%"
|
||||||
REM Tue Nov 2 SCANFROM [_back(7)] \
|
REM Tue Nov 2 SCANFROM [_back(7)] \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Makefile.in for REMIND
|
# Makefile.in for REMIND
|
||||||
#
|
#
|
||||||
|
|
||||||
VERSION=03.01.02
|
VERSION=03.01.03
|
||||||
SHELL= /bin/sh
|
SHELL= /bin/sh
|
||||||
BETA = 1
|
BETA = 1
|
||||||
srcdir=@srcdir@
|
srcdir=@srcdir@
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ static int DoCalRem(ParsePtr p, int col)
|
|||||||
return E_NO_MEM;
|
return E_NO_MEM;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (DBufPuts(&obuf, SimpleTime(tim.ttime)) != OK) {
|
if (DBufPuts(&obuf, CalendarTime(tim.ttime, tim.duration)) != OK) {
|
||||||
DBufFree(&obuf);
|
DBufFree(&obuf);
|
||||||
DBufFree(&pre_buf);
|
DBufFree(&pre_buf);
|
||||||
return E_NO_MEM;
|
return E_NO_MEM;
|
||||||
@@ -878,6 +878,89 @@ static void WriteCalDays(void)
|
|||||||
PutChar('\n');
|
PutChar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
/* */
|
||||||
|
/* CalendarTime */
|
||||||
|
/* */
|
||||||
|
/* Format the time according to simple time format. */
|
||||||
|
/* Answer is returned in a static buffer. */
|
||||||
|
/* A trailing space is always added. */
|
||||||
|
/* This takes into account duration */
|
||||||
|
/* */
|
||||||
|
/***************************************************************/
|
||||||
|
char *
|
||||||
|
CalendarTime(int tim, int duration)
|
||||||
|
{
|
||||||
|
static char buf[128];
|
||||||
|
int h, min, hh;
|
||||||
|
int h2, min2, hh2, newtim, days;
|
||||||
|
char *ampm1;
|
||||||
|
char *ampm2;
|
||||||
|
char daybuf[64];
|
||||||
|
|
||||||
|
buf[0] = 0;
|
||||||
|
|
||||||
|
if (duration == NO_TIME) {
|
||||||
|
/* No duration... just call into SimpleTime */
|
||||||
|
return SimpleTime(tim);
|
||||||
|
}
|
||||||
|
if (tim == NO_TIME) {
|
||||||
|
/* No time... nothing to return */
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
h = tim/60;
|
||||||
|
min = tim % 60;
|
||||||
|
if (h == 0) hh=12;
|
||||||
|
else if (h > 12) hh=h-12;
|
||||||
|
else hh = h;
|
||||||
|
|
||||||
|
newtim = tim + duration;
|
||||||
|
|
||||||
|
/* How many days in duration? */
|
||||||
|
days = newtim / MINUTES_PER_DAY;
|
||||||
|
newtim = newtim % MINUTES_PER_DAY;
|
||||||
|
h2 = newtim/60;
|
||||||
|
min2 = newtim % 60;
|
||||||
|
if (h2 == 0) hh2=12;
|
||||||
|
else if (h2 > 12) hh2=h2-12;
|
||||||
|
else hh2 = h2;
|
||||||
|
|
||||||
|
if (days) {
|
||||||
|
sprintf(daybuf, "+%d", days);
|
||||||
|
} else {
|
||||||
|
daybuf[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (h >= 12) {
|
||||||
|
ampm1 = L_PM;
|
||||||
|
} else {
|
||||||
|
ampm1 = L_AM;
|
||||||
|
}
|
||||||
|
if (h2 >= 12) {
|
||||||
|
ampm2 = L_PM;
|
||||||
|
} else {
|
||||||
|
ampm2 = L_AM;
|
||||||
|
}
|
||||||
|
if (!days) {
|
||||||
|
if (!strcmp(ampm1, ampm2)) {
|
||||||
|
ampm1 = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ScFormat) {
|
||||||
|
case SC_AMPM:
|
||||||
|
sprintf(buf, "%d%c%02d%s-%d%c%02d%s%s ",
|
||||||
|
hh, TimeSep, min, ampm1, hh2, TimeSep, min2, ampm2, daybuf);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SC_MIL:
|
||||||
|
sprintf(buf, "%02d%c%02d-%02d%c%02d%s ",
|
||||||
|
h, TimeSep, min, h2, TimeSep, min2, daybuf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* SimpleTime */
|
/* SimpleTime */
|
||||||
@@ -903,7 +986,7 @@ char *SimpleTime(int tim)
|
|||||||
if (h == 0) hh=12;
|
if (h == 0) hh=12;
|
||||||
else if (h > 12) hh=h-12;
|
else if (h > 12) hh=h-12;
|
||||||
else hh=h;
|
else hh=h;
|
||||||
sprintf(buf, "%2d%c%02d%s ", hh, TimeSep, min, (h>=12) ? L_PM : L_AM);
|
sprintf(buf, "%d%c%02d%s ", hh, TimeSep, min, (h>=12) ? L_PM : L_AM);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ int DoRem(ParsePtr p)
|
|||||||
if (trig.typ == SAT_TYPE) {
|
if (trig.typ == SAT_TYPE) {
|
||||||
r=DoSatRemind(&trig, &tim, p);
|
r=DoSatRemind(&trig, &tim, p);
|
||||||
if (r) return r;
|
if (r) return r;
|
||||||
|
if (!LastTrigValid) return OK;
|
||||||
r=ParseToken(p, &buf);
|
r=ParseToken(p, &buf);
|
||||||
if (r) return r;
|
if (r) return r;
|
||||||
FindToken(DBufValue(&buf), &tok);
|
FindToken(DBufValue(&buf), &tok);
|
||||||
@@ -821,6 +822,9 @@ int DoSatRemind(Trigger *trig, TimeTrig *tim, ParsePtr p)
|
|||||||
if (r) {
|
if (r) {
|
||||||
if (r == E_CANT_TRIG) return OK; else return r;
|
if (r == E_CANT_TRIG) return OK; else return r;
|
||||||
}
|
}
|
||||||
|
if (jul == -1) {
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
s = p->pos;
|
s = p->pos;
|
||||||
r = EvaluateExpr(p, &v);
|
r = EvaluateExpr(p, &v);
|
||||||
t = p->pos;
|
t = p->pos;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ int CallUserFunc (char *name, int nargs);
|
|||||||
int DoFset (ParsePtr p);
|
int DoFset (ParsePtr p);
|
||||||
void ProduceCalendar (void);
|
void ProduceCalendar (void);
|
||||||
char *SimpleTime (int tim);
|
char *SimpleTime (int tim);
|
||||||
|
char *CalendarTime (int tim, int duration);
|
||||||
int DoRem (ParsePtr p);
|
int DoRem (ParsePtr p);
|
||||||
int DoFlush (ParsePtr p);
|
int DoFlush (ParsePtr p);
|
||||||
void DoExit (ParsePtr p);
|
void DoExit (ParsePtr p);
|
||||||
|
|||||||
@@ -232,9 +232,9 @@ void HandleQueuedReminders(void)
|
|||||||
strcpy(trig.passthru, q->passthru);
|
strcpy(trig.passthru, q->passthru);
|
||||||
RunDisabled = q->RunDisabled;
|
RunDisabled = q->RunDisabled;
|
||||||
if (Daemon < 0) {
|
if (Daemon < 0) {
|
||||||
printf("NOTE reminder %s ",
|
printf("NOTE reminder %s",
|
||||||
SimpleTime(q->tt.ttime));
|
SimpleTime(q->tt.ttime));
|
||||||
printf("%s ", SimpleTime(SystemTime(0)/60));
|
printf("%s", SimpleTime(SystemTime(0)/60));
|
||||||
if (!*q->tag) {
|
if (!*q->tag) {
|
||||||
printf("*");
|
printf("*");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -10,4 +10,4 @@
|
|||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
#define VERSION "03.01.02"
|
#define VERSION "03.01.03"
|
||||||
|
|||||||
@@ -27,6 +27,15 @@ echo "" >> ../tests/test.out
|
|||||||
echo "Test 4" >> ../tests/test.out
|
echo "Test 4" >> ../tests/test.out
|
||||||
echo "" >> ../tests/test.out
|
echo "" >> ../tests/test.out
|
||||||
../src/remind -sa ../tests/test2.rem 1 aug 2007 >> ../tests/test.out
|
../src/remind -sa ../tests/test2.rem 1 aug 2007 >> ../tests/test.out
|
||||||
|
echo "Test 5" >> ../tests/test.out
|
||||||
|
echo "" >> ../tests/test.out
|
||||||
|
../src/remind -p -b0 ../tests/test3.rem 1 aug 2007 >> ../tests/test.out
|
||||||
|
echo "Test 6" >> ../tests/test.out
|
||||||
|
echo "" >> ../tests/test.out
|
||||||
|
../src/remind -p -b1 ../tests/test3.rem 1 aug 2007 >> ../tests/test.out
|
||||||
|
echo "Test 7" >> ../tests/test.out
|
||||||
|
echo "" >> ../tests/test.out
|
||||||
|
../src/remind -p -b2 ../tests/test3.rem 1 aug 2007 >> ../tests/test.out
|
||||||
|
|
||||||
cmp -s ../tests/test.out ../tests/test.cmp
|
cmp -s ../tests/test.out ../tests/test.cmp
|
||||||
if [ "$?" = "0" ]; then
|
if [ "$?" = "0" ]; then
|
||||||
|
|||||||
322
tests/test.cmp
322
tests/test.cmp
@@ -7,8 +7,13 @@ Test 1
|
|||||||
#
|
#
|
||||||
# ./test-rem # From WITHIN Remind source directory!
|
# ./test-rem # From WITHIN Remind source directory!
|
||||||
|
|
||||||
|
# Don't evaluate SATISFY expressions if reminder has expired
|
||||||
|
|
||||||
|
REM Wed UNTIL 15 Feb 1991 SATISFY [trigdate() > '1990-01-01'] MSG wookie
|
||||||
|
../tests/test.rem(10): Expired
|
||||||
|
|
||||||
REM MSG Today is [hebday(today())] [hebmon(today())] [hebyear(today())]
|
REM MSG Today is [hebday(today())] [hebmon(today())] [hebyear(today())]
|
||||||
../tests/test.rem(8): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(12): Trig = Saturday, 16 February, 1991
|
||||||
Reminders for Saturday, 16th February, 1991:
|
Reminders for Saturday, 16th February, 1991:
|
||||||
|
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
@@ -28,7 +33,7 @@ y => "Tishrey"
|
|||||||
hebdate(1, "Tishrey") => 1991-09-09
|
hebdate(1, "Tishrey") => 1991-09-09
|
||||||
trigger(1991-09-09) => "9 September 1991"
|
trigger(1991-09-09) => "9 September 1991"
|
||||||
Leaving UserFN _h() => "9 September 1991"
|
Leaving UserFN _h() => "9 September 1991"
|
||||||
../tests/test.rem(11): Trig = Monday, 9 September, 1991
|
../tests/test.rem(15): Trig = Monday, 9 September, 1991
|
||||||
[_h(2, "Tishrey")] MSG Rosh Hashana 2
|
[_h(2, "Tishrey")] MSG Rosh Hashana 2
|
||||||
Entering UserFN _h(2, "Tishrey")
|
Entering UserFN _h(2, "Tishrey")
|
||||||
x => 2
|
x => 2
|
||||||
@@ -36,7 +41,7 @@ y => "Tishrey"
|
|||||||
hebdate(2, "Tishrey") => 1991-09-10
|
hebdate(2, "Tishrey") => 1991-09-10
|
||||||
trigger(1991-09-10) => "10 September 1991"
|
trigger(1991-09-10) => "10 September 1991"
|
||||||
Leaving UserFN _h() => "10 September 1991"
|
Leaving UserFN _h() => "10 September 1991"
|
||||||
../tests/test.rem(12): Trig = Tuesday, 10 September, 1991
|
../tests/test.rem(16): Trig = Tuesday, 10 September, 1991
|
||||||
[_h(3, "Tishrey")] MSG Tzom Gedalia
|
[_h(3, "Tishrey")] MSG Tzom Gedalia
|
||||||
Entering UserFN _h(3, "Tishrey")
|
Entering UserFN _h(3, "Tishrey")
|
||||||
x => 3
|
x => 3
|
||||||
@@ -44,7 +49,7 @@ y => "Tishrey"
|
|||||||
hebdate(3, "Tishrey") => 1991-09-11
|
hebdate(3, "Tishrey") => 1991-09-11
|
||||||
trigger(1991-09-11) => "11 September 1991"
|
trigger(1991-09-11) => "11 September 1991"
|
||||||
Leaving UserFN _h() => "11 September 1991"
|
Leaving UserFN _h() => "11 September 1991"
|
||||||
../tests/test.rem(13): Trig = Wednesday, 11 September, 1991
|
../tests/test.rem(17): Trig = Wednesday, 11 September, 1991
|
||||||
[_h(10, "Tishrey")] MSG Yom Kippur
|
[_h(10, "Tishrey")] MSG Yom Kippur
|
||||||
Entering UserFN _h(10, "Tishrey")
|
Entering UserFN _h(10, "Tishrey")
|
||||||
x => 10
|
x => 10
|
||||||
@@ -52,7 +57,7 @@ y => "Tishrey"
|
|||||||
hebdate(10, "Tishrey") => 1991-09-18
|
hebdate(10, "Tishrey") => 1991-09-18
|
||||||
trigger(1991-09-18) => "18 September 1991"
|
trigger(1991-09-18) => "18 September 1991"
|
||||||
Leaving UserFN _h() => "18 September 1991"
|
Leaving UserFN _h() => "18 September 1991"
|
||||||
../tests/test.rem(14): Trig = Wednesday, 18 September, 1991
|
../tests/test.rem(18): Trig = Wednesday, 18 September, 1991
|
||||||
[_h(15, "Tishrey")] MSG Sukkot 1
|
[_h(15, "Tishrey")] MSG Sukkot 1
|
||||||
Entering UserFN _h(15, "Tishrey")
|
Entering UserFN _h(15, "Tishrey")
|
||||||
x => 15
|
x => 15
|
||||||
@@ -60,7 +65,7 @@ y => "Tishrey"
|
|||||||
hebdate(15, "Tishrey") => 1991-09-23
|
hebdate(15, "Tishrey") => 1991-09-23
|
||||||
trigger(1991-09-23) => "23 September 1991"
|
trigger(1991-09-23) => "23 September 1991"
|
||||||
Leaving UserFN _h() => "23 September 1991"
|
Leaving UserFN _h() => "23 September 1991"
|
||||||
../tests/test.rem(15): Trig = Monday, 23 September, 1991
|
../tests/test.rem(19): Trig = Monday, 23 September, 1991
|
||||||
[_h(25, "Kislev")] MSG Channuka
|
[_h(25, "Kislev")] MSG Channuka
|
||||||
Entering UserFN _h(25, "Kislev")
|
Entering UserFN _h(25, "Kislev")
|
||||||
x => 25
|
x => 25
|
||||||
@@ -68,7 +73,7 @@ y => "Kislev"
|
|||||||
hebdate(25, "Kislev") => 1991-12-02
|
hebdate(25, "Kislev") => 1991-12-02
|
||||||
trigger(1991-12-02) => "2 December 1991"
|
trigger(1991-12-02) => "2 December 1991"
|
||||||
Leaving UserFN _h() => "2 December 1991"
|
Leaving UserFN _h() => "2 December 1991"
|
||||||
../tests/test.rem(16): Trig = Monday, 2 December, 1991
|
../tests/test.rem(20): Trig = Monday, 2 December, 1991
|
||||||
[_h(10, "Tevet")] MSG Asara B'Tevet
|
[_h(10, "Tevet")] MSG Asara B'Tevet
|
||||||
Entering UserFN _h(10, "Tevet")
|
Entering UserFN _h(10, "Tevet")
|
||||||
x => 10
|
x => 10
|
||||||
@@ -76,7 +81,7 @@ y => "Tevet"
|
|||||||
hebdate(10, "Tevet") => 1991-12-17
|
hebdate(10, "Tevet") => 1991-12-17
|
||||||
trigger(1991-12-17) => "17 December 1991"
|
trigger(1991-12-17) => "17 December 1991"
|
||||||
Leaving UserFN _h() => "17 December 1991"
|
Leaving UserFN _h() => "17 December 1991"
|
||||||
../tests/test.rem(17): Trig = Tuesday, 17 December, 1991
|
../tests/test.rem(21): Trig = Tuesday, 17 December, 1991
|
||||||
[_h(15, "Shvat")] MSG Tu B'Shvat
|
[_h(15, "Shvat")] MSG Tu B'Shvat
|
||||||
Entering UserFN _h(15, "Shvat")
|
Entering UserFN _h(15, "Shvat")
|
||||||
x => 15
|
x => 15
|
||||||
@@ -84,7 +89,7 @@ y => "Shvat"
|
|||||||
hebdate(15, "Shvat") => 1992-01-20
|
hebdate(15, "Shvat") => 1992-01-20
|
||||||
trigger(1992-01-20) => "20 January 1992"
|
trigger(1992-01-20) => "20 January 1992"
|
||||||
Leaving UserFN _h() => "20 January 1992"
|
Leaving UserFN _h() => "20 January 1992"
|
||||||
../tests/test.rem(18): Trig = Monday, 20 January, 1992
|
../tests/test.rem(22): Trig = Monday, 20 January, 1992
|
||||||
[_h(15, "Adar A")] MSG Purim Katan
|
[_h(15, "Adar A")] MSG Purim Katan
|
||||||
Entering UserFN _h(15, "Adar A")
|
Entering UserFN _h(15, "Adar A")
|
||||||
x => 15
|
x => 15
|
||||||
@@ -92,7 +97,7 @@ y => "Adar A"
|
|||||||
hebdate(15, "Adar A") => 1992-02-19
|
hebdate(15, "Adar A") => 1992-02-19
|
||||||
trigger(1992-02-19) => "19 February 1992"
|
trigger(1992-02-19) => "19 February 1992"
|
||||||
Leaving UserFN _h() => "19 February 1992"
|
Leaving UserFN _h() => "19 February 1992"
|
||||||
../tests/test.rem(19): Trig = Wednesday, 19 February, 1992
|
../tests/test.rem(23): Trig = Wednesday, 19 February, 1992
|
||||||
[_h(14, "Adar")] MSG Purim
|
[_h(14, "Adar")] MSG Purim
|
||||||
Entering UserFN _h(14, "Adar")
|
Entering UserFN _h(14, "Adar")
|
||||||
x => 14
|
x => 14
|
||||||
@@ -100,7 +105,7 @@ y => "Adar"
|
|||||||
hebdate(14, "Adar") => 1991-02-28
|
hebdate(14, "Adar") => 1991-02-28
|
||||||
trigger(1991-02-28) => "28 February 1991"
|
trigger(1991-02-28) => "28 February 1991"
|
||||||
Leaving UserFN _h() => "28 February 1991"
|
Leaving UserFN _h() => "28 February 1991"
|
||||||
../tests/test.rem(20): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(24): Trig = Thursday, 28 February, 1991
|
||||||
[_h(15, "Nisan")] MSG Pesach
|
[_h(15, "Nisan")] MSG Pesach
|
||||||
Entering UserFN _h(15, "Nisan")
|
Entering UserFN _h(15, "Nisan")
|
||||||
x => 15
|
x => 15
|
||||||
@@ -108,7 +113,7 @@ y => "Nisan"
|
|||||||
hebdate(15, "Nisan") => 1991-03-30
|
hebdate(15, "Nisan") => 1991-03-30
|
||||||
trigger(1991-03-30) => "30 March 1991"
|
trigger(1991-03-30) => "30 March 1991"
|
||||||
Leaving UserFN _h() => "30 March 1991"
|
Leaving UserFN _h() => "30 March 1991"
|
||||||
../tests/test.rem(21): Trig = Saturday, 30 March, 1991
|
../tests/test.rem(25): Trig = Saturday, 30 March, 1991
|
||||||
[_h(27, "Nisan")] MSG Yom HaShoah
|
[_h(27, "Nisan")] MSG Yom HaShoah
|
||||||
Entering UserFN _h(27, "Nisan")
|
Entering UserFN _h(27, "Nisan")
|
||||||
x => 27
|
x => 27
|
||||||
@@ -116,7 +121,7 @@ y => "Nisan"
|
|||||||
hebdate(27, "Nisan") => 1991-04-11
|
hebdate(27, "Nisan") => 1991-04-11
|
||||||
trigger(1991-04-11) => "11 April 1991"
|
trigger(1991-04-11) => "11 April 1991"
|
||||||
Leaving UserFN _h() => "11 April 1991"
|
Leaving UserFN _h() => "11 April 1991"
|
||||||
../tests/test.rem(22): Trig = Thursday, 11 April, 1991
|
../tests/test.rem(26): Trig = Thursday, 11 April, 1991
|
||||||
[_h(4, "Iyar")] MSG Yom HaZikaron
|
[_h(4, "Iyar")] MSG Yom HaZikaron
|
||||||
Entering UserFN _h(4, "Iyar")
|
Entering UserFN _h(4, "Iyar")
|
||||||
x => 4
|
x => 4
|
||||||
@@ -124,7 +129,7 @@ y => "Iyar"
|
|||||||
hebdate(4, "Iyar") => 1991-04-18
|
hebdate(4, "Iyar") => 1991-04-18
|
||||||
trigger(1991-04-18) => "18 April 1991"
|
trigger(1991-04-18) => "18 April 1991"
|
||||||
Leaving UserFN _h() => "18 April 1991"
|
Leaving UserFN _h() => "18 April 1991"
|
||||||
../tests/test.rem(23): Trig = Thursday, 18 April, 1991
|
../tests/test.rem(27): Trig = Thursday, 18 April, 1991
|
||||||
[_h(5, "Iyar")] MSG Yom Ha'atzmaut
|
[_h(5, "Iyar")] MSG Yom Ha'atzmaut
|
||||||
Entering UserFN _h(5, "Iyar")
|
Entering UserFN _h(5, "Iyar")
|
||||||
x => 5
|
x => 5
|
||||||
@@ -132,7 +137,7 @@ y => "Iyar"
|
|||||||
hebdate(5, "Iyar") => 1991-04-19
|
hebdate(5, "Iyar") => 1991-04-19
|
||||||
trigger(1991-04-19) => "19 April 1991"
|
trigger(1991-04-19) => "19 April 1991"
|
||||||
Leaving UserFN _h() => "19 April 1991"
|
Leaving UserFN _h() => "19 April 1991"
|
||||||
../tests/test.rem(24): Trig = Friday, 19 April, 1991
|
../tests/test.rem(28): Trig = Friday, 19 April, 1991
|
||||||
[_h(28, "Iyar")] MSG Yom Yerushalayim
|
[_h(28, "Iyar")] MSG Yom Yerushalayim
|
||||||
Entering UserFN _h(28, "Iyar")
|
Entering UserFN _h(28, "Iyar")
|
||||||
x => 28
|
x => 28
|
||||||
@@ -140,7 +145,7 @@ y => "Iyar"
|
|||||||
hebdate(28, "Iyar") => 1991-05-12
|
hebdate(28, "Iyar") => 1991-05-12
|
||||||
trigger(1991-05-12) => "12 May 1991"
|
trigger(1991-05-12) => "12 May 1991"
|
||||||
Leaving UserFN _h() => "12 May 1991"
|
Leaving UserFN _h() => "12 May 1991"
|
||||||
../tests/test.rem(25): Trig = Sunday, 12 May, 1991
|
../tests/test.rem(29): Trig = Sunday, 12 May, 1991
|
||||||
[_h(6, "Sivan")] MSG Shavuot
|
[_h(6, "Sivan")] MSG Shavuot
|
||||||
Entering UserFN _h(6, "Sivan")
|
Entering UserFN _h(6, "Sivan")
|
||||||
x => 6
|
x => 6
|
||||||
@@ -148,7 +153,7 @@ y => "Sivan"
|
|||||||
hebdate(6, "Sivan") => 1991-05-19
|
hebdate(6, "Sivan") => 1991-05-19
|
||||||
trigger(1991-05-19) => "19 May 1991"
|
trigger(1991-05-19) => "19 May 1991"
|
||||||
Leaving UserFN _h() => "19 May 1991"
|
Leaving UserFN _h() => "19 May 1991"
|
||||||
../tests/test.rem(26): Trig = Sunday, 19 May, 1991
|
../tests/test.rem(30): Trig = Sunday, 19 May, 1991
|
||||||
[_h(9, "Av")] MSG Tish'a B'Av
|
[_h(9, "Av")] MSG Tish'a B'Av
|
||||||
Entering UserFN _h(9, "Av")
|
Entering UserFN _h(9, "Av")
|
||||||
x => 9
|
x => 9
|
||||||
@@ -156,7 +161,7 @@ y => "Av"
|
|||||||
hebdate(9, "Av") => 1991-07-20
|
hebdate(9, "Av") => 1991-07-20
|
||||||
trigger(1991-07-20) => "20 July 1991"
|
trigger(1991-07-20) => "20 July 1991"
|
||||||
Leaving UserFN _h() => "20 July 1991"
|
Leaving UserFN _h() => "20 July 1991"
|
||||||
../tests/test.rem(27): Trig = Saturday, 20 July, 1991
|
../tests/test.rem(31): Trig = Saturday, 20 July, 1991
|
||||||
|
|
||||||
# Test some jahrzeit cases
|
# Test some jahrzeit cases
|
||||||
fset _i(x,y,z,a) trigger(hebdate(x,y,z,a))
|
fset _i(x,y,z,a) trigger(hebdate(x,y,z,a))
|
||||||
@@ -170,7 +175,7 @@ a => 5759
|
|||||||
hebdate(30, "Heshvan", 1991-02-16, 5759) => 1991-11-07
|
hebdate(30, "Heshvan", 1991-02-16, 5759) => 1991-11-07
|
||||||
trigger(1991-11-07) => "7 November 1991"
|
trigger(1991-11-07) => "7 November 1991"
|
||||||
Leaving UserFN _i() => "7 November 1991"
|
Leaving UserFN _i() => "7 November 1991"
|
||||||
../tests/test.rem(31): Trig = Thursday, 7 November, 1991
|
../tests/test.rem(35): Trig = Thursday, 7 November, 1991
|
||||||
[_i(30, "Heshvan", today(), 5760)] MSG Complete-Defective
|
[_i(30, "Heshvan", today(), 5760)] MSG Complete-Defective
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(30, "Heshvan", 1991-02-16, 5760)
|
Entering UserFN _i(30, "Heshvan", 1991-02-16, 5760)
|
||||||
@@ -181,7 +186,7 @@ a => 5760
|
|||||||
hebdate(30, "Heshvan", 1991-02-16, 5760) => 1991-11-07
|
hebdate(30, "Heshvan", 1991-02-16, 5760) => 1991-11-07
|
||||||
trigger(1991-11-07) => "7 November 1991"
|
trigger(1991-11-07) => "7 November 1991"
|
||||||
Leaving UserFN _i() => "7 November 1991"
|
Leaving UserFN _i() => "7 November 1991"
|
||||||
../tests/test.rem(32): Trig = Thursday, 7 November, 1991
|
../tests/test.rem(36): Trig = Thursday, 7 November, 1991
|
||||||
[_i(30, "Heshvan", today(), 5761)] MSG Illegal
|
[_i(30, "Heshvan", today(), 5761)] MSG Illegal
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(30, "Heshvan", 1991-02-16, 5761)
|
Entering UserFN _i(30, "Heshvan", 1991-02-16, 5761)
|
||||||
@@ -189,7 +194,7 @@ x => 30
|
|||||||
y => "Heshvan"
|
y => "Heshvan"
|
||||||
z => 1991-02-16
|
z => 1991-02-16
|
||||||
a => 5761
|
a => 5761
|
||||||
hebdate(30, "Heshvan", 1991-02-16, 5761) => ../tests/test.rem(33): 30 Heshvan 5761: Invalid Hebrew date
|
hebdate(30, "Heshvan", 1991-02-16, 5761) => ../tests/test.rem(37): 30 Heshvan 5761: Invalid Hebrew date
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
@@ -203,7 +208,7 @@ a => 5759
|
|||||||
hebdate(30, "Kislev", 1991-02-16, 5759) => 1991-12-07
|
hebdate(30, "Kislev", 1991-02-16, 5759) => 1991-12-07
|
||||||
trigger(1991-12-07) => "7 December 1991"
|
trigger(1991-12-07) => "7 December 1991"
|
||||||
Leaving UserFN _i() => "7 December 1991"
|
Leaving UserFN _i() => "7 December 1991"
|
||||||
../tests/test.rem(35): Trig = Saturday, 7 December, 1991
|
../tests/test.rem(39): Trig = Saturday, 7 December, 1991
|
||||||
[_i(30, "Kislev", today(), 5760)] MSG Complete-Defective
|
[_i(30, "Kislev", today(), 5760)] MSG Complete-Defective
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(30, "Kislev", 1991-02-16, 5760)
|
Entering UserFN _i(30, "Kislev", 1991-02-16, 5760)
|
||||||
@@ -214,7 +219,7 @@ a => 5760
|
|||||||
hebdate(30, "Kislev", 1991-02-16, 5760) => 1991-12-07
|
hebdate(30, "Kislev", 1991-02-16, 5760) => 1991-12-07
|
||||||
trigger(1991-12-07) => "7 December 1991"
|
trigger(1991-12-07) => "7 December 1991"
|
||||||
Leaving UserFN _i() => "7 December 1991"
|
Leaving UserFN _i() => "7 December 1991"
|
||||||
../tests/test.rem(36): Trig = Saturday, 7 December, 1991
|
../tests/test.rem(40): Trig = Saturday, 7 December, 1991
|
||||||
[_i(30, "Kislev", today(), 5761)] MSG Illegal
|
[_i(30, "Kislev", today(), 5761)] MSG Illegal
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(30, "Kislev", 1991-02-16, 5761)
|
Entering UserFN _i(30, "Kislev", 1991-02-16, 5761)
|
||||||
@@ -222,7 +227,7 @@ x => 30
|
|||||||
y => "Kislev"
|
y => "Kislev"
|
||||||
z => 1991-02-16
|
z => 1991-02-16
|
||||||
a => 5761
|
a => 5761
|
||||||
hebdate(30, "Kislev", 1991-02-16, 5761) => ../tests/test.rem(37): 30 Kislev 5761: Invalid Hebrew date
|
hebdate(30, "Kislev", 1991-02-16, 5761) => ../tests/test.rem(41): 30 Kislev 5761: Invalid Hebrew date
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
@@ -236,7 +241,7 @@ a => 5755
|
|||||||
hebdate(30, "Adar A", 1991-02-16, 5755) => 1992-03-05
|
hebdate(30, "Adar A", 1991-02-16, 5755) => 1992-03-05
|
||||||
trigger(1992-03-05) => "5 March 1992"
|
trigger(1992-03-05) => "5 March 1992"
|
||||||
Leaving UserFN _i() => "5 March 1992"
|
Leaving UserFN _i() => "5 March 1992"
|
||||||
../tests/test.rem(39): Trig = Thursday, 5 March, 1992
|
../tests/test.rem(43): Trig = Thursday, 5 March, 1992
|
||||||
[_i(30, "Adar A", today(), 5756)] MSG Illegal
|
[_i(30, "Adar A", today(), 5756)] MSG Illegal
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(30, "Adar A", 1991-02-16, 5756)
|
Entering UserFN _i(30, "Adar A", 1991-02-16, 5756)
|
||||||
@@ -244,7 +249,7 @@ x => 30
|
|||||||
y => "Adar A"
|
y => "Adar A"
|
||||||
z => 1991-02-16
|
z => 1991-02-16
|
||||||
a => 5756
|
a => 5756
|
||||||
hebdate(30, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(40): No Adar A in 5756
|
hebdate(30, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(44): No Adar A in 5756
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
[_i(29, "Adar A", today(), 5755)] MSG Leap
|
[_i(29, "Adar A", today(), 5755)] MSG Leap
|
||||||
@@ -257,7 +262,7 @@ a => 5755
|
|||||||
hebdate(29, "Adar A", 1991-02-16, 5755) => 1991-03-15
|
hebdate(29, "Adar A", 1991-02-16, 5755) => 1991-03-15
|
||||||
trigger(1991-03-15) => "15 March 1991"
|
trigger(1991-03-15) => "15 March 1991"
|
||||||
Leaving UserFN _i() => "15 March 1991"
|
Leaving UserFN _i() => "15 March 1991"
|
||||||
../tests/test.rem(41): Trig = Friday, 15 March, 1991
|
../tests/test.rem(45): Trig = Friday, 15 March, 1991
|
||||||
[_i(29, "Adar A", today(), 5756)] MSG Illegal
|
[_i(29, "Adar A", today(), 5756)] MSG Illegal
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
Entering UserFN _i(29, "Adar A", 1991-02-16, 5756)
|
Entering UserFN _i(29, "Adar A", 1991-02-16, 5756)
|
||||||
@@ -265,221 +270,221 @@ x => 29
|
|||||||
y => "Adar A"
|
y => "Adar A"
|
||||||
z => 1991-02-16
|
z => 1991-02-16
|
||||||
a => 5756
|
a => 5756
|
||||||
hebdate(29, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(42): No Adar A in 5756
|
hebdate(29, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(46): No Adar A in 5756
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
# Test each possible case of the basic reminders.
|
# Test each possible case of the basic reminders.
|
||||||
|
|
||||||
REM MSG Every Day
|
REM MSG Every Day
|
||||||
../tests/test.rem(46): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(50): Trig = Saturday, 16 February, 1991
|
||||||
Every Day
|
Every Day
|
||||||
|
|
||||||
|
|
||||||
REM 18 MSG Every 18th
|
REM 18 MSG Every 18th
|
||||||
../tests/test.rem(48): Trig = Monday, 18 February, 1991
|
../tests/test.rem(52): Trig = Monday, 18 February, 1991
|
||||||
REM 15 MSG Every 15th
|
REM 15 MSG Every 15th
|
||||||
../tests/test.rem(49): Trig = Friday, 15 March, 1991
|
../tests/test.rem(53): Trig = Friday, 15 March, 1991
|
||||||
|
|
||||||
REM Feb MSG February
|
REM Feb MSG February
|
||||||
../tests/test.rem(51): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(55): Trig = Saturday, 16 February, 1991
|
||||||
February
|
February
|
||||||
|
|
||||||
REM Jan MSG January
|
REM Jan MSG January
|
||||||
../tests/test.rem(52): Trig = Wednesday, 1 January, 1992
|
../tests/test.rem(56): Trig = Wednesday, 1 January, 1992
|
||||||
REM March MSG March
|
REM March MSG March
|
||||||
../tests/test.rem(53): Trig = Friday, 1 March, 1991
|
../tests/test.rem(57): Trig = Friday, 1 March, 1991
|
||||||
|
|
||||||
REM 13 Jan MSG 13 Jan
|
REM 13 Jan MSG 13 Jan
|
||||||
../tests/test.rem(55): Trig = Monday, 13 January, 1992
|
../tests/test.rem(59): Trig = Monday, 13 January, 1992
|
||||||
REM 15 Feb MSG 15 Feb
|
REM 15 Feb MSG 15 Feb
|
||||||
../tests/test.rem(56): Trig = Saturday, 15 February, 1992
|
../tests/test.rem(60): Trig = Saturday, 15 February, 1992
|
||||||
REM 28 Feb MSG 28 Feb
|
REM 28 Feb MSG 28 Feb
|
||||||
../tests/test.rem(57): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(61): Trig = Thursday, 28 February, 1991
|
||||||
REM 29 Feb MSG 29 Feb
|
REM 29 Feb MSG 29 Feb
|
||||||
../tests/test.rem(58): Trig = Saturday, 29 February, 1992
|
../tests/test.rem(62): Trig = Saturday, 29 February, 1992
|
||||||
REM 5 Mar MSG 5 Mar
|
REM 5 Mar MSG 5 Mar
|
||||||
../tests/test.rem(59): Trig = Tuesday, 5 March, 1991
|
../tests/test.rem(63): Trig = Tuesday, 5 March, 1991
|
||||||
|
|
||||||
REM 1990 MSG 1990
|
REM 1990 MSG 1990
|
||||||
../tests/test.rem(61): Expired
|
../tests/test.rem(65): Expired
|
||||||
REM 1991 MSG 1991
|
REM 1991 MSG 1991
|
||||||
../tests/test.rem(62): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(66): Trig = Saturday, 16 February, 1991
|
||||||
1991
|
1991
|
||||||
|
|
||||||
REM 1992 MSG 1991
|
REM 1992 MSG 1991
|
||||||
../tests/test.rem(63): Trig = Wednesday, 1 January, 1992
|
../tests/test.rem(67): Trig = Wednesday, 1 January, 1992
|
||||||
|
|
||||||
REM 1 1990 MSG 1 1990
|
REM 1 1990 MSG 1 1990
|
||||||
../tests/test.rem(65): Expired
|
../tests/test.rem(69): Expired
|
||||||
REM 29 1991 MSG 29 1991
|
REM 29 1991 MSG 29 1991
|
||||||
../tests/test.rem(66): Trig = Friday, 29 March, 1991
|
../tests/test.rem(70): Trig = Friday, 29 March, 1991
|
||||||
REM 29 1992 MSG 29 1992
|
REM 29 1992 MSG 29 1992
|
||||||
../tests/test.rem(67): Trig = Wednesday, 29 January, 1992
|
../tests/test.rem(71): Trig = Wednesday, 29 January, 1992
|
||||||
REM 16 1991 MSG 16 1991
|
REM 16 1991 MSG 16 1991
|
||||||
../tests/test.rem(68): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(72): Trig = Saturday, 16 February, 1991
|
||||||
16 1991
|
16 1991
|
||||||
|
|
||||||
|
|
||||||
REM Jan 1990 MSG Jan 1990
|
REM Jan 1990 MSG Jan 1990
|
||||||
../tests/test.rem(70): Expired
|
../tests/test.rem(74): Expired
|
||||||
REM Feb 1991 MSG Feb 1991
|
REM Feb 1991 MSG Feb 1991
|
||||||
../tests/test.rem(71): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(75): Trig = Saturday, 16 February, 1991
|
||||||
Feb 1991
|
Feb 1991
|
||||||
|
|
||||||
REM Dec 1991 MSG Dec 1991
|
REM Dec 1991 MSG Dec 1991
|
||||||
../tests/test.rem(72): Trig = Sunday, 1 December, 1991
|
../tests/test.rem(76): Trig = Sunday, 1 December, 1991
|
||||||
REM May 1992 MSG May 1992
|
REM May 1992 MSG May 1992
|
||||||
../tests/test.rem(73): Trig = Friday, 1 May, 1992
|
../tests/test.rem(77): Trig = Friday, 1 May, 1992
|
||||||
|
|
||||||
REM 1 Jan 1991 MSG 1 Jan 1991
|
REM 1 Jan 1991 MSG 1 Jan 1991
|
||||||
../tests/test.rem(75): Expired
|
../tests/test.rem(79): Expired
|
||||||
REM 16 Feb 1991 MSG 16 Feb 1991
|
REM 16 Feb 1991 MSG 16 Feb 1991
|
||||||
../tests/test.rem(76): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(80): Trig = Saturday, 16 February, 1991
|
||||||
16 Feb 1991
|
16 Feb 1991
|
||||||
|
|
||||||
REM 29 Dec 1992 MSG 29 Dec 1992
|
REM 29 Dec 1992 MSG 29 Dec 1992
|
||||||
../tests/test.rem(77): Trig = Tuesday, 29 December, 1992
|
../tests/test.rem(81): Trig = Tuesday, 29 December, 1992
|
||||||
|
|
||||||
REM Sun MSG Sun
|
REM Sun MSG Sun
|
||||||
../tests/test.rem(79): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(83): Trig = Sunday, 17 February, 1991
|
||||||
REM Fri Sat Tue MSG Fri Sat Tue
|
REM Fri Sat Tue MSG Fri Sat Tue
|
||||||
../tests/test.rem(80): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(84): Trig = Saturday, 16 February, 1991
|
||||||
Fri Sat Tue
|
Fri Sat Tue
|
||||||
|
|
||||||
|
|
||||||
REM Sun 16 MSG Sun 16
|
REM Sun 16 MSG Sun 16
|
||||||
../tests/test.rem(82): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(86): Trig = Sunday, 17 February, 1991
|
||||||
REM Mon Tue Wed Thu Fri 1 MSG Mon Tue Wed Thu Fri 1
|
REM Mon Tue Wed Thu Fri 1 MSG Mon Tue Wed Thu Fri 1
|
||||||
../tests/test.rem(83): Trig = Friday, 1 March, 1991
|
../tests/test.rem(87): Trig = Friday, 1 March, 1991
|
||||||
|
|
||||||
REM Sun Feb MSG Sun Feb
|
REM Sun Feb MSG Sun Feb
|
||||||
../tests/test.rem(85): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(89): Trig = Sunday, 17 February, 1991
|
||||||
REM Mon Tue March MSG Mon Tue March
|
REM Mon Tue March MSG Mon Tue March
|
||||||
../tests/test.rem(86): Trig = Monday, 4 March, 1991
|
../tests/test.rem(90): Trig = Monday, 4 March, 1991
|
||||||
|
|
||||||
REM Sun 16 Feb MSG Sun 16 Feb
|
REM Sun 16 Feb MSG Sun 16 Feb
|
||||||
../tests/test.rem(88): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(92): Trig = Sunday, 17 February, 1991
|
||||||
REM Mon Tue 10 March MSG Mon Tue 10 March
|
REM Mon Tue 10 March MSG Mon Tue 10 March
|
||||||
../tests/test.rem(89): Trig = Monday, 11 March, 1991
|
../tests/test.rem(93): Trig = Monday, 11 March, 1991
|
||||||
|
|
||||||
REM Sat Sun 1991 MSG Sat Sun 1991
|
REM Sat Sun 1991 MSG Sat Sun 1991
|
||||||
../tests/test.rem(91): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(95): Trig = Saturday, 16 February, 1991
|
||||||
Sat Sun 1991
|
Sat Sun 1991
|
||||||
|
|
||||||
REM Mon Tue 1992 MSG Mon Tue 1992
|
REM Mon Tue 1992 MSG Mon Tue 1992
|
||||||
../tests/test.rem(92): Trig = Monday, 6 January, 1992
|
../tests/test.rem(96): Trig = Monday, 6 January, 1992
|
||||||
|
|
||||||
REM Sun 16 1991 MSG Sun 16 1991
|
REM Sun 16 1991 MSG Sun 16 1991
|
||||||
../tests/test.rem(94): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(98): Trig = Sunday, 17 February, 1991
|
||||||
REM Mon Tue Wed Thu Fri 1 1992 MSG Mon Tue Wed Thu Fri 1 1992
|
REM Mon Tue Wed Thu Fri 1 1992 MSG Mon Tue Wed Thu Fri 1 1992
|
||||||
../tests/test.rem(95): Trig = Wednesday, 1 January, 1992
|
../tests/test.rem(99): Trig = Wednesday, 1 January, 1992
|
||||||
|
|
||||||
REM Mon Feb 1991 MSG Mon Feb 1991
|
REM Mon Feb 1991 MSG Mon Feb 1991
|
||||||
../tests/test.rem(97): Trig = Monday, 18 February, 1991
|
../tests/test.rem(101): Trig = Monday, 18 February, 1991
|
||||||
REM Tue Jan 1992 MSG Tue Jan 1992
|
REM Tue Jan 1992 MSG Tue Jan 1992
|
||||||
../tests/test.rem(98): Trig = Tuesday, 7 January, 1992
|
../tests/test.rem(102): Trig = Tuesday, 7 January, 1992
|
||||||
|
|
||||||
REM Sun Mon 16 Feb 1991 MSG Sun Mon 16 Feb 1991
|
REM Sun Mon 16 Feb 1991 MSG Sun Mon 16 Feb 1991
|
||||||
../tests/test.rem(100): Trig = Sunday, 17 February, 1991
|
../tests/test.rem(104): Trig = Sunday, 17 February, 1991
|
||||||
REM Tue 28 Jan 1992 MSG Tue 28 Jan 1992
|
REM Tue 28 Jan 1992 MSG Tue 28 Jan 1992
|
||||||
../tests/test.rem(101): Trig = Tuesday, 28 January, 1992
|
../tests/test.rem(105): Trig = Tuesday, 28 January, 1992
|
||||||
|
|
||||||
# Try some Backs
|
# Try some Backs
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
REM 1 -1 OMIT sat sun MSG 1 -1 OMIT Sat Sun
|
REM 1 -1 OMIT sat sun MSG 1 -1 OMIT Sat Sun
|
||||||
../tests/test.rem(105): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(109): Trig = Thursday, 28 February, 1991
|
||||||
REM 1 --1 OMIT sat sun MSG 1 --1 OMIT Sat Sun
|
REM 1 --1 OMIT sat sun MSG 1 --1 OMIT Sat Sun
|
||||||
../tests/test.rem(106): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(110): Trig = Thursday, 28 February, 1991
|
||||||
|
|
||||||
OMIT 28 Feb
|
OMIT 28 Feb
|
||||||
REM 1 -1 OMIT sat sun MSG 1 -1 OMIT Sat Sun (28 Feb omitted)
|
REM 1 -1 OMIT sat sun MSG 1 -1 OMIT Sat Sun (28 Feb omitted)
|
||||||
../tests/test.rem(109): Trig = Wednesday, 27 February, 1991
|
../tests/test.rem(113): Trig = Wednesday, 27 February, 1991
|
||||||
REM 1 --1 OMIT sat sun MSG 1 --1 OMIT Sat Sun (28 Feb omitted)
|
REM 1 --1 OMIT sat sun MSG 1 --1 OMIT Sat Sun (28 Feb omitted)
|
||||||
../tests/test.rem(110): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(114): Trig = Thursday, 28 February, 1991
|
||||||
|
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
|
|
||||||
# Try out UNTIL
|
# Try out UNTIL
|
||||||
REM Wed UNTIL 21 Feb 1991 MSG Wed UNTIL 21 Feb 1991
|
REM Wed UNTIL 21 Feb 1991 MSG Wed UNTIL 21 Feb 1991
|
||||||
../tests/test.rem(115): Trig = Wednesday, 20 February, 1991
|
../tests/test.rem(119): Trig = Wednesday, 20 February, 1991
|
||||||
|
|
||||||
# Try playing with the OMIT context
|
# Try playing with the OMIT context
|
||||||
|
|
||||||
OMIT 28 Feb 1991
|
OMIT 28 Feb 1991
|
||||||
REM 1 Mar -1 MSG 1 mar -1 (28feb91 omitted)
|
REM 1 Mar -1 MSG 1 mar -1 (28feb91 omitted)
|
||||||
../tests/test.rem(120): Trig = Wednesday, 27 February, 1991
|
../tests/test.rem(124): Trig = Wednesday, 27 February, 1991
|
||||||
REM 1 Mar --1 MSG 1 mar --1 (28Feb91 omitted)
|
REM 1 Mar --1 MSG 1 mar --1 (28Feb91 omitted)
|
||||||
../tests/test.rem(121): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(125): Trig = Thursday, 28 February, 1991
|
||||||
REM 28 Feb BEFORE MSG 28 Feb BEFORE (28Feb91 omitted)
|
REM 28 Feb BEFORE MSG 28 Feb BEFORE (28Feb91 omitted)
|
||||||
../tests/test.rem(122): Trig = Wednesday, 27 February, 1991
|
../tests/test.rem(126): Trig = Wednesday, 27 February, 1991
|
||||||
REM 28 Feb SKIP MSG 28 Feb SKIP (28Feb91 omitted)
|
REM 28 Feb SKIP MSG 28 Feb SKIP (28Feb91 omitted)
|
||||||
../tests/test.rem(123): Trig = Friday, 28 February, 1992
|
../tests/test.rem(127): Trig = Friday, 28 February, 1992
|
||||||
REM 28 Feb AFTER MSG 28 Feb AFTER (28Feb91 omitted)
|
REM 28 Feb AFTER MSG 28 Feb AFTER (28Feb91 omitted)
|
||||||
../tests/test.rem(124): Trig = Friday, 1 March, 1991
|
../tests/test.rem(128): Trig = Friday, 1 March, 1991
|
||||||
|
|
||||||
PUSH-OMIT-CONTEXT
|
PUSH-OMIT-CONTEXT
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
REM 1 Mar -1 MSG 1 mar -1
|
REM 1 Mar -1 MSG 1 mar -1
|
||||||
../tests/test.rem(128): Trig = Thursday, 28 February, 1991
|
|
||||||
REM 1 Mar --1 MSG 1 mar --1
|
|
||||||
../tests/test.rem(129): Trig = Thursday, 28 February, 1991
|
|
||||||
REM 28 Feb BEFORE MSG 28 Feb BEFORE
|
|
||||||
../tests/test.rem(130): Trig = Thursday, 28 February, 1991
|
|
||||||
REM 28 Feb SKIP MSG 28 Feb SKIP
|
|
||||||
../tests/test.rem(131): Trig = Thursday, 28 February, 1991
|
|
||||||
REM 28 Feb AFTER MSG 28 Feb AFTER
|
|
||||||
../tests/test.rem(132): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(132): Trig = Thursday, 28 February, 1991
|
||||||
|
REM 1 Mar --1 MSG 1 mar --1
|
||||||
|
../tests/test.rem(133): Trig = Thursday, 28 February, 1991
|
||||||
|
REM 28 Feb BEFORE MSG 28 Feb BEFORE
|
||||||
|
../tests/test.rem(134): Trig = Thursday, 28 February, 1991
|
||||||
|
REM 28 Feb SKIP MSG 28 Feb SKIP
|
||||||
|
../tests/test.rem(135): Trig = Thursday, 28 February, 1991
|
||||||
|
REM 28 Feb AFTER MSG 28 Feb AFTER
|
||||||
|
../tests/test.rem(136): Trig = Thursday, 28 February, 1991
|
||||||
|
|
||||||
POP-OMIT-CONTEXT
|
POP-OMIT-CONTEXT
|
||||||
REM 1 Mar -1 MSG 1 mar -1 (28feb91 omitted)
|
REM 1 Mar -1 MSG 1 mar -1 (28feb91 omitted)
|
||||||
../tests/test.rem(135): Trig = Wednesday, 27 February, 1991
|
../tests/test.rem(139): Trig = Wednesday, 27 February, 1991
|
||||||
REM 1 Mar --1 MSG 1 mar --1 (28Feb91 omitted)
|
REM 1 Mar --1 MSG 1 mar --1 (28Feb91 omitted)
|
||||||
../tests/test.rem(136): Trig = Thursday, 28 February, 1991
|
../tests/test.rem(140): Trig = Thursday, 28 February, 1991
|
||||||
REM 28 Feb BEFORE MSG 28 Feb BEFORE (28Feb91 omitted)
|
REM 28 Feb BEFORE MSG 28 Feb BEFORE (28Feb91 omitted)
|
||||||
../tests/test.rem(137): Trig = Wednesday, 27 February, 1991
|
../tests/test.rem(141): Trig = Wednesday, 27 February, 1991
|
||||||
REM 28 Feb SKIP MSG 28 Feb SKIP (28Feb91 omitted)
|
REM 28 Feb SKIP MSG 28 Feb SKIP (28Feb91 omitted)
|
||||||
../tests/test.rem(138): Trig = Friday, 28 February, 1992
|
../tests/test.rem(142): Trig = Friday, 28 February, 1992
|
||||||
REM 28 Feb AFTER MSG 28 Feb AFTER (28Feb91 omitted)
|
REM 28 Feb AFTER MSG 28 Feb AFTER (28Feb91 omitted)
|
||||||
../tests/test.rem(139): Trig = Friday, 1 March, 1991
|
../tests/test.rem(143): Trig = Friday, 1 March, 1991
|
||||||
|
|
||||||
|
|
||||||
REM 13 March 1991 *1 UNTIL 19 March 1991 MSG 13-19 Mar 91
|
REM 13 March 1991 *1 UNTIL 19 March 1991 MSG 13-19 Mar 91
|
||||||
../tests/test.rem(142): Trig = Wednesday, 13 March, 1991
|
../tests/test.rem(146): Trig = Wednesday, 13 March, 1991
|
||||||
|
|
||||||
# Test BACK
|
# Test BACK
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
REM 18 Feb 1991 +1 MSG 18 Feb 1991 +1
|
REM 18 Feb 1991 +1 MSG 18 Feb 1991 +1
|
||||||
../tests/test.rem(146): Trig = Monday, 18 February, 1991
|
../tests/test.rem(150): Trig = Monday, 18 February, 1991
|
||||||
|
|
||||||
OMIT 17 Feb 1991
|
OMIT 17 Feb 1991
|
||||||
REM 18 Feb 1991 +1 MSG 18 Feb 1991 +1 (17Feb91 omitted)
|
REM 18 Feb 1991 +1 MSG 18 Feb 1991 +1 (17Feb91 omitted)
|
||||||
../tests/test.rem(149): Trig = Monday, 18 February, 1991
|
../tests/test.rem(153): Trig = Monday, 18 February, 1991
|
||||||
18 Feb 1991 +1 (17Feb91 omitted)
|
18 Feb 1991 +1 (17Feb91 omitted)
|
||||||
|
|
||||||
REM 18 Feb 1991 ++1 MSG 18 Feb 1991 ++1 (17Feb91 omitted)
|
REM 18 Feb 1991 ++1 MSG 18 Feb 1991 ++1 (17Feb91 omitted)
|
||||||
../tests/test.rem(150): Trig = Monday, 18 February, 1991
|
../tests/test.rem(154): Trig = Monday, 18 February, 1991
|
||||||
|
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
# Test the scanfrom clause
|
# Test the scanfrom clause
|
||||||
REM Fri SATISFY 1
|
REM Fri SATISFY 1
|
||||||
../tests/test.rem(154): Trig = Friday, 22 February, 1991
|
../tests/test.rem(158): Trig = Friday, 22 February, 1991
|
||||||
OMIT [trigger(trigdate())]
|
OMIT [trigger(trigdate())]
|
||||||
trigdate() => 1991-02-22
|
trigdate() => 1991-02-22
|
||||||
trigger(1991-02-22) => "22 February 1991"
|
trigger(1991-02-22) => "22 February 1991"
|
||||||
REM Fri after MSG 23 Feb 1991
|
REM Fri after MSG 23 Feb 1991
|
||||||
../tests/test.rem(156): Trig = Saturday, 23 February, 1991
|
../tests/test.rem(160): Trig = Saturday, 23 February, 1991
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
REM Fri SCANFROM [trigger(today()-7)] SATISFY 1
|
REM Fri SCANFROM [trigger(today()-7)] SATISFY 1
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
1991-02-16 - 7 => 1991-02-09
|
1991-02-16 - 7 => 1991-02-09
|
||||||
trigger(1991-02-09) => "9 February 1991"
|
trigger(1991-02-09) => "9 February 1991"
|
||||||
../tests/test.rem(158): Trig = Friday, 15 February, 1991
|
../tests/test.rem(162): Trig = Friday, 15 February, 1991
|
||||||
OMIT [trigger(trigdate())]
|
OMIT [trigger(trigdate())]
|
||||||
trigdate() => 1991-02-15
|
trigdate() => 1991-02-15
|
||||||
trigger(1991-02-15) => "15 February 1991"
|
trigger(1991-02-15) => "15 February 1991"
|
||||||
REM Fri after MSG 16 Feb 1991
|
REM Fri after MSG 16 Feb 1991
|
||||||
../tests/test.rem(160): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(164): Trig = Saturday, 16 February, 1991
|
||||||
16 Feb 1991
|
16 Feb 1991
|
||||||
|
|
||||||
CLEAR-OMIT-CONTEXT
|
CLEAR-OMIT-CONTEXT
|
||||||
@@ -505,7 +510,7 @@ set a008 coerce("string", 11:44)
|
|||||||
coerce("string", 11:44) => "11:44"
|
coerce("string", 11:44) => "11:44"
|
||||||
set a009 coerce("int", "badnews")
|
set a009 coerce("int", "badnews")
|
||||||
coerce("int", "badnews") => Can't coerce
|
coerce("int", "badnews") => Can't coerce
|
||||||
../tests/test.rem(171): Can't coerce
|
../tests/test.rem(175): Can't coerce
|
||||||
set a010 coerce("int", "12")
|
set a010 coerce("int", "12")
|
||||||
coerce("int", "12") => 12
|
coerce("int", "12") => 12
|
||||||
set a011 coerce("int", 11:44)
|
set a011 coerce("int", 11:44)
|
||||||
@@ -517,7 +522,7 @@ set a013 date(1992, 2, 2)
|
|||||||
date(1992, 2, 2) => 1992-02-02
|
date(1992, 2, 2) => 1992-02-02
|
||||||
set a014 date(1993, 2, 29)
|
set a014 date(1993, 2, 29)
|
||||||
date(1993, 2, 29) => Bad date specification
|
date(1993, 2, 29) => Bad date specification
|
||||||
../tests/test.rem(176): Bad date specification
|
../tests/test.rem(180): Bad date specification
|
||||||
set a015 day(today())
|
set a015 day(today())
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
day(1991-02-16) => 16
|
day(1991-02-16) => 16
|
||||||
@@ -612,15 +617,15 @@ strlen("sadjflkhsldkfhsdlfjhk") => 21
|
|||||||
set a050 substr(a049, 2)
|
set a050 substr(a049, 2)
|
||||||
a049 => 21
|
a049 => 21
|
||||||
substr(21, 2) => Type mismatch
|
substr(21, 2) => Type mismatch
|
||||||
../tests/test.rem(214): Type mismatch
|
../tests/test.rem(218): Type mismatch
|
||||||
set a051 substr(a050, 2, 6)
|
set a051 substr(a050, 2, 6)
|
||||||
a050 => ../tests/test.rem(215): Undefined variable: a050
|
a050 => ../tests/test.rem(219): Undefined variable: a050
|
||||||
set a052 time(1+2, 3+4)
|
set a052 time(1+2, 3+4)
|
||||||
1 + 2 => 3
|
1 + 2 => 3
|
||||||
3 + 4 => 7
|
3 + 4 => 7
|
||||||
time(3, 7) => 03:07
|
time(3, 7) => 03:07
|
||||||
rem 10 jan 1992 AT 11:22 CAL
|
rem 10 jan 1992 AT 11:22 CAL
|
||||||
../tests/test.rem(217): Trig = Friday, 10 January, 1992
|
../tests/test.rem(221): Trig = Friday, 10 January, 1992
|
||||||
set a053 trigdate()
|
set a053 trigdate()
|
||||||
trigdate() => 1992-01-10
|
trigdate() => 1992-01-10
|
||||||
set a054 trigtime()
|
set a054 trigtime()
|
||||||
@@ -633,7 +638,7 @@ set a057 value("a05"+"6")
|
|||||||
"a05" + "6" => "a056"
|
"a05" + "6" => "a056"
|
||||||
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||||
set a058 version()
|
set a058 version()
|
||||||
version() => "03.01.02"
|
version() => "03.01.03"
|
||||||
set a059 wkday(today())
|
set a059 wkday(today())
|
||||||
today() => 1991-02-16
|
today() => 1991-02-16
|
||||||
wkday(1991-02-16) => "Saturday"
|
wkday(1991-02-16) => "Saturday"
|
||||||
@@ -712,31 +717,31 @@ y => 11:33
|
|||||||
x => "foo"
|
x => "foo"
|
||||||
y => 11:33
|
y => 11:33
|
||||||
"foo" * 11:33 => Type mismatch
|
"foo" * 11:33 => Type mismatch
|
||||||
../tests/test.rem(240): `*': Type mismatch
|
../tests/test.rem(244): `*': Type mismatch
|
||||||
Leaving UserFN h() => Type mismatch
|
Leaving UserFN h() => Type mismatch
|
||||||
set a074 dosubst("%a %b %c %d %e %f %g %h", '1992/5/5')
|
set a074 dosubst("%a %b %c %d %e %f %g %h", '1992/5/5')
|
||||||
dosubst("%a %b %c %d %e %f %g %h", 1992-05-05) => "on Tuesday, 5 May, 1992 in 444 days' tim"...
|
dosubst("%a %b %c %d %e %f %g %h", 1992-05-05) => "on Tuesday, 5 May, 1992 in 444 days' tim"...
|
||||||
msg [a074]%
|
msg [a074]%
|
||||||
../tests/test.rem(242): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(246): Trig = Saturday, 16 February, 1991
|
||||||
a074 => "on Tuesday, 5 May, 1992 in 444 days' tim"...
|
a074 => "on Tuesday, 5 May, 1992 in 444 days' tim"...
|
||||||
on Tuesday, 5 May, 1992 in 444 days' time on Tuesday 5 on 05-05-1992 on 05-05-1992 on Tuesday, 5 May on 05-05
|
on Tuesday, 5 May, 1992 in 444 days' time on Tuesday 5 on 05-05-1992 on 05-05-1992 on Tuesday, 5 May on 05-05
|
||||||
set a075 dosubst("%i %j %k %l %m %n %o %p", '1992/5/5')
|
set a075 dosubst("%i %j %k %l %m %n %o %p", '1992/5/5')
|
||||||
dosubst("%i %j %k %l %m %n %o %p", 1992-05-05) => "on 05-05 on Tuesday, May 5th, 1992 on Tu"...
|
dosubst("%i %j %k %l %m %n %o %p", 1992-05-05) => "on 05-05 on Tuesday, May 5th, 1992 on Tu"...
|
||||||
msg [a075]%
|
msg [a075]%
|
||||||
../tests/test.rem(244): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(248): Trig = Saturday, 16 February, 1991
|
||||||
a075 => "on 05-05 on Tuesday, May 5th, 1992 on Tu"...
|
a075 => "on 05-05 on Tuesday, May 5th, 1992 on Tu"...
|
||||||
on 05-05 on Tuesday, May 5th, 1992 on Tuesday, May 5th on 1992-05-05 May 5 s
|
on 05-05 on Tuesday, May 5th, 1992 on Tuesday, May 5th on 1992-05-05 May 5 s
|
||||||
set a076 dosubst("%q %r %s %t %u %v %w %x", '1992/5/5')
|
set a076 dosubst("%q %r %s %t %u %v %w %x", '1992/5/5')
|
||||||
dosubst("%q %r %s %t %u %v %w %x", 1992-05-05) => "s' 05 th 05 on Tuesday, 5th May, 1992 on"...
|
dosubst("%q %r %s %t %u %v %w %x", 1992-05-05) => "s' 05 th 05 on Tuesday, 5th May, 1992 on"...
|
||||||
msg [a076]%
|
msg [a076]%
|
||||||
../tests/test.rem(246): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(250): Trig = Saturday, 16 February, 1991
|
||||||
a076 => "s' 05 th 05 on Tuesday, 5th May, 1992 on"...
|
a076 => "s' 05 th 05 on Tuesday, 5th May, 1992 on"...
|
||||||
s' 05 th 05 on Tuesday, 5th May, 1992 on Tuesday, 5th May Tuesday 444
|
s' 05 th 05 on Tuesday, 5th May, 1992 on Tuesday, 5th May Tuesday 444
|
||||||
set a077 dosubst("%y %z", '1992/5/5')
|
set a077 dosubst("%y %z", '1992/5/5')
|
||||||
dosubst("%y %z", 1992-05-05) => "1992 92
|
dosubst("%y %z", 1992-05-05) => "1992 92
|
||||||
"
|
"
|
||||||
msg [a077]%
|
msg [a077]%
|
||||||
../tests/test.rem(248): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(252): Trig = Saturday, 16 February, 1991
|
||||||
a077 => "1992 92
|
a077 => "1992 92
|
||||||
"
|
"
|
||||||
1992 92
|
1992 92
|
||||||
@@ -774,7 +779,7 @@ dump
|
|||||||
a048 "foo"
|
a048 "foo"
|
||||||
a067 "INT"
|
a067 "INT"
|
||||||
a039 "February"
|
a039 "February"
|
||||||
a058 "03.01.02"
|
a058 "03.01.03"
|
||||||
a077 "1992 92
|
a077 "1992 92
|
||||||
"
|
"
|
||||||
a049 21
|
a049 21
|
||||||
@@ -886,7 +891,7 @@ September 30
|
|||||||
2007/08/18 * * * * 12 NonOmit-2
|
2007/08/18 * * * * 12 NonOmit-2
|
||||||
2007/08/19 * * * * 17 NonOmit-1
|
2007/08/19 * * * * 17 NonOmit-1
|
||||||
2007/08/19 * * * * 12 NonOmit-2
|
2007/08/19 * * * * 12 NonOmit-2
|
||||||
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
||||||
2007/08/20 * * * * 18 NonOmit-1
|
2007/08/20 * * * * 18 NonOmit-1
|
||||||
2007/08/20 * * * * 12 NonOmit-2
|
2007/08/20 * * * * 12 NonOmit-2
|
||||||
2007/08/21 PostScript * * 115 (wookie) show
|
2007/08/21 PostScript * * 115 (wookie) show
|
||||||
@@ -969,7 +974,7 @@ Test 3
|
|||||||
2007/08/18 * * * * 12 NonOmit-2
|
2007/08/18 * * * * 12 NonOmit-2
|
||||||
2007/08/19 * * * * 17 NonOmit-1
|
2007/08/19 * * * * 17 NonOmit-1
|
||||||
2007/08/19 * * * * 12 NonOmit-2
|
2007/08/19 * * * * 12 NonOmit-2
|
||||||
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
||||||
2007/08/20 * * * * 18 NonOmit-1
|
2007/08/20 * * * * 18 NonOmit-1
|
||||||
2007/08/20 * * * * 12 NonOmit-2
|
2007/08/20 * * * * 12 NonOmit-2
|
||||||
2007/08/21 * * * * 19 NonOmit-1
|
2007/08/21 * * * * 19 NonOmit-1
|
||||||
@@ -1050,7 +1055,7 @@ Test 4
|
|||||||
2007/08/18 * * * * 12 NonOmit-2
|
2007/08/18 * * * * 12 NonOmit-2
|
||||||
2007/08/19 * * * * 17 NonOmit-1
|
2007/08/19 * * * * 17 NonOmit-1
|
||||||
2007/08/19 * * * * 12 NonOmit-2
|
2007/08/19 * * * * 12 NonOmit-2
|
||||||
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
2007/08/20 COLOR * * 825 6 7 8 1:45pm Mooo!
|
||||||
2007/08/20 COLOR * * * 0 0 255 Blue Wednesday is in 2 days' time
|
2007/08/20 COLOR * * * 0 0 255 Blue Wednesday is in 2 days' time
|
||||||
2007/08/20 * * * * 18 NonOmit-1
|
2007/08/20 * * * * 18 NonOmit-1
|
||||||
2007/08/20 * * * * 12 NonOmit-2
|
2007/08/20 * * * * 12 NonOmit-2
|
||||||
@@ -1083,3 +1088,90 @@ Test 4
|
|||||||
2007/08/30 * * * * 20 NonOmit-2
|
2007/08/30 * * * * 20 NonOmit-2
|
||||||
2007/08/31 * * * * 29 NonOmit-1
|
2007/08/31 * * * * 29 NonOmit-1
|
||||||
2007/08/31 * * * * 21 NonOmit-2
|
2007/08/31 * * * * 21 NonOmit-2
|
||||||
|
Test 5
|
||||||
|
|
||||||
|
# rem2ps begin
|
||||||
|
August 2007 31 3 0
|
||||||
|
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
|
||||||
|
July 31
|
||||||
|
September 30
|
||||||
|
2007/08/01 * * * 660 11:00am Wookie
|
||||||
|
2007/08/01 * * 45 660 11:00-11:45am Lettuce
|
||||||
|
2007/08/01 * * 105 660 11:00am-12:45pm Apple
|
||||||
|
2007/08/01 * * 885 660 11:00am-1:45am+1 Green
|
||||||
|
2007/08/01 * * 1485 660 11:00am-11:45am+1 Yellow
|
||||||
|
2007/08/01 * * 2205 660 11:00am-11:45pm+1 Purple
|
||||||
|
2007/08/01 * * 2925 660 11:00am-11:45am+2 Sad
|
||||||
|
2007/08/01 * * * 720 12:00pm Cookie
|
||||||
|
2007/08/01 * * 45 720 12:00-12:45pm Cabbage
|
||||||
|
2007/08/01 * * 165 720 12:00-2:45pm Pear
|
||||||
|
2007/08/01 * * 885 720 12:00pm-2:45am+1 Blue
|
||||||
|
2007/08/01 * * 1485 720 12:00pm-12:45pm+1 Orange
|
||||||
|
2007/08/01 * * 2205 720 12:00pm-12:45am+2 Black
|
||||||
|
2007/08/01 * * 2925 720 12:00pm-12:45pm+2 Happy
|
||||||
|
2007/08/01 * * * 780 1:00pm Snookie
|
||||||
|
2007/08/01 * * 45 780 1:00-1:45pm Tomato
|
||||||
|
2007/08/01 * * 225 780 1:00-4:45pm Grape
|
||||||
|
2007/08/01 * * 885 780 1:00pm-3:45am+1 Red
|
||||||
|
2007/08/01 * * 1485 780 1:00pm-1:45pm+1 Magenta
|
||||||
|
2007/08/01 * * 2205 780 1:00pm-1:45am+2 Brown
|
||||||
|
2007/08/01 * * 2925 780 1:00pm-1:45pm+2 Strange
|
||||||
|
# rem2ps end
|
||||||
|
Test 6
|
||||||
|
|
||||||
|
# rem2ps begin
|
||||||
|
August 2007 31 3 0
|
||||||
|
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
|
||||||
|
July 31
|
||||||
|
September 30
|
||||||
|
2007/08/01 * * * 660 11:00 Wookie
|
||||||
|
2007/08/01 * * 45 660 11:00-11:45 Lettuce
|
||||||
|
2007/08/01 * * 105 660 11:00-12:45 Apple
|
||||||
|
2007/08/01 * * 885 660 11:00-01:45+1 Green
|
||||||
|
2007/08/01 * * 1485 660 11:00-11:45+1 Yellow
|
||||||
|
2007/08/01 * * 2205 660 11:00-23:45+1 Purple
|
||||||
|
2007/08/01 * * 2925 660 11:00-11:45+2 Sad
|
||||||
|
2007/08/01 * * * 720 12:00 Cookie
|
||||||
|
2007/08/01 * * 45 720 12:00-12:45 Cabbage
|
||||||
|
2007/08/01 * * 165 720 12:00-14:45 Pear
|
||||||
|
2007/08/01 * * 885 720 12:00-02:45+1 Blue
|
||||||
|
2007/08/01 * * 1485 720 12:00-12:45+1 Orange
|
||||||
|
2007/08/01 * * 2205 720 12:00-00:45+2 Black
|
||||||
|
2007/08/01 * * 2925 720 12:00-12:45+2 Happy
|
||||||
|
2007/08/01 * * * 780 13:00 Snookie
|
||||||
|
2007/08/01 * * 45 780 13:00-13:45 Tomato
|
||||||
|
2007/08/01 * * 225 780 13:00-16:45 Grape
|
||||||
|
2007/08/01 * * 885 780 13:00-03:45+1 Red
|
||||||
|
2007/08/01 * * 1485 780 13:00-13:45+1 Magenta
|
||||||
|
2007/08/01 * * 2205 780 13:00-01:45+2 Brown
|
||||||
|
2007/08/01 * * 2925 780 13:00-13:45+2 Strange
|
||||||
|
# rem2ps end
|
||||||
|
Test 7
|
||||||
|
|
||||||
|
# rem2ps begin
|
||||||
|
August 2007 31 3 0
|
||||||
|
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
|
||||||
|
July 31
|
||||||
|
September 30
|
||||||
|
2007/08/01 * * * 660 Wookie
|
||||||
|
2007/08/01 * * 45 660 Lettuce
|
||||||
|
2007/08/01 * * 105 660 Apple
|
||||||
|
2007/08/01 * * 885 660 Green
|
||||||
|
2007/08/01 * * 1485 660 Yellow
|
||||||
|
2007/08/01 * * 2205 660 Purple
|
||||||
|
2007/08/01 * * 2925 660 Sad
|
||||||
|
2007/08/01 * * * 720 Cookie
|
||||||
|
2007/08/01 * * 45 720 Cabbage
|
||||||
|
2007/08/01 * * 165 720 Pear
|
||||||
|
2007/08/01 * * 885 720 Blue
|
||||||
|
2007/08/01 * * 1485 720 Orange
|
||||||
|
2007/08/01 * * 2205 720 Black
|
||||||
|
2007/08/01 * * 2925 720 Happy
|
||||||
|
2007/08/01 * * * 780 Snookie
|
||||||
|
2007/08/01 * * 45 780 Tomato
|
||||||
|
2007/08/01 * * 225 780 Grape
|
||||||
|
2007/08/01 * * 885 780 Red
|
||||||
|
2007/08/01 * * 1485 780 Magenta
|
||||||
|
2007/08/01 * * 2205 780 Brown
|
||||||
|
2007/08/01 * * 2925 780 Strange
|
||||||
|
# rem2ps end
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
#
|
#
|
||||||
# ./test-rem # From WITHIN Remind source directory!
|
# ./test-rem # From WITHIN Remind source directory!
|
||||||
|
|
||||||
|
# Don't evaluate SATISFY expressions if reminder has expired
|
||||||
|
|
||||||
|
REM Wed UNTIL 15 Feb 1991 SATISFY [trigdate() > '1990-01-01'] MSG wookie
|
||||||
|
|
||||||
REM MSG Today is [hebday(today())] [hebmon(today())] [hebyear(today())]
|
REM MSG Today is [hebday(today())] [hebmon(today())] [hebyear(today())]
|
||||||
fset _h(x, y) trigger(hebdate(x,y))
|
fset _h(x, y) trigger(hebdate(x,y))
|
||||||
|
|
||||||
|
|||||||
29
tests/test3.rem
Normal file
29
tests/test3.rem
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
REM 1 AT 11:00 MSG Wookie
|
||||||
|
REM 1 AT 12:00 MSG Cookie
|
||||||
|
REM 1 AT 13:00 MSG Snookie
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 0:45 MSG Lettuce
|
||||||
|
REM 1 AT 12:00 DURATION 0:45 MSG Cabbage
|
||||||
|
REM 1 AT 13:00 DURATION 0:45 MSG Tomato
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 1:45 MSG Apple
|
||||||
|
REM 1 AT 12:00 DURATION 2:45 MSG Pear
|
||||||
|
REM 1 AT 13:00 DURATION 3:45 MSG Grape
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 14:45 MSG Green
|
||||||
|
REM 1 AT 12:00 DURATION 14:45 MSG Blue
|
||||||
|
REM 1 AT 13:00 DURATION 14:45 MSG Red
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 24:45 MSG Yellow
|
||||||
|
REM 1 AT 12:00 DURATION 24:45 MSG Orange
|
||||||
|
REM 1 AT 13:00 DURATION 24:45 MSG Magenta
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 36:45 MSG Purple
|
||||||
|
REM 1 AT 12:00 DURATION 36:45 MSG Black
|
||||||
|
REM 1 AT 13:00 DURATION 36:45 MSG Brown
|
||||||
|
|
||||||
|
REM 1 AT 11:00 DURATION 48:45 MSG Sad
|
||||||
|
REM 1 AT 12:00 DURATION 48:45 MSG Happy
|
||||||
|
REM 1 AT 13:00 DURATION 48:45 MSG Strange
|
||||||
|
|
||||||
|
|
||||||
95
www/Makefile
95
www/Makefile
@@ -1,95 +0,0 @@
|
|||||||
# Makefile for installing WWW server calendar scripts
|
|
||||||
# This file is part of REMIND.
|
|
||||||
# Copyright (C) 1992-1997 by David F. Skoll
|
|
||||||
# Copyright (C) 1999 by Roaring Penguin Software Inc.
|
|
||||||
|
|
||||||
# The complete name of your www host. Example: www.mycompany.com
|
|
||||||
WWWHOST = magnesium.roaringpenguin.com
|
|
||||||
# WWWHOST = www.mycompany.com
|
|
||||||
|
|
||||||
# The complete path to where the scripts actually live, as seen by
|
|
||||||
# the UNIX operating system.
|
|
||||||
SCRIPTDIR = /var/www/cgi-bin
|
|
||||||
# SCRIPTDIR = /home/dfs/Remind/www/TEST
|
|
||||||
|
|
||||||
# Where the scripts live as seen by the web browser. If
|
|
||||||
# they live in WWWHOST/cgi-bin, supply /cgi-bin
|
|
||||||
CGIDIR = /cgi-bin
|
|
||||||
|
|
||||||
# The complete path to the directory containing the HTML file "calendar.html".
|
|
||||||
# This is a sample file containing links to all the scripts. This path
|
|
||||||
# should be the path as seen by the UNIX operating system
|
|
||||||
HTMLDIR = /var/www/html/remind
|
|
||||||
|
|
||||||
# Where you stick images, as seen by UNIX
|
|
||||||
IMAGEDIR = /var/www/html/remind
|
|
||||||
|
|
||||||
# Where images are, as seen by web browers
|
|
||||||
IMAGEBASE = /remind
|
|
||||||
|
|
||||||
# Location. Typically, the name of your city or town. Example: Ottawa
|
|
||||||
LOCATION = Ottawa
|
|
||||||
# LOCATION = New York
|
|
||||||
|
|
||||||
# Where do Remind and Rem2PS executables live?
|
|
||||||
REMIND = /usr/local/bin/remind
|
|
||||||
REM2PS = /usr/local/bin/rem2ps
|
|
||||||
|
|
||||||
# If your Web server requires CGI programs to have a .cgi suffix, use
|
|
||||||
# the next line. Otherwise, comment it out
|
|
||||||
CGISUFFIX=.cgi
|
|
||||||
|
|
||||||
# Don't change stuff below here.
|
|
||||||
# --------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Construct a rotten mean nasty sed script to do the dirty work
|
|
||||||
SEDSCRIPT = -e 's/Ottawa/$(LOCATION)/g' \
|
|
||||||
-e 's@http://your.machine/your.dir@http://$(WWWHOST)$(CGIDIR)@g' \
|
|
||||||
-e 's@%SCRIPTDIR%@$(SCRIPTDIR)@g' \
|
|
||||||
-e 's@%REMIND%@$(REMIND)@g' \
|
|
||||||
-e 's@%IMAGEBASE%@$(IMAGEBASE)@g' \
|
|
||||||
-e 's@%REM2PS%@$(REM2PS)@g' \
|
|
||||||
-e 's@cal_dispatch@cal_dispatch$(CGISUFFIX)@g' \
|
|
||||||
-e 's@rem2html@rem2html$(CGISUFFIX)@g'
|
|
||||||
|
|
||||||
SEDSCRIPT2 = -e 's/Ottawa/$(LOCATION)/g' \
|
|
||||||
-e 's@http://your.machine/your.dir@http://$(WWWHOST)$(CGIDIR)@g' \
|
|
||||||
-e 's@%SCRIPTDIR%@$(SCRIPTDIR)@g' \
|
|
||||||
-e 's@%REMIND%@$(REMIND)@g' \
|
|
||||||
-e 's@%IMAGEBASE%@$(IMAGEBASE)@g' \
|
|
||||||
-e 's@%REM2PS%@$(REM2PS)@g'
|
|
||||||
|
|
||||||
all:
|
|
||||||
@echo "Edit the Makefile; then type 'make install' to install"
|
|
||||||
@echo "the www server scripts."
|
|
||||||
|
|
||||||
# OK, it's abominable. But it works...
|
|
||||||
install:
|
|
||||||
-mkdir $(SCRIPTDIR)
|
|
||||||
cp calps hebdate hebps hebhtml moon sunrise sunset $(SCRIPTDIR)
|
|
||||||
sed $(SEDSCRIPT) < cal_dispatch-DIST > $(SCRIPTDIR)/cal_dispatch$(CGISUFFIX)
|
|
||||||
sed $(SEDSCRIPT) < hebdate.rem-DIST > $(SCRIPTDIR)/hebdate.rem
|
|
||||||
sed $(SEDSCRIPT) < moon.rem-DIST > $(SCRIPTDIR)/moon.rem
|
|
||||||
sed $(SEDSCRIPT) < sunrise.rem-DIST > $(SCRIPTDIR)/sunrise.rem
|
|
||||||
sed $(SEDSCRIPT) < sunset.rem-DIST > $(SCRIPTDIR)/sunset.rem
|
|
||||||
sed $(SEDSCRIPT) < calendar.html-DIST > $(HTMLDIR)/calendar.html
|
|
||||||
sed $(SEDSCRIPT) < hebhtml > $(SCRIPTDIR)/hebhtml
|
|
||||||
sed $(SEDSCRIPT2) < rem2html > $(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
|
||||||
chmod 644 $(SCRIPTDIR)/sunrise.rem
|
|
||||||
chmod 644 $(SCRIPTDIR)/moon.rem
|
|
||||||
chmod 644 $(SCRIPTDIR)/hebdate.rem
|
|
||||||
chmod 644 $(SCRIPTDIR)/sunset.rem
|
|
||||||
chmod 644 $(HTMLDIR)/calendar.html
|
|
||||||
chmod 755 $(SCRIPTDIR)/cal_dispatch$(CGISUFFIX)
|
|
||||||
chmod 755 $(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
|
||||||
chmod 755 $(SCRIPTDIR)/calps $(SCRIPTDIR)/hebdate \
|
|
||||||
$(SCRIPTDIR)/hebps $(SCRIPTDIR)/moon $(SCRIPTDIR)/sunrise \
|
|
||||||
$(SCRIPTDIR)/sunset $(SCRIPTDIR)/hebhtml $(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
|
||||||
|
|
||||||
-mkdir $(IMAGEDIR)
|
|
||||||
cp firstquarter.png fullmoon.png lastquarter.png newmoon.png $(IMAGEDIR)
|
|
||||||
chmod 644 $(IMAGEDIR)/firstquarter.png $(IMAGEDIR)/fullmoon.png $(IMAGEDIR)/lastquarter.png $(IMAGEDIR)/newmoon.png
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
100
www/Makefile.in
Normal file
100
www/Makefile.in
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Makefile.in for installing WWW server calendar scripts
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# Copyright (C) 1992-1997 by David F. Skoll
|
||||||
|
# Copyright (C) 1999-2007 by Roaring Penguin Software Inc.
|
||||||
|
|
||||||
|
# The complete path to where the scripts actually live, as seen by
|
||||||
|
# the UNIX operating system.
|
||||||
|
SCRIPTDIR = /var/www/cgi-bin
|
||||||
|
|
||||||
|
# Where the scripts live as seen by the web browser.
|
||||||
|
CGIDIR = /cgi-bin
|
||||||
|
|
||||||
|
# The complete path to the directory containing the HTML file "calendar.html".
|
||||||
|
# This is a sample file containing links to all the scripts. This path
|
||||||
|
# should be the path as seen by the UNIX operating system
|
||||||
|
HTMLDIR = /var/www/remind
|
||||||
|
|
||||||
|
# Where you stick images and CSS files, as seen by UNIX
|
||||||
|
IMAGEDIR = /var/www/remind/resources
|
||||||
|
|
||||||
|
# Where images are, as seen by web browers
|
||||||
|
IMAGEBASE = /remind/resources
|
||||||
|
|
||||||
|
# Set by configure - don't touch.
|
||||||
|
srcdir=@srcdir@
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
mandir=@mandir@
|
||||||
|
bindir=@bindir@
|
||||||
|
datadir=@datadir@
|
||||||
|
datarootdir=@datarootdir@
|
||||||
|
|
||||||
|
# Where do Remind and Rem2PS executables live?
|
||||||
|
REMIND = $(bindir)/remind
|
||||||
|
REM2PS = $(bindir)/rem2ps
|
||||||
|
|
||||||
|
# If your Web server requires CGI programs to have a .cgi suffix, use
|
||||||
|
# the next line. Otherwise, comment it out
|
||||||
|
CGISUFFIX=.cgi
|
||||||
|
|
||||||
|
# Don't change stuff below here.
|
||||||
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Construct a rotten mean nasty sed script to do the dirty work
|
||||||
|
SEDSCRIPT = -e 's@%CGIDIR%@$(CGIDIR)@g' \
|
||||||
|
-e 's@%SCRIPTDIR%@$(SCRIPTDIR)@g' \
|
||||||
|
-e 's@%REMIND%@$(REMIND)@g' \
|
||||||
|
-e 's@%IMAGEBASE%@$(IMAGEBASE)@g' \
|
||||||
|
-e 's@%REM2PS%@$(REM2PS)@g' \
|
||||||
|
-e 's@cal_dispatch@cal_dispatch$(CGISUFFIX)@g' \
|
||||||
|
-e 's@rem2html@rem2html$(CGISUFFIX)@g'
|
||||||
|
|
||||||
|
SEDSCRIPT2 = -e 's@%CGIDIR%@$(CGIDIR)@g' \
|
||||||
|
-e 's@%SCRIPTDIR%@$(SCRIPTDIR)@g' \
|
||||||
|
-e 's@%REMIND%@$(REMIND)@g' \
|
||||||
|
-e 's@%IMAGEBASE%@$(IMAGEBASE)@g' \
|
||||||
|
-e 's@%REM2PS%@$(REM2PS)@g'
|
||||||
|
|
||||||
|
all:
|
||||||
|
@echo "Edit the Makefile; then type 'make install' to install"
|
||||||
|
@echo "the www server scripts."
|
||||||
|
|
||||||
|
# OK, it's abominable. But it works...
|
||||||
|
install:
|
||||||
|
-mkdir -p $(DESTDIR)$(SCRIPTDIR)
|
||||||
|
-mkdir -p $(DESTDIR)$(HTMLDIR)
|
||||||
|
cp calps hebdate hebps hebhtml moon sunrise sunset $(DESTDIR)$(SCRIPTDIR)
|
||||||
|
sed $(SEDSCRIPT) < cal_dispatch-DIST > $(DESTDIR)$(SCRIPTDIR)/cal_dispatch$(CGISUFFIX)
|
||||||
|
sed $(SEDSCRIPT) < hebdate.rem-DIST > $(DESTDIR)$(SCRIPTDIR)/hebdate.rem
|
||||||
|
sed $(SEDSCRIPT) < moon.rem-DIST > $(DESTDIR)$(SCRIPTDIR)/moon.rem
|
||||||
|
sed $(SEDSCRIPT) < sunrise.rem-DIST > $(DESTDIR)$(SCRIPTDIR)/sunrise.rem
|
||||||
|
sed $(SEDSCRIPT) < sunset.rem-DIST > $(DESTDIR)$(SCRIPTDIR)/sunset.rem
|
||||||
|
sed $(SEDSCRIPT) < calendar.html-DIST > $(DESTDIR)$(HTMLDIR)/calendar.html
|
||||||
|
sed $(SEDSCRIPT) < hebhtml > $(DESTDIR)$(SCRIPTDIR)/hebhtml
|
||||||
|
sed $(SEDSCRIPT2) < rem2html > $(DESTDIR)$(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
||||||
|
chmod 644 $(DESTDIR)$(SCRIPTDIR)/sunrise.rem
|
||||||
|
chmod 644 $(DESTDIR)$(SCRIPTDIR)/moon.rem
|
||||||
|
chmod 644 $(DESTDIR)$(SCRIPTDIR)/hebdate.rem
|
||||||
|
chmod 644 $(DESTDIR)$(SCRIPTDIR)/sunset.rem
|
||||||
|
chmod 644 $(DESTDIR)$(HTMLDIR)/calendar.html
|
||||||
|
chmod 755 $(DESTDIR)$(SCRIPTDIR)/cal_dispatch$(CGISUFFIX)
|
||||||
|
chmod 755 $(DESTDIR)$(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
||||||
|
chmod 755 $(DESTDIR)$(SCRIPTDIR)/calps $(DESTDIR)$(SCRIPTDIR)/hebdate \
|
||||||
|
$(DESTDIR)$(SCRIPTDIR)/hebps $(DESTDIR)$(SCRIPTDIR)/moon \
|
||||||
|
$(DESTDIR)$(SCRIPTDIR)/sunrise $(DESTDIR)$(SCRIPTDIR)/sunset \
|
||||||
|
$(DESTDIR)$(SCRIPTDIR)/hebhtml \
|
||||||
|
$(DESTDIR)$(SCRIPTDIR)/rem2html$(CGISUFFIX)
|
||||||
|
|
||||||
|
-mkdir -p $(DESTDIR)$(IMAGEDIR)
|
||||||
|
cp firstquarter.png fullmoon.png lastquarter.png newmoon.png rem-default.css $(DESTDIR)$(IMAGEDIR)
|
||||||
|
chmod 644 $(DESTDIR)$(IMAGEDIR)/firstquarter.png \
|
||||||
|
$(DESTDIR)$(IMAGEDIR)/fullmoon.png \
|
||||||
|
$(DESTDIR)$(IMAGEDIR)/lastquarter.png \
|
||||||
|
$(DESTDIR)$(IMAGEDIR)/newmoon.png \
|
||||||
|
$(DESTDIR)$(IMAGEDIR)/rem-default.css
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,24 +1,13 @@
|
|||||||
REM2HTML
|
REM2HTML
|
||||||
|
--------
|
||||||
|
|
||||||
Rem2HTML is a Perl script which transforms the output of
|
Rem2HTML is a Perl script that transforms the output of `remind -p
|
||||||
`remind -p ...' to an HTML table. Type `perl rem2html --help' for
|
...' to HTML. Type `perl rem2html --help' for usage information.
|
||||||
usage information.
|
|
||||||
|
|
||||||
Typical usage: remind -p ~/.reminders | rem2html > file.html
|
Typical usage: remind -p ~/.reminders | rem2html > file.html
|
||||||
|
|
||||||
You may have to edit the "#!/bin/perl" line to reflect the location
|
You may have to edit the "#!/usr/bin/perl" line to reflect the
|
||||||
of your Perl interpreter.
|
location of your Perl interpreter.
|
||||||
|
|
||||||
If you make Remind output data for more than one month (for example,
|
|
||||||
remind -p3 ~/.reminders | rem2html > file.html), then rem2html
|
|
||||||
creates a _SINGLE_ file of concatenated HTML documents. It's up
|
|
||||||
to you to split them. In this case, you're probably better off
|
|
||||||
using the --tableonly option to rem2html and adding the appropriate
|
|
||||||
head and tail with another program.
|
|
||||||
|
|
||||||
Rem2HTML was contributed by Don Schwarz <darkowl@mcs.net>. It
|
|
||||||
produces HTML compatible with most modern browsers, but *not* with
|
|
||||||
browsers which don't support tables (like Lynx, as of this writing.)
|
|
||||||
|
|
||||||
--
|
--
|
||||||
David F. Skoll
|
David F. Skoll
|
||||||
|
|||||||
@@ -6,10 +6,6 @@
|
|||||||
|
|
||||||
# CAL_DISPATCH -- Shell script for CGI directory to dispatch calendar
|
# CAL_DISPATCH -- Shell script for CGI directory to dispatch calendar
|
||||||
# commands.
|
# commands.
|
||||||
#
|
|
||||||
# WARNING WARNING WARNING -- If your /bin/sh is really GNU's "bash",
|
|
||||||
# make sure you don't have a buggy version which treats char 0xFF as
|
|
||||||
# a command separator -- it is a security risk!
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
<HTML>
|
<HTML>
|
||||||
<!-- Sample HTML file with links to the calendar stuff -->
|
<!-- Sample HTML file with links to the calendar stuff -->
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<TITLE>David Skoll's Calendar Server</TITLE>
|
<TITLE>Remind Calendar Server</TITLE>
|
||||||
</HEAD>
|
</HEAD>
|
||||||
|
|
||||||
<BODY>
|
<BODY>
|
||||||
<H1>Roaring Penguin's Calendar Server</H1>
|
<H1>Remind Calendar Server</H1>
|
||||||
|
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?sunrise">
|
<a HREF="%CGIDIR%/cal_dispatch?sunrise">
|
||||||
Sunrise Information</a><P>
|
Sunrise Information</a><P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?sunset">
|
<a HREF="%CGIDIR%/cal_dispatch?sunset">
|
||||||
Sunset Information</a><P>
|
Sunset Information</a><P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?moon">
|
<a HREF="%CGIDIR%/cal_dispatch?moon">
|
||||||
Moon Phase Information</a><P>
|
Moon Phase Information</a><P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?calps">
|
<a HREF="%CGIDIR%/cal_dispatch?calps">
|
||||||
Blank PostScript Calendar</a> (Approximately 20kB)<P>
|
Blank PostScript Calendar</a> (Approximately 20kB)<P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?hebdate">
|
<a HREF="%CGIDIR%/cal_dispatch?hebdate">
|
||||||
Today's Hebrew Date</a><P>
|
Today's Hebrew Date</a><P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?hebps">
|
<a HREF="%CGIDIR%/cal_dispatch?hebps">
|
||||||
PostScript Calendar with Jewish Holidays</a> (Approximately 35 kB)<P>
|
PostScript Calendar with Jewish Holidays</a> (Approximately 35 kB)<P>
|
||||||
<a HREF="http://your.machine/your.dir/cal_dispatch?hebhtml">
|
<a HREF="%CGIDIR%/cal_dispatch?hebhtml">
|
||||||
HTML Calendar with Jewish Holidays</a> (Your browser must support tables.)<P>
|
HTML Calendar with Jewish Holidays</a>
|
||||||
<HR>
|
<HR>
|
||||||
<a HREF="http://www.roaringpenguin.com/remind.html">
|
<a HREF="http://www.roaringpenguin.com/remind">
|
||||||
Get the Remind software</a> that provides this service.<P>
|
Get the Remind software</a> that provides this service.<P>
|
||||||
|
|
||||||
</BODY>
|
</BODY>
|
||||||
|
|||||||
@@ -8,5 +8,5 @@
|
|||||||
echo "Content-type: application/postscript"
|
echo "Content-type: application/postscript"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
$REMIND -p /dev/null | $REM2PS -e -c3
|
$REMIND -p /dev/null | $REM2PS -e -c3 -l
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ IF !InIsrael
|
|||||||
[_h(16, "Tishrey")] MSG %"Sukkot 2%"
|
[_h(16, "Tishrey")] MSG %"Sukkot 2%"
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
[_h(21, "Tishrey")] ++12 MSG %"Hashana Rabba%" is %b.
|
[_h(21, "Tishrey")] ++12 MSG %"Hoshana Rabba%" is %b.
|
||||||
[_h(22, "Tishrey")] ++12 MSG %"Shemini Atzeret%" is %b.
|
[_h(22, "Tishrey")] ++12 MSG %"Shemini Atzeret%" is %b.
|
||||||
|
|
||||||
IF InIsrael
|
IF InIsrael
|
||||||
@@ -158,8 +158,8 @@ IF ostart <= TODAY() && (TODAY() - ostart < 49)
|
|||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
IF !$PSCAL
|
IF !$PSCAL
|
||||||
REM 20 ++40 msg Also available: <a HREF="http://your.machine/your.dir/cal_dispatch?hebps">a PostScript calendar</a> (about 35KB) for %m %y, complete with Hebrew dates, Jewish holidays, and moon phases for Ottawa. (This takes a few seconds to generate.)
|
REM 20 ++40 msg Also available: <a HREF="%CGIDIR%/cal_dispatch?hebps">a PostScript calendar</a> (about 35KB) for %m %y, complete with Hebrew dates, Jewish holidays, and moon phases for [$Location].
|
||||||
REM 20 ++40 msg And: <a HREF="http://your.machine/your.dir/cal_dispatch?hebhtml">an HTML version</a> of the above. (Your browser must handle tables.)
|
REM 20 ++40 msg And: <a HREF="%CGIDIR%/cal_dispatch?hebhtml">an HTML version</a> of the above.
|
||||||
ELSE
|
ELSE
|
||||||
[trigger(moondate(0))] SPECIAL MOON 0
|
[trigger(moondate(0))] SPECIAL MOON 0
|
||||||
[trigger(moondate(1))] SPECIAL MOON 1
|
[trigger(moondate(1))] SPECIAL MOON 1
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ echo ""
|
|||||||
|
|
||||||
$REMIND - <<EOR
|
$REMIND - <<EOR
|
||||||
BANNER %
|
BANNER %
|
||||||
REM 20 ++40 RUN $REMIND -iHTML=0 -p $DIR/hebdate.rem %m %y | $REM2PS -e -c3
|
REM 20 ++40 RUN $REMIND -iHTML=0 -p $DIR/hebdate.rem %m %y | $REM2PS -e -c3 -l
|
||||||
EOR
|
EOR
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ set now now()
|
|||||||
banner %
|
banner %
|
||||||
|
|
||||||
MSG <HEAD>%
|
MSG <HEAD>%
|
||||||
MSG <TITLE>Moon over Ottawa</TITLE>%
|
MSG <TITLE>Moon over [$Location]</TITLE>%
|
||||||
MSG </HEAD>%
|
MSG </HEAD>%
|
||||||
|
|
||||||
MSG <BODY>
|
MSG <BODY>
|
||||||
MSG <H1>Moon over Ottawa</H1>
|
MSG <H1>Moon over [$Location]</H1>
|
||||||
|
|
||||||
set ndate moondate(0)
|
set ndate moondate(0)
|
||||||
set ntime moontime(0)
|
set ntime moontime(0)
|
||||||
@@ -22,12 +22,12 @@ set ftime moontime(2)
|
|||||||
|
|
||||||
fset t(x) wkday(x)+", "+day(x)+" "+mon(x)+", "+year(x)
|
fset t(x) wkday(x)+", "+day(x)+" "+mon(x)+", "+year(x)
|
||||||
msg Today is %w, %d %m, %y.<P>
|
msg Today is %w, %d %m, %y.<P>
|
||||||
msg The local time in Ottawa is [now].<P>
|
msg The local time in [$Location] is [now].<P>
|
||||||
|
|
||||||
if ndate < fdate
|
if ndate < fdate
|
||||||
msg The next new moon is on [t(ndate)] at [ntime], Ottawa time.<P>
|
msg The next new moon is on [t(ndate)] at [ntime], [$Location] time.<P>
|
||||||
msg The next full moon is on [t(fdate)] at [ftime], Ottawa time.<P>
|
msg The next full moon is on [t(fdate)] at [ftime], [$Location] time.<P>
|
||||||
else
|
else
|
||||||
msg The next full moon is on [t(fdate)] at [ftime], Ottawa time.<P>
|
msg The next full moon is on [t(fdate)] at [ftime], [$Location] time.<P>
|
||||||
msg The next new moon is on [t(ndate)] at [ntime], Ottawa time.<P>
|
msg The next new moon is on [t(ndate)] at [ntime], [$Location] time.<P>
|
||||||
endif
|
endif
|
||||||
|
|||||||
69
www/rem-default.css
Normal file
69
www/rem-default.css
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
table.rem-cal {
|
||||||
|
font-family: helvetica, arial, sans-serif;
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.rem-sc-table {
|
||||||
|
font-family: helvetica, arial, sans-serif;
|
||||||
|
font-size: 10pt;
|
||||||
|
width: 95%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption.rem-cal-caption {
|
||||||
|
font-size: 14pt;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.rem-cal-hdr {
|
||||||
|
width: 14%;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
td.rem-empty, td.rem-cell, td.rem-small-calendar {
|
||||||
|
width: 14%;
|
||||||
|
height: 7em;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
td.rem-today {
|
||||||
|
width: 14%;
|
||||||
|
height: 7em;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 2px;
|
||||||
|
border-color: #EE3333;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.rem-cal {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.rem-daynumber {
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: top;
|
||||||
|
font-size: 14pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.rem-moon {
|
||||||
|
float: left;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.rem-sc-hdr {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.rem-sc-empty-cell, td.rem-sc-cell {
|
||||||
|
text-align: right;
|
||||||
|
width: 14%;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption.rem-sc-caption {
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
921
www/rem2html
921
www/rem2html
@@ -1,102 +1,533 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
|
||||||
# rem2html
|
use strict;
|
||||||
#
|
use warnings;
|
||||||
# A script to convert from the output of "remind -p" to Hyper-Text Markup
|
|
||||||
# Language (HTML), the text format used in WWW documents. By default, it
|
|
||||||
# outputs a stand-alone file which can be fed directly into a web browser.
|
|
||||||
# The output uses nested <TABLE> blocks, so it will only work in a browser
|
|
||||||
# which supports tables (Netscape, MSIE, etc, NOT Lynx).
|
|
||||||
#
|
|
||||||
# This script works well on my computer (Linux 2.0.27) under Perl 5.003 and
|
|
||||||
# 5.004. It should work fine on other unices but I have no idea whether
|
|
||||||
# it will run under VMS, OS/2, Windows, etc.
|
|
||||||
#
|
|
||||||
# [Note from David: The REMIND license prohibits you from using REMIND
|
|
||||||
# under Windows.]
|
|
||||||
#
|
|
||||||
# Rem2html puts "normal" CAL or MSG-type reminders in a <P></P> pair,
|
|
||||||
# and escapes any special HTML characters.
|
|
||||||
#
|
|
||||||
# If you want to put actual HTML code in the calendar (hyper-links, for
|
|
||||||
# example), use the "SPECIAL HTML" type. For example:
|
|
||||||
#
|
|
||||||
# REM Wed SPECIAL HTML <P> Meeting at \
|
|
||||||
# <A HREF="http://www.linuxhq.com">Linux HQ</A> </P>
|
|
||||||
#
|
|
||||||
# This file is Copyright (C) 1997-8 by Don Schwarz <darkowl@mcs.net>
|
|
||||||
# and David F. Skoll
|
|
||||||
|
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
|
|
||||||
@months = (January,February,March,April,May,June,July,August,September,October,November,December);
|
my %Options;
|
||||||
|
|
||||||
$DefaultImageDir = "%IMAGEBASE%";
|
my $rem2html_version = '2.0';
|
||||||
if ($DefaultImageDir =~ m@/$@) {
|
|
||||||
chop $DefaultImageDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
$rem2html_version = "1.0";
|
my($days, $shades, $moons, $classes, $Month, $Year, $Numdays, $Firstwkday, $Mondayfirst,
|
||||||
|
@Daynames, $Nextmon, $Nextlen, $Prevmon, $Prevlen);
|
||||||
|
|
||||||
&parse_options();
|
my $TIDY_PROGNAME = $0;
|
||||||
|
$TIDY_PROGNAME =~ s|^.*/||;
|
||||||
|
|
||||||
# Backgound color -- unfortunately, most Web browsers (as of 14 October 1999)
|
# rem2html -- convert the output of "remind -p" to HTML
|
||||||
# do not correctly handle transparency in PNG images, so I had to make the
|
|
||||||
# moon image background white.
|
|
||||||
$Options{'bgcolor'} ||= "BGCOLOR=\"#FFFFFF\"";
|
|
||||||
|
|
||||||
if (-t STDIN) {
|
=head1 NAME
|
||||||
print STDERR "(Rem2HTML: Input should not come from a terminal.)\n";
|
|
||||||
$Options{'help'} = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($Options{'help'}) {
|
rem2html - Convert the output of "remind -p" to HTML
|
||||||
&show_usage();
|
|
||||||
} elsif ($Options{'version'}) {
|
|
||||||
print "Rem2HTML Version $rem2html_version.\n";
|
|
||||||
} else {
|
|
||||||
$successes = 0;
|
|
||||||
while(1) {
|
|
||||||
last if (!parse_input());
|
|
||||||
$successes++;
|
|
||||||
&output_header();
|
|
||||||
&output_data();
|
|
||||||
&output_footer();
|
|
||||||
}
|
|
||||||
print STDERR "Rem2HTML: Couldn't find any calendar data.\n" if (!$successes);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
sub show_usage {
|
remind -p ... | rem2html [options]
|
||||||
print STDERR <<EndOfUsage;
|
|
||||||
Rem2HTML: Produce a HTML calendar from the output of Remind.
|
|
||||||
|
|
||||||
Usage: rem2html [options]
|
=head1 OPTIONS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item --help, -h
|
||||||
|
|
||||||
|
Print usage information
|
||||||
|
|
||||||
|
=item --version
|
||||||
|
|
||||||
|
Print version
|
||||||
|
|
||||||
|
=item --backurl I<url>
|
||||||
|
|
||||||
|
When producing the small calendar for the previous month, make the
|
||||||
|
month name a link to I<url>.
|
||||||
|
|
||||||
|
=item --forwurl I<url>
|
||||||
|
|
||||||
|
When producing the small calendar for the next month, make the
|
||||||
|
month name a link to I<url>.
|
||||||
|
|
||||||
|
=item --imgbase I<url>
|
||||||
|
|
||||||
|
When creating URLs for images and the stylesheet, use
|
||||||
|
I<url> as the base URL.
|
||||||
|
|
||||||
|
=item --stylesheet I<url.css>
|
||||||
|
|
||||||
|
Use I<url.css> as the stylesheet. If this option is used,
|
||||||
|
I<url.css> is I<not> interpreted relative to B<imgbase>.
|
||||||
|
|
||||||
|
=item --nostyle
|
||||||
|
|
||||||
|
Produce basic HTML that does not use a CSS stylesheet.
|
||||||
|
|
||||||
|
=item --tableonly
|
||||||
|
|
||||||
|
Output results as a E<lt>tableE<gt> ... E<lt>/tableE<gt> sequence only
|
||||||
|
without any E<lt>htmlE<gt> or E<lt>bodyE<gt> tags.
|
||||||
|
|
||||||
|
=item --title I<title>
|
||||||
|
|
||||||
|
Use I<title> as the content between E<lt>titleE<gt> and E<lt>/titleE<gt>
|
||||||
|
tags.
|
||||||
|
|
||||||
|
|
||||||
|
=item --prologue I<html_text>
|
||||||
|
|
||||||
|
Insert I<html_text> right after the E<lt>bodyE<gt> tag.
|
||||||
|
|
||||||
|
=item --epilogue I<html_text>
|
||||||
|
|
||||||
|
Insert I<html_text> right before the E<lt>/bodyE<gt> tag.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
rem2html was written by David F. Skoll with much inspiration from an
|
||||||
|
earlier version by Don Schwarz.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub usage
|
||||||
|
{
|
||||||
|
my ($exit_status) = @_;
|
||||||
|
if (!defined($exit_status)) {
|
||||||
|
$exit_status = 1;
|
||||||
|
}
|
||||||
|
print STDERR <<"EOM";
|
||||||
|
$TIDY_PROGNAME: Produce an HTML calendar from the output of "remind -p"
|
||||||
|
|
||||||
|
Usage: remind -p ... | rem2html [options]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
--help, -h Print this information
|
--help, -h Print usage information
|
||||||
--version Version information
|
--man Show man page (requires "perldoc")
|
||||||
-p file Prepend the specified HTML file to the beginning of the
|
--version Print version
|
||||||
output
|
--backurl url Make the title on the previous month's small calendar
|
||||||
-a file Append the specified HTML file to the end of the output
|
entry a link to <url>
|
||||||
-f[shted] font Set font for small cal, hdr, title, cal entries,day numbers
|
--forwurl url Same as --backurl, but for the next month's small calendar
|
||||||
-s[hted] size Set size for header, title, calendar entries and/or day
|
--imgbase url Base URL of images and default stylesheet file
|
||||||
numbers
|
--stylesheet url.css URL of CSS stylesheet. If specified, imgbase is NOT
|
||||||
--backurl url Make the title on the previous month's small calendar entry
|
prepended to url.css
|
||||||
a hyperlink to <url>
|
--nostyle Produce basic HTML that does not use a CSS stylesheet
|
||||||
--forwurl url Same as --backurl, but with the next month's small calendar
|
--tableonly Output results as a <table> only, no <html>, <body>, etc.
|
||||||
--tableonly Output the results as a <TABLE> block only, no <HTML>, etc.
|
--title string What to put in <title>...</title> tags
|
||||||
--border,-b size Set the border thickness of the table
|
--prologue html_text Text to insert at the top of the body
|
||||||
--cellspace,-t size Set the line thickness of the table
|
--epilogue html_text Text to insert at the end of the body
|
||||||
--bgcolor,-g color Set the background color for the day entries
|
EOM
|
||||||
|
exit($exit_status);
|
||||||
EndOfUsage
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub escape_html {
|
sub parse_options
|
||||||
|
{
|
||||||
|
local $SIG{__WARN__} = sub { print STDERR "$TIDY_PROGNAME: $_[0]\n"; };
|
||||||
|
if (!GetOptions(\%Options, "help|h",
|
||||||
|
"man",
|
||||||
|
"version",
|
||||||
|
"stylesheet=s",
|
||||||
|
"nostyle",
|
||||||
|
"backurl=s",
|
||||||
|
"forwurl=s",
|
||||||
|
"title=s",
|
||||||
|
"prologue=s",
|
||||||
|
"epilogue=s",
|
||||||
|
"imgbase=s",
|
||||||
|
"tableonly")) {
|
||||||
|
usage(1);
|
||||||
|
}
|
||||||
|
$Options{'title'} ||= 'HTML Calendar';
|
||||||
|
|
||||||
|
# Fix up imgbase
|
||||||
|
my $imgbase = '%IMAGEBASE%';
|
||||||
|
if ($imgbase ne '%' . 'IMAGEBASE' . '%') {
|
||||||
|
$Options{'imgbase'} ||= $imgbase;
|
||||||
|
} else {
|
||||||
|
$Options{'imgbase'} ||= '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$Options{'imgbase'} =~ s|/+$||;
|
||||||
|
my $stylesheet = $Options{'imgbase'};
|
||||||
|
$stylesheet .= '/' if ($stylesheet ne '');
|
||||||
|
$stylesheet .= 'rem-default.css';
|
||||||
|
$Options{'stylesheet'} ||= $stylesheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub start_output
|
||||||
|
{
|
||||||
|
return if ($Options{'tableonly'});
|
||||||
|
|
||||||
|
print("<html>\n<head>\n<title>" . $Options{'title'} . "</title>\n");
|
||||||
|
if (!$Options{'nostyle'}) {
|
||||||
|
if ($Options{'stylesheet'}) {
|
||||||
|
print('<link rel="stylesheet" type="text/css" href="' .
|
||||||
|
$Options{'stylesheet'} . '">' . "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print("</head>\n<body>\n");
|
||||||
|
if ($Options{'prologue'}) {
|
||||||
|
print $Options{'prologue'} . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub end_output
|
||||||
|
{
|
||||||
|
return if ($Options{'tableonly'});
|
||||||
|
if ($Options{'epilogue'}) {
|
||||||
|
print $Options{'epilogue'} . "\n";
|
||||||
|
}
|
||||||
|
print("</body>\n</html>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_input
|
||||||
|
{
|
||||||
|
undef $days;
|
||||||
|
undef $shades;
|
||||||
|
undef $moons;
|
||||||
|
undef $classes;
|
||||||
|
|
||||||
|
my $found_data = 0;
|
||||||
|
while(<STDIN>) {
|
||||||
|
chomp;
|
||||||
|
last if /^\# rem2ps begin$/;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $line;
|
||||||
|
# Month Year numdays firstday monday_first_flag
|
||||||
|
$line = <STDIN>;
|
||||||
|
return 0 unless $line;
|
||||||
|
chomp($line);
|
||||||
|
($Month, $Year, $Numdays, $Firstwkday, $Mondayfirst) = split(' ', $line);
|
||||||
|
|
||||||
|
# Day names
|
||||||
|
$line = <STDIN>;
|
||||||
|
return 0 unless $line;
|
||||||
|
chomp($line);
|
||||||
|
@Daynames = split(' ', $line);
|
||||||
|
|
||||||
|
# Prevmon prevlen
|
||||||
|
$line = <STDIN>;
|
||||||
|
return 0 unless $line;
|
||||||
|
chomp($line);
|
||||||
|
($Prevmon, $Prevlen) = split(' ', $line);
|
||||||
|
|
||||||
|
# Nextmon nextlen
|
||||||
|
$line = <STDIN>;
|
||||||
|
return 0 unless $line;
|
||||||
|
chomp($line);
|
||||||
|
($Nextmon, $Nextlen) = split(' ', $line);
|
||||||
|
|
||||||
|
$found_data = 1;
|
||||||
|
my $class;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
$class = '';
|
||||||
|
} else {
|
||||||
|
$class = ' class="rem-entry"';
|
||||||
|
}
|
||||||
|
while(<STDIN>) {
|
||||||
|
chomp;
|
||||||
|
last if /^\# rem2ps end$/;
|
||||||
|
next if /^\#/;
|
||||||
|
next unless m/^(\d*).(\d*).(\d*)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/;
|
||||||
|
my ($y, $m, $d, $special, $tag, $duration, $time, $body) =
|
||||||
|
($1, $2, $3, $4, $5, $6, $7, $8);
|
||||||
|
if ($special eq 'HTML') {
|
||||||
|
push(@{$days->[$d]}, $body);
|
||||||
|
} elsif ($special eq 'HTMLCLASS') {
|
||||||
|
$classes->[$d] = $body;
|
||||||
|
} elsif ($special eq 'MOON') {
|
||||||
|
if ($body =~ /(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/) {
|
||||||
|
my ($phase, $moonsize, $fontsize, $msg) = ($1, $2, $3, $4);
|
||||||
|
$moons->[$d]->{'phase'} = $phase;
|
||||||
|
$moons->[$d]->{'msg'} = $msg;
|
||||||
|
} elsif ($body =~ /(\S+)/) {
|
||||||
|
$moons->[$d]->{'phase'} = $1;
|
||||||
|
$moons->[$d]->{'msg'} = '';
|
||||||
|
}
|
||||||
|
} elsif ($special eq 'SHADE') {
|
||||||
|
if ($body =~ /(\d+)\s+(\d+)\s+(\d+)/) {
|
||||||
|
$shades->[$d] = sprintf("#%02X%02X%02X",
|
||||||
|
($1 % 256), ($2 % 256), ($3 % 256));
|
||||||
|
}
|
||||||
|
} elsif ($special eq 'COLOR') {
|
||||||
|
if ($body =~ /(\d+)\s+(\d+)\s+(\d+)\s+(.*)$/) {
|
||||||
|
my($r, $g, $b, $text) = ($1, $2, $3, $4);
|
||||||
|
my $color = sprintf("style=\"color: #%02X%02X%02X;\"",
|
||||||
|
$r % 256, $g % 256, $b % 256);
|
||||||
|
push(@{$days->[$d]}, "<p$class $color>" . escape_html($text) . '</p>');
|
||||||
|
}
|
||||||
|
} elsif ($special eq '*') {
|
||||||
|
push(@{$days->[$d]}, "<p$class>" . escape_html($body) . '</p>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $found_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub small_calendar
|
||||||
|
{
|
||||||
|
my($month, $monlen, $url, $first_col) = @_;
|
||||||
|
if ($Mondayfirst) {
|
||||||
|
$first_col--;
|
||||||
|
if ($first_col < 0) {
|
||||||
|
$first_col = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print "<td width=\"14%\">\n";
|
||||||
|
print "<table border=\"0\">\n";
|
||||||
|
print "<caption>";
|
||||||
|
} else {
|
||||||
|
print "<td class=\"rem-small-calendar\">\n";
|
||||||
|
print "<table class=\"rem-sc-table\">\n";
|
||||||
|
print "<caption class=\"rem-sc-caption\">";
|
||||||
|
}
|
||||||
|
print "<a href=\"$url\">" if ($url);
|
||||||
|
print $month;
|
||||||
|
print "</a>" if ($url);
|
||||||
|
print "</caption>\n";
|
||||||
|
|
||||||
|
my $class;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print '<tr>';
|
||||||
|
$class = ' align="right"';
|
||||||
|
} else {
|
||||||
|
print '<tr class="rem-sc-hdr-row">';
|
||||||
|
$class = ' class="rem-sc-hdr"';
|
||||||
|
}
|
||||||
|
if (!$Mondayfirst) {
|
||||||
|
print "<th$class>" . substr($Daynames[0], 0, 1) . '</th>';
|
||||||
|
}
|
||||||
|
for (my $i=1; $i<7; $i++) {
|
||||||
|
print "<th$class>" . substr($Daynames[$i], 0, 1) . '</th>';
|
||||||
|
}
|
||||||
|
if ($Mondayfirst) {
|
||||||
|
print "<th$class>" . substr($Daynames[0], 0, 1) . '</th>';
|
||||||
|
}
|
||||||
|
print("</tr>\n");
|
||||||
|
my $col = 0;
|
||||||
|
for (; $col<$first_col; $col++) {
|
||||||
|
if ($col == 0) {
|
||||||
|
print("<tr>\n");
|
||||||
|
}
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print("<td align=\"right\" width=\"14%\"> </td>");
|
||||||
|
} else {
|
||||||
|
print("<td class=\"rem-sc-empty-cell\"> </td>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (my $day=1; $day <= $monlen; $day++) {
|
||||||
|
if ($col == 0) {
|
||||||
|
print("<tr>\n");
|
||||||
|
}
|
||||||
|
$col++;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print("<td align=\"right\" width=\"14%\">$day</td>");
|
||||||
|
} else {
|
||||||
|
print("<td class=\"rem-sc-cell\">$day</td>");
|
||||||
|
}
|
||||||
|
if ($col == 7) {
|
||||||
|
print("</tr>\n");
|
||||||
|
$col = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($col) {
|
||||||
|
while ($col < 7) {
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print("<td align=\"right\" width=\"14%\"> </td>");
|
||||||
|
} else {
|
||||||
|
print("<td class=\"rem-sc-empty-cell\"> </td>");
|
||||||
|
}
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
print("</tr>\n");
|
||||||
|
}
|
||||||
|
print("</table>\n");
|
||||||
|
print "</td>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub output_calendar
|
||||||
|
{
|
||||||
|
# Which column is 1st of month in?
|
||||||
|
my $first_col = $Firstwkday;
|
||||||
|
if ($Mondayfirst) {
|
||||||
|
$first_col--;
|
||||||
|
if ($first_col < 0) {
|
||||||
|
$first_col = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Last column
|
||||||
|
my $last_col = ($first_col + $Numdays - 1) % 7;
|
||||||
|
|
||||||
|
|
||||||
|
# Start the table
|
||||||
|
my $class;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print '<table width="100%" border="1" cellspacing=\"0\"><caption>' .
|
||||||
|
$Month . ' ' . $Year . '</caption>' . "\n";
|
||||||
|
print '<tr>';
|
||||||
|
$class = ' width="14%"';
|
||||||
|
} else {
|
||||||
|
print '<table class="rem-cal"><caption class="rem-cal-caption">' .
|
||||||
|
$Month . ' ' . $Year . '</caption>' . "\n";
|
||||||
|
print '<tr class="rem-cal-hdr-row">';
|
||||||
|
$class = ' class="rem-cal-hdr"';
|
||||||
|
}
|
||||||
|
if (!$Mondayfirst) {
|
||||||
|
print "<th$class>" . $Daynames[0] . '</th>';
|
||||||
|
}
|
||||||
|
for (my $i=1; $i<7; $i++) {
|
||||||
|
print "<th$class>" . $Daynames[$i] . '</th>';
|
||||||
|
}
|
||||||
|
if ($Mondayfirst) {
|
||||||
|
print "<th$class>" . $Daynames[0] . '</th>';
|
||||||
|
}
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
# Start the calendar rows
|
||||||
|
my $col = 0;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print "<tr>\n";
|
||||||
|
} else {
|
||||||
|
print "<tr class=\"rem-cal-row\">\n";
|
||||||
|
}
|
||||||
|
if ($first_col > 0) {
|
||||||
|
small_calendar($Prevmon, $Prevlen, $Options{'backurl'},
|
||||||
|
($Firstwkday - $Prevlen + 35) % 7);
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($last_col == 6) {
|
||||||
|
small_calendar($Nextmon, $Nextlen, $Options{'forwurl'},
|
||||||
|
($Firstwkday + $Numdays) % 7);
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
$class = ' width="14%"';
|
||||||
|
} else {
|
||||||
|
$class = ' class="rem-empty"';
|
||||||
|
}
|
||||||
|
while ($col < $first_col) {
|
||||||
|
print("<td$class> </td>\n");
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (my $day=1; $day<=$Numdays; $day++) {
|
||||||
|
draw_day_cell($day);
|
||||||
|
$col++;
|
||||||
|
if ($col == 7) {
|
||||||
|
$col = 0;
|
||||||
|
print "</tr>\n";
|
||||||
|
if ($day < $Numdays) {
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print "<tr>\n";
|
||||||
|
} else {
|
||||||
|
print "<tr class=\"rem-cal-row\">\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($col) {
|
||||||
|
while ($col < 7) {
|
||||||
|
if ($col == 5) {
|
||||||
|
if ($first_col == 0) {
|
||||||
|
small_calendar($Prevmon, $Prevlen, $Options{'backurl'},
|
||||||
|
($Firstwkday - $Prevlen + 35) % 7);
|
||||||
|
} else {
|
||||||
|
print("<td$class> </td>\n");
|
||||||
|
}
|
||||||
|
} elsif ($col == 6) {
|
||||||
|
small_calendar($Nextmon, $Nextlen, $Options{'forwurl'},
|
||||||
|
($Firstwkday + $Numdays) % 7);
|
||||||
|
} else {
|
||||||
|
print("<td$class> </td>\n");
|
||||||
|
}
|
||||||
|
$col++;
|
||||||
|
}
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# End the table
|
||||||
|
print "</table>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub draw_day_cell
|
||||||
|
{
|
||||||
|
my($day) = @_;
|
||||||
|
my $shade = $shades->[$day];
|
||||||
|
my $class;
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
$class = $classes->[$day] || '';
|
||||||
|
} else {
|
||||||
|
$class = $classes->[$day] || "rem-cell";
|
||||||
|
}
|
||||||
|
if ($shade) {
|
||||||
|
$shade = " style=\"background: $shade;\"";
|
||||||
|
} else {
|
||||||
|
$shade = "";
|
||||||
|
}
|
||||||
|
if ($class ne '') {
|
||||||
|
print "<td class=\"$class\"$shade>\n<p>";
|
||||||
|
} else {
|
||||||
|
print "<td valign=\"top\" $shade>\n<p>";
|
||||||
|
}
|
||||||
|
if ($moons->[$day]) {
|
||||||
|
my $phase = $moons->[$day]->{'phase'};
|
||||||
|
my $msg = $moons->[$day]->{'msg'};
|
||||||
|
$msg ||= '';
|
||||||
|
if ($msg ne '') {
|
||||||
|
$msg = ' ' . escape_html($msg);
|
||||||
|
}
|
||||||
|
my $img;
|
||||||
|
my $alt;
|
||||||
|
my $title;
|
||||||
|
if ($phase == 0) {
|
||||||
|
$img = 'newmoon.png';
|
||||||
|
$title = 'New Moon';
|
||||||
|
$alt = 'new';
|
||||||
|
} elsif ($phase == 1) {
|
||||||
|
$img = 'firstquarter.png';
|
||||||
|
$title = 'First Quarter';
|
||||||
|
$alt = '1st';
|
||||||
|
} elsif ($phase == 2) {
|
||||||
|
$img = 'fullmoon.png';
|
||||||
|
$alt = 'full';
|
||||||
|
$title = 'Full Moon';
|
||||||
|
} else {
|
||||||
|
$img = 'lastquarter.png';
|
||||||
|
$alt = 'last';
|
||||||
|
$title = 'Last Quarter';
|
||||||
|
}
|
||||||
|
if ($Options{'imgbase'}) {
|
||||||
|
$img = $Options{'imgbase'} . '/' . $img;
|
||||||
|
}
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print("<div style=\"float: left\"><img border=\"0\" width=\"16\" height=\"16\" alt=\"$alt\" title=\"$title\" src=\"$img\">$msg</div>");
|
||||||
|
} else {
|
||||||
|
print("<div class=\"rem-moon\"><img border=\"0\" width=\"16\" height=\"16\" alt=\"$alt\" title=\"$title\" src=\"$img\">$msg</div>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Options{'nostyle'}) {
|
||||||
|
print "<div style=\"float: right\">$day</div></p>\n";
|
||||||
|
print "<p> </p>\n";
|
||||||
|
} else {
|
||||||
|
print "<div class=\"rem-daynumber\">$day</div></p>\n";
|
||||||
|
print "<p class=\"rem-entry\"> </p>\n";
|
||||||
|
}
|
||||||
|
if ($days->[$day]) {
|
||||||
|
print(join("\n", @{$days->[$day]}));
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</td>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub escape_html
|
||||||
|
{
|
||||||
my($in) = @_;
|
my($in) = @_;
|
||||||
$in =~ s/\&/\&/g;
|
$in =~ s/\&/\&/g;
|
||||||
$in =~ s/\</\</g;
|
$in =~ s/\</\</g;
|
||||||
@@ -104,313 +535,35 @@ sub escape_html {
|
|||||||
return $in;
|
return $in;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub parse_options {
|
parse_options();
|
||||||
%Options = ();
|
if ($Options{'help'}) {
|
||||||
|
usage(0);
|
||||||
GetOptions (\%Options, "help|h",
|
exit(0);
|
||||||
"version",
|
} elsif ($Options{'man'}) {
|
||||||
"border|b=i",
|
system("perldoc $0");
|
||||||
"cellspace|t=i",
|
exit(0);
|
||||||
"backurl|bu:s", "forwurl|fu:s",
|
} elsif ($Options{'version'}) {
|
||||||
"tableonly|to",
|
print "rem2html version $rem2html_version.\n";
|
||||||
"prologue|p=s",
|
exit(0);
|
||||||
"append|a=s",
|
|
||||||
"bgcolor|g=s",
|
|
||||||
"fs=s", "fh=s", "ft=s", "fe=s", "fd=s",
|
|
||||||
"sh=i", "st=i", "se=i", "sd=i",
|
|
||||||
);
|
|
||||||
|
|
||||||
$Options{'border'} = "BORDER=" . ($Options{'border'} || 1);
|
|
||||||
$Options{'cellspace'} &&= "CELLSPACING=$Options{'cellspace'}";
|
|
||||||
$Options{'bgcolor'} &&= "BGCOLOR=$Options{'bgcolor'}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub parse_input {
|
if (-t STDIN) {
|
||||||
local $where = 0;
|
print STDERR "$TIDY_PROGNAME: Input should not come from a terminal.\n\n";
|
||||||
local $msg;
|
usage(1);
|
||||||
local $type;
|
|
||||||
local $day;
|
|
||||||
@days = ();
|
|
||||||
@shades = ();
|
|
||||||
@moons = ();
|
|
||||||
while (<>) {
|
|
||||||
chomp($_);
|
|
||||||
if (/rem2(html|ps) begin/) {
|
|
||||||
} elsif (!$where) {
|
|
||||||
next;
|
|
||||||
} elsif ($where == 1) {
|
|
||||||
local ($month, $year);
|
|
||||||
($month, $year, $month_length, $firstday, $mfirst) = split(" ");
|
|
||||||
$caption = "$month, $year";
|
|
||||||
for $i ( 1 .. $month_length) { push(@days, ""); }
|
|
||||||
} elsif ($where == 2) {
|
|
||||||
@DayNames = split(" ");
|
|
||||||
} elsif ($where == 3) {
|
|
||||||
@prevsc = split(" ");
|
|
||||||
} elsif ($where == 4) {
|
|
||||||
@nextsc = split(" ");
|
|
||||||
} else {
|
|
||||||
return 1 if /rem2(html|ps) end/;
|
|
||||||
next if /^\#/;
|
|
||||||
next unless m/^(\d*).(\d*).(\d*)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/;
|
|
||||||
$type = $4;
|
|
||||||
$msg = $8;
|
|
||||||
$day = $3;
|
|
||||||
if ($type eq "HTML") {
|
|
||||||
$days[$day] .= "$msg ";
|
|
||||||
} elsif ($type eq "MOON") {
|
|
||||||
my($phase, $text);
|
|
||||||
if ($msg =~ /^\s*(\d+)\s+\S+\s+\S+\s+(.*)$/) {
|
|
||||||
$phase = $1;
|
|
||||||
$text = $2;
|
|
||||||
} elsif ($msg =~ /^\s*(\d+)/) {
|
|
||||||
$phase = $1;
|
|
||||||
$text = "";
|
|
||||||
} else {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
next if ($phase > 3);
|
|
||||||
if ($phase == 0) {
|
|
||||||
$text = "<IMAGE SRC=\"$DefaultImageDir/newmoon.png\" ALT=\"New Moon\"" .
|
|
||||||
"WIDTH=16 HEIGHT=16> <FONT SIZE=\"-2\">" . escape_html($text);
|
|
||||||
} elsif ($phase == 1) {
|
|
||||||
$text = "<IMAGE SRC=\"$DefaultImageDir/firstquarter.png\" ALT=\"First Quarter\"" .
|
|
||||||
"WIDTH=16 HEIGHT=16> <FONT SIZE=\"-2\">" . escape_html($text);
|
|
||||||
} elsif ($phase == 2) {
|
|
||||||
$text = "<IMAGE SRC=\"$DefaultImageDir/fullmoon.png\" ALT=\"Full Moon\"" .
|
|
||||||
"WIDTH=16 HEIGHT=16> <FONT SIZE=\"-2\">" . escape_html($text);
|
|
||||||
} else {
|
|
||||||
$text = "<IMAGE SRC=\"$DefaultImageDir/lastquarter.png\" ALT=\"Last Quarter\"" .
|
|
||||||
"WIDTH=16 HEIGHT=16> <FONT SIZE=\"-2\">" . escape_html($text);
|
|
||||||
}
|
|
||||||
$moons[$day] = $text . "</FONT> ";
|
|
||||||
} elsif ($type eq "SHADE") {
|
|
||||||
my($red, $green, $blue);
|
|
||||||
if ($msg =~ /^\s*(\d+)\s+(\d+)\s+(\d+)\s*$/) {
|
|
||||||
$red = $1;
|
|
||||||
$green = $2;
|
|
||||||
$blue = $3;
|
|
||||||
} elsif ($msg =~ /^\s*(\d+)\s*$/) {
|
|
||||||
$red = $1;
|
|
||||||
$green = $1;
|
|
||||||
$blue = $1;
|
|
||||||
} else {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
next if ($red > 255 || $green > 255 || $blue > 255);
|
|
||||||
$shades[$day] = sprintf(" BGCOLOR=\"#%02X%02X%02X\"",
|
|
||||||
$red, $green, $blue);
|
|
||||||
} elsif ($type eq "COLOR") {
|
|
||||||
my($red, $green, $blue, $stuff);
|
|
||||||
if ($msg =~ /^\s*(\d+)\s+(\d+)\s+(\d+)\s*(.*)$/) {
|
|
||||||
$red = $1;
|
|
||||||
$green = $2;
|
|
||||||
$blue = $3;
|
|
||||||
$stuff = $4;
|
|
||||||
next if ($red > 255 || $green > 255 || $blue > 255);
|
|
||||||
$days[$day] .=
|
|
||||||
sprintf("<P><font color=\"#%02x%02x%02x\">",
|
|
||||||
$red, $green, $blue) .
|
|
||||||
escape_html($stuff) . "</font></P>";
|
|
||||||
} else {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
} elsif ($type eq "*") {
|
|
||||||
$msg = &escape_html($msg);
|
|
||||||
$days[$day] .= "<P>$msg</P>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$where++;
|
|
||||||
}
|
|
||||||
if ($where) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub output_header {
|
my $found_something = 0;
|
||||||
local ($title, $dayheader);
|
while(1) {
|
||||||
|
last if (!parse_input());
|
||||||
if (!$Options{'tableonly'}) {
|
start_output() unless $found_something;
|
||||||
print <<EndOfHTML;
|
$found_something = 1;
|
||||||
<HTML>
|
output_calendar();
|
||||||
<HEAD><TITLE>Reminders for $caption</TITLE></HEAD>
|
}
|
||||||
<BODY>
|
if ($found_something) {
|
||||||
EndOfHTML
|
end_output();
|
||||||
}
|
exit(1);
|
||||||
|
} else {
|
||||||
print <<EndOfHTML;
|
print STDERR "$TIDY_PROGNAME: Could not find any calendar data on STDIN.\n";
|
||||||
<!-- This output was produced by Rem2HTML $rem2html_version (written by
|
exit(1);
|
||||||
Don Schwarz <darkowl\@mcs.net>) and Remind (written by David F. Skoll). -->
|
|
||||||
EndOfHTML
|
|
||||||
|
|
||||||
if ($Options{'prologue'}) {
|
|
||||||
open(PROLOGUE, "< $Options{'prologue'}");
|
|
||||||
print while ( <PROLOGUE> );
|
|
||||||
close(PROLOGUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
$caption = &format_font($caption, $Options{'ft'}, $Options{'st'} || "+1");
|
|
||||||
|
|
||||||
print <<EndOfHTML;
|
|
||||||
<TABLE $Options{'border'} $Options{'cellspace'} $Options{'bgcolor'} WIDTH=100%>
|
|
||||||
<CAPTION><STRONG>$caption</STRONG></CAPTION>
|
|
||||||
<TR>
|
|
||||||
EndOfHTML
|
|
||||||
|
|
||||||
$mfirst || &print_day_header($DayNames[0]);
|
|
||||||
|
|
||||||
for($i=1; $i<7; $i++) {
|
|
||||||
&print_day_header($DayNames[$i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$mfirst && &print_day_header($DayNames[0]);
|
|
||||||
print " </TR>\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub output_footer {
|
|
||||||
print "</TABLE>\n";
|
|
||||||
|
|
||||||
if ($Options{'append'}) {
|
|
||||||
open(EPILOGUE, "< $Options{'append'}");
|
|
||||||
print while ( <EPILOGUE> );
|
|
||||||
close(EPILOGUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
unless ($Options{'tableonly'}) {
|
|
||||||
print <<EndOfHTML;
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
EndOfHTML
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub output_data {
|
|
||||||
local ($endday, $prevday, $nextday, $week, $weekday);
|
|
||||||
local ($element, $day, $msg, $fday);
|
|
||||||
$firstday -= $mfirst;
|
|
||||||
if ($firstday < 0) { $firstday += 7; }
|
|
||||||
$endday = $firstday + $month_length;
|
|
||||||
$endweek = $endday + (6 - ($endday % 7));
|
|
||||||
$endday %= 7;
|
|
||||||
|
|
||||||
if ( $firstday > 1 ) {
|
|
||||||
$prevday = 0;
|
|
||||||
$nextday = 1;
|
|
||||||
} elsif ($endday ? ($endday < 5) : !$firstday) {
|
|
||||||
$prevday = $endweek - 1;
|
|
||||||
$nextday = $endweek;
|
|
||||||
} else {
|
|
||||||
$prevday = 0;
|
|
||||||
$nextday = $endweek;
|
|
||||||
}
|
|
||||||
|
|
||||||
for $week ( 0..5 ) {
|
|
||||||
print " <TR>\n";
|
|
||||||
for $weekday ( 0..6 ) {
|
|
||||||
$element = ($week * 7) + ($weekday * 1);
|
|
||||||
$day = $element - $firstday + 1;
|
|
||||||
$msg = $days[$day];
|
|
||||||
$msg = $msg ? &format_font($msg, $Options{'fe'}, $Options{'se'})
|
|
||||||
: " <BR> <BR> <BR> <BR>";
|
|
||||||
|
|
||||||
$fday = &format_font($day, $Options{'fd'}, $Options{'sd'} || -1);
|
|
||||||
if ($day > 0 && $day <= $month_length) {
|
|
||||||
|
|
||||||
print <<EndOfHTML;
|
|
||||||
<TD HEIGHT="120" VALIGN=TOP WIDTH=14%$shades[$day]>
|
|
||||||
<P ALIGN=RIGHT>$moons[$day]$fday</P>
|
|
||||||
$msg
|
|
||||||
</TD>
|
|
||||||
EndOfHTML
|
|
||||||
|
|
||||||
} elsif ($element == $prevday) {
|
|
||||||
&small_calendar(@prevsc, 1, $Options{'backurl'});
|
|
||||||
} elsif ($element == $nextday) {
|
|
||||||
&small_calendar(@nextsc, 2, $Options{'forwurl'});
|
|
||||||
} else {
|
|
||||||
print " <TD WIDTH=14%><BR></TD>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print " </TR>\n";
|
|
||||||
last if $day >= $month_length && $element >= $nextday;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub small_calendar {
|
|
||||||
local ($scname, $scn, $which, $url) = @_;
|
|
||||||
local ($scstart, $l, $week, $weekday, $tday);
|
|
||||||
|
|
||||||
$scname = "<A HREF=\"$url\">$scname</A>", if $url;
|
|
||||||
$scname = &format_font($scname, $Options{'fs'}, -2);
|
|
||||||
|
|
||||||
if ($which == 1) {
|
|
||||||
$scstart = $firstday - ($scn % 7);
|
|
||||||
if ($scstart < 0) { $scstart += 7; }
|
|
||||||
} else {
|
|
||||||
$scstart = $firstday + ($month_length % 7);
|
|
||||||
if ($scstart > 6) { $scstart -= 7; }
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EndOfHTML;
|
|
||||||
<TD WIDTH=14% VALIGN=TOP>
|
|
||||||
<TABLE WIDTH=100%>
|
|
||||||
<CAPTION><STRONG>$scname</STRONG></CAPTION>
|
|
||||||
<TR>
|
|
||||||
EndOfHTML
|
|
||||||
|
|
||||||
$mfirst || &print_day_header(substr($DayNames[0], 0, 1), 1);
|
|
||||||
|
|
||||||
for ($i=1; $i<7; $i++) {
|
|
||||||
&print_day_header(substr($DayNames[$i], 0, 1), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$mfirst && &print_day_header(substr($DayNames[0], 0, 1), 1);
|
|
||||||
|
|
||||||
print "</TR>\n";
|
|
||||||
|
|
||||||
for $week ( 0..5 ) {
|
|
||||||
print " <TR>\n";
|
|
||||||
for $weekday ( 0..6 ) {
|
|
||||||
$tday = ($week * 7) + ($weekday * 1) - $scstart + 1;
|
|
||||||
$tday = "", if $tday <= 0 || $tday > $scn;
|
|
||||||
print " <TD WIDTH=14%><FONT SIZE=-2>$tday</FONT></TD>\n";
|
|
||||||
}
|
|
||||||
print " </TR>\n";
|
|
||||||
last if $tday >= $scn;
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EndOfHTML;
|
|
||||||
</TABLE>
|
|
||||||
</TD>
|
|
||||||
EndOfHTML
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
sub format_font {
|
|
||||||
local ($text, $font, $size) = @_;
|
|
||||||
|
|
||||||
if (!$text) {
|
|
||||||
return "";
|
|
||||||
} elsif ($font && $size) {
|
|
||||||
return "<FONT FACE=$font SIZE=$size>$text</FONT>";
|
|
||||||
} elsif ($font) {
|
|
||||||
return "<FONT FACE=$font>$text</FONT>";
|
|
||||||
} elsif ($size) {
|
|
||||||
return "<FONT SIZE=$size>$text</FONT>";
|
|
||||||
} else {
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub print_day_header {
|
|
||||||
local ($dheader, $small) = @_;
|
|
||||||
|
|
||||||
if ($small) {
|
|
||||||
$dheader = &format_font($dheader, $Options{'fs'}, -2);
|
|
||||||
} else {
|
|
||||||
$dheader = &format_font($dheader, $Options{'fh'}, $Options{'sh'});
|
|
||||||
}
|
|
||||||
|
|
||||||
print " <TH WIDTH=14%>$dheader</TH>\n";
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ set now now()
|
|||||||
|
|
||||||
banner %
|
banner %
|
||||||
MSG <HEAD>%
|
MSG <HEAD>%
|
||||||
MSG <TITLE>Sunrise in Ottawa</TITLE>%
|
MSG <TITLE>Sunrise in [$Location]</TITLE>%
|
||||||
MSG </HEAD>%
|
MSG </HEAD>%
|
||||||
|
|
||||||
MSG <BODY>
|
MSG <BODY>
|
||||||
MSG <H1>Sunrise in Ottawa</H1>
|
MSG <H1>Sunrise in [$Location]</H1>
|
||||||
|
|
||||||
set tod sunrise(today())
|
set tod sunrise(today())
|
||||||
set tom sunrise(today()+1)
|
set tom sunrise(today()+1)
|
||||||
@@ -34,7 +34,7 @@ set fn iif(diff==0, "now", diff <0, "ago", "from now")
|
|||||||
set iw iif(diff<0, "was", "is")
|
set iw iif(diff<0, "was", "is")
|
||||||
set aw iif(tod==tom, " as well.", ".")
|
set aw iif(tod==tom, " as well.", ".")
|
||||||
msg Today is %w, %d %m, %y.<P>
|
msg Today is %w, %d %m, %y.<P>
|
||||||
msg The local time in Ottawa is [now].<P>
|
msg The local time in [$Location] is [now].<P>
|
||||||
msg Sunrise today [iw] at [tod]; in other words, [hstr][astr][mstr] [fn].<P>
|
msg Sunrise today [iw] at [tod]; in other words, [hstr][astr][mstr] [fn].<P>
|
||||||
msg Sunrise tomorrow is at [tom][aw]<P>
|
msg Sunrise tomorrow is at [tom][aw]<P>
|
||||||
msg The daylight portion of tomorrow will be [slen] today.<P>
|
msg The daylight portion of tomorrow will be [slen] today.<P>
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ set now now()
|
|||||||
banner %
|
banner %
|
||||||
|
|
||||||
MSG <HEAD>%
|
MSG <HEAD>%
|
||||||
MSG <TITLE>Sunset in Ottawa</TITLE>%
|
MSG <TITLE>Sunset in [$Location]</TITLE>%
|
||||||
MSG </HEAD>%
|
MSG </HEAD>%
|
||||||
|
|
||||||
MSG <BODY>
|
MSG <BODY>
|
||||||
MSG <H1>Sunset in Ottawa</H1>
|
MSG <H1>Sunset in [$Location]</H1>
|
||||||
|
|
||||||
set tod sunset(today())
|
set tod sunset(today())
|
||||||
set tom sunset(today()+1)
|
set tom sunset(today()+1)
|
||||||
@@ -35,7 +35,7 @@ set fn iif(diff==0, "now", diff <0, "ago", "from now")
|
|||||||
set iw iif(diff<0, "was", "is")
|
set iw iif(diff<0, "was", "is")
|
||||||
set aw iif(tod==tom, " as well.", ".")
|
set aw iif(tod==tom, " as well.", ".")
|
||||||
msg Today is %w, %d %m, %y.<P>
|
msg Today is %w, %d %m, %y.<P>
|
||||||
msg The local time in Ottawa is [now].<P>
|
msg The local time in [$Location] is [now].<P>
|
||||||
msg Sunset today [iw] at [tod]; in other words, [hstr][astr][mstr] [fn].<P>
|
msg Sunset today [iw] at [tod]; in other words, [hstr][astr][mstr] [fn].<P>
|
||||||
msg Sunset tomorrow is at [tom][aw]<P>
|
msg Sunset tomorrow is at [tom][aw]<P>
|
||||||
msg The daylight portion of tomorrow will be [slen] today.<P>
|
msg The daylight portion of tomorrow will be [slen] today.<P>
|
||||||
|
|||||||
Reference in New Issue
Block a user