httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject cvs commit: httpd-site/apreq Apache-Cookie.html Apache-Request.html index.html libapreq.html
Date Wed, 20 Jun 2001 00:23:20 GMT
jimw        01/06/19 17:23:19

  Modified:    apreq    Apache-Cookie.html Apache-Request.html index.html
                        libapreq.html
  Log:
  new libapreq released
  
  Revision  Changes    Path
  1.2       +123 -92   httpd-site/apreq/Apache-Cookie.html
  
  Index: Apache-Cookie.html
  ===================================================================
  RCS file: /home/cvs/httpd-site/apreq/Apache-Cookie.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -u -r1.1 -r1.2
  --- Apache-Cookie.html	2000/12/23 03:30:36	1.1
  +++ Apache-Cookie.html	2001/06/20 00:23:16	1.2
  @@ -1,152 +1,183 @@
   <HTML>
   <HEAD>
   <TITLE>Apache::Cookie - HTTP Cookies Class</TITLE>
  -<LINK REV="made" HREF="mailto:perl@packages.debian.org">
  +<LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
   </HEAD>
   
   <BODY>
   
  -<A NAME="__index__"></A>
   <!-- INDEX BEGIN -->
   
   <UL>
   
  -	<LI><A HREF="#name">NAME</A></LI>
  -	<LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  -	<LI><A HREF="#description">DESCRIPTION</A></LI>
  -	<LI><A HREF="#methods">METHODS</A></LI>
  +	<LI><A HREF="#NAME">NAME</A>
  +	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  +	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  +	<LI><A HREF="#METHODS">METHODS</A>
   	<UL>
   
  -		<LI><A HREF="#new">new</A></LI>
  -		<LI><A HREF="#bake">bake</A></LI>
  -		<LI><A HREF="#parse">parse</A></LI>
  -		<LI><A HREF="#fetch">fetch</A></LI>
  -		<LI><A HREF="#as_string">as_string</A></LI>
  -		<LI><A HREF="#name">name</A></LI>
  -		<LI><A HREF="#value">value</A></LI>
  -		<LI><A HREF="#domain">domain</A></LI>
  -		<LI><A HREF="#path">path</A></LI>
  -		<LI><A HREF="#expires">expires</A></LI>
  -		<LI><A HREF="#secure">secure</A></LI>
  +		<LI><A HREF="#new">new</A>
  +		<LI><A HREF="#bake">bake</A>
  +		<LI><A HREF="#parse">parse</A>
  +		<LI><A HREF="#fetch">fetch</A>
  +		<LI><A HREF="#as_string">as_string</A>
  +		<LI><A HREF="#name">name</A>
  +		<LI><A HREF="#value">value</A>
  +		<LI><A HREF="#domain">domain</A>
  +		<LI><A HREF="#path">path</A>
  +		<LI><A HREF="#expires">expires</A>
  +		<LI><A HREF="#secure">secure</A>
   	</UL>
   
  -	<LI><A HREF="#see also">SEE ALSO</A></LI>
  -	<LI><A HREF="#author">AUTHOR</A></LI>
  +	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
  +	<LI><A HREF="#AUTHOR">AUTHOR</A>
   </UL>
   <!-- INDEX END -->
   
   <HR>
   <P>
  -<H1><A NAME="name">NAME</A></H1>
  -<P>Apache::Cookie - HTTP Cookies Class</P>
  +<H1><A NAME="NAME">NAME</A></H1>
   <P>
  +Apache::Cookie - HTTP Cookies Class
  +
  +<P>
   <HR>
  -<H1><A NAME="synopsis">SYNOPSIS</A></H1>
  -<PRE>
  -    use Apache::Cookie ();
  -    my $cookie = Apache::Cookie-&gt;new($r, ...);</PRE>
  +<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
  +<P>
  +<PRE>    use Apache::Cookie ();
  +    my $cookie = Apache::Cookie-&gt;new($r, ...);
  +</PRE>
   <P>
   <HR>
  -<H1><A NAME="description">DESCRIPTION</A></H1>
  -<P>The Apache::Cookie module is a Perl interface to the cookie routines
  -in <EM>libapreq</EM>.  The interface is based on Lincoln Stein's CGI::Cookie
  -module.</P>
  +<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
   <P>
  +The Apache::Cookie module is a Perl interface to the cookie routines in <EM>libapreq</EM>. The interface is based on Lincoln Stein's CGI::Cookie module.
  +
  +<P>
   <HR>
  -<H1><A NAME="methods">METHODS</A></H1>
  -<P>This interface is identical the to <EM>CGI::Cookie</EM> interface with one 
  -exception noted below.  Refer the to <EM>CGI::Cookie</EM> documentation while
  -these docs are ``under construction.''</P>
  +<H1><A NAME="METHODS">METHODS</A></H1>
   <P>
  +This interface is identical the to <EM>CGI::Cookie</EM> interface with one exception noted below. Refer the to <EM>CGI::Cookie</EM> documentation while these docs are ``under construction.''
  +
   <H2><A NAME="new">new</A></H2>
  -<P>Just like CGI::Cookie::new, but requires an <EM>Apache</EM> request object:</P>
  -<PRE>
  -        my $cookie = Apache::Cookie-&gt;new($r,
  +<P>
  +Just like CGI::Cookie::new, but requires an <EM>Apache</EM> request object:
  +
  +<P>
  +<PRE>        my $cookie = Apache::Cookie-&gt;new($r,
                                -name    =&gt;  'foo', 
                                -value   =&gt;  'bar', 
                                -expires =&gt;  '+3M', 
                                -domain  =&gt;  '.capricorn.com', 
                                -path    =&gt;  '/cgi-bin/database',
                                -secure  =&gt;  1 
  -                            );</PRE>
  -<P>
  +                            ); 
  +</PRE>
   <H2><A NAME="bake">bake</A></H2>
  -<P>Put cookie in the oven to bake. 
  -(Add a <EM>Set-Cookie</EM> header to the outgoing headers table.)</P>
  -<PRE>
  -    $cookie-&gt;bake;</PRE>
   <P>
  +Put cookie in the oven to bake. (Add a <EM>Set-Cookie</EM> header to the outgoing headers table.) 
  +
  +<P>
  +<PRE>    $cookie-&gt;bake;
  +</PRE>
   <H2><A NAME="parse">parse</A></H2>
  -<P>This method parses the given string if present, otherwise, the incoming 
  -<EM>Cookie</EM> header:</P>
  -<PRE>
  -    my $cookies = $cookie-&gt;parse; #hash ref</PRE>
  -<PRE>
  -    my %cookies = $cookie-&gt;parse;</PRE>
  -<PRE>
  -    my %cookies = $cookie-&gt;parse($cookie_string);</PRE>
   <P>
  +This method parses the given string if present, otherwise, the incoming 
  +<EM>Cookie</EM> header:
  +
  +<P>
  +<PRE>    my $cookies = $cookie-&gt;parse; #hash ref
  +</PRE>
  +<P>
  +<PRE>    my %cookies = $cookie-&gt;parse;
  +</PRE>
  +<P>
  +<PRE>    my %cookies = $cookie-&gt;parse($cookie_string);
  +</PRE>
   <H2><A NAME="fetch">fetch</A></H2>
  -<P>Fetch and parse the incoming <EM>Cookie</EM> header:</P>
  -<PRE>
  -    my $cookies = Apache::Cookie-&gt;fetch; #hash ref</PRE>
  -<PRE>
  -    my %cookies = Apache::Cookie-&gt;fetch;</PRE>
   <P>
  +Fetch and parse the incoming <EM>Cookie</EM> header:
  +
  +<P>
  +<PRE>    my $cookies = Apache::Cookie-&gt;fetch; #hash ref
  +</PRE>
  +<P>
  +<PRE>    my %cookies = Apache::Cookie-&gt;fetch;
  +</PRE>
   <H2><A NAME="as_string">as_string</A></H2>
  -<P>Format the cookie object as a string:</P>
  -<PRE>
  - #same as $cookie-&gt;bake
  - $r-&gt;err_headers_out-&gt;add(&quot;Set-Cookie&quot; =&gt; $cookie-&gt;as_string);</PRE>
   <P>
  +Format the cookie object as a string:
  +
  +<P>
  +<PRE> #same as $cookie-&gt;bake
  + $r-&gt;err_headers_out-&gt;add(&quot;Set-Cookie&quot; =&gt; $cookie-&gt;as_string);
  +</PRE>
   <H2><A NAME="name">name</A></H2>
  -<P>Get or set the name of the cookie:</P>
  -<PRE>
  - my $name = $cookie-&gt;name;</PRE>
  -<PRE>
  - $cookie-&gt;name(&quot;Foo&quot;);</PRE>
   <P>
  +Get or set the name of the cookie:
  +
  +<P>
  +<PRE> my $name = $cookie-&gt;name;
  +</PRE>
  +<P>
  +<PRE> $cookie-&gt;name(&quot;Foo&quot;);
  +</PRE>
   <H2><A NAME="value">value</A></H2>
  -<P>Get or set the values of the cookie:</P>
  -<PRE>
  - my $value = $cookie-&gt;value; 
  - my @values = $cookie-&gt;value;</PRE>
  -<PRE>
  - $cookie-&gt;value(&quot;string&quot;);
  - $cookie-&gt;value(\@array);</PRE>
   <P>
  +Get or set the values of the cookie:
  +
  +<P>
  +<PRE> my $value = $cookie-&gt;value; 
  + my @values = $cookie-&gt;value;
  +</PRE>
  +<P>
  +<PRE> $cookie-&gt;value(&quot;string&quot;);
  + $cookie-&gt;value(\@array);
  +</PRE>
   <H2><A NAME="domain">domain</A></H2>
  -<P>Get or set the domain for the cookie:</P>
  -<PRE>
  - my $domain = $cookie-&gt;domain;
  - $cookie-&gt;domain(&quot;.cp.net&quot;);</PRE>
   <P>
  +Get or set the domain for the cookie:
  +
  +<P>
  +<PRE> my $domain = $cookie-&gt;domain;
  + $cookie-&gt;domain(&quot;.cp.net&quot;);
  +</PRE>
   <H2><A NAME="path">path</A></H2>
  -<P>Get or set the path for the cookie:</P>
  -<PRE>
  - my $path = $cookie-&gt;path;
  - $cookie-&gt;path(&quot;/&quot;);</PRE>
   <P>
  +Get or set the path for the cookie:
  +
  +<P>
  +<PRE> my $path = $cookie-&gt;path;
  + $cookie-&gt;path(&quot;/&quot;);
  +</PRE>
   <H2><A NAME="expires">expires</A></H2>
  -<P>Get or set the expire time for the cookie:</P>
  -<PRE>
  - my $expires = $cookie-&gt;expires;
  - $cookie-&gt;expires(&quot;+3h&quot;);</PRE>
   <P>
  +Get or set the expire time for the cookie:
  +
  +<P>
  +<PRE> my $expires = $cookie-&gt;expires;
  + $cookie-&gt;expires(&quot;+3h&quot;);
  +</PRE>
   <H2><A NAME="secure">secure</A></H2>
  -<P>Get or set the secure flag for the cookie:</P>
  -<PRE>
  - my $secure = $cookie-&gt;secure;
  - $cookie-&gt;secure(1);</PRE>
   <P>
  -<HR>
  -<H1><A NAME="see also">SEE ALSO</A></H1>
  -<P>Apache(3), Apache::Request(3)</P>
  +Get or set the secure flag for the cookie:
  +
  +<P>
  +<PRE> my $secure = $cookie-&gt;secure;
  + $cookie-&gt;secure(1);
  +</PRE>
  +
   <P>
   <HR>
  -<H1><A NAME="author">AUTHOR</A></H1>
  -<P>Doug MacEachern</P>
  +<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
  +<P>
  +<CODE>Apache(3),</CODE> Apache::Request(3)
   
  +<P>
  +<HR>
  +<H1><A NAME="AUTHOR">AUTHOR</A></H1>
  +<P>
  +Doug MacEachern
   </BODY>
   
   </HTML>
  
  
  
  1.2       +251 -159  httpd-site/apreq/Apache-Request.html
  
  Index: Apache-Request.html
  ===================================================================
  RCS file: /home/cvs/httpd-site/apreq/Apache-Request.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -u -r1.1 -r1.2
  --- Apache-Request.html	2000/12/23 03:30:36	1.1
  +++ Apache-Request.html	2001/06/20 00:23:17	1.2
  @@ -1,240 +1,332 @@
   <HTML>
   <HEAD>
   <TITLE>Apache::Request - Methods for dealing with client request data</TITLE>
  -<LINK REV="made" HREF="mailto:perl@packages.debian.org">
  +<LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
   </HEAD>
   
   <BODY>
   
  -<A NAME="__index__"></A>
   <!-- INDEX BEGIN -->
   
   <UL>
   
  -	<LI><A HREF="#name">NAME</A></LI>
  -	<LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  -	<LI><A HREF="#description">DESCRIPTION</A></LI>
  -	<LI><A HREF="#apache::request methods">Apache::Request METHODS</A></LI>
  +	<LI><A HREF="#NAME">NAME</A>
  +	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  +	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  +	<LI><A HREF="#Apache_Request_METHODS">Apache::Request METHODS</A>
   	<UL>
   
  -		<LI><A HREF="#new">new</A></LI>
  -		<LI><A HREF="#instance">instance</A></LI>
  -		<LI><A HREF="#parse">parse</A></LI>
  -		<LI><A HREF="#param">param</A></LI>
  -		<LI><A HREF="#upload">upload</A></LI>
  +		<LI><A HREF="#new">new</A>
  +		<LI><A HREF="#instance">instance</A>
  +		<LI><A HREF="#parse">parse</A>
  +		<LI><A HREF="#param">param</A>
  +		<LI><A HREF="#upload">upload</A>
   	</UL>
   
  -	<LI><A HREF="#apache::upload methods">Apache::Upload METHODS</A></LI>
  +	<LI><A HREF="#Apache_Upload_METHODS">Apache::Upload METHODS</A>
   	<UL>
   
  -		<LI><A HREF="#name">name</A></LI>
  -		<LI><A HREF="#filename">filename</A></LI>
  -		<LI><A HREF="#fh">fh</A></LI>
  -		<LI><A HREF="#size">size</A></LI>
  -		<LI><A HREF="#info">info</A></LI>
  -		<LI><A HREF="#type">type</A></LI>
  -		<LI><A HREF="#next">next</A></LI>
  +		<LI><A HREF="#name">name</A>
  +		<LI><A HREF="#filename">filename</A>
  +		<LI><A HREF="#fh">fh</A>
  +		<LI><A HREF="#size">size</A>
  +		<LI><A HREF="#info">info</A>
  +		<LI><A HREF="#type">type</A>
  +		<LI><A HREF="#next">next</A>
  +		<LI><A HREF="#tempname">tempname</A>
  +		<LI><A HREF="#link">link</A>
   	</UL>
   
  -	<LI><A HREF="#see also">SEE ALSO</A></LI>
  -	<LI><A HREF="#credits">CREDITS</A></LI>
  -	<LI><A HREF="#author">AUTHOR</A></LI>
  +	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
  +	<LI><A HREF="#CREDITS">CREDITS</A>
  +	<LI><A HREF="#AUTHOR">AUTHOR</A>
   </UL>
   <!-- INDEX END -->
   
   <HR>
   <P>
  -<H1><A NAME="name">NAME</A></H1>
  -<P>Apache::Request - Methods for dealing with client request data</P>
  +<H1><A NAME="NAME">NAME</A></H1>
   <P>
  +Apache::Request - Methods for dealing with client request data
  +
  +<P>
   <HR>
  -<H1><A NAME="synopsis">SYNOPSIS</A></H1>
  -<PRE>
  -    use Apache::Request ();
  -    my $apr = Apache::Request-&gt;new($r);</PRE>
  +<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
  +<P>
  +<PRE>    use Apache::Request ();
  +    my $apr = Apache::Request-&gt;new($r);
  +</PRE>
   <P>
   <HR>
  -<H1><A NAME="description">DESCRIPTION</A></H1>
  -<P><EM>Apache::Request</EM> is a subclass of the <EM>Apache</EM> class, which adds methods
  -for parsing <STRONG>GET</STRONG> requests and <STRONG>POST</STRONG> requests where <EM>Content-type</EM>
  +<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
  +<P>
  +<EM>Apache::Request</EM> is a subclass of the <EM>Apache</EM> class, which adds methods for parsing <STRONG>GET</STRONG> requests and <STRONG>POST</STRONG> requests where <EM>Content-type</EM>
   is one of <EM>application/x-www-form-urlencoded</EM> or 
  -<EM>multipart/form-data</EM>. See the <CODE>libapreq(3)</CODE> manpage for more details.</P>
  +<EM>multipart/form-data</EM>. See the <CODE>libapreq(3)</CODE> manpage for more details.
  +
   <P>
   <HR>
  -<H1><A NAME="apache::request methods">Apache::Request METHODS</A></H1>
  -<P>
  +<H1><A NAME="Apache_Request_METHODS">Apache::Request METHODS</A></H1>
   <H2><A NAME="new">new</A></H2>
  -<P>Create a new <EM>Apache::Request</EM> object with an <EM>Apache</EM> request_rec object:</P>
  -<PRE>
  -    my $apr = Apache::Request-&gt;new($r);</PRE>
  -<P>All methods from the <EM>Apache</EM> class are inherited.</P>
  -<P>The following attributes are optional:</P>
  +<P>
  +Create a new <EM>Apache::Request</EM> object with an <EM>Apache</EM> request_rec object:
  +
  +<P>
  +<PRE>    my $apr = Apache::Request-&gt;new($r);
  +</PRE>
  +<P>
  +All methods from the <EM>Apache</EM> class are inherited.
  +
  +<P>
  +The following attributes are optional:
  +
   <DL>
  -<DT><STRONG><A NAME="item_POST_MAX">POST_MAX</A></STRONG><BR>
  -<DD>
  -Limit the size of POST data.  <EM>Apache::Request::parse</EM> will return an
  -error code if the size is exceeded:
  -<PRE>
  - my $apr = Apache::Request-&gt;new($r, POST_MAX =&gt; 1024);
  - my $status = $apr-&gt;parse;</PRE>
  -<PRE>
  - if ($status) {
  +<DT><STRONG><A NAME="item_POST_MAX">POST_MAX</A></STRONG><DD>
  +<P>
  +Limit the size of POST data.  <EM>Apache::Request::parse</EM> will return an error code if the size is exceeded:
  +
  +<P>
  +<PRE> my $apr = Apache::Request-&gt;new($r, POST_MAX =&gt; 1024);
  + my $status = $apr-&gt;parse;
  +</PRE>
  +<P>
  +<PRE> if ($status) {
        my $errmsg = $apr-&gt;notes(&quot;error-notes&quot;);
        ...
        return $status;
  - }</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_DISABLE_UPLOADS">DISABLE_UPLOADS</A></STRONG><BR>
  -<DD>
  -Disable file uploads.  <EM>Apache::Request::parse</EM> will return an
  -error code if a file upload is attempted:
  -<PRE>
  - my $apr = Apache::Request-&gt;new($r, DISABLE_UPLOADS =&gt; 1);
  - my $status = $apr-&gt;parse;</PRE>
  -<PRE>
  - if ($status) {
  + }
  +</PRE>
  +<DT><STRONG><A NAME="item_DISABLE_UPLOADS">DISABLE_UPLOADS</A></STRONG><DD>
  +<P>
  +Disable file uploads.  <EM>Apache::Request::parse</EM> will return an error code if a file upload is attempted:
  +
  +<P>
  +<PRE> my $apr = Apache::Request-&gt;new($r, DISABLE_UPLOADS =&gt; 1);
  + my $status = $apr-&gt;parse;
  +</PRE>
  +<P>
  +<PRE> if ($status) {
        my $errmsg = $apr-&gt;notes(&quot;error-notes&quot;);
        ...
        return $status;
  - }</PRE>
  -<P></P></DL>
  -<P>
  + }
  +</PRE>
  +<DT><STRONG><A NAME="item_TEMP_DIR">TEMP_DIR</A></STRONG><DD>
  +<P>
  +Sets the directory where upload files are spooled. On a *nix-like that
  +supports <CODE>link(2),</CODE> the TEMP_DIR should be placed on the same
  +file system as the final destination file:
  +
  +<P>
  +<PRE> my $apr = Apache::Request-&gt;new($r, TEMP_DIR =&gt; &quot;/home/httpd/tmp&quot;);
  + my $upload = $apr-&gt;upload('file');
  + $upload-&gt;link(&quot;/home/user/myfile&quot;) || warn &quot;link failed: $!&quot;;
  +</PRE>
  +<DT><STRONG><A NAME="item_HOOK_DATA">HOOK_DATA</A></STRONG><DD>
  +<P>
  +Extra configuration info to be passed to and upload hook. See next item for
  +details.
  +
  +<DT><STRONG><A NAME="item_UPLOAD_HOOK">UPLOAD_HOOK</A></STRONG><DD>
  +<P>
  +Sets up a callback to run whenever file upload data is read. This can be
  +used to provide an upload progress meter during file uploads. Apache will
  +automatically continue writing the original data to $upload-&gt;fh after
  +the hook exits.
  +
  +<P>
  +<PRE> my $transparent_hook = sub {
  +   my ($upload, $buf, $len, $hook_data) = @_;
  +   warn &quot;$hook_data: got $len bytes for &quot; . $upload-&gt;name;
  + };
  +</PRE>
  +<P>
  +<PRE> my $apr = Apache::Request-&gt;new($r, 
  +                                HOOK_DATA =&gt; &quot;Note&quot;,
  +                                UPLOAD_HOOK =&gt; $transparent_hook,
  +                               );
  + $apr-&gt;parse;
  +</PRE>
  +
   <H2><A NAME="instance">instance</A></H2>
  -<P>The <CODE>instance()</CODE> class method allows Apache::Request to be a singleton.
  -This means that whenever you call Apache::Request-&gt;<CODE>instance()</CODE> within a
  -single request you always get the same Apache::Request object back.
  -This solves the problem with creating the Apache::Request object twice
  -within the same request - the symptoms being that the second
  -Apache::Request object will not contain the form parameters because
  -they have already been read and parsed.</P>
  -<PRE>
  -  my $apr = Apache::Request-&gt;instance($r, DISABLE_UPLOADS =&gt; 1);</PRE>
  -<P>Note that <CODE>instance()</CODE> call will take the same parameters as the above
  -call to <CODE>new()</CODE>, however the parameters will only have an effect the
  -first time <CODE>instance()</CODE> is called within a single request. Extra
  -parameters will be ignored on subsequent calls to <CODE>instance()</CODE> within
  -the same request.</P>
  -<P>Subrequests receive a new Apache::Request object when they call
  -<CODE>instance()</CODE> - the parent request's Apache::Request object is not copied
  -into the subrequest.</P>
  -<P>Also note that it is unwise to use the <CODE>parse()</CODE> method when using
  -<CODE>instance()</CODE> because you may end up trying to call it twice, and
  -detecting errors where there are none.</P>
   <P>
  +The <CODE>instance()</CODE> class method allows Apache::Request to be a
  +singleton. This means that whenever you call Apache::Request-&gt;instance()
  +within a single request you always get the same Apache::Request object
  +back. This solves the problem with creating the Apache::Request object
  +twice within the same request - the symptoms being that the second
  +Apache::Request object will not contain the form parameters because they
  +have already been read and parsed.
  +
  +<P>
  +<PRE>  my $apr = Apache::Request-&gt;instance($r, DISABLE_UPLOADS =&gt; 1);
  +</PRE>
  +<P>
  +Note that <CODE>instance()</CODE> call will take the same parameters as the above call to <CODE>new()</CODE>, however the parameters will only have an effect the first time <CODE>instance()</CODE> is called within a single request. Extra parameters will be ignored on
  +subsequent calls to <CODE>instance()</CODE> within the same request.
  +
  +<P>
  +Subrequests receive a new Apache::Request object when they call
  +<CODE>instance()</CODE> - the parent request's Apache::Request object is
  +not copied into the subrequest.
  +
  +<P>
  +Also note that it is unwise to use the <CODE>parse()</CODE> method when using
  +<CODE>instance()</CODE> because you may end up trying to call it twice, and detecting errors where
  +there are none.
  +
   <H2><A NAME="parse">parse</A></H2>
  -<P>The <EM>parse</EM> method does the actual work of parsing the request.
  -It is called for you by the accessor methods, so it is not required but
  -can be useful to provide a more user-friendly message should an error 
  -occur:
  -</P>
  -<PRE>
  -
  -    my $r = shift;
  -    my $apr = Apache::Request-&gt;new($r);</PRE>
  -<PRE>
  -
  -    my $status = $apr-&gt;parse; 
  -    unless ($status == OK) { 
  -        $apr-&gt;custom_response($status, $apr-&gt;notes(&quot;error-notes&quot;)); 
  -        return $status; 
  -    }</PRE>
   <P>
  +The <EM>parse</EM> method does the actual work of parsing the request. It is called for you by
  +the accessor methods, so it is not required but can be useful to provide a
  +more user-friendly message should an error occur: my <CODE>$r</CODE> =
  +shift; my <CODE>$apr</CODE> = Apache::Request-&gt;new($r); my
  +<CODE>$status</CODE> = $apr-&gt;parse; unless ($status == OK) {
  +$apr-&gt;custom_response($status, $apr-&gt;notes(``error-notes'')); return
  +$status; } 
  +
   <H2><A NAME="param">param</A></H2>
  -<P>Get or set request parameters:</P>
  -<PRE>
  -    my $value = $apr-&gt;param('foo');
  +<P>
  +Get or set request parameters:
  +
  +<P>
  +<PRE>    my $value = $apr-&gt;param('foo');
       my @values = $apr-&gt;param('foo');
       my @params = $apr-&gt;param;
  -    $apr-&gt;param('foo' =&gt; [qw(one two three)]);</PRE>
  -<P>
  +    $apr-&gt;param('foo' =&gt; [qw(one two three)]);
  +</PRE>
   <H2><A NAME="upload">upload</A></H2>
  -<P>Returns a single <EM>Apache::Upload</EM> object in a scalar context or
  -all <EM>Apache::Upload</EM> objects in an array context:</P>
  -<PRE>
  -    my $upload = $apr-&gt;upload;
  +<P>
  +Returns a single <EM>Apache::Upload</EM> object in a scalar context or all <EM>Apache::Upload</EM> objects in an array context: 
  +
  +<P>
  +<PRE>    my $upload = $apr-&gt;upload;
       my $fh = $upload-&gt;fh;
       my $lines = 0; 
       while(&lt;$fh&gt;) { 
           ++$lines; 
           ...
  -    }</PRE>
  -<P>An optional name parameter can be passed to return the <EM>Apache::Upload</EM>
  -object associated with the given name:</P>
  -<PRE>
  -    my $upload = $apr-&gt;upload($name);</PRE>
  +    } 
  +</PRE>
   <P>
  -<HR>
  -<H1><A NAME="apache::upload methods">Apache::Upload METHODS</A></H1>
  +An optional name parameter can be passed to return the <EM>Apache::Upload</EM>
  +object associated with the given name:
  +
   <P>
  +<PRE>    my $upload = $apr-&gt;upload($name);
  +</PRE>
  +
  +<P>
  +<HR>
  +<H1><A NAME="Apache_Upload_METHODS">Apache::Upload METHODS</A></H1>
   <H2><A NAME="name">name</A></H2>
  -<P>The name of the filefield parameter:</P>
  -<PRE>
  -    my $name = $upload-&gt;name;</PRE>
   <P>
  +The name of the filefield parameter:
  +
  +<P>
  +<PRE>    my $name = $upload-&gt;name;
  +</PRE>
   <H2><A NAME="filename">filename</A></H2>
  -<P>The filename of the uploaded file:</P>
  -<PRE>
  -    my $filename = $upload-&gt;filename;</PRE>
   <P>
  +The filename of the uploaded file:
  +
  +<P>
  +<PRE>    my $filename = $upload-&gt;filename;
  +</PRE>
   <H2><A NAME="fh">fh</A></H2>
  -<P>The filehandle pointing to the uploaded file:</P>
  -<PRE>
  -    my $fh = $upload-&gt;fh;
  +<P>
  +The filehandle pointing to the uploaded file:
  +
  +<P>
  +<PRE>    my $fh = $upload-&gt;fh;
       while (&lt;$fh&gt;) {
           ...
  -    }</PRE>
  -<P>
  +    }
  +</PRE>
   <H2><A NAME="size">size</A></H2>
  -<P>The size of the file in bytes:</P>
  -<PRE>
  -    my $size = $upload-&gt;size;</PRE>
   <P>
  +The size of the file in bytes:
  +
  +<P>
  +<PRE>    my $size = $upload-&gt;size;
  +</PRE>
   <H2><A NAME="info">info</A></H2>
  -<P>The additional header information for the uploaded file.
  -Returns a hash reference tied to the <EM>Apache::Table</EM> class.
  -An optional <EM>key</EM> argument can be passed to return the value of 
  -a given header rather than a hash reference.  Examples:</P>
  -<PRE>
  -    my $info = $upload-&gt;info;
  +<P>
  +The additional header information for the uploaded file. Returns a hash
  +reference tied to the <EM>Apache::Table</EM> class. An optional <EM>key</EM> argument can be passed to return the value of a given header rather than a
  +hash reference. Examples:
  +
  +<P>
  +<PRE>    my $info = $upload-&gt;info;
       while (my($key, $val) = each %$info) {
           ...
  -    }</PRE>
  -<PRE>
  -    my $val = $upload-&gt;info(&quot;Content-type&quot;);</PRE>
  +    }
  +</PRE>
   <P>
  +<PRE>    my $val = $upload-&gt;info(&quot;Content-type&quot;);
  +</PRE>
   <H2><A NAME="type">type</A></H2>
  -<P>Returns the <EM>Content-Type</EM> for the given <EM>Apache::Upload</EM> object:</P>
  -<PRE>
  -    my $type = $upload-&gt;type;
  -    #same as
  -    my $type = $upload-&gt;info(&quot;Content-Type&quot;);</PRE>
   <P>
  +Returns the <EM>Content-Type</EM> for the given <EM>Apache::Upload</EM> object:
  +
  +<P>
  +<PRE>    my $type = $upload-&gt;type;
  +    #same as
  +    my $type = $upload-&gt;info(&quot;Content-Type&quot;);
  +</PRE>
   <H2><A NAME="next">next</A></H2>
  -<P>As an alternative to using the <EM>Apache::Request</EM> <EM>upload</EM> method in
  -an array context:</P>
  -<PRE>
  -    for (my $upload = $apr-&gt;upload; $upload; $upload = $upload-&gt;next) {
  +<P>
  +As an alternative to using the <EM>Apache::Request</EM>  <EM>upload</EM> method in an array context:
  +
  +<P>
  +<PRE>    for (my $upload = $apr-&gt;upload; $upload; $upload = $upload-&gt;next) {
           ...
  -    }</PRE>
  -<PRE>
  -    #functionally the same as:</PRE>
  -<PRE>
  -    for my $upload ($apr-&gt;upload) {
  +    }
  +</PRE>
  +<P>
  +<PRE>    #functionally the same as:
  +</PRE>
  +<P>
  +<PRE>    for my $upload ($apr-&gt;upload) {
           ...
  -    }</PRE>
  +    }
  +</PRE>
  +<H2><A NAME="tempname">tempname</A></H2>
   <P>
  -<HR>
  -<H1><A NAME="see also">SEE ALSO</A></H1>
  -<P><CODE>libapreq(3)</CODE></P>
  +Provides the name of the spool file.
  +
  +<H2><A NAME="link">link</A></H2>
  +<P>
  +To avoid recopying the spool file on a Unix-like system,
  +<EM>link</EM> will create a hard link to it:
  +
   <P>
  +<PRE>  my $upload = $apr-&gt;upload('file');
  +  $upload-&gt;link(&quot;/path/to/newfile&quot;) or
  +      die sprintf &quot;link from '%s' failed: $!&quot;, $upload-&gt;tempname;
  +</PRE>
  +<P>
  +Typically the new name must lie on the same file system as the spool file.
  +Check your system's <CODE>link(2)</CODE> manpage for details.
  +
  +
  +<P>
   <HR>
  -<H1><A NAME="credits">CREDITS</A></H1>
  -<P>This interface is based on the original pure Perl version by Lincoln Stein.</P>
  +<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
  +<P>
  +<CODE>libapreq(3)</CODE>
  +
   <P>
   <HR>
  -<H1><A NAME="author">AUTHOR</A></H1>
  -<P>Doug MacEachern</P>
  +<H1><A NAME="CREDITS">CREDITS</A></H1>
  +<P>
  +This interface is based on the original pure Perl version by Lincoln Stein.
   
  +<P>
  +<HR>
  +<H1><A NAME="AUTHOR">AUTHOR</A></H1>
  +<P>
  +Doug MacEachern
   </BODY>
   
   </HTML>
  
  
  
  1.2       +4 -2      httpd-site/apreq/index.html
  
  Index: index.html
  ===================================================================
  RCS file: /home/cvs/httpd-site/apreq/index.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -u -r1.1 -r1.2
  --- index.html	2000/12/23 03:30:36	1.1
  +++ index.html	2001/06/20 00:23:17	1.2
  @@ -27,6 +27,8 @@
   
   <h2>News</h2>
   
  +<p><b>June 19, 2001</b> - libapreq-0.33 was released.</p>
  +
   <p><b>December 23, 2000</b> - libapreq-0.31_03 was released for testing.</p>
   
   <p><b>December 17, 2000</b> - libapreq-0.31_02 was released for testing.</p>
  @@ -38,7 +40,7 @@
   <p>You can download the latest stable version of libapreq from:</p>
   
   <ul>
  -  <li><a href="/dist/">http://httpd.apache.org/dist/</a></li>
  +  <li><a href="/dist/httpd/">http://httpd.apache.org/dist/httpd/</a></li>
     <li><a href="http://search.cpan.org/search?mode=module&query=libapreq">CPAN</a> ('perl -MCPAN -e "install libapreq"')
   </ul>
   
  @@ -59,7 +61,7 @@
   
   <hr noshade size="1">
   
  -<small>$Id: index.html,v 1.1 2000/12/23 03:30:36 jimw Exp $</small>
  +<small>$Id: index.html,v 1.2 2001/06/20 00:23:17 jimw Exp $</small>
   
   </table>
   </body>
  
  
  
  1.2       +339 -242  httpd-site/apreq/libapreq.html
  
  Index: libapreq.html
  ===================================================================
  RCS file: /home/cvs/httpd-site/apreq/libapreq.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -u -r1.1 -r1.2
  --- libapreq.html	2000/12/23 03:30:36	1.1
  +++ libapreq.html	2001/06/20 00:23:17	1.2
  @@ -1,280 +1,361 @@
   <HTML>
   <HEAD>
   <TITLE>libapreq - Apache Request C Library</TITLE>
  -<LINK REV="made" HREF="mailto:perl@packages.debian.org">
  +<LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
   </HEAD>
   
   <BODY>
   
  -<A NAME="__index__"></A>
   <!-- INDEX BEGIN -->
   
   <UL>
   
  -	<LI><A HREF="#name">NAME</A></LI>
  -	<LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  -	<LI><A HREF="#description">DESCRIPTION</A></LI>
  -	<LI><A HREF="#apacherequest">ApacheRequest</A></LI>
  +	<LI><A HREF="#NAME">NAME</A>
  +	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  +	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  +	<LI><A HREF="#ApacheRequest">ApacheRequest</A>
   	<UL>
   
  -		<LI><A HREF="#apacherequest *apacherequest_new (request_rec *r)">ApacheRequest *ApacheRequest_new (request_rec *r)</A></LI>
  -		<LI><A HREF="#int apacherequest_parse (apacherequest *req)">int ApacheRequest_parse (ApacheRequest *req)</A></LI>
  -		<LI><A HREF="#const char *apacherequest_param (apacherequest *req, const char *key)">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A></LI>
  -		<LI><A HREF="#array_header *apacherequest_params (apacherequest *req, const char *key)">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A></LI>
  -		<LI><A HREF="#char *apacherequest_params_as_string (apacherequest *req, const char *key)">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A></LI>
  -		<LI><A HREF="#apacheupload *upload = apacherequest_upload (apacherequest *req)">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A></LI>
  +		<LI><A HREF="#ApacheRequest_ApacheRequest_new">ApacheRequest *ApacheRequest_new (request_rec *r)</A>
  +		<LI><A HREF="#int_ApacheRequest_parse_ApacheR">int ApacheRequest_parse (ApacheRequest *req)</A>
  +		<LI><A HREF="#const_char_ApacheRequest_param_">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A>
  +		<LI><A HREF="#array_header_ApacheRequest_para">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A>
  +		<LI><A HREF="#char_ApacheRequest_params_as_st">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A>
  +		<LI><A HREF="#ApacheUpload_upload_ApacheReq">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A>
   	</UL>
   
  -	<LI><A HREF="#apacheupload">ApacheUpload</A></LI>
  +	<LI><A HREF="#ApacheUpload">ApacheUpload</A>
   	<UL>
   
  -		<LI><A HREF="#apacheupload *apacheupload_find (apacheupload *upload, char *name)">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A></LI>
  -		<LI><A HREF="#const char *apacheupload_info (apacheupload *upload, char *key)">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A></LI>
  -		<LI><A HREF="#const char *apacheupload_type (apacheupload *upload)">const char *ApacheUpload_type (ApacheUpload *upload)</A></LI>
  +		<LI><A HREF="#ApacheUpload_ApacheUpload_find_">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A>
  +		<LI><A HREF="#const_char_ApacheUpload_info_A">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A>
  +		<LI><A HREF="#const_char_ApacheUpload_type_A">const char *ApacheUpload_type (ApacheUpload *upload)</A>
   	</UL>
   
  -	<LI><A HREF="#apachecookie">ApacheCookie</A></LI>
  +	<LI><A HREF="#ApacheCookie">ApacheCookie</A>
   	<UL>
   
  -		<LI><A HREF="#apachecookie *apachecookie_new (request_rec *r, ...)">ApacheCookie *ApacheCookie_new (request_rec *r, ...)</A></LI>
  -		<LI><A HREF="#char *apachecookie_attr (apachecookie *c, char *key, char *val)">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val)</A></LI>
  -		<LI><A HREF="#apachecookiejar *apachecookie_parse (request_rec *r, const char *data)">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data)</A></LI>
  -		<LI><A HREF="#int apachecookieitems (apachecookie *c)">int ApacheCookieItems (ApacheCookie *c)</A></LI>
  -		<LI><A HREF="#char *apachecookiefetch (apachecookie *c, int n)">char *ApacheCookieFetch (ApacheCookie *c, int n)</A></LI>
  -		<LI><A HREF="#void apachecookieadd (apachecookie *c, char *value)">void ApacheCookieAdd (ApacheCookie *c, char *value)</A></LI>
  -		<LI><A HREF="#int apachecookiejaritems (apachecookiejar *cookies)">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A></LI>
  -		<LI><A HREF="#apachecookie *apachecookiejarfetch (apachecookiejar *cookies, int n)">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A></LI>
  -		<LI><A HREF="#void apachecookiejaradd (apachecookiejar *cookies, apachecookie *c)">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A></LI>
  -		<LI><A HREF="#char *apachecookie_expires (apachecookie *c, char *time_str)">char *ApacheCookie_expires (ApacheCookie *c, char *time_str)</A></LI>
  -		<LI><A HREF="#void apachecookie_bake (apachecookie *c)">void ApacheCookie_bake (ApacheCookie *c)</A></LI>
  -		<LI><A HREF="#char *apachecookie_as_string (apachecookie *c)">char *ApacheCookie_as_string (ApacheCookie *c)</A></LI>
  +		<LI><A HREF="#ApacheCookie_ApacheCookie_new_">ApacheCookie *ApacheCookie_new (request_rec *r, ...) </A>
  +		<LI><A HREF="#char_ApacheCookie_attr_ApacheC">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val) </A>
  +		<LI><A HREF="#ApacheCookieJar_ApacheCookie_pa">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data) </A>
  +		<LI><A HREF="#int_ApacheCookieItems_ApacheCoo">int ApacheCookieItems (ApacheCookie *c)</A>
  +		<LI><A HREF="#char_ApacheCookieFetch_ApacheC">char *ApacheCookieFetch (ApacheCookie *c, int n)</A>
  +		<LI><A HREF="#void_ApacheCookieAdd_ApacheCook">void ApacheCookieAdd (ApacheCookie *c, char *value)</A>
  +		<LI><A HREF="#int_ApacheCookieJarItems_Apache">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A>
  +		<LI><A HREF="#ApacheCookie_ApacheCookieJarFet">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A>
  +		<LI><A HREF="#void_ApacheCookieJarAdd_ApacheC">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A>
  +		<LI><A HREF="#char_ApacheCookie_expires_Apac">char *ApacheCookie_expires (ApacheCookie *c, char *time_str) </A>
  +		<LI><A HREF="#void_ApacheCookie_bake_ApacheCo">void ApacheCookie_bake (ApacheCookie *c)</A>
  +		<LI><A HREF="#char_ApacheCookie_as_string_Ap">char *ApacheCookie_as_string (ApacheCookie *c)  </A>
   	</UL>
   
  -	<LI><A HREF="#credits">CREDITS</A></LI>
  -	<LI><A HREF="#author">AUTHOR</A></LI>
  +	<LI><A HREF="#CREDITS">CREDITS</A>
  +	<LI><A HREF="#AUTHOR">AUTHOR</A>
   </UL>
   <!-- INDEX END -->
   
   <HR>
   <P>
  -<H1><A NAME="name">NAME</A></H1>
  -<P>libapreq - Apache Request C Library</P>
  +<H1><A NAME="NAME">NAME</A></H1>
   <P>
  +libapreq - Apache Request C Library
  +
  +<P>
   <HR>
  -<H1><A NAME="synopsis">SYNOPSIS</A></H1>
  +<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
   <P>
   <HR>
  -<H1><A NAME="description">DESCRIPTION</A></H1>
  +<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
   <P>
   <HR>
  -<H1><A NAME="apacherequest">ApacheRequest</A></H1>
  +<H1><A NAME="ApacheRequest">ApacheRequest</A></H1>
   <DL>
  -<DT><STRONG><A NAME="item_parms">req-&gt;parms</A></STRONG><BR>
  -<DD>
  +<DT><STRONG><A NAME="item_req">req-&gt;parms</A></STRONG><DD>
  +<P>
   This field is an Apache <EM>table</EM> that holds the parsed contents of
  -<STRONG>GET</STRONG> and <STRONG>POST</STRONG> requests.
  -Example:
  -<PRE>
  - table *data = req-&gt;parms;
  - ap_table_set(data, &quot;Key&quot;, &quot;Value&quot;);</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_post_max">req-&gt;post_max</A></STRONG><BR>
  -<DD>
  -Limit the size of POST data.  <EM>ApacheRequest_parse</EM> will return an
  -error code if the size is exceeded:
  -<PRE>
  - int status;
  - ApacheRequest *req = ApacheRequest_new(r);</PRE>
  -<PRE>
  - req-&gt;post_max = 1204;
  +<STRONG>GET</STRONG> and <STRONG>POST</STRONG> requests. Example:
  +
  +<P>
  +<PRE> table *data = req-&gt;parms;
  + ap_table_set(data, &quot;Key&quot;, &quot;Value&quot;);
  +</PRE>
  +<DT><STRONG><A NAME="item_req">req-&gt;post_max</A></STRONG><DD>
  +<P>
  +Limit the size of POST data.  <EM>ApacheRequest_parse</EM> will return an error code if the size is exceeded:
  +
  +<P>
  +<PRE> int status;
  + ApacheRequest *req = ApacheRequest_new(r);
  +</PRE>
  +<P>
  +<PRE> req-&gt;post_max = 1204;
    if((status = ApacheRequest_parse(req)) != OK) {
        char *errmsg = ap_table_get(r-&gt;notes, &quot;error-notes&quot;);
        ...
        return status;
  - }</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_disable_uploads">req-&gt;disable_uploads</A></STRONG><BR>
  -<DD>
  -Disable file uploads.  <EM>ApacheRequest_parse</EM> will return an
  -error code if a file upload is attempted:
  -<PRE>
  - int status;
  - ApacheRequest *req = ApacheRequest_new(r);</PRE>
  -<PRE>
  - req-&gt;disable_uploads = 1;
  + }
  +</PRE>
  +<DT><STRONG><A NAME="item_req">req-&gt;disable_uploads</A></STRONG><DD>
  +<P>
  +Disable file uploads.  <EM>ApacheRequest_parse</EM> will return an error code if a file upload is attempted:
  +
  +<P>
  +<PRE> int status;
  + ApacheRequest *req = ApacheRequest_new(r);
  +</PRE>
  +<P>
  +<PRE> req-&gt;disable_uploads = 1;
    if((status = ApacheRequest_parse(req)) != OK) {
        char *errmsg = ap_table_get(r-&gt;notes, &quot;error-notes&quot;);
        ...
        return status;
  - }</PRE>
  -<P></P></DL>
  + }
  +</PRE>
  +<DT><STRONG><A NAME="item_req">req-&gt;temp_dir</A></STRONG><DD>
   <P>
  -<H2><A NAME="apacherequest *apacherequest_new (request_rec *r)">ApacheRequest *ApacheRequest_new (request_rec *r)</A></H2>
  -<P>This function creates a new <EM>ApacheRequest</EM> object using the given
  -<EM>request_rec</EM> structure:</P>
  -<PRE>
  - ApacheRequest *req = ApacheRequest_new(r);</PRE>
  -<P>
  -<H2><A NAME="int apacherequest_parse (apacherequest *req)">int ApacheRequest_parse (ApacheRequest *req)</A></H2>
  -<P>If the request method is <STRONG>GET</STRONG> or <STRONG>POST</STRONG>, the query string
  -arguments and the client form data will be read, parsed and saved.
  -In addition, if the request method is <STRONG>POST</STRONG> and the <EM>Content-type</EM> is
  -<EM>multipart/form-data</EM>, the uploaded files will be written to
  -temporary files which can be accessed with the <EM>upload</EM> field names.
  -The return value is <STRONG>OK</STRONG> on success, otherwise an error code that
  -your handler should return.</P>
  -<P>
  -<H2><A NAME="const char *apacherequest_param (apacherequest *req, const char *key)">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A></H2>
  -<P>This function will return the value of the given parameter <EM>key</EM>:</P>
  -<PRE>
  - const char *value = ApacheRequest_param(req, &quot;Key&quot;);</PRE>
  -<P>
  -<H2><A NAME="array_header *apacherequest_params (apacherequest *req, const char *key)">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A></H2>
  -<P>This function will return an <EM>array_header</EM> of values for the given
  -parameter <EM>key</EM>:</P>
  -<PRE>
  - array_header *values = ApacheRequest_params(req, &quot;Key&quot;);</PRE>
  -<P>
  -<H2><A NAME="char *apacherequest_params_as_string (apacherequest *req, const char *key)">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A></H2>
  -<P>This function will format multi-value parmeters into a comma delimited string.</P>
  -<PRE>
  - char *list = ApacheRequest_params_as_string(req, &quot;Key&quot;);</PRE>
  -<P>
  -<H2><A NAME="apacheupload *upload = apacherequest_upload (apacherequest *req)">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A></H2>
  -<P>If the request <EM>Content-type</EM> was that of <EM>multipart/form-data</EM>,
  -this will return an <EM>ApacheUpload</EM> pointer containing the upload data,
  -<STRONG>NULL</STRONG> otherwise.  See <EM>ApacheUpload</EM>.</P>
  -<PRE>
  - ApacheUpload *upload = ApacheRequest_upload(req);</PRE>
  -<P>
  -<HR>
  -<H1><A NAME="apacheupload">ApacheUpload</A></H1>
  -<P>The <EM>ApacheUpload</EM> structure holds all information for all uploaded
  -files and is accessed via the <EM>upload</EM> field of an <EM>ApacheRequest</EM>
  -structure.</P>
  +Sets the directory where upload files are spooled.
  +
  +<P>
  +<PRE>  char dir[] = &quot;/usr/tmp&quot;;
  +  req-&gt;temp_dir = dir;
  +</PRE>
  +<DT><STRONG><A NAME="item_req">req-&gt;hook_data</A></STRONG><DD>
  +<DT><STRONG><A NAME="item_req">req-&gt;upload_hook</A></STRONG><DD>
  +<P>
  +Redirects upload data to be processed by the hook.
  +
  +<P>
  +<PRE>  req-&gt;hook_data = (void *) some_struct_pointer;
  +  req-&gt;upload_hook = (int(*)(void*,char*,int,const ApacheUpload*)) some_function;
  +</PRE>
  +<P>
  +In this case 
  +
  +<P>
  +<PRE>  some_function(req-&gt;hookdata,buffer,bufsize,upload);
  +</PRE>
  +<P>
  +will be called repeatedly during the file upload instead of writing the
  +data to a temp file.
  +
  +</DL>
  +<P>
  +<HR>
  +<H2><A NAME="ApacheRequest_ApacheRequest_new">ApacheRequest *ApacheRequest_new (request_rec *r)</A></H2>
  +<P>
  +This function creates a new <EM>ApacheRequest</EM> object using the given
  +<EM>request_rec</EM> structure:
  +
  +<P>
  +<PRE> ApacheRequest *req = ApacheRequest_new(r);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="int_ApacheRequest_parse_ApacheR">int ApacheRequest_parse (ApacheRequest *req)</A></H2>
  +<P>
  +If the request method is <STRONG>GET</STRONG> or <STRONG>POST</STRONG>, the query string arguments and the client form data will be read, parsed
  +and saved. In addition, if the request method is <STRONG>POST</STRONG> and the <EM>Content-type</EM> is
  +<EM>multipart/form-data</EM>, the uploaded files will be written to temporary files which can be
  +accessed with the <EM>upload</EM> field names. The return value is <STRONG>OK</STRONG> on success, otherwise an error code that your handler should return.
  +
  +<P>
  +<HR>
  +<H2><A NAME="const_char_ApacheRequest_param_">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A></H2>
  +<P>
  +This function will return the value of the given parameter <EM>key</EM>:
  +
  +<P>
  +<PRE> const char *value = ApacheRequest_param(req, &quot;Key&quot;);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="array_header_ApacheRequest_para">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A></H2>
  +<P>
  +This function will return an <EM>array_header</EM> of values for the given parameter <EM>key</EM>: 
  +
  +<P>
  +<PRE> array_header *values = ApacheRequest_params(req, &quot;Key&quot;);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="char_ApacheRequest_params_as_st">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A></H2>
  +<P>
  +This function will format multi-value parmeters into a comma delimited
  +string.
  +
  +<P>
  +<PRE> char *list = ApacheRequest_params_as_string(req, &quot;Key&quot;);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="ApacheUpload_upload_ApacheReq">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A></H2>
  +<P>
  +If the request <EM>Content-type</EM> was that of <EM>multipart/form-data</EM>, this will return an <EM>ApacheUpload</EM> pointer containing the upload data,
  +<STRONG>NULL</STRONG> otherwise. See <EM>ApacheUpload</EM>.
  +
  +<P>
  +<PRE> ApacheUpload *upload = ApacheRequest_upload(req);
  +</PRE>
  +<P>
  +<HR>
  +<H1><A NAME="ApacheUpload">ApacheUpload</A></H1>
  +<P>
  +The <EM>ApacheUpload</EM> structure holds all information for all uploaded files and is accessed via
  +the <EM>upload</EM> field of an <EM>ApacheRequest</EM>
  +structure.  
  +
   <DL>
  -<DT><STRONG><A NAME="item_name">upload-&gt;name</A></STRONG><BR>
  -<DD>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;name</A></STRONG><DD>
  +<P>
   The name of the filefield parameter:
  -<PRE>
  - char *name = upload-&gt;name;</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_filename">upload-&gt;filename</A></STRONG><BR>
  -<DD>
  -The name of the upload file:
  -<PRE>
  - char *filename = upload-&gt;filename;</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_fp">upload-&gt;fp</A></STRONG><BR>
  -<DD>
  +
  +<P>
  +<PRE> char *name = upload-&gt;name;
  +</PRE>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;filename</A></STRONG><DD>
  +<P>
  +The name of the upload file as reported by the client:
  +
  +<P>
  +<PRE> char *filename = upload-&gt;filename;
  +</PRE>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;fp</A></STRONG><DD>
  +<P>
   A file pointer to the uploaded file:
  -<PRE>
  - FILE *fp = upload-&gt;fp;</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_size">upload-&gt;size</A></STRONG><BR>
  -<DD>
  +
  +<P>
  +<PRE> FILE *fp = upload-&gt;fp;
  +</PRE>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;tempname</A></STRONG><DD>
  +<P>
  +The name of the temporary upload file on the server:
  +
  +<P>
  +char <CODE>*tempname</CODE> = upload-&gt;tempname;
  +
  +<DT><STRONG><A NAME="item_upload">upload-&gt;size</A></STRONG><DD>
  +<P>
   The size of the uploaded file in bytes:
  -<PRE>
  - long size = upload-&gt;size;</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_info">upload-&gt;info</A></STRONG><BR>
  -<DD>
  +
  +<P>
  +<PRE> long size = upload-&gt;size;
  +</PRE>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;info</A></STRONG><DD>
  +<P>
   The additional header information for the uploaded file:
  -<PRE>
  - table *info = upload-&gt;info;
  - const char *type = ap_table_get(info, &quot;Content-type&quot;);</PRE>
  -<P></P>
  -<DT><STRONG><A NAME="item_next">upload-&gt;next</A></STRONG><BR>
  -<DD>
  -Pointer to the next <EM>ApacheUpload</EM> structure if multiple files were
  -uploaded:
  -<PRE>
  -    ApacheUpload *uptr;
  +
  +<P>
  +<PRE> table *info = upload-&gt;info;
  + const char *type = ap_table_get(info, &quot;Content-type&quot;);
  +</PRE>
  +<DT><STRONG><A NAME="item_upload">upload-&gt;next</A></STRONG><DD>
  +<P>
  +Pointer to the next <EM>ApacheUpload</EM> structure if multiple files were uploaded:
  +
  +<P>
  +<PRE>    ApacheUpload *uptr;
       for (uptr = ApacheRequest_upload(req); uptr; uptr = uptr-&gt;next) {
           char *name = uptr-&gt;name;
           FILE *fp   = uptr-&gt;fp;
           ...
  -    }</PRE>
  -<P></P></DL>
  +    }
  +</PRE>
  +</DL>
  +<P>
  +<HR>
  +<H2><A NAME="ApacheUpload_ApacheUpload_find_">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A></H2>
  +<P>
  +Returns the <EM>ApacheUpload</EM> pointer associated with <EM>name</EM> or
  +<STRONG>NULL</STRONG> if <EM>name</EM> is not found in the list:
  +
  +<P>
  +<PRE> ApacheUpload *upload = ApacheUpload_find(upload, name);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="const_char_ApacheUpload_info_A">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A></H2>
   <P>
  -<H2><A NAME="apacheupload *apacheupload_find (apacheupload *upload, char *name)">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A></H2>
  -<P>Returns the <EM>ApacheUpload</EM> pointer associated with <EM>name</EM> or
  -<STRONG>NULL</STRONG> if <EM>name</EM> is not found in the list:</P>
  -<PRE>
  - ApacheUpload *upload = ApacheUpload_find(upload, name);</PRE>
  -<P>
  -<H2><A NAME="const char *apacheupload_info (apacheupload *upload, char *key)">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A></H2>
  -<P>Shortcut for accessing the <EM>info</EM> table:</P>
  -<PRE>
  - const char *type = ApacheUpload_info(upload, &quot;Content-Type&quot;);</PRE>
  -<P>
  -<H2><A NAME="const char *apacheupload_type (apacheupload *upload)">const char *ApacheUpload_type (ApacheUpload *upload)</A></H2>
  -<P>Shortcut for accessing the uploaded file <EM>Content-Type</EM>:</P>
  -<PRE>
  - const char *type = ApacheUpload_type(upload);</PRE>
  -<P>
  -<HR>
  -<H1><A NAME="apachecookie">ApacheCookie</A></H1>
  -<P>
  -<H2><A NAME="apachecookie *apachecookie_new (request_rec *r, ...)">ApacheCookie *ApacheCookie_new (request_rec *r, ...)</A></H2>
  -<P>This function creates a new <EM>ApacheCookie</EM> object, using the given
  -<EM>request_request</EM> and optional attribute arguments which are as follows:</P>
  +Shortcut for accessing the <EM>info</EM> table:
  +
  +<P>
  +<PRE> const char *type = ApacheUpload_info(upload, &quot;Content-Type&quot;);
  +</PRE>
  +<P>
  +<HR>
  +<H2><A NAME="const_char_ApacheUpload_type_A">const char *ApacheUpload_type (ApacheUpload *upload)</A></H2>
  +<P>
  +Shortcut for accessing the uploaded file <EM>Content-Type</EM>:
  +
  +<P>
  +<PRE> const char *type = ApacheUpload_type(upload);
  +</PRE>
  +<P>
  +<HR>
  +<H1><A NAME="ApacheCookie">ApacheCookie</A></H1>
  +<H2><A NAME="ApacheCookie_ApacheCookie_new_">ApacheCookie *ApacheCookie_new (request_rec *r, ...)</A></H2>
  +<P>
  +This function creates a new <EM>ApacheCookie</EM> object, using the given
  +<EM>request_request</EM> and optional attribute arguments which are as follows:
  +
   <DL>
  -<DT><STRONG><A NAME="item_%2Dname">-name</A></STRONG><BR>
  -<DD>
  +<DT><STRONG><A NAME="item__name">-name</A></STRONG><DD>
  +<P>
   Sets the <EM>name</EM> field to the given value.
  -<P></P>
  -<DT><STRONG><A NAME="item_%2Dvalue">-value</A></STRONG><BR>
  -<DD>
  +
  +<DT><STRONG><A NAME="item__value">-value</A></STRONG><DD>
  +<P>
   Adds the value to <EM>values</EM> field.
  -<P></P>
  -<DT><STRONG><A NAME="item_%2Dexpires">-expires</A></STRONG><BR>
  -<DD>
  -Sets the <EM>expires</EM> field to the calculated date string.
  -See <EM>ApacheCookie_expires</EM> for a listing of format options.
  -The default is <STRONG>NULL</STRONG>.
  -<P></P>
  -<DT><STRONG><A NAME="item_%2Ddomain">-domain</A></STRONG><BR>
  -<DD>
  -Sets the <EM>domain</EM> field to the given value.
  -The default is <STRONG>NULL</STRONG>.
  -<P></P>
  -<DT><STRONG><A NAME="item_%2Dpath">-path</A></STRONG><BR>
  -<DD>
  -Sets the <EM>path</EM> field to the given value.
  -The default <EM>path</EM> is derived from the requested <EM>uri</EM>.
  -<P></P>
  -<DT><STRONG><A NAME="item_%2Dsecure">-secure</A></STRONG><BR>
  -<DD>
  -Sets the <EM>secure</EM> field to true or false using a given string value
  -of <EM>On</EM> or <EM>Off</EM>.  
  -The default is <EM>Off</EM>.
  -<P></P></DL>
  -<P>Example:</P>
  -<PRE>
  - ApacheCookie *c = ApacheCookie_new(r,
  +
  +<DT><STRONG><A NAME="item__expires">-expires</A></STRONG><DD>
  +<P>
  +Sets the <EM>expires</EM> field to the calculated date string. See <EM>ApacheCookie_expires</EM> for a listing of format options. The default is <STRONG>NULL</STRONG>.
  +
  +<DT><STRONG><A NAME="item__domain">-domain</A></STRONG><DD>
  +<P>
  +Sets the <EM>domain</EM> field to the given value. The default is <STRONG>NULL</STRONG>.
  +
  +<DT><STRONG><A NAME="item__path">-path</A></STRONG><DD>
  +<P>
  +Sets the <EM>path</EM> field to the given value. The default <EM>path</EM> is derived from the requested <EM>uri</EM>.
  +
  +<DT><STRONG><A NAME="item__secure">-secure</A></STRONG><DD>
  +<P>
  +Sets the <EM>secure</EM> field to true or false using a given string value of <EM>On</EM> or <EM>Off</EM>. The default is <EM>Off</EM>.
  +
  +
  +<P>
  +Example:
  +
  +<P>
  +<PRE> ApacheCookie *c = ApacheCookie_new(r,
                           &quot;-name&quot;,    &quot;foo&quot;, 
                           &quot;-value&quot;,   &quot;bar&quot;, 
                           &quot;-expires&quot;, &quot;+3M&quot;, 
                           &quot;-domain&quot;,  &quot;.cp.net&quot;, 
                           &quot;-path&quot;,    &quot;/mypath/database&quot;, 
                           &quot;-secure&quot;,  &quot;On&quot;, 
  -                        NULL);</PRE>
  +                        NULL); 
  +</PRE>
  +<H2><A NAME="char_ApacheCookie_attr_ApacheC">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val)</A></H2>
  +<P>
  +This function is used to get or set a cookie attribute pair, accepting the
  +same attributes as the list above. Example:
  +
   <P>
  -<H2><A NAME="char *apachecookie_attr (apachecookie *c, char *key, char *val)">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val)</A></H2>
  -<P>This function is used to get or set a cookie attribute pair, accepting
  -the same attributes as the list above.  Example:</P>
  -<PRE>
  - char *name = ApacheCookie_attr(c, &quot;-name&quot;); /* same as c-&gt;name */
  - (void *)ApacheCookie_attr(c, &quot;-expires&quot;, &quot;+3h&quot;);</PRE>
  +<PRE> char *name = ApacheCookie_attr(c, &quot;-name&quot;); /* same as c-&gt;name */
  + (void *)ApacheCookie_attr(c, &quot;-expires&quot;, &quot;+3h&quot;);
  +</PRE>
  +<H2><A NAME="ApacheCookieJar_ApacheCookie_pa">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data)</A></H2>
   <P>
  -<H2><A NAME="apachecookiejar *apachecookie_parse (request_rec *r, const char *data)">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data)</A></H2>
  -<P>This function parses the given <EM>data</EM> string or the incoming
  +This function parses the given <EM>data</EM> string or the incoming
   <EM>Cookie</EM> header, returning an <EM>ApacheCookieJar</EM> of <EM>ApacheCookie</EM>
  -objects.</P>
  -<P>Example:</P>
  -<PRE>
  - int i;
  +objects.  
  +
  +<P>
  +Example:
  +
  +<P>
  +<PRE> int i;
    ApacheCookieJar *cookies = ApacheCookie_parse(r, NULL);
    for (i = 0; i &lt; ApacheCookieJarItems(cookies); i++) { 
        ApacheCookie *c = ApacheCookieJarFetch(cookies, i);
  @@ -284,57 +365,73 @@
            char *value = ApacheCookieFetch(c, j);
            ...
        }
  - }</PRE>
  + }
  +</PRE>
  +<H2><A NAME="int_ApacheCookieItems_ApacheCoo">int ApacheCookieItems (ApacheCookie *c)</A></H2>
   <P>
  -<H2><A NAME="int apachecookieitems (apachecookie *c)">int ApacheCookieItems (ApacheCookie *c)</A></H2>
  -<P>The number of values for the given cookie.</P>
  +The number of values for the given cookie.
  +
  +<H2><A NAME="char_ApacheCookieFetch_ApacheC">char *ApacheCookieFetch (ApacheCookie *c, int n)</A></H2>
   <P>
  -<H2><A NAME="char *apachecookiefetch (apachecookie *c, int n)">char *ApacheCookieFetch (ApacheCookie *c, int n)</A></H2>
  -<P>The <EM>n</EM>th value for the given cookie.</P>
  +The <EM>n</EM>th value for the given cookie.
  +
  +<H2><A NAME="void_ApacheCookieAdd_ApacheCook">void ApacheCookieAdd (ApacheCookie *c, char *value)</A></H2>
   <P>
  -<H2><A NAME="void apachecookieadd (apachecookie *c, char *value)">void ApacheCookieAdd (ApacheCookie *c, char *value)</A></H2>
  -<P>Add a new value to the cookie.</P>
  +Add a new value to the cookie.
  +
  +<H2><A NAME="int_ApacheCookieJarItems_Apache">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A></H2>
   <P>
  -<H2><A NAME="int apachecookiejaritems (apachecookiejar *cookies)">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A></H2>
  -<P>The number of cookies in the given cookie jar.</P>
  +The number of cookies in the given cookie jar.
  +
  +<H2><A NAME="ApacheCookie_ApacheCookieJarFet">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A></H2>
   <P>
  -<H2><A NAME="apachecookie *apachecookiejarfetch (apachecookiejar *cookies, int n)">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A></H2>
  -<P>The <EM>n</EM>th cookie in the given cookie jar.</P>
  +The <EM>n</EM>th cookie in the given cookie jar.
  +
  +<H2><A NAME="void_ApacheCookieJarAdd_ApacheC">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A></H2>
  +<P>
  +Add a new cookie to the cookie jar.
  +
  +<H2><A NAME="char_ApacheCookie_expires_Apac">char *ApacheCookie_expires (ApacheCookie *c, char *time_str)</A></H2>
   <P>
  -<H2><A NAME="void apachecookiejaradd (apachecookiejar *cookies, apachecookie *c)">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A></H2>
  -<P>Add a new cookie to the cookie jar.</P>
  +This function gets or sets the expiration date for cookie. The following
  +forms are all valid for the <EM>time_str</EM> parmeter:
  +
   <P>
  -<H2><A NAME="char *apachecookie_expires (apachecookie *c, char *time_str)">char *ApacheCookie_expires (ApacheCookie *c, char *time_str)</A></H2>
  -<P>This function gets or sets the expiration date for cookie.
  -The following forms are all valid for the <EM>time_str</EM> parmeter:</P>
  -<PRE>
  -        +30s                              30 seconds from now 
  +<PRE>        +30s                              30 seconds from now 
           +10m                              ten minutes from now 
           +1h                               one hour from now 
           -1d                               yesterday (i.e. &quot;ASAP!&quot;) 
           now                               immediately 
           +3M                               in three months 
           +10y                              in ten years time 
  -        Thursday, 25-Apr-1999 00:40:33 GMT  at the indicated time &amp; date</PRE>
  +        Thursday, 25-Apr-1999 00:40:33 GMT  at the indicated time &amp; date 
  +</PRE>
  +<H2><A NAME="void_ApacheCookie_bake_ApacheCo">void ApacheCookie_bake (ApacheCookie *c)</A></H2>
   <P>
  -<H2><A NAME="void apachecookie_bake (apachecookie *c)">void ApacheCookie_bake (ApacheCookie *c)</A></H2>
  -<P>Put cookie in the oven to bake.
  -(Add a <EM>Set-Cookie</EM> header to the outgoing headers table.)</P>
  -<PRE>
  - ApacheCookie_bake(c);</PRE>
  +Put cookie in the oven to bake. (Add a <EM>Set-Cookie</EM> header to the outgoing headers table.)
  +
  +<P>
  +<PRE> ApacheCookie_bake(c);
  +</PRE>
  +<H2><A NAME="char_ApacheCookie_as_string_Ap">char *ApacheCookie_as_string (ApacheCookie *c)</A></H2>
  +<P>
  +Returns a string version of the cookie:
  +
   <P>
  -<H2><A NAME="char *apachecookie_as_string (apachecookie *c)">char *ApacheCookie_as_string (ApacheCookie *c)</A></H2>
  -<P>Returns a string version of the cookie:</P>
  -<PRE>
  - ap_table_add(r-&gt;headers_out, &quot;Set-Cookie&quot;, ApacheCookie_as_string(c));</PRE>
  +<PRE> ap_table_add(r-&gt;headers_out, &quot;Set-Cookie&quot;, ApacheCookie_as_string(c));
  +</PRE>
  +
   <P>
   <HR>
  -<H1><A NAME="credits">CREDITS</A></H1>
  -<P>This library is based on Perl modules by Lincoln Stein.</P>
  +<H1><A NAME="CREDITS">CREDITS</A></H1>
  +<P>
  +This library is based on Perl modules by Lincoln Stein.
  +
   <P>
   <HR>
  -<H1><A NAME="author">AUTHOR</A></H1>
  -<P>Doug MacEachern</P>
  +<H1><A NAME="AUTHOR">AUTHOR</A></H1>
  +<P>
  +Doug MacEachern
   
   </BODY>
   
  
  
  

Mime
View raw message