new, more readable table.html from JD
authorivan <ivan>
Tue, 17 Apr 2001 18:10:23 +0000 (18:10 +0000)
committerivan <ivan>
Tue, 17 Apr 2001 18:10:23 +0000 (18:10 +0000)
TODO
table.html

diff --git a/TODO b/TODO
index 771ae48..bba92ca 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,3 +1,8 @@
+the kludge which greps for inputbox("field") in template to find valid form
+fields doesn't work when there are multiple inputbox'es on a line.  perhaps
+it is time to come up with something that's not a kludge - but what?  have
+user specify all the field names explicitly, elsewhere?
+
 here's a one-liner to find duplicate inputbox'es:
 
 grep inputbox staffing.html | perl -pe '/inputbox\(\"(.*)\"\)/ or die; $_="$1\n";' | sort | uniq -d
@@ -49,3 +54,45 @@ easier.  Nothing like feature creep, eh?  :-)
 Cheers,
 Rob
 
+On Tue, Dec 19, 2000 at 07:53:19PM -0800, goolie wrote:
+> 
+> Ivan,
+> 
+> Tell me... how hard would it be to get this staffsheet thing to print out
+> names and the times their supposed to work?  Pretty hard, huh?  I'm just
+> curious...
+
+to do it "right", as in, have the staffsheet know about *time*.  that
+wouldn't be trivial.  that's my long-term project, where you layout the
+staff sheet with an html interface, and it knows what time each signup box
+is.
+
+however, if you could, say, add a field to each { inputbox } which is just
+what you wanted to print out on the slip... that i could do without a lot
+of work.
+
+so right now, inputbox'es look like:
+
+  { inputbox("shift_name"); }
+
+and instead, they would look like:
+
+  { inputbox("shift_name", "shift time etc. to print on slip" ); }   
+
+and i could print slips with people's names/emails, the extra stuff above
+and something standard that goes on each slip...
+
+how's that work for you?
+
+> And then, how hard would "search" functionality be, so i could search for
+> my name...
+
+the quick kludge answer: you could grep the data directory?  the filenames
+correspond to the inputbox tags you define, so...
+
+something else...?
+
+-- 
+meow
+
+
index 0ddf7ae..c89b9b5 100644 (file)
-<!-- #include "header.incl" -->
-<!-- HEADER BEGIN -->
-
 <HTML>
 <HEAD>
+<TITLE>Staffing Sheet</TITLE>
+</HEAD>
 
-<TITLE>Viberation</TITLE>
-
-<SCRIPT LANGUAGE = "JavaScript">
-<!--
-function makeRemote() \{
-       remote = window.open("","remotewin","width=620,height=480,toolbar=no,directories=no,menubar=no,status=yes,location=no,scrollbars=no,resizable=no");
-       remote.location.href = "vibe_main.html";
-       if (remote.opener == null) \{ remote.opener = window; \} 
-       remote.opener.name = "opener";
-\}
-
-function testmovie_DoFSCommand(command, args) \{ 
-       if ( command == "call_alert" )
-       \{ 
-               alert("Here's the Flash message: " + args);
-       \}
-\}
-//-->
-
-</SCRIPT>
-
-<STYLE type="text/css">
-<!--
-       A:active \{ color: #FF0000; \}
-       A:visited \{ color: #336699; \}
-       A:link \{ color: #0033FF; \}
-
-       P \{
-               font-family: arial, helvetica, sans-serif;
-               color: #666666; 
-       \}
-
-       P EM \{
-               font-style: italic;
-       \}
-
-       P STRONG \{
-               font-weight: bold;
-       \}
-
-       H1, H2, H3, H4, H5, H6 \{
-               font-family: "trebuchet ms", arial,
-                               helvetica, sans-serif;
-       \}
-       
--->
-</STYLE>
+<BODY>
 
-</HEAD>
-<BODY TEXT="#666666" LINK="#0033FF" ALINK="#FF0000" BGCOLOR="#FFFFFF">
-
-<CENTER>
-
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="90%" HEIGHT="90%">
-<TR><TD ALIGN=CENTER VALIGN=MIDDLE>
-       
-       <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
-       <TR VALIGN=BOTTOM>
-<!--yuck, shifts the entire page over.  a larger question is what to do with the viberation stuff - host there?  remove?  nothing?             <TD ALIGN=RIGHT><A HREF="http://www.viberation.com/index.html"><IMG SRC="http://www.viberation.com/graphics/head_left.gif" WIDTH="181" HEIGHT="40" BORDER="0"></A></TD>
--->
-<!-- don't want to steal viberation logo               <TD ALIGN=LEFT><A HREF="http://www.viberation.com/index.html"><IMG SRC="http://www.viberation.com/graphics/head_right_sfba.gif" WIDTH="216" HEIGHT="40" BORDER="0"></A></TD>
--->
-       </TR>
-       <TR VALIGN=TOP>
-<!--           <TD></TD>
--->
-               <TD ALIGN=LEFT NOWRAP>
-               
-               &nbsp;<BR>
-               &nbsp;<BR>
-               
-<!-- HEADER END -->
-<!-- end include -->
-
-
-{ form(); }
+<a name="top"><H1>Staffing Sheet</H1></a>
 
-<P>{ warnings(); }</P>
+<P><a href="#docs">Jump to documentation</a></P>
 
-<P><INPUT TYPE="SUBMIT"><INPUT TYPE="RESET"><BR>
-<INPUT TYPE="checkbox" NAME="__MAGIC" VALUE="print">show results in printable format</P>
+<P>{ form(); }</P>
 
-<TABLE BORDER="1" CELLSPACING="1" CELLPADDING="4">
-       <TR>
-               <TH WIDTH="70" BGCOLOR="#999999" NOWRAP>Time</TD>
-               <TH WIDTH="70" BGCOLOR="#999999" NOWRAP>Door</TD>
-               <TH COLSPAN="2" BGCOLOR="#999999" NOWRAP>Parking</TD>
-               <TH WIDTH="70" BGCOLOR="#999999" NOWRAP>Time</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>9pm - 10pm</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Door 1"); }</TD>
-               <TD WIDTH="70" ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>{ inputbox("Park 1"); }</TD>
-               <TD WIDTH="70" ALIGN=LEFT NOWRAP>&nbsp;</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>9pm - 10pm</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>10pm - 11pm</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 2"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>10pm - 11pm</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>11pm - 12am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Door 2"); }</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 3"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>11pm - 12am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>12am - 1am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 4"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>12am - 1am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>1am - 2am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Door 3"); }</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 5"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>1am - 2am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>2am - 3am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 6"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>2am - 3am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>3am - 4am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Door 5"); }</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 7"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>3am - 4am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>4am - 5am</TD>
-               <TD ROWSPAN="2" BGCOLOR="#CCCCCC" ALIGN=LEFT>{ inputbox("Park 8"); }</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>4am - 5am</TD>
-       </TR>
-       <TR>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>5am - 6am</TD>
-               <TD ALIGN=LEFT NOWRAP>&nbsp;</TD>
-               <TD ALIGN=LEFT NOWRAP>&nbsp;</TD>
-               <TD BGCOLOR="#CCCCCC" ALIGN=LEFT NOWRAP>5am - 6am</TD>
-       </TR>
+<P>{ warnings(); }</P>
+
+<TABLE BORDER ALIGN=CENTER>
+<TR BGCOLOR="#EE7700">
+    <TD WIDTH=50 ALIGN=CENTER>Time</TH>
+    <TD WIDTH=150 ALIGN=CENTER>Door 1</TH>
+    <TD WIDTH=150 ALIGN=CENTER>Door 2</TH>
+    <TD WIDTH=150 ALIGN=CENTER>Door 3</TH>
+    <TD WIDTH=150 ALIGN=CENTER>Door 4</TH></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>8:30</font></TD>
+    <TD ROWSPAN=3>{ inputbox("Door-1-A"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-2-A"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-3-A"); }</TD>
+    <TD ROWSPAN=3 BGCOLOR="FFEE77">&nbsp;</TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>9:00</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>9:30</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>10:00</font></TD>
+    <TD ROWSPAN=3>{ inputbox("Door-1-B"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-2-B"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-3-B"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-4-B"); }</TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>10:30</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>11:00</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>11:30</font></TD>
+    <TD ROWSPAN=3>{ inputbox("Door-1-C"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-2-C"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-3-C"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-4-C"); }</TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>12:00</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>12:30</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>1:00</font></TD>
+    <TD ROWSPAN=3>{ inputbox("Door-1-D"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-2-D"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-3-D"); }</TD>
+    <TD ROWSPAN=6 BGCOLOR="FFEE77">&nbsp;</TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>1:30</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>2:00</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>2:30</font></TD>
+    <TD ROWSPAN=3>{ inputbox("Door-1-E"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-2-E"); }</TD>
+    <TD ROWSPAN=3>{ inputbox("Door-3-E"); }</TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>3:00</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>3:30</font></TD></TR>
+<TR><TD ALIGN=RIGHT BGCOLOR="#FF4400"><font size=-1>4:00</font></TD>
+    <TD COLSPAN=4 BGCOLOR="#FFEE77" align=center>
+       <font size=-1>cleanup</font></TD></TR>
 </TABLE>
 
-</FORM>
+<P>Don't forget to include your e-mail address in the form!</P>
 
+<INPUT TYPE="SUBMIT"><INPUT TYPE="RESET"><BR>
+<INPUT TYPE="checkbox" NAME="__MAGIC" VALUE="print">show results in printable format</P>
 
+</FORM>
 
+<hr>
 
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="400">
-<TR><TD ALIGN=LEFT VALIGN=TOP>
+<a name="docs"><H1>Documentation</H1></a>
 
 <P>Copyright &copy;2000 Adam Gould<BR>
 Copyright &copy;2000 Michal Migurski<BR>
-Copyright &copy;2000 Ivan Kohler<BR>
+Copyright &copy;2000 and 2001 Ivan Kohler<BR>
 All rights reserved.<BR>
-This program is free software; you can redistribute it and or modify it under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a> or the <a href="http://www.perl.com/pub/language/misc/Artistic.html">Artistic License</a>.
+This program is free software; you can redistribute it and or modify it under 
+the terms of the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General 
+Public License</a> or the 
+<a href="http://www.perl.com/pub/language/misc/Artistic.html">Artistic License</a>.
 </P>
 
+<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>\{&nbsp;form();&nbsp;\}</CODE><br>
+    Use this tag to start your form instead of the HTML 
+    <CODE>&lt;FORM&gt;</CODE> tag.  (You should end the form with the normal 
+    <CODE>&lt;/FORM&gt;</CODE> tag.)
+
+<LI><CODE>\{&nbsp;inputbox("<i>shift</i>");&nbsp;\}</CODE><BR>
+    This tag specifies the name of a workshift, as in 
+    <CODE>\{&nbsp;inputbox("Door 1");&nbsp;\}</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>\{&nbsp;warnings();&nbsp;\}</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>\{&nbsp;warnings();&nbsp;\}</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>&lt;WORKSHIFT&gt;<i>shift</i>&lt;/WORKSHIFT&gt;</CODE> tags can be 
+    converted to \{&nbsp;inputbox("<i>shift</i>");&nbsp;\} tags with the 
+    convert-template.pl program: 
+    <CODE>./convert-template.pl&nbsp;old-table-file.html&nbsp;&gt;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>
 
-       <P>
-       Above 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)
-
-
-       <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:
-       <UL>
-               <LI><CODE>\{&nbsp;form();&nbsp;\}</CODE><BR>
-                       Use this tag to start your form instead of the HTML <CODE>&lt;FORM&gt;</CODE> tag.  (You should end the form with the normal <CODE>&lt;/FORM&gt;</CODE> tag.)
-               <LI><CODE>\{&nbsp;inputbox("<i>shift</i>");&nbsp;\}</CODE><BR>
-                       This tag specifies the name of a workshift, as in       <CODE>\{&nbsp;inputbox("Door 1");&nbsp;\}</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>\{&nbsp;warnings();&nbsp;\}</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>\{&nbsp;warnings();&nbsp;\}</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>&lt;WORKSHIFT&gt;<i>shift</i>&lt;/WORKSHIFT&gt;</CODE> tags can be converted to \{&nbsp;inputbox("<i>shift</i>");&nbsp;\} tags with the convert-template.pl program: <CODE>./convert-template.pl&nbsp;old-table-file.html&nbsp;>new-table-file.html</CODE>.
-       </UL>
-       Other than these tags, anything goes. You can 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>
 <PRE>###
 # user-servicable parts
 ###
@@ -218,73 +184,70 @@ END
 # end of user-servicable parts
 ###
 </PRE>
-       
-       <H2>Use</H2>
-       
-       <P>
-       To use the files, install <STRONG>shift.cgi</STRONG> in a public web    directory as a CGI program.  (probably by placing it in a <A HREF="http://www.apache.org/docs/mod/mod_alias.html#scriptalias">cgi-bin</A> directory or using <A HREF="http://www.apache.org/docs/mod/mod_mime.html#addhandler">AddHandler</A>).  Permissions for all files must be set correctly. To make the <STRONG>shift.cgi</STRONG>        excecutable, set its permissions to 755 (<CODE>rwxr-xr-x</CODE>):<BR>
-       <PRE>chmod 755 shift.cgi</PRE><BR>
-       To create the the data directory:<BR>
-       <PRE>mkdir /path/to/data_dir</PRE><BR>
-       The data directory needs to be writable by the user executing the CGI.  It's probably best to simply make the data directory owned by the user as which <STRONG>shift.cgi</STRONG> runs (probably the <A HREF=http://www.apache.org/docs/mod/core.html#user>user as which the web server answers requests</A>, unless you are using <A HREF="http://www.apache.org/docs/suexec.html">suEXEC</A>), and set its permissions to 755:<BR>
-       <PRE>chown httpd /path/to/data_dir
-chmod 755 /path/to/data_dir</PRE>
-       </P>
-
-       <H2>Help</H2>
-       
-       <P>
-
-       </P>
-       <ul>
-<!--
-       <li><a href="search-list-archive.html">Search</a> or <a href="list-archive">browse</a> the user mailing list archive.
--->
-         <li>Subscribe to the user mailing list by sending a blank message to <a href="mailto:stafflist-user-subscribe@420.am">stafflist-user-subscribe@420.am</a>.
-        </ul>
-       <H2>Development</H2>
-
-       <ul>
-         <li>Anonymous CVS access:<BR>CVSROOT is <B>:pserver:anonymous@cleanwhisker.420.am:/home/cvs/cvsroot</B><BR>The password for the user <B>anonymous</B> is <B>anonymous</B>.<BR>The module name is <B>staff</B>.<BR>So to check out the current tree, you would do (bash):<BR>
+        
+<H2>Use</H2>
+        
+<P>To use the files, install <STRONG>shift.cgi</STRONG> in a public web    
+directory as a CGI program.  (probably by placing it in a 
+<A HREF="http://www.apache.org/docs/mod/mod_alias.html#scriptalias">cgi-bin</A> 
+directory or using 
+<A HREF="http://www.apache.org/docs/mod/mod_mime.html#addhandler">AddHandler</A>).  
+Permissions for all files must be set correctly. To make the 
+<STRONG>shift.cgi</STRONG> excecutable, set its permissions to 755 
+(<CODE>rwxr-xr-x</CODE>):<BR>
+
+<PRE>chmod 755 shift.cgi</PRE><BR>
+
+To create the the data directory:<BR>
+
+<PRE>mkdir /path/to/data_dir</PRE><BR>
+
+The data directory needs to be writable by the user executing the CGI.  It's 
+probably best to simply make the data directory owned by the user as which 
+<STRONG>shift.cgi</STRONG> runs (probably the 
+<A HREF=http://www.apache.org/docs/mod/core.html#user>user as which the web
+server answers requests</A>, unless you are using 
+<A HREF="http://www.apache.org/docs/suexec.html">suEXEC</A>), and set its 
+permissions to 755:<BR>
+
+<PRE>chown httpd /path/to/data_dir
+chmod 755 /path/to/data_dir</PRE></P>
+
+<H2>Help</H2>
+        
+<ul>
+<!-- li><a href="search-list-archive.html">Search</a> or 
+    <a href="list-archive">browse</a> the user mailing list archive. -->
+
+<li>Subscribe to the user mailing list by sending a blank message to 
+    <a href="mailto:stafflist-user-subscribe@420.am">
+    stafflist-user-subscribe@420.am</a>.
+</ul>
+
+<H2>Development</H2>
+
+<ul>
+<li>Anonymous CVS access:<BR>CVSROOT is 
+    <B>:pserver:anonymous@cleanwhisker.420.am:/home/cvs/cvsroot</B><BR>
+    The password for the user <B>anonymous</B> is <B>anonymous</B>.<BR>
+    The module name is <B>staff</B>.<BR>
+    So to check out the current tree, you would do (bash):<BR>
 <PRE>$ export CVSROOT=":pserver:anonymous@cleanwhisker.420.am:/home/cvs/cvsroot"
 $ cvs login
 (Logging in to anonymous@cleanwhisker.420.am)
 CVS password:
 $ cvs checkout staff
 </PRE>
-         <li>Browse the CVS tree online via <a href="/cgi-bin/cvsweb/staff">cvsweb</a>.
-<!--
-         <li><a href="search-devel-list-archive.html">Search</a> or <a href="devel-list-archive">browse</a> the development list archive.
--->
-         <li>Subscribe to the development mailing list by sending a blank message to <a href="mailto:stafflist-devel-subscribe@420.am">stafflist-devel-subscribe@420.am</a>.
-       </ul>
-
-
-
-</TD></TR>
-</TABLE>
-
 
-<!-- #include "footer.incl" -->
-<!-- FOOTER BEGIN -->
+<li>Browse the CVS tree online via <a href="/cgi-bin/cvsweb/staff">cvsweb</a>.
 
-<!--           &nbsp;ÇBRÈ
-               &nbsp;ÇBRÈ
-
-               ÇPÈ
-               ÇA HREF="index.html"ÈHome.Ç/AÈ
-               Ç/PÈ -->
-               
-               </TD>
-       </TR>
-       </TABLE>
-</TD></TR>
-</TABLE>
+<!-- li><a href="search-devel-list-archive.html">Search</a> or <a href="devel-list-archive">browse</a> the development list archive. -->
 
-</CENTER>
+<li>Subscribe to the development mailing list by sending a blank message to 
+    <a href="mailto:stafflist-devel-subscribe@420.am">
+    stafflist-devel-subscribe@420.am</a>.
+</ul>
 
 </BODY>
 </HTML>
 
-<!-- FOOTER END -->
-<!-- end include -->