\documentstyle{article}

% This is documentation for ReminderV1.00 by Matti Rintala

\newcommand{\Reminder}{{\sc Reminder }}
\newcommand{\Check}{{\sc Reminder\-Check }}

% Commands for making gadget-like boxes
\newcommand{\button}[1]{\fbox{\small #1}\ }
\newcommand{\strbut}[1]{\setbox0=\hbox{\small %
#1}\raisebox{-3pt}{$\stackrel{\fbox{\hskip \wd0}}{\mbox{\small #1}}$} }
\newcommand{\un}[1]{\underline{#1}}

% Gagets of Reminder
\newcommand{\daygad}{\strbut{\un{D}ay}}
\newcommand{\monthgad}{\strbut{\un{M}onth}}
\newcommand{\yeargad}{\strbut{\un{Y}ear}}
\newcommand{\wdaygad}{\strbut{Weekday}}
\newcommand{\beforegad}{\strbut{\un{B}efore}}
\newcommand{\aftergad}{\strbut{A\un{f}ter}}
\newcommand{\textgad}{\strbut{\un{T}ext}}

\newcommand{\autodelgad}{\button{$\scriptstyle \surd$}{\tt D\un{e}lete event\ldots\ }}

\newcommand{\addgad}{\button{\un{A}dd}}
\newcommand{\remgad}{\button{\un{R}emove}}
\newcommand{\updgad}{\button{\un{U}pdate}}
\newcommand{\cangad}{\button{\un{Q}uit, no save}}
\newcommand{\quitgad}{\button{Quit and \un{s}ave}}

% Gadgets of ReminderCheck
\newcommand{\remquitgad}{\button{\un{Q}uit}}
\newcommand{\remgogad}{\button{\bf \un{G}o away}}
\newcommand{\remackgad}{\button{\un{A}cknowledge}}


\title{\Reminder 1.00 Documentation}
\author{Matti Rintala}
\date{March 5, 1993}

\begin{document}

\maketitle

\begin{abstract}

This document describes the usage of \Reminder and \Check programs.
Both programs and the source code are \copyright 1993 Matti Rintala.
They can be distributed freely however, see section Distribution
below.

\end{abstract}

\tableofcontents

\section{Copyright and Distribution}

   \Reminder and \Check are \copyright 1993 Matti
Rintala\footnote{This section is modified from the similar section of
{\tt ToolManager 2.0} by {\em Stefan Becker}. I hope you don't mind,
Stefan!}

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   No guarantee of any kind is given that the programs described in
this document are 100 \% reliable. You are using this material at your
own risk. The author {\bf can not} be made responsible for any damage which
is caused by using these programs.

   This package is freely distributable, but still copyright by Matti
Rintala. This means that you can copy it freely as long as you don't ask
for a more than nominal copying fee.

   Permission is granted to include this package in Public-Domain
collections, especially in {\em Fred Fish's Amiga Disk Library} (including CD
ROM versions of it). The distribution file may be uploaded to Bulletin
Board Systems or FTP servers. If you want to distribute this program
you {\bf must} use the contents of the original distribution archive `{\tt
Reminder1.0.lha}'. The archive may be distributed unpacked or packed
with a different archiver, if necessary.

   None of the programs nor the source code (nor parts of it) may be
included or used in commercial programs unless by written permission
from the author.

   {\bf None} of the programs {\bf nor} the source code (nor parts of it) may
be used on any machine which is used for the research, development,
construction, testing or production of weapons or other military
applications. This also includes any machine which is used for training
persons for {\bf any} of the above mentioned purposes. The same goes
for unnecessary animal testing.

You may modify the source code as you wish, provided that my name
still exists there and you add a comment to the code explaining that
the source is modified. If you think the change you made is useful,
send it to me so that it can be included in the next official version
(I promise to mention your name in the docs). {\bf Please do not
distribute modified versions of \Reminder and \Check yourself, as this
only creates conflicting version numbers etc!}

\section{How to Avoid Reading This Manual}

Read {\tt QuickRef.doc}. Try programs. Experiment. Guess.

\section{What and is \Reminder and Why?}

For some time I have been searching for a program which would remind
me of important events like birthdays, days when rent has to be paid
etc. There are already several PD or shareware programs like {\tt
CyberCron}, which do mostly what I want --- but they stay in the
memory as background tasks and consume precious RAM.

Then I tried {\tt MemoMaster} which could be made to run once in
startup, but its 1.3-like user interface and certain other features
(for example, the lack of monthly events) made it unsuitable for me.

After that I sighed and wrote \Reminder. The system consists of two
programs. \Reminder is for entering your events to a database file,
and \Check is put into your {\tt WBStartup}, where it is run every time you
boot and reminds you about the events and then quits.

Both programs use the excellent {\tt
ReqTools.library}\footnote{\copyright {\em Nico Fran\c{c}ois}},
and the user interface of \Reminder was created with {\tt
GadToolsBox}\footnote{\copyright \em Jan van den Baard}. The
binaries in this distribution were compiled with {\tt
SAS/C6.2}\footnote{\copyright SAS Institute Inc.} with
optimization on, but the source files can be compiled with {\tt
DICE}\footnote{\copyright {\em Matthew Dillon}} also.

\section{System Requirements}

\Reminder and \Check require at least {\bf AmigaDOS 2.x} and {\tt
Req\-Tools.library}\footnote{A copy of the library is inluded in this
distribution}. They were developed and have been tested on Amiga 2000
with GVP\ G-Force\ 68030/25MHz, 1 MB Chip and 5 MB Fast running
AmigaDOS 2.04.  They worked also with the G-Force turned off (i.e.\
normal Amiga 2000 with 1 MB Chip and no Fast). There is no reason why
they shouldn't run on any Amiga with at least 2.x, however.

\section{How to Contact the Author}

First, if you are using \Reminder, please send me e-mail, a postcard,
Amiga 4000 or whatever. I'm interested in knowing that someone else is
using \Reminder, too. The feedback may also encourage me to make
improvements etc, so all suggestions are wellcome.

The best way to contact me is via e-mail. My mail address is

\begin{center}
\tt bitti@cs.tut.fi
\end{center}

The postcards and the A4000 should go to address

\begin{flushleft}
Matti Rintala \\
Pyykkiojankatu 2 C 24 \\
33710 TAMPERE \\
FINLAND
\end{flushleft}

\section{Installing \Reminder and \Check}

\Reminder and \Check can be installed from both Workbench or shell.

\subsection{Installing from Workbench}

Double click on {\tt InstallLibs} to install {\tt ReqTools.library} to
your {\tt LIBS:} directory. The installation will take place only if
you don't already have {\tt Req\-Tools.library} in your {\tt LIBS:} or
if the version coming with this distribution is newer than the one you
have. {\bf If the installation takes place, it is recommended that you
get yourself a complete distribution of {\tt ReqTools.library} as it
currently has Preferences program etc.\ which are not included in this
distribution.}

Finally use the mouse to drag {\tt Reminder} to a place you use for
your executables and {\tt ReminderCheck} to your {\tt SYS:WBStartup}
drawer.

\subsection{Installing from shell}

First, {\tt cd} into the directory where \Reminder is. Type
$$ \hbox{\tt execute InstallLibs} $$
to install {\tt ReqTools.library} to your {\tt LIBS:} directory. The
installation will take place only if you don't already have {\tt
ReqTools.library} in your {\tt LIBS:} or if the version coming with
this distribution is newer than the one you have.  {\bf If the
installation takes place, it is recommended that you get yourself a
complete distribution of {\tt ReqTools.library} as it currently has
Preferences program etc. which are not included in this distribution.}

Then copy the executables to appropriate places with
$$ \hbox{\tt copy Reminder Reminder.info \em your\_directory} $$
$$ \hbox{\tt copy ReminderCheck ReminderCheck.info SYS:WBStartup} $$


\section{\Reminder}

Reminder can be started from shell and from Workbench.

\subsection{Workbench usage}

\Reminder can be started from Workbench simply by double clicking its
icon. In the icon you can define the database file\footnote{Default
name is ``{\tt S:Reminder.data}''.} used by \Reminder with tooltype

\begin{center}
\tt FILE=filename
\end{center}

\subsection{Shell usage}

\Reminder can be started from shell simply by typing {\tt Reminder}
and pressing Enter. You can also type ``{\tt FILE=filename}'' as a
command line argument to specify the database file\footnote{Default
name is ``{\tt S:Reminder.data}''. {\em Repetitio est mater
studiorum.}} to be used.

\subsection{Entering and Editing Events}

After starting \Reminder a window opens, presenting a list of existing
events and gadgets needed to add and edit events.

\subsubsection{The Date Gadgets}

The date of an event consists of the \daygad, \monthgad, \yeargad and
\wdaygad gadgets. Leaving any of these gadgets empty (\monthgad and
\wdaygad show {\tt ANY} instead of empty gadget) means that any value
is acceptable. This way you can enter repeating events. \wdaygad is
different from other gadgets, however. {\bf Selecting a weekday into
\wdaygad means that the event is due on the next specified weekday ON
OR AFTER the date selected.}

\daygad accepts all numbers from 1 to 31, empty gadget representing
`any day'.

You can select a month into \monthgad from the list above it. You can
of course enter the month by hand, too. In this case \Reminder selects
the first month starting with the letters you entered (I.e.\ entering
{\tt ap} would select {\tt April}).  Entering the month this way is
case-insensitive. You can also enter into the gadget just the number
of the month (I.e.\ entering {\tt 10} would select {\tt October}).
Leaving the gadget empty (or entering or selecting {\tt ANY}) means
`any month'.

\yeargad accepts all numbers from 1993 to 2099\footnote{Upper limit is
just to make you notice stupid typos like 2993.}. You can also enter a
number from 93 to 99 to represent years 1993 -- 1999 or a number from
0 to 92 to represent years 2000 -- 2092. Leaving the gadget empty
means `any year'.

You can enter a value to \wdaygad by selecting a weekday from the list
above the gadget. Selecting {\tt ANY} means `any weekday'.

A few examples should clarify the usage of date gadgets.

\begin{itemize}
\item Entering {\tt 22} to \daygad, {\tt March} to \monthgad, {\tt 1993} to
\yeargad and {\tt ANY} to \wdaygad means that the event is on March 22,
1993.
\item Entering {\tt 22} to \daygad, {\tt March} to \monthgad, empty to
\yeargad and {\tt ANY} to \wdaygad means that the event is on March 22,
every year.
\item Entering {\tt 1} to \daygad, empty to \monthgad, {\tt 1993} to
\yeargad and {\tt Thursday} to \wdaygad means that the event is on
first Thursday\footnote{Actually first Thursday on or after the first
day of the month, which is the same thing.} of every month on year
1993.
\item Entering {\tt 8} to \daygad, empty to \monthgad, empty to
\yeargad and {\tt Monday} to \wdaygad means that the event is on
second Monday\footnote{The first Monday is always before the 8. day of
the month and the second can't be before the 8. day.} of every month,
every year.
\end{itemize}

\subsubsection{The Before and After Gadgets}

With these gadgets you can select how long before the event \Check
starts reminding you about it, and how long after the event \Check
should still remind about it, if you haven't acknowledged the event
before that.

\beforegad accepts any value from 1 to 365, defining how many days
before the event \Check should start reminding. Leaving the gadget
empty means that reminding should start on the day the event is due.

\aftergad accepts any value from 1 to 365, defining how many days
after the event \Check should still remind about it if the event has
not been acknowledged. Leaving the gadget empty means that reminding
should stop after the day the event is due.

\subsubsection{Automatic Deletion of Acknowledged Events}

If you check the gadget \autodelgad, \Check automatically deletes the events
you acknowledge. If you leave this gadget unchecked, events are not
deleted unless you remove them yourself with \Reminder.

{\bf Note that using the automatic deletion with repeating events is
not usually wise as the event is deleted after the FIRST
acknowledgement of the event!}

\subsubsection{Event Text}

Into \textgad you should write the text you want to appear in the
reminding requester. The maximum length of the text is 80 characters.

\subsection{Event List}

The listview gadget in the upper left corner shows all events
currently in the event database. The list shows the weekday and date
of the event (or stars for `wildcards') and the beginning of the event
text.

\subsection{Adding New Events}

Adding new events is easy. Just enter the event parameters using the
gadgets described above and click \addgad. The event appears in the
event list.

\subsection{Removing Events}

Removing events is even easier. Select the event from the event list and
click \remgad. The event is removed from the event list and from the
database.

\subsection{Updating Existing Event Information}

With \updgad you can change parameters of existing events. Just select
the event from the event list. All event gadgets now show the values
for that event. Update any gadgets you want and then click \updgad.
The event is now updated and the event list also shows the updated
event information.

\subsection{Quitting \Reminder}

There are three ways to quit \Reminder:

\begin{itemize}

\item Click \quitgad. The changes to the event database are saved
and \Reminder terminates.

\item Click \cangad. If the database has been changed, you are first asked
whether you really want to exit \Reminder without saving the changes.
If you answer {\tt Yes}, the changes are lost, otherwise you are
returned to \Reminder.

\item Click the close gadget of \Reminder window. If the database has
been changed, you are asked whether you want to save the changes. If
you answer {\tt Yes}, the changes are saved, otherwise they are lost.
\Reminder then terminates.
\end{itemize}

\subsection{Keyboard shortcuts}

\Reminder can be used with keyboard only, too. Most of the gadgets
have underlined characters, which activate the gadget (you don't have
to press Alt or Amiga keys or anything). There are two exceptions:

\begin{itemize}
\item \wdaygad does not have anything underlined in its name. This is
because numbers 0--7 are used to select the weekday. 0 means {\tt
ANY}, 1 is {\tt Monday} etc.

\item Events may be selected from the event list using the $\uparrow$
and $\downarrow$ keys.
\end{itemize}

\section{\Check}

\Check can be started from shell and from Workbench. The best place for
it is in your {\tt SYS:WBStartup} drawer.

\subsection{Workbench usage}

\Check can be started from Workbench simply by double clicking its
icon. In the icon you can define the database file\footnote{Default
name is ``{\tt S:Reminder.data}''.} used by \Check with tooltype

\begin{center}
\tt FILE=filename
\end{center}

You can also set the minimum time that has to pass before \Check
reminds you again\footnote{I added this feature because I happen to
boot my machine quite often.}. Default is to remind every time \Check
is run. The interval is set with tooltype

\begin{center}
\tt INTERVAL=minimum \# of hours between two remindings
\end{center}

For example, if you set {\tt INTERVAL=3}, run \Check and it reminds
you, then running \Check again within next three hours does nothing.

If you use \Check in your {\tt SYS:WBStartup}, you should also include
tooltype

\begin{center}
\tt DONOTWAIT
\end{center}

\subsection{Shell usage}

\Check can be started from shell simply by typing {\tt ReminderCheck}
and pressing Enter. You can also type ``{\tt FILE=filename}'' as a
command line argument to specify the database file\footnote{Default
name is ``{\tt S:Reminder.data}''.} to be used. The other possible
command line argument is ``{\tt INTERVAL=\# of hours}'' which
defines the minimum numbers of hours between two remindings.

\subsection{\Check Requesters}

If \Check finds a event it has to remind you about, it pops up a
requester telling you the date of the event and the event text you
have entered for the event. The requester has three buttons:

\begin{itemize}

\item \remgogad tells \Check that you have noticed the requester but
want it to keep reminding you about this event and date\footnote{Next
time \Check is run, that is.}. For example, if the event says that you
should pay your rent, you should use this button until you really have
paid it.

\item \remackgad tells \Check that you've dealt with this event, so
reminding you again is not necessary. Of course, if the event is a
repeating one (has other `wildcards' than the weekday), \Check will
remind you again the next time the event is due. If you checked the
\autodelgad when you entered the event, the event is deleted from the
database when you acknowledge it.

\item \remquitgad tells \Check to abort immediately.

\end{itemize}

\subsection{Keyboard shortcuts}

Like \Reminder, \Check has also keyboard shortcuts for the buttons.
Just press the key that is underlined in the button text. The button
whose text is in {\bf boldface} (\remgogad) is the default button
which can be selected with Enter key also. You can use ESC key to
select \remquitgad.

\section{Source Code}

The distributed source should compile under both SAS/C6.x and DICE.
{\bf If you are planning to make changes to source and want to
distribute the altered version, read the ``Copyright and
Distribution'' section.}

To compile \Reminder and \Check you will also need the .h and .lib
files for {\tt ReqTools.library}\footnote{At least version 38
needed.}. These files are not included, but the complete ReqTools
distribution can be found on many ftp sites and for example on Fish
Disk \#794.

\subsection{Compiling under DICE}

The provided {\tt DMakefile} should do most of the work, so just type
``{\tt dmake}'' to compile both programs or ``{\tt dmake Reminder}''
or ``{\tt dmake ReminderCheck}'' to compile only one.

The source files have some parts between ``{\tt \#ifdef \_DCC}'' and
``{\tt \#endif}''. These parts are not needed when compiled with
SAS-C, so if your change applies to DICE only, use the same method to
keep the source consistent.

Similarly the parts between ``{\tt \#ifdef \_\_SASC}'' and ``{\tt
\#endif}'' are not used when compiled with DICE, so make sure you
don't write anything DICE needs into these parts.

Notice also that the files {\tt Reminder\-SASc.c}, {\tt Reminder\-SAS.c}
and {\tt Reminder\-SAS.h} are not used under DICE. They are {\tt
GadToolsBox} generated source files (and an additional prototype file)
for SAS-C only.

\subsubsection{Changing the user interface with {\tt GadToolsBox}}

The file {\tt Reminder.g} contains the description of the user
interface in {\tt GadTools\-Box} format. If you change this with {\tt
GadToolsBox}, use the following steps to produce the new source:

\begin{enumerate}

\item Enter the Preferences window.

\item Load the preference file {\tt ReminderDICE.prefs}. This file
contains source generation preferences for DICE.

\item Select Use.

\item Select C source generation and enter {\tt ReminderDICE.c} as the
output file. The source is now generated in correct format and into
the correct file.

\item Exit {\tt GadToolsBox} and type ``{\tt dmake Reminder}'' to
compiled \Reminder.

\end{enumerate}

\subsection{Compiling under SAS-C}

The provided {\tt smakefile} should do most of the work, so just type
``{\tt smake}'' to compile both programs or ``{\tt smake Reminder}''
or ``{\tt smake ReminderCheck}'' to compile only one.

The source files have a some parts between ``{\tt \#ifdef \_\_SASC}'' and
``{\tt \#endif}''. These parts are not needed when compiled with DICE,
so if your change applies only to SAS-C, use the same method to keep
the source consistent.

Similarly the parts between ``{\tt \#ifdef \_DCC}'' and ``{\tt
\#endif}'' are not used when compiled with SAS-C, so make sure you
don't write anything SAS-C needs into these places.

Notice also that the files {\tt ReminderDICE.c} and {\tt
ReminderDICE.h} are not used under SAS-C. They are {\tt GadToolsBox}
generated source files for DICE only.

\subsubsection{Changing the user interface with {\tt GadToolsBox}}

The file {\tt Reminder.g} contains the description of the user
interface in {\tt GadTools\-Box} format. If you change this with {\tt
GadToolsBox}, use the following steps to produce the new source:

\begin{enumerate}

\item Enter the Preferences window.

\item Load the preference file {\tt ReminderSAS.prefs}. This file
contains source generation preferences for SAS-C.

\item Select Use.

\item Select C source generation and enter {\tt ReminderSAS.c} as the
output file. The source is now generated in correct format and into
the correct file.

\item Exit {\tt GadToolsBox} and type ``{\tt smake Reminder}'' to
compiled \Reminder.

\end{enumerate}

\section{Final Words and Acknowledgements}

That's it, really! I hope you have use for \Reminder, at least I do.

I'd like to thank the following people, without whom writing \Reminder
would have been impossible or at least much more painful:

\begin{itemize}

\item The folks at Commodore for creating Amiga in the fist place

\item {\em Matthew Dillon} for DICE

\item SAS Institute for SAS-C

\item {\em Nico Fran\c{c}ois} for {\tt ReqTools.library}

\item {\em Jan van den Baard} for {\tt GadToolsBox}

\item {\em Steve Koren} for SK-shell

\item Free Software Foundation and {\em Dvaid Gay} for {\tt GnuEmacs}

\item The people who wrote {\tt RCS} and Un*x {\tt dmake} and those
who ported them to Amiga

\item And all people writing software (especially PD and freeware) to
Amiga

\end{itemize}

\end{document}
