+<P><a href="#top">Above</a> is an example of the Online Staffing Sheet in
+action. Names can be modified by typing in the fields. Hitting "Submit"
+automatically updates the storage directory.</P>
+
+<H2>Download</H2>
+
+<P>All relevant files are included in the
+<A HREF="staff-0.3.tar.gz">staff-0.3.tar.gz</A> archive.</P>
+
+<P>You also need the
+<A HREF="http://search.cpan.org/search?dist=Text-Template">Text::Template</A>,
+<A HREF="http://search.cpan.org/search?dist=MailTools">MailTools</A> and
+<A HREF="http://search.cpan.org/search?dist=TimeDate">TimeDate</A> perl
+modules.
+(<a href="http://www.perl.com/CPAN/doc/manual/html/lib/CPAN.html">CPAN</a>
+will query, download and build perl modules automatically.)</P>
+
+<H2>Configuration</H2>
+
+<P>Configuring the staffing sheet is easy.</P>
+
+<P><STRONG>Front-end</STRONG> changes can be made to the
+<A HREF="table.html">table.html</A> file, which stores the layout of the
+staffing sheet and is used to generate the database file. The table.html file
+uses some non-standard tags:</P>
+
+<UL>
+<LI><CODE>\{ form(); \}</CODE><br>
+ Use this tag to start your form instead of the HTML
+ <CODE><FORM></CODE> tag. (You should end the form with the normal
+ <CODE></FORM></CODE> tag.)
+
+<LI><CODE>\{ inputbox("<i>shift</i>"); \}</CODE><BR>
+ This tag specifies the name of a workshift, as in
+ <CODE>\{ inputbox("Door 1"); \}</CODE>. The text enclosed in the
+ tag is used as the workshift name, and is used to generate FORM INPUT
+ fields by the shift.cgi program. Characters allowed within the tag
+ include spaces, digits, and letters; however the tag cannot begin or end
+ with a space. To ensure trouble-free use, please keep the tag on
+ <STRONG>ONE</STRONG> line. For an example of intended use, check the
+ source of <A HREF="table.html">table.html</A>.
+
+<LI><CODE>\{ warnings(); \}</CODE><BR>
+ If, during the time between when you load the form and when you submit
+ your changes, one of the fields you are changing has been changed by
+ someone else, your changes will not be accepted and a warning will be
+ issued next to the input box for that field. You can use the
+ <CODE>\{ warnings(); \}</CODE> tag to return a list of all
+ warnings, so that you can locate them prominantly on the resulting page.
+
+<LI>Note: old-style
+ <CODE><WORKSHIFT><i>shift</i></WORKSHIFT></CODE> tags can be
+ converted to \{ inputbox("<i>shift</i>"); \} tags with the
+ convert-template.pl program:
+ <CODE>./convert-template.pl old-table-file.html >new-table-file.html</CODE>.
+</UL>
+
+<P>Other than these tags, anything goes. You can (and probably should) include
+tables, various types of text formatting, and anything else not covered by the
+above restrictions. If you need to use the <STRONG>\{</STRONG> or
+<STRONG>\}</STRONG> characters (the curly braces), you must preceed them with
+a <STRONG>\</STRONG> (backslash). See the
+<A HREF="http://search.cpan.org/doc/MJD/Text-Template-1.23/Template.pm">Text::Template</A>
+documentation for details on the substitution language.</P>
+
+<P><STRONG>Back-end</STRONG> configuration involves editing a few lines in the
+<STRONG>shift.cgi</STRONG> file. The <CODE>$template_file</CODE> variable must
+be set to the full path and name of the front-end table.html file. The
+<CODE>$data_directory</CODE> must be set to the full path and name of a
+directory where the data will be stored. If you want to enable the optional
+mail-notification feature (will send email to anyone who has their shift
+replaced if they included an email address), set the
+<CODE>$mail_smtpserver</CODE> variable to the name of an SMTP server which will
+relay your messages, set the <CODE>$mail_from</CODE> variable to the address
+you wish to appear in the From:, Sender: and Reply-To: headers, set the
+<CODE>$mail_subject</CODE> variable to the subject you wish to appear in the
+Subject: header, set the <CODE>@mail_cc</CODE> variable to any addresses you
+wish Cc:'ed, and set the <CODE>$mail_footer</CODE> variable to a message which
+will appear at the bottom of all warning messages.<BR>