mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 14:59:20 +02:00
Compare commits
110 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d6ca51bf9 | ||
|
|
e662d0b3dd | ||
|
|
b910d557d1 | ||
|
|
a4ad0a9e97 | ||
|
|
07f67e7dd7 | ||
|
|
d6575773fb | ||
|
|
ac1303886e | ||
|
|
1569992184 | ||
|
|
55a1f1d746 | ||
|
|
ef7742a3cc | ||
|
|
ef48c2020b | ||
|
|
6dcb25073b | ||
|
|
4824b07ec8 | ||
|
|
a8f1228fb7 | ||
|
|
80e51d1d0f | ||
|
|
80e30638a5 | ||
|
|
dd2fc30364 | ||
|
|
a5865fb5fe | ||
|
|
aca2f28341 | ||
|
|
7a3f5f7ac9 | ||
|
|
1731710ef2 | ||
|
|
dc2a8f48bf | ||
|
|
5e16179bfa | ||
|
|
a7c1bc81b2 | ||
|
|
5f5ec8ef19 | ||
|
|
712ff56792 | ||
|
|
99af1f964c | ||
|
|
de5d1347e5 | ||
|
|
5e07fbde6d | ||
|
|
c523c7f3b3 | ||
|
|
6b3c6b0ec7 | ||
|
|
62b94ab065 | ||
|
|
49c7399599 | ||
|
|
5fa9297aba | ||
|
|
4ada31798b | ||
|
|
e78f953e90 | ||
|
|
af7a9ad8b5 | ||
|
|
35eae045a6 | ||
|
|
98a20ae058 | ||
|
|
df9ef6e13a | ||
|
|
10f5802069 | ||
|
|
780044219f | ||
|
|
d015c061e7 | ||
|
|
6f6326d433 | ||
|
|
9488e7ca13 | ||
|
|
71c11672c2 | ||
|
|
0acefa800e | ||
|
|
d45cee4712 | ||
|
|
c026aa05e2 | ||
|
|
50076c74fa | ||
|
|
1563d77c06 | ||
|
|
ed72ef8629 | ||
|
|
06c5996086 | ||
|
|
570ca857a0 | ||
|
|
f8f20b7afc | ||
|
|
f55ef7ff20 | ||
|
|
79220a74cf | ||
|
|
77111ef628 | ||
|
|
bf96063311 | ||
|
|
58a201fceb | ||
|
|
47cecb210b | ||
|
|
bfbf744b0a | ||
|
|
0cf56ac1de | ||
|
|
2880a718f4 | ||
|
|
da0dd0f7c6 | ||
|
|
c456d3e0ff | ||
|
|
59059736e6 | ||
|
|
f5cf2ab832 | ||
|
|
cc4ff2582d | ||
|
|
90f5fde3bb | ||
|
|
9fbe9f5132 | ||
|
|
f05661fa6c | ||
|
|
d6882c3378 | ||
|
|
e32cab937e | ||
|
|
14bb939977 | ||
|
|
13e830782d | ||
|
|
f39bb5e2d9 | ||
|
|
8b795e81b7 | ||
|
|
aef7eeda5a | ||
|
|
0641a6f8f1 | ||
|
|
4fdf7b706b | ||
|
|
0653b9420a | ||
|
|
27ede1ce37 | ||
|
|
a303fb9cba | ||
|
|
92af4e9c3e | ||
|
|
abc4f45fed | ||
|
|
e651f92bd9 | ||
|
|
b2d3d98d72 | ||
|
|
cb8b7f85af | ||
|
|
d30f347a0b | ||
|
|
5e9b1e7464 | ||
|
|
58085470c5 | ||
|
|
8f0de805d5 | ||
|
|
3f879a1b97 | ||
|
|
94270c3d98 | ||
|
|
bb8a689186 | ||
|
|
a7e73cdac8 | ||
|
|
d38c324340 | ||
|
|
fade38d522 | ||
|
|
858a7601aa | ||
|
|
37e3d3d1d1 | ||
|
|
ff67ab3c86 | ||
|
|
ad7faa8ad9 | ||
|
|
c927166a8a | ||
|
|
9d22fba842 | ||
|
|
3d5adf6c42 | ||
|
|
5ba862cbd7 | ||
|
|
6f20e056c9 | ||
|
|
878ab1a8bc | ||
|
|
4d17494371 |
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
liberapay: dskoll
|
||||||
7
.github/README.md
vendored
Normal file
7
.github/README.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Remind has moved
|
||||||
|
|
||||||
|
For various reasons, I have decided to move Remind off GitHub. This repo
|
||||||
|
will be archived. To create merge requests or issues, please visit
|
||||||
|
Remind's new home at https://salsa.debian.org/dskoll/remind
|
||||||
|
|
||||||
|
-- Dianne Skoll
|
||||||
29
.github/workflows/github-action.yml
vendored
Normal file
29
.github/workflows/github-action.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# language: bash
|
||||||
|
---
|
||||||
|
|
||||||
|
name: Remind unit tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Remind
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Add test user
|
||||||
|
run: |
|
||||||
|
sudo adduser --home /home/testuser --gecos 'Test User' --disabled-password testuser
|
||||||
|
- name: Fix ownership
|
||||||
|
run: |
|
||||||
|
sudo chown -R testuser .
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
sudo su -c './configure && make' testuser
|
||||||
|
- name: Run Tests
|
||||||
|
run: |
|
||||||
|
sudo su -c 'make test' testuser
|
||||||
|
- name: Fix up permissions so GitHub does not complain
|
||||||
|
run: |
|
||||||
|
sudo chmod -R a+rwX .
|
||||||
21
.gitignore
vendored
21
.gitignore
vendored
@@ -1,27 +1,28 @@
|
|||||||
rem2pdf/Makefile.old
|
|
||||||
*.bak
|
*.bak
|
||||||
*.o
|
*.o
|
||||||
*~
|
*~
|
||||||
.gitignore
|
.gitignore
|
||||||
|
MYMETA.json
|
||||||
|
MYMETA.yml
|
||||||
|
Makefile
|
||||||
TAGS
|
TAGS
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
|
blib/
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
|
pm_to_blib
|
||||||
rem2html/Makefile
|
rem2html/Makefile
|
||||||
|
rem2html/rem2html.1
|
||||||
|
rem2pdf/Makefile.PL
|
||||||
|
rem2pdf/Makefile.old
|
||||||
|
rem2pdf/Makefile.top
|
||||||
|
rem2pdf/bin/rem2pdf
|
||||||
src/*.tar.gz*
|
src/*.tar.gz*
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/config.h
|
src/config.h
|
||||||
src/rem2ps
|
src/rem2ps
|
||||||
src/remind
|
src/remind
|
||||||
|
src/test-*.out
|
||||||
src/version.h
|
src/version.h
|
||||||
tests/test.out
|
tests/test.out
|
||||||
www/Makefile
|
www/Makefile
|
||||||
rem2pdf/Makefile.PL
|
|
||||||
MYMETA.json
|
|
||||||
MYMETA.yml
|
|
||||||
Makefile
|
|
||||||
blib/
|
|
||||||
pm_to_blib
|
|
||||||
rem2pdf/Makefile.top
|
|
||||||
rem2pdf/bin/rem2pdf
|
|
||||||
rem2html/rem2html.1
|
|
||||||
|
|||||||
@@ -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 1992-2021 Dianne Skoll, except where noted in
|
2. REMIND is Copyright 1992-2022 Dianne Skoll, except where noted in
|
||||||
individual files.
|
individual files.
|
||||||
|
|
||||||
3. DISTRIBUTION AND USE
|
3. DISTRIBUTION AND USE
|
||||||
|
|||||||
2
build.tk
2
build.tk
@@ -355,7 +355,7 @@ proc RunCommand { cmd } {
|
|||||||
# %RETURNS:
|
# %RETURNS:
|
||||||
# Nothing
|
# Nothing
|
||||||
# %DESCRIPTION:
|
# %DESCRIPTION:
|
||||||
# Reads characters from command pipelin and appends them to .msg.
|
# Reads characters from command pipeline and appends them to .msg.
|
||||||
#***********************************************************************
|
#***********************************************************************
|
||||||
proc CommandReadable { f } {
|
proc CommandReadable { f } {
|
||||||
global CmdDone
|
global CmdDone
|
||||||
|
|||||||
16
configure
vendored
16
configure
vendored
@@ -3306,7 +3306,6 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5
|
||||||
$as_echo_n "checking for sqrt in -lm... " >&6; }
|
$as_echo_n "checking for sqrt in -lm... " >&6; }
|
||||||
if ${ac_cv_lib_m_sqrt+:} false; then :
|
if ${ac_cv_lib_m_sqrt+:} false; then :
|
||||||
@@ -3974,6 +3973,19 @@ fi
|
|||||||
|
|
||||||
if test "$GCC" = yes; then
|
if test "$GCC" = yes; then
|
||||||
CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes"
|
CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes"
|
||||||
|
# Check for link-time optimization support
|
||||||
|
for f in -flto=auto -ffat-lto-objects; do
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $f" >&5
|
||||||
|
$as_echo_n "checking whether $CC supports $f... " >&6; }
|
||||||
|
if $CC -E $f /dev/null > /dev/null 2>&1 ; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
|
$as_echo "yes" >&6; }
|
||||||
|
CFLAGS="$CFLAGS $f"
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$ac_cv_perlartifacts" = "yes" ; then
|
if test "$ac_cv_perlartifacts" = "yes" ; then
|
||||||
@@ -3994,7 +4006,7 @@ _ACEOF
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
VERSION=03.04.02
|
VERSION=04.00.02
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
14
configure.in
14
configure.in
@@ -28,8 +28,6 @@ AC_PROG_MAKE_SET
|
|||||||
AC_PATH_PROG([PERL], [perl])
|
AC_PATH_PROG([PERL], [perl])
|
||||||
|
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
dnl Replace `main' with a function in -lm:
|
|
||||||
|
|
||||||
AC_CHECK_LIB(m, sqrt)
|
AC_CHECK_LIB(m, sqrt)
|
||||||
|
|
||||||
dnl Integer sizes
|
dnl Integer sizes
|
||||||
@@ -48,6 +46,16 @@ AC_HEADER_TIME
|
|||||||
|
|
||||||
if test "$GCC" = yes; then
|
if test "$GCC" = yes; then
|
||||||
CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes"
|
CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes"
|
||||||
|
# Check for link-time optimization support
|
||||||
|
for f in -flto=auto -ffat-lto-objects; do
|
||||||
|
AC_MSG_CHECKING([whether $CC supports $f])
|
||||||
|
if $CC -E $f /dev/null > /dev/null 2>&1 ; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
CFLAGS="$CFLAGS $f"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$ac_cv_perlartifacts" = "yes" ; then
|
if test "$ac_cv_perlartifacts" = "yes" ; then
|
||||||
@@ -57,7 +65,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale initgroups)
|
AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale initgroups)
|
||||||
VERSION=03.04.02
|
VERSION=04.00.02
|
||||||
AC_SUBST(VERSION)
|
AC_SUBST(VERSION)
|
||||||
AC_SUBST(PERL)
|
AC_SUBST(PERL)
|
||||||
AC_SUBST(PERLARTIFACTS)
|
AC_SUBST(PERLARTIFACTS)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
# version 0.5 2007-03-21
|
# version 0.5 2007-03-21
|
||||||
# - Add more help options
|
# - Add more help options
|
||||||
# - --project-lead-time option
|
# - --project-lead-time option
|
||||||
# - Supress printing of heading if there are no todos to print
|
# - Suppress printing of heading if there are no todos to print
|
||||||
# version 0.4
|
# version 0.4
|
||||||
# - Version 0.4 changes all written or inspired by, and thanks to Mark Stosberg
|
# - Version 0.4 changes all written or inspired by, and thanks to Mark Stosberg
|
||||||
# - Change to GetOptions
|
# - Change to GetOptions
|
||||||
@@ -84,7 +84,7 @@ How may days in advance to start getting reminders about the events. Defaults to
|
|||||||
|
|
||||||
ical2rem.pl --no-todos
|
ical2rem.pl --no-todos
|
||||||
|
|
||||||
If you don't care about the ToDos the calendar, this will surpress
|
If you don't care about the ToDos the calendar, this will suppress
|
||||||
printing of the ToDo heading, as well as skipping ToDo processing.
|
printing of the ToDo heading, as well as skipping ToDo processing.
|
||||||
|
|
||||||
=head2 --heading
|
=head2 --heading
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ appear with exactly the text and exactly the same duration (including
|
|||||||
one VEVENT object, that will have a RFC2445 C<RDATE> property.
|
one VEVENT object, that will have a RFC2445 C<RDATE> property.
|
||||||
|
|
||||||
B<rem2ics> is not yet smart enough to derive an C<RRULE> based
|
B<rem2ics> is not yet smart enough to derive an C<RRULE> based
|
||||||
recurrance. If you really want that feature, either implement it and
|
recurrence. If you really want that feature, either implement it and
|
||||||
send in a patch, or contact the author and convince him to do it.
|
send in a patch, or contact the author and convince him to do it.
|
||||||
|
|
||||||
=head2 Other iCalendar Properties
|
=head2 Other iCalendar Properties
|
||||||
@@ -164,7 +164,7 @@ runs.
|
|||||||
|
|
||||||
=head2 Other iCalendar Perl objects
|
=head2 Other iCalendar Perl objects
|
||||||
|
|
||||||
Why does't B<rem2ics> use any of the iCalendar Perl stuff in CPAN?
|
Why doesn't B<rem2ics> use any of the iCalendar Perl stuff in CPAN?
|
||||||
Because I don't trust them, and they are too big for this app. One
|
Because I don't trust them, and they are too big for this app. One
|
||||||
links to a binary library. Another hasn't been maintained since 1991,
|
links to a binary library. Another hasn't been maintained since 1991,
|
||||||
and is full of notes as to how buggy and incomplete it is. And so
|
and is full of notes as to how buggy and incomplete it is. And so
|
||||||
@@ -218,7 +218,7 @@ Bug fix, error message for non-recurring events
|
|||||||
Bug fix,
|
Bug fix,
|
||||||
rem2ics 0.91 chokes on timed reminders with
|
rem2ics 0.91 chokes on timed reminders with
|
||||||
duration using `remind -s` as it functions in remind-03.01.03.
|
duration using `remind -s` as it functions in remind-03.01.03.
|
||||||
Remind 3.01 changed how the -s data is formated for events that have a duration
|
Remind 3.01 changed how the -s data is formatted for events that have a duration
|
||||||
Patch by Paul Hinze E<lt>paul dot t dot hinze at gmail dot comE<gt>
|
Patch by Paul Hinze E<lt>paul dot t dot hinze at gmail dot comE<gt>
|
||||||
and Michael Schultz E<lt>mjschultz at gmail dot comE<gt>
|
and Michael Schultz E<lt>mjschultz at gmail dot comE<gt>
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ foreach $v (@events) {
|
|||||||
|
|
||||||
my(%grovel);
|
my(%grovel);
|
||||||
|
|
||||||
# if the user doesnt want recurrance detection
|
# if the user doesn't want recurrence detection
|
||||||
unless ($options{norecurr}) {
|
unless ($options{norecurr}) {
|
||||||
|
|
||||||
# then dont put events in the grovel hash
|
# then dont put events in the grovel hash
|
||||||
@@ -393,7 +393,7 @@ unless ($options{norecurr}) {
|
|||||||
$v = ${$grovel{$k}}[0];
|
$v = ${$grovel{$k}}[0];
|
||||||
$v->{recurlist} = \@{$grovel{$k}};
|
$v->{recurlist} = \@{$grovel{$k}};
|
||||||
foreach my $v0 (@{$grovel{$k}}) {
|
foreach my $v0 (@{$grovel{$k}}) {
|
||||||
$v0->{is_recurrance} = $v;
|
$v0->{is_recurrence} = $v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -409,12 +409,12 @@ unless ($options{norecurr}) {
|
|||||||
# might have a problem if a recurring event has two instances both on
|
# might have a problem if a recurring event has two instances both on
|
||||||
# the first day.
|
# the first day.
|
||||||
|
|
||||||
# Every event that is recurring has a "is_recurrance" property.
|
# Every event that is recurring has a "is_recurrence" property.
|
||||||
# Additionally, (hopefully) the first/earliest event in a set of
|
# Additionally, (hopefully) the first/earliest event in a set of
|
||||||
# recurrances has a "recurlist" property. The "recurlist" is a
|
# recurrences has a "recurlist" property. The "recurlist" is a
|
||||||
# reference to a list of references to each of the events. The first
|
# reference to a list of references to each of the events. The first
|
||||||
# one on that list will be the same event that has the "recurlist"
|
# one on that list will be the same event that has the "recurlist"
|
||||||
# property. The "is_recurrance" property is a reference back to the
|
# property. The "is_recurrence" property is a reference back to the
|
||||||
# event that has the "recurlist" property.
|
# event that has the "recurlist" property.
|
||||||
|
|
||||||
foreach my $k (keys %grovel) {
|
foreach my $k (keys %grovel) {
|
||||||
@@ -466,8 +466,8 @@ foreach my $k (keys %grovel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach $v (@events) {
|
foreach $v (@events) {
|
||||||
# for recurrant events, skip those that arnt the "head"
|
# for recurrent events, skip those that arnt the "head"
|
||||||
next if ($v->{is_recurrance} and (not $v->{recurlist}));
|
next if ($v->{is_recurrence} and (not $v->{recurlist}));
|
||||||
|
|
||||||
if (${$v->{sf}}[4] eq "*") { # no time was given
|
if (${$v->{sf}}[4] eq "*") { # no time was given
|
||||||
$v->{i_dtstart} = sprintf("DTSTART:%s", $v->{dts});
|
$v->{i_dtstart} = sprintf("DTSTART:%s", $v->{dts});
|
||||||
@@ -485,7 +485,7 @@ foreach $v (@events) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (${$v->{sf}}[3] ne "*") { # a duration was given
|
if (${$v->{sf}}[3] ne "*") { # a duration was given
|
||||||
# It's convienient that RFC2445 defines DURATION, thus we
|
# It's convenient that RFC2445 defines DURATION, thus we
|
||||||
# don't need to calculate DTEND, with awkward figuring out
|
# don't need to calculate DTEND, with awkward figuring out
|
||||||
# crossing hours, days, months, year, etc. Instead we
|
# crossing hours, days, months, year, etc. Instead we
|
||||||
# will let the iCalendar consuming application worry about it.
|
# will let the iCalendar consuming application worry about it.
|
||||||
@@ -501,8 +501,8 @@ print "BEGIN:VCALENDAR\015\012"
|
|||||||
|
|
||||||
# output each vevent
|
# output each vevent
|
||||||
foreach $v (@events) {
|
foreach $v (@events) {
|
||||||
# for recurrant events, only output the "head", skip the others
|
# for recurrent events, only output the "head", skip the others
|
||||||
next if ($v->{is_recurrance} and (not $v->{recurlist}));
|
next if ($v->{is_recurrence} and (not $v->{recurlist}));
|
||||||
|
|
||||||
print "BEGIN:VEVENT\015\012";
|
print "BEGIN:VEVENT\015\012";
|
||||||
my $tag = ${$v->{sf}}[2];
|
my $tag = ${$v->{sf}}[2];
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;; Author: Shelagh Manton <shelagh.manton@gmail.com> with help from
|
;; Author: Shelagh Manton <shelagh.manton@gmail.com> with help from
|
||||||
;; Dianne Skoll
|
;; Dianne Skoll
|
||||||
;; Keywords: remind configure convenience
|
;; Keywords: remind configure convenience
|
||||||
;; Version: 0.15
|
;; Version: 0.15-dfs2
|
||||||
|
|
||||||
;; This program is free software; you can redistribute it and/or
|
;; This program is free software; you can redistribute it and/or
|
||||||
;; modify it under the terms of the GNU General Public License
|
;; modify it under the terms of the GNU General Public License
|
||||||
@@ -91,7 +91,6 @@
|
|||||||
(define-key remind-conf-mode-map "\C-c\C-x" 'rem-tomorrow)
|
(define-key remind-conf-mode-map "\C-c\C-x" 'rem-tomorrow)
|
||||||
(define-key remind-conf-mode-map "\C-c\C-a" 'rem-days-away)
|
(define-key remind-conf-mode-map "\C-c\C-a" 'rem-days-away)
|
||||||
(define-key remind-conf-mode-map "\M-j" 'remind-indent-line)
|
(define-key remind-conf-mode-map "\M-j" 'remind-indent-line)
|
||||||
(define-key remind-conf-mode-map (kbd "RET") 'remind-indent-line)
|
|
||||||
(define-key remind-conf-mode-map "\C-c\C-c" 'rem-save-file)
|
(define-key remind-conf-mode-map "\C-c\C-c" 'rem-save-file)
|
||||||
|
|
||||||
;; syntax-table
|
;; syntax-table
|
||||||
@@ -133,20 +132,20 @@
|
|||||||
|
|
||||||
(defconst remind-builtin-variables
|
(defconst remind-builtin-variables
|
||||||
(sort
|
(sort
|
||||||
(list "$April" "$August" "$CalcUTC" "$CalMode" "$Daemon" "$DateSep"
|
(list "$Ago" "$Am" "$And" "$April" "$At" "$August" "$CalcUTC" "$CalMode" "$Daemon" "$DateSep"
|
||||||
"$DateTimeSep" "$December" "$DefaultColor" "$DefaultPrio"
|
"$DateTimeSep" "$December" "$DefaultColor" "$DefaultPrio"
|
||||||
"$DefaultTDelta" "$DeltaOffset" "$DontFork" "$DontQueue"
|
"$DefaultTDelta" "$DeltaOffset" "$DontFork" "$DontQueue"
|
||||||
"$DontTrigAts" "$EndSent" "$EndSentIg" "$February" "$FirstIndent"
|
"$DontTrigAts" "$EndSent" "$EndSentIg" "$February" "$FirstIndent"
|
||||||
"$FoldYear" "$FormWidth" "$Friday" "$HushMode" "$IgnoreOnce"
|
"$FoldYear" "$FormWidth" "$Friday" "$Fromnow" "$Hour" "$Hplu" "$HushMode" "$IgnoreOnce"
|
||||||
"$InfDelta" "$IntMax" "$IntMin" "$January" "$July" "$June" "$LatDeg"
|
"$InfDelta" "$IntMax" "$IntMin" "$Is" "$January" "$July" "$June" "$LatDeg"
|
||||||
"$Latitude" "$LatMin" "$LatSec" "$Location" "$LongDeg" "$Longitude"
|
"$Latitude" "$LatMin" "$LatSec" "$Location" "$LongDeg" "$Longitude"
|
||||||
"$LongMin" "$LongSec" "$March" "$MaxSatIter" "$MaxStringLen" "$May"
|
"$LongMin" "$LongSec" "$March" "$MaxSatIter" "$MaxStringLen" "$May"
|
||||||
"$MinsFromUTC" "$Monday" "$NextMode" "$November" "$NumQueued"
|
"$MinsFromUTC" "$Minute" "$Monday" "$Mplu" "$NextMode" "$November" "$Now" "$NumQueued"
|
||||||
"$NumTrig" "$October" "$PrefixLineNo" "$PSCal" "$RunOff" "$Saturday"
|
"$NumTrig" "$October" "$On" "$Pm" "$PrefixLineNo" "$PSCal" "$RunOff" "$Saturday"
|
||||||
"$September" "$SimpleCal" "$SortByDate" "$SortByPrio" "$SortByTime"
|
"$September" "$SimpleCal" "$SortByDate" "$SortByPrio" "$SortByTime"
|
||||||
"$SubsIndent" "$Sunday" "$T" "$Td" "$Thursday" "$TimeSep" "$Tm"
|
"$SubsIndent" "$Sunday" "$SysInclude" "$T" "$Td" "$Thursday" "$TimeSep" "$Tm"
|
||||||
"$Tuesday" "$Tw" "$Ty" "$U" "$Ud" "$Um" "$UntimedFirst" "$Uw" "$Uy"
|
"$Today" "$Tomorrow" "$Tuesday" "$Tw" "$Ty" "$U" "$Ud" "$Um" "$UntimedFirst" "$Uw" "$Uy"
|
||||||
"$Wednesday")
|
"$Was" "$Wednesday")
|
||||||
#'(lambda (a b) (> (length a) (length b)))))
|
#'(lambda (a b) (> (length a) (length b)))))
|
||||||
|
|
||||||
|
|
||||||
@@ -168,7 +167,7 @@
|
|||||||
"hebday" "hebmon" "hebyear" "hour" "iif" "index" "isany" "isdst"
|
"hebday" "hebmon" "hebyear" "hour" "iif" "index" "isany" "isdst"
|
||||||
"isleap" "isomitted" "language" "lower" "max" "min" "minsfromutc"
|
"isleap" "isomitted" "language" "lower" "max" "min" "minsfromutc"
|
||||||
"minute" "mon" "monnum" "moondate" "moondatetime" "moonphase"
|
"minute" "mon" "monnum" "moondate" "moondatetime" "moonphase"
|
||||||
"moontime" "ndawn" "ndusk" "nonomitted" "now" "ord" "ostype" "plural"
|
"moontime" "ndawn" "ndusk" "nonomitted" "now" "ord" "ostype" "pad" "plural"
|
||||||
"psmoon" "psshade" "realcurrent" "realnow" "realtoday" "sgn" "shell"
|
"psmoon" "psshade" "realcurrent" "realnow" "realtoday" "sgn" "shell"
|
||||||
"shellescape" "slide" "strlen" "substr" "sunrise" "sunset" "time"
|
"shellescape" "slide" "strlen" "substr" "sunrise" "sunset" "time"
|
||||||
"timepart" "today" "trig" "trigback" "trigdate" "trigdatetime"
|
"timepart" "today" "trig" "trigback" "trigdate" "trigdatetime"
|
||||||
|
|||||||
@@ -1,5 +1,74 @@
|
|||||||
CHANGES TO REMIND
|
CHANGES TO REMIND
|
||||||
|
|
||||||
|
* VERSION 4.0 Patch 2 - 2022-08-02
|
||||||
|
|
||||||
|
- IMPROVEMENT: remind: Allow more forms of OMIT as per Ian D. Allen!'s request:
|
||||||
|
|
||||||
|
OMIT Month [THROUGH Month]
|
||||||
|
OMIT Day Month [THROUGH Day Month]
|
||||||
|
OMIT Day Month Year [THROUGH Day Month Year]
|
||||||
|
|
||||||
|
- BUG FIX: Make $T behave as documented, exactly like trigdate(). $T would
|
||||||
|
return '1989-12-31' rather than 0 if the trigger date was not valid.
|
||||||
|
|
||||||
|
- BUG FIX: TkRemind: Fix resizing bug for a calendar with 6 rows.
|
||||||
|
|
||||||
|
- DOCUMENTATION IMPROVEMENT: Improve TkRemind documentation; document use
|
||||||
|
of inotifywait if available.
|
||||||
|
|
||||||
|
* VERSION 4.0 Patch 1 - 2022-06-03
|
||||||
|
|
||||||
|
- IMPROVEMENT: Add $SuppressLRM system variable to suppress the UTF-8
|
||||||
|
Left-to-Right mark in "remind -c" output.
|
||||||
|
|
||||||
|
- DOCUMENTATION FIX: Document the "q" sub-option to the "-p" option.
|
||||||
|
|
||||||
|
* VERSION 4.0 Patch 0 - 2022-04-04
|
||||||
|
|
||||||
|
- MAJOR NEW FEATURE: remind: Remind output can effectively be
|
||||||
|
translated into other languages at run-time. A number of system
|
||||||
|
variables let you translate English words to another language, and a
|
||||||
|
mechanism for altering the substitution filter at run-time lets you
|
||||||
|
translate its output so the results are idiomatic. See the man page
|
||||||
|
sections "RUN-TIME SUPPORT FOR OTHER LANGUAGES", "RUN-TIME
|
||||||
|
MODIFICATION OF THE SUBSTITUTION FILTER" and "LANGUAGE PACKS".
|
||||||
|
|
||||||
|
- NEW FEATURE: remind: Add the pad() built-in function
|
||||||
|
|
||||||
|
- NEW FEATURE: tkremind: Day numbers can be displayed left-aligned,
|
||||||
|
centered or right-aligned.
|
||||||
|
|
||||||
|
- IMPROVEMENT: contrib/remind-conf-mode: The Emacs syntax-highlighter
|
||||||
|
has been updated with the latest system variables and functions
|
||||||
|
and has been made case-insensitive.
|
||||||
|
|
||||||
|
- IMPROVEMENT: remind, rem2ps: Use link-time optimization with gcc if
|
||||||
|
possible.
|
||||||
|
|
||||||
|
- IMPROVEMENT: remind: Print better diagnostics when errors occur inside
|
||||||
|
a user-defined function. We now show the stack trace to make it easier
|
||||||
|
to figure out where the error actually is.
|
||||||
|
|
||||||
|
- CHANGE: Add a "q" sub-option to the "-p", "-pp", and "-ppp" options.
|
||||||
|
This causes Remind *not* to remove the %"...%" marker sequence from
|
||||||
|
remind bodies.
|
||||||
|
|
||||||
|
- BUG FIX: rem2pdf: Make rem2pdf respect the --prefix ./configure flag.
|
||||||
|
Loosely based on patch by Jonathan Kamens.
|
||||||
|
|
||||||
|
- BUG FIX: tkremind: Fix the "-m" flag, which was broken in 03.04.00.
|
||||||
|
|
||||||
|
- BUG FIX: Fix the overflow-detection functions so they work with link-time
|
||||||
|
optimization. The previous versions would be optimized away.
|
||||||
|
|
||||||
|
- BUG FIX: Warn if the arguments to the "-@" option are out of range.
|
||||||
|
Problem noted by Ian! D. Allen.
|
||||||
|
|
||||||
|
- BUG FIX: Always interpret $Latitude and $Longitude input values in the
|
||||||
|
"C" locale. (We do accept localized input, but warn.)
|
||||||
|
|
||||||
|
- BUG FIX: Fix many spelling mistakes caught by Jens Schleusener
|
||||||
|
|
||||||
* VERSION 3.4 Patch 2 - 2022-03-14
|
* VERSION 3.4 Patch 2 - 2022-03-14
|
||||||
|
|
||||||
- NEW FEATURE: remind: Add syntactic sugar to simplify some common
|
- NEW FEATURE: remind: Add syntactic sugar to simplify some common
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ ENDIF
|
|||||||
###########################################################
|
###########################################################
|
||||||
SET Quote CHAR(34)
|
SET Quote CHAR(34)
|
||||||
|
|
||||||
# Handy constants/function for specifing week of month...
|
# Handy constants/function for specifying week of month...
|
||||||
SET Week_1 1
|
SET Week_1 1
|
||||||
SET Week_2 8
|
SET Week_2 8
|
||||||
SET Week_3 15
|
SET Week_3 15
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Remind
|
" Language: Remind
|
||||||
" Maintainer: Davide Alberani <da@erlug.linux.it>
|
" Maintainer: Davide Alberani <da@erlug.linux.it>
|
||||||
" Last Change: 02 Nov 2015 + 13 Mar 2021 by Dianne Skoll <dianne@skoll.ca>
|
" Last Change: 02 Nov 2015 + 13 Mar 2022 by Dianne Skoll <dianne@skoll.ca>
|
||||||
" Version: 0.7+dianne1
|
" Version: 0.7+dianne1
|
||||||
" URL: http://ismito.it/vim/syntax/remind.vim
|
" URL: http://ismito.it/vim/syntax/remind.vim
|
||||||
"
|
"
|
||||||
|
|||||||
29
include/holidays/ca.rem
Normal file
29
include/holidays/ca.rem
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Canadian holidays
|
||||||
|
|
||||||
|
OMIT 1 Jan MSG New Year's Day
|
||||||
|
|
||||||
|
# This varies by province
|
||||||
|
REM Third Monday in Feb SCANFROM -7 ADDOMIT MSG Family Day
|
||||||
|
|
||||||
|
# This varies by province
|
||||||
|
OMIT [easterdate($Uy) - 2] MSG Good Friday
|
||||||
|
|
||||||
|
# This varies by province
|
||||||
|
OMIT [easterdate($Uy) + 1] MSG Easter Monday
|
||||||
|
|
||||||
|
REM Mon 18 May SCANFROM -7 ADDOMIT MSG Victoria Day
|
||||||
|
OMIT 1 July MSG Canada Day
|
||||||
|
|
||||||
|
# This varies by province
|
||||||
|
REM First Monday in Aug SCANFROM -7 ADDOMIT MSG Civic Holiday
|
||||||
|
|
||||||
|
REM First Monday in Sep SCANFROM -7 ADDOMIT MSG Labour Day
|
||||||
|
|
||||||
|
REM Second Monday in Oct SCANFROM -7 ADDOMIT MSG Thanksgiving Day
|
||||||
|
|
||||||
|
REM 11 November MSG Remembrance Day
|
||||||
|
|
||||||
|
OMIT 25 Dec MSG Christmas
|
||||||
|
|
||||||
|
OMIT 26 Dec MSG Boxing Day
|
||||||
|
|
||||||
49
include/holidays/us.rem
Normal file
49
include/holidays/us.rem
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# US holidays
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# Copyright (C) 1992-2022 Dianne Skoll
|
||||||
|
|
||||||
|
REM [easterdate($Uy)-46] MSG %"Ash Wednesday%"
|
||||||
|
REM [easterdate($Uy)-7] MSG %"Palm Sunday%"
|
||||||
|
OMIT [easterdate($Uy)-2] MSG %"Good Friday%"
|
||||||
|
OMIT [easterdate($Uy)] MSG %"Easter%" Sunday
|
||||||
|
REM [easterdate($Uy)+39] MSG %"Ascension Day%"
|
||||||
|
REM [easterdate($Uy)+49] MSG %"Pentecost%"
|
||||||
|
|
||||||
|
# Some holidays are omitted, some are not. You may want to change
|
||||||
|
# which ones are omitted.
|
||||||
|
|
||||||
|
OMIT Jan 1 MSG %"New Year's Day%"
|
||||||
|
REM Third Monday in Jan MSG Martin Luther King - %"MLK Day%"
|
||||||
|
REM Feb 2 MSG %"Ground Hog Day%"
|
||||||
|
REM Feb 14 MSG %"Valentine's Day%"
|
||||||
|
REM Third Monday in Feb SCANFROM -7 ADDOMIT MSG %"President's Day%"
|
||||||
|
REM Mar 17 MSG %"St. Patrick's Day%"
|
||||||
|
|
||||||
|
# The DST rules are accurate for most locations in
|
||||||
|
# North America
|
||||||
|
REM Sun Apr 1 ++2 UNTIL 1 Jan 2007 MSG Daylight Saving Time - %"DST starts%" %b
|
||||||
|
REM Sun Mar 8 ++2 FROM 1 Jan 2007 MSG Daylight Saving Time - %"DST starts%" %b
|
||||||
|
|
||||||
|
REM Last Sunday in October ++2 UNTIL 1 Jan 2007 MSG Daylight Saving Time - %"DST ends%" %b
|
||||||
|
REM First Sunday in November ++2 FROM 1 Jan 2007 MSG Daylight Saving Time - %"DST ends%" %b
|
||||||
|
|
||||||
|
REM Apr 1 MSG %"April Fool's%" Day
|
||||||
|
REM Mon Tue Wed Thu Fri Sat 15 Apr MSG %"Income tax%" due
|
||||||
|
REM May 5 MSG %"Cinco de Mayo%"
|
||||||
|
REM First Sat in May MSG %"Kentucky Derby%"
|
||||||
|
REM Second Sun in May MSG %"Mother's Day%"
|
||||||
|
REM Third Sat in May MSG %"Armed Forces Day%"
|
||||||
|
REM Last Monday in May SCANFROM -7 ADDOMIT MSG %"Memorial Day%"
|
||||||
|
REM Jun 14 MSG %"Flag Day%"
|
||||||
|
REM Third Sun in June MSG %"Father's Day%"
|
||||||
|
REM First Mon in Sep SCANFROM -7 ADDOMIT MSG %"Labor Day%"
|
||||||
|
REM Second Mon in Oct MSG %"Columbus Day%"
|
||||||
|
REM Nov 11 MSG %"Veterans Day%"
|
||||||
|
|
||||||
|
REM Oct 30 MSG %"Mischief Night%"
|
||||||
|
REM Oct 31 MSG %"Halloween%"
|
||||||
|
REM Tue Nov 2 SCANFROM -7 SATISFY [($Ty % 4) == 0] MSG %"Election Day%"
|
||||||
|
REM Last Thu in Nov SCANFROM -7 ADDOMIT MSG %"Thanksgiving Day%"
|
||||||
|
REM Fri Nov [Week_4+1] SCANFROM -7 ADDOMIT MSG %"Thanksgiving (cont.)%"
|
||||||
|
REM Dec 24 MSG %"Christmas Eve%"
|
||||||
|
OMIT Dec 25 MSG %"Christmas%" Day
|
||||||
19
include/lang/auto.rem
Normal file
19
include/lang/auto.rem
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
SET autolang getenv("LC_ALL")
|
||||||
|
IF autolang == ""
|
||||||
|
SET autolang getenv("LANGUAGE")
|
||||||
|
ENDIF
|
||||||
|
IF autolang == ""
|
||||||
|
SET autolang getenv("LANG")
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF autolang != ""
|
||||||
|
IF access($SysInclude + "/lang/" + lower(substr(autolang, 1, 5)) + ".rem", "r") == 0
|
||||||
|
INCLUDE [$SysInclude]/lang/[lower(substr(autolang, 1, 5))].rem
|
||||||
|
ELSE
|
||||||
|
IF access($SysInclude + "/lang/" + lower(substr(autolang, 1, 2)) + ".rem", "r") == 0
|
||||||
|
INCLUDE [$SysInclude]/lang/[lower(substr(autolang, 1, 2))].rem
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
UNSET autolang
|
||||||
69
include/lang/da.rem
Normal file
69
include/lang/da.rem
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Support for the Danish language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Mogens Lynnerup.
|
||||||
|
|
||||||
|
SET $Sunday "Søndag"
|
||||||
|
SET $Monday "Mandag"
|
||||||
|
SET $Tuesday "Tirsdag"
|
||||||
|
SET $Wednesday "Onsdag"
|
||||||
|
SET $Thursday "Torsdag"
|
||||||
|
SET $Friday "Fredag"
|
||||||
|
SET $Saturday "Lørdag"
|
||||||
|
|
||||||
|
SET $January "Januar"
|
||||||
|
SET $February "Februar"
|
||||||
|
SET $March "Marts"
|
||||||
|
SET $April "April"
|
||||||
|
SET $May "Maj"
|
||||||
|
SET $June "Juni"
|
||||||
|
SET $July "Juli"
|
||||||
|
SET $August "August"
|
||||||
|
SET $September "September"
|
||||||
|
SET $October "Oktober"
|
||||||
|
SET $November "November"
|
||||||
|
SET $December "December"
|
||||||
|
|
||||||
|
SET $Today "i dag"
|
||||||
|
SET $Tomorrow "i morgen"
|
||||||
|
|
||||||
|
BANNER Påmindelse for %w, %d. %m, %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "siden"
|
||||||
|
SET $Fromnow "fra nu"
|
||||||
|
|
||||||
|
SET $On "på"
|
||||||
|
|
||||||
|
SET $Now "nu"
|
||||||
|
SET $At "kl."
|
||||||
|
SET $Minute "minut"
|
||||||
|
SET $Hour "time"
|
||||||
|
SET $Is "er"
|
||||||
|
SET $Was "var"
|
||||||
|
SET $And "og"
|
||||||
|
SET $Hplu "r"
|
||||||
|
SET $Mplu "ter"
|
||||||
|
|
||||||
|
FSET subst_ampm(h) iif(h<5, " om natten", h < 12, " om formiddagen", h < 18, " om eftermiddagen", " om aftenen")
|
||||||
|
FSET subst_ordinal(d) "."
|
||||||
|
|
||||||
|
FSET subst_p(alt, d, t) iif(d==today()+1, "", "e")
|
||||||
|
FSET zeropad(s, len) pad(s, "0", len)
|
||||||
|
FSET subst_a_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_ax(alt, d, t) iif(alt, subst_a_alt(d), $On + " " + subst_a_alt(d))
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "om " + (d-today()) + " dage"
|
||||||
|
|
||||||
|
FSET subst_ex(alt, d, t) "den " + zeropad(day(d), 2) + $DateSep + zeropad(monnum(d), 2) + $DateSep + zeropad(year(d), 4)
|
||||||
|
FSET subst_fx(alt, d, t) "den " + zeropad(monnum(d), 2) + $DateSep + zeropad(day(d), 2) + $DateSep + zeropad(year(d), 4)
|
||||||
|
|
||||||
|
FSET subst_g_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d)
|
||||||
|
FSET subst_gx(alt, d, t) iif(alt, subst_g_alt(d), $On + " " + subst_g_alt(d))
|
||||||
|
|
||||||
|
FSET subst_hx(alt, d, t) "den " + zeropad(day(d), 2) + $DateSep + zeropad(monnum(d), 2)
|
||||||
|
FSET subst_ix(alt, d, t) "den " + zeropad(monnum(d), 2) + $DateSep + zeropad(day(d), 2)
|
||||||
|
FSET subst_ux(alt, d, t) subst_ax(alt, d, t)
|
||||||
|
FSET subst_vx(alt, d, t) subst_gx(alt, d, t)
|
||||||
63
include/lang/de.rem
Normal file
63
include/lang/de.rem
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# Support for the German language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Wolfgang Thronicke
|
||||||
|
|
||||||
|
# Day names
|
||||||
|
SET $Sunday "Sonntag"
|
||||||
|
SET $Monday "Montag"
|
||||||
|
SET $Tuesday "Dienstag"
|
||||||
|
SET $Wednesday "Mittwoch"
|
||||||
|
SET $Thursday "Donnerstag"
|
||||||
|
SET $Friday "Freitag"
|
||||||
|
SET $Saturday "Samstag"
|
||||||
|
|
||||||
|
# Month names
|
||||||
|
SET $January "Januar"
|
||||||
|
SET $February "Februar"
|
||||||
|
SET $March "März"
|
||||||
|
SET $April "April"
|
||||||
|
SET $May "Mai"
|
||||||
|
SET $June "Juni"
|
||||||
|
SET $July "Juli"
|
||||||
|
SET $August "August"
|
||||||
|
SET $September "September"
|
||||||
|
SET $October "Oktober"
|
||||||
|
SET $November "November"
|
||||||
|
SET $December "Dezember"
|
||||||
|
|
||||||
|
SET $Today "heute"
|
||||||
|
SET $Tomorrow "morgen"
|
||||||
|
|
||||||
|
# Banner
|
||||||
|
BANNER Termine für %w, den %d. %m %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
SET $On "am"
|
||||||
|
SET $Hplu "n"
|
||||||
|
SET $Mplu "n"
|
||||||
|
SET $Now "jetzt"
|
||||||
|
SET $At "um"
|
||||||
|
SET $Minute "Minute"
|
||||||
|
SET $Hour "Stunde"
|
||||||
|
SET $Is "ist"
|
||||||
|
SET $Was "war"
|
||||||
|
SET $And "und"
|
||||||
|
SET $Ago "vorher"
|
||||||
|
SET $Fromnow "von heute"
|
||||||
|
|
||||||
|
FSET subst_ampm(h) iif(h<5, " nachts", h<12, " vormittags", h<=17, " nachmittags", " abends")
|
||||||
|
FSET subst_ordinal(d) "."
|
||||||
|
|
||||||
|
FSET subst_a_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_ax(alt, d, t) iif(alt, subst_a_alt(d), $On + " " + subst_a_alt(d))
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "in " + (d-today()) + " Tagen"
|
||||||
|
|
||||||
|
FSET subst_g_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d)
|
||||||
|
FSET subst_gx(alt, d, t) iif(alt, subst_g_alt(d), $On + " " + subst_g_alt(d))
|
||||||
|
|
||||||
|
FSET subst_ux(alt, d, t) subst_ax(alt, d, t)
|
||||||
|
FSET subst_vx(alt, d, t) subst_gx(alt, d, t)
|
||||||
|
FSET subst_p(alt, d, t) iif(d == today()+1, "", "en")
|
||||||
4
include/lang/en.rem
Normal file
4
include/lang/en.rem
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Support for the English language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# Nothing to do for English since it is the default.
|
||||||
48
include/lang/es.rem
Normal file
48
include/lang/es.rem
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Support for the Spanish language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Rafa Couto <rafacouto@biogate.com>
|
||||||
|
|
||||||
|
SET $Sunday "Domingo"
|
||||||
|
SET $Monday "Lunes"
|
||||||
|
SET $Tuesday "Martes"
|
||||||
|
SET $Wednesday "Miércoles"
|
||||||
|
SET $Thursday "Jueves"
|
||||||
|
SET $Friday "Viernes"
|
||||||
|
SET $Saturday "Sábado"
|
||||||
|
|
||||||
|
SET $January "Enero"
|
||||||
|
SET $February "Febrero"
|
||||||
|
SET $March "Marzo"
|
||||||
|
SET $April "Abril"
|
||||||
|
SET $May "Mayo"
|
||||||
|
SET $June "Junio"
|
||||||
|
SET $July "Julio"
|
||||||
|
SET $August "Agosto"
|
||||||
|
SET $September "Septiembre"
|
||||||
|
SET $October "Octubre"
|
||||||
|
SET $November "Noviembre"
|
||||||
|
SET $December "Diciembre"
|
||||||
|
|
||||||
|
SET $Today "hoy"
|
||||||
|
SET $Tomorrow "mañana"
|
||||||
|
|
||||||
|
BANNER Agenda para el %w, %d%s %m, %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "hace"
|
||||||
|
SET $Fromnow "desde hoy"
|
||||||
|
SET $On "el día"
|
||||||
|
SET $Now "ahora"
|
||||||
|
SET $At "a las"
|
||||||
|
SET $Minute "minuto"
|
||||||
|
SET $Hour "hora"
|
||||||
|
SET $Is "es"
|
||||||
|
SET $Was "fue"
|
||||||
|
SET $And "y"
|
||||||
|
SET $Hplu "s"
|
||||||
|
SET $Mplu "s"
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "dentro de " + (d-today()) + " días"
|
||||||
94
include/lang/fi.rem
Normal file
94
include/lang/fi.rem
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# Support for the Finnish language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Mikko Silvonen
|
||||||
|
|
||||||
|
SET $Sunday "sunnuntai"
|
||||||
|
SET $Monday "maanantai"
|
||||||
|
SET $Tuesday "tiistai"
|
||||||
|
SET $Wednesday "keskiviikko"
|
||||||
|
SET $Thursday "torstai"
|
||||||
|
SET $Friday "perjantai"
|
||||||
|
SET $Saturday "lauantai"
|
||||||
|
|
||||||
|
SET $January "tammikuu"
|
||||||
|
SET $February "helmikuu"
|
||||||
|
SET $March "maaliskuu"
|
||||||
|
SET $April "huhtikuu"
|
||||||
|
SET $May "toukokuu"
|
||||||
|
SET $June "kesäkuu"
|
||||||
|
SET $July "heinäkuu"
|
||||||
|
SET $August "elokuu"
|
||||||
|
SET $September "syyskuu"
|
||||||
|
SET $October "lokakuu"
|
||||||
|
SET $November "marraskuu"
|
||||||
|
SET $December "joulukuu"
|
||||||
|
|
||||||
|
SET $Today "tänään"
|
||||||
|
SET $Tomorrow "huomenna"
|
||||||
|
|
||||||
|
BANNER Viestit %wna %d. %mta %y%o:
|
||||||
|
|
||||||
|
SET $Am " ap."
|
||||||
|
SET $Pm " ip."
|
||||||
|
|
||||||
|
SET $ago "sitten"
|
||||||
|
SET $Fromnow "kuluttua"
|
||||||
|
|
||||||
|
SET $On "na"
|
||||||
|
|
||||||
|
SET $Now "nyt"
|
||||||
|
SET $At "klo"
|
||||||
|
SET $Minute "minuutti"
|
||||||
|
SET $Hour "tunti"
|
||||||
|
SET $Is "on"
|
||||||
|
SET $Was "oli"
|
||||||
|
SET $And "ja"
|
||||||
|
SET $Hplu "a"
|
||||||
|
SET $Mplu "a"
|
||||||
|
|
||||||
|
FSET zeropad(s, len) pad(s, "0", len)
|
||||||
|
|
||||||
|
FSET subst_ordinal(d) iif(d==1, ":senä", d==2, ":sena", (d%10)==2||(d%10)==3||(d%10)==6||(d%10)==8, ":ntena", ":ntenä")
|
||||||
|
|
||||||
|
FSET subst_a_alt(d, o, p) wkday(d) + o + " " + day(d) + ". " + mon(d) + p + " " + year(d)
|
||||||
|
FSET subst_ax(a, d, t) iif(a, subst_a_alt(d, "", ""), subst_a_alt(d, $On, "ta"))
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) (d-today()) + " päivän kuluttua"
|
||||||
|
FSET subst_cx(a, d, t) iif(a, wkday(d), wkday(d) + $On)
|
||||||
|
|
||||||
|
FSET subst_ex(a, d, t) zeropad(day(d), 2) + $DateSep + zeropad(monnum(d), 2) + $DateSep + zeropad(year(d), 4)
|
||||||
|
FSET subst_fx(a, d, t) zeropad(monnum(d), 2) + $DateSep + zeropad(day(d), 2) + $DateSep + zeropad(year(d), 4)
|
||||||
|
|
||||||
|
FSET subst_g_alt(d, o, p) wkday(d) + o + " " + day(d) + ". " + mon(d) + p
|
||||||
|
FSET subst_gx(a, d, t) iif(a, subst_g_alt(d, "", ""), subst_g_alt(d, $On, "ta"))
|
||||||
|
|
||||||
|
FSET subst_hx(a, d, t) zeropad(day(d), 2) + $DateSep + zeropad(monnum(d), 2)
|
||||||
|
FSET subst_ix(a, d, t) zeropad(monnum(d), 2) + $DateSep + zeropad(day(d), 2)
|
||||||
|
|
||||||
|
FSET subst_j_alt(d, o) wkday(d) + o + " " + mon(d) + "n " + day(d) + subst_ordinal(day(d)) + " " + year(d)
|
||||||
|
FSET subst_jx(a, d, t) iif(a, subst_j_alt(d, ""), subst_j_alt(d, $On))
|
||||||
|
|
||||||
|
FSET subst_k_alt(d, o) wkday(d) + o + " " + mon(d) + "n " + day(d) + subst_ordinal(day(d))
|
||||||
|
FSET subst_kx(a, d, t) iif(a, subst_k_alt(d, ""), subst_k_alt(d, $On))
|
||||||
|
|
||||||
|
FSET subst_lx(a, d, t) zeropad(year(d), 4) + $DateSep + zeropad(monnum(d), 2) + $DateSep + zeropad(day(d), 2)
|
||||||
|
FSET subst_p(a, d, t) iif(d==today()+1, "", "ä")
|
||||||
|
FSET subst_qx(a, d, t) "n"
|
||||||
|
|
||||||
|
FSET subst_u_alt(d, o, p) wkday(d) + o + " " + day(d) + subst_ordinal(day(d)) + " " + mon(d) + p + " " + year(d)
|
||||||
|
FSET subst_ux(a, d, t) iif(a, subst_u_alt(d, "", ""), subst_u_alt(d, $On, "ta"))
|
||||||
|
|
||||||
|
FSET subst_v_alt(d, o, p) wkday(d) + o + " " + day(d) + subst_ordinal(day(d)) + " " + mon(d) + p
|
||||||
|
FSET subst_vx(a, d, t) iif(a, subst_v_alt(d, "", ""), subst_v_alt(d, $On, "ta"))
|
||||||
|
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t<now(), subst1_past(now()-t), subst1_future(t-now()))
|
||||||
|
|
||||||
|
FSET subst1_past(mins) subst_hour_past(mins/60) + subst_min_past(mins%60) + $Ago
|
||||||
|
FSET subst1_future(mins) subst_hour_future(mins/60) + subst_min_future(mins%60) + $Fromnow
|
||||||
|
|
||||||
|
FSET subst_hour_past(h) iif(h==0, "", h + " " + $Hour + iif(h==1, " ", $Hplu + " "))
|
||||||
|
FSET subst_min_past(m) iif(m==0, "", m + " " + $Minute + iif(m==1, " ", $Mplu + " "))
|
||||||
|
FSET subst_hour_future(h) iif(h==0, "", h + " tunnin ")
|
||||||
|
FSET subst_min_future(m) iif(m==0, "", m + " minuutin ")
|
||||||
62
include/lang/fr.rem
Normal file
62
include/lang/fr.rem
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Support for the French language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Laurent Duperval
|
||||||
|
|
||||||
|
SET $Sunday "dimanche"
|
||||||
|
SET $Monday "lundi"
|
||||||
|
SET $Tuesday "mardi"
|
||||||
|
SET $Wednesday "mercredi"
|
||||||
|
SET $Thursday "jeudi"
|
||||||
|
SET $Friday "vendredi"
|
||||||
|
SET $Saturday "samedi"
|
||||||
|
|
||||||
|
SET $January "janvier"
|
||||||
|
SET $February "février"
|
||||||
|
SET $March "mars"
|
||||||
|
SET $April "avril"
|
||||||
|
SET $May "mai"
|
||||||
|
SET $June "juin"
|
||||||
|
SET $July "juillet"
|
||||||
|
SET $August "août"
|
||||||
|
SET $September "septembre"
|
||||||
|
SET $October "octobre"
|
||||||
|
SET $November "novembre"
|
||||||
|
SET $December "décembre"
|
||||||
|
|
||||||
|
SET $Today "aujourd'hui"
|
||||||
|
SET $Tomorrow "demain"
|
||||||
|
SET $On "le"
|
||||||
|
SET $At "à"
|
||||||
|
SET $Now "maintenant"
|
||||||
|
SET $Minute "minute"
|
||||||
|
SET $Hour "heure"
|
||||||
|
SET $Is "est"
|
||||||
|
SET $Was "était"
|
||||||
|
SET $And "et"
|
||||||
|
SET $Hplu "s"
|
||||||
|
SET $Mplu "s"
|
||||||
|
SET $Ago "il y a"
|
||||||
|
SET $Fromnow "dans"
|
||||||
|
|
||||||
|
# Banner
|
||||||
|
BANNER Rappels pour %w, %d%s %m, %y%o:
|
||||||
|
|
||||||
|
# Ordinal for a day (English would be "st", "nd", "rd", "th")
|
||||||
|
FSET subst_ordinal(d) iif(d == 1, "er", "")
|
||||||
|
|
||||||
|
# "%d hours", "%d minutes", or "%d hours and %d minutes"
|
||||||
|
FSET subst_tdiff(hdiff, mdiff) iif(hdiff==0&&mdiff==0, $Now, \
|
||||||
|
hdiff==0, mdiff + plural(mdiff, " minute"), \
|
||||||
|
mdiff==0, hdiff + plural(hdiff, " heure"), \
|
||||||
|
hdiff + plural(hdiff, " heure") + " et " + mdiff + plural(mdiff, " minute"))
|
||||||
|
FSET subst_1(alt, date, time) iif(time == now(), "maintenant", \
|
||||||
|
time > now(), "dans " + subst_tdiff((time-now())/60, (time-now())%60), \
|
||||||
|
"il y a " + subst_tdiff ((now()-time)/60, (now()-time)%60))
|
||||||
|
|
||||||
|
FSET subst_bx(alt, date, time) "dans " + (date-today()) + " jours"
|
||||||
|
FSET subst_j_alt(date) wkday(date) + ", " + day(date) + subst_ordinal(day(date)) + " " + mon(date) + ", " + year(date)
|
||||||
|
FSET subst_jx(alt, date, time) iif(alt, subst_j_alt(date), $On + " " + subst_j_alt(date))
|
||||||
|
|
||||||
|
FSET subst_k_alt(date) wkday(date) + ", " + day(date) + subst_ordinal(day(date)) + " " + mon(date)
|
||||||
|
FSET subst_kx(alt, date, time) iif(alt, subst_k_alt(date), $On + " " + subst_k_alt(date))
|
||||||
51
include/lang/is.rem
Normal file
51
include/lang/is.rem
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Support for the Icelanding language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Björn Davíðsson (bjossi@snerpa.is)
|
||||||
|
|
||||||
|
SET $Sunday "sunnudagur"
|
||||||
|
SET $Monday "mánudagur"
|
||||||
|
SET $Tuesday "þriðjudagur"
|
||||||
|
SET $Wednesday "miðvikudagur"
|
||||||
|
SET $Thursday "fimmtudagur"
|
||||||
|
SET $Friday "föstudagur"
|
||||||
|
SET $Saturday "laugardagur"
|
||||||
|
|
||||||
|
SET $January "janúar"
|
||||||
|
SET $February "febrúar"
|
||||||
|
SET $March "mars"
|
||||||
|
SET $April "apríl"
|
||||||
|
SET $May "maí"
|
||||||
|
SET $June "júní"
|
||||||
|
SET $July "júlí"
|
||||||
|
SET $August "ágúst"
|
||||||
|
SET $September "september"
|
||||||
|
SET $October "október"
|
||||||
|
SET $November "nóvember"
|
||||||
|
SET $December "desember"
|
||||||
|
|
||||||
|
SET $Today "í dag"
|
||||||
|
SET $Tomorrow "á morgun"
|
||||||
|
|
||||||
|
BANNER Minnisatriði: %w, %d%s %m, %y%o:
|
||||||
|
|
||||||
|
SET $Am "fh"
|
||||||
|
SET $Pm "eh"
|
||||||
|
|
||||||
|
SET $Ago "síðan"
|
||||||
|
SET $Fromnow "frá því nú"
|
||||||
|
|
||||||
|
SET $On "þann"
|
||||||
|
|
||||||
|
SET $Now "núna"
|
||||||
|
SET $At "kl."
|
||||||
|
SET $Minute "mínútu"
|
||||||
|
SET $Hour "klukkustund"
|
||||||
|
SET $Is "er"
|
||||||
|
SET $Was "var"
|
||||||
|
SET $And "og"
|
||||||
|
SET $Hplu "ir"
|
||||||
|
SET $Mplu "r"
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "eftir " + (d - today()) + " daga"
|
||||||
|
fset subst_p(a, d, t) iif(d == today()+1, "", "a")
|
||||||
67
include/lang/it.rem
Normal file
67
include/lang/it.rem
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Support for the Italian language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Valerio Aimale
|
||||||
|
|
||||||
|
SET $Sunday "Domenica"
|
||||||
|
SET $Monday "Lunedí"
|
||||||
|
SET $Tuesday "Martedí"
|
||||||
|
SET $Wednesday "Mercoledí"
|
||||||
|
SET $Thursday "Giovedí"
|
||||||
|
SET $Friday "Venerdí"
|
||||||
|
SET $Saturday "Sabato"
|
||||||
|
|
||||||
|
SET $January "Gennaio"
|
||||||
|
SET $February "Febbraio"
|
||||||
|
SET $March "Marzo"
|
||||||
|
SET $April "Aprile"
|
||||||
|
SET $May "Maggio"
|
||||||
|
SET $June "Giugno"
|
||||||
|
SET $July "Luglio"
|
||||||
|
SET $August "Agosto"
|
||||||
|
SET $September "Settembre"
|
||||||
|
SET $October "Ottobre"
|
||||||
|
SET $November "Novembre"
|
||||||
|
SET $December "Dicembre"
|
||||||
|
|
||||||
|
SET $Today "oggi"
|
||||||
|
SET $Tomorrow "domani"
|
||||||
|
|
||||||
|
BANNER Promemoria per %w, %d %m %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "fa"
|
||||||
|
SET $Fromnow "da oggi"
|
||||||
|
|
||||||
|
SET $On ""
|
||||||
|
SET $Now "ora"
|
||||||
|
SET $At "alle"
|
||||||
|
SET $Minute "minuto"
|
||||||
|
SET $Hour "ora"
|
||||||
|
SET $Is "é"
|
||||||
|
SET $Was "era"
|
||||||
|
SET $And "e"
|
||||||
|
SET $Hplu "a"
|
||||||
|
SET $Mplu "i"
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "fra " + (d-today()) + " giorni"
|
||||||
|
FSET subst_p(a, d, t) iif(d==today()+1, "o", "i")
|
||||||
|
FSET subst_q(a, d, t) iif(d==today()+1, "a", "e")
|
||||||
|
|
||||||
|
FSET subst_ax(a, d, t) wkday(d) + ", " + day(d) + " " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_jx(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_kx(a, d, t) wkday(d) + ", " + day(d) + " " + mon(d)
|
||||||
|
FSET subst_ux(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_vx(a, d, t) subst_kx(a, d, t)
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t<now(), subst_1a(now()-t, $Ago), subst_1a(t-now(), $Fromnow))
|
||||||
|
FSET subst_1a(diff, when) subst_1b(diff/60, diff%60) + " " + when
|
||||||
|
|
||||||
|
FSET subst_1b(hdiff, mdiff) iif(hdiff==0, subst_minutes(mdiff), mdiff==0, subst_hours(hdiff), subst_hours(hdiff) + " " + $And + " " + subst_minutes(mdiff))
|
||||||
|
FSET subst_minutes(m) iif(m==1, "1 minuto", m + " minuti")
|
||||||
|
FSET subst_hours(h) iif(h==1, "1 ora", h + " ore")
|
||||||
|
|
||||||
|
FSET subst_0(a, d, t) iif(abs(now()-t)/60==1, "a", "e")
|
||||||
|
FSET subst_9(a, d, t) iif(abs(now()-t)%60==1, "o", "i")
|
||||||
56
include/lang/nl.rem
Normal file
56
include/lang/nl.rem
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Support for the Dutch language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Willem Kasdorp and Erik-Jan Vens
|
||||||
|
|
||||||
|
SET $Sunday "zondag"
|
||||||
|
SET $Monday "maandag"
|
||||||
|
SET $Tuesday "dinsdag"
|
||||||
|
SET $Wednesday "woensdag"
|
||||||
|
SET $Thursday "donderdag"
|
||||||
|
SET $Friday "vrijdag"
|
||||||
|
SET $Saturday "zaterdag"
|
||||||
|
|
||||||
|
SET $January "januari"
|
||||||
|
SET $February "februari"
|
||||||
|
SET $March "maart"
|
||||||
|
SET $April "april"
|
||||||
|
SET $May "mei"
|
||||||
|
SET $June "juni"
|
||||||
|
SET $July "juli"
|
||||||
|
SET $August "augustus"
|
||||||
|
SET $September "september"
|
||||||
|
SET $October "oktober"
|
||||||
|
SET $November "november"
|
||||||
|
SET $December "december"
|
||||||
|
|
||||||
|
SET $Today "vandaag"
|
||||||
|
SET $Tomorrow "morgen"
|
||||||
|
|
||||||
|
BANNER Herinneringen voor %w, %d%s %m, %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "geleden"
|
||||||
|
SET $Fromnow "vanaf nu"
|
||||||
|
SET $On "op"
|
||||||
|
|
||||||
|
SET $Now "nu"
|
||||||
|
SET $At "op"
|
||||||
|
SET $Minute "minuut"
|
||||||
|
SET $Hour "uur"
|
||||||
|
SET $Is "is"
|
||||||
|
SET $Was "was"
|
||||||
|
SET $And "en"
|
||||||
|
SET $Hplu "en"
|
||||||
|
SET $Mplu "en"
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t<now(), subst_1a(now()-t, $Ago), subst_1a(t-now(), $Fromnow))
|
||||||
|
FSET subst_1a(diff, when) subst_1b(diff/60, diff%60) + " " + when
|
||||||
|
|
||||||
|
FSET subst_1b(hdiff, mdiff) iif(hdiff==0, subst_minutes(mdiff), mdiff==0, subst_hours(hdiff), subst_hours(hdiff) + " " + $And + " " + subst_minutes(mdiff))
|
||||||
|
FSET subst_minutes(m) iif(m==1, "1 minuut", m + " minuten")
|
||||||
|
FSET subst_hours(h) iif(h==1, "1 uur", h + " uren")
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "over " + (d-today()) + " dagen"
|
||||||
58
include/lang/no.rem
Normal file
58
include/lang/no.rem
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Support for the Norwegian language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Trygve Randen
|
||||||
|
|
||||||
|
SET $Sunday "Søndag"
|
||||||
|
SET $Monday "Mandag"
|
||||||
|
SET $Tuesday "Tirsdag"
|
||||||
|
SET $Wednesday "Onsdag"
|
||||||
|
SET $Thursday "Torsdag"
|
||||||
|
SET $Friday "Fredag"
|
||||||
|
SET $Saturday "Lørdag"
|
||||||
|
|
||||||
|
SET $January "Januar"
|
||||||
|
SET $February "Februar"
|
||||||
|
SET $March "Mars"
|
||||||
|
SET $April "April"
|
||||||
|
SET $May "Mai"
|
||||||
|
SET $June "Juni"
|
||||||
|
SET $July "Juli"
|
||||||
|
SET $August "August"
|
||||||
|
SET $September "September"
|
||||||
|
SET $October "Oktober"
|
||||||
|
SET $November "November"
|
||||||
|
SET $December "Desember"
|
||||||
|
|
||||||
|
SET $Today "i dag"
|
||||||
|
SET $Tomorrow "i morgen"
|
||||||
|
|
||||||
|
BANNER Påminnelse for %w, %d. %m, %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "siden"
|
||||||
|
SET $Fromnow "fra nå"
|
||||||
|
|
||||||
|
SET $On "den"
|
||||||
|
SET $Now "nå"
|
||||||
|
SET $At "kl."
|
||||||
|
SET $Minute "minutt"
|
||||||
|
SET $Hour "time"
|
||||||
|
SET $Is "er"
|
||||||
|
SET $Was "var"
|
||||||
|
SET $And "og"
|
||||||
|
SET $Hplu "r"
|
||||||
|
SET $Mplu "er"
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "om " + (d-today()) + " dager"
|
||||||
|
FSET subst_ordinal(d) "."
|
||||||
|
|
||||||
|
FSET subst_ax(a, d, t) iif(a, subst_a_alt(d), $On + " " + subst_a_alt(d))
|
||||||
|
FSET subst_a_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_gx(a, d, t) iif(a, subst_g_alt(d), $On + " " + subst_g_alt(d))
|
||||||
|
FSET subst_g_alt(d) wkday(d) + ", den " + day(d) + ". " + mon(d)
|
||||||
|
FSET subst_ux(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_vx(a, d, t) subst_gx(a, d, t)
|
||||||
|
FSET subst_p(a, d, t) iif(d==today()+1, "", "er")
|
||||||
69
include/lang/pl.rem
Normal file
69
include/lang/pl.rem
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Support for the Polish language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Jerzy Sobczyk
|
||||||
|
|
||||||
|
SET $Sunday "Niedziela"
|
||||||
|
SET $Monday "Poniedziałek"
|
||||||
|
SET $Tuesday "Wtorek"
|
||||||
|
SET $Wednesday "Środa"
|
||||||
|
SET $Thursday "Czwartek"
|
||||||
|
SET $Friday "Piątek"
|
||||||
|
SET $Saturday "Sobota"
|
||||||
|
|
||||||
|
SET $January "Styczeń"
|
||||||
|
SET $February "Luty"
|
||||||
|
SET $March "Marzec"
|
||||||
|
SET $April "Kwiecień"
|
||||||
|
SET $May "Maj"
|
||||||
|
SET $June "Czerwiec"
|
||||||
|
SET $July "Lipiec"
|
||||||
|
SET $August "Sierpień"
|
||||||
|
SET $September "Wrzesień"
|
||||||
|
SET $October "Październik"
|
||||||
|
SET $November "Listopad"
|
||||||
|
SET $December "Grudzień"
|
||||||
|
|
||||||
|
SET $Today "dzisiaj"
|
||||||
|
SET $Tomorrow "jutro"
|
||||||
|
|
||||||
|
BANNER Terminarz na %w, %d. %m %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "temu"
|
||||||
|
SET $Fromnow "od teraz"
|
||||||
|
SET $On "-"
|
||||||
|
SET $Now "teraz"
|
||||||
|
SET $At "o"
|
||||||
|
SET $Minute "minut"
|
||||||
|
SET $Hour "godzin"
|
||||||
|
SET $Is "będzie"
|
||||||
|
SET $Was "było"
|
||||||
|
SET $And "i"
|
||||||
|
SET $Hplu ""
|
||||||
|
SET $Mplu ""
|
||||||
|
|
||||||
|
FSET subst_pl_plu(n) iif(n==1, "ę", (n==12||n==13||n==14), "", (n%10==2||n%10==3||n%10==4), "y", "")
|
||||||
|
FSET subst_ampm(h) iif(h<5, " w nocy", h<10, " rano", h<12, " przed południem", h<18, " po południu", h<22, " wieczorem", " w nocy")
|
||||||
|
FSET subst_ordinal(d) ""
|
||||||
|
|
||||||
|
FSET subst_a_alt(d) wkday(d) + ", " + day(d) + ". " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_ax(a, d, t) iif(a, subst_a_alt(d), $On + " " + subst_a_alt(d))
|
||||||
|
FSET subst_bx(a, d, t) "za " + (d-today()) + " dni"
|
||||||
|
FSET subst_g_alt(d) wkday(d) + ", " + day(d) + ". " + mon(d)
|
||||||
|
FSET subst_gx(a, d, t) iif(a, subst_g_alt(d), $On + " " + subst_g_alt(d))
|
||||||
|
FSET subst_ux(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_vx(a, d, t) subst_gx(a, d, t)
|
||||||
|
FSET subst_p(a, d, t) ""
|
||||||
|
FSET subst_0(a, d, t) subst_pl_plu(abs(t-now())/60)
|
||||||
|
FSET subst_9(a, d, t) subst_pl_plu(abs(t-now())%60)
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t<now(), subst_1past(now()-t), subst_1future(t-now()))
|
||||||
|
|
||||||
|
FSET subst_1future(diff) "za " + iif(diff/60==0, subst_1min(diff%60), diff%60==0, subst_1h(diff/60), subst_1h(diff/60) + " " + $And + " " + subst_1min(diff%60))
|
||||||
|
FSET subst_1past(diff) iif(diff/60==0, subst_1min(diff%60), diff%60==0, subst_1h(diff/60), subst_1h(diff/60) + " " + $And + " " + subst_1min(diff%60)) + " temu"
|
||||||
|
|
||||||
|
FSET subst_1min(m) m + " " + $Minute + subst_pl_plu(m)
|
||||||
|
FSET subst_1h(h) h + " " + $Hour + subst_pl_plu(h)
|
||||||
69
include/lang/pt.rem
Normal file
69
include/lang/pt.rem
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Support for the (Brazilian) Portuguese language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Marco Paganini
|
||||||
|
|
||||||
|
SET $Sunday "domingo"
|
||||||
|
SET $Monday "segunda"
|
||||||
|
SET $Tuesday "terça"
|
||||||
|
SET $Wednesday "quarta"
|
||||||
|
SET $Thursday "quinta"
|
||||||
|
SET $Friday "sexta"
|
||||||
|
SET $Saturday "sábado"
|
||||||
|
|
||||||
|
SET $January "janeiro"
|
||||||
|
SET $February "fevereiro"
|
||||||
|
SET $March "março"
|
||||||
|
SET $April "abril"
|
||||||
|
SET $May "maio"
|
||||||
|
SET $June "junho"
|
||||||
|
SET $July "julho"
|
||||||
|
SET $August "agosto"
|
||||||
|
SET $September "setembro"
|
||||||
|
SET $October "outubro"
|
||||||
|
SET $November "novembro"
|
||||||
|
SET $December "dezembro"
|
||||||
|
|
||||||
|
SET $Today "hoje"
|
||||||
|
SET $Tomorrow "amanhã"
|
||||||
|
|
||||||
|
BANNER Avisos para %w, %d de %m de %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "atrás"
|
||||||
|
SET $Fromnow "adiante"
|
||||||
|
|
||||||
|
SET $On "em"
|
||||||
|
SET $Now "agora"
|
||||||
|
SET $At "as"
|
||||||
|
SET $Minute "minuto"
|
||||||
|
SET $Hour "hora"
|
||||||
|
SET $Is "é"
|
||||||
|
SET $Was "foi"
|
||||||
|
SET $And "e"
|
||||||
|
|
||||||
|
SET $Hplu "s"
|
||||||
|
SET $Mplu "s"
|
||||||
|
|
||||||
|
FSET subst_ordinal(d) ""
|
||||||
|
FSET subst_on_wd(d) iif(wkdaynum(d) == 1 || wkdaynum(d) == 2, "no", "na")
|
||||||
|
|
||||||
|
FSET subst_a_alt(d) wkday(d) + ", " + day(d) + " de " + mon(d) + " de " + year(d)
|
||||||
|
FSET subst_bx(a, d, t) "em " + (d-today()) + " dias"
|
||||||
|
FSET subst_c_alt(d) wkday(d)
|
||||||
|
FSET subst_g_alt(d) wkday(d) + ", " + day(d) + " " + mon(d)
|
||||||
|
FSET subst_ax(a, d, t) iif(a, subst_a_alt(d), subst_on_wd(d) + " " + subst_a_alt(d))
|
||||||
|
FSET subst_cx(a, d, t) iif(a, subst_c_alt(d), subst_on_wd(d) + " " + subst_c_alt(d))
|
||||||
|
FSET subst_gx(a, d, t) iif(a, subst_g_alt(d), subst_on_wd(d) + " " + subst_g_alt(d))
|
||||||
|
FSET subst_jx(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_k_alt(d) wkday(d) + ", " + day(d) + " de " + mon(d)
|
||||||
|
FSET subst_kx(a, d, t) iif(a, subst_k_alt(d), subst_on_wd(d) + " " + subst_k_alt(d))
|
||||||
|
FSET subst_ux(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_vx(a, d, t) subst_kx(a, d, t)
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t>now(), "em " + subst_1help(t-now()), subst_1help(now()-t) + " " + $Ago)
|
||||||
|
FSET subst_1help(diff) iif(diff/60==0, subst_mplu(diff%60), diff%60==0, subst_hplu(diff/60), subst_hplu(diff/60) + " " + $And + " " + subst_mplu(diff%60))
|
||||||
|
FSET subst_mplu(m) iif(m==1, "1 " + $Minute, m + " " + $Minute + $Mplu)
|
||||||
|
FSET subst_hplu(h) iif(h==1, "1 " + $Hour, h + " " + $Hour + $Hplu)
|
||||||
68
include/lang/ro.rem
Normal file
68
include/lang/ro.rem
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Support for the Romanian language.
|
||||||
|
# This file is part of REMIND.
|
||||||
|
# REMIND is Copyright (C) 1992-2022 by Dianne Skoll
|
||||||
|
# This file is derived from a translation by Liviu Daia
|
||||||
|
|
||||||
|
SET $Sunday "Duminică"
|
||||||
|
SET $Monday "Luni"
|
||||||
|
SET $Tuesday "Marți"
|
||||||
|
SET $Wednesday "Miercuri"
|
||||||
|
SET $Thursday "Joi"
|
||||||
|
SET $Friday "Vineri"
|
||||||
|
SET $Saturday "Sâmbătă"
|
||||||
|
|
||||||
|
SET $January "Ianuarie"
|
||||||
|
SET $February "Februarie"
|
||||||
|
SET $March "Martie"
|
||||||
|
SET $April "Aprilie"
|
||||||
|
SET $May "Mai"
|
||||||
|
SET $June "Iunie"
|
||||||
|
SET $July "Iulie"
|
||||||
|
SET $August "August"
|
||||||
|
SET $September "Septembrie"
|
||||||
|
SET $October "Octombrie"
|
||||||
|
SET $November "Noiembrie"
|
||||||
|
SET $December "Decembrie"
|
||||||
|
|
||||||
|
SET $Today "astăzi"
|
||||||
|
SET $Tomorrow "mâine"
|
||||||
|
|
||||||
|
BANNER Reamintiri pentru %w, %d %m %y%o:
|
||||||
|
|
||||||
|
SET $Am "am"
|
||||||
|
SET $Pm "pm"
|
||||||
|
|
||||||
|
SET $Ago "acum"
|
||||||
|
SET $Fromnow "peste"
|
||||||
|
|
||||||
|
SET $On "pe"
|
||||||
|
|
||||||
|
SET $Now "acum"
|
||||||
|
SET $At "la ora"
|
||||||
|
SET $Minute "minut"
|
||||||
|
SET $Hour "or"
|
||||||
|
SET $Is "este"
|
||||||
|
SET $Was "a fost"
|
||||||
|
SET $Mplu "e"
|
||||||
|
SET $Hplu "e"
|
||||||
|
SET $And "şi"
|
||||||
|
|
||||||
|
FSET subst_bx(a, d, t) "peste " + (d-today()) + " zile"
|
||||||
|
|
||||||
|
FSET subst_ampm(h) iif(h<4, " noaptea", h<12, " dimineaţa", h<18, " după-amiaza", " seara")
|
||||||
|
FSET subst_ordinal(d) ""
|
||||||
|
|
||||||
|
FSET subst_ax(a, d, t) wkday(d) + ", " + day(d) + " " + mon(d) + " " + year(d)
|
||||||
|
FSET subst_cx(a, d, t) wkday(d)
|
||||||
|
FSET subst_gx(a, d, t) wkday(d) + ", " + day(d) + " " + mon(d)
|
||||||
|
FSET subst_jx(a, d, t) wkday(d) + ", " + mon(d) + " " + day(d) + ", " + year(d)
|
||||||
|
FSET subst_kx(a, d, t) wkday(d) + ", " + mon(d) + " " + day(d)
|
||||||
|
FSET subst_ux(a, d, t) subst_ax(a, d, t)
|
||||||
|
FSET subst_vx(a, d, t) subst_gx(a, d, t)
|
||||||
|
FSET subst_p(a, d, t) iif(d==today()+1, "", "le")
|
||||||
|
|
||||||
|
FSET subst_1(a, d, t) iif(t==now(), $Now, t<now(), subst_1helper(now()-t, "acum "), subst_1helper(t-now(), "peste "))
|
||||||
|
FSET subst_1helper(diff, when) when + iif(diff%60==0, subst_1h(diff/60), diff/60==0, subst_1m(diff%60), subst_1h(diff/60) + " " + $And + " " + subst_1m(diff%60))
|
||||||
|
FSET subst_1h(h) iif(h==1, "1 oră", h + " ore")
|
||||||
|
FSET subst_1m(m) iif(m==1, "1 minut", m + " minute")
|
||||||
|
FSET subst_0(a, d, t) iif(abs(t-now())/60==1, "ă", "e")
|
||||||
2
include/site/README
Normal file
2
include/site/README
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
This directory is for system administrators to install site-wide
|
||||||
|
Remind scripts that are useful to their user-base.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH REM 1 "1 January 2021"
|
.TH REM 1 "14 March 2022"
|
||||||
.UC 4
|
.UC 4
|
||||||
.SH NAME
|
.SH NAME
|
||||||
rem \- Invoke Remind with a default filename
|
rem \- Invoke Remind with a default filename
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH REM2PS 1 "5 January 2021"
|
.TH REM2PS 1 "14 March 2022"
|
||||||
.UC 4
|
.UC 4
|
||||||
.SH NAME
|
.SH NAME
|
||||||
rem2ps \- draw a PostScript calendar from Remind output
|
rem2ps \- draw a PostScript calendar from Remind output
|
||||||
|
|||||||
267
man/remind.1
267
man/remind.1
@@ -1,4 +1,4 @@
|
|||||||
.TH REMIND 1 "1 January 2021"
|
.TH REMIND 1 "14 March 2022"
|
||||||
.UC 4
|
.UC 4
|
||||||
.SH NAME
|
.SH NAME
|
||||||
remind \- a sophisticated reminder service
|
remind \- a sophisticated reminder service
|
||||||
@@ -141,7 +141,7 @@ If you immediately follow the \fBs\fR with the letter
|
|||||||
day they actually occur \fIas well as\fR on any preceding days specified
|
day they actually occur \fIas well as\fR on any preceding days specified
|
||||||
by the reminder's \fIdelta\fR.
|
by the reminder's \fIdelta\fR.
|
||||||
.TP
|
.TP
|
||||||
.B \-p\fR[\fBa\fR][\fBp\fR][\fBp\fR]\fIn\fR
|
.B \-p\fR[\fBa\fR][\fBp\fR][\fBp\fR][\fBq\fR]\fIn\fR
|
||||||
The \fB\-p\fR option is very similar to the \fB\-s\fR option, except
|
The \fB\-p\fR option is very similar to the \fB\-s\fR option, except
|
||||||
that the output contains additional information for use by the
|
that the output contains additional information for use by the
|
||||||
\fBRem2PS\fR program, which creates a PostScript calendar, and various
|
\fBRem2PS\fR program, which creates a PostScript calendar, and various
|
||||||
@@ -156,7 +156,9 @@ by the reminder's \fIdelta\fR. If you follow the \fBp\fR with another
|
|||||||
format rather than the "simple calendar" format. This format is
|
format rather than the "simple calendar" format. This format is
|
||||||
also documented in the \fBrem2ps(1)\fR man page. Finally, if you use
|
also documented in the \fBrem2ps(1)\fR man page. Finally, if you use
|
||||||
three p's, as in \fB\-ppp\fR, then \fBRemind\fR uses a pure JSON
|
three p's, as in \fB\-ppp\fR, then \fBRemind\fR uses a pure JSON
|
||||||
format, again documented in \fBrem2ps(1)\fR.
|
format, again documented in \fBrem2ps(1)\fR. If you include a \fBq\fR
|
||||||
|
letter with this option, then the normal calendar-mode substitution filter
|
||||||
|
is disabled and the %"...%" sequences are preserved in the output.
|
||||||
.RS
|
.RS
|
||||||
.PP
|
.PP
|
||||||
Note that the \fB\-pp\fR or \fB\-ppp\fR options also enable the \fB\-l\fR
|
Note that the \fB\-pp\fR or \fB\-ppp\fR options also enable the \fB\-l\fR
|
||||||
@@ -563,6 +565,7 @@ The trigger date for a specific run is simply the current system date.
|
|||||||
present. The reminder is triggered on the specified day of each month.
|
present. The reminder is triggered on the specified day of each month.
|
||||||
The trigger date for a particular run is the closest such day to the
|
The trigger date for a particular run is the closest such day to the
|
||||||
current system date. For example:
|
current system date. For example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM 1 MSG First of every month.
|
REM 1 MSG First of every month.
|
||||||
REM 31 MSG 31st of every month that has 31 days.
|
REM 31 MSG 31st of every month that has 31 days.
|
||||||
@@ -572,6 +575,7 @@ current system date. For example:
|
|||||||
.I month
|
.I month
|
||||||
present. The reminder is triggered every day of the specified month.
|
present. The reminder is triggered every day of the specified month.
|
||||||
Example:
|
Example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Feb MSG Every day in February
|
REM Feb MSG Every day in February
|
||||||
.fi
|
.fi
|
||||||
@@ -581,6 +585,7 @@ Example:
|
|||||||
and
|
and
|
||||||
.I month
|
.I month
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM 6 Jan MSG Every 6th of January
|
REM 6 Jan MSG Every 6th of January
|
||||||
REM Feb 29 MSG Every 29th of February
|
REM Feb 29 MSG Every 29th of February
|
||||||
@@ -589,6 +594,7 @@ present. Examples:
|
|||||||
5. Only
|
5. Only
|
||||||
.I year
|
.I year
|
||||||
present. Example:
|
present. Example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM 1991 MSG Every day in 1991
|
REM 1991 MSG Every day in 1991
|
||||||
.fi
|
.fi
|
||||||
@@ -598,6 +604,7 @@ present. Example:
|
|||||||
and
|
and
|
||||||
.I day
|
.I day
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM 1 1990 MSG 1st of every month in 1990
|
REM 1 1990 MSG 1st of every month in 1990
|
||||||
REM 1992 23 MSG 23rd of every month in 1992
|
REM 1992 23 MSG 23rd of every month in 1992
|
||||||
@@ -608,6 +615,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I month
|
.I month
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Feb 1991 MSG Every day in Feb 1991
|
REM Feb 1991 MSG Every day in Feb 1991
|
||||||
REM 1992 September MSG Every day in Sept 1992
|
REM 1992 September MSG Every day in Sept 1992
|
||||||
@@ -618,6 +626,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I day
|
.I day
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM 8 Jan 1991 MSG 8th January 1991.
|
REM 8 Jan 1991 MSG 8th January 1991.
|
||||||
REM 1992 March 9 MSG 9th March 1992.
|
REM 1992 March 9 MSG 9th March 1992.
|
||||||
@@ -626,6 +635,7 @@ present. Examples:
|
|||||||
9.
|
9.
|
||||||
.I weekday
|
.I weekday
|
||||||
only. Examples:
|
only. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Sat MSG Every Saturday
|
REM Sat MSG Every Saturday
|
||||||
REM Mon Tue Wed Thu Fri MSG Every working day
|
REM Mon Tue Wed Thu Fri MSG Every working day
|
||||||
@@ -637,6 +647,7 @@ only. Examples:
|
|||||||
and
|
and
|
||||||
.I day
|
.I day
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Sat 1 MSG First Saturday of every month
|
REM Sat 1 MSG First Saturday of every month
|
||||||
REM Mon Tue Wed Thu Fri 15 \\
|
REM Mon Tue Wed Thu Fri 15 \\
|
||||||
@@ -648,6 +659,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I month
|
.I month
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Mon March MSG Every Monday in March
|
REM Mon March MSG Every Monday in March
|
||||||
REM Mon Tue Wed Thu Fri Feb MSG Every working day in February
|
REM Mon Tue Wed Thu Fri Feb MSG Every working day in February
|
||||||
@@ -658,6 +670,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I day
|
.I day
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Mon 1 March MSG First Monday in March
|
REM Mon 1 March MSG First Monday in March
|
||||||
REM Sat Sun 15 July MSG First Sat or Sun on or after 15 July
|
REM Sat Sun 15 July MSG First Sat or Sun on or after 15 July
|
||||||
@@ -668,6 +681,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I year
|
.I year
|
||||||
present. Example:
|
present. Example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Sat Sun 1991 MSG Every Saturday and Sunday in 1991
|
REM Sat Sun 1991 MSG Every Saturday and Sunday in 1991
|
||||||
.fi
|
.fi
|
||||||
@@ -677,6 +691,7 @@ present. Example:
|
|||||||
and
|
and
|
||||||
.I year
|
.I year
|
||||||
present. Examples:
|
present. Examples:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Mon 15 1990 MSG 1st Mon after 15th of every month in 1990
|
REM Mon 15 1990 MSG 1st Mon after 15th of every month in 1990
|
||||||
REM Mon Tue Wed Thu Fri 1 1990 \\
|
REM Mon Tue Wed Thu Fri 1 1990 \\
|
||||||
@@ -688,6 +703,7 @@ present. Examples:
|
|||||||
and
|
and
|
||||||
.I year
|
.I year
|
||||||
present. Example:
|
present. Example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Mon Wed 1991 Feb MSG Every Mon and Wed in Feb 1991.
|
REM Mon Wed 1991 Feb MSG Every Mon and Wed in Feb 1991.
|
||||||
.fi
|
.fi
|
||||||
@@ -697,6 +713,7 @@ present. Example:
|
|||||||
and
|
and
|
||||||
.I year
|
.I year
|
||||||
present. Example:
|
present. Example:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Mon Tue Wed Thu Fri 28 Oct 1990 \\
|
REM Mon Tue Wed Thu Fri 28 Oct 1990 \\
|
||||||
MSG 1st working day on or after 28 October 1990.
|
MSG 1st working day on or after 28 October 1990.
|
||||||
@@ -1515,11 +1532,11 @@ In addition to being a keyword in the \fBREM\fR command,
|
|||||||
\fBOMIT\fR is a command in its own right. Its syntax is:
|
\fBOMIT\fR is a command in its own right. Its syntax is:
|
||||||
.PP
|
.PP
|
||||||
.RS
|
.RS
|
||||||
\fBOMIT\fR \fIday\fR \fImonth\fR [\fIyear\fR]
|
\fBOMIT\fR [\fIday\fR] \fImonth\fR [\fIyear\fR]
|
||||||
.PP
|
.PP
|
||||||
or:
|
or:
|
||||||
.PP
|
.PP
|
||||||
\fBOMIT\fR \fIday1\fR \fImonth1\fR \fIyear1\fR \fBTHROUGH\fR \fIday2\fR \fImonth2\fR \fIyear2\fR
|
\fBOMIT\fR [\fIday1\fR] \fImonth1\fR [\fIyear1\fR] \fBTHROUGH\fR [\fIday2\fR] \fImonth2\fR [\fIyear2\fR]
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
The \fBOMIT\fR command is used to "globally" omit certain days
|
The \fBOMIT\fR command is used to "globally" omit certain days
|
||||||
@@ -1528,8 +1545,13 @@ The \fBOMIT\fR command is used to "globally" omit certain days
|
|||||||
"\-\-" and "\+\+" forms. Some examples:
|
"\-\-" and "\+\+" forms. Some examples:
|
||||||
.PP
|
.PP
|
||||||
.nf
|
.nf
|
||||||
OMIT 1 Jan
|
OMIT 1 Jan
|
||||||
OMIT 7 Sep 1992
|
OMIT 7 Sep 1992
|
||||||
|
OMIT 15 Jan THROUGH 14 Feb
|
||||||
|
OMIT May # Equivalent to OMIT May 1 THROUGH May 31
|
||||||
|
OMIT 25 Dec THROUGH 4 Jan
|
||||||
|
OMIT 2023-05-03 THROUGH 2023-05-12
|
||||||
|
OMIT Jun THROUGH July # Equivalent to OMIT Jun 1 THROUGH July 31
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
The first example specifies a holiday that occurs on the same date each
|
The first example specifies a holiday that occurs on the same date each
|
||||||
@@ -1561,9 +1583,7 @@ equivalent:
|
|||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
The \fBTHROUGH\fR keyword lets you conveniently OMIT a range of days.
|
The \fBTHROUGH\fR keyword lets you conveniently OMIT a range of days.
|
||||||
The starting and ending points must be fully-specified (ie, they must
|
For example, the following sequences are equivalent:
|
||||||
include day, month and year.). For example, the following sequences
|
|
||||||
are equivalent:
|
|
||||||
.PP
|
.PP
|
||||||
.nf
|
.nf
|
||||||
OMIT 3 Jan 2011
|
OMIT 3 Jan 2011
|
||||||
@@ -1575,12 +1595,28 @@ are equivalent:
|
|||||||
OMIT 3 Jan 2011 THROUGH 5 Jan 2011
|
OMIT 3 Jan 2011 THROUGH 5 Jan 2011
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command:
|
You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command as
|
||||||
|
long as both dates are fully specified
|
||||||
.PP
|
.PP
|
||||||
.nf
|
.nf
|
||||||
OMIT 6 Sep 2010 THROUGH 10 Sep 2010 MSG Vacation
|
OMIT 6 Sep 2010 THROUGH 10 Sep 2010 MSG Vacation
|
||||||
.fi
|
.fi
|
||||||
|
.PP
|
||||||
|
If you use a THROUGH clause, then either the year must be supplied before
|
||||||
|
and after the THROUGH, or it must be missing before and after the THROUGH.
|
||||||
|
The following are legal:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
OMIT 25 Dec THROUGH 6 Jan
|
||||||
|
OMIT 25 Dec 2024 THROUGH 6 Jan 2025
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
But the following are not:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
OMIT 25 Dec THROUGH 6 Jan 2025
|
||||||
|
OMIT 25 Dec 2024 THROUGH 6 Jan
|
||||||
|
.nf
|
||||||
.PP
|
.PP
|
||||||
You can debug your global OMITs with the following command:
|
You can debug your global OMITs with the following command:
|
||||||
.PP
|
.PP
|
||||||
@@ -2307,21 +2343,26 @@ The latitude of your location, expressed as a string that is a floating-point
|
|||||||
number. Because \fBRemind\fR does not have a native floating-point type,
|
number. Because \fBRemind\fR does not have a native floating-point type,
|
||||||
we need to express it as a string. $Latitude can range from "-90.0" to
|
we need to express it as a string. $Latitude can range from "-90.0" to
|
||||||
"90.0", with positive numbers representing points north of the equator
|
"90.0", with positive numbers representing points north of the equator
|
||||||
and negative numbers representing south.
|
and negative numbers representing south. Note that regardless of your
|
||||||
|
locale, $Latitude is always interpreted in the "C" locale and as such,
|
||||||
|
the decimal point must be a period (".").
|
||||||
.TP
|
.TP
|
||||||
.B $Longitude (STRING type)
|
.B $Longitude (STRING type)
|
||||||
The longitude of your location, expressed as a string that is a floating-point
|
The longitude of your location, expressed as a string that is a floating-point
|
||||||
number. Because \fBRemind\fR does not have a native floating-point type,
|
number. Because \fBRemind\fR does not have a native floating-point type,
|
||||||
we need to express it as a string. $Longitude can range from "-180.0" to
|
we need to express it as a string. $Longitude can range from "-180.0" to
|
||||||
"180.0", with positive numbers representing points east of the Greenwich
|
"180.0", with positive numbers representing points east of the Greenwich
|
||||||
Meridian and negative numbers representing west.
|
Meridian and negative numbers representing west. Note that regardless of your
|
||||||
|
locale, $Longitude is always interpreted in the "C" locale and as such,
|
||||||
|
the decimal point must be a period (".").
|
||||||
.RS
|
.RS
|
||||||
.PP
|
.PP
|
||||||
For example, the coordinates of the Statue of Liberty in New York City
|
For example, the coordinates of the Statue of Liberty in New York City
|
||||||
are approximately set by:
|
are approximately set by:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
SET $Latitude "40.68933"
|
SET $Latitude "40.68933"
|
||||||
SET $Longitude "-74.04454"
|
SET $Longitude "-74.04454"
|
||||||
.fi
|
.fi
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
@@ -2437,6 +2478,26 @@ order, or 2 if sorting by time in descending order.
|
|||||||
The number of spaces by which all lines (except the first) of an
|
The number of spaces by which all lines (except the first) of an
|
||||||
\fBMSF\fR-type reminder should be indented. The default is 0.
|
\fBMSF\fR-type reminder should be indented. The default is 0.
|
||||||
.TP
|
.TP
|
||||||
|
.B $SuppressLRM
|
||||||
|
Normally, when Remind is run with the \fB\-c\fR option in a UTF-8 locale,
|
||||||
|
it emits a left-to-right mark sequence after printing day names or
|
||||||
|
reminders. Some terminals render this incorrectly, so you can use:
|
||||||
|
.RS
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
SET $SuppressLRM 1
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
at the top of your reminder file to suppress the LRM sequences, or you
|
||||||
|
can invoke Remind with the option \fB'\-i$SuppressLRM=1'\fR.
|
||||||
|
.RE
|
||||||
|
.TP
|
||||||
|
.B $SysInclude (read-only, STRING type)
|
||||||
|
A directory path containing standard reminder scripts. Currently,
|
||||||
|
Remind ships with some standard holiday files and language packs.
|
||||||
|
The value of \fB$SysInclude\fR is likely to be something like
|
||||||
|
"/usr/share/remind" or "/usr/local/share/remind"
|
||||||
|
.TP
|
||||||
.B $T (read-only, DATE type)
|
.B $T (read-only, DATE type)
|
||||||
Exactly equivalent to \fBtrigdate()\fR. (See BUILT-IN FUNCTIONS.)
|
Exactly equivalent to \fBtrigdate()\fR. (See BUILT-IN FUNCTIONS.)
|
||||||
.TP
|
.TP
|
||||||
@@ -3027,6 +3088,27 @@ Returns a string that is the ordinal number \fInum\fR. For example,
|
|||||||
.B ostype()
|
.B ostype()
|
||||||
Returns "UNIX". Remind used to run on OS/2 and MS-DOS, but does not
|
Returns "UNIX". Remind used to run on OS/2 and MS-DOS, but does not
|
||||||
any longer.
|
any longer.
|
||||||
|
.TP
|
||||||
|
.B pad(x_arg, s_padstr, i_len [, i_right])
|
||||||
|
Converts the first argument \fIarg\fR to a string if necessary, and
|
||||||
|
then if it is shorter than \fIlen\fR characters, pads to to
|
||||||
|
\fIlen\fR characters using as many copies (including partial copies)
|
||||||
|
of \fIpadstr\fR as necessary. By default, the string is left-padded,
|
||||||
|
but if \fIright\fR is supplied and non-zero, the string will
|
||||||
|
be right-padded.
|
||||||
|
.RS
|
||||||
|
.PP
|
||||||
|
Here are some examples:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
pad(3, "0", 2) --> "03"
|
||||||
|
pad(465, "0", 2) --> "465"
|
||||||
|
pad("foo", " ", 5) --> " foo"
|
||||||
|
pad("foo", " ", 5, 1) --> "foo "
|
||||||
|
pad("foo", "bar", 11) --> "barbarbafoo"
|
||||||
|
.fi
|
||||||
|
.RE
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B plural(i_num [,s_str1 [,s_str2]])
|
.B plural(i_num [,s_str1 [,s_str2]])
|
||||||
Can take from one to three arguments. If one argument is supplied, returns
|
Can take from one to three arguments. If one argument is supplied, returns
|
||||||
@@ -3175,7 +3257,7 @@ takes \fIa\fR back to 2009-05-13.
|
|||||||
.TP
|
.TP
|
||||||
.B strlen(s_str)
|
.B strlen(s_str)
|
||||||
Returns the length of \fIstr\fR. If the length of \fIstr\fR is too large
|
Returns the length of \fIstr\fR. If the length of \fIstr\fR is too large
|
||||||
to represent as an integers, emits a "Number too high" error.
|
to represent as an integer, emits a "Number too high" error.
|
||||||
.TP
|
.TP
|
||||||
.B substr(s_str, i_start [,i_end])
|
.B substr(s_str, i_start [,i_end])
|
||||||
Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from
|
Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from
|
||||||
@@ -3236,6 +3318,7 @@ non-zero trigger date.
|
|||||||
\fBIFTRIG\fR. For example, if you have meetings every Monday in
|
\fBIFTRIG\fR. For example, if you have meetings every Monday in
|
||||||
June and July, and you want warnings 3 days in advance, you
|
June and July, and you want warnings 3 days in advance, you
|
||||||
could use:
|
could use:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM [trig("Mon Jun +3", "Mon July +3")] +3 MSG Meeting %b
|
REM [trig("Mon Jun +3", "Mon July +3")] +3 MSG Meeting %b
|
||||||
.fi
|
.fi
|
||||||
@@ -4668,7 +4751,7 @@ error messages. For an example of this, define the following:
|
|||||||
fset msgprefix(x) x/0
|
fset msgprefix(x) x/0
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
.SH SUPPORT FOR OTHER LANGUAGES
|
.SH COMPILE-TIME SUPPORT FOR OTHER LANGUAGES
|
||||||
.PP
|
.PP
|
||||||
Your version of \fBRemind\fR may have been compiled to support a
|
Your version of \fBRemind\fR may have been compiled to support a
|
||||||
language other than English. This support may or may not be complete -
|
language other than English. This support may or may not be complete -
|
||||||
@@ -4681,10 +4764,14 @@ selected language rather than for English.
|
|||||||
Note that a non-English version of \fBRemind\fR will accept \fIonly\fR
|
Note that a non-English version of \fBRemind\fR will accept \fIonly\fR
|
||||||
English names of weekdays and months in a reminder script.
|
English names of weekdays and months in a reminder script.
|
||||||
.PP
|
.PP
|
||||||
If there is no support for your particular language, you can set
|
.SH RUN-TIME SUPPORT FOR OTHER LANGUAGES
|
||||||
\fBRemind\fR system variables so that calendars are printed using
|
.PP
|
||||||
your language's day and month names. The system variables that you
|
\fBRemind\fR has run-time support for other languages, and it is
|
||||||
can set are:
|
expected that compile-time support will be deprecated in favour of
|
||||||
|
run-time support.
|
||||||
|
.PP
|
||||||
|
A number of system variables let you translate various phrases
|
||||||
|
to other languages. These system variables are:
|
||||||
.PP
|
.PP
|
||||||
.TP
|
.TP
|
||||||
.B $Monday, $Tuesday, $Wednesday, $Thursday, $Friday, $Saturday
|
.B $Monday, $Tuesday, $Wednesday, $Thursday, $Friday, $Saturday
|
||||||
@@ -4694,16 +4781,126 @@ day's name in your language. Strings must be valid UTF-8 strings.
|
|||||||
.B $January, $February, $March, $April, $May, $June, $July, $August, $September, $October, $November, $December
|
.B $January, $February, $March, $April, $May, $June, $July, $August, $September, $October, $November, $December
|
||||||
Set each of these system variables to a string representing the corresponding
|
Set each of these system variables to a string representing the corresponding
|
||||||
month's name in your language. Strings must be valid UTF-8 strings.
|
month's name in your language. Strings must be valid UTF-8 strings.
|
||||||
|
.TP
|
||||||
|
.B $Ago, $Am, $And, $At, $Hour, $Is, $Minute, $Now, $On, $Pm, $Was
|
||||||
|
Set each of these system variables to the translation of the corresponding
|
||||||
|
English word into your language. Note that \fB$Am\fR and \fB$Pm\fR should
|
||||||
|
be the translations of "AM" and "PM" (morning and afternoon time indicators)
|
||||||
|
respectively.
|
||||||
|
.TP
|
||||||
|
.B $Hplu, $Mplu
|
||||||
|
Set these to the suffix to add to the word for "hour" and "minute" to
|
||||||
|
make them plural. In English, both would be set to "s".
|
||||||
|
.TP
|
||||||
|
.B $Fromnow
|
||||||
|
Set this to the translation of the English phrase "from now"
|
||||||
.PP
|
.PP
|
||||||
Note that if you set the day- or month-name system variables, they
|
Note that if you set any of the language-related system variables,
|
||||||
should be set in a section of your script that always is evaluated.
|
they should be set in a section of your script that always is
|
||||||
If you set them inside an \fBIF\fR statement, for example, results
|
evaluated. If you set them inside an \fBIF\fR statement, for example,
|
||||||
are unpredictable.
|
results are unpredictable.
|
||||||
.PP
|
.PP
|
||||||
Note also that the \fBRem2PS\fR back-end does not support the full
|
Note also that the \fBRem2PS\fR back-end does not support the full
|
||||||
range of UTF-8 characters. The \fBTkRemind\fR, \fBrem2html\fR and
|
range of UTF-8 characters. The \fBTkRemind\fR, \fBrem2html\fR and
|
||||||
\fBrem2pdf\fR back-ends all do support the full UTF-8 range.
|
\fBrem2pdf\fR back-ends all do support the full UTF-8 range.
|
||||||
|
.PP
|
||||||
|
.SH RUN-TIME MODIFICATION OF THE SUBSTITUTION FILTER
|
||||||
|
.PP
|
||||||
|
The system variables mentioned in the previous section are not typically
|
||||||
|
sufficient to properly translate Remind's output to another language.
|
||||||
|
Some languages have complicated rules for AM vs PM times and others have
|
||||||
|
complex rules for making words plural. \fBRemind\fR therefore allows
|
||||||
|
you to define a number of functions that modify the behavior of
|
||||||
|
the substitution filter at run-time. The functions are:
|
||||||
|
.PP
|
||||||
|
.TP
|
||||||
|
.B subst_ampm(h)
|
||||||
|
This function is passed a single integer, namely an hour from 0 to 23.
|
||||||
|
It should return a string that indicates "AM" or "PM" or even finer
|
||||||
|
gradations in some languages.
|
||||||
|
.TP
|
||||||
|
.B subst_ordinal(d)
|
||||||
|
This function is passed a single integer, namely a day of the month from
|
||||||
|
1 to 31. It should return a string that is suffixed to the day number to
|
||||||
|
turn it into an ordinal number. In English, for example, the function
|
||||||
|
might return "st", "nd", "rd" or "th", depending on \fId\fR.
|
||||||
|
.TP
|
||||||
|
.B subst_N(alt, date, time)
|
||||||
|
This is actually a \fIfamily\fR of functions, where \fIN\fR is a letter
|
||||||
|
or number. This function \fIcompletely overrides\fR the substitution
|
||||||
|
sequence "%X". The three arguments are an integer \fIalt\fR which,
|
||||||
|
if non-zero, indicates that the alternate-mode substitution sequence
|
||||||
|
"%*X" was encountered; \fIdate\fR which is the trigger date of the
|
||||||
|
reminder and \fItime\fR which is the trigger time.
|
||||||
|
.TP
|
||||||
|
.B subst_Nx(alt, date, time)
|
||||||
|
Again, this is a \fIfamily\fR of functions. It is similar to the
|
||||||
|
\fBsubst_N\fR family except it is only called if \fIdate\fR is two or
|
||||||
|
more days away from \fItoday()\fR. This is useful if you don't want to
|
||||||
|
override the "today" or "tomorrow" output for most substitution sequences.
|
||||||
|
.PP
|
||||||
|
Here's an example of how you might customize your substitution filter.
|
||||||
|
Suppose you want to change the "%b" sequence to substitute "the day
|
||||||
|
after tomorrow" for an event two days from now. You could do this:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
FSET subst_bx(a,d,t) iif(d==today()+2, "the day after tomorrow", \
|
||||||
|
"in " + (d-today()) + " days' time")
|
||||||
|
REM [today()+3] ++3 MSG Event 1 is %b%
|
||||||
|
REM [today()+2] ++3 MSG Event 2 is %b%
|
||||||
|
REM [today()+1] ++3 MSG Event 3 is %b%
|
||||||
|
REM [today()] ++3 MSG Event 4 is %b%
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
The output of this script is:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
Event 1 is in 3 days' time
|
||||||
|
Event 2 is the day after tomorrow
|
||||||
|
Event 3 is tomorrow
|
||||||
|
Event 4 is today
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
Note how Event 2's wording was changed from the normal "in 2 days'
|
||||||
|
time", and note also that the "tomorrow" and "today" events used the
|
||||||
|
normal substitution---\fBsubst_bx\fR is not called for trigger days of
|
||||||
|
today or tomorrow.
|
||||||
|
.PP
|
||||||
|
As a special case, if a \fBsubst_Nx\fB or \fBsubst_N\fR function
|
||||||
|
returns the integer zero, then the normal substitution mechanism is
|
||||||
|
used. Therefore, the previous example could have been written more simply
|
||||||
|
as:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
FSET subst_bx(a,d,t) iif(d==today()+2, "the day after tomorrow", 0)
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
.SH LANGUAGE PACKS
|
||||||
|
.PP
|
||||||
|
\fBRemind\fR ships with a number of language packs, which are simply reminder
|
||||||
|
scripts located in \fB[$SysInclude]/lang\fR. The currently-shipping
|
||||||
|
language packs are:
|
||||||
|
.PP
|
||||||
|
da.rem (Danish), de.rem (German), es.rem (Spanish), fr.rem (French),
|
||||||
|
is.rem (Icelandic), it.rem (Italian), nl.rem (Dutch), no.rem (Norwegian),
|
||||||
|
pl.rem (Polish), pt.rem (Portuguese) and ro.rem (Romanian).
|
||||||
|
.PP
|
||||||
|
To use a language pack (in this example, de.rem), simply place this at
|
||||||
|
the top of your reminders file:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
INCLUDE [$SysInclude]/lang/de.rem
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
If you want \fBRemind\fR to try to find the language pack appropriate
|
||||||
|
for your locale settings, use:
|
||||||
|
.PP
|
||||||
|
.nf
|
||||||
|
INCLUDE [$SysInclude]/lang/auto.rem
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
You are encouraged to study the language packs to see how to translate
|
||||||
|
Remind into additional languages.
|
||||||
.PP
|
.PP
|
||||||
.SH THE HEBREW CALENDAR
|
.SH THE HEBREW CALENDAR
|
||||||
.PP
|
.PP
|
||||||
@@ -4912,10 +5109,12 @@ should attempt to support. They are currently supported by
|
|||||||
.PP
|
.PP
|
||||||
The \fBSHADE\fR special replaces the \fBpsshade()\fR function.
|
The \fBSHADE\fR special replaces the \fBpsshade()\fR function.
|
||||||
Use it like this:
|
Use it like this:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Sat Sun SPECIAL SHADE 128
|
REM Sat Sun SPECIAL SHADE 128
|
||||||
REM Mon SPECIAL SHADE 255 0 0
|
REM Mon SPECIAL SHADE 255 0 0
|
||||||
.fi
|
.fi
|
||||||
|
.PP
|
||||||
The \fBSHADE\fR keyword is followed by either one or three numbers,
|
The \fBSHADE\fR keyword is followed by either one or three numbers,
|
||||||
from 0 to 255. If one number is supplied, it is interpreted as
|
from 0 to 255. If one number is supplied, it is interpreted as
|
||||||
a grey-scale value from black (0) to white (255). If three numbers
|
a grey-scale value from black (0) to white (255). If three numbers
|
||||||
@@ -4926,14 +5125,17 @@ in calendars produced by \fBRem2PS\fR, \fBtkremind\fR and \fBrem2html\fR.)
|
|||||||
.PP
|
.PP
|
||||||
The \fBMOON\fR special replaces the \fBpsmoon()\fR function. Use it
|
The \fBMOON\fR special replaces the \fBpsmoon()\fR function. Use it
|
||||||
like this:
|
like this:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM [moondate(0)] SPECIAL MOON 0
|
REM [moondate(0)] SPECIAL MOON 0
|
||||||
REM [moondate(1)] SPECIAL MOON 1
|
REM [moondate(1)] SPECIAL MOON 1
|
||||||
REM [moondate(2)] SPECIAL MOON 2
|
REM [moondate(2)] SPECIAL MOON 2
|
||||||
REM [moondate(3)] SPECIAL MOON 3
|
REM [moondate(3)] SPECIAL MOON 3
|
||||||
.fi
|
.fi
|
||||||
|
.PP
|
||||||
These draw little moons on the various calendars. The complete syntax
|
These draw little moons on the various calendars. The complete syntax
|
||||||
of the \fBMOON\fR special is as follows:
|
of the \fBMOON\fR special is as follows:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
... SPECIAL MOON phase moonsize fontsize msg
|
... SPECIAL MOON phase moonsize fontsize msg
|
||||||
.fi
|
.fi
|
||||||
@@ -4954,12 +5156,12 @@ and \fIfontsize\fR; the other backends use fixed sizes.
|
|||||||
.PP
|
.PP
|
||||||
The \fBCOLOR\fR special lets you place colored reminders in the
|
The \fBCOLOR\fR special lets you place colored reminders in the
|
||||||
calendar. Use it like this:
|
calendar. Use it like this:
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM ... SPECIAL COLOR 255 0 0 This is a bright red reminder
|
REM ... SPECIAL COLOR 255 0 0 This is a bright red reminder
|
||||||
REM ... SPECIAL COLOR 0 128 0 This is a dark green reminder
|
REM ... SPECIAL COLOR 0 128 0 This is a dark green reminder
|
||||||
.fi
|
.fi
|
||||||
|
.PP
|
||||||
You can spell COLOR either the American way ("COLOR") or the British
|
You can spell COLOR either the American way ("COLOR") or the British
|
||||||
way ("COLOUR"). This manual will use the American way.
|
way ("COLOUR"). This manual will use the American way.
|
||||||
|
|
||||||
@@ -4980,11 +5182,11 @@ number in the calendar. For example, this would number each Monday
|
|||||||
with the ISO 8601 week number. The week number is shown like this:
|
with the ISO 8601 week number. The week number is shown like this:
|
||||||
"(W\fIn\fR)" in this example, but you can put whatever text you like
|
"(W\fIn\fR)" in this example, but you can put whatever text you like
|
||||||
after the WEEK keyword.
|
after the WEEK keyword.
|
||||||
|
.PP
|
||||||
.nf
|
.nf
|
||||||
REM Monday SPECIAL WEEK (W[weekno()])
|
REM Monday SPECIAL WEEK (W[weekno()])
|
||||||
.fi
|
.fi
|
||||||
|
.PP
|
||||||
.SH MISCELLANEOUS
|
.SH MISCELLANEOUS
|
||||||
.PP
|
.PP
|
||||||
.B COMMAND ABBREVIATIONS
|
.B COMMAND ABBREVIATIONS
|
||||||
@@ -5242,9 +5444,6 @@ are not implemented as read-only system variables.
|
|||||||
.PP
|
.PP
|
||||||
Hebrew dates in \fBRemind\fR change at midnight instead of sunset.
|
Hebrew dates in \fBRemind\fR change at midnight instead of sunset.
|
||||||
.PP
|
.PP
|
||||||
Language should be selectable at run-time, not compile-time. Don't
|
|
||||||
expect this to happen soon!
|
|
||||||
.PP
|
|
||||||
\fBRemind\fR has some built-in limits (for example, number of global
|
\fBRemind\fR has some built-in limits (for example, number of global
|
||||||
\fBOMIT\fRs.)
|
\fBOMIT\fRs.)
|
||||||
.PP
|
.PP
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH TKREMIND 1 "15 January 2021"
|
.TH TKREMIND 1 "14 March 2022"
|
||||||
.UC 4
|
.UC 4
|
||||||
.SH NAME
|
.SH NAME
|
||||||
tkremind \- graphical front-end to Remind calendar program
|
tkremind \- graphical front-end to Remind calendar program
|
||||||
@@ -18,13 +18,13 @@ as well as the tcllib extension. It also requires a \fBwish\fR
|
|||||||
binary. If you are using Tcl/Tk 8.5, you may also need either the Img
|
binary. If you are using Tcl/Tk 8.5, you may also need either the Img
|
||||||
or the tkpng extension to handle PNG images.
|
or the tkpng extension to handle PNG images.
|
||||||
|
|
||||||
.SH OPTIONS
|
.SH COMMAND-LINE OPTIONS
|
||||||
\fBTkRemind\fR itself has no options. However, it passes certain options
|
\fBTkRemind\fR itself has no command-line options. However, it passes
|
||||||
on to \fBRemind\fR. The options it passes are
|
certain options on to \fBRemind\fR. The options it passes are
|
||||||
\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR.
|
\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR. See the
|
||||||
See the \fBRemind\fR man page for details about the options.
|
\fBRemind\fR man page for details about the options. Note that
|
||||||
Note that \fBTkRemind\fR will respect the \fB\-m\fR and
|
\fBTkRemind\fR will respect the \fB\-m\fR and \fB\-b1\fR options and
|
||||||
\fB\-b1\fR options and adjust its appearance accordingly.
|
adjust its appearance accordingly.
|
||||||
|
|
||||||
\fIRead_file\fR is the file from which \fBTkRemind\fR reads reminders.
|
\fIRead_file\fR is the file from which \fBTkRemind\fR reads reminders.
|
||||||
It is in standard \fBRemind\fR format. \fIWrite_file\fR is the file
|
It is in standard \fBRemind\fR format. \fIWrite_file\fR is the file
|
||||||
@@ -44,8 +44,14 @@ include the line:
|
|||||||
.PP
|
.PP
|
||||||
|
|
||||||
\fIConfig_file\fR is the file in which \fBTkRemind\fR stores
|
\fIConfig_file\fR is the file in which \fBTkRemind\fR stores
|
||||||
its options. If it is omitted, it defaults to \fI$HOME/.tkremindrt\fR.
|
its options. If it is omitted, it defaults to \fI$HOME/.config/tkremindrc\fR.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
If \fB$HOME/.reminders\fR is a \fIdirectory\fR, then \fBTkRemind\fR defaults to
|
||||||
|
reading \fB$HOME/.reminders\fR and writing new reminders to
|
||||||
|
\fB$HOME/.reminders/100-tkremind.rem\fR. If you want to keep your
|
||||||
|
reminders in a directory \fB$HOME/.reminders\fR, you should create that
|
||||||
|
directory before starting \fBTkRemind\fR.
|
||||||
.SH THE CALENDAR WINDOW
|
.SH THE CALENDAR WINDOW
|
||||||
When you start \fBTkRemind\fR, it displays a calendar for the current
|
When you start \fBTkRemind\fR, it displays a calendar for the current
|
||||||
month, with today's date highlighted. Reminders are filled into each
|
month, with today's date highlighted. Reminders are filled into each
|
||||||
@@ -274,7 +280,7 @@ Similar to Change entry font, but applies to calendar heading
|
|||||||
.PP
|
.PP
|
||||||
Once you've configured the options the way you like them,
|
Once you've configured the options the way you like them,
|
||||||
press \fBApply Options\fR to put them into effect, \fBSave Options\fR
|
press \fBApply Options\fR to put them into effect, \fBSave Options\fR
|
||||||
to put them into effect and save them in $HOME/.tkremindrc, or
|
to put them into effect and save them in $HOME/.config/tkremindrc, or
|
||||||
\fBCancel\fR to cancel any changes you made.
|
\fBCancel\fR to cancel any changes you made.
|
||||||
|
|
||||||
.SH KEYBOARD SHORTCUTS
|
.SH KEYBOARD SHORTCUTS
|
||||||
@@ -293,6 +299,19 @@ Next Month
|
|||||||
.B Home
|
.B Home
|
||||||
Today
|
Today
|
||||||
|
|
||||||
|
.SH IMMEDIATE UPDATES
|
||||||
|
|
||||||
|
If you are running \fBTkRemind\fR on Linux and have the
|
||||||
|
\fBinotifywait\fR program installed (part of the \fBinotify-tools\fR
|
||||||
|
or similar package), then \fBTkRemind\fR redraws the calendar window
|
||||||
|
\fIimmediately\fR if \fB$HOME/.reminders\fR changes (or, if it is a
|
||||||
|
directory, any files in that directory change.)
|
||||||
|
.PP
|
||||||
|
This lets \fBTkRemind\fR react immediately to hand-edited reminders or
|
||||||
|
to reminder files that are imported from another calendar system (for example,
|
||||||
|
you may have a cron job that periodically imports your Google Calendar
|
||||||
|
entries into Remind format.)
|
||||||
|
|
||||||
.SH ODDS AND ENDS
|
.SH ODDS AND ENDS
|
||||||
\fBTkRemind\fR performs some basic consistency checks when you add or
|
\fBTkRemind\fR performs some basic consistency checks when you add or
|
||||||
preview a reminder. However, if you edit a reminder in the previewer,
|
preview a reminder. However, if you edit a reminder in the previewer,
|
||||||
@@ -323,8 +342,7 @@ You can use this to activate certain reminders in different ways
|
|||||||
for \fBTkRemind\fR (for example).
|
for \fBTkRemind\fR (for example).
|
||||||
.PP
|
.PP
|
||||||
\fBTkRemind\fR uses tags to keep track of reminders in the
|
\fBTkRemind\fR uses tags to keep track of reminders in the
|
||||||
script file. It also places special comments in the reminder
|
script file. You can certainly mix
|
||||||
file to store additional state. You can certainly mix
|
|
||||||
"hand-crafted" reminders with reminders created by \fBTkRemind\fR
|
"hand-crafted" reminders with reminders created by \fBTkRemind\fR
|
||||||
if you are aware of the following rules and limitations:
|
if you are aware of the following rules and limitations:
|
||||||
.TP
|
.TP
|
||||||
@@ -334,15 +352,16 @@ where \fInnn\fR is a number. You should not use such \fBTAG\fRs
|
|||||||
in hand-crafted reminders.
|
in hand-crafted reminders.
|
||||||
.TP
|
.TP
|
||||||
o
|
o
|
||||||
Do not edit lines starting with "# TKTAGnnn", "# TKEND", or any
|
|
||||||
lines in between. You can move such lines, but be careful to move
|
|
||||||
them as a single block.
|
|
||||||
.TP
|
|
||||||
o
|
|
||||||
Hand-crafted reminders cannot be edited with \fBTkRemind\fR, and
|
Hand-crafted reminders cannot be edited with \fBTkRemind\fR, and
|
||||||
for hand-crafted timed reminders, you will not be presented with
|
for hand-crafted timed reminders, you will not be presented with
|
||||||
the "Don't remind me again" option when they pop up.
|
the "Don't remind me again" option when they pop up.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
However, rather than mixing hand-edited files with \fBTkRemind\fR-generated
|
||||||
|
ones, it is better to make \fB$HOME/.reminders\fR a directory and keep
|
||||||
|
your hand-edited files in a separate \fB*.rem\fR file than \fBTkRemind\fR's
|
||||||
|
\fB100-tkremind.rem\fR file.
|
||||||
|
|
||||||
.SH SERVER MODE
|
.SH SERVER MODE
|
||||||
|
|
||||||
\fBRemind\fR has a special mode for interacting with programs like
|
\fBRemind\fR has a special mode for interacting with programs like
|
||||||
@@ -400,13 +419,13 @@ This line is emitted in response to a \fBSTATUS\fR command. The number
|
|||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
TkRemind was written by Dianne Skoll <dianne@skoll.ca>
|
TkRemind was written by Dianne Skoll <dianne@skoll.ca>
|
||||||
|
|
||||||
\fBTkRemind\fR is Copyright 1996-2020 by Dianne Skoll.
|
\fBTkRemind\fR is Copyright 1996-2022 by Dianne Skoll.
|
||||||
|
|
||||||
.SH FILES
|
.SH FILES
|
||||||
|
|
||||||
$HOME/.reminders -- default reminder file.
|
$HOME/.reminders -- default reminder file or directory.
|
||||||
|
|
||||||
$HOME/.tkremindrc -- \fBTkRemind\fR saved options.
|
$HOME/.config/tkremindrc -- \fBTkRemind\fR saved options.
|
||||||
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
\fBremind\fR, \fBrem2ps\fR, \fBrem2pdf\fR, \fBrem2html\fR
|
\fBremind\fR, \fBrem2ps\fR, \fBrem2pdf\fR, \fBrem2html\fR
|
||||||
|
|||||||
@@ -33,10 +33,16 @@ install:
|
|||||||
$(MAKE) install DESTDIR=$(DESTDIR) "INSTALL_BASE=$(INSTALL_BASE)" && exit 0; \
|
$(MAKE) install DESTDIR=$(DESTDIR) "INSTALL_BASE=$(INSTALL_BASE)" && exit 0; \
|
||||||
elif test "$(prefix)" = "/usr" ; then \
|
elif test "$(prefix)" = "/usr" ; then \
|
||||||
$(MAKE) install DESTDIR=$(DESTDIR) INSTALLDIRS=vendor && exit 0; \
|
$(MAKE) install DESTDIR=$(DESTDIR) INSTALLDIRS=vendor && exit 0; \
|
||||||
else \
|
elif test "$(prefix)" = "/usr/local" ; then \
|
||||||
$(MAKE) install DESTDIR=$(DESTDIR) && exit 0; \
|
$(MAKE) install DESTDIR=$(DESTDIR) && exit 0; \
|
||||||
|
else \
|
||||||
|
$(MAKE) install DESTDIR=$(DESTDIR) "INSTALL_BASE=$(prefix)" && exit 0; \
|
||||||
fi; \
|
fi; \
|
||||||
exit 1;
|
exit 1;
|
||||||
|
|
||||||
Makefile: Makefile.PL
|
Makefile: Makefile.PL
|
||||||
$(PERL) Makefile.PL @PERLARTIFACTS@ INSTALL_BASE=$(INSTALL_BASE) || true
|
if test "$(prefix)" != "/usr" -a "$(prefix)" != "/usr/local" -a "$(INSTALL_BASE)" = "" ; then \
|
||||||
|
$(PERL) Makefile.PL @PERLARTIFACTS@ INSTALL_BASE=$(prefix) || true;\
|
||||||
|
else \
|
||||||
|
$(PERL) Makefile.PL @PERLARTIFACTS@ INSTALL_BASE=$(INSTALL_BASE) || true;\
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!@PERL@
|
#!@PERL@
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use lib '@prefix@/lib/perl5';
|
||||||
|
|
||||||
use Encode;
|
use Encode;
|
||||||
use Cairo;
|
use Cairo;
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ sub read_one_month_pp
|
|||||||
Given a hashref C<$hash> consisting of one entry parsed
|
Given a hashref C<$hash> consisting of one entry parsed
|
||||||
from the "remind -p" stream and a C<$specials_accepted> hash,
|
from the "remind -p" stream and a C<$specials_accepted> hash,
|
||||||
return 1 if we should include this entry in the calendar or
|
return 1 if we should include this entry in the calendar or
|
||||||
0 if mot.
|
0 if not.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub accept_special
|
sub accept_special
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
# A cheesy graphical front/back end for Remind using Tcl/Tk
|
# A cheesy graphical front/back end for Remind using Tcl/Tk
|
||||||
#
|
#
|
||||||
# This file is part of REMIND.
|
# This file is part of REMIND.
|
||||||
# Copyright (C) 1992-2021 Dianne Skoll
|
# Copyright (C) 1992-2022 Dianne Skoll
|
||||||
#
|
#
|
||||||
#--------------------------------------------------------------
|
#--------------------------------------------------------------
|
||||||
|
|
||||||
@@ -103,6 +103,9 @@ set OptDescr(RunCmd) "(String) If non-blank, run specified command when a pop-up
|
|||||||
set Option(FeedReminder) 0
|
set Option(FeedReminder) 0
|
||||||
set OptDescr(FeedReminder) "(0/1) If 1, feed the reminder to RunCmd on standard input (see RunCmd option)"
|
set OptDescr(FeedReminder) "(0/1) If 1, feed the reminder to RunCmd on standard input (see RunCmd option)"
|
||||||
|
|
||||||
|
set Option(DayAnchor) "center"
|
||||||
|
set OptDescr(DayAnchor) "(w/center/e) Anchor the day number to the left (w), center or right (e) of its container"
|
||||||
|
|
||||||
set Option(Editor) "emacs +%d %s"
|
set Option(Editor) "emacs +%d %s"
|
||||||
set OptDescr(Editor) "(String) Specify command to edit a file. %d is replaced with line number and %s with filename"
|
set OptDescr(Editor) "(String) Specify command to edit a file. %d is replaced with line number and %s with filename"
|
||||||
|
|
||||||
@@ -454,6 +457,7 @@ proc CreateCalFrame { w dayNames } {
|
|||||||
# Figure out reasonable height for text frames
|
# Figure out reasonable height for text frames
|
||||||
global SetFontsWorked
|
global SetFontsWorked
|
||||||
global Option
|
global Option
|
||||||
|
global MondayFirst
|
||||||
set h [winfo screenheight .]
|
set h [winfo screenheight .]
|
||||||
if {$h <= 480} {
|
if {$h <= 480} {
|
||||||
if {$SetFontsWorked} {
|
if {$SetFontsWorked} {
|
||||||
@@ -467,7 +471,6 @@ proc CreateCalFrame { w dayNames } {
|
|||||||
set h 5
|
set h 5
|
||||||
}
|
}
|
||||||
|
|
||||||
global MondayFirst
|
|
||||||
frame $w -background $Option(LineColor)
|
frame $w -background $Option(LineColor)
|
||||||
for {set i 0} {$i < 7} {incr i} {
|
for {set i 0} {$i < 7} {incr i} {
|
||||||
if {$MondayFirst} {
|
if {$MondayFirst} {
|
||||||
@@ -483,7 +486,7 @@ proc CreateCalFrame { w dayNames } {
|
|||||||
set n [expr $i*7]
|
set n [expr $i*7]
|
||||||
for {set j 0} {$j < 7} {incr j} {
|
for {set j 0} {$j < 7} {incr j} {
|
||||||
set f [expr $n+$j]
|
set f [expr $n+$j]
|
||||||
button $w.l$f -text "" -justify center -command "" \
|
button $w.l$f -text "" -justify center -command "" -anchor $Option(DayAnchor) \
|
||||||
-state disabled -relief flat -bd 0 -padx 0 -pady 0 -font HeadingFont -highlightthickness 1
|
-state disabled -relief flat -bd 0 -padx 0 -pady 0 -font HeadingFont -highlightthickness 1
|
||||||
text $w.t$f -width 12 -height $h -bd 0 -spacing3 3 -wrap word -relief flat \
|
text $w.t$f -width 12 -height $h -bd 0 -spacing3 3 -wrap word -relief flat \
|
||||||
-state disabled -takefocus 0 -cursor {} -font CalboxFont -foreground $Option(TextColor) -background $Option(BackgroundColor) \
|
-state disabled -takefocus 0 -cursor {} -font CalboxFont -foreground $Option(TextColor) -background $Option(BackgroundColor) \
|
||||||
@@ -544,7 +547,9 @@ proc ConfigureCalFrame { w firstDay numDays } {
|
|||||||
$w.t$i configure -state disabled -takefocus 0
|
$w.t$i configure -state disabled -takefocus 0
|
||||||
}
|
}
|
||||||
for {set i $first} {$i <= $last} {incr i} {
|
for {set i $first} {$i <= $last} {incr i} {
|
||||||
|
set row [expr ($i/7)+1]
|
||||||
grid $w.f$i
|
grid $w.f$i
|
||||||
|
grid rowconfigure $w $row -weight 1
|
||||||
pack $w.l$i -in $w.f$i -side top -expand 0 -fill x
|
pack $w.l$i -in $w.f$i -side top -expand 0 -fill x
|
||||||
pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
|
pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
|
||||||
raise $w.l$i
|
raise $w.l$i
|
||||||
@@ -578,7 +583,7 @@ proc ConfigureCalFrame { w firstDay numDays } {
|
|||||||
pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
|
pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
|
||||||
raise $w.l$i
|
raise $w.l$i
|
||||||
raise $w.t$i
|
raise $w.t$i
|
||||||
grid rowconfigure $w [expr $row+1] -weight 1
|
grid rowconfigure $w $row -weight 1
|
||||||
}
|
}
|
||||||
$w.l$i configure -text "" -command "" -state normal -relief flat -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
|
$w.l$i configure -text "" -command "" -state normal -relief flat -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
|
||||||
$w.l$i configure -state disabled
|
$w.l$i configure -state disabled
|
||||||
@@ -793,12 +798,26 @@ proc EditOptions {} {
|
|||||||
-text "Feed popped-up reminder to command's standard input" \
|
-text "Feed popped-up reminder to command's standard input" \
|
||||||
-variable tmpOpt(FeedReminder) -anchor w -justify left
|
-variable tmpOpt(FeedReminder) -anchor w -justify left
|
||||||
|
|
||||||
|
frame $w.ancFrame
|
||||||
|
label $w.ancLabel -text "Anchor day numbers to:"
|
||||||
|
radiobutton $w.ancLeft \
|
||||||
|
-text "Left" \
|
||||||
|
-variable tmpOpt(DayAnchor) -value "w" -anchor w -justify left
|
||||||
|
radiobutton $w.ancCenter \
|
||||||
|
-text "Center" \
|
||||||
|
-variable tmpOpt(DayAnchor) -value "center" -anchor w -justify left
|
||||||
|
radiobutton $w.ancRight \
|
||||||
|
-text "Right" \
|
||||||
|
-variable tmpOpt(DayAnchor) -value "e" -anchor w -justify left
|
||||||
|
pack $w.ancLabel $w.ancLeft $w.ancCenter $w.ancRight -in $w.ancFrame -side left
|
||||||
|
|
||||||
pack $w.startIconified -in $w.f -side top -expand 0 -fill x
|
pack $w.startIconified -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.showTodays -in $w.f -side top -expand 0 -fill x
|
pack $w.showTodays -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.confirmQuit -in $w.f -side top -expand 0 -fill x
|
pack $w.confirmQuit -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.bringDown -in $w.f -side top -expand 0 -fill x
|
pack $w.bringDown -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.ring -in $w.f -side top -expand 0 -fill x
|
pack $w.ring -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.deic -in $w.f -side top -expand 0 -fill x
|
pack $w.deic -in $w.f -side top -expand 0 -fill x
|
||||||
|
pack $w.ancFrame -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.sep1 -in $w.f -side top -expand 0 -fill x -ipady 1
|
pack $w.sep1 -in $w.f -side top -expand 0 -fill x -ipady 1
|
||||||
pack $w.rf -in $w.f -side top -expand 0 -fill x
|
pack $w.rf -in $w.f -side top -expand 0 -fill x
|
||||||
pack $w.feed -in $w.f -side top -expand 0 -fill x
|
pack $w.feed -in $w.f -side top -expand 0 -fill x
|
||||||
@@ -877,6 +896,13 @@ proc SaveOptions { w } {
|
|||||||
for {set i 0} {$i < 7} {incr i} {
|
for {set i 0} {$i < 7} {incr i} {
|
||||||
.cal.day$i configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
.cal.day$i configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
||||||
}
|
}
|
||||||
|
for {set i 0} {$i < 6} {incr i} {
|
||||||
|
set n [expr $i*7]
|
||||||
|
for {set j 0} {$j < 7} {incr j} {
|
||||||
|
set f [expr $n+$j]
|
||||||
|
.cal.l$f configure -anchor $Option(DayAnchor);
|
||||||
|
}
|
||||||
|
}
|
||||||
.b.status configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
.b.status configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
||||||
.b.nqueued configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
.b.nqueued configure -foreground $Option(LabelColor) -background $Option(WinBackground)
|
||||||
.b configure -background $Option(WinBackground)
|
.b configure -background $Option(WinBackground)
|
||||||
@@ -986,7 +1012,7 @@ proc ConfigureCalWindow { month year firstDay numDays } {
|
|||||||
proc FillCalWindow {} {
|
proc FillCalWindow {} {
|
||||||
set FileName ""
|
set FileName ""
|
||||||
set LineNo 0
|
set LineNo 0
|
||||||
global DayNames CurYear CurMonth MonthNames CommandLine Option TagToObj RemindErrors
|
global DayNames CurYear CurMonth MonthNames CommandLine Option TagToObj RemindErrors MondayFirst
|
||||||
|
|
||||||
array unset TagToObj
|
array unset TagToObj
|
||||||
|
|
||||||
@@ -1025,7 +1051,12 @@ proc FillCalWindow {} {
|
|||||||
|
|
||||||
# Update the day names in the calendar window
|
# Update the day names in the calendar window
|
||||||
for {set i 0} {$i < 7} {incr i} {
|
for {set i 0} {$i < 7} {incr i} {
|
||||||
.cal.day$i configure -text [lindex $DayNames $i]
|
if {$MondayFirst} {
|
||||||
|
set index [expr ($i+1)%7]
|
||||||
|
} else {
|
||||||
|
set index $i
|
||||||
|
}
|
||||||
|
.cal.day$i configure -text [lindex $DayNames $index]
|
||||||
}
|
}
|
||||||
set offset [CalEntryOffset $firstWkday]
|
set offset [CalEntryOffset $firstWkday]
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ test: remind
|
|||||||
@sh ../tests/test-rem
|
@sh ../tests/test-rem
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@CC@ -c @CPPFLAGS@ @CFLAGS@ @DEFS@ $(CEXTRA) $(LANGDEF) -I. -I$(srcdir) $<
|
@CC@ -c @CPPFLAGS@ @CFLAGS@ @DEFS@ $(CEXTRA) $(LANGDEF) -DSYSDIR=$(datarootdir)/remind -I. -I$(srcdir) $<
|
||||||
|
|
||||||
$(REMINDOBJS): $(REMINDHDRS)
|
$(REMINDOBJS): $(REMINDHDRS)
|
||||||
|
|
||||||
@@ -61,6 +61,8 @@ install-nostripped: all
|
|||||||
for man in $(MANS) ; do \
|
for man in $(MANS) ; do \
|
||||||
$(INSTALL_DATA) $$man $(DESTDIR)$(mandir)/man1 || exit 1; \
|
$(INSTALL_DATA) $$man $(DESTDIR)$(mandir)/man1 || exit 1; \
|
||||||
done
|
done
|
||||||
|
-mkdir -p $(DESTDIR)$(datarootdir)/remind || true
|
||||||
|
cp -R ../include/* $(DESTDIR)$(datarootdir)/remind
|
||||||
|
|
||||||
install: install-nostripped
|
install: install-nostripped
|
||||||
strip $(DESTDIR)$(bindir)/remind || true
|
strip $(DESTDIR)$(bindir)/remind || true
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* The code for generating a calendar. */
|
/* The code for generating a calendar. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -31,6 +31,7 @@
|
|||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "lang.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
@@ -258,6 +259,10 @@ static void WriteCalDays (void);
|
|||||||
static void
|
static void
|
||||||
send_lrm(void)
|
send_lrm(void)
|
||||||
{
|
{
|
||||||
|
/* Don't send LRM if SuppressLRM is set */
|
||||||
|
if (SuppressLRM) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
/* Send a lrm control sequence if UseUTF8Chars is enabled
|
/* Send a lrm control sequence if UseUTF8Chars is enabled
|
||||||
or char encoding is UTF-8
|
or char encoding is UTF-8
|
||||||
*/
|
*/
|
||||||
@@ -2245,14 +2250,14 @@ CalendarTime(int tim, int duration)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (h >= 12) {
|
if (h >= 12) {
|
||||||
ampm1 = L_PM;
|
ampm1 = DynamicPm;
|
||||||
} else {
|
} else {
|
||||||
ampm1 = L_AM;
|
ampm1 = DynamicAm;
|
||||||
}
|
}
|
||||||
if (h2 >= 12) {
|
if (h2 >= 12) {
|
||||||
ampm2 = L_PM;
|
ampm2 = DynamicPm;
|
||||||
} else {
|
} else {
|
||||||
ampm2 = L_AM;
|
ampm2 = DynamicAm;
|
||||||
}
|
}
|
||||||
if (!days) {
|
if (!days) {
|
||||||
if (!strcmp(ampm1, ampm2)) {
|
if (!strcmp(ampm1, ampm2)) {
|
||||||
@@ -2299,7 +2304,7 @@ char const *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, "%d%c%02d%s ", hh, TimeSep, min, (h>=12) ? L_PM : L_AM);
|
sprintf(buf, "%d%c%02d%s ", hh, TimeSep, min, (h>=12) ? DynamicPm : DynamicAm);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
54
src/compare-language-mods.pl
Executable file
54
src/compare-language-mods.pl
Executable file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
my $language_map = {
|
||||||
|
en => 'ENGLISH',
|
||||||
|
de => 'GERMAN',
|
||||||
|
nl => 'DUTCH',
|
||||||
|
fi => 'FINNISH',
|
||||||
|
fr => 'FRENCH',
|
||||||
|
'no' => 'NORWEGIAN',
|
||||||
|
da => 'DANISH',
|
||||||
|
pl => 'POLISH',
|
||||||
|
is => 'ICELANDIC',
|
||||||
|
pt => 'BRAZPORT',
|
||||||
|
it => 'ITALIAN',
|
||||||
|
ro => 'ROMANIAN',
|
||||||
|
es => 'SPANISH',
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!$ARGV[0]) {
|
||||||
|
print STDERR "Usage: $0 lang_code\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
my $lang = $ARGV[0];
|
||||||
|
if (!exists($language_map->{$lang})) {
|
||||||
|
print STDERR "$lang is not a valid language.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
my $flag = $language_map->{$lang};
|
||||||
|
print STDERR "Testing for: $lang - $flag.\n";
|
||||||
|
my_sys("make clean > /dev/null 2>&1") && die("make clean failed");
|
||||||
|
my_sys("make -j6 all LANGDEF=-DLANG=$flag > /dev/null 2>&1") && die("make all failed");
|
||||||
|
my_sys("./remind -q -r ../tests/tstlang.rem 2022-03-23 11:44 > test-$lang-compiled.out 2>&1");
|
||||||
|
|
||||||
|
my_sys("make clean > /dev/null 2>&1") && die("make clean failed");
|
||||||
|
my_sys("make -j6 all > /dev/null 2>&1") && die("make all failed");
|
||||||
|
my_sys("./remind -q -r -ii=\\\"../include/lang/$lang.rem\\\" ../tests/tstlang.rem 2022-03-23 11:44 > test-$lang-runtime.out 2>&1");
|
||||||
|
|
||||||
|
my $rc = my_sys("cmp test-$lang-compiled.out test-$lang-runtime.out > /dev/null 2>&1");
|
||||||
|
if ($rc == 0) {
|
||||||
|
print STDERR "Congrats! Compiled and runtime language output matches for $lang.\n";
|
||||||
|
} else {
|
||||||
|
print STDERR "Whoops. Compiled and runtime language output differs for $lang.\n"
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
sub my_sys
|
||||||
|
{
|
||||||
|
#print STDERR "Running: " . join(' ', @_) . "\n";
|
||||||
|
return system(@_);
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
/* which you can customize. */
|
/* which you can customize. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
/* The default values are initially set to the city hall in Ottawa, */
|
/* The default values are initially set to the city hall in Ottawa, */
|
||||||
/* Ontario, Canada. */
|
/* Ontario, Canada. */
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
#define DEFAULT_LATITUDE 45.42055555555555
|
#define DEFAULT_LATITUDE 45.420556
|
||||||
#define DEFAULT_LONGITUDE -75.68972222222223
|
#define DEFAULT_LONGITUDE -75.689722
|
||||||
#define LOCATION "Ottawa"
|
#define LOCATION "Ottawa"
|
||||||
|
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* which you can customize. */
|
/* which you can customize. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
/* The default values are initially set to the city hall in Ottawa, */
|
/* The default values are initially set to the city hall in Ottawa, */
|
||||||
/* Ontario, Canada. */
|
/* Ontario, Canada. */
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
#define DEFAULT_LATITUDE 45.42055555555555
|
#define DEFAULT_LATITUDE 45.420556
|
||||||
#define DEFAULT_LONGITUDE -75.68972222222223
|
#define DEFAULT_LONGITUDE -75.689722
|
||||||
#define LOCATION "Ottawa"
|
#define LOCATION "Ottawa"
|
||||||
|
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
/* commands. */
|
/* commands. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
299
src/dosubst.c
299
src/dosubst.c
@@ -6,11 +6,12 @@
|
|||||||
/* reminders are triggered. */
|
/* reminders are triggered. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "expr.h"
|
||||||
#define L_IN_DOSUBST
|
#define L_IN_DOSUBST
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -29,9 +30,6 @@
|
|||||||
#define NL "\n"
|
#define NL "\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char TODAY[] = L_TODAY;
|
|
||||||
static char TOMORROW[] = L_TOMORROW;
|
|
||||||
|
|
||||||
#define SHIP_OUT(s) if(DBufPuts(dbuf, s) != OK) return E_NO_MEM
|
#define SHIP_OUT(s) if(DBufPuts(dbuf, s) != OK) return E_NO_MEM
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
@@ -58,10 +56,17 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
char const *mplu, *hplu, *when, *plu;
|
char const *mplu, *hplu, *when, *plu;
|
||||||
int has_quote = 0;
|
int has_quote = 0;
|
||||||
char *ss;
|
char *ss;
|
||||||
|
char const *expr;
|
||||||
char *os;
|
char *os;
|
||||||
char s[256];
|
char s[256];
|
||||||
|
char uf[32];
|
||||||
|
char mypm[64];
|
||||||
|
char mycpm[64];
|
||||||
|
char myplu[64];
|
||||||
int origLen = DBufLen(dbuf);
|
int origLen = DBufLen(dbuf);
|
||||||
int altmode;
|
int altmode;
|
||||||
|
int r;
|
||||||
|
Value v;
|
||||||
|
|
||||||
FromJulian(jul, &y, &m, &d);
|
FromJulian(jul, &y, &m, &d);
|
||||||
|
|
||||||
@@ -74,16 +79,16 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_MPLU_OVER
|
#ifdef L_MPLU_OVER
|
||||||
L_MPLU_OVER
|
L_MPLU_OVER
|
||||||
#else /* L_MPLU_OVER */
|
#else /* L_MPLU_OVER */
|
||||||
mplu = (mdiff == 1 ? "" : L_MPLU);
|
mplu = (mdiff == 1 ? "" : DynamicMplu);
|
||||||
#endif /* L_MPLU_OVER */
|
#endif /* L_MPLU_OVER */
|
||||||
|
|
||||||
#ifdef L_HPLU_OVER
|
#ifdef L_HPLU_OVER
|
||||||
L_HPLU_OVER
|
L_HPLU_OVER
|
||||||
#else /* L_HPLU_OVER */
|
#else /* L_HPLU_OVER */
|
||||||
hplu = (hdiff == 1 ? "" : L_HPLU);
|
hplu = (hdiff == 1 ? "" : DynamicHplu);
|
||||||
#endif /* L_HPLU_OVER */
|
#endif /* L_HPLU_OVER */
|
||||||
|
|
||||||
when = (tdiff < 0 ? L_AGO : L_FROMNOW);
|
when = (tdiff < 0) ? DynamicAgo : DynamicFromnow;
|
||||||
|
|
||||||
h = tim / 60;
|
h = tim / 60;
|
||||||
min = tim % 60;
|
min = tim % 60;
|
||||||
@@ -91,7 +96,26 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_AMPM_OVERRIDE
|
#ifdef L_AMPM_OVERRIDE
|
||||||
L_AMPM_OVERRIDE (pm, h)
|
L_AMPM_OVERRIDE (pm, h)
|
||||||
#else
|
#else
|
||||||
pm = (h < 12) ? L_AM : L_PM;
|
r = -1;
|
||||||
|
if (UserFuncExists("subst_ampm") == 1) {
|
||||||
|
snprintf(s, sizeof(s), "subst_ampm(%d)", h);
|
||||||
|
expr = (char const *) s;
|
||||||
|
r = EvalExpr(&expr, &v, NULL);
|
||||||
|
if (r == OK) {
|
||||||
|
if (!DoCoerce(STR_TYPE, &v)) {
|
||||||
|
snprintf(mypm, sizeof(mypm), "%s", v.v.str);
|
||||||
|
pm = mypm;
|
||||||
|
} else {
|
||||||
|
r = -1;
|
||||||
|
}
|
||||||
|
DestroyValue(v);
|
||||||
|
} else {
|
||||||
|
Eprint("%s", ErrMsg[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r != OK) {
|
||||||
|
pm = (h < 12) ? DynamicAm : DynamicPm;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
hh = (h == 12) ? 12 : h % 12;
|
hh = (h == 12) ? 12 : h % 12;
|
||||||
|
|
||||||
@@ -101,25 +125,60 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_AMPM_OVERRIDE
|
#ifdef L_AMPM_OVERRIDE
|
||||||
L_AMPM_OVERRIDE (cpm, ch)
|
L_AMPM_OVERRIDE (cpm, ch)
|
||||||
#else
|
#else
|
||||||
cpm = (ch < 12) ? L_AM : L_PM;
|
r = -1;
|
||||||
|
if (UserFuncExists("subst_ampm") == 1) {
|
||||||
|
snprintf(s, sizeof(s), "subst_ampm(%d)", ch);
|
||||||
|
expr = (char const *) s;
|
||||||
|
r = EvalExpr(&expr, &v, NULL);
|
||||||
|
if (r == OK) {
|
||||||
|
if (!DoCoerce(STR_TYPE, &v)) {
|
||||||
|
snprintf(mycpm, sizeof(mycpm), "%s", v.v.str);
|
||||||
|
cpm = mycpm;
|
||||||
|
} else {
|
||||||
|
r = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Eprint("%s", ErrMsg[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r != OK) {
|
||||||
|
cpm = (h < 12) ? DynamicAm : DynamicPm;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
chh = (ch == 12) ? 12 : ch % 12;
|
chh = (ch == 12) ? 12 : ch % 12;
|
||||||
|
|
||||||
#ifdef L_ORDINAL_OVERRIDE
|
#ifdef L_ORDINAL_OVERRIDE
|
||||||
L_ORDINAL_OVERRIDE
|
L_ORDINAL_OVERRIDE;
|
||||||
#else
|
#else
|
||||||
switch(d) {
|
if (UserFuncExists("subst_ordinal") == 1) {
|
||||||
case 1:
|
snprintf(s, sizeof(s), "subst_ordinal(%d)", d);
|
||||||
case 21:
|
expr = (char const *) s;
|
||||||
case 31: plu = "st"; break;
|
r = EvalExpr(&expr, &v, NULL);
|
||||||
|
if (r == OK) {
|
||||||
|
if (!DoCoerce(STR_TYPE, &v)) {
|
||||||
|
snprintf(myplu, sizeof(myplu), "%s", v.v.str);
|
||||||
|
plu = myplu;
|
||||||
|
} else {
|
||||||
|
r = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Eprint("%s", ErrMsg[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r != OK) {
|
||||||
|
switch(d) {
|
||||||
|
case 1:
|
||||||
|
case 21:
|
||||||
|
case 31: plu = "st"; break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
case 22: plu = "nd"; break;
|
case 22: plu = "nd"; break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
case 23: plu = "rd"; break;
|
case 23: plu = "rd"; break;
|
||||||
|
|
||||||
default: plu = "th"; break;
|
default: plu = "th"; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -163,6 +222,29 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
done = 0;
|
done = 0;
|
||||||
|
snprintf(uf, sizeof(uf), "subst_%c", c);
|
||||||
|
if (UserFuncExists(uf) == 3) {
|
||||||
|
snprintf(s, sizeof(s), "subst_%c(%d,'%04d-%02d-%02d',%02d:%02d)",
|
||||||
|
c, altmode ? 1 : 0, y, m+1, d, h, min);
|
||||||
|
expr = (char const *) s;
|
||||||
|
r = EvalExpr(&expr, &v, NULL);
|
||||||
|
if (r == OK) {
|
||||||
|
if (v.type != INT_TYPE || v.v.val != 0) {
|
||||||
|
if (!DoCoerce(STR_TYPE, &v)) {
|
||||||
|
if (DBufPuts(dbuf, v.v.str) != OK) {
|
||||||
|
DestroyValue(v);
|
||||||
|
return E_NO_MEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DestroyValue(v);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DestroyValue(v);
|
||||||
|
} else {
|
||||||
|
Eprint("%s", ErrMsg[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (diff <= 1) {
|
if (diff <= 1) {
|
||||||
switch(UPPER(c)) {
|
switch(UPPER(c)) {
|
||||||
#ifndef L_NOTOMORROW_A
|
#ifndef L_NOTOMORROW_A
|
||||||
@@ -204,7 +286,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifndef L_NOTOMORROW_V
|
#ifndef L_NOTOMORROW_V
|
||||||
case 'V':
|
case 'V':
|
||||||
#endif
|
#endif
|
||||||
sprintf(s, "%s", (diff ? TOMORROW : TODAY));
|
snprintf(s, sizeof(s), "%s", (diff ? DynamicTomorrow: DynamicToday));
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
done = 1;
|
done = 1;
|
||||||
break;
|
break;
|
||||||
@@ -213,16 +295,42 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!done) {
|
||||||
|
snprintf(uf, sizeof(uf), "subst_%cx", c);
|
||||||
|
if (UserFuncExists(uf) == 3) {
|
||||||
|
snprintf(s, sizeof(s), "subst_%cx(%d,'%04d-%02d-%02d',%02d:%02d)",
|
||||||
|
c, altmode ? 1 : 0, y, m+1, d, h, min);
|
||||||
|
expr = (char const *) s;
|
||||||
|
r = EvalExpr(&expr, &v, NULL);
|
||||||
|
if (r == OK) {
|
||||||
|
if (v.type != INT_TYPE || v.v.val != 0) {
|
||||||
|
if (!DoCoerce(STR_TYPE, &v)) {
|
||||||
|
if (DBufPuts(dbuf, v.v.str) != OK) {
|
||||||
|
DestroyValue(v);
|
||||||
|
return E_NO_MEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DestroyValue(v);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DestroyValue(v);
|
||||||
|
} else {
|
||||||
|
Eprint("%s", ErrMsg[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!done) switch(UPPER(c)) {
|
if (!done) switch(UPPER(c)) {
|
||||||
case 'A':
|
case 'A':
|
||||||
#ifdef L_A_OVER
|
#ifdef L_A_OVER
|
||||||
L_A_OVER
|
L_A_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %d %s, %d", get_day_name(jul%7), d,
|
snprintf(s, sizeof(s), "%s, %d %s, %d", get_day_name(jul%7), d,
|
||||||
get_month_name(m), y);
|
get_month_name(m), y);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %d %s, %d", L_ON, get_day_name(jul%7), d,
|
snprintf(s, sizeof(s), "%s %s, %d %s, %d", DynamicOn, get_day_name(jul%7), d,
|
||||||
get_month_name(m), y);
|
get_month_name(m), y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -233,7 +341,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_B_OVER
|
#ifdef L_B_OVER
|
||||||
L_B_OVER
|
L_B_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, L_INXDAYS, diff);
|
snprintf(s, sizeof(s), L_INXDAYS, diff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -242,10 +350,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_C_OVER
|
#ifdef L_C_OVER
|
||||||
L_C_OVER
|
L_C_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s", get_day_name(jul%7));
|
snprintf(s, sizeof(s), "%s", get_day_name(jul%7));
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s", L_ON, get_day_name(jul%7));
|
snprintf(s, sizeof(s), "%s %s", DynamicOn, get_day_name(jul%7));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -255,7 +363,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_D_OVER
|
#ifdef L_D_OVER
|
||||||
L_D_OVER
|
L_D_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", d);
|
snprintf(s, sizeof(s), "%d", d);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -264,11 +372,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_E_OVER
|
#ifdef L_E_OVER
|
||||||
L_E_OVER
|
L_E_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%02d%c%02d%c%04d", d, DateSep,
|
snprintf(s, sizeof(s), "%02d%c%02d%c%04d", d, DateSep,
|
||||||
m+1, DateSep, y);
|
m+1, DateSep, y);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %02d%c%02d%c%04d", L_ON, d, DateSep,
|
snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", DynamicOn, d, DateSep,
|
||||||
m+1, DateSep, y);
|
m+1, DateSep, y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -279,10 +387,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_F_OVER
|
#ifdef L_F_OVER
|
||||||
L_F_OVER
|
L_F_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%02d%c%02d%c%04d", m+1, DateSep, d, DateSep, y);
|
snprintf(s, sizeof(s), "%02d%c%02d%c%04d", m+1, DateSep, d, DateSep, y);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %02d%c%02d%c%04d", L_ON, m+1, DateSep, d, DateSep, y);
|
snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", DynamicOn, m+1, DateSep, d, DateSep, y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -292,10 +400,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_G_OVER
|
#ifdef L_G_OVER
|
||||||
L_G_OVER
|
L_G_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %d %s", get_day_name(jul%7), d, get_month_name(m));
|
snprintf(s, sizeof(s), "%s, %d %s", get_day_name(jul%7), d, get_month_name(m));
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %d %s", L_ON, get_day_name(jul%7), d, get_month_name(m));
|
snprintf(s, sizeof(s), "%s %s, %d %s", DynamicOn, get_day_name(jul%7), d, get_month_name(m));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -305,10 +413,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_H_OVER
|
#ifdef L_H_OVER
|
||||||
L_H_OVER
|
L_H_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%02d%c%02d", d, DateSep, m+1);
|
snprintf(s, sizeof(s), "%02d%c%02d", d, DateSep, m+1);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %02d%c%02d", L_ON, d, DateSep, m+1);
|
snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicOn, d, DateSep, m+1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -318,10 +426,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_I_OVER
|
#ifdef L_I_OVER
|
||||||
L_I_OVER
|
L_I_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%02d%c%02d", m+1, DateSep, d);
|
snprintf(s, sizeof(s), "%02d%c%02d", m+1, DateSep, d);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %02d%c%02d", L_ON, m+1, DateSep, d);
|
snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicOn, m+1, DateSep, d);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -331,11 +439,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_J_OVER
|
#ifdef L_J_OVER
|
||||||
L_J_OVER
|
L_J_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %s %d%s, %d", get_day_name(jul%7),
|
snprintf(s, sizeof(s), "%s, %s %d%s, %d", get_day_name(jul%7),
|
||||||
get_month_name(m), d, plu, y);
|
get_month_name(m), d, plu, y);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %s %d%s, %d", L_ON, get_day_name(jul%7),
|
snprintf(s, sizeof(s), "%s %s, %s %d%s, %d", DynamicOn, get_day_name(jul%7),
|
||||||
get_month_name(m), d, plu, y);
|
get_month_name(m), d, plu, y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -346,11 +454,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_K_OVER
|
#ifdef L_K_OVER
|
||||||
L_K_OVER
|
L_K_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %s %d%s", get_day_name(jul%7),
|
snprintf(s, sizeof(s), "%s, %s %d%s", get_day_name(jul%7),
|
||||||
get_month_name(m), d, plu);
|
get_month_name(m), d, plu);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %s %d%s", L_ON, get_day_name(jul%7),
|
snprintf(s, sizeof(s), "%s %s, %s %d%s", DynamicOn, get_day_name(jul%7),
|
||||||
get_month_name(m), d, plu);
|
get_month_name(m), d, plu);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -361,10 +469,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_L_OVER
|
#ifdef L_L_OVER
|
||||||
L_L_OVER
|
L_L_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%04d%c%02d%c%02d", y, DateSep, m+1, DateSep, d);
|
snprintf(s, sizeof(s), "%04d%c%02d%c%02d", y, DateSep, m+1, DateSep, d);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %04d%c%02d%c%02d", L_ON, y, DateSep, m+1, DateSep, d);
|
snprintf(s, sizeof(s), "%s %04d%c%02d%c%02d", DynamicOn, y, DateSep, m+1, DateSep, d);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -374,7 +482,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_M_OVER
|
#ifdef L_M_OVER
|
||||||
L_M_OVER
|
L_M_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", get_month_name(m));
|
snprintf(s, sizeof(s), "%s", get_month_name(m));
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -383,7 +491,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_N_OVER
|
#ifdef L_N_OVER
|
||||||
L_N_OVER
|
L_N_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", m+1);
|
snprintf(s, sizeof(s), "%d", m+1);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -392,7 +500,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_O_OVER
|
#ifdef L_O_OVER
|
||||||
L_O_OVER
|
L_O_OVER
|
||||||
#else
|
#else
|
||||||
if (RealToday == JulianToday) sprintf(s, " (%s)", L_TODAY);
|
if (RealToday == JulianToday) snprintf(s, sizeof(s), " (%s)", DynamicToday);
|
||||||
else *s = 0;
|
else *s = 0;
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -402,7 +510,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_P_OVER
|
#ifdef L_P_OVER
|
||||||
L_P_OVER
|
L_P_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", (diff == 1 ? "" : L_PLURAL));
|
snprintf(s, sizeof(s), "%s", (diff == 1 ? "" : L_PLURAL));
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -411,7 +519,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_Q_OVER
|
#ifdef L_Q_OVER
|
||||||
L_Q_OVER
|
L_Q_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", (diff == 1 ? "'s" : "s'"));
|
snprintf(s, sizeof(s), "%s", (diff == 1 ? "'s" : "s'"));
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -420,7 +528,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_R_OVER
|
#ifdef L_R_OVER
|
||||||
L_R_OVER
|
L_R_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%02d", d);
|
snprintf(s, sizeof(s), "%02d", d);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -429,7 +537,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_S_OVER
|
#ifdef L_S_OVER
|
||||||
L_S_OVER
|
L_S_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", plu);
|
snprintf(s, sizeof(s), "%s", plu);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -438,7 +546,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_T_OVER
|
#ifdef L_T_OVER
|
||||||
L_T_OVER
|
L_T_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%02d", m+1);
|
snprintf(s, sizeof(s), "%02d", m+1);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -447,11 +555,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_U_OVER
|
#ifdef L_U_OVER
|
||||||
L_U_OVER
|
L_U_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %d%s %s, %d", get_day_name(jul%7), d,
|
snprintf(s, sizeof(s), "%s, %d%s %s, %d", get_day_name(jul%7), d,
|
||||||
plu, get_month_name(m), y);
|
plu, get_month_name(m), y);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %d%s %s, %d", L_ON, get_day_name(jul%7), d,
|
snprintf(s, sizeof(s), "%s %s, %d%s %s, %d", DynamicOn, get_day_name(jul%7), d,
|
||||||
plu, get_month_name(m), y);
|
plu, get_month_name(m), y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -462,11 +570,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_V_OVER
|
#ifdef L_V_OVER
|
||||||
L_V_OVER
|
L_V_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*' || !strcmp(DynamicOn, "")) {
|
||||||
sprintf(s, "%s, %d%s %s", get_day_name(jul%7), d, plu,
|
snprintf(s, sizeof(s), "%s, %d%s %s", get_day_name(jul%7), d, plu,
|
||||||
get_month_name(m));
|
get_month_name(m));
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %s, %d%s %s", L_ON, get_day_name(jul%7), d, plu,
|
snprintf(s, sizeof(s), "%s %s, %d%s %s", DynamicOn, get_day_name(jul%7), d, plu,
|
||||||
get_month_name(m));
|
get_month_name(m));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -477,7 +585,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_W_OVER
|
#ifdef L_W_OVER
|
||||||
L_W_OVER
|
L_W_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", get_day_name(jul%7));
|
snprintf(s, sizeof(s), "%s", get_day_name(jul%7));
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -486,7 +594,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_X_OVER
|
#ifdef L_X_OVER
|
||||||
L_X_OVER
|
L_X_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", diff);
|
snprintf(s, sizeof(s), "%d", diff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -495,7 +603,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_Y_OVER
|
#ifdef L_Y_OVER
|
||||||
L_Y_OVER
|
L_Y_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", y);
|
snprintf(s, sizeof(s), "%d", y);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -504,7 +612,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_Z_OVER
|
#ifdef L_Z_OVER
|
||||||
L_Z_OVER
|
L_Z_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", y % 100);
|
snprintf(s, sizeof(s), "%d", y % 100);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -514,14 +622,14 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
L_1_OVER
|
L_1_OVER
|
||||||
#else
|
#else
|
||||||
if (tdiff == 0)
|
if (tdiff == 0)
|
||||||
sprintf(s, "%s", L_NOW);
|
snprintf(s, sizeof(s), "%s", DynamicNow);
|
||||||
else if (hdiff == 0)
|
else if (hdiff == 0)
|
||||||
sprintf(s, "%d %s%s %s", mdiff, L_MINUTE, mplu, when);
|
snprintf(s, sizeof(s), "%d %s%s %s", mdiff, DynamicMinute, mplu, when);
|
||||||
else if (mdiff == 0)
|
else if (mdiff == 0)
|
||||||
sprintf(s, "%d %s%s %s", hdiff, L_HOUR, hplu, when);
|
snprintf(s, sizeof(s), "%d %s%s %s", hdiff, DynamicHour, hplu, when);
|
||||||
else
|
else
|
||||||
sprintf(s, "%d %s%s %s %d %s%s %s", hdiff, L_HOUR, hplu,
|
snprintf(s, sizeof(s), "%d %s%s %s %d %s%s %s", hdiff, DynamicHour, hplu,
|
||||||
L_AND, mdiff, L_MINUTE, mplu, when);
|
DynamicAnd, mdiff, DynamicMinute, mplu, when);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -531,9 +639,9 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
L_2_OVER
|
L_2_OVER
|
||||||
#else
|
#else
|
||||||
if (altmode == '*') {
|
if (altmode == '*') {
|
||||||
sprintf(s, "%d%c%02d%s", hh, TimeSep, min, pm);
|
snprintf(s, sizeof(s), "%d%c%02d%s", hh, TimeSep, min, pm);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %d%c%02d%s", L_AT, hh, TimeSep, min, pm);
|
snprintf(s, sizeof(s), "%s %d%c%02d%s", DynamicAt, hh, TimeSep, min, pm);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -545,9 +653,9 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
if (altmode == '*') {
|
if (altmode == '*') {
|
||||||
sprintf(s, "%02d%c%02d", h, TimeSep, min);
|
snprintf(s, sizeof(s), "%02d%c%02d", h, TimeSep, min);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, "%s %02d%c%02d", L_AT, h, TimeSep, min);
|
snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicAt, h, TimeSep, min);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
@@ -557,7 +665,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_4_OVER
|
#ifdef L_4_OVER
|
||||||
L_4_OVER
|
L_4_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", tdiff);
|
snprintf(s, sizeof(s), "%d", tdiff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -566,7 +674,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_5_OVER
|
#ifdef L_5_OVER
|
||||||
L_5_OVER
|
L_5_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", adiff);
|
snprintf(s, sizeof(s), "%d", adiff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -575,7 +683,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_6_OVER
|
#ifdef L_6_OVER
|
||||||
L_6_OVER
|
L_6_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", when);
|
snprintf(s, sizeof(s), "%s", when);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -584,7 +692,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_7_OVER
|
#ifdef L_7_OVER
|
||||||
L_7_OVER
|
L_7_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", hdiff);
|
snprintf(s, sizeof(s), "%d", hdiff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -593,7 +701,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_8_OVER
|
#ifdef L_8_OVER
|
||||||
L_8_OVER
|
L_8_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d", mdiff);
|
snprintf(s, sizeof(s), "%d", mdiff);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -602,7 +710,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_9_OVER
|
#ifdef L_9_OVER
|
||||||
L_9_OVER
|
L_9_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", mplu);
|
snprintf(s, sizeof(s), "%s", mplu);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -611,7 +719,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_0_OVER
|
#ifdef L_0_OVER
|
||||||
L_0_OVER
|
L_0_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", hplu);
|
snprintf(s, sizeof(s), "%s", hplu);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -620,7 +728,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_BANG_OVER
|
#ifdef L_BANG_OVER
|
||||||
L_BANG_OVER
|
L_BANG_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%s", (tdiff >= 0 ? L_IS : L_WAS));
|
snprintf(s, sizeof(s), "%s", (tdiff >= 0 ? DynamicIs : DynamicWas));
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -629,7 +737,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_AT_OVER
|
#ifdef L_AT_OVER
|
||||||
L_AT_OVER
|
L_AT_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%d%c%02d%s", chh, TimeSep, cmin, cpm);
|
snprintf(s, sizeof(s), "%d%c%02d%s", chh, TimeSep, cmin, cpm);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -638,16 +746,16 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
#ifdef L_HASH_OVER
|
#ifdef L_HASH_OVER
|
||||||
L_HASH_OVER
|
L_HASH_OVER
|
||||||
#else
|
#else
|
||||||
sprintf(s, "%02d%c%02d", ch, TimeSep, cmin);
|
snprintf(s, sizeof(s), "%02d%c%02d", ch, TimeSep, cmin);
|
||||||
#endif
|
#endif
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '_':
|
case '_':
|
||||||
if (PsCal == PSCAL_LEVEL2 || PsCal == PSCAL_LEVEL3 || (mode != CAL_MODE && mode != ADVANCE_MODE && !MsgCommand)) {
|
if (PsCal == PSCAL_LEVEL2 || PsCal == PSCAL_LEVEL3 || (mode != CAL_MODE && mode != ADVANCE_MODE && !MsgCommand)) {
|
||||||
sprintf(s, "%s", NL);
|
snprintf(s, sizeof(s), "%s", NL);
|
||||||
} else {
|
} else {
|
||||||
sprintf(s, " ");
|
snprintf(s, sizeof(s), " ");
|
||||||
}
|
}
|
||||||
SHIP_OUT(s);
|
SHIP_OUT(s);
|
||||||
break;
|
break;
|
||||||
@@ -657,8 +765,13 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int jul,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case '"':
|
case '"':
|
||||||
if (DBufPutc(dbuf, QUOTE_MARKER) != OK) return E_NO_MEM;
|
if (DontSuppressQuoteMarkers) {
|
||||||
has_quote = 1;
|
if (DBufPutc(dbuf, '%') != OK) return E_NO_MEM;
|
||||||
|
if (DBufPutc(dbuf, c) != OK) return E_NO_MEM;
|
||||||
|
} else {
|
||||||
|
if (DBufPutc(dbuf, QUOTE_MARKER) != OK) return E_NO_MEM;
|
||||||
|
has_quote = 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* buffers. */
|
/* buffers. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Declaration of functions for manipulating dynamic buffers */
|
/* Declaration of functions for manipulating dynamic buffers */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Error definitions. */
|
/* Error definitions. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
#define E_MON_TWICE 51
|
#define E_MON_TWICE 51
|
||||||
#define E_DAY_TWICE 52
|
#define E_DAY_TWICE 52
|
||||||
#define E_UNKNOWN_TOKEN 53
|
#define E_UNKNOWN_TOKEN 53
|
||||||
#define E_SPEC_MON_DAY 54
|
#define E_SPEC_MON 54
|
||||||
#define E_2MANY_PART 55
|
#define E_2MANY_PART 55
|
||||||
#define E_2MANY_FULL 56
|
#define E_2MANY_FULL 56
|
||||||
#define E_PUSH_NOPOP 57
|
#define E_PUSH_NOPOP 57
|
||||||
@@ -187,7 +187,7 @@ EXTERN char *ErrMsg[]
|
|||||||
"Month specified twice",
|
"Month specified twice",
|
||||||
"Day specified twice",
|
"Day specified twice",
|
||||||
"Unknown token",
|
"Unknown token",
|
||||||
"Must specify month and day in OMIT command",
|
"Must specify month in OMIT command",
|
||||||
"Too many partial OMITs",
|
"Too many partial OMITs",
|
||||||
"Too many full OMITs",
|
"Too many full OMITs",
|
||||||
"Warning: PUSH-OMIT-CONTEXT without matching POP-OMIT-CONTEXT",
|
"Warning: PUSH-OMIT-CONTEXT without matching POP-OMIT-CONTEXT",
|
||||||
|
|||||||
46
src/expr.c
46
src/expr.c
@@ -5,7 +5,7 @@
|
|||||||
/* This file contains routines to parse and evaluate */
|
/* This file contains routines to parse and evaluate */
|
||||||
/* expressions. */
|
/* expressions. */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright 1992-2021 by Dianne Skoll */
|
/* Copyright 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -84,10 +84,12 @@ Operator UnOp[] = {
|
|||||||
|
|
||||||
extern BuiltinFunc Func[];
|
extern BuiltinFunc Func[];
|
||||||
|
|
||||||
Operator OpStack[OP_STACK_SIZE];
|
static Operator OpStack[OP_STACK_SIZE];
|
||||||
Value ValStack[VAL_STACK_SIZE];
|
static int OpStackPtr = 0;
|
||||||
int OpStackPtr = 0;
|
|
||||||
int ValStackPtr = 0;
|
/* ValStack can't be static - needed by funcs.c */
|
||||||
|
Value ValStack[VAL_STACK_SIZE];
|
||||||
|
int ValStackPtr = 0;
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/* */
|
/* */
|
||||||
@@ -783,12 +785,11 @@ static int Add(void)
|
|||||||
|
|
||||||
/* If both are ints, just add 'em */
|
/* If both are ints, just add 'em */
|
||||||
if (v2.type == INT_TYPE && v1.type == INT_TYPE) {
|
if (v2.type == INT_TYPE && v1.type == INT_TYPE) {
|
||||||
int old = v1.v.val;
|
|
||||||
v1.v.val += v2.v.val;
|
|
||||||
/* Check for overflow */
|
/* Check for overflow */
|
||||||
if (_private_add_overflow(v1.v.val, v2.v.val, old)) {
|
if (_private_add_overflow(v1.v.val, v2.v.val)) {
|
||||||
return E_2HIGH;
|
return E_2HIGH;
|
||||||
}
|
}
|
||||||
|
v1.v.val += v2.v.val;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -796,9 +797,8 @@ static int Add(void)
|
|||||||
/* If it's a date plus an int, add 'em */
|
/* If it's a date plus an int, add 'em */
|
||||||
if ((v1.type == DATE_TYPE && v2.type == INT_TYPE) ||
|
if ((v1.type == DATE_TYPE && v2.type == INT_TYPE) ||
|
||||||
(v1.type == INT_TYPE && v2.type == DATE_TYPE)) {
|
(v1.type == INT_TYPE && v2.type == DATE_TYPE)) {
|
||||||
int old = v1.v.val;
|
if (_private_add_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val += v2.v.val;
|
v1.v.val += v2.v.val;
|
||||||
if (_private_add_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
if (v1.v.val < 0) return E_DATE_OVER;
|
if (v1.v.val < 0) return E_DATE_OVER;
|
||||||
v1.type = DATE_TYPE;
|
v1.type = DATE_TYPE;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
@@ -808,9 +808,8 @@ static int Add(void)
|
|||||||
/* If it's a datetime plus an int or a time, add 'em */
|
/* If it's a datetime plus an int or a time, add 'em */
|
||||||
if ((v1.type == DATETIME_TYPE && (v2.type == INT_TYPE || v2.type == TIME_TYPE)) ||
|
if ((v1.type == DATETIME_TYPE && (v2.type == INT_TYPE || v2.type == TIME_TYPE)) ||
|
||||||
((v1.type == INT_TYPE || v1.type == TIME_TYPE) && v2.type == DATETIME_TYPE)) {
|
((v1.type == INT_TYPE || v1.type == TIME_TYPE) && v2.type == DATETIME_TYPE)) {
|
||||||
int old = v1.v.val;
|
if (_private_add_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val += v2.v.val;
|
v1.v.val += v2.v.val;
|
||||||
if (_private_add_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
if (v1.v.val < 0) return E_DATE_OVER;
|
if (v1.v.val < 0) return E_DATE_OVER;
|
||||||
v1.type = DATETIME_TYPE;
|
v1.type = DATETIME_TYPE;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
@@ -822,9 +821,8 @@ static int Add(void)
|
|||||||
if ((v1.type == TIME_TYPE && v2.type == INT_TYPE) ||
|
if ((v1.type == TIME_TYPE && v2.type == INT_TYPE) ||
|
||||||
(v1.type == INT_TYPE && v2.type == TIME_TYPE) ||
|
(v1.type == INT_TYPE && v2.type == TIME_TYPE) ||
|
||||||
(v1.type == TIME_TYPE && v2.type == TIME_TYPE)) {
|
(v1.type == TIME_TYPE && v2.type == TIME_TYPE)) {
|
||||||
int old = v1.v.val;
|
if (_private_add_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val += v2.v.val;
|
v1.v.val += v2.v.val;
|
||||||
if (_private_add_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
v1.v.val = v1.v.val % MINUTES_PER_DAY;
|
v1.v.val = v1.v.val % MINUTES_PER_DAY;
|
||||||
if (v1.v.val < 0) v1.v.val += MINUTES_PER_DAY;
|
if (v1.v.val < 0) v1.v.val += MINUTES_PER_DAY;
|
||||||
v1.type = TIME_TYPE;
|
v1.type = TIME_TYPE;
|
||||||
@@ -885,18 +883,16 @@ static int Subtract(void)
|
|||||||
|
|
||||||
/* If they're both INTs, do subtraction */
|
/* If they're both INTs, do subtraction */
|
||||||
if (v1.type == INT_TYPE && v2.type == INT_TYPE) {
|
if (v1.type == INT_TYPE && v2.type == INT_TYPE) {
|
||||||
int old = v1.v.val;
|
if (_private_sub_overflow(v1.v.val, v2.v.val)) return E_2HIGH;
|
||||||
v1.v.val -= v2.v.val;
|
v1.v.val -= v2.v.val;
|
||||||
if (_private_sub_overflow(v1.v.val, v2.v.val, old)) return E_2HIGH;
|
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If it's a date minus an int, do subtraction, checking for underflow */
|
/* If it's a date minus an int, do subtraction, checking for underflow */
|
||||||
if (v1.type == DATE_TYPE && v2.type == INT_TYPE) {
|
if (v1.type == DATE_TYPE && v2.type == INT_TYPE) {
|
||||||
int old = v1.v.val;
|
if (_private_sub_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val -= v2.v.val;
|
v1.v.val -= v2.v.val;
|
||||||
if (_private_sub_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
if (v1.v.val < 0) return E_DATE_OVER;
|
if (v1.v.val < 0) return E_DATE_OVER;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
@@ -905,9 +901,8 @@ static int Subtract(void)
|
|||||||
/* If it's a datetime minus an int or a time, do subtraction,
|
/* If it's a datetime minus an int or a time, do subtraction,
|
||||||
* checking for underflow */
|
* checking for underflow */
|
||||||
if (v1.type == DATETIME_TYPE && (v2.type == INT_TYPE || v2.type == TIME_TYPE)) {
|
if (v1.type == DATETIME_TYPE && (v2.type == INT_TYPE || v2.type == TIME_TYPE)) {
|
||||||
int old = v1.v.val;
|
if (_private_sub_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val -= v2.v.val;
|
v1.v.val -= v2.v.val;
|
||||||
if (_private_sub_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
if (v1.v.val < 0) return E_DATE_OVER;
|
if (v1.v.val < 0) return E_DATE_OVER;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
@@ -925,9 +920,8 @@ static int Subtract(void)
|
|||||||
if ((v1.type == TIME_TYPE && v2.type == TIME_TYPE) ||
|
if ((v1.type == TIME_TYPE && v2.type == TIME_TYPE) ||
|
||||||
(v1.type == DATETIME_TYPE && v2.type == DATETIME_TYPE) ||
|
(v1.type == DATETIME_TYPE && v2.type == DATETIME_TYPE) ||
|
||||||
(v1.type == DATE_TYPE && v2.type == DATE_TYPE)) {
|
(v1.type == DATE_TYPE && v2.type == DATE_TYPE)) {
|
||||||
int old = v1.v.val;
|
if (_private_sub_overflow(v1.v.val, v2.v.val)) return E_DATE_OVER;
|
||||||
v1.v.val -= v2.v.val;
|
v1.v.val -= v2.v.val;
|
||||||
if (_private_sub_overflow(v1.v.val, v2.v.val, old)) return E_DATE_OVER;
|
|
||||||
v1.type = INT_TYPE;
|
v1.type = INT_TYPE;
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
@@ -962,11 +956,8 @@ static int Multiply(void)
|
|||||||
(v1.v.val == -1 && v2.v.val == INT_MIN)) {
|
(v1.v.val == -1 && v2.v.val == INT_MIN)) {
|
||||||
return E_2HIGH;
|
return E_2HIGH;
|
||||||
}
|
}
|
||||||
int old = v1.v.val;
|
if (_private_mul_overflow(v1.v.val, v2.v.val)) return E_2HIGH;
|
||||||
v1.v.val *= v2.v.val;
|
v1.v.val *= v2.v.val;
|
||||||
if (v2.v.val != 0) {
|
|
||||||
if (_private_div(v1.v.val, v2.v.val) != old) return E_2HIGH;
|
|
||||||
}
|
|
||||||
PushValStack(v1);
|
PushValStack(v1);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -1177,9 +1168,8 @@ static int UnMinus(void)
|
|||||||
{
|
{
|
||||||
Value *v = &ValStack[ValStackPtr-1];
|
Value *v = &ValStack[ValStackPtr-1];
|
||||||
if (v->type != INT_TYPE) return E_BAD_TYPE;
|
if (v->type != INT_TYPE) return E_BAD_TYPE;
|
||||||
int old = v->v.val;
|
if (v->v.val == INT_MIN) return E_2HIGH;
|
||||||
v->v.val = -v->v.val;
|
v->v.val = -v->v.val;
|
||||||
if (_private_unminus_overflow(old, v->v.val)) return E_2HIGH;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src/expr.h
10
src/expr.h
@@ -5,7 +5,7 @@
|
|||||||
/* Contains a few definitions used by expression evaluator. */
|
/* Contains a few definitions used by expression evaluator. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ else \
|
|||||||
in various arithmetic operators. They have to be in separate
|
in various arithmetic operators. They have to be in separate
|
||||||
functions with extern linkage to defeat compiler optimizations
|
functions with extern linkage to defeat compiler optimizations
|
||||||
that would otherwise break the overflow checks. */
|
that would otherwise break the overflow checks. */
|
||||||
extern int _private_div(int a, int b);
|
extern int _private_mul_overflow(int a, int b);
|
||||||
extern int _private_add_overflow(int result, int b, int old);
|
extern int _private_add_overflow(int a, int b);
|
||||||
extern int _private_sub_overflow(int result, int b, int old);
|
extern int _private_sub_overflow(int a, int b);
|
||||||
extern int _private_unminus_overflow(int a, int b);
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
/* files. */
|
/* files. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -163,6 +163,7 @@ int ReadLine(void)
|
|||||||
LineNo = CLine->LineNo;
|
LineNo = CLine->LineNo;
|
||||||
CLine = CLine->next;
|
CLine = CLine->next;
|
||||||
FreshLine = 1;
|
FreshLine = 1;
|
||||||
|
clear_callstack();
|
||||||
if (DebugFlag & DB_ECHO_LINE) OutputLine(ErrFp);
|
if (DebugFlag & DB_ECHO_LINE) OutputLine(ErrFp);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -263,6 +264,7 @@ static int ReadLineFromFile(int use_pclose)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FreshLine = 1;
|
FreshLine = 1;
|
||||||
|
clear_callstack();
|
||||||
if (DebugFlag & DB_ECHO_LINE) OutputLine(ErrFp);
|
if (DebugFlag & DB_ECHO_LINE) OutputLine(ErrFp);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -818,6 +820,7 @@ static int IncludeCmd(char const *cmd)
|
|||||||
int old_flag;
|
int old_flag;
|
||||||
|
|
||||||
FreshLine = 1;
|
FreshLine = 1;
|
||||||
|
clear_callstack();
|
||||||
if (IStackPtr+1 >= INCLUDE_NEST) return E_NESTED_INCLUDE;
|
if (IStackPtr+1 >= INCLUDE_NEST) return E_NESTED_INCLUDE;
|
||||||
i = &IStack[IStackPtr];
|
i = &IStack[IStackPtr];
|
||||||
|
|
||||||
@@ -935,6 +938,7 @@ int IncludeFile(char const *fname)
|
|||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
|
||||||
FreshLine = 1;
|
FreshLine = 1;
|
||||||
|
clear_callstack();
|
||||||
if (IStackPtr+1 >= INCLUDE_NEST) return E_NESTED_INCLUDE;
|
if (IStackPtr+1 >= INCLUDE_NEST) return E_NESTED_INCLUDE;
|
||||||
i = &IStack[IStackPtr];
|
i = &IStack[IStackPtr];
|
||||||
|
|
||||||
|
|||||||
75
src/funcs.c
75
src/funcs.c
@@ -6,7 +6,7 @@
|
|||||||
/* expressions. */
|
/* expressions. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -111,6 +111,7 @@ static int FNonomitted (func_info *);
|
|||||||
static int FNow (func_info *);
|
static int FNow (func_info *);
|
||||||
static int FOrd (func_info *);
|
static int FOrd (func_info *);
|
||||||
static int FOstype (func_info *);
|
static int FOstype (func_info *);
|
||||||
|
static int FPad (func_info *);
|
||||||
static int FPlural (func_info *);
|
static int FPlural (func_info *);
|
||||||
static int FPsmoon (func_info *);
|
static int FPsmoon (func_info *);
|
||||||
static int FPsshade (func_info *);
|
static int FPsshade (func_info *);
|
||||||
@@ -264,6 +265,7 @@ BuiltinFunc Func[] = {
|
|||||||
{ "now", 0, 0, 0, FNow },
|
{ "now", 0, 0, 0, FNow },
|
||||||
{ "ord", 1, 1, 1, FOrd },
|
{ "ord", 1, 1, 1, FOrd },
|
||||||
{ "ostype", 0, 0, 1, FOstype },
|
{ "ostype", 0, 0, 1, FOstype },
|
||||||
|
{ "pad", 3, 4, 1, FPad },
|
||||||
{ "plural", 1, 3, 1, FPlural },
|
{ "plural", 1, 3, 1, FPlural },
|
||||||
{ "psmoon", 1, 4, 1, FPsmoon},
|
{ "psmoon", 1, 4, 1, FPsmoon},
|
||||||
{ "psshade", 1, 3, 1, FPsshade},
|
{ "psshade", 1, 3, 1, FPsshade},
|
||||||
@@ -998,6 +1000,73 @@ static int FOrd(func_info *info)
|
|||||||
return RetStrVal(buf, info);
|
return RetStrVal(buf, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
/* */
|
||||||
|
/* FPad - Pad a string to min length */
|
||||||
|
/* */
|
||||||
|
/* pad("1", "0", 4) --> "0004" */
|
||||||
|
/* pad("1", "0", 4, 1) --> "4000" */
|
||||||
|
/* pad("foo", "bar", 7) -> "barbfoo" */
|
||||||
|
/* */
|
||||||
|
/***************************************************************/
|
||||||
|
static int FPad(func_info *info)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
char *s;
|
||||||
|
DynamicBuffer dbuf;
|
||||||
|
size_t len;
|
||||||
|
size_t wantlen;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
ASSERT_TYPE(1, STR_TYPE);
|
||||||
|
ASSERT_TYPE(2, INT_TYPE);
|
||||||
|
if (Nargs == 4) {
|
||||||
|
ASSERT_TYPE(3, INT_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARG(0).type != STR_TYPE) {
|
||||||
|
r = DoCoerce(STR_TYPE, &ARG(0));
|
||||||
|
if (r != OK) return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
wantlen = ARGV(2);
|
||||||
|
len = strlen(ARGSTR(0));
|
||||||
|
if (len >= wantlen) {
|
||||||
|
DCOPYVAL(RetVal, ARG(0));
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(ARGSTR(1)) == 0) {
|
||||||
|
return E_BAD_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MaxStringLen > 0 && wantlen > (size_t) MaxStringLen) {
|
||||||
|
return E_STRING_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBufInit(&dbuf);
|
||||||
|
s = ARGSTR(1);
|
||||||
|
if (Nargs < 4 || !ARGV(3)) {
|
||||||
|
/* Pad on the LEFT */
|
||||||
|
for (i=0; i<wantlen-len; i++) {
|
||||||
|
DBufPutc(&dbuf, *s++);
|
||||||
|
if (!*s) s = ARGSTR(1);
|
||||||
|
}
|
||||||
|
DBufPuts(&dbuf, ARGSTR(0));
|
||||||
|
} else {
|
||||||
|
/* Pad on the RIGHT */
|
||||||
|
DBufPuts(&dbuf, ARGSTR(0));
|
||||||
|
for (i=0; i<wantlen-len; i++) {
|
||||||
|
DBufPutc(&dbuf, *s++);
|
||||||
|
if (!*s) s = ARGSTR(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r = RetStrVal(DBufValue(&dbuf), info);
|
||||||
|
DBufFree(&dbuf);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* FPlural - pluralization function */
|
/* FPlural - pluralization function */
|
||||||
@@ -2237,10 +2306,10 @@ static int SunStuff(int rise, double cosz, int jul)
|
|||||||
/* Sometimes, we get roundoff error. Check for "reasonableness" of
|
/* Sometimes, we get roundoff error. Check for "reasonableness" of
|
||||||
answer. */
|
answer. */
|
||||||
if (rise) {
|
if (rise) {
|
||||||
/* Sunrise so close to midnight it wrapped around -- permament light */
|
/* Sunrise so close to midnight it wrapped around -- permanent light */
|
||||||
if (hours >= 23) return NO_TIME;
|
if (hours >= 23) return NO_TIME;
|
||||||
} else {
|
} else {
|
||||||
/* Sunset so close to midnight it wrapped around -- permament light */
|
/* Sunset so close to midnight it wrapped around -- permanent light */
|
||||||
if (hours <= 1) return -NO_TIME;
|
if (hours <= 1) return -NO_TIME;
|
||||||
}
|
}
|
||||||
return hours*60 + mins;
|
return hours*60 + mins;
|
||||||
|
|||||||
@@ -8,15 +8,16 @@
|
|||||||
/* globals.h and err.h */
|
/* globals.h and err.h */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdio.h> /* For defintion of FILE - sigh! */
|
#include <stdio.h> /* For definition of FILE - sigh! */
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
|
#include "lang.h"
|
||||||
#define MK_GLOBALS 1
|
#define MK_GLOBALS 1
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "err.h"
|
#include "err.h"
|
||||||
|
|||||||
107
src/globals.h
107
src/globals.h
@@ -11,6 +11,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#ifdef MK_GLOBALS
|
#ifdef MK_GLOBALS
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#define EXTERN
|
#define EXTERN
|
||||||
@@ -24,6 +25,10 @@
|
|||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
EXTERN FILE *ErrFp;
|
||||||
|
|
||||||
|
#include "dynbuf.h"
|
||||||
|
#include "lang.h"
|
||||||
|
|
||||||
#define MAX_TRUSTED_USERS 20
|
#define MAX_TRUSTED_USERS 20
|
||||||
|
|
||||||
@@ -75,6 +80,7 @@ EXTERN INIT( long SysTime, -1L);
|
|||||||
EXTERN char const *InitialFile;
|
EXTERN char const *InitialFile;
|
||||||
EXTERN int FileAccessDate;
|
EXTERN int FileAccessDate;
|
||||||
|
|
||||||
|
EXTERN INIT( int DontSuppressQuoteMarkers, 0);
|
||||||
EXTERN INIT( int DontFork, 0);
|
EXTERN INIT( int DontFork, 0);
|
||||||
EXTERN INIT( int DontQueue, 0);
|
EXTERN INIT( int DontQueue, 0);
|
||||||
EXTERN INIT( int NumQueued, 0);
|
EXTERN INIT( int NumQueued, 0);
|
||||||
@@ -94,7 +100,6 @@ EXTERN INIT( char *FileName, NULL);
|
|||||||
EXTERN INIT( int UseStdin, 0);
|
EXTERN INIT( int UseStdin, 0);
|
||||||
EXTERN INIT( int PurgeMode, 0);
|
EXTERN INIT( int PurgeMode, 0);
|
||||||
EXTERN INIT( int PurgeIncludeDepth, 0);
|
EXTERN INIT( int PurgeIncludeDepth, 0);
|
||||||
EXTERN FILE *ErrFp;
|
|
||||||
EXTERN INIT( FILE *PurgeFP, NULL);
|
EXTERN INIT( FILE *PurgeFP, NULL);
|
||||||
EXTERN INIT( int NumIfs, 0);
|
EXTERN INIT( int NumIfs, 0);
|
||||||
EXTERN INIT( unsigned int IfFlags, 0);
|
EXTERN INIT( unsigned int IfFlags, 0);
|
||||||
@@ -141,11 +146,6 @@ EXTERN INIT( int SubsIndent, 0);
|
|||||||
EXTERN INIT( char *EndSent, ".?!");
|
EXTERN INIT( char *EndSent, ".?!");
|
||||||
EXTERN INIT( char *EndSentIg, "\"')]}>");
|
EXTERN INIT( char *EndSentIg, "\"')]}>");
|
||||||
|
|
||||||
/* We need the language stuff here... */
|
|
||||||
|
|
||||||
#include "lang.h"
|
|
||||||
#include "dynbuf.h"
|
|
||||||
|
|
||||||
EXTERN DynamicBuffer Banner;
|
EXTERN DynamicBuffer Banner;
|
||||||
EXTERN DynamicBuffer LineBuffer;
|
EXTERN DynamicBuffer LineBuffer;
|
||||||
EXTERN DynamicBuffer ExprBuf;
|
EXTERN DynamicBuffer ExprBuf;
|
||||||
@@ -227,3 +227,98 @@ EXTERN int MonthIndex[2][12]
|
|||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
|
EXTERN char *DynamicAgo
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_AGO
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicAm
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_AM
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicAnd
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_AND
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicAt
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_AT
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicFromnow
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_FROMNOW
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicHour
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_HOUR
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicHplu
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_HPLU
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicIs
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_IS
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicMinute
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_MINUTE
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicMplu
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_MPLU
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicNow
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_NOW
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicOn
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_ON
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicPm
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_PM
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicToday
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_TODAY
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicTomorrow
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_TOMORROW
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
EXTERN char *DynamicWas
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= L_WAS
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
#define XSTR(x) #x
|
||||||
|
#define STRSYSDIR(x) XSTR(x)
|
||||||
|
|
||||||
|
EXTERN char *SysDir
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= STRSYSDIR(SYSDIR)
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
EXTERN int SuppressLRM
|
||||||
|
#ifdef MK_GLOBALS
|
||||||
|
= 0
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Support for the Hebrew calendar */
|
/* Support for the Hebrew calendar */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/* Derived from code written by Amos Shapir in 1978; revised */
|
/* Derived from code written by Amos Shapir in 1978; revised */
|
||||||
/* 1985. */
|
/* 1985. */
|
||||||
|
|||||||
23
src/init.c
23
src/init.c
@@ -7,7 +7,7 @@
|
|||||||
/* in normal mode. */
|
/* in normal mode. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -30,10 +30,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "globals.h"
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "err.h"
|
#include "err.h"
|
||||||
#include "globals.h"
|
|
||||||
|
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
*
|
*
|
||||||
@@ -154,7 +154,7 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
if (FormWidth > 500) FormWidth = 500;
|
if (FormWidth > 500) FormWidth = 500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize global dynamic buffers */
|
/* Initialize global dynamic buffers */
|
||||||
DBufInit(&Banner);
|
DBufInit(&Banner);
|
||||||
DBufInit(&LineBuffer);
|
DBufInit(&LineBuffer);
|
||||||
@@ -232,7 +232,10 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
Use256Colors = 1;
|
Use256Colors = 1;
|
||||||
} else if (x == 2) {
|
} else if (x == 2) {
|
||||||
UseTrueColors = 1;
|
UseTrueColors = 1;
|
||||||
}
|
} else if (x != 0) {
|
||||||
|
fprintf(ErrFp, "%s: -@n,m: n must be 0, 1 or 2 (assuming 0)\n",
|
||||||
|
argv[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (*arg == ',') {
|
if (*arg == ',') {
|
||||||
arg++;
|
arg++;
|
||||||
@@ -241,7 +244,10 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
TerminalBackground = TERMINAL_BACKGROUND_DARK;
|
TerminalBackground = TERMINAL_BACKGROUND_DARK;
|
||||||
} else if (x == 1) {
|
} else if (x == 1) {
|
||||||
TerminalBackground = TERMINAL_BACKGROUND_LIGHT;
|
TerminalBackground = TERMINAL_BACKGROUND_LIGHT;
|
||||||
}
|
} else {
|
||||||
|
fprintf(ErrFp, "%s: -@n,m: m must be 0 or 1\n",
|
||||||
|
argv[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -459,6 +465,7 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
DoSimpleCalendar = 1;
|
DoSimpleCalendar = 1;
|
||||||
PsCal = PSCAL_LEVEL1;
|
PsCal = PSCAL_LEVEL1;
|
||||||
while (*arg == 'a' || *arg == 'A' ||
|
while (*arg == 'a' || *arg == 'A' ||
|
||||||
|
*arg == 'q' || *arg == 'Q' ||
|
||||||
*arg == 'p' || *arg == 'P') {
|
*arg == 'p' || *arg == 'P') {
|
||||||
if (*arg == 'a' || *arg == 'A') {
|
if (*arg == 'a' || *arg == 'A') {
|
||||||
DoSimpleCalDelta = 1;
|
DoSimpleCalDelta = 1;
|
||||||
@@ -471,7 +478,9 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
} else {
|
} else {
|
||||||
PsCal = PSCAL_LEVEL3;
|
PsCal = PSCAL_LEVEL3;
|
||||||
}
|
}
|
||||||
}
|
} else if (*arg == 'q' || *arg == 'Q') {
|
||||||
|
DontSuppressQuoteMarkers = 1;
|
||||||
|
}
|
||||||
arg++;
|
arg++;
|
||||||
}
|
}
|
||||||
PARSENUM(CalMonths, arg);
|
PARSENUM(CalMonths, arg);
|
||||||
@@ -672,7 +681,7 @@ void InitRemind(int argc, char const *argv[])
|
|||||||
#ifndef L_USAGE_OVERRIDE
|
#ifndef L_USAGE_OVERRIDE
|
||||||
void Usage(void)
|
void Usage(void)
|
||||||
{
|
{
|
||||||
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2021 Dianne Skoll\n", VERSION, L_LANGNAME);
|
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2022 Dianne Skoll\n", VERSION, L_LANGNAME);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Header file for language support for various languages. */
|
/* Header file for language support for various languages. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* */
|
/* */
|
||||||
/* REMIND is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* REMIND is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* This file is Copyright (C) 1993 by Mogens Lynnerup. */
|
/* This file is Copyright (C) 1993 by Mogens Lynnerup. */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
@@ -48,9 +48,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "siden"
|
#define L_AGO "siden"
|
||||||
#define L_FROMNOW "fra nu"
|
#define L_FROMNOW "fra nu"
|
||||||
@@ -91,5 +88,3 @@
|
|||||||
#define L_I_OVER sprintf(s, "den %02d%c%02d", m+1, DateSep, d);
|
#define L_I_OVER sprintf(s, "den %02d%c%02d", m+1, DateSep, d);
|
||||||
#define L_U_OVER L_A_OVER
|
#define L_U_OVER L_A_OVER
|
||||||
#define L_V_OVER L_G_OVER
|
#define L_V_OVER L_G_OVER
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
/* Further corrections by Erik-Jan Vens */
|
/* Further corrections by Erik-Jan Vens */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -52,9 +52,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "geleden"
|
#define L_AGO "geleden"
|
||||||
#define L_FROMNOW "vanaf nu"
|
#define L_FROMNOW "vanaf nu"
|
||||||
@@ -91,15 +88,14 @@ if (tdiff == 0) \
|
|||||||
sprintf(s, L_NOW); \
|
sprintf(s, L_NOW); \
|
||||||
else if (hdiff == 0) \
|
else if (hdiff == 0) \
|
||||||
sprintf(s, "%d %s %s", mdiff, \
|
sprintf(s, "%d %s %s", mdiff, \
|
||||||
(mdiff == 1 ? "minuut" : "minuten"), when); \
|
((mdiff == 1) ? "minuut" : "minuten"), when); \
|
||||||
else if (mdiff == 0) \
|
else if (mdiff == 0) \
|
||||||
sprintf(s, "%d %s %s", hdiff, \
|
sprintf(s, "%d %s %s", hdiff, \
|
||||||
(mdiff == 1 ? "uur" : "uren"), when); \
|
((hdiff == 1) ? "uur" : "uren"), when); \
|
||||||
else sprintf(s, "%d %s %s %d %s %s", hdiff, \
|
else sprintf(s, "%d %s %s %d %s %s", hdiff, \
|
||||||
(hdiff == 1 ? "uur" : "uren"), \
|
(hdiff == 1 ? "uur" : "uren"), \
|
||||||
L_AND, mdiff, \
|
L_AND, mdiff, \
|
||||||
(mdiff == 1 ? "minuut" : "minuten"), \
|
(mdiff == 1 ? "minuut" : "minuten"), \
|
||||||
when);
|
when);
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Support for the English language. */
|
/* Support for the English language. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -46,9 +46,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "ago"
|
#define L_AGO "ago"
|
||||||
#define L_FROMNOW "from now"
|
#define L_FROMNOW "from now"
|
||||||
@@ -72,11 +69,9 @@
|
|||||||
#define L_WAS "was"
|
#define L_WAS "was"
|
||||||
#define L_AND "and"
|
#define L_AND "and"
|
||||||
/* What to add to make "hour" plural */
|
/* What to add to make "hour" plural */
|
||||||
#define L_HPLU "s"
|
#define L_HPLU "s"
|
||||||
/* What to add to make "minute" plural */
|
/* What to add to make "minute" plural */
|
||||||
#define L_MPLU "s"
|
#define L_MPLU "s"
|
||||||
|
|
||||||
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
||||||
See the file dosubst.c for more info. */
|
See the file dosubst.c for more info. */
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* This file is Copyright (C) 1993-1998 by Mikko Silvonen. */
|
/* This file is Copyright (C) 1993-1998 by Mikko Silvonen. */
|
||||||
/* REMIND is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* REMIND is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -52,9 +52,6 @@
|
|||||||
#define L_AM " ap."
|
#define L_AM " ap."
|
||||||
#define L_PM " ip."
|
#define L_PM " ip."
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "sitten"
|
#define L_AGO "sitten"
|
||||||
#define L_FROMNOW "kuluttua"
|
#define L_FROMNOW "kuluttua"
|
||||||
@@ -138,7 +135,6 @@ else { \
|
|||||||
} \
|
} \
|
||||||
sprintf(s + strlen(s), when); \
|
sprintf(s + strlen(s), when); \
|
||||||
}
|
}
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|
||||||
/* The next ones are used only when MK_GLOBALS is set */
|
/* The next ones are used only when MK_GLOBALS is set */
|
||||||
#ifdef MK_GLOBALS
|
#ifdef MK_GLOBALS
|
||||||
@@ -199,7 +195,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
"Kuukausi annettu kahdesti",
|
"Kuukausi annettu kahdesti",
|
||||||
"Päivä annettu kahdesti",
|
"Päivä annettu kahdesti",
|
||||||
"Tuntematon sana tai merkki",
|
"Tuntematon sana tai merkki",
|
||||||
"OMIT-komennossa on annettava kuukausi ja päivä",
|
"OMIT-komennossa on annettava kuukausi",
|
||||||
"Liian monta osittaista OMIT-komentoa",
|
"Liian monta osittaista OMIT-komentoa",
|
||||||
"Liian monta täydellistä OMIT-komentoa",
|
"Liian monta täydellistä OMIT-komentoa",
|
||||||
"Varoitus: PUSH-OMIT-CONTEXT ilman POP-OMIT-CONTEXTia",
|
"Varoitus: PUSH-OMIT-CONTEXT ilman POP-OMIT-CONTEXTia",
|
||||||
@@ -257,7 +253,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
#define L_USAGE_OVERRIDE 1
|
#define L_USAGE_OVERRIDE 1
|
||||||
void Usage(void)
|
void Usage(void)
|
||||||
{
|
{
|
||||||
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2021 Dianne Skoll\n", VERSION, L_LANGNAME);
|
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2022 Dianne Skoll\n", VERSION, L_LANGNAME);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
fprintf(ErrFp, ">>>> BETAVERSIO <<<<\n");
|
fprintf(ErrFp, ">>>> BETAVERSIO <<<<\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* */
|
/* */
|
||||||
/* REMIND is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* REMIND is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* This file is Copyright (C) 1993 by Laurent Duperval and */
|
/* This file is Copyright (C) 1993 by Laurent Duperval and */
|
||||||
/* Dianne Skoll. */
|
/* Dianne Skoll. */
|
||||||
/* */
|
/* */
|
||||||
@@ -51,9 +51,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "il y a"
|
#define L_AGO "il y a"
|
||||||
#define L_FROMNOW "dans"
|
#define L_FROMNOW "dans"
|
||||||
@@ -113,8 +110,6 @@ else if (tdiff < 0) { \
|
|||||||
|
|
||||||
#define L_K_OVER if (altmode == '*') { sprintf(s, "%s, %d%s %s", DayName[jul%7], d, plu, MonthName[m]); } else { sprintf(s, "%s %s, %d%s %s", L_ON, DayName[jul%7], d, plu, MonthName[m]); }
|
#define L_K_OVER if (altmode == '*') { sprintf(s, "%s, %d%s %s", DayName[jul%7], d, plu, MonthName[m]); } else { sprintf(s, "%s %s, %d%s %s", L_ON, DayName[jul%7], d, plu, MonthName[m]); }
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|
||||||
/* The next ones are used only when MK_GLOBALS is set */
|
/* The next ones are used only when MK_GLOBALS is set */
|
||||||
#ifdef MK_GLOBALS
|
#ifdef MK_GLOBALS
|
||||||
#define L_ERR_OVERRIDE 1
|
#define L_ERR_OVERRIDE 1
|
||||||
@@ -232,7 +227,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
#define L_USAGE_OVERRIDE 1
|
#define L_USAGE_OVERRIDE 1
|
||||||
void Usage(void)
|
void Usage(void)
|
||||||
{
|
{
|
||||||
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2021 Dianne Skoll\n", VERSION, L_LANGNAME);
|
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2022 Dianne Skoll\n", VERSION, L_LANGNAME);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
/* I don't speak German. */
|
/* I don't speak German. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -50,9 +50,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "vorher"
|
#define L_AGO "vorher"
|
||||||
#define L_FROMNOW "von heute"
|
#define L_FROMNOW "von heute"
|
||||||
@@ -88,5 +85,3 @@
|
|||||||
#define L_G_OVER if (altmode == '*') { sprintf(s, "%s, den %d. %s", DayName[jul%7], d, MonthName[m]); } else { sprintf(s, "%s %s, den %d. %s", L_ON, DayName[jul%7], d, MonthName[m]); }
|
#define L_G_OVER if (altmode == '*') { sprintf(s, "%s, den %d. %s", DayName[jul%7], d, MonthName[m]); } else { sprintf(s, "%s %s, den %d. %s", L_ON, DayName[jul%7], d, MonthName[m]); }
|
||||||
#define L_U_OVER L_A_OVER
|
#define L_U_OVER L_A_OVER
|
||||||
#define L_V_OVER L_G_OVER
|
#define L_V_OVER L_G_OVER
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
/* Support for the Icelandic language. */
|
/* Support for the Icelandic language. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* Translated by Björn Davíðsson (bjossi@snerpa.is) */
|
/* Translated by Björn Davíðsson (bjossi@snerpa.is) */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -15,59 +15,56 @@
|
|||||||
|
|
||||||
/* Day names */
|
/* Day names */
|
||||||
#define L_SUNDAY "sunnudagur"
|
#define L_SUNDAY "sunnudagur"
|
||||||
#define L_MONDAY "mánudagur"
|
#define L_MONDAY "mánudagur"
|
||||||
#define L_TUESDAY "þriðjudagur"
|
#define L_TUESDAY "þriðjudagur"
|
||||||
#define L_WEDNESDAY "miðvikudagur"
|
#define L_WEDNESDAY "miðvikudagur"
|
||||||
#define L_THURSDAY "fimmtudagur"
|
#define L_THURSDAY "fimmtudagur"
|
||||||
#define L_FRIDAY "föstudagur"
|
#define L_FRIDAY "föstudagur"
|
||||||
#define L_SATURDAY "laugardagur"
|
#define L_SATURDAY "laugardagur"
|
||||||
|
|
||||||
/* Month names */
|
/* Month names */
|
||||||
#define L_JAN "janúar"
|
#define L_JAN "janúar"
|
||||||
#define L_FEB "febrúar"
|
#define L_FEB "febrúar"
|
||||||
#define L_MAR "mars"
|
#define L_MAR "mars"
|
||||||
#define L_APR "apríl"
|
#define L_APR "apríl"
|
||||||
#define L_MAY "maí"
|
#define L_MAY "maí"
|
||||||
#define L_JUN "júní"
|
#define L_JUN "júní"
|
||||||
#define L_JUL "júlí"
|
#define L_JUL "júlí"
|
||||||
#define L_AUG "ágúst"
|
#define L_AUG "ágúst"
|
||||||
#define L_SEP "september"
|
#define L_SEP "september"
|
||||||
#define L_OCT "október"
|
#define L_OCT "október"
|
||||||
#define L_NOV "nóvember"
|
#define L_NOV "nóvember"
|
||||||
#define L_DEC "desember"
|
#define L_DEC "desember"
|
||||||
|
|
||||||
/* Today and tomorrow */
|
/* Today and tomorrow */
|
||||||
#define L_TODAY "í dag"
|
#define L_TODAY "í dag"
|
||||||
#define L_TOMORROW "á morgun"
|
#define L_TOMORROW "á morgun"
|
||||||
|
|
||||||
/* The default banner */
|
/* The default banner */
|
||||||
#define L_BANNER "Minnisatriði: %w, %d%s %m, %y%o:"
|
#define L_BANNER "Minnisatriði: %w, %d%s %m, %y%o:"
|
||||||
|
|
||||||
/* "am" and "pm" */
|
/* "am" and "pm" */
|
||||||
#define L_AM "fh"
|
#define L_AM "fh"
|
||||||
#define L_PM "eh"
|
#define L_PM "eh"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "síðan"
|
#define L_AGO "síðan"
|
||||||
#define L_FROMNOW "frá því nú"
|
#define L_FROMNOW "frá því nú"
|
||||||
|
|
||||||
/* "in %d days' time" */
|
/* "in %d days' time" */
|
||||||
#define L_INXDAYS "eftir %d daga"
|
#define L_INXDAYS "eftir %d daga"
|
||||||
|
|
||||||
/* "on" as in "on date..." */
|
/* "on" as in "on date..." */
|
||||||
#define L_ON "þann"
|
#define L_ON "þann"
|
||||||
|
|
||||||
/* Pluralizing - this is a problem for many languages and may require
|
/* Pluralizing - this is a problem for many languages and may require
|
||||||
a more drastic fix */
|
a more drastic fix */
|
||||||
#define L_PLURAL "a"
|
#define L_PLURAL "a"
|
||||||
|
|
||||||
/* Minutes, hours, at, etc */
|
/* Minutes, hours, at, etc */
|
||||||
#define L_NOW "núna"
|
#define L_NOW "núna"
|
||||||
#define L_AT "kl."
|
#define L_AT "kl."
|
||||||
#define L_MINUTE "mínútu"
|
#define L_MINUTE "mínútu"
|
||||||
#define L_HOUR "klukkustund"
|
#define L_HOUR "klukkustund"
|
||||||
#define L_IS "er"
|
#define L_IS "er"
|
||||||
#define L_WAS "var"
|
#define L_WAS "var"
|
||||||
@@ -79,5 +76,3 @@
|
|||||||
|
|
||||||
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
||||||
See the file dosubst.c for more info. */
|
See the file dosubst.c for more info. */
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* It is Copyright (C) 1996 by Valerio Aimale */
|
/* It is Copyright (C) 1996 by Valerio Aimale */
|
||||||
/* */
|
/* */
|
||||||
/* Remind is copyright (C) 1992-2021 by Dianne Skoll */
|
/* Remind is copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -49,9 +49,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "fa"
|
#define L_AGO "fa"
|
||||||
#define L_FROMNOW "da oggi"
|
#define L_FROMNOW "da oggi"
|
||||||
@@ -114,6 +111,3 @@
|
|||||||
|
|
||||||
#define L_V_OVER sprintf(s, "%s, %d %s", DayName[jul%7], d, \
|
#define L_V_OVER sprintf(s, "%s, %d %s", DayName[jul%7], d, \
|
||||||
MonthName[m]);
|
MonthName[m]);
|
||||||
|
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* This file is Copyright (C) 1993 by Trygve Randen. */
|
/* This file is Copyright (C) 1993 by Trygve Randen. */
|
||||||
/* Remind is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Remind is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -47,9 +47,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "siden"
|
#define L_AGO "siden"
|
||||||
#define L_FROMNOW "fra nå"
|
#define L_FROMNOW "fra nå"
|
||||||
@@ -84,6 +81,3 @@
|
|||||||
#define L_G_OVER if (altmode == '*') { sprintf(s, "%s, den %d. %s", DayName[jul%7], d, MonthName[m]); } else { sprintf(s, "%s %s, den %d. %s", L_ON, DayName[jul%7], d, MonthName[m]); }
|
#define L_G_OVER if (altmode == '*') { sprintf(s, "%s, den %d. %s", DayName[jul%7], d, MonthName[m]); } else { sprintf(s, "%s %s, den %d. %s", L_ON, DayName[jul%7], d, MonthName[m]); }
|
||||||
#define L_U_OVER L_A_OVER
|
#define L_U_OVER L_A_OVER
|
||||||
#define L_V_OVER L_G_OVER
|
#define L_V_OVER L_G_OVER
|
||||||
|
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
/* Polish. */
|
/* Polish. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -50,9 +50,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "temu"
|
#define L_AGO "temu"
|
||||||
#define L_FROMNOW "od teraz"
|
#define L_FROMNOW "od teraz"
|
||||||
@@ -75,13 +72,17 @@
|
|||||||
# define L_IS "będzie"
|
# define L_IS "będzie"
|
||||||
# define L_WAS "było"
|
# define L_WAS "było"
|
||||||
#define L_AND "i"
|
#define L_AND "i"
|
||||||
|
|
||||||
|
#define L_HPLU ""
|
||||||
|
#define L_MPLU ""
|
||||||
|
|
||||||
/* What to add to make "hour" or "minute" plural */
|
/* What to add to make "hour" or "minute" plural */
|
||||||
#define L_NPLU( N ) ((N == 1) ? "ę" : ((N==12) || (N==13) || (N==14)) ? "" : \
|
#define L_NPLU( N ) ((N == 1) ? "ę" : ((N==12) || (N==13) || (N==14)) ? "" : \
|
||||||
((N%10==2) || (N%10==3) || (N%10==4)) ? "y" : "" )
|
((N%10==2) || (N%10==3) || (N%10==4)) ? "y" : "" )
|
||||||
/* What to add to make "hour" plural */
|
/* What to add to make "hour" plural */
|
||||||
#define L_HPLU L_NPLU( hdiff )
|
#define L_HPLU_OVER hplu = L_NPLU( hdiff );
|
||||||
/* What to add to make "minute" plural */
|
/* What to add to make "minute" plural */
|
||||||
#define L_MPLU L_NPLU( mdiff )
|
#define L_MPLU_OVER mplu = L_NPLU( mdiff );
|
||||||
|
|
||||||
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
/* Define any overrides here, such as L_ORDINAL_OVERRIDE, L_A_OVER, etc.
|
||||||
See the file dosubst.c for more info. */
|
See the file dosubst.c for more info. */
|
||||||
@@ -99,32 +100,30 @@ ampm = (hour<12) ? \
|
|||||||
#define L_U_OVER L_A_OVER
|
#define L_U_OVER L_A_OVER
|
||||||
#define L_V_OVER L_G_OVER
|
#define L_V_OVER L_G_OVER
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
#define L_0_OVER sprintf(s, L_NPLU(hdiff));
|
||||||
|
#define L_9_OVER sprintf(s, L_NPLU(mdiff));
|
||||||
#define L_0_OVER sprintf(s, L_HPLU);
|
|
||||||
#define L_9_OVER sprintf(s, L_MPLU);
|
|
||||||
#define L_1_OVER \
|
#define L_1_OVER \
|
||||||
if (tdiff == 0) \
|
if (tdiff == 0) \
|
||||||
sprintf(s, L_NOW); \
|
sprintf(s, L_NOW); \
|
||||||
else if (tdiff > 0) \
|
else if (tdiff > 0) \
|
||||||
{ \
|
{ \
|
||||||
if (hdiff == 0) \
|
if (hdiff == 0) \
|
||||||
sprintf(s, "za %d %s%s", mdiff, L_MINUTE, L_MPLU); \
|
sprintf(s, "za %d %s%s", mdiff, L_MINUTE, L_NPLU(mdiff)); \
|
||||||
else if (mdiff == 0) \
|
else if (mdiff == 0) \
|
||||||
sprintf(s, "za %d %s%s", hdiff, L_HOUR, L_HPLU); \
|
sprintf(s, "za %d %s%s", hdiff, L_HOUR, L_NPLU(hdiff)); \
|
||||||
else \
|
else \
|
||||||
sprintf(s, "za %d %s%s %s %d %s%s", hdiff, L_HOUR, L_HPLU, \
|
sprintf(s, "za %d %s%s %s %d %s%s", hdiff, L_HOUR, L_NPLU(hdiff), \
|
||||||
L_AND, mdiff, L_MINUTE, L_MPLU); \
|
L_AND, mdiff, L_MINUTE, L_NPLU(mdiff)); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
if (hdiff == 0) \
|
if (hdiff == 0) \
|
||||||
sprintf(s, "%d %s%s temu", mdiff, L_MINUTE, L_MPLU); \
|
sprintf(s, "%d %s%s temu", mdiff, L_MINUTE, L_NPLU(mdiff)); \
|
||||||
else if (mdiff == 0) \
|
else if (mdiff == 0) \
|
||||||
sprintf(s, "%d %s%s temu", hdiff, L_HOUR, L_HPLU); \
|
sprintf(s, "%d %s%s temu", hdiff, L_HOUR, L_NPLU(hdiff)); \
|
||||||
else \
|
else \
|
||||||
sprintf(s, "%d %s%s %s %d %s%s temu", hdiff, L_HOUR, L_HPLU, \
|
sprintf(s, "%d %s%s %s %d %s%s temu", hdiff, L_HOUR, L_NPLU(hdiff), \
|
||||||
L_AND, mdiff, L_MINUTE, L_MPLU); \
|
L_AND, mdiff, L_MINUTE, L_NPLU(mdiff)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The next ones are used only when MK_GLOBALS is set */
|
/* The next ones are used only when MK_GLOBALS is set */
|
||||||
@@ -186,7 +185,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
"Miesiąc podany dwókrotnie",
|
"Miesiąc podany dwókrotnie",
|
||||||
"Dzień podany dwókrotnie",
|
"Dzień podany dwókrotnie",
|
||||||
"Nieznane słowo",
|
"Nieznane słowo",
|
||||||
"W komendzie OMIT trzeba podać miesiąc i dzień",
|
"W komendzie OMIT trzeba podać miesiąc",
|
||||||
"Za dużo częściowych komend OMIT",
|
"Za dużo częściowych komend OMIT",
|
||||||
"Za dużo pełnych komend OMIT",
|
"Za dużo pełnych komend OMIT",
|
||||||
"Ostrzeżenie: PUSH-OMIT-CONTEXT bez POP-OMIT-CONTEXT",
|
"Ostrzeżenie: PUSH-OMIT-CONTEXT bez POP-OMIT-CONTEXT",
|
||||||
@@ -244,7 +243,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
#define L_USAGE_OVERRIDE 1
|
#define L_USAGE_OVERRIDE 1
|
||||||
void Usage(void)
|
void Usage(void)
|
||||||
{
|
{
|
||||||
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2021 Dianne Skoll\n", VERSION, L_LANGNAME);
|
fprintf(ErrFp, "\nREMIND %s (%s version) Copyright 1992-2022 Dianne Skoll\n", VERSION, L_LANGNAME);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
fprintf(ErrFp, ">>>> BETA VERSION <<<<\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* */
|
/* */
|
||||||
/* REMIND is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* REMIND is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* This file is Copyright (C) 1996 by Marco Paganini and */
|
/* This file is Copyright (C) 1996 by Marco Paganini and */
|
||||||
/* Dianne Skoll. */
|
/* Dianne Skoll. */
|
||||||
/* */
|
/* */
|
||||||
@@ -51,9 +51,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "atras"
|
#define L_AGO "atras"
|
||||||
#define L_FROMNOW "adiante"
|
#define L_FROMNOW "adiante"
|
||||||
@@ -138,8 +135,6 @@
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|
||||||
/* The next ones are used only when MK_GLOBALS is set */
|
/* The next ones are used only when MK_GLOBALS is set */
|
||||||
#ifdef MK_GLOBALS
|
#ifdef MK_GLOBALS
|
||||||
#define L_ERR_OVERRIDE 1
|
#define L_ERR_OVERRIDE 1
|
||||||
@@ -199,7 +194,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
"Mes especificado duas vezes",
|
"Mes especificado duas vezes",
|
||||||
"Dia especificado duas vezes",
|
"Dia especificado duas vezes",
|
||||||
"Token desconhecido",
|
"Token desconhecido",
|
||||||
"Mes e dia devem ser especificados no comando OMIT",
|
"O mes deve ser especificados no comando OMIT",
|
||||||
"Muitos OMITs parciais",
|
"Muitos OMITs parciais",
|
||||||
"Muitos OMITs full",
|
"Muitos OMITs full",
|
||||||
"Aviso: PUSH-OMIT-CONTEXT sem POP-OMIT-CONTEXT correspondente",
|
"Aviso: PUSH-OMIT-CONTEXT sem POP-OMIT-CONTEXT correspondente",
|
||||||
@@ -257,7 +252,7 @@ EXTERN char *ErrMsg[] =
|
|||||||
#define L_USAGE_OVERRIDE 1
|
#define L_USAGE_OVERRIDE 1
|
||||||
void Usage(void)
|
void Usage(void)
|
||||||
{
|
{
|
||||||
fprintf(ErrFp, "\nREMIND %s (versao %s) (C) 1992-2021 Dianne Skoll\n", VERSION, L_LANGNAME);
|
fprintf(ErrFp, "\nREMIND %s (versao %s) (C) 1992-2022 Dianne Skoll\n", VERSION, L_LANGNAME);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
fprintf(ErrFp, ">>>> VERSAO BETA <<<<\n");
|
fprintf(ErrFp, ">>>> VERSAO BETA <<<<\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* */
|
/* */
|
||||||
/* REMIND is Copyright (C) 1992-2021 by Dianne Skoll */
|
/* REMIND is Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* This file is Copyright (C) 1996-1998 by Liviu Daia */
|
/* This file is Copyright (C) 1996-1998 by Liviu Daia */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
@@ -50,9 +50,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
|
|
||||||
/* Ago and from now */
|
/* Ago and from now */
|
||||||
#define L_AGO "acum"
|
#define L_AGO "acum"
|
||||||
#define L_FROMNOW "peste"
|
#define L_FROMNOW "peste"
|
||||||
@@ -76,6 +73,7 @@
|
|||||||
#define L_WAS "a fost"
|
#define L_WAS "a fost"
|
||||||
/* What to add to make "minute" plural */
|
/* What to add to make "minute" plural */
|
||||||
#define L_MPLU "e"
|
#define L_MPLU "e"
|
||||||
|
#define L_HPLU "e"
|
||||||
|
|
||||||
/* What to add to make "hour" plural */
|
/* What to add to make "hour" plural */
|
||||||
#define L_HPLU_OVER hplu = (hdiff == 1 ? "ă" : "e");
|
#define L_HPLU_OVER hplu = (hdiff == 1 ? "ă" : "e");
|
||||||
@@ -104,5 +102,3 @@
|
|||||||
else \
|
else \
|
||||||
sprintf(s, "%s %d %s%s %s %d %s%s", when, hdiff, \
|
sprintf(s, "%s %d %s%s %s %d %s%s", when, hdiff, \
|
||||||
L_HOUR, hplu, L_AND, mdiff, L_MINUTE, mplu);
|
L_HOUR, hplu, L_AND, mdiff, L_MINUTE, mplu);
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
/* Author: Rafa Couto <rafacouto@biogate.com> */
|
/* Author: Rafa Couto <rafacouto@biogate.com> */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -47,9 +47,6 @@
|
|||||||
#define L_AM "am"
|
#define L_AM "am"
|
||||||
#define L_PM "pm"
|
#define L_PM "pm"
|
||||||
|
|
||||||
/*** The following are only used in dosubst.c ***/
|
|
||||||
#ifdef L_IN_DOSUBST
|
|
||||||
|
|
||||||
/* Hace y desde hoy */
|
/* Hace y desde hoy */
|
||||||
#define L_AGO "hace"
|
#define L_AGO "hace"
|
||||||
#define L_FROMNOW "desde hoy"
|
#define L_FROMNOW "desde hoy"
|
||||||
@@ -74,5 +71,3 @@
|
|||||||
#define L_HPLU "s"
|
#define L_HPLU "s"
|
||||||
#define L_MPLU "s"
|
#define L_MPLU "s"
|
||||||
|
|
||||||
#endif /* L_IN_DOSUBST */
|
|
||||||
|
|
||||||
|
|||||||
20
src/main.c
20
src/main.c
@@ -6,7 +6,7 @@
|
|||||||
/* routines, etc. */
|
/* routines, etc. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -605,13 +605,23 @@ void Eprint(char const *fmt, ...)
|
|||||||
|
|
||||||
if (FreshLine && FileName) {
|
if (FreshLine && FileName) {
|
||||||
FreshLine = 0;
|
FreshLine = 0;
|
||||||
if (strcmp(FileName, "-"))
|
if (strcmp(FileName, "-")) {
|
||||||
(void) fprintf(ErrFp, "%s(%d): ", FileName, LineNo);
|
(void) fprintf(ErrFp, "%s(%d): ", FileName, LineNo);
|
||||||
else
|
if (print_callstack(ErrFp)) {
|
||||||
|
(void) fprintf(ErrFp, ": ");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
(void) fprintf(ErrFp, "-stdin-(%d): ", LineNo);
|
(void) fprintf(ErrFp, "-stdin-(%d): ", LineNo);
|
||||||
|
if (print_callstack(ErrFp)) {
|
||||||
|
(void) fprintf(ErrFp, ": ");
|
||||||
|
}
|
||||||
|
}
|
||||||
if (DebugFlag & DB_PRTLINE) OutputLine(ErrFp);
|
if (DebugFlag & DB_PRTLINE) OutputLine(ErrFp);
|
||||||
} else if (FileName) {
|
} else if (FileName) {
|
||||||
fprintf(ErrFp, " ");
|
fprintf(ErrFp, " ");
|
||||||
|
if (print_callstack(ErrFp)) {
|
||||||
|
(void) fprintf(ErrFp, ": ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
@@ -1135,8 +1145,8 @@ int DoErrMsg(ParsePtr p)
|
|||||||
|
|
||||||
/* The array FoldArray[2][7] contains sample years which begin
|
/* The array FoldArray[2][7] contains sample years which begin
|
||||||
on the specified weekday. For example, FoldArray[0][2] is a
|
on the specified weekday. For example, FoldArray[0][2] is a
|
||||||
non-leapyear beginning on Wednesday, and FoldArray[1][5] is a
|
non-leap year beginning on Wednesday, and FoldArray[1][5] is a
|
||||||
leapyear beginning on Saturday. Used to fold back dates which
|
leap year beginning on Saturday. Used to fold back dates which
|
||||||
are too high for the standard Unix representation.
|
are too high for the standard Unix representation.
|
||||||
NOTE: This implies that you cannot set BASE > 2001!!!!! */
|
NOTE: This implies that you cannot set BASE > 2001!!!!! */
|
||||||
static int FoldArray[2][7] = {
|
static int FoldArray[2][7] = {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Calculations for figuring out moon phases. */
|
/* Calculations for figuring out moon phases. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
216
src/omit.c
216
src/omit.c
@@ -6,7 +6,7 @@
|
|||||||
/* the data structures for OMITted dates. */
|
/* the data structures for OMITted dates. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -271,7 +271,6 @@ static void InsertIntoSortedArray(int *array, int num, int key)
|
|||||||
*cur = key;
|
*cur = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int DoThroughOmit(ParsePtr p, int y, int m, int d);
|
|
||||||
static void DumpOmits(void);
|
static void DumpOmits(void);
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
@@ -283,11 +282,15 @@ static void DumpOmits(void);
|
|||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
int DoOmit(ParsePtr p)
|
int DoOmit(ParsePtr p)
|
||||||
{
|
{
|
||||||
int y = NO_YR, m = NO_MON, d = NO_DAY, r;
|
int y[2] = {NO_YR, NO_YR}, m[2] = {NO_MON, NO_MON}, d[2] = {NO_DAY, NO_DAY}, r;
|
||||||
Token tok;
|
Token tok;
|
||||||
int parsing=1;
|
int parsing = 1;
|
||||||
|
int seen_through = 0;
|
||||||
int syndrome;
|
int syndrome;
|
||||||
int not_first_token = -1;
|
int not_first_token = -1;
|
||||||
|
int start, end, tmp;
|
||||||
|
|
||||||
|
int mc, dc;
|
||||||
|
|
||||||
DynamicBuffer buf;
|
DynamicBuffer buf;
|
||||||
DBufInit(&buf);
|
DBufInit(&buf);
|
||||||
@@ -308,28 +311,28 @@ int DoOmit(ParsePtr p)
|
|||||||
|
|
||||||
case T_Date:
|
case T_Date:
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (y != NO_YR) return E_YR_TWICE;
|
if (y[seen_through] != NO_YR) return E_YR_TWICE;
|
||||||
if (m != NO_MON) return E_MON_TWICE;
|
if (m[seen_through] != NO_MON) return E_MON_TWICE;
|
||||||
if (d != NO_DAY) return E_DAY_TWICE;
|
if (d[seen_through] != NO_DAY) return E_DAY_TWICE;
|
||||||
FromJulian(tok.val, &y, &m, &d);
|
FromJulian(tok.val, &y[seen_through], &m[seen_through], &d[seen_through]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_Year:
|
case T_Year:
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (y != NO_YR) return E_YR_TWICE;
|
if (y[seen_through] != NO_YR) return E_YR_TWICE;
|
||||||
y = tok.val;
|
y[seen_through] = tok.val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_Month:
|
case T_Month:
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (m != NO_MON) return E_MON_TWICE;
|
if (m[seen_through] != NO_MON) return E_MON_TWICE;
|
||||||
m = tok.val;
|
m[seen_through] = tok.val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_Day:
|
case T_Day:
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (d != NO_DAY) return E_DAY_TWICE;
|
if (d[seen_through] != NO_DAY) return E_DAY_TWICE;
|
||||||
d = tok.val;
|
d[seen_through] = tok.val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_Delta:
|
case T_Delta:
|
||||||
@@ -338,8 +341,9 @@ int DoOmit(ParsePtr p)
|
|||||||
|
|
||||||
case T_Through:
|
case T_Through:
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (y == NO_YR || m == NO_MON || d == NO_DAY) return E_INCOMPLETE;
|
if (seen_through) return E_UNTIL_TWICE;
|
||||||
return DoThroughOmit(p, y, m, d);
|
seen_through = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case T_Empty:
|
case T_Empty:
|
||||||
case T_Comment:
|
case T_Comment:
|
||||||
@@ -358,26 +362,85 @@ int DoOmit(ParsePtr p)
|
|||||||
return E_UNKNOWN_TOKEN;
|
return E_UNKNOWN_TOKEN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m == NO_MON || d == NO_DAY) return E_SPEC_MON_DAY;
|
|
||||||
|
|
||||||
if (y == NO_YR) {
|
if (!seen_through) {
|
||||||
if (NumPartialOmits == MAX_PARTIAL_OMITS) return E_2MANY_PART;
|
/* We must have at least a month */
|
||||||
|
if (m[0] == NO_MON) return E_SPEC_MON;
|
||||||
if (d > MonthDays[m]) return E_BAD_DATE;
|
m[1] = m[0];
|
||||||
syndrome = (m<<5) + d;
|
y[1] = y[0];
|
||||||
if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) {
|
if (d[0] == NO_DAY) {
|
||||||
InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome);
|
d[0] = 1;
|
||||||
NumPartialOmits++;
|
if (y[0] == NO_YR) {
|
||||||
}
|
d[1] = MonthDays[m[0]];
|
||||||
|
} else {
|
||||||
|
d[1] = DaysInMonth(m[0], y[0]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
d[1] = d[0];
|
||||||
|
m[1] = m[0];
|
||||||
|
y[1] = y[0];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (m[0] == NO_MON) return E_SPEC_MON;
|
||||||
if (d > DaysInMonth(m, y)) return E_BAD_DATE;
|
if (m[1] == NO_MON) return E_SPEC_MON;
|
||||||
syndrome = Julian(y, m, d);
|
if ((y[0] != NO_YR && y[1] == NO_YR) ||
|
||||||
r = AddGlobalOmit(syndrome);
|
(y[0] == NO_YR && y[1] != NO_YR)) {
|
||||||
if (r) {
|
return E_BAD_DATE;
|
||||||
return r;
|
}
|
||||||
|
if (d[0] == NO_DAY) d[0] = 1;
|
||||||
|
if (d[1] == NO_DAY) {
|
||||||
|
if (y[1] == NO_YR) {
|
||||||
|
d[1] = MonthDays[m[1]];
|
||||||
|
} else {
|
||||||
|
d[1] = DaysInMonth(m[1], y[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (y[0] == NO_YR) {
|
||||||
|
/* Partial OMITs */
|
||||||
|
if (d[0] > MonthDays[m[0]]) return E_BAD_DATE;
|
||||||
|
if (d[1] > MonthDays[m[1]]) return E_BAD_DATE;
|
||||||
|
dc = d[0];
|
||||||
|
mc = m[0];
|
||||||
|
while(1) {
|
||||||
|
syndrome = (mc<<5) + dc;
|
||||||
|
if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) {
|
||||||
|
InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome);
|
||||||
|
NumPartialOmits++;
|
||||||
|
}
|
||||||
|
if (mc == m[1] && dc == d[1]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dc++;
|
||||||
|
if (dc > MonthDays[mc]) {
|
||||||
|
dc = 1;
|
||||||
|
mc++;
|
||||||
|
if (mc > 11) {
|
||||||
|
mc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Full OMITs */
|
||||||
|
if (d[0] > DaysInMonth(m[0], y[0])) return E_BAD_DATE;
|
||||||
|
if (d[1] > DaysInMonth(m[1], y[1])) return E_BAD_DATE;
|
||||||
|
start = Julian(y[0], m[0], d[0]);
|
||||||
|
end = Julian(y[1], m[1], d[1]);
|
||||||
|
if (end < start) {
|
||||||
|
Eprint("Error: THROUGH date earlier than start date");
|
||||||
|
return E_BAD_DATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (tmp = start; tmp <= end; tmp++) {
|
||||||
|
if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) {
|
||||||
|
if (NumFullOmits >= MAX_FULL_OMITS) return E_2MANY_FULL;
|
||||||
|
InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp);
|
||||||
|
NumFullOmits++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM;
|
if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM;
|
||||||
return OK;
|
return OK;
|
||||||
|
|
||||||
@@ -394,95 +457,6 @@ AddGlobalOmit(int jul)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
DoThroughOmit(ParsePtr p, int ystart, int mstart, int dstart)
|
|
||||||
{
|
|
||||||
int yend = NO_YR, mend = NO_MON, dend = NO_DAY, r;
|
|
||||||
int start, end, tmp;
|
|
||||||
int parsing = 1;
|
|
||||||
|
|
||||||
Token tok;
|
|
||||||
|
|
||||||
DynamicBuffer buf;
|
|
||||||
DBufInit(&buf);
|
|
||||||
|
|
||||||
while(parsing) {
|
|
||||||
if ( (r=ParseToken(p, &buf)) ) return r;
|
|
||||||
FindToken(DBufValue(&buf), &tok);
|
|
||||||
|
|
||||||
switch(tok.type) {
|
|
||||||
case T_Date:
|
|
||||||
DBufFree(&buf);
|
|
||||||
if (yend != NO_YR) return E_YR_TWICE;
|
|
||||||
if (mend != NO_MON) return E_MON_TWICE;
|
|
||||||
if (dend != NO_DAY) return E_DAY_TWICE;
|
|
||||||
FromJulian(tok.val, ¥d, &mend, &dend);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case T_Year:
|
|
||||||
DBufFree(&buf);
|
|
||||||
if (yend != NO_YR) return E_YR_TWICE;
|
|
||||||
yend = tok.val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case T_Month:
|
|
||||||
DBufFree(&buf);
|
|
||||||
if (mend != NO_MON) return E_MON_TWICE;
|
|
||||||
mend = tok.val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case T_Day:
|
|
||||||
DBufFree(&buf);
|
|
||||||
if (dend != NO_DAY) return E_DAY_TWICE;
|
|
||||||
dend = tok.val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case T_Empty:
|
|
||||||
case T_Comment:
|
|
||||||
case T_RemType:
|
|
||||||
case T_Priority:
|
|
||||||
case T_Tag:
|
|
||||||
case T_Duration:
|
|
||||||
DBufFree(&buf);
|
|
||||||
parsing = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Eprint("%s: `%s' (OMIT)", ErrMsg[E_UNKNOWN_TOKEN],
|
|
||||||
DBufValue(&buf));
|
|
||||||
DBufFree(&buf);
|
|
||||||
return E_UNKNOWN_TOKEN;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (yend == NO_YR || mend == NO_MON || dend == NO_DAY) return E_INCOMPLETE;
|
|
||||||
if (dend > DaysInMonth(mend, yend)) return E_BAD_DATE;
|
|
||||||
if (dstart > DaysInMonth(mstart, ystart)) return E_BAD_DATE;
|
|
||||||
|
|
||||||
start = Julian(ystart, mstart, dstart);
|
|
||||||
end = Julian(yend, mend, dend);
|
|
||||||
|
|
||||||
if (end < start) {
|
|
||||||
Wprint("Warning: Swapping dates on OMIT ... THROUGH ... line");
|
|
||||||
tmp = start;
|
|
||||||
start = end;
|
|
||||||
end = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp = end - start + 1;
|
|
||||||
|
|
||||||
/* Don't create any OMITs if there would be too many. */
|
|
||||||
if (NumFullOmits + tmp >= MAX_FULL_OMITS) return E_2MANY_FULL;
|
|
||||||
for (tmp = start; tmp <= end; tmp++) {
|
|
||||||
if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) {
|
|
||||||
InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp);
|
|
||||||
NumFullOmits++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM;
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DumpOmits(void)
|
DumpOmits(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Function Prototypes. */
|
/* Function Prototypes. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -170,3 +170,9 @@ void set_components_from_lat_and_long(void);
|
|||||||
|
|
||||||
char const *get_day_name(int wkday);
|
char const *get_day_name(int wkday);
|
||||||
char const *get_month_name(int mon);
|
char const *get_month_name(int mon);
|
||||||
|
|
||||||
|
int push_call(char const *filename, char const *func, int lineno);
|
||||||
|
void clear_callstack(void);
|
||||||
|
int have_callstack(void);
|
||||||
|
int print_callstack(FILE *fp);
|
||||||
|
void pop_call(void);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Queue up reminders for subsequent execution. */
|
/* Queue up reminders for subsequent execution. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -184,7 +184,9 @@ void HandleQueuedReminders(void)
|
|||||||
while (TimeToSleep > 0L) {
|
while (TimeToSleep > 0L) {
|
||||||
SleepTime = TimeToSleep;
|
SleepTime = TimeToSleep;
|
||||||
|
|
||||||
if (Daemon > 0 && SleepTime > (unsigned int) 60*Daemon) SleepTime = 60*Daemon;
|
if (Daemon > 0 && SleepTime > (unsigned int) 60*Daemon) {
|
||||||
|
SleepTime = 60*Daemon;
|
||||||
|
}
|
||||||
|
|
||||||
/* Wake up once a minute to recalibrate sleep time in
|
/* Wake up once a minute to recalibrate sleep time in
|
||||||
case of laptop hibernation */
|
case of laptop hibernation */
|
||||||
@@ -230,7 +232,7 @@ void HandleQueuedReminders(void)
|
|||||||
/* Do NOT trigger the reminder if tt.nexttime is more than a
|
/* Do NOT trigger the reminder if tt.nexttime is more than a
|
||||||
minute in the past. This can happen if the clock is
|
minute in the past. This can happen if the clock is
|
||||||
changed or a laptop awakes from hibernation.
|
changed or a laptop awakes from hibernation.
|
||||||
However, DO triger if tt.nexttime == tt.ttime so all
|
However, DO trigger if tt.nexttime == tt.ttime so all
|
||||||
queued reminders are triggered at least once. */
|
queued reminders are triggered at least once. */
|
||||||
if ((SystemTime(1) - (q->tt.nexttime * 60) <= 60) ||
|
if ((SystemTime(1) - (q->tt.nexttime * 60) <= 60) ||
|
||||||
(q->tt.nexttime == q->tt.ttime)) {
|
(q->tt.nexttime == q->tt.ttime)) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Print a PostScript calendar. */
|
/* Print a PostScript calendar. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -349,7 +349,7 @@ int main(int argc, char *argv[])
|
|||||||
!strcmp(DBufValue(&buf), PSBEGIN2)) {
|
!strcmp(DBufValue(&buf), PSBEGIN2)) {
|
||||||
if (!validfile) {
|
if (!validfile) {
|
||||||
if (Verbose) {
|
if (Verbose) {
|
||||||
fprintf(stderr, "Rem2PS: Version %s Copyright 1992-2021 by Dianne Skoll\n\n", VERSION);
|
fprintf(stderr, "Rem2PS: Version %s Copyright 1992-2022 by Dianne Skoll\n\n", VERSION);
|
||||||
fprintf(stderr, "Generating PostScript calendar\n");
|
fprintf(stderr, "Generating PostScript calendar\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Define the PostScript prologue */
|
/* Define the PostScript prologue */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ char *PSProlog1[] =
|
|||||||
{
|
{
|
||||||
"% This file was produced by Remind and Rem2PS, written by",
|
"% This file was produced by Remind and Rem2PS, written by",
|
||||||
"% Dianne Skoll.",
|
"% Dianne Skoll.",
|
||||||
"% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.",
|
"% Remind and Rem2PS are Copyright 1992-2022 Dianne Skoll.",
|
||||||
"/ISOLatin1Encoding where { pop save true }{ false } ifelse",
|
"/ISOLatin1Encoding where { pop save true }{ false } ifelse",
|
||||||
" /ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus",
|
" /ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus",
|
||||||
" StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute",
|
" StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Routines for sorting reminders by trigger date */
|
/* Routines for sorting reminders by trigger date */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,23 @@
|
|||||||
|
|
||||||
ALL=`grep ^#define lang.h | grep -v '#define LANG' | awk '{print $2}'`
|
ALL=`grep ^#define lang.h | grep -v '#define LANG' | awk '{print $2}'`
|
||||||
|
|
||||||
|
OUTPUT_COMPILED=lang-compiled.out
|
||||||
|
OUTPUT_RUNTIME=lang-runtime.out
|
||||||
|
cat /dev/null > $OUTPUT_COMPILED
|
||||||
|
cat /dev/null > $OUTPUT_RUNTIME
|
||||||
for i in $ALL ; do
|
for i in $ALL ; do
|
||||||
make clean
|
make clean
|
||||||
make -j`nproc` all LANGDEF=-DLANG=$i || exit 1
|
make -j`nproc` all LANGDEF=-DLANG=$i || exit 1
|
||||||
./remind -q -r ../tests/tstlang.rem
|
./remind -q -r ../tests/tstlang.rem >> $OUTPUT_COMPILED 2>&1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Rebuild English version
|
||||||
|
make clean
|
||||||
|
make -j`nproc` all || exit 1
|
||||||
|
|
||||||
|
ALL=`ls ../include/lang/*.rem`
|
||||||
|
for i in $ALL; do
|
||||||
|
./remind -q -r "-ii=\"$i\"" ../tests/tstlang.rem >> $OUTPUT_RUNTIME 2>&1
|
||||||
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* classifying the tokens parsed. */
|
/* classifying the tokens parsed. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -155,10 +155,6 @@ void FindToken(char const *s, Token *tok)
|
|||||||
int top, bot, mid, r, max;
|
int top, bot, mid, r, max;
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
#if LANG != ENGLISH
|
|
||||||
size_t i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
tok->type = T_Illegal;
|
tok->type = T_Illegal;
|
||||||
if (! *s) {
|
if (! *s) {
|
||||||
tok->type = T_Empty;
|
tok->type = T_Empty;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Routines for figuring out the trigger date of a reminder */
|
/* Routines for figuring out the trigger date of a reminder */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
/* Type definitions all dumped here. */
|
/* Type definitions all dumped here. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* functions. */
|
/* functions. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -32,6 +32,8 @@ typedef struct udf_struct {
|
|||||||
Var *locals;
|
Var *locals;
|
||||||
char IsActive;
|
char IsActive;
|
||||||
int nargs;
|
int nargs;
|
||||||
|
char const *filename;
|
||||||
|
int lineno;
|
||||||
} UserFunc;
|
} UserFunc;
|
||||||
|
|
||||||
/* The hash table */
|
/* The hash table */
|
||||||
@@ -93,6 +95,11 @@ int DoFset(ParsePtr p)
|
|||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
return E_NO_MEM;
|
return E_NO_MEM;
|
||||||
}
|
}
|
||||||
|
func->filename = StrDup(FileName);
|
||||||
|
if (!func->filename) {
|
||||||
|
return E_NO_MEM;
|
||||||
|
}
|
||||||
|
func->lineno = LineNo;
|
||||||
StrnCpy(func->name, DBufValue(&buf), VAR_NAME_LEN);
|
StrnCpy(func->name, DBufValue(&buf), VAR_NAME_LEN);
|
||||||
DBufFree(&buf);
|
DBufFree(&buf);
|
||||||
if (!Hush) {
|
if (!Hush) {
|
||||||
@@ -196,6 +203,9 @@ static void DestroyUserFunc(UserFunc *f)
|
|||||||
/* Free the function definition */
|
/* Free the function definition */
|
||||||
if (f->text) free( (char *) f->text);
|
if (f->text) free( (char *) f->text);
|
||||||
|
|
||||||
|
/* Free the filename */
|
||||||
|
if (f->filename) free( (char *) f->filename);
|
||||||
|
|
||||||
/* Free the data structure itself */
|
/* Free the data structure itself */
|
||||||
free(f);
|
free(f);
|
||||||
}
|
}
|
||||||
@@ -306,7 +316,11 @@ int CallUserFunc(char const *name, int nargs, ParsePtr p)
|
|||||||
/* Skip the opening bracket, if there's one */
|
/* Skip the opening bracket, if there's one */
|
||||||
while (isempty(*s)) s++;
|
while (isempty(*s)) s++;
|
||||||
if (*s == BEG_OF_EXPR) s++;
|
if (*s == BEG_OF_EXPR) s++;
|
||||||
|
push_call(f->filename, f->name, f->lineno);
|
||||||
h = Evaluate(&s, f->locals, p);
|
h = Evaluate(&s, f->locals, p);
|
||||||
|
if (h == OK) {
|
||||||
|
pop_call();
|
||||||
|
}
|
||||||
f->IsActive = 0;
|
f->IsActive = 0;
|
||||||
DestroyLocalVals(f);
|
DestroyLocalVals(f);
|
||||||
if (DebugFlag &DB_PRTEXPR) {
|
if (DebugFlag &DB_PRTEXPR) {
|
||||||
|
|||||||
124
src/utils.c
124
src/utils.c
@@ -5,7 +5,7 @@
|
|||||||
/* Useful utility functions. */
|
/* Useful utility functions. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -130,24 +130,33 @@ int DateOK(int y, int m, int d)
|
|||||||
|
|
||||||
/* Functions designed to defeat gcc optimizer */
|
/* Functions designed to defeat gcc optimizer */
|
||||||
|
|
||||||
int _private_div(int a, int b) { return a/b; }
|
int _private_mul_overflow(int a, int b)
|
||||||
int _private_add_overflow(int result, int b, int old)
|
|
||||||
{
|
{
|
||||||
if (b > 0 && result < old) return 1;
|
double aa = (double) a;
|
||||||
if (b < 0 && result > old) return 1;
|
double bb = (double) b;
|
||||||
return 0;
|
|
||||||
}
|
if (aa*bb > (double) INT_MAX || aa*bb < (double) INT_MIN) {
|
||||||
int _private_sub_overflow(int result, int b, int old)
|
return 1;
|
||||||
{
|
}
|
||||||
if (b < 0 && result < old) return 1;
|
|
||||||
if (b > 0 && result > old) return 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _private_unminus_overflow(int a, int b)
|
int _private_add_overflow(int a, int b)
|
||||||
{
|
{
|
||||||
if (a > 0 && b > 0) return 1;
|
double aa = (double) a;
|
||||||
if (a < 0 && b < 0) return 1;
|
double bb = (double) b;
|
||||||
|
|
||||||
|
if (aa+bb < (double) INT_MIN) return 1;
|
||||||
|
if (aa+bb > (double) INT_MAX) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int _private_sub_overflow(int a, int b)
|
||||||
|
{
|
||||||
|
double aa = (double) a;
|
||||||
|
double bb = (double) b;
|
||||||
|
|
||||||
|
if (aa-bb < (double) INT_MIN) return 1;
|
||||||
|
if (aa-bb > (double) INT_MAX) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,3 +171,90 @@ ShellEscape(char const *in, DynamicBuffer *out)
|
|||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Call-stack for printing errors from user-defined functions */
|
||||||
|
typedef struct cs_s {
|
||||||
|
struct cs_s *next;
|
||||||
|
char const *filename;
|
||||||
|
char const *func;
|
||||||
|
int lineno;
|
||||||
|
} cs;
|
||||||
|
|
||||||
|
static cs *callstack = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
destroy_cs(cs *entry)
|
||||||
|
{
|
||||||
|
if (entry->filename) free( (void *) entry->filename);
|
||||||
|
if (entry->func) free( (void *) entry->func);
|
||||||
|
free( (void *) entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
push_call(char const *filename, char const *func, int lineno)
|
||||||
|
{
|
||||||
|
cs *entry = NEW(cs);
|
||||||
|
if (!entry) {
|
||||||
|
return E_NO_MEM;
|
||||||
|
}
|
||||||
|
entry->next = NULL;
|
||||||
|
entry->filename = StrDup(filename);
|
||||||
|
entry->func = StrDup(func);
|
||||||
|
entry->lineno = lineno;
|
||||||
|
if (!entry->filename || !entry->func) {
|
||||||
|
destroy_cs(entry);
|
||||||
|
return E_NO_MEM;
|
||||||
|
}
|
||||||
|
entry->next = callstack;
|
||||||
|
callstack = entry;
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clear_callstack(void)
|
||||||
|
{
|
||||||
|
cs *entry = callstack;
|
||||||
|
cs *next;
|
||||||
|
while(entry) {
|
||||||
|
next = entry->next;
|
||||||
|
destroy_cs(entry);
|
||||||
|
entry = next;
|
||||||
|
}
|
||||||
|
callstack = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
have_callstack(void)
|
||||||
|
{
|
||||||
|
if (callstack) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_callstack_aux(FILE *fp, cs *entry)
|
||||||
|
{
|
||||||
|
if (entry) {
|
||||||
|
print_callstack_aux(fp, entry->next);
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
(void) fprintf(fp, "%s(%d): In function `%s'", entry->filename, entry->lineno, entry->func);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
print_callstack(FILE *fp)
|
||||||
|
{
|
||||||
|
print_callstack_aux(fp, callstack);
|
||||||
|
if (callstack) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pop_call(void)
|
||||||
|
{
|
||||||
|
cs *entry = callstack;
|
||||||
|
if (entry) {
|
||||||
|
callstack = entry->next;
|
||||||
|
destroy_cs(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
66
src/var.c
66
src/var.c
@@ -6,7 +6,7 @@
|
|||||||
/* user- and system-defined variables. */
|
/* user- and system-defined variables. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of REMIND. */
|
/* This file is part of REMIND. */
|
||||||
/* Copyright (C) 1992-2021 by Dianne Skoll */
|
/* Copyright (C) 1992-2022 by Dianne Skoll */
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -19,12 +19,12 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <locale.h>
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
#include "err.h"
|
#include "err.h"
|
||||||
|
|
||||||
#define UPPER(c) (islower(c) ? toupper(c) : c)
|
#define UPPER(c) (islower(c) ? toupper(c) : c)
|
||||||
|
|
||||||
/* The variable hash table */
|
/* The variable hash table */
|
||||||
@@ -40,6 +40,36 @@ static Var *VHashTbl[VAR_HASH_SIZE];
|
|||||||
|
|
||||||
typedef int (*SysVarFunc)(int, Value *);
|
typedef int (*SysVarFunc)(int, Value *);
|
||||||
|
|
||||||
|
static double
|
||||||
|
strtod_in_c_locale(char const *str, char **endptr)
|
||||||
|
{
|
||||||
|
/* Get current locale */
|
||||||
|
char const *loc = setlocale(LC_NUMERIC, NULL);
|
||||||
|
double x;
|
||||||
|
|
||||||
|
/* If it failed, punt */
|
||||||
|
if (!loc) {
|
||||||
|
return strtod(str, endptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set locale to C */
|
||||||
|
setlocale(LC_NUMERIC, "C");
|
||||||
|
|
||||||
|
x = strtod(str, endptr);
|
||||||
|
|
||||||
|
/* Back to original locale */
|
||||||
|
setlocale(LC_NUMERIC, loc);
|
||||||
|
|
||||||
|
/* If we got an error, try in original locale, but issue a warning */
|
||||||
|
if (**endptr) {
|
||||||
|
x = strtod(str, endptr);
|
||||||
|
if (!**endptr) {
|
||||||
|
Wprint("Accepting \"%s\" for $Latitude/$Longitude, but you should use the \"C\" locale decimal separator \".\" instead", str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
static void deprecated_var(char const *var, char const *instead)
|
static void deprecated_var(char const *var, char const *instead)
|
||||||
{
|
{
|
||||||
if (DebugFlag & DB_PRTLINE) {
|
if (DebugFlag & DB_PRTLINE) {
|
||||||
@@ -96,9 +126,16 @@ static int latitude_longitude_func(int do_set, Value *val, double *var, double m
|
|||||||
char buf[64];
|
char buf[64];
|
||||||
double x;
|
double x;
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
char const *loc = setlocale(LC_NUMERIC, NULL);
|
||||||
|
|
||||||
if (!do_set) {
|
if (!do_set) {
|
||||||
|
if (loc) {
|
||||||
|
setlocale(LC_NUMERIC, "C");
|
||||||
|
}
|
||||||
snprintf(buf, sizeof(buf), "%f", *var);
|
snprintf(buf, sizeof(buf), "%f", *var);
|
||||||
|
if (loc) {
|
||||||
|
setlocale(LC_NUMERIC, loc);
|
||||||
|
}
|
||||||
val->v.str = malloc(strlen(buf)+1);
|
val->v.str = malloc(strlen(buf)+1);
|
||||||
if (!val->v.str) return E_NO_MEM;
|
if (!val->v.str) return E_NO_MEM;
|
||||||
strcpy(val->v.str, buf);
|
strcpy(val->v.str, buf);
|
||||||
@@ -109,9 +146,7 @@ static int latitude_longitude_func(int do_set, Value *val, double *var, double m
|
|||||||
x = (double) val->v.val;
|
x = (double) val->v.val;
|
||||||
} else {
|
} else {
|
||||||
if (val->type != STR_TYPE) return E_BAD_TYPE;
|
if (val->type != STR_TYPE) return E_BAD_TYPE;
|
||||||
errno = 0;
|
x = strtod_in_c_locale(val->v.str, &endptr);
|
||||||
x = strtod(val->v.str, &endptr);
|
|
||||||
if (errno) return E_BAD_TYPE;
|
|
||||||
if (*endptr) return E_BAD_TYPE;
|
if (*endptr) return E_BAD_TYPE;
|
||||||
}
|
}
|
||||||
if (x < min) return E_2LOW;
|
if (x < min) return E_2LOW;
|
||||||
@@ -135,10 +170,11 @@ static int latitude_func(int do_set, Value *val)
|
|||||||
static int trig_date_func(int do_set, Value *val)
|
static int trig_date_func(int do_set, Value *val)
|
||||||
{
|
{
|
||||||
UNUSED(do_set);
|
UNUSED(do_set);
|
||||||
val->type = DATE_TYPE;
|
|
||||||
if (!LastTrigValid) {
|
if (!LastTrigValid) {
|
||||||
|
val->type = INT_TYPE;
|
||||||
val->v.val = 0;
|
val->v.val = 0;
|
||||||
} else {
|
} else {
|
||||||
|
val->type = DATE_TYPE;
|
||||||
val->v.val = LastTriggerDate;
|
val->v.val = LastTriggerDate;
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@@ -740,7 +776,11 @@ typedef struct {
|
|||||||
/* All of the system variables sorted alphabetically */
|
/* All of the system variables sorted alphabetically */
|
||||||
static SysVar SysVarArr[] = {
|
static SysVar SysVarArr[] = {
|
||||||
/* name mod type value min/mal max validate*/
|
/* name mod type value min/mal max validate*/
|
||||||
|
{"Ago", 1, STR_TYPE, &DynamicAgo, 0, 0, NULL },
|
||||||
|
{"Am", 1, STR_TYPE, &DynamicAm, 0, 0, NULL },
|
||||||
|
{"And", 1, STR_TYPE, &DynamicAnd, 0, 0, NULL },
|
||||||
{"April", 1, STR_TYPE, &DynamicMonthName[3], 0, 0, NULL },
|
{"April", 1, STR_TYPE, &DynamicMonthName[3], 0, 0, NULL },
|
||||||
|
{"At", 1, STR_TYPE, &DynamicAt, 0, 0, NULL },
|
||||||
{"August", 1, STR_TYPE, &DynamicMonthName[7], 0, 0, NULL },
|
{"August", 1, STR_TYPE, &DynamicMonthName[7], 0, 0, NULL },
|
||||||
{"CalcUTC", 1, INT_TYPE, &CalculateUTC, 0, 1, NULL },
|
{"CalcUTC", 1, INT_TYPE, &CalculateUTC, 0, 1, NULL },
|
||||||
{"CalMode", 0, INT_TYPE, &DoCalendar, 0, 0, NULL },
|
{"CalMode", 0, INT_TYPE, &DoCalendar, 0, 0, NULL },
|
||||||
@@ -762,11 +802,15 @@ static SysVar SysVarArr[] = {
|
|||||||
{"FoldYear", 1, INT_TYPE, &FoldYear, 0, 1, NULL },
|
{"FoldYear", 1, INT_TYPE, &FoldYear, 0, 1, NULL },
|
||||||
{"FormWidth", 1, INT_TYPE, &FormWidth, 20, 500, NULL },
|
{"FormWidth", 1, INT_TYPE, &FormWidth, 20, 500, NULL },
|
||||||
{"Friday", 1, STR_TYPE, &DynamicDayName[4], 0, 0, NULL },
|
{"Friday", 1, STR_TYPE, &DynamicDayName[4], 0, 0, NULL },
|
||||||
|
{"Fromnow", 1, STR_TYPE, &DynamicFromnow, 0, 0, NULL },
|
||||||
|
{"Hour", 1, STR_TYPE, &DynamicHour, 0, 0, NULL },
|
||||||
|
{"Hplu", 1, STR_TYPE, &DynamicHplu, 0, 0, NULL },
|
||||||
{"HushMode", 0, INT_TYPE, &Hush, 0, 0, NULL },
|
{"HushMode", 0, INT_TYPE, &Hush, 0, 0, NULL },
|
||||||
{"IgnoreOnce", 0, INT_TYPE, &IgnoreOnce, 0, 0, NULL },
|
{"IgnoreOnce", 0, INT_TYPE, &IgnoreOnce, 0, 0, NULL },
|
||||||
{"InfDelta", 0, INT_TYPE, &InfiniteDelta, 0, 0, NULL },
|
{"InfDelta", 0, INT_TYPE, &InfiniteDelta, 0, 0, NULL },
|
||||||
{"IntMax", 0, INT_TYPE, &IntMax, 0, 0, NULL },
|
{"IntMax", 0, INT_TYPE, &IntMax, 0, 0, NULL },
|
||||||
{"IntMin", 0, INT_TYPE, &IntMin, 0, 0, NULL },
|
{"IntMin", 0, INT_TYPE, &IntMin, 0, 0, NULL },
|
||||||
|
{"Is", 1, STR_TYPE, &DynamicIs, 0, 0, NULL },
|
||||||
{"January", 1, STR_TYPE, &DynamicMonthName[0], 0, 0, NULL },
|
{"January", 1, STR_TYPE, &DynamicMonthName[0], 0, 0, NULL },
|
||||||
{"July", 1, STR_TYPE, &DynamicMonthName[6], 0, 0, NULL },
|
{"July", 1, STR_TYPE, &DynamicMonthName[6], 0, 0, NULL },
|
||||||
{"June", 1, STR_TYPE, &DynamicMonthName[5], 0, 0, NULL },
|
{"June", 1, STR_TYPE, &DynamicMonthName[5], 0, 0, NULL },
|
||||||
@@ -784,12 +828,17 @@ static SysVar SysVarArr[] = {
|
|||||||
{"MaxStringLen", 1, INT_TYPE, &MaxStringLen, -1, ANY, NULL },
|
{"MaxStringLen", 1, INT_TYPE, &MaxStringLen, -1, ANY, NULL },
|
||||||
{"May", 1, STR_TYPE, &DynamicMonthName[4], 0, 0, NULL },
|
{"May", 1, STR_TYPE, &DynamicMonthName[4], 0, 0, NULL },
|
||||||
{"MinsFromUTC", 1, INT_TYPE, &MinsFromUTC, -780, 780, NULL },
|
{"MinsFromUTC", 1, INT_TYPE, &MinsFromUTC, -780, 780, NULL },
|
||||||
|
{"Minute", 1, STR_TYPE, &DynamicMinute, 0, 0, NULL },
|
||||||
{"Monday", 1, STR_TYPE, &DynamicDayName[0], 0, 0, NULL },
|
{"Monday", 1, STR_TYPE, &DynamicDayName[0], 0, 0, NULL },
|
||||||
|
{"Mplu", 1, STR_TYPE, &DynamicMplu, 0, 0, NULL },
|
||||||
{"NextMode", 0, INT_TYPE, &NextMode, 0, 0, NULL },
|
{"NextMode", 0, INT_TYPE, &NextMode, 0, 0, NULL },
|
||||||
{"November", 1, STR_TYPE, &DynamicMonthName[10],0, 0, NULL },
|
{"November", 1, STR_TYPE, &DynamicMonthName[10],0, 0, NULL },
|
||||||
|
{"Now", 1, STR_TYPE, &DynamicNow, 0, 0, NULL },
|
||||||
{"NumQueued", 0, INT_TYPE, &NumQueued, 0, 0, NULL },
|
{"NumQueued", 0, INT_TYPE, &NumQueued, 0, 0, NULL },
|
||||||
{"NumTrig", 0, INT_TYPE, &NumTriggered, 0, 0, NULL },
|
{"NumTrig", 0, INT_TYPE, &NumTriggered, 0, 0, NULL },
|
||||||
{"October", 1, STR_TYPE, &DynamicMonthName[9], 0, 0, NULL },
|
{"October", 1, STR_TYPE, &DynamicMonthName[9], 0, 0, NULL },
|
||||||
|
{"On", 1, STR_TYPE, &DynamicOn, 0, 0, NULL },
|
||||||
|
{"Pm", 1, STR_TYPE, &DynamicPm, 0, 0, NULL },
|
||||||
{"PrefixLineNo", 0, INT_TYPE, &DoPrefixLineNo, 0, 0, NULL },
|
{"PrefixLineNo", 0, INT_TYPE, &DoPrefixLineNo, 0, 0, NULL },
|
||||||
{"PSCal", 0, INT_TYPE, &PsCal, 0, 0, NULL },
|
{"PSCal", 0, INT_TYPE, &PsCal, 0, 0, NULL },
|
||||||
{"RunOff", 0, INT_TYPE, &RunDisabled, 0, 0, NULL },
|
{"RunOff", 0, INT_TYPE, &RunDisabled, 0, 0, NULL },
|
||||||
@@ -801,11 +850,15 @@ static SysVar SysVarArr[] = {
|
|||||||
{"SortByTime", 0, INT_TYPE, &SortByTime, 0, 0, NULL },
|
{"SortByTime", 0, INT_TYPE, &SortByTime, 0, 0, NULL },
|
||||||
{"SubsIndent", 1, INT_TYPE, &SubsIndent, 0, 132, NULL },
|
{"SubsIndent", 1, INT_TYPE, &SubsIndent, 0, 132, NULL },
|
||||||
{"Sunday", 1, STR_TYPE, &DynamicDayName[6], 0, 0, NULL },
|
{"Sunday", 1, STR_TYPE, &DynamicDayName[6], 0, 0, NULL },
|
||||||
|
{"SuppressLRM", 1, INT_TYPE, &SuppressLRM, 0, 1, NULL },
|
||||||
|
{"SysInclude", 0, STR_TYPE, &SysDir, 0, 0, NULL },
|
||||||
{"T", 0, SPECIAL_TYPE, trig_date_func, 0, 0, NULL },
|
{"T", 0, SPECIAL_TYPE, trig_date_func, 0, 0, NULL },
|
||||||
{"Td", 0, SPECIAL_TYPE, trig_day_func, 0, 0, NULL },
|
{"Td", 0, SPECIAL_TYPE, trig_day_func, 0, 0, NULL },
|
||||||
{"Thursday", 1, STR_TYPE, &DynamicDayName[3], 0, 0, NULL },
|
{"Thursday", 1, STR_TYPE, &DynamicDayName[3], 0, 0, NULL },
|
||||||
{"TimeSep", 1, SPECIAL_TYPE, time_sep_func, 0, 0, NULL },
|
{"TimeSep", 1, SPECIAL_TYPE, time_sep_func, 0, 0, NULL },
|
||||||
{"Tm", 0, SPECIAL_TYPE, trig_mon_func, 0, 0, NULL },
|
{"Tm", 0, SPECIAL_TYPE, trig_mon_func, 0, 0, NULL },
|
||||||
|
{"Today", 1, STR_TYPE, &DynamicToday, 0, 0, NULL },
|
||||||
|
{"Tomorrow", 1, STR_TYPE, &DynamicTomorrow, 0, 0, NULL },
|
||||||
{"Tuesday", 1, STR_TYPE, &DynamicDayName[1], 0, 0, NULL },
|
{"Tuesday", 1, STR_TYPE, &DynamicDayName[1], 0, 0, NULL },
|
||||||
{"Tw", 0, SPECIAL_TYPE, trig_wday_func, 0, 0, NULL },
|
{"Tw", 0, SPECIAL_TYPE, trig_wday_func, 0, 0, NULL },
|
||||||
{"Ty", 0, SPECIAL_TYPE, trig_year_func, 0, 0, NULL },
|
{"Ty", 0, SPECIAL_TYPE, trig_year_func, 0, 0, NULL },
|
||||||
@@ -815,6 +868,7 @@ static SysVar SysVarArr[] = {
|
|||||||
{"UntimedFirst", 0, INT_TYPE, &UntimedBeforeTimed, 0, 0, NULL },
|
{"UntimedFirst", 0, INT_TYPE, &UntimedBeforeTimed, 0, 0, NULL },
|
||||||
{"Uw", 0, SPECIAL_TYPE, today_wday_func, 0, 0, NULL },
|
{"Uw", 0, SPECIAL_TYPE, today_wday_func, 0, 0, NULL },
|
||||||
{"Uy", 0, SPECIAL_TYPE, today_year_func, 0, 0, NULL },
|
{"Uy", 0, SPECIAL_TYPE, today_year_func, 0, 0, NULL },
|
||||||
|
{"Was", 1, STR_TYPE, &DynamicWas, 0, 0, NULL },
|
||||||
{"Wednesday", 1, STR_TYPE, &DynamicDayName[2], 0, 0, NULL }
|
{"Wednesday", 1, STR_TYPE, &DynamicDayName[2], 0, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
# in the build directory.
|
# in the build directory.
|
||||||
#
|
#
|
||||||
# This file is part of REMIND.
|
# This file is part of REMIND.
|
||||||
# Copyright (C) 1992-2021 Dianne Skoll
|
# Copyright (C) 1992-2022 Dianne Skoll
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
DIR=`dirname $0`
|
DIR=`dirname $0`
|
||||||
@@ -328,6 +328,11 @@ fi
|
|||||||
../src/remind -w128 -c ../tests/utf-8.rem 1 Nov 2019 >> ../tests/test.out
|
../src/remind -w128 -c ../tests/utf-8.rem 1 Nov 2019 >> ../tests/test.out
|
||||||
../src/remind -c ../tests/test-addomit.rem 1 Sep 2021 >> ../tests/test.out
|
../src/remind -c ../tests/test-addomit.rem 1 Sep 2021 >> ../tests/test.out
|
||||||
|
|
||||||
|
../src/remind -cu ../tests/utf-8.rem 1 Nov 2019 >> ../tests/test.out
|
||||||
|
../src/remind -cu '-i$SuppressLRM=1' ../tests/utf-8.rem 1 Nov 2019 >> ../tests/test.out
|
||||||
|
|
||||||
|
# Remove references to SysInclude, which is build-specific
|
||||||
|
fgrep -v '$SysInclude' < ../tests/test.out > ../tests/test.out.1 && mv -f ../tests/test.out.1 ../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
|
||||||
echo "Remind: Acceptance test PASSED"
|
echo "Remind: Acceptance test PASSED"
|
||||||
|
|||||||
429
tests/test.cmp
429
tests/test.cmp
@@ -324,7 +324,8 @@ 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(74): 30 Heshvan 5761: Invalid Hebrew date
|
hebdate(30, "Heshvan", 1991-02-16, 5761) => ../tests/test.rem(74):
|
||||||
|
../tests/test.rem(71): In function `_i': 30 Heshvan 5761: Invalid Hebrew date
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
@@ -357,7 +358,8 @@ 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(78): 30 Kislev 5761: Invalid Hebrew date
|
hebdate(30, "Kislev", 1991-02-16, 5761) => ../tests/test.rem(78):
|
||||||
|
../tests/test.rem(71): In function `_i': 30 Kislev 5761: Invalid Hebrew date
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
@@ -379,7 +381,8 @@ 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(81): No Adar A in 5756
|
hebdate(30, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(81):
|
||||||
|
../tests/test.rem(71): In function `_i': 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
|
||||||
@@ -400,7 +403,8 @@ 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(83): No Adar A in 5756
|
hebdate(29, "Adar A", 1991-02-16, 5756) => ../tests/test.rem(83):
|
||||||
|
../tests/test.rem(71): In function `_i': No Adar A in 5756
|
||||||
Invalid Hebrew date
|
Invalid Hebrew date
|
||||||
Leaving UserFN _i() => Invalid Hebrew date
|
Leaving UserFN _i() => Invalid Hebrew date
|
||||||
|
|
||||||
@@ -1020,7 +1024,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.04.02"
|
version() => "04.00.02"
|
||||||
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"
|
||||||
@@ -1099,7 +1103,8 @@ 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(337): `*': Type mismatch
|
../tests/test.rem(337):
|
||||||
|
../tests/test.rem(334): In function `h': `*': 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"...
|
||||||
@@ -2589,7 +2594,7 @@ a086 4
|
|||||||
a109 2012-01-01
|
a109 2012-01-01
|
||||||
a128 2018-02-03@16:45
|
a128 2018-02-03@16:45
|
||||||
a039 "February"
|
a039 "February"
|
||||||
a058 "03.04.02"
|
a058 "04.00.02"
|
||||||
a077 "1992 92
|
a077 "1992 92
|
||||||
"
|
"
|
||||||
a096 -4
|
a096 -4
|
||||||
@@ -2686,7 +2691,11 @@ a125 -1
|
|||||||
dump $
|
dump $
|
||||||
Variable Value
|
Variable Value
|
||||||
|
|
||||||
|
$Ago "ago"
|
||||||
|
$Am "am"
|
||||||
|
$And "and"
|
||||||
$April "April"
|
$April "April"
|
||||||
|
$At "at"
|
||||||
$August "August"
|
$August "August"
|
||||||
$CalcUTC 0 [0, 1]
|
$CalcUTC 0 [0, 1]
|
||||||
$CalMode 0
|
$CalMode 0
|
||||||
@@ -2708,11 +2717,15 @@ Variable Value
|
|||||||
$FoldYear 0 [0, 1]
|
$FoldYear 0 [0, 1]
|
||||||
$FormWidth 72 [20, 500]
|
$FormWidth 72 [20, 500]
|
||||||
$Friday "Friday"
|
$Friday "Friday"
|
||||||
|
$Fromnow "from now"
|
||||||
|
$Hour "hour"
|
||||||
|
$Hplu "s"
|
||||||
$HushMode 0
|
$HushMode 0
|
||||||
$IgnoreOnce 1
|
$IgnoreOnce 1
|
||||||
$InfDelta 0
|
$InfDelta 0
|
||||||
$IntMax 2147483647
|
$IntMax 2147483647
|
||||||
$IntMin -2147483648
|
$IntMin -2147483648
|
||||||
|
$Is "is"
|
||||||
$January "January"
|
$January "January"
|
||||||
$July "July"
|
$July "July"
|
||||||
$June "June"
|
$June "June"
|
||||||
@@ -2730,12 +2743,17 @@ Variable Value
|
|||||||
$MaxStringLen 65535 [-1, Inf)
|
$MaxStringLen 65535 [-1, Inf)
|
||||||
$May "May"
|
$May "May"
|
||||||
$MinsFromUTC -300 [-780, 780]
|
$MinsFromUTC -300 [-780, 780]
|
||||||
|
$Minute "minute"
|
||||||
$Monday "Monday"
|
$Monday "Monday"
|
||||||
|
$Mplu "s"
|
||||||
$NextMode 0
|
$NextMode 0
|
||||||
$November "November"
|
$November "November"
|
||||||
|
$Now "now"
|
||||||
$NumQueued 0
|
$NumQueued 0
|
||||||
$NumTrig 37
|
$NumTrig 37
|
||||||
$October "October"
|
$October "October"
|
||||||
|
$On "on"
|
||||||
|
$Pm "pm"
|
||||||
$PrefixLineNo 0
|
$PrefixLineNo 0
|
||||||
$PSCal 0
|
$PSCal 0
|
||||||
$RunOff 0
|
$RunOff 0
|
||||||
@@ -2747,11 +2765,14 @@ Variable Value
|
|||||||
$SortByTime 0
|
$SortByTime 0
|
||||||
$SubsIndent 0 [0, 132]
|
$SubsIndent 0 [0, 132]
|
||||||
$Sunday "Sunday"
|
$Sunday "Sunday"
|
||||||
$T 1990-01-01
|
$SuppressLRM 0 [0, 1]
|
||||||
|
$T 0
|
||||||
$Td -1
|
$Td -1
|
||||||
$Thursday "Thursday"
|
$Thursday "Thursday"
|
||||||
$TimeSep ":"
|
$TimeSep ":"
|
||||||
$Tm -1
|
$Tm -1
|
||||||
|
$Today "today"
|
||||||
|
$Tomorrow "tomorrow"
|
||||||
$Tuesday "Tuesday"
|
$Tuesday "Tuesday"
|
||||||
$Tw -1
|
$Tw -1
|
||||||
$Ty -1
|
$Ty -1
|
||||||
@@ -2761,6 +2782,7 @@ Variable Value
|
|||||||
$UntimedFirst 0
|
$UntimedFirst 0
|
||||||
$Uw 6
|
$Uw 6
|
||||||
$Uy 1991
|
$Uy 1991
|
||||||
|
$Was "was"
|
||||||
$Wednesday "Wednesday"
|
$Wednesday "Wednesday"
|
||||||
msg [$April]%
|
msg [$April]%
|
||||||
../tests/test.rem(450): Trig = Saturday, 16 February, 1991
|
../tests/test.rem(450): Trig = Saturday, 16 February, 1991
|
||||||
@@ -3773,7 +3795,8 @@ trig("sun warn w") => ../tests/test.rem(740): Trig = Sunday, 17 February, 1991
|
|||||||
Entering UserFN w(1)
|
Entering UserFN w(1)
|
||||||
x => 1
|
x => 1
|
||||||
1 / 0 => Division by zero
|
1 / 0 => Division by zero
|
||||||
../tests/test.rem(740): `/': Division by zero
|
../tests/test.rem(740):
|
||||||
|
../tests/test.rem(739): In function `w': `/': Division by zero
|
||||||
Leaving UserFN w() => Division by zero
|
Leaving UserFN w() => Division by zero
|
||||||
1990-01-01
|
1990-01-01
|
||||||
trig("thu warn w") => ../tests/test.rem(740): Trig = Thursday, 21 February, 1991
|
trig("thu warn w") => ../tests/test.rem(740): Trig = Thursday, 21 February, 1991
|
||||||
@@ -3902,6 +3925,136 @@ REM Lastday April 2022 OMIT SAT SUN MSG foo
|
|||||||
REM Lastworkday April 2022 OMIT SAT SUN MSG foo
|
REM Lastworkday April 2022 OMIT SAT SUN MSG foo
|
||||||
../tests/test.rem(791): Trig = Friday, 29 April, 2022
|
../tests/test.rem(791): Trig = Friday, 29 April, 2022
|
||||||
|
|
||||||
|
SET a pad(1, "0", 2)
|
||||||
|
pad(1, "0", 2) => "01"
|
||||||
|
set a pad(1, "0", 2, 1)
|
||||||
|
pad(1, "0", 2, 1) => "10"
|
||||||
|
set a pad("foo", "quux", 14)
|
||||||
|
pad("foo", "quux", 14) => "quuxquuxquufoo"
|
||||||
|
set a pad("foo", "quux", 14, 1)
|
||||||
|
pad("foo", "quux", 14, 1) => "fooquuxquuxquu"
|
||||||
|
set a pad(11:33, " ", 12)
|
||||||
|
pad(11:33, " ", 12) => " 11:33"
|
||||||
|
set a pad(11:33, " ", 12, 1)
|
||||||
|
pad(11:33, " ", 12, 1) => "11:33 "
|
||||||
|
set a pad("foo", "0", $MaxStringLen+1)
|
||||||
|
$MaxStringLen => 65535
|
||||||
|
65535 + 1 => 65536
|
||||||
|
pad("foo", "0", 65536) => String too long
|
||||||
|
../tests/test.rem(799): String too long
|
||||||
|
|
||||||
|
# Test OMIT
|
||||||
|
CLEAR-OMIT-CONTEXT
|
||||||
|
|
||||||
|
OMIT Apr
|
||||||
|
OMIT Jun THROUGH July 15
|
||||||
|
OMIT Sep 5 THROUGH Sep 10
|
||||||
|
OMIT 2024-12-25 THROUGH 2025-01-04
|
||||||
|
OMIT Apr 2022 through July
|
||||||
|
../tests/test.rem(808): Bad date specification
|
||||||
|
|
||||||
|
OMIT DUMP
|
||||||
|
Global Full OMITs (11 of maximum allowed 1000):
|
||||||
|
2024-12-25
|
||||||
|
2024-12-26
|
||||||
|
2024-12-27
|
||||||
|
2024-12-28
|
||||||
|
2024-12-29
|
||||||
|
2024-12-30
|
||||||
|
2024-12-31
|
||||||
|
2025-01-01
|
||||||
|
2025-01-02
|
||||||
|
2025-01-03
|
||||||
|
2025-01-04
|
||||||
|
Global Partial OMITs (81 of maximum allowed 366):
|
||||||
|
04-01
|
||||||
|
04-02
|
||||||
|
04-03
|
||||||
|
04-04
|
||||||
|
04-05
|
||||||
|
04-06
|
||||||
|
04-07
|
||||||
|
04-08
|
||||||
|
04-09
|
||||||
|
04-10
|
||||||
|
04-11
|
||||||
|
04-12
|
||||||
|
04-13
|
||||||
|
04-14
|
||||||
|
04-15
|
||||||
|
04-16
|
||||||
|
04-17
|
||||||
|
04-18
|
||||||
|
04-19
|
||||||
|
04-20
|
||||||
|
04-21
|
||||||
|
04-22
|
||||||
|
04-23
|
||||||
|
04-24
|
||||||
|
04-25
|
||||||
|
04-26
|
||||||
|
04-27
|
||||||
|
04-28
|
||||||
|
04-29
|
||||||
|
04-30
|
||||||
|
06-01
|
||||||
|
06-02
|
||||||
|
06-03
|
||||||
|
06-04
|
||||||
|
06-05
|
||||||
|
06-06
|
||||||
|
06-07
|
||||||
|
06-08
|
||||||
|
06-09
|
||||||
|
06-10
|
||||||
|
06-11
|
||||||
|
06-12
|
||||||
|
06-13
|
||||||
|
06-14
|
||||||
|
06-15
|
||||||
|
06-16
|
||||||
|
06-17
|
||||||
|
06-18
|
||||||
|
06-19
|
||||||
|
06-20
|
||||||
|
06-21
|
||||||
|
06-22
|
||||||
|
06-23
|
||||||
|
06-24
|
||||||
|
06-25
|
||||||
|
06-26
|
||||||
|
06-27
|
||||||
|
06-28
|
||||||
|
06-29
|
||||||
|
06-30
|
||||||
|
07-01
|
||||||
|
07-02
|
||||||
|
07-03
|
||||||
|
07-04
|
||||||
|
07-05
|
||||||
|
07-06
|
||||||
|
07-07
|
||||||
|
07-08
|
||||||
|
07-09
|
||||||
|
07-10
|
||||||
|
07-11
|
||||||
|
07-12
|
||||||
|
07-13
|
||||||
|
07-14
|
||||||
|
07-15
|
||||||
|
09-05
|
||||||
|
09-06
|
||||||
|
09-07
|
||||||
|
09-08
|
||||||
|
09-09
|
||||||
|
09-10
|
||||||
|
CLEAR-OMIT-CONTEXT
|
||||||
|
OMIT 2000-01-01 THROUGH 2020-12-31
|
||||||
|
../tests/test.rem(812): Too many full OMITs
|
||||||
|
|
||||||
|
OMIT Dec 5 2029 through Dec 4 2029
|
||||||
|
../tests/test.rem(814): Error: THROUGH date earlier than start date
|
||||||
|
|
||||||
# Don't want Remind to queue reminders
|
# Don't want Remind to queue reminders
|
||||||
EXIT
|
EXIT
|
||||||
|
|
||||||
@@ -5399,7 +5552,7 @@ No reminders.
|
|||||||
<< /PageSize [612 792] >> setpagedevice
|
<< /PageSize [612 792] >> setpagedevice
|
||||||
% This file was produced by Remind and Rem2PS, written by
|
% This file was produced by Remind and Rem2PS, written by
|
||||||
% Dianne Skoll.
|
% Dianne Skoll.
|
||||||
% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.
|
% Remind and Rem2PS are Copyright 1992-2022 Dianne Skoll.
|
||||||
/ISOLatin1Encoding where { pop save true }{ false } ifelse
|
/ISOLatin1Encoding where { pop save true }{ false } ifelse
|
||||||
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
|
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
|
||||||
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
|
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
|
||||||
@@ -6503,7 +6656,7 @@ showpage
|
|||||||
<< /PageSize [612 792] >> setpagedevice
|
<< /PageSize [612 792] >> setpagedevice
|
||||||
% This file was produced by Remind and Rem2PS, written by
|
% This file was produced by Remind and Rem2PS, written by
|
||||||
% Dianne Skoll.
|
% Dianne Skoll.
|
||||||
% Remind and Rem2PS are Copyright 1992-2021 Dianne Skoll.
|
% Remind and Rem2PS are Copyright 1992-2022 Dianne Skoll.
|
||||||
/ISOLatin1Encoding where { pop save true }{ false } ifelse
|
/ISOLatin1Encoding where { pop save true }{ false } ifelse
|
||||||
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
|
/ISOLatin1Encoding [ StandardEncoding 0 45 getinterval aload pop /minus
|
||||||
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
|
StandardEncoding 46 98 getinterval aload pop /dotlessi /grave /acute
|
||||||
@@ -7977,4 +8130,256 @@ February 29
|
|||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
+----------+----------+----------+----------+----------+----------+----------+
|
+----------+----------+----------+----------+----------+----------+----------+
|
||||||
|
┌────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ November 2019 │
|
||||||
|
├──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┤
|
||||||
|
│ Sunday │ Monday │ Tuesday │Wednesday │ Thursday │ Friday │ Saturday │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│ │ │ │ │ │1 │2 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│3 │4 │5 │6 │7 │8 │9 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│10 │11 │12 │13 │14 │15 │16 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│17 │18 │19 │20 │21 │22 │23 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│24 │25 │26 │27 │28 │29 │30 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
|
||||||
|
┌────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ November 2019 │
|
||||||
|
├──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┤
|
||||||
|
│ Sunday │ Monday │ Tuesday │Wednesday │ Thursday │ Friday │ Saturday │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│ │ │ │ │ │1 │2 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │עִבְרִית │עִבְרִית │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│3 │4 │5 │6 │7 │8 │9 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│10 │11 │12 │13 │14 │15 │16 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│17 │18 │19 │20 │21 │22 │23 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
|
||||||
|
│24 │25 │26 │27 │28 │29 │30 │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │ру́сский │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │עִבְרִית │
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ │With tabs │ │ │ │
|
||||||
|
│ │ │ │and │ │ │ │
|
||||||
|
│ │ │ │spaces │ │ │ │
|
||||||
|
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
|
||||||
|
|
||||||
|
|||||||
@@ -790,6 +790,29 @@ REM Jan 2001 ~~1 MSG y
|
|||||||
REM Lastday April 2022 OMIT SAT SUN MSG foo
|
REM Lastday April 2022 OMIT SAT SUN MSG foo
|
||||||
REM Lastworkday April 2022 OMIT SAT SUN MSG foo
|
REM Lastworkday April 2022 OMIT SAT SUN MSG foo
|
||||||
|
|
||||||
|
SET a pad(1, "0", 2)
|
||||||
|
set a pad(1, "0", 2, 1)
|
||||||
|
set a pad("foo", "quux", 14)
|
||||||
|
set a pad("foo", "quux", 14, 1)
|
||||||
|
set a pad(11:33, " ", 12)
|
||||||
|
set a pad(11:33, " ", 12, 1)
|
||||||
|
set a pad("foo", "0", $MaxStringLen+1)
|
||||||
|
|
||||||
|
# Test OMIT
|
||||||
|
CLEAR-OMIT-CONTEXT
|
||||||
|
|
||||||
|
OMIT Apr
|
||||||
|
OMIT Jun THROUGH July 15
|
||||||
|
OMIT Sep 5 THROUGH Sep 10
|
||||||
|
OMIT 2024-12-25 THROUGH 2025-01-04
|
||||||
|
OMIT Apr 2022 through July
|
||||||
|
|
||||||
|
OMIT DUMP
|
||||||
|
CLEAR-OMIT-CONTEXT
|
||||||
|
OMIT 2000-01-01 THROUGH 2020-12-31
|
||||||
|
|
||||||
|
OMIT Dec 5 2029 through Dec 4 2029
|
||||||
|
|
||||||
# Don't want Remind to queue reminders
|
# Don't want Remind to queue reminders
|
||||||
EXIT
|
EXIT
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
# Use the output to verify your translations.
|
# Use the output to verify your translations.
|
||||||
#
|
#
|
||||||
# This file is part of REMIND.
|
# This file is part of REMIND.
|
||||||
# Copyright (C) 1992-2018 Dianne Skoll
|
# Copyright (C) 1992-2022 Dianne Skoll
|
||||||
#
|
#
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -28,18 +28,186 @@ if !$RunOff || !$DontQueue || $DontTrigAts
|
|||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Include a language file, if that's given as "-ii=/path"
|
||||||
|
|
||||||
|
if defined("i")
|
||||||
|
do [i]
|
||||||
|
# msg INCLUDING [i]
|
||||||
|
endif
|
||||||
|
|
||||||
# Set up a few useful definitions
|
# Set up a few useful definitions
|
||||||
fset show(x) "%%" + x + " yields: " + char(34) + "%" + x + char(34) + "% and %%*" + x + " yields: " + char(34) + "%*" + x + char(34) + "%"
|
fset show(x) "%%" + x + " yields: " + char(34) + "%" + x + char(34) + "% and %%*" + x + " yields: " + char(34) + "%*" + x + char(34) + "%"
|
||||||
set a trigger(today()+2) + " ++2"
|
set a trigger(today()+2) + " ++2"
|
||||||
set l language()
|
set l language()
|
||||||
set tt now()+134
|
set tt now()+134
|
||||||
set tu now()-134
|
set tu now()-134
|
||||||
|
set ut now()+60
|
||||||
|
set uu now()-60
|
||||||
|
set vt now()+120
|
||||||
|
set vu now()-120
|
||||||
|
set wt now()-1
|
||||||
|
set wu now()+1
|
||||||
|
set xt now()-2
|
||||||
|
set xu now()+2
|
||||||
|
|
||||||
set d a + " at " + tt
|
set d a + " at " + tt
|
||||||
set e a + " at " + tu
|
set e a + " at " + tu
|
||||||
|
set f a + " at " + ut
|
||||||
|
set g a + " at " + uu
|
||||||
|
set h a + " at " + wt
|
||||||
|
set j a + " at " + wu
|
||||||
|
set k a + " at " + xt
|
||||||
|
set m a + " at " + xu
|
||||||
|
set n a + " at " + vt
|
||||||
|
set p a + " at " + vu
|
||||||
|
|
||||||
msg The above is the default banner for the [l] language.
|
set a trigger(today()+7) + " ++7"
|
||||||
|
msg %_%_The following are the 7-day-in-advance substitutions:%
|
||||||
|
[a] msg [show("a")]
|
||||||
|
[a] msg [show("b")]
|
||||||
|
[a] msg [show("c")]
|
||||||
|
[a] msg [show("d")]
|
||||||
|
[a] msg [show("e")]
|
||||||
|
[a] msg [show("f")]
|
||||||
|
[a] msg [show("g")]
|
||||||
|
[a] msg [show("h")]
|
||||||
|
[a] msg [show("i")]
|
||||||
|
[a] msg [show("j")]
|
||||||
|
[a] msg [show("k")]
|
||||||
|
[a] msg [show("l")]
|
||||||
|
[a] msg [show("m")]
|
||||||
|
[a] msg [show("n")]
|
||||||
|
[a] msg [show("o")]
|
||||||
|
[a] msg [show("p")]
|
||||||
|
[a] msg [show("q")]
|
||||||
|
[a] msg [show("r")]
|
||||||
|
[a] msg [show("s")]
|
||||||
|
[a] msg [show("t")]
|
||||||
|
[a] msg [show("u")]
|
||||||
|
[a] msg [show("v")]
|
||||||
|
[a] msg [show("w")]
|
||||||
|
[a] msg [show("x")]
|
||||||
|
[a] msg [show("y")]
|
||||||
|
[a] msg [show("z")]
|
||||||
|
|
||||||
msg The following are the two-day-in-advance substitutions:%
|
set a trigger(today()+6) + " ++6"
|
||||||
|
msg %_%_The following are the 6-day-in-advance substitutions:%
|
||||||
|
[a] msg [show("a")]
|
||||||
|
[a] msg [show("b")]
|
||||||
|
[a] msg [show("c")]
|
||||||
|
[a] msg [show("d")]
|
||||||
|
[a] msg [show("e")]
|
||||||
|
[a] msg [show("f")]
|
||||||
|
[a] msg [show("g")]
|
||||||
|
[a] msg [show("h")]
|
||||||
|
[a] msg [show("i")]
|
||||||
|
[a] msg [show("j")]
|
||||||
|
[a] msg [show("k")]
|
||||||
|
[a] msg [show("l")]
|
||||||
|
[a] msg [show("m")]
|
||||||
|
[a] msg [show("n")]
|
||||||
|
[a] msg [show("o")]
|
||||||
|
[a] msg [show("p")]
|
||||||
|
[a] msg [show("q")]
|
||||||
|
[a] msg [show("r")]
|
||||||
|
[a] msg [show("s")]
|
||||||
|
[a] msg [show("t")]
|
||||||
|
[a] msg [show("u")]
|
||||||
|
[a] msg [show("v")]
|
||||||
|
[a] msg [show("w")]
|
||||||
|
[a] msg [show("x")]
|
||||||
|
[a] msg [show("y")]
|
||||||
|
[a] msg [show("z")]
|
||||||
|
|
||||||
|
set a trigger(today()+5) + " ++5"
|
||||||
|
msg %_%_The following are the 5-day-in-advance substitutions:%
|
||||||
|
[a] msg [show("a")]
|
||||||
|
[a] msg [show("b")]
|
||||||
|
[a] msg [show("c")]
|
||||||
|
[a] msg [show("d")]
|
||||||
|
[a] msg [show("e")]
|
||||||
|
[a] msg [show("f")]
|
||||||
|
[a] msg [show("g")]
|
||||||
|
[a] msg [show("h")]
|
||||||
|
[a] msg [show("i")]
|
||||||
|
[a] msg [show("j")]
|
||||||
|
[a] msg [show("k")]
|
||||||
|
[a] msg [show("l")]
|
||||||
|
[a] msg [show("m")]
|
||||||
|
[a] msg [show("n")]
|
||||||
|
[a] msg [show("o")]
|
||||||
|
[a] msg [show("p")]
|
||||||
|
[a] msg [show("q")]
|
||||||
|
[a] msg [show("r")]
|
||||||
|
[a] msg [show("s")]
|
||||||
|
[a] msg [show("t")]
|
||||||
|
[a] msg [show("u")]
|
||||||
|
[a] msg [show("v")]
|
||||||
|
[a] msg [show("w")]
|
||||||
|
[a] msg [show("x")]
|
||||||
|
[a] msg [show("y")]
|
||||||
|
[a] msg [show("z")]
|
||||||
|
|
||||||
|
set a trigger(today()+4) + " ++4"
|
||||||
|
msg %_%_The following are the 4-day-in-advance substitutions:%
|
||||||
|
[a] msg [show("a")]
|
||||||
|
[a] msg [show("b")]
|
||||||
|
[a] msg [show("c")]
|
||||||
|
[a] msg [show("d")]
|
||||||
|
[a] msg [show("e")]
|
||||||
|
[a] msg [show("f")]
|
||||||
|
[a] msg [show("g")]
|
||||||
|
[a] msg [show("h")]
|
||||||
|
[a] msg [show("i")]
|
||||||
|
[a] msg [show("j")]
|
||||||
|
[a] msg [show("k")]
|
||||||
|
[a] msg [show("l")]
|
||||||
|
[a] msg [show("m")]
|
||||||
|
[a] msg [show("n")]
|
||||||
|
[a] msg [show("o")]
|
||||||
|
[a] msg [show("p")]
|
||||||
|
[a] msg [show("q")]
|
||||||
|
[a] msg [show("r")]
|
||||||
|
[a] msg [show("s")]
|
||||||
|
[a] msg [show("t")]
|
||||||
|
[a] msg [show("u")]
|
||||||
|
[a] msg [show("v")]
|
||||||
|
[a] msg [show("w")]
|
||||||
|
[a] msg [show("x")]
|
||||||
|
[a] msg [show("y")]
|
||||||
|
[a] msg [show("z")]
|
||||||
|
|
||||||
|
set a trigger(today()+3) + " ++3"
|
||||||
|
msg %_%_The following are the 3-day-in-advance substitutions:%
|
||||||
|
[a] msg [show("a")]
|
||||||
|
[a] msg [show("b")]
|
||||||
|
[a] msg [show("c")]
|
||||||
|
[a] msg [show("d")]
|
||||||
|
[a] msg [show("e")]
|
||||||
|
[a] msg [show("f")]
|
||||||
|
[a] msg [show("g")]
|
||||||
|
[a] msg [show("h")]
|
||||||
|
[a] msg [show("i")]
|
||||||
|
[a] msg [show("j")]
|
||||||
|
[a] msg [show("k")]
|
||||||
|
[a] msg [show("l")]
|
||||||
|
[a] msg [show("m")]
|
||||||
|
[a] msg [show("n")]
|
||||||
|
[a] msg [show("o")]
|
||||||
|
[a] msg [show("p")]
|
||||||
|
[a] msg [show("q")]
|
||||||
|
[a] msg [show("r")]
|
||||||
|
[a] msg [show("s")]
|
||||||
|
[a] msg [show("t")]
|
||||||
|
[a] msg [show("u")]
|
||||||
|
[a] msg [show("v")]
|
||||||
|
[a] msg [show("w")]
|
||||||
|
[a] msg [show("x")]
|
||||||
|
[a] msg [show("y")]
|
||||||
|
[a] msg [show("z")]
|
||||||
|
|
||||||
|
set a trigger(today()+2) + " ++2"
|
||||||
|
msg %_%_The following are the two-day-in-advance substitutions:%
|
||||||
[a] msg [show("a")]
|
[a] msg [show("a")]
|
||||||
[a] msg [show("b")]
|
[a] msg [show("b")]
|
||||||
[a] msg [show("c")]
|
[a] msg [show("c")]
|
||||||
@@ -129,50 +297,539 @@ set e a + " at " + tu
|
|||||||
[a] msg [show("y")]
|
[a] msg [show("y")]
|
||||||
[a] msg [show("z")]
|
[a] msg [show("z")]
|
||||||
|
|
||||||
msg %_Time substititions for a time in the future:%
|
MSG %_Time substitutions for [now()] where now() = [now()]
|
||||||
[d] msg [show("1")]
|
REM AT [now()] MSG [show("1")]
|
||||||
[d] msg [show("2")]
|
REM AT [now()] MSG [show("2")]
|
||||||
[d] msg [show("3")]
|
REM AT [now()] MSG [show("3")]
|
||||||
[d] msg [show("4")]
|
REM AT [now()] MSG [show("4")]
|
||||||
[d] msg [show("5")]
|
REM AT [now()] MSG [show("5")]
|
||||||
[d] msg [show("6")]
|
REM AT [now()] MSG [show("6")]
|
||||||
[d] msg [show("7")]
|
REM AT [now()] MSG [show("7")]
|
||||||
[d] msg [show("8")]
|
REM AT [now()] MSG [show("8")]
|
||||||
[d] msg [show("9")]
|
REM AT [now()] MSG [show("9")]
|
||||||
[d] msg [show("0")]
|
REM AT [now()] MSG [show("0")]
|
||||||
[d] msg [show("!")]
|
REM AT [now()] MSG [show("!")]
|
||||||
[d] msg [show("@")]
|
REM AT [now()] MSG [show("@")]
|
||||||
[d] msg [show("#")]
|
REM AT [now()] MSG [show("#")]
|
||||||
msg %_Time substititions for a time in the past:%
|
MSG %_Time substitutions for [now()+134] where now() = [now()]
|
||||||
[e] msg [show("1")]
|
REM AT [now()+134] MSG [show("1")]
|
||||||
[e] msg [show("2")]
|
REM AT [now()+134] MSG [show("2")]
|
||||||
[e] msg [show("3")]
|
REM AT [now()+134] MSG [show("3")]
|
||||||
[e] msg [show("4")]
|
REM AT [now()+134] MSG [show("4")]
|
||||||
[e] msg [show("5")]
|
REM AT [now()+134] MSG [show("5")]
|
||||||
[e] msg [show("6")]
|
REM AT [now()+134] MSG [show("6")]
|
||||||
[e] msg [show("7")]
|
REM AT [now()+134] MSG [show("7")]
|
||||||
[e] msg [show("8")]
|
REM AT [now()+134] MSG [show("8")]
|
||||||
[e] msg [show("9")]
|
REM AT [now()+134] MSG [show("9")]
|
||||||
[e] msg [show("0")]
|
REM AT [now()+134] MSG [show("0")]
|
||||||
[e] msg [show("!")]
|
REM AT [now()+134] MSG [show("!")]
|
||||||
[e] msg [show("@")]
|
REM AT [now()+134] MSG [show("@")]
|
||||||
[e] msg [show("#")]
|
REM AT [now()+134] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()-134] where now() = [now()]
|
||||||
|
REM AT [now()-134] MSG [show("1")]
|
||||||
|
REM AT [now()-134] MSG [show("2")]
|
||||||
|
REM AT [now()-134] MSG [show("3")]
|
||||||
|
REM AT [now()-134] MSG [show("4")]
|
||||||
|
REM AT [now()-134] MSG [show("5")]
|
||||||
|
REM AT [now()-134] MSG [show("6")]
|
||||||
|
REM AT [now()-134] MSG [show("7")]
|
||||||
|
REM AT [now()-134] MSG [show("8")]
|
||||||
|
REM AT [now()-134] MSG [show("9")]
|
||||||
|
REM AT [now()-134] MSG [show("0")]
|
||||||
|
REM AT [now()-134] MSG [show("!")]
|
||||||
|
REM AT [now()-134] MSG [show("@")]
|
||||||
|
REM AT [now()-134] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()+60] where now() = [now()]
|
||||||
|
REM AT [now()+60] MSG [show("1")]
|
||||||
|
REM AT [now()+60] MSG [show("2")]
|
||||||
|
REM AT [now()+60] MSG [show("3")]
|
||||||
|
REM AT [now()+60] MSG [show("4")]
|
||||||
|
REM AT [now()+60] MSG [show("5")]
|
||||||
|
REM AT [now()+60] MSG [show("6")]
|
||||||
|
REM AT [now()+60] MSG [show("7")]
|
||||||
|
REM AT [now()+60] MSG [show("8")]
|
||||||
|
REM AT [now()+60] MSG [show("9")]
|
||||||
|
REM AT [now()+60] MSG [show("0")]
|
||||||
|
REM AT [now()+60] MSG [show("!")]
|
||||||
|
REM AT [now()+60] MSG [show("@")]
|
||||||
|
REM AT [now()+60] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()-60] where now() = [now()]
|
||||||
|
REM AT [now()-60] MSG [show("1")]
|
||||||
|
REM AT [now()-60] MSG [show("2")]
|
||||||
|
REM AT [now()-60] MSG [show("3")]
|
||||||
|
REM AT [now()-60] MSG [show("4")]
|
||||||
|
REM AT [now()-60] MSG [show("5")]
|
||||||
|
REM AT [now()-60] MSG [show("6")]
|
||||||
|
REM AT [now()-60] MSG [show("7")]
|
||||||
|
REM AT [now()-60] MSG [show("8")]
|
||||||
|
REM AT [now()-60] MSG [show("9")]
|
||||||
|
REM AT [now()-60] MSG [show("0")]
|
||||||
|
REM AT [now()-60] MSG [show("!")]
|
||||||
|
REM AT [now()-60] MSG [show("@")]
|
||||||
|
REM AT [now()-60] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()+120] where now() = [now()]
|
||||||
|
REM AT [now()+120] MSG [show("1")]
|
||||||
|
REM AT [now()+120] MSG [show("2")]
|
||||||
|
REM AT [now()+120] MSG [show("3")]
|
||||||
|
REM AT [now()+120] MSG [show("4")]
|
||||||
|
REM AT [now()+120] MSG [show("5")]
|
||||||
|
REM AT [now()+120] MSG [show("6")]
|
||||||
|
REM AT [now()+120] MSG [show("7")]
|
||||||
|
REM AT [now()+120] MSG [show("8")]
|
||||||
|
REM AT [now()+120] MSG [show("9")]
|
||||||
|
REM AT [now()+120] MSG [show("0")]
|
||||||
|
REM AT [now()+120] MSG [show("!")]
|
||||||
|
REM AT [now()+120] MSG [show("@")]
|
||||||
|
REM AT [now()+120] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()-120] where now() = [now()]
|
||||||
|
REM AT [now()-120] MSG [show("1")]
|
||||||
|
REM AT [now()-120] MSG [show("2")]
|
||||||
|
REM AT [now()-120] MSG [show("3")]
|
||||||
|
REM AT [now()-120] MSG [show("4")]
|
||||||
|
REM AT [now()-120] MSG [show("5")]
|
||||||
|
REM AT [now()-120] MSG [show("6")]
|
||||||
|
REM AT [now()-120] MSG [show("7")]
|
||||||
|
REM AT [now()-120] MSG [show("8")]
|
||||||
|
REM AT [now()-120] MSG [show("9")]
|
||||||
|
REM AT [now()-120] MSG [show("0")]
|
||||||
|
REM AT [now()-120] MSG [show("!")]
|
||||||
|
REM AT [now()-120] MSG [show("@")]
|
||||||
|
REM AT [now()-120] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()+1] where now() = [now()]
|
||||||
|
REM AT [now()+1] MSG [show("1")]
|
||||||
|
REM AT [now()+1] MSG [show("2")]
|
||||||
|
REM AT [now()+1] MSG [show("3")]
|
||||||
|
REM AT [now()+1] MSG [show("4")]
|
||||||
|
REM AT [now()+1] MSG [show("5")]
|
||||||
|
REM AT [now()+1] MSG [show("6")]
|
||||||
|
REM AT [now()+1] MSG [show("7")]
|
||||||
|
REM AT [now()+1] MSG [show("8")]
|
||||||
|
REM AT [now()+1] MSG [show("9")]
|
||||||
|
REM AT [now()+1] MSG [show("0")]
|
||||||
|
REM AT [now()+1] MSG [show("!")]
|
||||||
|
REM AT [now()+1] MSG [show("@")]
|
||||||
|
REM AT [now()+1] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()-1] where now() = [now()]
|
||||||
|
REM AT [now()-1] MSG [show("1")]
|
||||||
|
REM AT [now()-1] MSG [show("2")]
|
||||||
|
REM AT [now()-1] MSG [show("3")]
|
||||||
|
REM AT [now()-1] MSG [show("4")]
|
||||||
|
REM AT [now()-1] MSG [show("5")]
|
||||||
|
REM AT [now()-1] MSG [show("6")]
|
||||||
|
REM AT [now()-1] MSG [show("7")]
|
||||||
|
REM AT [now()-1] MSG [show("8")]
|
||||||
|
REM AT [now()-1] MSG [show("9")]
|
||||||
|
REM AT [now()-1] MSG [show("0")]
|
||||||
|
REM AT [now()-1] MSG [show("!")]
|
||||||
|
REM AT [now()-1] MSG [show("@")]
|
||||||
|
REM AT [now()-1] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()+2] where now() = [now()]
|
||||||
|
REM AT [now()+2] MSG [show("1")]
|
||||||
|
REM AT [now()+2] MSG [show("2")]
|
||||||
|
REM AT [now()+2] MSG [show("3")]
|
||||||
|
REM AT [now()+2] MSG [show("4")]
|
||||||
|
REM AT [now()+2] MSG [show("5")]
|
||||||
|
REM AT [now()+2] MSG [show("6")]
|
||||||
|
REM AT [now()+2] MSG [show("7")]
|
||||||
|
REM AT [now()+2] MSG [show("8")]
|
||||||
|
REM AT [now()+2] MSG [show("9")]
|
||||||
|
REM AT [now()+2] MSG [show("0")]
|
||||||
|
REM AT [now()+2] MSG [show("!")]
|
||||||
|
REM AT [now()+2] MSG [show("@")]
|
||||||
|
REM AT [now()+2] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [now()-2] where now() = [now()]
|
||||||
|
REM AT [now()-2] MSG [show("1")]
|
||||||
|
REM AT [now()-2] MSG [show("2")]
|
||||||
|
REM AT [now()-2] MSG [show("3")]
|
||||||
|
REM AT [now()-2] MSG [show("4")]
|
||||||
|
REM AT [now()-2] MSG [show("5")]
|
||||||
|
REM AT [now()-2] MSG [show("6")]
|
||||||
|
REM AT [now()-2] MSG [show("7")]
|
||||||
|
REM AT [now()-2] MSG [show("8")]
|
||||||
|
REM AT [now()-2] MSG [show("9")]
|
||||||
|
REM AT [now()-2] MSG [show("0")]
|
||||||
|
REM AT [now()-2] MSG [show("!")]
|
||||||
|
REM AT [now()-2] MSG [show("@")]
|
||||||
|
REM AT [now()-2] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [0:00] where now() = [now()]
|
||||||
|
REM AT [0:00] MSG [show("1")]
|
||||||
|
REM AT [0:00] MSG [show("2")]
|
||||||
|
REM AT [0:00] MSG [show("3")]
|
||||||
|
REM AT [0:00] MSG [show("4")]
|
||||||
|
REM AT [0:00] MSG [show("5")]
|
||||||
|
REM AT [0:00] MSG [show("6")]
|
||||||
|
REM AT [0:00] MSG [show("7")]
|
||||||
|
REM AT [0:00] MSG [show("8")]
|
||||||
|
REM AT [0:00] MSG [show("9")]
|
||||||
|
REM AT [0:00] MSG [show("0")]
|
||||||
|
REM AT [0:00] MSG [show("!")]
|
||||||
|
REM AT [0:00] MSG [show("@")]
|
||||||
|
REM AT [0:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [1:00] where now() = [now()]
|
||||||
|
REM AT [1:00] MSG [show("1")]
|
||||||
|
REM AT [1:00] MSG [show("2")]
|
||||||
|
REM AT [1:00] MSG [show("3")]
|
||||||
|
REM AT [1:00] MSG [show("4")]
|
||||||
|
REM AT [1:00] MSG [show("5")]
|
||||||
|
REM AT [1:00] MSG [show("6")]
|
||||||
|
REM AT [1:00] MSG [show("7")]
|
||||||
|
REM AT [1:00] MSG [show("8")]
|
||||||
|
REM AT [1:00] MSG [show("9")]
|
||||||
|
REM AT [1:00] MSG [show("0")]
|
||||||
|
REM AT [1:00] MSG [show("!")]
|
||||||
|
REM AT [1:00] MSG [show("@")]
|
||||||
|
REM AT [1:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [2:00] where now() = [now()]
|
||||||
|
REM AT [2:00] MSG [show("1")]
|
||||||
|
REM AT [2:00] MSG [show("2")]
|
||||||
|
REM AT [2:00] MSG [show("3")]
|
||||||
|
REM AT [2:00] MSG [show("4")]
|
||||||
|
REM AT [2:00] MSG [show("5")]
|
||||||
|
REM AT [2:00] MSG [show("6")]
|
||||||
|
REM AT [2:00] MSG [show("7")]
|
||||||
|
REM AT [2:00] MSG [show("8")]
|
||||||
|
REM AT [2:00] MSG [show("9")]
|
||||||
|
REM AT [2:00] MSG [show("0")]
|
||||||
|
REM AT [2:00] MSG [show("!")]
|
||||||
|
REM AT [2:00] MSG [show("@")]
|
||||||
|
REM AT [2:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [3:00] where now() = [now()]
|
||||||
|
REM AT [3:00] MSG [show("1")]
|
||||||
|
REM AT [3:00] MSG [show("2")]
|
||||||
|
REM AT [3:00] MSG [show("3")]
|
||||||
|
REM AT [3:00] MSG [show("4")]
|
||||||
|
REM AT [3:00] MSG [show("5")]
|
||||||
|
REM AT [3:00] MSG [show("6")]
|
||||||
|
REM AT [3:00] MSG [show("7")]
|
||||||
|
REM AT [3:00] MSG [show("8")]
|
||||||
|
REM AT [3:00] MSG [show("9")]
|
||||||
|
REM AT [3:00] MSG [show("0")]
|
||||||
|
REM AT [3:00] MSG [show("!")]
|
||||||
|
REM AT [3:00] MSG [show("@")]
|
||||||
|
REM AT [3:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [4:00] where now() = [now()]
|
||||||
|
REM AT [4:00] MSG [show("1")]
|
||||||
|
REM AT [4:00] MSG [show("2")]
|
||||||
|
REM AT [4:00] MSG [show("3")]
|
||||||
|
REM AT [4:00] MSG [show("4")]
|
||||||
|
REM AT [4:00] MSG [show("5")]
|
||||||
|
REM AT [4:00] MSG [show("6")]
|
||||||
|
REM AT [4:00] MSG [show("7")]
|
||||||
|
REM AT [4:00] MSG [show("8")]
|
||||||
|
REM AT [4:00] MSG [show("9")]
|
||||||
|
REM AT [4:00] MSG [show("0")]
|
||||||
|
REM AT [4:00] MSG [show("!")]
|
||||||
|
REM AT [4:00] MSG [show("@")]
|
||||||
|
REM AT [4:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [5:00] where now() = [now()]
|
||||||
|
REM AT [5:00] MSG [show("1")]
|
||||||
|
REM AT [5:00] MSG [show("2")]
|
||||||
|
REM AT [5:00] MSG [show("3")]
|
||||||
|
REM AT [5:00] MSG [show("4")]
|
||||||
|
REM AT [5:00] MSG [show("5")]
|
||||||
|
REM AT [5:00] MSG [show("6")]
|
||||||
|
REM AT [5:00] MSG [show("7")]
|
||||||
|
REM AT [5:00] MSG [show("8")]
|
||||||
|
REM AT [5:00] MSG [show("9")]
|
||||||
|
REM AT [5:00] MSG [show("0")]
|
||||||
|
REM AT [5:00] MSG [show("!")]
|
||||||
|
REM AT [5:00] MSG [show("@")]
|
||||||
|
REM AT [5:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [6:00] where now() = [now()]
|
||||||
|
REM AT [6:00] MSG [show("1")]
|
||||||
|
REM AT [6:00] MSG [show("2")]
|
||||||
|
REM AT [6:00] MSG [show("3")]
|
||||||
|
REM AT [6:00] MSG [show("4")]
|
||||||
|
REM AT [6:00] MSG [show("5")]
|
||||||
|
REM AT [6:00] MSG [show("6")]
|
||||||
|
REM AT [6:00] MSG [show("7")]
|
||||||
|
REM AT [6:00] MSG [show("8")]
|
||||||
|
REM AT [6:00] MSG [show("9")]
|
||||||
|
REM AT [6:00] MSG [show("0")]
|
||||||
|
REM AT [6:00] MSG [show("!")]
|
||||||
|
REM AT [6:00] MSG [show("@")]
|
||||||
|
REM AT [6:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [7:00] where now() = [now()]
|
||||||
|
REM AT [7:00] MSG [show("1")]
|
||||||
|
REM AT [7:00] MSG [show("2")]
|
||||||
|
REM AT [7:00] MSG [show("3")]
|
||||||
|
REM AT [7:00] MSG [show("4")]
|
||||||
|
REM AT [7:00] MSG [show("5")]
|
||||||
|
REM AT [7:00] MSG [show("6")]
|
||||||
|
REM AT [7:00] MSG [show("7")]
|
||||||
|
REM AT [7:00] MSG [show("8")]
|
||||||
|
REM AT [7:00] MSG [show("9")]
|
||||||
|
REM AT [7:00] MSG [show("0")]
|
||||||
|
REM AT [7:00] MSG [show("!")]
|
||||||
|
REM AT [7:00] MSG [show("@")]
|
||||||
|
REM AT [7:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [8:00] where now() = [now()]
|
||||||
|
REM AT [8:00] MSG [show("1")]
|
||||||
|
REM AT [8:00] MSG [show("2")]
|
||||||
|
REM AT [8:00] MSG [show("3")]
|
||||||
|
REM AT [8:00] MSG [show("4")]
|
||||||
|
REM AT [8:00] MSG [show("5")]
|
||||||
|
REM AT [8:00] MSG [show("6")]
|
||||||
|
REM AT [8:00] MSG [show("7")]
|
||||||
|
REM AT [8:00] MSG [show("8")]
|
||||||
|
REM AT [8:00] MSG [show("9")]
|
||||||
|
REM AT [8:00] MSG [show("0")]
|
||||||
|
REM AT [8:00] MSG [show("!")]
|
||||||
|
REM AT [8:00] MSG [show("@")]
|
||||||
|
REM AT [8:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [9:00] where now() = [now()]
|
||||||
|
REM AT [9:00] MSG [show("1")]
|
||||||
|
REM AT [9:00] MSG [show("2")]
|
||||||
|
REM AT [9:00] MSG [show("3")]
|
||||||
|
REM AT [9:00] MSG [show("4")]
|
||||||
|
REM AT [9:00] MSG [show("5")]
|
||||||
|
REM AT [9:00] MSG [show("6")]
|
||||||
|
REM AT [9:00] MSG [show("7")]
|
||||||
|
REM AT [9:00] MSG [show("8")]
|
||||||
|
REM AT [9:00] MSG [show("9")]
|
||||||
|
REM AT [9:00] MSG [show("0")]
|
||||||
|
REM AT [9:00] MSG [show("!")]
|
||||||
|
REM AT [9:00] MSG [show("@")]
|
||||||
|
REM AT [9:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [10:00] where now() = [now()]
|
||||||
|
REM AT [10:00] MSG [show("1")]
|
||||||
|
REM AT [10:00] MSG [show("2")]
|
||||||
|
REM AT [10:00] MSG [show("3")]
|
||||||
|
REM AT [10:00] MSG [show("4")]
|
||||||
|
REM AT [10:00] MSG [show("5")]
|
||||||
|
REM AT [10:00] MSG [show("6")]
|
||||||
|
REM AT [10:00] MSG [show("7")]
|
||||||
|
REM AT [10:00] MSG [show("8")]
|
||||||
|
REM AT [10:00] MSG [show("9")]
|
||||||
|
REM AT [10:00] MSG [show("0")]
|
||||||
|
REM AT [10:00] MSG [show("!")]
|
||||||
|
REM AT [10:00] MSG [show("@")]
|
||||||
|
REM AT [10:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [11:00] where now() = [now()]
|
||||||
|
REM AT [11:00] MSG [show("1")]
|
||||||
|
REM AT [11:00] MSG [show("2")]
|
||||||
|
REM AT [11:00] MSG [show("3")]
|
||||||
|
REM AT [11:00] MSG [show("4")]
|
||||||
|
REM AT [11:00] MSG [show("5")]
|
||||||
|
REM AT [11:00] MSG [show("6")]
|
||||||
|
REM AT [11:00] MSG [show("7")]
|
||||||
|
REM AT [11:00] MSG [show("8")]
|
||||||
|
REM AT [11:00] MSG [show("9")]
|
||||||
|
REM AT [11:00] MSG [show("0")]
|
||||||
|
REM AT [11:00] MSG [show("!")]
|
||||||
|
REM AT [11:00] MSG [show("@")]
|
||||||
|
REM AT [11:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [11:59] where now() = [now()]
|
||||||
|
REM AT [11:59] MSG [show("1")]
|
||||||
|
REM AT [11:59] MSG [show("2")]
|
||||||
|
REM AT [11:59] MSG [show("3")]
|
||||||
|
REM AT [11:59] MSG [show("4")]
|
||||||
|
REM AT [11:59] MSG [show("5")]
|
||||||
|
REM AT [11:59] MSG [show("6")]
|
||||||
|
REM AT [11:59] MSG [show("7")]
|
||||||
|
REM AT [11:59] MSG [show("8")]
|
||||||
|
REM AT [11:59] MSG [show("9")]
|
||||||
|
REM AT [11:59] MSG [show("0")]
|
||||||
|
REM AT [11:59] MSG [show("!")]
|
||||||
|
REM AT [11:59] MSG [show("@")]
|
||||||
|
REM AT [11:59] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [12:00] where now() = [now()]
|
||||||
|
REM AT [12:00] MSG [show("1")]
|
||||||
|
REM AT [12:00] MSG [show("2")]
|
||||||
|
REM AT [12:00] MSG [show("3")]
|
||||||
|
REM AT [12:00] MSG [show("4")]
|
||||||
|
REM AT [12:00] MSG [show("5")]
|
||||||
|
REM AT [12:00] MSG [show("6")]
|
||||||
|
REM AT [12:00] MSG [show("7")]
|
||||||
|
REM AT [12:00] MSG [show("8")]
|
||||||
|
REM AT [12:00] MSG [show("9")]
|
||||||
|
REM AT [12:00] MSG [show("0")]
|
||||||
|
REM AT [12:00] MSG [show("!")]
|
||||||
|
REM AT [12:00] MSG [show("@")]
|
||||||
|
REM AT [12:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [12:01] where now() = [now()]
|
||||||
|
REM AT [12:01] MSG [show("1")]
|
||||||
|
REM AT [12:01] MSG [show("2")]
|
||||||
|
REM AT [12:01] MSG [show("3")]
|
||||||
|
REM AT [12:01] MSG [show("4")]
|
||||||
|
REM AT [12:01] MSG [show("5")]
|
||||||
|
REM AT [12:01] MSG [show("6")]
|
||||||
|
REM AT [12:01] MSG [show("7")]
|
||||||
|
REM AT [12:01] MSG [show("8")]
|
||||||
|
REM AT [12:01] MSG [show("9")]
|
||||||
|
REM AT [12:01] MSG [show("0")]
|
||||||
|
REM AT [12:01] MSG [show("!")]
|
||||||
|
REM AT [12:01] MSG [show("@")]
|
||||||
|
REM AT [12:01] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [13:00] where now() = [now()]
|
||||||
|
REM AT [13:00] MSG [show("1")]
|
||||||
|
REM AT [13:00] MSG [show("2")]
|
||||||
|
REM AT [13:00] MSG [show("3")]
|
||||||
|
REM AT [13:00] MSG [show("4")]
|
||||||
|
REM AT [13:00] MSG [show("5")]
|
||||||
|
REM AT [13:00] MSG [show("6")]
|
||||||
|
REM AT [13:00] MSG [show("7")]
|
||||||
|
REM AT [13:00] MSG [show("8")]
|
||||||
|
REM AT [13:00] MSG [show("9")]
|
||||||
|
REM AT [13:00] MSG [show("0")]
|
||||||
|
REM AT [13:00] MSG [show("!")]
|
||||||
|
REM AT [13:00] MSG [show("@")]
|
||||||
|
REM AT [13:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [14:00] where now() = [now()]
|
||||||
|
REM AT [14:00] MSG [show("1")]
|
||||||
|
REM AT [14:00] MSG [show("2")]
|
||||||
|
REM AT [14:00] MSG [show("3")]
|
||||||
|
REM AT [14:00] MSG [show("4")]
|
||||||
|
REM AT [14:00] MSG [show("5")]
|
||||||
|
REM AT [14:00] MSG [show("6")]
|
||||||
|
REM AT [14:00] MSG [show("7")]
|
||||||
|
REM AT [14:00] MSG [show("8")]
|
||||||
|
REM AT [14:00] MSG [show("9")]
|
||||||
|
REM AT [14:00] MSG [show("0")]
|
||||||
|
REM AT [14:00] MSG [show("!")]
|
||||||
|
REM AT [14:00] MSG [show("@")]
|
||||||
|
REM AT [14:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [15:00] where now() = [now()]
|
||||||
|
REM AT [15:00] MSG [show("1")]
|
||||||
|
REM AT [15:00] MSG [show("2")]
|
||||||
|
REM AT [15:00] MSG [show("3")]
|
||||||
|
REM AT [15:00] MSG [show("4")]
|
||||||
|
REM AT [15:00] MSG [show("5")]
|
||||||
|
REM AT [15:00] MSG [show("6")]
|
||||||
|
REM AT [15:00] MSG [show("7")]
|
||||||
|
REM AT [15:00] MSG [show("8")]
|
||||||
|
REM AT [15:00] MSG [show("9")]
|
||||||
|
REM AT [15:00] MSG [show("0")]
|
||||||
|
REM AT [15:00] MSG [show("!")]
|
||||||
|
REM AT [15:00] MSG [show("@")]
|
||||||
|
REM AT [15:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [16:00] where now() = [now()]
|
||||||
|
REM AT [16:00] MSG [show("1")]
|
||||||
|
REM AT [16:00] MSG [show("2")]
|
||||||
|
REM AT [16:00] MSG [show("3")]
|
||||||
|
REM AT [16:00] MSG [show("4")]
|
||||||
|
REM AT [16:00] MSG [show("5")]
|
||||||
|
REM AT [16:00] MSG [show("6")]
|
||||||
|
REM AT [16:00] MSG [show("7")]
|
||||||
|
REM AT [16:00] MSG [show("8")]
|
||||||
|
REM AT [16:00] MSG [show("9")]
|
||||||
|
REM AT [16:00] MSG [show("0")]
|
||||||
|
REM AT [16:00] MSG [show("!")]
|
||||||
|
REM AT [16:00] MSG [show("@")]
|
||||||
|
REM AT [16:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [17:00] where now() = [now()]
|
||||||
|
REM AT [17:00] MSG [show("1")]
|
||||||
|
REM AT [17:00] MSG [show("2")]
|
||||||
|
REM AT [17:00] MSG [show("3")]
|
||||||
|
REM AT [17:00] MSG [show("4")]
|
||||||
|
REM AT [17:00] MSG [show("5")]
|
||||||
|
REM AT [17:00] MSG [show("6")]
|
||||||
|
REM AT [17:00] MSG [show("7")]
|
||||||
|
REM AT [17:00] MSG [show("8")]
|
||||||
|
REM AT [17:00] MSG [show("9")]
|
||||||
|
REM AT [17:00] MSG [show("0")]
|
||||||
|
REM AT [17:00] MSG [show("!")]
|
||||||
|
REM AT [17:00] MSG [show("@")]
|
||||||
|
REM AT [17:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [18:00] where now() = [now()]
|
||||||
|
REM AT [18:00] MSG [show("1")]
|
||||||
|
REM AT [18:00] MSG [show("2")]
|
||||||
|
REM AT [18:00] MSG [show("3")]
|
||||||
|
REM AT [18:00] MSG [show("4")]
|
||||||
|
REM AT [18:00] MSG [show("5")]
|
||||||
|
REM AT [18:00] MSG [show("6")]
|
||||||
|
REM AT [18:00] MSG [show("7")]
|
||||||
|
REM AT [18:00] MSG [show("8")]
|
||||||
|
REM AT [18:00] MSG [show("9")]
|
||||||
|
REM AT [18:00] MSG [show("0")]
|
||||||
|
REM AT [18:00] MSG [show("!")]
|
||||||
|
REM AT [18:00] MSG [show("@")]
|
||||||
|
REM AT [18:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [19:00] where now() = [now()]
|
||||||
|
REM AT [19:00] MSG [show("1")]
|
||||||
|
REM AT [19:00] MSG [show("2")]
|
||||||
|
REM AT [19:00] MSG [show("3")]
|
||||||
|
REM AT [19:00] MSG [show("4")]
|
||||||
|
REM AT [19:00] MSG [show("5")]
|
||||||
|
REM AT [19:00] MSG [show("6")]
|
||||||
|
REM AT [19:00] MSG [show("7")]
|
||||||
|
REM AT [19:00] MSG [show("8")]
|
||||||
|
REM AT [19:00] MSG [show("9")]
|
||||||
|
REM AT [19:00] MSG [show("0")]
|
||||||
|
REM AT [19:00] MSG [show("!")]
|
||||||
|
REM AT [19:00] MSG [show("@")]
|
||||||
|
REM AT [19:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [20:00] where now() = [now()]
|
||||||
|
REM AT [20:00] MSG [show("1")]
|
||||||
|
REM AT [20:00] MSG [show("2")]
|
||||||
|
REM AT [20:00] MSG [show("3")]
|
||||||
|
REM AT [20:00] MSG [show("4")]
|
||||||
|
REM AT [20:00] MSG [show("5")]
|
||||||
|
REM AT [20:00] MSG [show("6")]
|
||||||
|
REM AT [20:00] MSG [show("7")]
|
||||||
|
REM AT [20:00] MSG [show("8")]
|
||||||
|
REM AT [20:00] MSG [show("9")]
|
||||||
|
REM AT [20:00] MSG [show("0")]
|
||||||
|
REM AT [20:00] MSG [show("!")]
|
||||||
|
REM AT [20:00] MSG [show("@")]
|
||||||
|
REM AT [20:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [21:00] where now() = [now()]
|
||||||
|
REM AT [21:00] MSG [show("1")]
|
||||||
|
REM AT [21:00] MSG [show("2")]
|
||||||
|
REM AT [21:00] MSG [show("3")]
|
||||||
|
REM AT [21:00] MSG [show("4")]
|
||||||
|
REM AT [21:00] MSG [show("5")]
|
||||||
|
REM AT [21:00] MSG [show("6")]
|
||||||
|
REM AT [21:00] MSG [show("7")]
|
||||||
|
REM AT [21:00] MSG [show("8")]
|
||||||
|
REM AT [21:00] MSG [show("9")]
|
||||||
|
REM AT [21:00] MSG [show("0")]
|
||||||
|
REM AT [21:00] MSG [show("!")]
|
||||||
|
REM AT [21:00] MSG [show("@")]
|
||||||
|
REM AT [21:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [22:00] where now() = [now()]
|
||||||
|
REM AT [22:00] MSG [show("1")]
|
||||||
|
REM AT [22:00] MSG [show("2")]
|
||||||
|
REM AT [22:00] MSG [show("3")]
|
||||||
|
REM AT [22:00] MSG [show("4")]
|
||||||
|
REM AT [22:00] MSG [show("5")]
|
||||||
|
REM AT [22:00] MSG [show("6")]
|
||||||
|
REM AT [22:00] MSG [show("7")]
|
||||||
|
REM AT [22:00] MSG [show("8")]
|
||||||
|
REM AT [22:00] MSG [show("9")]
|
||||||
|
REM AT [22:00] MSG [show("0")]
|
||||||
|
REM AT [22:00] MSG [show("!")]
|
||||||
|
REM AT [22:00] MSG [show("@")]
|
||||||
|
REM AT [22:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [23:00] where now() = [now()]
|
||||||
|
REM AT [23:00] MSG [show("1")]
|
||||||
|
REM AT [23:00] MSG [show("2")]
|
||||||
|
REM AT [23:00] MSG [show("3")]
|
||||||
|
REM AT [23:00] MSG [show("4")]
|
||||||
|
REM AT [23:00] MSG [show("5")]
|
||||||
|
REM AT [23:00] MSG [show("6")]
|
||||||
|
REM AT [23:00] MSG [show("7")]
|
||||||
|
REM AT [23:00] MSG [show("8")]
|
||||||
|
REM AT [23:00] MSG [show("9")]
|
||||||
|
REM AT [23:00] MSG [show("0")]
|
||||||
|
REM AT [23:00] MSG [show("!")]
|
||||||
|
REM AT [23:00] MSG [show("@")]
|
||||||
|
REM AT [23:00] MSG [show("#")]
|
||||||
|
MSG %_Time substitutions for [23:59] where now() = [now()]
|
||||||
|
REM AT [23:59] MSG [show("1")]
|
||||||
|
REM AT [23:59] MSG [show("2")]
|
||||||
|
REM AT [23:59] MSG [show("3")]
|
||||||
|
REM AT [23:59] MSG [show("4")]
|
||||||
|
REM AT [23:59] MSG [show("5")]
|
||||||
|
REM AT [23:59] MSG [show("6")]
|
||||||
|
REM AT [23:59] MSG [show("7")]
|
||||||
|
REM AT [23:59] MSG [show("8")]
|
||||||
|
REM AT [23:59] MSG [show("9")]
|
||||||
|
REM AT [23:59] MSG [show("0")]
|
||||||
|
REM AT [23:59] MSG [show("!")]
|
||||||
|
REM AT [23:59] MSG [show("@")]
|
||||||
|
REM AT [23:59] MSG [show("#")]
|
||||||
|
|
||||||
msg %_Time substititions for the current time:%
|
|
||||||
set e a + " at " + now()
|
|
||||||
[e] msg [show("1")]
|
|
||||||
[e] msg [show("2")]
|
|
||||||
[e] msg [show("3")]
|
|
||||||
[e] msg [show("4")]
|
|
||||||
[e] msg [show("5")]
|
|
||||||
[e] msg [show("6")]
|
|
||||||
[e] msg [show("7")]
|
|
||||||
[e] msg [show("8")]
|
|
||||||
[e] msg [show("9")]
|
|
||||||
[e] msg [show("0")]
|
|
||||||
[e] msg [show("!")]
|
|
||||||
[e] msg [show("@")]
|
|
||||||
[e] msg [show("#")]
|
|
||||||
|
|
||||||
msg %_The following are the days of the week:
|
msg %_The following are the days of the week:
|
||||||
fset showwd(x) "wkday("+x+") = " + wkday(x) + "%"
|
fset showwd(x) "wkday("+x+") = " + wkday(x) + "%"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ HTMLDIR = /var/www/remind
|
|||||||
# Where you stick images and CSS files, as seen by UNIX
|
# Where you stick images and CSS files, as seen by UNIX
|
||||||
IMAGEDIR = /var/www/remind/resources
|
IMAGEDIR = /var/www/remind/resources
|
||||||
|
|
||||||
# Where images and CSS fiels are, as seen by web browers
|
# Where images and CSS files are, as seen by web browsers
|
||||||
IMAGEBASE = /remind/resources
|
IMAGEBASE = /remind/resources
|
||||||
|
|
||||||
# Set by configure - don't touch.
|
# Set by configure - don't touch.
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ it should work on any UNIX web server.
|
|||||||
|
|
||||||
To install it, you need the Remind package, available via ftp from
|
To install it, you need the Remind package, available via ftp from
|
||||||
https://dianne.skoll.ca/projects/remind/ You should install Remind,
|
https://dianne.skoll.ca/projects/remind/ You should install Remind,
|
||||||
setting the lattitude, longitude, location and time zone as appropriate
|
setting the latitude, longitude, location and time zone as appropriate
|
||||||
for your machine.
|
for your machine.
|
||||||
|
|
||||||
Once you have Remind installed, follow these steps to set up your WWW
|
Once you have Remind installed, follow these steps to set up your WWW
|
||||||
|
|||||||
Reference in New Issue
Block a user