\documentstyle{article}

% This is documentation for ReminderV1.10 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{\un{W}eekday}}
\newcommand{\beforegad}{\strbut{\un{B}efore}}
\newcommand{\aftergad}{\strbut{A\un{f}ter}}
\newcommand{\textgad}{\strbut{\un{T}ext}}
\newcommand{\comgad}{\strbut{C\un{o}mm/Script}}
\newcommand{\portgad}{\strbut{\un{P}ort}}

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

\newcommand{\newgad}{\button{\un{N}ew}}
\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}}

\newcommand{\nothing}{{\tt Not\un{h}ing }}
\newcommand{\script}{{\tt Scr\un{i}pt }}
\newcommand{\command}{{\tt \un{C}ommand }}

% 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.10 Documentation}
\author{Matti Rintala}
\date{April 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
Reminder-1.10.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 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}

\newcommand{\Installer}{{\tt Installer }}

\Reminder V1.10 has an \Installer\footnote{\copyright
Commodore-Amiga, Inc} script which takes care of the whole
installation. If you don't have \Installer, Commodore has made it
freely available, so it should be found on many ftp sites. If you
can't find it, then you'll have to install \Reminder from shell.

Make sure \Installer is in the AmigaDOS path ({\tt C:} is where I have
it), then double click on the {\tt Install-Reminder} icon. The script
installs \Reminder and \Check, {\tt ReqTools.library}\footnote{Only if
the version coming with this distribution is newer than yours},
documentation and ARexx examples, asking you for confirmation if you
don't select the Novice user level.

\subsection{Installing from shell}

Recommended way to install \Reminder from shell is to use \Installer,
i.e.\ to {\tt cd} in the directory where you unpacked this
distribution and then say $$ \hbox{\tt Installer Install-Reminder} $$
If you don't have \Installer, however, read further.

First, {\tt cd} into the directory where \Reminder is. If you know
that the {\tt ReqTools.\-library} coming with this distribution is
newer than yours\footnote{You can always check with {\tt Version}
command.} or you don't have {\tt ReqTools.library}, copy it to correct
place with $$ \hbox{\tt copy ReqTools.library LIBS:} $$ It is
recommended that you always get the whole {\tt ReqTools} distribution,
however. It can be found on Fish-disks and on most ftp sites.

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} $$

Finally copy the documentation and ARexx example files to appropriate
places.

\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'.

The text gadget above \daygad is a read-only gadget telling the
weekday of non-repeating exact events\footnote{This feature was
introduced in \Reminder V1.10.} (i.e.\ events with \daygad,
\monthgad and \yeargad set to specific values and \wdaygad as {\tt
ANY}). I myself have very little use for this gadget, but I was
requested it. {\bf The event list shows the weekday of non-repeating
exact events, also. There is a colon after the weekday indicating that
the weekday is not entered by you, but calculated by
\Reminder.}

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. If your event is an non-repeating exact event (\daygad,
\monthgad and \yeargad have all values and \wdaygad is {\tt ANY}), the
event list shows the calculated weekday of the event\footnote{This
feature was introduced in \Reminder V1.10.} plus a colon to tell you
that the weekday was calculated, not entered by you. I.e.\ if the
event list shows {\tt Thu:01-Apr-1993 Test}, it means that you haven't
requested a specific weekday, but first of April happens to be
Thursday. {\tt Sun 01-Apr-1993 Test2} tells, on the other hand, that
your event is due on the first Sunday on or after first of April.

The events in the event list are sorted in chronological
order\footnote{This feature was introduced in \Reminder V1.10.}. The
chronological order of repeating events is simply the order in which
they will occur next time.

\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{Starting a new event}

Pressing \newgad resets all event gadgets to their default values.
This is a handy way to ``start from scratch'' when you enter another
event.

\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{ARexx Gadgets}

\Check V1.10 is capable of launching ARexx scripts and commands
with every event.

With the radio buttons in the ARexx box (\nothing, \script and
\command) you can select the type of ARexx action associated with
current event.

\nothing naturally means no ARexx action at all.

\script means that \Check is to start the given ARexx script
when the event is due (the requester pops up, as usual, too). The name
of the script (and parameters) should be entered to the
\comgad. The script gets the date of the event and the
event text (both enclosed in double quotes) as its last two parameters
(i.e. after the parameters specified in the gadget). This way, if you
use {\tt Upd}\footnote{\copyright Jonas Pettersson} like I do, you can
easily create a script which uses narrator to speak the event text.
Such script is included as an example. {\tt Upd} itself is not provided,
however. It is available via ftp. Another example provided can be used
to play an audio sample (with {\tt Upd}, again).

\command tells \Check to send to ARexx port specified in \portgad the
command given in \comgad. This time no extra arguments are added.

NOTE: At the moment maximum length of text in \comgad is 28
characters, and maximum length of ARexx port name in \portgad is 10
characters.  These values are far too small, but it was the only way
to keep the database file format compatible, so that Reminder V1.00
database files can be used directly with V1.10. This will change in
V1.20 (the release time of which depends on the feedback I get).


\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).

With Event list and \wdaygad, pressing the key without shift-key
selects next entry, pressing with shift-key selects previous entry.

There are two extra features:

\begin{itemize}
\item \wdaygad can also be selected with number keys 0--7. 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 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 do not use the ability of \Check to run ARexx scripts and
commands, you may not want \Check to open {\tt RexxSysLib.library} at
all. In that case include tooltype

\begin{center}
\tt NOAREXX
\end{center}

Some people run \Check from their user-startup so early that
Workbench screen hasn't been opened yet. In that case {\tt ReqTools.library}
can't open its requesters. \Check uses Intuition's standard
{\tt EasyRequest} requester, if you include tooltype

\begin{center}
\tt NOREQTOOLS
\end{center}

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 arguments are ``{\tt INTERVAL=\# of hours}'' which defines
the minimum numbers of hours between two remindings, ``{\tt
NOREQTOOLS}'' which causes \Check not to use {\tt ReqTools.library}
and ``{\tt NOAREXX}'' which causes \Check not to open {\tt
RexxSysLib.library} and thus not use ARexx.


\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{ARexx with ReminderCheck}

If an event has an ARexx script or command associated with it,
\Check sends the command or starts the script before it opens
the requester for the event. The requester is opened immediately,
however (i.e. \Check does not wait for the ARexx script to
terminate).

NOTE: In order to get ARexx working, {\tt RexxMast} must be running at
the time \Check is run. Because both these programs are usually
launched from {\tt WBStartup}, you can't be sure which of these will be run
first. The only way is simply to try. If ARexx does not seem to work,
you have to start {\tt RexxMast} from your user-startup.

Note also that ARexx does not work if you have the {\tt NOAREXX} tooltype
in your \Check icon.

\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 RemSASc.c}, {\tt RemSAS.c}
and {\tt RemSAS.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.gui} contains the description of the user
interface in {\tt Gad\-Tools\-Box2.0} format. If you change this with
{\tt GadToolsBox}, use the following steps to produce the new source:

\begin{enumerate}

\item Enter the C Source Preferences window.

\item Make sure ``Include pragmas'', ``Static'' and ``Aztec C'' are
off and that ``Generate IDCMP handler'' is on (I also use ``Use System
font'').

\item Select Use.

\item Select C source generation and enter {\tt RemDICE.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 RemDICE.c} and {\tt
RemDICE.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.gui} contains the description of the user
interface in {\tt Gad\-Tools\-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 Make sure ``Static'' and ``Aztec C'' are off and that ``Generate 
IDCMP handler'' and ``Include pragmas'' are on (I also use ``Use
System font'').

\item Select Use.

\item Select C source generation and enter {\tt RemSAS.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}
