httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From c...@apache.org
Subject cvs commit: httpd-docs-1.3/apidoc ap-dict.dtd api.xml
Date Sat, 03 Nov 2001 12:38:04 GMT
coar        01/11/03 04:38:03

  Modified:    apidoc   ap-dict.dtd api.xml
  Log:
  More DTD tuning, more HTML imports.  XML is valid, but not very pretty..
  
  Revision  Changes    Path
  1.4       +7 -0      httpd-docs-1.3/apidoc/ap-dict.dtd
  
  Index: ap-dict.dtd
  ===================================================================
  RCS file: /home/cvs/httpd-docs-1.3/apidoc/ap-dict.dtd,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -u -r1.3 -r1.4
  --- ap-dict.dtd	2001/11/03 11:47:13	1.3
  +++ ap-dict.dtd	2001/11/03 12:38:03	1.4
  @@ -69,6 +69,7 @@
   	"comment
           |dl
           |note
  +        |ol
           |para
           |ul">
   <!ENTITY % content.description
  @@ -168,6 +169,11 @@
   	"(#PCDATA
           |%elements.note;)*">
   
  +<!ENTITY % elements.ol
  +	"li">
  +<!ENTITY % content.ol
  +	"(%elements.ol;)*">
  +
   <!ENTITY % elements.para
   	"b
           |comment
  @@ -300,6 +306,7 @@
   <!ELEMENT literal %content.literal;>
   <!ELEMENT name %content.name;>
   <!ELEMENT note %content.note;>
  +<!ELEMENT ol %content.ol;>
   <!ELEMENT para %content.para;>
   <!ELEMENT ref %content.ref;>
   <!ATTLIST ref
  
  
  
  1.5       +1905 -187 httpd-docs-1.3/apidoc/api.xml
  
  Index: api.xml
  ===================================================================
  RCS file: /home/cvs/httpd-docs-1.3/apidoc/api.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -u -r1.4 -r1.5
  --- api.xml	2001/11/03 11:47:13	1.4
  +++ api.xml	2001/11/03 12:38:03	1.5
  @@ -7,21 +7,21 @@
     <definition>
      <declaration>#include &quot;http_config.h&quot;</declaration>
      <description>
  -     <para>
  -       Allowed locations for a configuration directive are the union of
  -       those indicated by each set bit in the
  -       <literal>req_override</literal>
  -       mask in the
  -       <literal><ref>command_rec</ref></literal> structure.
  -     </para>
  -     <para>
  -       A directive with the
  -       <literal>ACCESS_CONF</literal>
  -       bit set may appear
  -       in the server-wide configuration files
  -       (<i>e.g.</i>, <literal>httpd.conf</literal>)
  -       inside &lt;Directory&gt; or &lt;Location&gt; containers.
  -     </para>
  +    <para>
  +     Allowed locations for a configuration directive are the union of
  +     those indicated by each set bit in the
  +     <literal>req_override</literal>
  +     mask in the
  +     <literal><ref>command_rec</ref></literal> structure.
  +    </para>
  +    <para>
  +     A directive with the
  +     <literal>ACCESS_CONF</literal>
  +     bit set may appear
  +     in the server-wide configuration files
  +     (<i>e.g.</i>, <literal>httpd.conf</literal>)
  +     inside &lt;Directory&gt; or &lt;Location&gt; containers.
  +    </para>
      </description>
      <example>
       <text>
  @@ -4115,7 +4115,21 @@
     <name>ap_array_pstrcat</name>
     <definition>
      <declaration>char *ap_array_pstrcat(pool *p, const array_header *arr, const char sep);</declaration>
  -   <description href="dict-ap_array_pstrcat.html" />
  +   <description>
  +<para>
  +This routine returns a pointer to a string composed of all the values in the
  +specified array, separated by the designated delimiter character.
  +The string is allocated from the specified pool.
  +</para>
  +<para>
  +<b>Note:</b> This routine assumes that each array element consists
  +simply of a <literal>char *</literal> pointer (such as created by a
  +<literal>ap_make_array(p, 4, sizeof(char *))</literal> call).
  +It cannot be used with other or more complex types of array elements;
  +results are unpredictable, and a mmory fault is almost guaranteed if
  +used with such.
  +</para>
  +   </description>
      <example>
       <text>lang = ap_array_pstrcat(r-&gt;pool, variant-&gt;content_languages, ',');</text>
      </example>
  @@ -4125,7 +4139,17 @@
     <name>ap_auth_name</name>
     <definition>
      <declaration>const char *ap_auth_name(request_rec *r);</declaration>
  -   <description href="dict-ap_auth_name.html" />
  +   <description>
  +<para>
  +This routine returns the name of the realm in which the client
  +must be authenticated and authorised for the request to be
  +successfully served.  The string returned is the argument to
  +the corresponding <literal>AuthName</literal> directive.
  +</para>
  +<para>
  +If there is no applicable realm, <literal>NULL</literal> is returned.
  +</para>
  +   </description>
      <example>
       <text>if (ap_auth_name(r) == NULL) {
       /* no applicable security realm */ 
  @@ -4141,7 +4165,14 @@
     <name>ap_auth_type</name>
     <definition>
      <declaration>const char *ap_auth_type(request_rec *r);</declaration>
  -   <description href="dict-ap_auth_type.html" />
  +   <description>
  +<para>
  +This function returns the name of the HTTP authentication method
  +that applies to the specified request.  The method is set by
  +the <literal>AuthType</literal> directive.  If no authentication
  +menthod is applicable, this routine returns <literal>NULL</literal>.
  +</para>
  +   </description>
      <example>
       <text>if (strcasecmp(ap_auth_type(r), &quot;Basic&quot;) == 0) { 
       /* AuthType Basic */ 
  @@ -4273,7 +4304,12 @@
     <name>ap_bfilbuf</name>
     <definition>
      <declaration>int ap_bfilbuf(BUFF *fb);</declaration>
  -   <description href="dict-ap_bfilbuf.html" />
  +   <description>
  +<para>
  +<literal>ap_bfilbuf()</literal> isn't called directly.
  +Use the <literal>ap_bgetc()</literal> (<i>q.v.</i>) macro instead.
  +</para>
  +   </description>
      <example>
       <text>SA-BUFF</text>
      </example>
  @@ -4408,7 +4444,15 @@
     <name>ap_block_alarms</name>
     <definition>
      <declaration>void ap_block_alarms(void);</declaration>
  -   <description href="dict-ap_block_alarms.html" />
  +   <description>
  +<para>
  +Blocks pending timeouts, protecting critical code sections.
  +</para>
  +<para>
  +Calls to this function can be nested, but each call must have a corresponding
  +call to unblock_alarms.
  +</para>
  +   </description>
      <example>
       <text>ap_block_alarms();
   pid = fork();
  @@ -4466,7 +4510,14 @@
     <name>ap_bprintf</name>
     <definition>
      <declaration>int ap_bprintf(BUFF *fb, const char *fmt, ...);</declaration>
  -   <description href="dict-ap_bprintf.html" />
  +   <description>
  +<para>
  +Copies formatted data to a BUFF structure.
  +</para>
  +<para>
  +Returns 0 on success, -1 on failure.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4618,7 +4669,11 @@
     <name>ap_bytes_in_free_blocks</name>
     <definition>
      <declaration>long ap_bytes_in_free_blocks(void);</declaration>
  -   <description href="dict-ap_bytes_in_free_blocks.html" />
  +   <description>
  +<para>
  +Returns the number of bytes in free blocks for all pools.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4631,7 +4686,13 @@
     <name>ap_bytes_in_pool</name>
     <definition>
      <declaration>long ap_bytes_in_pool(pool *p);</declaration>
  -   <description href="dict-ap_bytes_in_pool.html" />
  +   <description>
  +<para>
  +Returns the number of bytes allocated for <i>p</i>.
  +</para>
  +<para>
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4644,7 +4705,19 @@
     <name>ap_call_exec</name>
     <definition>
      <declaration>int ap_call_exec(request_rec *r, char *argv0, char **env, int shellcmd);</declaration>
  -   <description href="dict-ap_call_exec.html" />
  +   <description>
  +<para>
  +Calls exec() or the setuid wrapper, if setuid wrappers are enabled, to run
  +<i>argv0</i>. <i>env</i> is a NULL-terminated array of strings to use as
  +the program's environment, and <i>shellcmd</i> is a boolean indicating
  +whether a shell should be spawned to run the command. If <i>r-&gt;args</i>
  +is set and doesn't contain "=", it is passed to <i>argv0</i> as command
  +line arguments.
  +</para>
  +<para>
  +Never returns.
  +</para>
  +   </description>
      <example>
       <text>child_pid = ap_call_exec(r, pinfo, argv0, env, 0);</text>
      </example>
  @@ -4654,7 +4727,11 @@
     <name>ap_can_exec</name>
     <definition>
      <declaration>int ap_can_exec(const struct stat *fstat);</declaration>
  -   <description href="dict-ap_can_exec.html" />
  +   <description>
  +<para>
  +Returns nonzero if the file <i>fstat</i> can be executed, 0 if it cannot.
  +</para>
  +   </description>
      <example>
       <text>if (! ap_can_exec(&amp;r-&gt;finfo)) {
       /* log an error; we can't execute the file */
  @@ -4666,7 +4743,14 @@
     <name>ap_cfg_closefile</name>
     <definition>
      <declaration>int ap_cfg_closefile(configfile_t *fp);</declaration>
  -   <description href="dict-ap_cfg_closefile.html" />
  +   <description>
  +<para>
  +Closes <i>fp</i>.
  +</para>
  +<para>
  +Returns 0 on success, -1 on error.
  +</para>
  +   </description>
      <example>
       <text>ap_cfg_closefile(imap);  /* we are done with the map file; close it */</text>
      </example>
  @@ -4679,7 +4763,15 @@
     <name>ap_cfg_getc</name>
     <definition>
      <declaration>int ap_cfg_getc(configfile_t *cfp);</declaration>
  -   <description href="dict-ap_cfg_getc.html" />
  +   <description>
  +<para>
  +Read one character from a configfile_t. Increments <i>cfp-&gt;line_number</i>
  +if a newline is encountered.
  +</para>
  +<para>
  +Returns the character found.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4692,7 +4784,16 @@
     <name>ap_cfg_getline</name>
     <definition>
      <declaration>int ap_cfg_getline(char *buf, size_t bufsize, configfile_t *cfp);</declaration>
  -   <description href="dict-ap_cfg_getline.html" />
  +   <description>
  +<para>
  +Reads a line from a file, stripping whitespace. Reads up to <i>bufsize</i>
  +characters from <i>cfp</i> into <i>buf</i>, converting any whitespace
  +encountered to single spaces.
  +</para>
  +<para>
  +Returns 0 on success, 1 if EOF encountered.
  +</para>
  +   </description>
      <example>
       <text>while (! ap_cfg_getline(l, MAX_STRING_LEN, cmd-&gt;config_file)) {
       /* Do something with the line read into l */
  @@ -4707,7 +4808,16 @@
     <name>ap_chdir_file</name>
     <definition>
      <declaration>void ap_chdir_file(const char *file);</declaration>
  -   <description href="dict-ap_chdir_file.html" />
  +   <description>
  +<para>
  +Does a chdir to the directory containing <i>file</i>. The function finds the
  +last slash in the path <i>file</i> and changes to that directory.
  +</para>
  +<para>
  +Does nothing if there are no slashes in <i>file</i>. Does not check that
  +chdir succeeds.
  +</para>
  +   </description>
      <example>
       <text>ap_chdir_file(r-&gt;filename);</text>
      </example>
  @@ -4825,7 +4935,14 @@
     <name>ap_cleanup_for_exec</name>
     <definition>
      <declaration>void ap_cleanup_for_exec(void);</declaration>
  -   <description href="dict-ap_cleanup_for_exec.html" />
  +   <description>
  +<para>
  +Destroys all pools using <i>child_cleanup</i> methods.
  +</para>
  +<para>
  +Note: call ONLY after forking and before execing a child process!
  +</para>
  +   </description>
      <example>
       <text>$();
   child_pid = ap_call_exec(r, pinfo, argv0, env, 0);</text>
  @@ -4846,7 +4963,13 @@
     <name>ap_clear_pool</name>
     <definition>
      <declaration>void ap_clear_pool(struct pool *a);</declaration>
  -   <description href="dict-ap_clear_pool.html" />
  +   <description>
  +<para>
  +Clears a pool, destroying all subpools of the pool using
  +ap_destroy_pool. The pool is then ready to be
  +reused.
  +</para>
  +   </description>
      <example>
       <text>ap_clear_pool(plog);
   ap_open_logs(server_conf, plog);</text>
  @@ -4860,7 +4983,11 @@
     <name>ap_clear_table</name>
     <definition>
      <declaration>void ap_clear_table(table *t);</declaration>
  -   <description href="dict-ap_clear_table.html" />
  +   <description>
  +<para>
  +Clears the contents of <i>t</i>, readying it for reuse.
  +</para>
  +   </description>
      <example>
       <text>table tmp;
   tmp = r-&gt;headers_out;
  @@ -4890,7 +5017,15 @@
     <name>ap_construct_server</name>
     <definition>
      <declaration>char *ap_construct_server(pool *p, const char *hostname, unsigned port, const request_rec *r);</declaration>
  -   <description href="dict-ap_construct_server.html" />
  +   <description>
  +<para>
  +Builds the server part of a URL, by appending :<i>port</i> to <i>hostname</i>
  +if <i>port</i> isn't 80 (the HTTP port).
  +</para>
  +<para>
  +Returns the server string.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4900,7 +5035,15 @@
     <name>ap_construct_url</name>
     <definition>
      <declaration>char *ap_construct_url(pool *p, const char *uri, const request_rec *r);</declaration>
  -   <description href="dict-ap_construct_url.html" />
  +   <description>
  +<para>
  +Builds a URL by prefixing http:// to the server name contained in <i>r</i>,
  +and postfixing the path found in <i>uri</i>.
  +</para>
  +<para>
  +Returns the constructed URL.
  +</para>
  +   </description>
      <example>
       <text>return ap_construct_url(r-&gt;pool, r-&gt;uri, r);</text>
      </example>
  @@ -4922,7 +5065,14 @@
     <name>ap_copy_array</name>
     <definition>
      <declaration>array_header *ap_copy_array(pool *p, const array_header *src);</declaration>
  -   <description href="dict-ap_copy_array.html" />
  +   <description>
  +<para>
  +Makes a new copy of <i>arr</i> in the pool <i>p</i>.
  +</para>
  +<para>
  +Reutns a pointer to the new array.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4935,7 +5085,17 @@
     <name>ap_copy_array_hdr</name>
     <definition>
      <declaration>array_header *ap_copy_array_hdr(pool *p, const array_header *src);</declaration>
  -   <description href="dict-ap_copy_array_hdr.html" />
  +   <description>
  +<para>
  +Copies <i>arr</i> into the pool <i>p</i> without copying the array's
  +contents. If ap_push_array is used to extend
  +the new array, the original array is copied to it before the extend takes
  +place.
  +</para>
  +<para>
  +Returns a pointer to the new array.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -4948,7 +5108,11 @@
     <name>ap_copy_table</name>
     <definition>
      <declaration>table *ap_copy_table(pool *p, const table *t);</declaration>
  -   <description href="dict-ap_copy_table.html" />
  +   <description>
  +<para>
  +Returns a pointer to a copy of <i>t</i>.
  +</para>
  +   </description>
      <example>
       <text>rnew-&gt;subprocess_env = ap_copy_table(rnew-&gt;pool, r-&gt;subprocess_env);</text>
      </example>
  @@ -4973,7 +5137,11 @@
     <name>ap_count_dirs</name>
     <definition>
      <declaration>int ap_count_dirs(const char *path);</declaration>
  -   <description href="dict-ap_count_dirs.html" />
  +   <description>
  +<para>
  +Returns the number of slashes in <i>path</i>.
  +</para>
  +   </description>
      <example>
       <text>ap_no2slash(test_filename);
   num_dirs = ap_count_dirs(test_filename);</text>
  @@ -4984,7 +5152,16 @@
     <name>ap_cpystrn</name>
     <definition>
      <declaration>char *ap_cpystrn(char *buf, const char *str, size_t numbytes);</declaration>
  -   <description href="dict-ap_cpystrn.html" />
  +   <description>
  +  <para>
  +  Copies at most <literal>numbytes</literal> of <literal>str</literal> to <literal>buf</literal>.
  +  Differs from <literal>strncpy()</literal> in that <literal>buf</literal> is
  +  <i>always</i> null terminated, but is <i>not</i> null filled.
  +  Therefore, <literal>buf</literal> should always be at least
  +  <literal>numbytes + 1</literal> bytes long.
  +  Returns a pointer to the terminating <literal>'\0</literal>'.
  +  </para>
  +   </description>
      <example>
       <text>char *ap_coredump_dir;
   char *ap_server_root;
  @@ -5008,7 +5185,15 @@
     <name>ap_create_mutex</name>
     <definition>
      <declaration>mutex *ap_create_mutex(char *name);</declaration>
  -   <description href="dict-ap_create_mutex.html" />
  +   <description>
  +<para>
  +Creates a mutex. Only actually does anything on
  +multithreaded platforms.
  +</para>
  +<para>
  +Returns a mutex * in <i>name</i>.
  +</para>
  +   </description>
      <example>
       <text>static mutex *alloc_mutex = NULL; 
   alloc_mutex = ap_create_mutex(NULL);</text>
  @@ -5043,7 +5228,17 @@
     <name>ap_custom_response</name>
     <definition>
      <declaration>void ap_custom_response(request_rec *r, int status, char *string);</declaration>
  -   <description href="dict-ap_custom_response.html" />
  +   <description>
  +<para>
  +This routine permits modules to provide a custom response body for
  +error pages instead of the standard ones provided by the core
  +server.  This function has an effect quite similar to that of the
  +<literal>ErrorDocument</literal> directive, except that the API routine
  +only supplies a response body for the specified request rather than
  +a general one for all responses with the indicated status code, and the
  +body is a string, rather than a script or something to be invoked.
  +</para>
  +   </description>
      <example>
       <text>r-&gt;content_type = &quot;text/plain&quot;; 
   ap_custom_response(r, HTTP_FORBIDDEN, &quot;Access denied.
  @@ -5095,7 +5290,11 @@
     <name>ap_day_snames</name>
     <definition>
      <declaration>const char ap_day_snames[7][4];</declaration>
  -   <description href="dict-ap_day_snames.html" />
  +   <description>
  +<para>
  +An array of short names of the days, globally accessible.
  +</para>
  +   </description>
      <example>
       <text>if (strcmp(week, ap_day_snames[wk]) == 0)
   break; </text>
  @@ -5137,7 +5336,15 @@
     <name>ap_destroy_mutex</name>
     <definition>
      <declaration>void ap_destroy_mutex(mutex *mutex_id);</declaration>
  -   <description href="dict-ap_destroy_mutex.html" />
  +   <description>
  +<para>
  +Destroys a mutex. Only actually does anything on
  +multithreaded platforms.
  +</para>
  +<para>
  +Returns nothing.
  +</para>
  +   </description>
      <example>
       <text>static mutex *start_mutex = NULL; 
   ap_destroy_mutex(start_mutex);</text>
  @@ -5151,7 +5358,15 @@
     <name>ap_destroy_pool</name>
     <definition>
      <declaration>void ap_destroy_pool(pool *p);</declaration>
  -   <description href="dict-ap_destroy_pool.html" />
  +   <description>
  +<para>
  +This function will recursively destroy the specified
  +pool allocation area and any sub-pools of it,
  +making any memory allocated to them available for use elsewhere.
  +Cleanups for the contents of the destroyed pool are run, after the
  +subpools have been reclaimed.
  +</para>
  +   </description>
      <example>
       <text>ap_child_exit_modules(pconf, server_conf);
   ap_destroy_pool(pchild);</text>
  @@ -5165,7 +5380,14 @@
     <name>ap_destroy_sub_req</name>
     <definition>
      <declaration>void ap_destroy_sub_req(request_rec *r);</declaration>
  -   <description href="dict-ap_destroy_sub_req.html" />
  +   <description>
  +<para>
  +Destroys a subrequest generated by
  +ap_sub_req_lookup_file or
  +ap_sub_req_lookup_uri and releases all
  +memory allocated to it.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   ap_destroy_sub_req(r);</text>
  @@ -5205,7 +5427,13 @@
     <name>ap_document_root</name>
     <definition>
      <declaration>const char *ap_document_root(request_rec *r);</declaration>
  -   <description href="dict-ap_document_root.html" />
  +   <description>
  +<para>
  +This routine returns the filesystem path of the setting for the
  +<literal>DocumentRoot</literal> directive for the server or virtual
  +host to which the specified request was assigned.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   const char *docroot;
  @@ -5246,7 +5474,15 @@
     <name>ap_escape_html</name>
     <definition>
      <declaration>char *ap_escape_html(pool *p, const char *s);</declaration>
  -   <description href="dict-ap_escape_html.html" />
  +   <description>
  +<para>
  +Escapes HTML contained in <i>s</i> so that &lt;, &gt;, and &amp; are displayed
  +correctly.
  +</para>
  +<para>
  +Returns a pointer to the escaped string.
  +</para>
  +   </description>
      <example>
       <text>char *title_name;
   title_name = ap_escape_html(r-&gt;pool, r-&gt;uri);</text>
  @@ -5257,7 +5493,11 @@
     <name>ap_escape_path_segment</name>
     <definition>
      <declaration>char *ap_escape_path_segment(pool *p, const char *s);</declaration>
  -   <description href="dict-ap_escape_path_segment.html" />
  +   <description>
  +<para>
  +Returns an escaped version of <i>s</i>, per RFC 1808.
  +</para>
  +   </description>
      <example>
       <text>&lt;i&gt;No examples available; not used in Apache 1.3.&lt;/i&gt;</text>
      </example>
  @@ -5267,7 +5507,14 @@
     <name>ap_escape_quotes</name>
     <definition>
      <declaration>char *ap_escape_quotes(pool *p, const char *str);</declaration>
  -   <description href="dict-ap_escape_quotes.html" />
  +   <description>
  +<para>
  +Given a string, replace any bare " with \" .
  +</para>
  +<para>
  +Returns a pointer to the quote-escaped string.
  +</para>
  +   </description>
      <example>
       <text>cmd_parms *cmd;
   char *word1;
  @@ -5280,7 +5527,19 @@
     <name>ap_escape_shell_cmd</name>
     <definition>
      <declaration>char *ap_escape_shell_cmd(pool *p, const char *s);</declaration>
  -   <description href="dict-ap_escape_shell_cmd.html" />
  +   <description>
  +<para>
  +Prefixes dangerous (exploitable) characters in <i>s</i> with \. The current
  +set of such characters is:
  +</para>
  +<dl>
  +  <dd>&amp;;`'"|*?~&lt;&gt;^()[]{}$\ and \n</dd>
  +</dl>
  +<para>
  +Returns the escaped string. Note that '&amp;' is converted to ' ' on
  +both OS/2 and Win32 systems.
  +</para>
  +   </description>
      <example>
       <text>ap_unescape_url(arg_copy);
   ap_table_setn(r-&gt;subprocess_env, &quot;QUERY_STRING_UNESCAPED&quot;,
  @@ -5343,7 +5602,23 @@
     <name>ap_field_noparam</name>
     <definition>
      <declaration>char *ap_field_noparam(pool *p, const char *intype);</declaration>
  -   <description href="dict-ap_field_noparam.html" />
  +   <description>
  +<para>
  +The <literal>ap_field_noparam()</literal> treats the string it is given
  +as an HTTP field value.  It searches the string for the parameter
  +delimiter (";") and removes it, the trailing text, and any whitespace
  +tht preceeds it, copying the result into the supplied pool.  A
  +pointer to the edited copy of the string is the return value.
  +</para>
  +<para>
  +A major use of this routine is in content-type comparisons,
  +since the <literal>Content-type</literal> header field frequently
  +includes parameters such as "<literal>;charset=Big5</literal>".
  +The routine strips such additional information from the
  +string, permitting a straightforward comparison of Internet
  +media types.
  +</para>
  +   </description>
      <example>
       <text>content_type = ap_field_noparam(r-&gt;pool, r-&gt;content_type);</text>
      </example>
  @@ -5460,7 +5735,20 @@
     <name>ap_find_token</name>
     <definition>
      <declaration>int ap_find_token(pool *p, const char *line, const char *tok);</declaration>
  -   <description href="dict-ap_find_token.html" />
  +   <description>
  +<para>
  +Searches for <i>tok</i> in <i>line</i>. The token must be an exact match
  +and be delimited by control characters, tabs, spaces, or one of:
  +</para>
  +<dl>
  + <dd>()&lt;&gt;{}[]?=\/@,;
  + </dd>
  +</dl>
  +<para>
  +Returns nonzero if found, zero if not found or failure. The definition of
  +token is taken from RFC 2068.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5486,7 +5774,24 @@
     <name>ap_fnmatch</name>
     <definition>
      <declaration>int ap_fnmatch(const char *pattern, const char *string, int flags);</declaration>
  -   <description href="dict-ap_fnmatch.html" />
  +   <description>
  +<para>
  +This routine is used for wildcard comparisons using the simpler
  +(shell-style) syntax.  It doesn't handle regular expressions; the only
  +wildcard characters it understands are '*' and '?'.
  +</para>
  +<para>
  +<literal>ap_fnmatch()</literal> returns zero if the string pointed to by
  +<literal>string</literal> matches the pattern specified by <literal>pattern</literal>
  +under the conditions specified by the bits set in <literal>flags</literal>;
  +otherwise it returns <literal>FNM_NOMATCH</literal>.
  +</para>
  +<para>
  +The basic routine was obtained from the BSD source, and slightly
  +enhanced for Apache by adding the <literal>FNM_CASE_BLIND</literal>
  +flag.
  +</para>
  +   </description>
      <example>
       <text>#include &quot;fnmatch.h&quot;
       int fnflags = 0;
  @@ -5520,7 +5825,17 @@
     <name>ap_get_client_block</name>
     <definition>
      <declaration>long ap_get_client_block(request_rec *r, char *buffer, int bufsiz);</declaration>
  -   <description href="dict-ap_get_client_block.html" />
  +   <description>
  +<para>
  +Reads up to <i>bufsize</i> characters into <i>buffer</i> from the client.
  +ap_setup_client_block and
  +ap_should_client_block should be
  +called before using this.
  +</para>
  +<para>
  +Returns the number of bytes read, or 0 if no more data or an error.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-readbody</ref>
      </seealso>
  @@ -5530,7 +5845,14 @@
     <name>ap_get_gmtoff</name>
     <definition>
      <declaration>struct tm *ap_get_gmtoff(int *tz);</declaration>
  -   <description href="dict-ap_get_gmtoff.html" />
  +   <description>
  +<para>
  +Fills in <i>tz</i> with the offset of local time from GMT in seconds.
  +</para>
  +<para>
  +Returns the local time.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5551,7 +5873,14 @@
     <name>ap_get_local_host</name>
     <definition>
      <declaration>char *ap_get_local_host(pool *);</declaration>
  -   <description href="dict-ap_get_local_host.html" />
  +   <description>
  +<para>
  +Returns a pointer to the fully qualified domain name of the local host.
  +</para>
  +<para>
  +On failure, logs an error and exit()s.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5579,7 +5908,12 @@
     <name>ap_get_server_built</name>
     <definition>
      <declaration>char *ap_get_server_built(void);</declaration>
  -   <description href="dict-ap_get_server_built.html" />
  +   <description>
  +<para>
  +Returns the date and time the server was built, or the string "unknown" if
  +this data is indeterminate.
  +</para>
  +   </description>
      <example>
       <text>char *string;
   string = ap_get_server_built();</text>
  @@ -5593,7 +5927,16 @@
     <name>ap_get_server_name</name>
     <definition>
      <declaration>char *ap_get_server_name(const request_rec *r);</declaration>
  -   <description href="dict-ap_get_server_name.html" />
  +   <description>
  +<para>
  +Returns the hostname of the server running Apache.
  +</para>
  +<para>
  +There are two options regarding what the "name" of a server is.  The
  +"canonical" name as defined by ServerName and Port, or the "client's
  +name" as supplied by a possible Host: header or full URI.
  +</para>
  +   </description>
      <example>
       <text>char *string;
   string = ap_get_server_name();</text>
  @@ -5607,7 +5950,15 @@
     <name>ap_get_server_port</name>
     <definition>
      <declaration>unsigned ap_get_server_port(const request_rec *r);</declaration>
  -   <description href="dict-ap_get_server_port.html" />
  +   <description>
  +<para>
  +Returns the TCP port number where the server running Apache is listening.
  +</para>
  +<para>
  +The port passed in the client's headers is not trusted; the port of the
  +actual socket is used.
  +</para>
  +   </description>
      <example>
       <text>const request_rec *r;
   int port;
  @@ -5619,7 +5970,11 @@
     <name>ap_get_server_version</name>
     <definition>
      <declaration>char *ap_get_server_version(void);</declaration>
  -   <description href="dict-ap_get_server_version.html" />
  +   <description>
  +<para>
  +Returns the server version string.
  +</para>
  +   </description>
      <example>
       <text>char *string;
   string = ap_get_server_version();</text>
  @@ -5633,21 +5988,50 @@
     <name>ap_get_time</name>
     <definition>
      <declaration>char *ap_get_time(void);</declaration>
  -   <description href="dict-ap_get_time.html" />
  -  </definition>
  - </item>
  - <item type="Routine">
  -  <name>ap_get_token</name>
  +   <description>
  +<para>
  +Uses ctime() to get current time, remoning the newline.
  +</para>
  +<para>
  +Returns pointer to a string containing the time.
  +</para>
  +   </description>
  +  </definition>
  + </item>
  + <item type="Routine">
  +  <name>ap_get_token</name>
     <definition>
      <declaration>char *ap_get_token(pool *p, char **accept_line, int accept_white);</declaration>
  -   <description href="dict-ap_get_token.html" />
  +   <description>
  +<para>
  +Extracts a token from <i>accept_line</i>, skipping leading whitespace.
  +The token is comma or semicolon delimited. Whitespace may also be
  +processed as a delimiter if <i>accept_white</i> is nonzero. The token
  +itself may conatin delimiters if it is enclosed in double quotes, which are
  +stripped in the result.
  +</para>
  +<para>
  +Returns a pointer to the token, allocated from <i>p</i>.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_get_virthost_addr</name>
     <definition>
      <declaration>unsigned long ap_get_virthost_addr(const char *w, unsigned short *ports);</declaration>
  -   <description href="dict-ap_get_virthost_addr.html" />
  +   <description>
  +<para>
  +Converts a server hostname (&lt;name&gt;[:&lt;port&gt;]) to an IP address
  +in network order.
  +It writes <i>ports</i> with the port number.
  +</para>
  +<para>
  +Returns the IP address on success. Returns INADDR_ANY if <i>w</i> is
  +malformed,
  +and logs an error and exit()s if the host has nultiple IP addresses.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5661,7 +6045,17 @@
     <name>ap_getparents</name>
     <definition>
      <declaration>void ap_getparents(char *name);</declaration>
  -   <description href="dict-ap_getparents.html" />
  +   <description>
  +<para>
  +Strips '.' and '..' from a path, according to RFC 1808 (<i>Relative Uniform
  +Resource Locators</i>).
  +</para>
  +<para>
  +Returns the processed string.
  +In addition to being useful for correct URL matching, this function also
  +has important security implications.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5675,70 +6069,175 @@
     <name>ap_getword</name>
     <definition>
      <declaration>char *ap_getword(pool *p, const char **line, char stop);</declaration>
  -   <description href="dict-ap_getword.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_conf</name>
     <definition>
      <declaration>char *ap_getword_conf(pool *p, const char **line);</declaration>
  -   <description href="dict-ap_getword_conf.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present. Words can
  +be separated by whitespace, and quote- and backslash-escaped characters
  +are handled correctly.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied. Quotes and backslashes are stripped.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_conf_nc</name>
     <definition>
      <declaration>char *ap_getword_conf_nc(pool *p, char **line);</declaration>
  -   <description href="dict-ap_getword_conf_nc.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present. Words can
  +be separated by whitespace, and quote- and backslash-escaped characters
  +are handled correctly. Allows non-const <i>line</i>.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied. Quotes and backslashes are stripped.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_nc</name>
     <definition>
      <declaration>char *ap_getword_nc(pool *p, char **line, char stop);</declaration>
  -   <description href="dict-ap_getword_nc.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present. Allows
  +non-const <i>line</i>.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_nulls</name>
     <definition>
      <declaration>char *ap_getword_nulls(pool *p, const char **line, char stop);</declaration>
  -   <description href="dict-ap_getword_nulls.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are not skipped if present, so that
  +null characters are correctly processed.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_nulls_nc</name>
     <definition>
      <declaration>char *ap_getword_nulls_nc(pool *p, char **line, char stop);</declaration>
  -   <description href="dict-ap_getword_nulls_nc.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are not skipped if present, so that
  +null characters are correctly processed. Allows non-const <i>line</i>.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_white</name>
     <definition>
      <declaration>char *ap_getword_white(pool *p, const char **line);</declaration>
  -   <description href="dict-ap_getword_white.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present. Words are
  +separated by whitespace.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_getword_white_nc</name>
     <definition>
      <declaration>char *ap_getword_white_nc(pool *p, char **line);</declaration>
  -   <description href="dict-ap_getword_white_nc.html" />
  +   <description>
  +<para>
  +Copies everything from <i>line</i> up to <i>stop</i> to a new string.
  +<i>line</i> is updated to point to the first character after <i>stop</i>.
  +Multiple occurrences of <i>stop</i> are skipped if present. Words are
  +separated by whitespace. Allows non-const <i>line</i>.
  +</para>
  +<para>
  +Returns a pointer to the new string. If <i>line</i> contains no <i>stop</i>,
  +the entire string is copied.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_gm_timestr_822</name>
     <definition>
      <declaration>char *ap_gm_timestr_822(pool *p, time_t t);</declaration>
  -   <description href="dict-ap_gm_timestr_822.html" />
  +   <description>
  +<para>
  +Formats time as specified by RFC822 (<i>Standard for the Format of ARPA
  +Internet Text Messages</i>). The format is always GMT.
  +</para>
  +<para>
  +Returns a pointer to a string containing the time.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_gname2id</name>
     <definition>
      <declaration>gid_t ap_gname2id(const char *name);</declaration>
  -   <description href="dict-ap_gname2id.html" />
  +   <description>
  +<para>
  +Returns the GID corresponding to <i>name</i>.
  +</para>
  +<para>
  +If <i>name</i>'s first character is #, returns the number following as GID;
  +otherwise, uses getgrnam() to look up the GID.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Global Data Cell">
  @@ -5759,7 +6258,16 @@
     <name>ap_hard_timeout</name>
     <definition>
      <declaration>void ap_hard_timeout(char *reason, request_rec *r);</declaration>
  -   <description href="dict-ap_hard_timeout.html" />
  +   <description>
  +<para>
  +Sets an alarm to expire when the server's configured timeout expires.
  +When the alarm expires, the current request is aborted by longjmp() back
  +to the top level and destroying all pools for the current request.
  +</para>
  +<para>
  +<i>reason</i> is logged to the error log.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5778,7 +6286,15 @@
     <name>ap_ht_time</name>
     <definition>
      <declaration>char *ap_ht_time(pool *p, time_t t, const char *fmt, int gmt);</declaration>
  -   <description href="dict-ap_ht_time.html" />
  +   <description>
  +<para>
  +Formats time using strftime(). If <i>gmt</i> is nonzero, time is formatted
  +as GMT. Otherwise, it is formatted as local time.
  +</para>
  +<para>
  +Returns a pointer to a string containing the time.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5827,14 +6343,24 @@
     <name>ap_internal_redirect</name>
     <definition>
      <declaration>void ap_internal_redirect(const char *new_uri, request_rec *r);</declaration>
  -   <description href="dict-ap_internal_redirect.html" />
  +   <description>
  +<para>
  +Internally redirects a request to <i>uri</i>. The redirect is processed
  +immediately.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_internal_redirect_handler</name>
     <definition>
      <declaration>void ap_internal_redirect_handler(const char *new_uri, request_rec *r);</declaration>
  -   <description href="dict-ap_internal_redirect_handler.html" />
  +   <description>
  +<para>
  +Internally redirects a request to <i>uri</i>. The redirect is processed
  +immediately using the handler specified by <i>r</i>.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5853,7 +6379,12 @@
     <name>ap_is_HTTP_CLIENT_ERROR</name>
     <definition>
      <declaration>#define ap_is_HTTP_CLIENT_ERROR(x) (((x) &gt;= 400) &amp;&amp; ((x) &lt; 500))</declaration>
  -   <description href="dict-ap_is_HTTP_CLIENT_ERROR.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes a client error.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_CLIENT_ERROR(r-&gt;status)) { 
  @@ -5869,7 +6400,12 @@
     <name>ap_is_HTTP_ERROR</name>
     <definition>
      <declaration>#define ap_is_HTTP_ERROR(x) (((x) &gt;= 400) &amp;&amp; ((x) &lt; 600))</declaration>
  -   <description href="dict-ap_is_HTTP_ERROR.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes a client or server error.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_ERROR(r-&gt;status)) { 
  @@ -5885,7 +6421,12 @@
     <name>ap_is_HTTP_INFO</name>
     <definition>
      <declaration>#define ap_is_HTTP_INFO(x) (((x) &gt;= 100) &amp;&amp; ((x) &lt; 200))</declaration>
  -   <description href="dict-ap_is_HTTP_INFO.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes an information message.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_INFO(r-&gt;status)) { 
  @@ -5901,7 +6442,12 @@
     <name>ap_is_HTTP_REDIRECT</name>
     <definition>
      <declaration>#define ap_is_HTTP_REDIRECT(x) (((x) &gt;= 300) &amp;&amp; ((x) &lt; 400))</declaration>
  -   <description href="dict-ap_is_HTTP_REDIRECT.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes a redirect.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_REDIRECT(r-&gt;status)) { 
  @@ -5917,7 +6463,12 @@
     <name>ap_is_HTTP_SERVER_ERROR</name>
     <definition>
      <declaration>#define ap_is_HTTP_SERVER_ERROR(x) (((x) &gt;= 500) &amp;&amp; ((x) &lt; 600))</declaration>
  -   <description href="dict-ap_is_HTTP_SERVER_ERROR.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes a server error.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_SERVER_ERROR(r-&gt;status)) { 
  @@ -5933,7 +6484,12 @@
     <name>ap_is_HTTP_SUCCESS</name>
     <definition>
      <declaration>#define ap_is_HTTP_SUCCESS(x) (((x) &gt;= 200) &amp;&amp; ((x) &lt; 300))</declaration>
  -   <description href="dict-ap_is_HTTP_SUCCESS.html" />
  +   <description>
  +<para>
  +Macro which returns boolean true if the HTTP status code passed to it
  +denotes a successful result.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   if (!ap_is_HTTP_SUCCESS(r-&gt;status)) { 
  @@ -5956,7 +6512,11 @@
     <name>ap_is_directory</name>
     <definition>
      <declaration>int ap_is_directory(const char *name);</declaration>
  -   <description href="dict-ap_is_directory.html" />
  +   <description>
  +<para>
  +Returns nonzero if <i>path</i> is a directory, 0 if it isn't.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -5982,49 +6542,100 @@
     <name>ap_is_matchexp</name>
     <definition>
      <declaration>int ap_is_matchexp(const char *str);</declaration>
  -   <description href="dict-ap_is_matchexp.html" />
  +   <description>
  +<para>
  +Tests whether <i>exp</i> contains '*' or '?'.
  +</para>
  +<para>
  +Returns 1 on match, 0 otherwise.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_is_url</name>
     <definition>
      <declaration>int ap_is_url(const char *u);</declaration>
  -   <description href="dict-ap_is_url.html" />
  +   <description>
  +<para>
  +Returns nonzero if <i>u</i> is a URL, 0 if it isn't.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_keepalive_timeout</name>
     <definition>
      <declaration>void ap_keepalive_timeout(char *reason, request_rec *r);</declaration>
  -   <description href="dict-ap_keepalive_timeout.html" />
  +   <description>
  +<para>
  +Sets an alarm to expire when the server's configured keepalive timeout expires.
  +When the alarm expires, the current request is aborted by longjmp() back
  +to the top level and destroying all pools for the current request.
  +</para>
  +<para>
  +<i>reason</i> is logged to the error log. This function should only be used
  +when waiting for a client request.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_kill_cleanup</name>
     <definition>
      <declaration>void ap_kill_cleanup(pool *p, void *data, void (*plain_cleanup) (void *));</declaration>
  -   <description href="dict-ap_kill_cleanup.html" />
  +   <description>
  +<para>
  +Removes a previously registered cleanup function from <i>p</i>. The cleanup
  +function is identified by <i>plain_cleanup</i> and <i>data</i>.
  +</para>
  +<para>
  +Note: <i>data</i> must point to the same memory that was used for the
  +ap_register_cleanup call.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_kill_cleanups_for_fd</name>
     <definition>
      <declaration>void ap_kill_cleanups_for_fd(pool *p, int fd);</declaration>
  -   <description href="dict-ap_kill_cleanups_for_fd.html" />
  +   <description>
  +<para>
  +Kill cleanups for <i>fd</i> registered previously; <i>i.e.</i>, with
  +ap_note_cleanups_for_fd.
  +</para>
  +<para>
  +Normally done automatically when <i>fd</i> is closed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_kill_cleanups_for_socket</name>
     <definition>
      <declaration>void ap_kill_cleanups_for_socket(pool *p, int sock);</declaration>
  -   <description href="dict-ap_kill_cleanups_for_socket.html" />
  +   <description>
  +<para>
  +Kill cleanups for <i>sock</i> registered previously; <i>i.e.</i>, with
  +ap_note_cleanups_for_socket.
  +</para>
  +<para>
  +Normally done automatically when <i>sock</i> is closed.
  +</para>
  +
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_kill_timeout</name>
     <definition>
      <declaration>void ap_kill_timeout(request_rec *r);</declaration>
  -   <description href="dict-ap_kill_timeout.html" />
  +   <description>
  +<para>
  +Clears the current timeout on the request_rec <i>r</i>.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   ap_kill_timeout(r);</text>
  @@ -6068,7 +6679,14 @@
     <name>ap_log_error_old</name>
     <definition>
      <declaration>void ap_log_error_old(const char *err, server_rec *s);</declaration>
  -   <description href="dict-ap_log_error_old.html" />
  +   <description>
  +<para>
  +Logs the message string in <i>err</i> to <i>s-&gt;error_log</i>.
  +</para>
  +<para>
  +Implemented in terms of ap_log_error.
  +</para>
  +   </description>
      <example>
       <text>server_rec *s;
   ap_log_error_old(&quot;Yow!&quot;, s);</text>
  @@ -6131,7 +6749,16 @@
     <name>ap_make_array</name>
     <definition>
      <declaration>array_header *ap_make_array(pool *p, int nelts, int elt_size);</declaration>
  -   <description href="dict-ap_make_array.html" />
  +   <description>
  +<para>
  +Allocates enough memory to contain <i>nelts</i> elements of size
  +<i>elt_size</i>. The array grows to contain the number of elements
  +requested.
  +</para>
  +<para>
  +Returns a pointer to the new array.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-array</ref>
      </seealso>
  @@ -6141,7 +6768,15 @@
     <name>ap_make_dirstr</name>
     <definition>
      <declaration>char *ap_make_dirstr(pool *a, const char *s, int n);</declaration>
  -   <description href="dict-ap_make_dirstr.html" />
  +   <description>
  +<para>
  +Copies <i>s</i>, a path, guaranteed to end at a slash, and truncates the
  +path at the <i>n</i>th slash.
  +</para>
  +<para>
  +Returns a pointer to the copied string, allocated in <i>p</i>.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6169,14 +6804,53 @@
     <name>ap_make_full_path</name>
     <definition>
      <declaration>char *ap_make_full_path(pool *a, const char *dir, const char *f);</declaration>
  -   <description href="dict-ap_make_full_path.html" />
  +   <description>
  +<para>
  +Appends <i>f</i> to <i>dir</i>, allowing one slash only between them.
  +</para>
  +<para>
  +Returns a pointer to the joined path.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_make_sub_pool</name>
     <definition>
      <declaration>pool *ap_make_sub_pool(pool *p);</declaration>
  -   <description href="dict-ap_make_sub_pool.html" />
  +   <description>
  +  <para>
  +  This function creates a new pool area
  +  for memory allocation.  The
  +  new area is considered to be a &quot;child&quot; of the pool
  +  passed to the routine; this permits a hierarchy of related storage
  +  areas.  When a pool is destroyed (see
  +  ap_destroy_pool),
  +  any sub-pools it may have are also destroyed recursively.
  +  </para>
  +  <para>
  +  An example of when this hierarchy concept is useful can be found in the
  +  <ref href="http://www.apache.org/docs/mod/mod_autoindex.html"
  +  >mod_autoindex</ref>, which is used to generate automatic directory listings.
  +  Since mod_autoindex can't
  +  tell in advance how many files it will have to list, nor how long the
  +  names will be, nor what other functions might need to allocate memory
  +  to process the request, it creates a sub-pool of the one associated
  +  with the request, does the <i>per</i>-filename processing in
  +  it, and clears it for each new file.
  +  </para>
  +  <para>
  +  If the pointer passed to ap_make_sub_pool is <literal>NULL</literal>,
  +  a new top-level (<i>i.e.</i>, parentless) pool is created.  This
  +  is generally not recommended, however, since the only record of a
  +  pool's existence is the pointer returned - a simple logic error can
  +  result in pools being created and lost, along with any allocations
  +  made in them.  Most pools are created to deal with <i>per</i>-request
  +  processing, and hence should be sub-pools of the request's pool
  +  (<literal>r-&gt;pool</literal>) to ensure that
  +  they are properly cleaned up on request completion.
  +  </para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6186,7 +6860,15 @@
     <name>ap_make_table</name>
     <definition>
      <declaration>table *ap_make_table(pool *p, int nelts);</declaration>
  -   <description href="dict-ap_make_table.html" />
  +   <description>
  +<para>
  +Makes a new table with enough memory for <i>nelts</i>
  +elements.
  +</para>
  +<para>
  +Returns a pointer to the new table.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -6280,7 +6962,11 @@
     <name>ap_month_snames</name>
     <definition>
      <declaration>const char ap_month_snames[12][4];</declaration>
  -   <description href="dict-ap_month_snames.html" />
  +   <description>
  +<para>
  +An array of short names of the months, globally accessible.
  +</para>
  +   </description>
      <example>
       <text>if (strcmp(month, ap_month_snames[mon]) == 0)
   break;</text>
  @@ -6298,7 +6984,14 @@
     <name>ap_no2slash</name>
     <definition>
      <declaration>void ap_no2slash(char *name);</declaration>
  -   <description href="dict-ap_no2slash.html" />
  +   <description>
  +<para>
  +Removes double slashes from a path.
  +</para>
  +<para>
  +This is important for correct interpretation of URLs.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6327,14 +7020,28 @@
     <name>ap_note_cleanups_for_fd</name>
     <definition>
      <declaration>void ap_note_cleanups_for_fd(pool *p, int fd);</declaration>
  -   <description href="dict-ap_note_cleanups_for_fd.html" />
  +   <description>
  +<para>
  +Register a cleanup to close <i>fd</i> then <i>p</i> is destroyed.
  +</para>
  +<para>
  +Normally, this is done automatically when the file is closed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_note_cleanups_for_file</name>
     <definition>
      <declaration>void ap_note_cleanups_for_file(pool *p, file *f);</declaration>
  -   <description href="dict-ap_note_cleanups_for_file.html" />
  +   <description>
  +<para>
  +Register a cleanup to close <i>f</i> then <i>p</i> is destroyed.
  +</para>
  +<para>
  +Normally, this is done automatically when the stream is closed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6348,7 +7055,15 @@
     <name>ap_note_cleanups_for_socket</name>
     <definition>
      <declaration>void ap_note_cleanups_for_socket(pool *p, int sock);</declaration>
  -   <description href="dict-ap_note_cleanups_for_socket.html" />
  +   <description>
  +<para>
  +Register a cleanup function <i>socket_cleanup</i> to close <i>sock</i> when
  +<i>p</i> is destroyed.
  +</para>
  +<para>
  +Normally, this is done automatically when the socket is closed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6366,7 +7081,15 @@
     <name>ap_note_subprocess</name>
     <definition>
      <declaration>void ap_note_subprocess(pool *p, int pid, enum kill_conditions how);</declaration>
  -   <description href="dict-ap_note_subprocess.html" />
  +   <description>
  +<para>
  +Registers a subprocess which will be killed on pool destruction.
  +</para>
  +<para>
  +See kill_conditions for the various ways
  +the child process can be killed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6387,7 +7110,15 @@
     <name>ap_open_mutex</name>
     <definition>
      <declaration>mutex *ap_open_mutex(char *name);</declaration>
  -   <description href="dict-ap_open_mutex.html" />
  +   <description>
  +<para>
  +Opens a mutex. Only actually does anything on
  +multithreaded platforms.
  +</para>
  +<para>
  +Returns a mutex * in <i>name</i>.
  +</para>
  +   </description>
      <example>
       <text>static mutex *start_mutex = NULL; 
   start_mutex = ap_open_mutex(NULL);</text>
  @@ -6411,7 +7142,11 @@
     <name>ap_os_canonical_filename</name>
     <definition>
      <declaration>char *ap_os_canonical_filename(pool *p, const char *file);</declaration>
  -   <description href="dict-ap_os_canonical_filename.html" />
  +   <description>
  +<para>
  +Returns a canonical filename. Processing (if any) is OS-dependent.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   r-&gt;filename = ap_os_canonical_filename(r-&gt;pool, r-&gt;filename);</text>
  @@ -6464,7 +7199,15 @@
     <name>ap_overlay_tables</name>
     <definition>
      <declaration>table *ap_overlay_tables(pool *p, const table *overlay, const table *base);</declaration>
  -   <description href="dict-ap_overlay_tables.html" />
  +   <description>
  +<para>
  +Concatenates <i>overlay</i> then <i>base</i> into a new table. No merging
  +of key/value pairs is done.
  +</para>
  +<para>
  +Returns a pointer to the new table.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -6474,7 +7217,14 @@
     <name>ap_palloc</name>
     <definition>
      <declaration>void *ap_palloc(struct pool *p, int nbytes);</declaration>
  -   <description href="dict-ap_palloc.html" />
  +   <description>
  +<para>
  +Allocates memory in a pool of at least <i>size</i> bytes.
  +</para>
  +<para>
  +Returns a pointer to the new block of memory.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6484,14 +7234,33 @@
     <name>ap_parseHTTPdate</name>
     <definition>
      <declaration>time_t ap_parseHTTPdate(const char *date);</declaration>
  -   <description href="dict-ap_parseHTTPdate.html" />
  +   <description>
  +<para>
  +Parses a date in one of three formats - RFC1123, RFC1036, or ANSI C asctime()
  +format.
  +</para>
  +<para>
  +Returns the time in seconds since 1 Jan 1970 00:00 GMT. The timezone field
  +is ignored, since HTTP time is always GMT.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_parse_hostinfo_components</name>
     <definition>
      <declaration>int ap_parse_hostinfo_components(pool *p, const char *hostinfo, uri_components *uptr);</declaration>
  -   <description href="dict-ap_parse_hostinfo_components.html" />
  +   <description>
  +<para>
  +Special case for CONNECT parsing: it comes with the hostinfo part only */
  +See the INTERNET-DRAFT document "Tunneling SSL Through a WWW Proxy"
  +currently at http://www.mcom.com/newsref/std/tunneling_ssl.html
  +for the format of the "CONNECT host:port HTTP/1.0" request
  +</para>
  +<para>
  +Returns HTTP_OK on success, HTTP_BAD_REQUEST on failure.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   const char *uri;
  @@ -6547,7 +7316,15 @@
     <name>ap_pcalloc</name>
     <definition>
      <declaration>void *ap_pcalloc(struct pool *p, int nbytes);</declaration>
  -   <description href="dict-ap_pcalloc.html" />
  +   <description>
  +<para>
  +Allocates memory in a pool of at least <i>size</i> bytes, and initializes
  +the memory to zero.
  +</para>
  +<para>
  +Returns a rointer to the newly allocated block of memory.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6582,7 +7359,14 @@
     <name>ap_pclosef</name>
     <definition>
      <declaration>int ap_pclosef(struct pool *p, int fd);</declaration>
  -   <description href="dict-ap_pclosef.html" />
  +   <description>
  +<para>
  +Closes a file previously opened with popenf. The file's
  +cleanup function is destroyed.</para>
  +<para>
  +Returns a normal <i>close</i> return value.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6619,7 +7403,11 @@
     <name>ap_pfclose</name>
     <definition>
      <declaration>int ap_pfclose(struct pool *p, file *f);</declaration>
  -   <description href="dict-ap_pfclose.html" />
  +   <description>
  +<para>
  +Closes a stream, and removes any cleanup function from the <i>p</i>.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6629,7 +7417,15 @@
     <name>ap_pfdopen</name>
     <definition>
      <declaration>file *ap_pfdopen(struct pool *p, int fd, const char *fmode);</declaration>
  -   <description href="dict-ap_pfdopen.html" />
  +   <description>
  +<para>
  +Opens a stream (similar to <i>fdopen</i>), but ensures the stream is closed
  +when <i>p</i> is destroyed.</para>
  +<para>
  +Returns a new stream pointer, or NULL on error.
  +</para>
  +
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6639,7 +7435,14 @@
     <name>ap_pfopen</name>
     <definition>
      <declaration>file *ap_pfopen(struct pool *p, const char *name, const char *fmode);</declaration>
  -   <description href="dict-ap_pfopen.html" />
  +   <description>
  +<para>
  +Opens a stream (similar to <i>fopen</i>), but ensures the stream is closed
  +when <i>p</i> is destroyed.</para>
  +<para>
  +Returns a new stream pointer, or NULL on error.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6668,7 +7471,31 @@
      <declaration>typedef struct pool pool;
   typedef struct pool ap_pool;
   struct pool &lt;var&gt;opaque-structure&lt;/var&gt;</declaration>
  -   <description href="dict-ap_pool.html" />
  +   <description>
  +<para>
  +Memory pool allocation routines in Apache are designed so that
  +developers don't have to keep track of <i>every</i> allocation
  +so that it can be explicitly freed later.
  +</para>
  +<para>
  +Instead, Apache uses memory <i>pools</i>, and items
  +(both memory and I/O handlers) are allocated from them.
  +Currently there are two long-term pools; one for <i>per</i>-transaction
  +info (request_rec and conn_rec structures and such), and one for config
  +info (server_rec structures, <i>et alia</i>).
  +When a transaction is over, Apache can delete everything in the
  +<i>per</i>-transaction pool without fear, and without thinking too
  +hard about it either.
  +</para>
  +<para>
  +There are two reasons a pool can be destroyed:
  +</para>
  +<ol>
  + <li>The server has finished with that pool, or</li>
  + <li>The server has forked and is preparing to <literal>exec</literal> another
  +  program.</li>
  +</ol>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6708,7 +7535,15 @@
     <name>ap_popenf</name>
     <definition>
      <declaration>int ap_popenf(struct pool *p, const char *name, int flg, int mode);</declaration>
  -   <description href="dict-ap_popenf.html" />
  +   <description>
  +<para>
  +This function opens a file, with automatic cleanup when <i>p</i> is
  +destroyed.
  +</para>
  +<para>
  +Returns <i>fd</i>, or -1 on error.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6718,7 +7553,12 @@
     <name>ap_pregcomp</name>
     <definition>
      <declaration>regex_t *ap_pregcomp(pool *p, const char *pattern, int cflags);</declaration>
  -   <description href="dict-ap_pregcomp.html" />
  +   <description>
  +<para>
  +Equivalent to <i>regcomp</i>, but any memory used is freed when <i>p</i> is
  +destroyed.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6738,7 +7578,11 @@
     <name>ap_pregsub</name>
     <definition>
      <declaration>char *ap_pregsub(pool *p, const char *input, const char *source, size_t nmatch, regmatch_t pmatch[]);</declaration>
  -   <description href="dict-ap_pregsub.html" />
  +   <description>
  +<para>
  +Equivalent to regsub(), but uses <i>p</i> for memory allocation.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6787,7 +7631,32 @@
     <name>ap_psprintf</name>
     <definition>
      <declaration>char *ap_psprintf(struct pool *p, const char *fmt, ...);</declaration>
  -   <description href="dict-ap_psprintf.html" />
  +   <description>
  +<para>
  +Formats data <i> la</i> <literal>sprintf</literal>, allocating
  +the necessary storage from the supplied pool.
  +Returns a pointer to the formatted string on success, returns NULL
  +if an error (such as out-of-memory) is encountered.  More information
  +<i>may</i> be available in <literal>errno</literal>.
  +</para>
  +<para>
  +ap_psprintf is implemented by writing directly into the current
  +block of the pool, starting right at first_avail.  If there's
  +insufficient room, then a new block is allocated and the earlier
  +output is copied over.  The new block isn't linked into the pool
  +until all the output is done.
  +</para>
  +<para>
  +Note that this is completely safe because nothing else can
  +allocate in this pool while ap_psprintf is running.  Alarms are
  +blocked, and the only thing outside of alloc.c that's invoked
  +is ap_vformatter -- which was purposefully written to be
  +self-contained with no callouts.
  +</para>
  +<para>
  +ap_psprintf is implemented using ap_pvsprintf.
  +</para>
  +   </description>
      <example>
       <text>pool *p;
   char *real_code;
  @@ -6801,7 +7670,14 @@
     <name>ap_pstrcat</name>
     <definition>
      <declaration>char *ap_pstrcat(struct pool *p, ...);</declaration>
  -   <description href="dict-ap_pstrcat.html" />
  +   <description>
  +<para>
  +Concatenates the NULL-terminated string list into a new block of memory.
  +</para>
  +<para>
  +Returns a pointer to the new block of memory.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6811,7 +7687,15 @@
     <name>ap_pstrdup</name>
     <definition>
      <declaration>char *ap_pstrdup(struct pool *p, const char *s);</declaration>
  -   <description href="dict-ap_pstrdup.html" />
  +   <description>
  +<para>
  +Duplicates a string within a pool.
  +</para>
  +<para>
  +If <i>s</i> is NULL, the function returns NULL. Otherwise, returns a
  +pointer to the new copy of the string <i>s</i>.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6821,7 +7705,16 @@
     <name>ap_pstrndup</name>
     <definition>
      <declaration>char *ap_pstrndup(struct pool *p, const char *s, int n);</declaration>
  -   <description href="dict-ap_pstrndup.html" />
  +   <description>
  +<para>
  +Allocates <i>n</i> + 1 bytes of memory and copies up to <i>n</i>
  +characters from <i>s</i>. The result is NUL-terminated.
  +</para>
  +<para>
  +Returns NULL if <i>s</i> is NULL, otherwise returns a pointer to the
  +(possibly partly) copied memory.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-pool</ref>
      </seealso>
  @@ -6831,7 +7724,15 @@
     <name>ap_push_array</name>
     <definition>
      <declaration>void *ap_push_array(array_header *arr);</declaration>
  -   <description href="dict-ap_push_array.html" />
  +   <description>
  +<para>
  +Allocates more memory for the additional array element and adds
  +it to the end of the array.
  +</para>
  +<para>
  +Returns a pointer to the newly-created element of <i>arr</i>.
  +</para>
  +   </description>
      <example>
       <text>struct ae_t { 
       server_rec *s; 
  @@ -6852,7 +7753,15 @@
     <name>ap_pvsprintf</name>
     <definition>
      <declaration>char *ap_pvsprintf(struct pool *p, const char *fmt, va_list);</declaration>
  -   <description href="dict-ap_pvsprintf.html" />
  +   <description>
  +<para>
  +Writes a varargs list to a pool.
  +Returns 0 on success, exits with return code 1 if out of memory.
  +</para>
  +<para>
  +ap_psprintf is implemented using ap_pvsprintf.
  +</para>
  +   </description>
      <example>
       <text>pool *p;
   const char *fmt;
  @@ -6866,7 +7775,18 @@
     <name>ap_rationalize_mtime</name>
     <definition>
      <declaration>time_t ap_rationalize_mtime(request_rec *r, time_t mtime);</declaration>
  -   <description href="dict-ap_rationalize_mtime.html" />
  +   <description>
  +<para>
  +This routine is used to ensure compliance with the HTTP RFCs,
  +which forbid a value for the <literal>Last-modified</literal> response
  +header field that is in the future.  This response header field is
  +set from the value in the <literal>r-&gt;mtime</literal> field.
  +<literal>ap_rationalize_mtime()</literal>
  +compares the specified time value against the current
  +clock, and sets the <literal>r-&gt;mtime</literal> field to
  +whichever is earlier.
  +</para>
  +   </description>
      <example>
       <text>time_t mtime_to_use; 
    
  @@ -6906,7 +7826,23 @@
     <name>ap_register_cleanup</name>
     <definition>
      <declaration>void ap_register_cleanup(pool *p, void *data, void (*plain_cleanup) (void *), void (*child_cleanup) (void *));</declaration>
  -   <description href="dict-ap_register_cleanup.html" />
  +   <description>
  +<para>
  +Registers two functions to be called when <i>p</i> is destroyed.
  +There are two reasons a pool can be destroyed:
  +</para>
  +<ol>
  + <li>The server has finished with that pool, or</li>
  + <li>The server has forked and is preparing to <i>exec</i> another program.</li>
  +</ol>
  +<para>
  +In the first case, the <i>plain_cleanup</i> function is called; in the
  +second, the <i>child_cleanup</i> function is called.
  +</para>
  +<para>
  +<i>data</i> is passed as the only argument to the cleanup function.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -6986,7 +7922,11 @@
     <name>ap_reset_timeout</name>
     <definition>
      <declaration>void ap_reset_timeout(request_rec *r);</declaration>
  -   <description href="dict-ap_reset_timeout.html" />
  +   <description>
  +<para>
  +Resets the hard or soft timeout to its original value.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   ap_reset_timeout(r);</text>
  @@ -7004,7 +7944,11 @@
     <name>ap_restart_time</name>
     <definition>
      <declaration>time_t ap_restart_time;</declaration>
  -   <description href="dict-ap_restart_time.html" />
  +   <description>
  +<para>
  +The time, represented as a time_t, when the server was started.
  +</para>
  +   </description>
      <example>
       <text>    time_t nowtime = time(NULL); 
       time_t up_time; 
  @@ -7042,28 +7986,56 @@
     <name>ap_rprintf</name>
     <definition>
      <declaration>int ap_rprintf(request_rec *r, const char *fmt, ...);</declaration>
  -   <description href="dict-ap_rprintf.html" />
  +   <description>
  +<para>
  +Sends the printf() style list of strings to the client.
  +</para>
  +<para>
  +Returns the number of bytes sent on success, or -1 on error.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_rputc</name>
     <definition>
      <declaration>int ap_rputc(int c, request_rec *r);</declaration>
  -   <description href="dict-ap_rputc.html" />
  +   <description>
  +<para>
  +Sends the character in <i>c</i> to the client.
  +</para>
  +<para>
  +Returns <i>c</i>, or EOF if the connection has been closed.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_rputs</name>
     <definition>
      <declaration>int ap_rputs(const char *str, request_rec *r);</declaration>
  -   <description href="dict-ap_rputs.html" />
  +   <description>
  +<para>
  +Sends the string <i>str</i> to the client.
  +</para>
  +<para>
  +Returns the number of bytes sent on success, or -1 on error.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_run_cleanup</name>
     <definition>
      <declaration>void ap_run_cleanup(pool *p, void *data, void (*cleanup) (void *));</declaration>
  -   <description href="dict-ap_run_cleanup.html" />
  +   <description>
  +<para>
  +Runs a cleanup function <i>cleanup</i>, with alarms blocked.
  +</para>
  +<para>
  +Usually not used except for special cases, as cleanups run automatically.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7094,7 +8066,16 @@
     <name>ap_run_sub_req</name>
     <definition>
      <declaration>int ap_run_sub_req(request_rec *r);</declaration>
  -   <description href="dict-ap_run_sub_req.html" />
  +   <description>
  +<para>
  +Runs a subrequest generated with
  +ap_sub_req_lookup_file or
  +ap_sub_req_lookup_uri.
  +</para>
  +<para>
  +Returns the status code of the request handler.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   int result;
  @@ -7106,7 +8087,14 @@
     <name>ap_rvputs</name>
     <definition>
      <declaration>int ap_rvputs(request_rec *r, ...);</declaration>
  -   <description href="dict-ap_rvputs.html" />
  +   <description>
  +<para>
  +Sends the NULL terminated list of strings to the client.
  +</para>
  +<para>
  +Returns the number of bytes sent on success, or -1 on error.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7160,7 +8148,11 @@
     <name>ap_scoreboard_image</name>
     <definition>
      <declaration>extern scoreboard *ap_scoreboard_image;</declaration>
  -   <description href="dict-ap_scoreboard_image.html" />
  +   <description>
  +<para>
  +A (hopefully) shared memory image of the server scoreboard structure.
  +</para>
  +   </description>
      <example>
       <text>ap_scoreboard_image-&gt;global.exit_generation = 0;</text>
      </example>
  @@ -7180,28 +8172,60 @@
     <name>ap_send_fb</name>
     <definition>
      <declaration>long ap_send_fb(BUFF *f, request_rec *r);</declaration>
  -   <description href="dict-ap_send_fb.html" />
  +   <description>
  +<para>
  +Copies the BUFF <i>f</i> to the client.
  +</para>
  +<para>
  +Returns the number of bytes sent.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_send_fb_length</name>
     <definition>
      <declaration>long ap_send_fb_length(BUFF *f, request_rec *r, long length);</declaration>
  -   <description href="dict-ap_send_fb_length.html" />
  +   <description>
  +<para>
  +Copies no more than <i>length</i> bytes from the BUFF <i>f</i> to
  +the client.
  +If <i>length</i> is &lt; 0, copies the whole buffer.
  +</para>
  +<para>
  +Returns the number of bytes sent.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_send_fd</name>
     <definition>
      <declaration>long ap_send_fd(file *f, request_rec *r);</declaration>
  -   <description href="dict-ap_send_fd.html" />
  +   <description>
  +<para>
  +Copies the stream <i>f</i> to the client.
  +</para>
  +<para>
  +Returns the number of bytes sent.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_send_fd_length</name>
     <definition>
      <declaration>long ap_send_fd_length(file *f, request_rec *r, long length);</declaration>
  -   <description href="dict-ap_send_fd_length.html" />
  +   <description>
  +<para>
  +Copies no more than <i>length</i> bytes from the stream <i>f</i> to
  +the client.
  +If <i>length</i> is &lt; 0, copies the whole file.
  +</para>
  +<para>
  +Returns the number of bytes sent.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7215,7 +8239,20 @@
     <name>ap_send_http_header</name>
     <definition>
      <declaration>void ap_send_http_header(request_rec *r);</declaration>
  -   <description href="dict-ap_send_http_header.html" />
  +   <description>
  +<para>
  +Sends the accumulated HTTP header fields to the client from
  +<literal>r-&gt;headers_out</literal> and <literal>r-&gt;err_headers_out</literal>.
  +Additional HTTP header fields may be added by the server, depending on
  +HTTP protocol version.
  +</para>
  +<para>
  +This must be called by content handlers before they send any actual
  +content.  Once this routine has been called, further changes to the
  +<literal>r-&gt;headers_out</literal> and <literal>r-&gt;err_headers_out</literal>
  +tables are ignored.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   ap_send_http_header(r);</text>
  @@ -7264,7 +8301,11 @@
     <name>ap_server_argv0</name>
     <definition>
      <declaration>char *ap_server_argv0;</declaration>
  -   <description href="dict-ap_server_argv0.html" />
  +   <description>
  +<para>
  +The command line argument string by which Apache was invoked,
  +</para>
  +   </description>
      <example>
       <text>extern char *ap_server_argv0; 
   ap_server_argv0 = argv[0];</text>
  @@ -7282,7 +8323,12 @@
     <name>ap_server_root</name>
     <definition>
      <declaration>char ap_server_root[MAX_STRING_LEN];</declaration>
  -   <description href="dict-ap_server_root.html" />
  +   <description>
  +<para>
  +The string value of the ServerRoot configuration directive, the root
  +directory of the server installation.
  +</para>
  +   </description>
      <example>
       <text>extern char ap_server_root[MAX_STRING_LEN]; 
   ap_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir)); </text>
  @@ -7409,7 +8455,17 @@
     <name>ap_setup_client_block</name>
     <definition>
      <declaration>int ap_setup_client_block(request_rec *r, int read_policy);</declaration>
  -   <description href="dict-ap_setup_client_block.html" />
  +   <description>
  +<para>
  +Readies to receive data from the client, normally because the client made a
  +PUT or POST request. Should be called before
  +ap_should_client_block.
  +</para>
  +<para>
  +Returns OK if data is allowed from the client, or a status code if it is not.
  +Note that OK will be returned even if the request doesn't contain client data.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-readbody</ref>
      </seealso>
  @@ -7436,7 +8492,17 @@
     <name>ap_should_client_block</name>
     <definition>
      <declaration>int ap_should_client_block(request_rec *r);</declaration>
  -   <description href="dict-ap_should_client_block.html" />
  +   <description>
  +<para>
  +Checks if the client will send data and invites it to continue doing so.
  +Sends a 100 Continue response if HTTP 1.1 or higher. This function should
  +be called after ap_setup_client_block
  +and before ap_get_client_block.
  +</para>
  +<para>
  +Returns 1 if the client should send data, 0 if not.
  +</para>
  +   </description>
      <example>
       <text>request_rec *r;
   int result;
  @@ -7475,7 +8541,27 @@
     <name>ap_snprintf</name>
     <definition>
      <declaration>int ap_snprintf(char *buf, size_t nbytes, const char *fmt, ...);</declaration>
  -   <description href="dict-ap_snprintf.html" />
  +   <description>
  +<para>
  +These are snprintf implementations based on ap_vformatter().
  +</para>
  +<para>
  +Note that various standards and implementations disagree on the return
  +value of snprintf, and side-effects due to %n in the formatting string.
  +ap_snprintf behaves as follows:
  +</para>
  +<para>
  +Process the format string until the entire string is exhausted, or
  +the buffer fills.  If the buffer fills then stop processing immediately
  +(so no further %n arguments are processed), and return the buffer
  +length.  In all cases the buffer is NUL terminated.
  +</para>
  +<para>
  +In no event does ap_snprintf return a negative number.  It's not possible
  +to distinguish between an output which was truncated, and an output which
  +exactly filled the buffer.
  +</para>
  +   </description>
      <example>
       <text>char buffer[HUGE_STRING_LEN];
   request_rec *r;
  @@ -7487,7 +8573,16 @@
     <name>ap_soft_timeout</name>
     <definition>
      <declaration>void ap_soft_timeout(char *str, request_rec *r);</declaration>
  -   <description href="dict-ap_soft_timeout.html" />
  +   <description>
  +<para>
  +Sets an alarm to expire when the server's configured timeout expires.
  +When the alarm expires, the client connection is closed, and no further
  +I/O is done.
  +</para>
  +<para>
  +<i>str</i> is logged to the error log.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7513,7 +8608,18 @@
     <name>ap_spawn_child_err</name>
     <definition>
      <declaration>int ap_spawn_child_err(pool *p, int (*func)(void *), void *data, enum kill_conditions, FILE **pipe_in, FILE **pipe_out, FILE **pipe_err);</declaration>
  -   <description href="dict-ap_spawn_child_err.html" />
  +   <description>
  +<para>
  +Spawns a child process. Pipes may be optionally connected to the child's
  +standard input, output, and error. If any of the pipes are NULL, they aren't
  +created. If <i>func</i> will need cleanup, it calls
  +ap_cleanup_for_exec.
  +</para>
  +<para>
  +See kill_conditions for the various ways
  +the child process can be killed. Returns PID of the child, or -1 on error.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7521,7 +8627,18 @@
     <definition>
      <declaration>int ap_spawn_child_err_buff(pool *p, int (*func)(void *), void *data, enum kill_conditions, 
                               BUFF **pipe_in, BUFF **pipe_out, BUFF **pipe_err);</declaration>
  -   <description href="dict-ap_spawn_child_err_buff.html" />
  +   <description>
  +<para>
  +Spawns a child process. BUFFs may be optionally connected
  +to the child's standard input, output, and error. If any of the
  +BUFFs are NULL, they aren't created. If <i>func</i> will
  +need cleanup, it calls ap_cleanup_for_exec.
  +</para>
  +<para>
  +See kill_conditions for the various ways
  +the child process can be killed. Returns PID of the child, or -1 on error.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7567,7 +8684,12 @@
                       ((x) == HTTP_INTERNAL_SERVER_ERROR) || \ 
                       ((x) == HTTP_SERVICE_UNAVAILABLE)   || \ 
                       ((x) == HTTP_NOT_IMPLEMENTED)) </declaration>
  -   <description href="dict-ap_status_drops_connection.html" />
  +   <description>
  +<para>
  +Macro representing a Boolean expression for all HTTP error response values
  +which will cause the current connection to be dropped.
  +</para>
  +   </description>
      <example>
       <text>    /* 
        * If we want to keep the connection, be sure that the request body 
  @@ -7595,7 +8717,16 @@
     <name>ap_strcasecmp_match</name>
     <definition>
      <declaration>int ap_strcasecmp_match(const char *str, const char *exp);</declaration>
  -   <description href="dict-ap_strcasecmp_match.html" />
  +   <description>
  +<para>
  +Matches <i>str</i> to <i>exp</i>. '*' can be used for any
  +number of characters, and '?' can be used for any single character.
  +</para>
  +<para>
  +Returns 1 for success, 0 for failure, and -1 for abort. Deprecated, use
  +newer regex functions instead.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7609,21 +8740,51 @@
     <name>ap_strcmp_match</name>
     <definition>
      <declaration>int ap_strcmp_match(const char *str, const char *exp);</declaration>
  -   <description href="dict-ap_strcmp_match.html" />
  +   <description>
  +<para>
  +Matches <i>str</i> to <i>exp</i>. '*' can be used for any
  +number of characters, and '?' can be used for any single character.
  +</para>
  +<para>
  +Returns 1 for success, 0 for failure, and -1 for abort. Deprecated, use
  +newer regex functions instead.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_sub_req_lookup_file</name>
     <definition>
      <declaration>request_rec *ap_sub_req_lookup_file(const char *new_file, const request_rec *r);</declaration>
  -   <description href="dict-ap_sub_req_lookup_file.html" />
  +   <description>
  +<para>
  +Processes <i>new_file</i> to produce a new request_rec,
  +which is processed up to the point where the new request handler would be
  +called. If the URI is relative, it is processed relative to the URI of <i>r</i>.
  +</para>
  +<para>
  +Returns the new request_rec, whose <i>status</i>
  +member contains any error code.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_sub_req_lookup_uri</name>
     <definition>
      <declaration>request_rec *ap_sub_req_lookup_uri(const char *new_file, const request_rec *r);</declaration>
  -   <description href="dict-ap_sub_req_lookup_uri.html" />
  +   <description>
  +<para>
  +Processes the URI <i>new_file</i> to produce a new
  +request_rec, which is processed up to the point
  +where the new request handler would be called. If the URI is relative, it
  +is processed relative to the URI of <i>r</i>.
  +</para>
  +<para>
  +Returns the new request_rec, whose <i>status</i>
  +member contains any error code.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7637,7 +8798,11 @@
     <name>ap_suexec_enabled</name>
     <definition>
      <declaration>int ap_suexec_enabled;</declaration>
  -   <description href="dict-ap_suexec_enabled.html" />
  +   <description>
  +<para>
  +Boolean value indicating whether the suexec facility is active.
  +</para>
  +   </description>
      <example>
       <text>extern int ap_suexec_enabled; 
   if (ap_suexec_enabled) { 
  @@ -7666,7 +8831,31 @@
     <name>ap_table_add</name>
     <definition>
      <declaration>void ap_table_add(table *t, const char *k, const char *val);</declaration>
  -   <description href="dict-ap_table_add.html" />
  +   <description>
  +<para>
  +Adds a new value <var>val</var> to table <var>t</var>, associated with key
  +<var>key</var>.
  +Both the key and the value are copied into the table's pool using
  +<literal>ap_pstrdup()</literal> and pointers to the copies used in the table.
  +If both values are constants, such
  +as literal strings, you should use <literal>ap_table_addn()</literal>
  +instead.
  +</para>
  +<para>
  +A new table entry is always created, even if there are already one or
  +more entries with the same key.
  +To update an existing entry, or create it if it doesn't exist, use
  +<literal>ap_table_set()</literal> (<i>q.v.</i>).  Be aware, though,
  +that <literal>ap_table_set()</literal> will delete all other entries
  +with the same key.
  +</para>
  +<para>
  +If a table has multiple entries for a particular key, only the
  +first will be returned by the direct lookup routines (<i>e.g.</i>,
  +<literal>ap_table_get()</literal>).  The only way to access such duplicate
  +entries is to traverse the table with <literal>ap_table_do()</literal>.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7676,7 +8865,27 @@
     <name>ap_table_addn</name>
     <definition>
      <declaration>void ap_table_addn(table *t, const char *k, const char *val);</declaration>
  -   <description href="dict-ap_table_addn.html" />
  +   <description>
  +<para>
  +Adds a new value <i>val</i> to table <i>t</i>, associated with <i>key</i>.
  +Pointers to the supplied strings are stored in the table, so they
  +must either be constants or at least have a greater longevity than
  +the table's pool, and they <b>must not</b> be modified after the
  +entry has been added to the table.  If these conditions cannot be
  +met, you should use <literal>ap_table_add()</literal> instead.
  +</para>
  +<para>
  +A new table entry is always created, even if it duplicates another.
  +To update an existing entry, or create it if it doesn't exist, use
  +<literal>ap_table_setn()</literal>.
  +</para>
  +<para>
  +If a table has multiple entries for a particular key, only the
  +first will be returned by the direct lookup routines (<i>e.g.</i>,
  +<literal>ap_table_get()</literal>).  The only way to access such duplicate
  +entries is to traverse the table with <literal>ap_table_do()</literal>.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7697,7 +8906,11 @@
     <name>ap_table_get</name>
     <definition>
      <declaration>const char *ap_table_get(const table *t, const char *key);</declaration>
  -   <description href="dict-ap_table_get.html" />
  +   <description>
  +<para>
  +Returns the value of <i>key</i> in table <i>t</i>.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7707,7 +8920,15 @@
     <name>ap_table_merge</name>
     <definition>
      <declaration>void ap_table_merge(table *t, const char *k, const char *more_val);</declaration>
  -   <description href="dict-ap_table_merge.html" />
  +   <description>
  +<para>
  +If <i>name</i> exists as a key value in <i>tab</i>, <i>more_val</i> is
  +added to the table. A new entry is created otherwise.
  +</para>
  +<para>
  +If more than one occurrence of <i>name</i> exists, only the first is modified.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7717,7 +8938,16 @@
     <name>ap_table_mergen</name>
     <definition>
      <declaration>void ap_table_mergen(table *t, const char *k, const char *more_val);</declaration>
  -   <description href="dict-ap_table_mergen.html" />
  +   <description>
  +<para>
  +If <i>name</i> exists as a key value in <i>tab</i>, <i>more_val</i> is
  +added to the table. A new entry is created otherwise.
  +</para>
  +<para>
  +If more than one occurrence of <i>name</i> exists, only the first is modified.
  +This function does not use ap_pstrdup.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7727,7 +8957,20 @@
     <name>ap_table_set</name>
     <definition>
      <declaration>void ap_table_set(table *t, const char *k, const char *val);</declaration>
  -   <description href="dict-ap_table_set.html" />
  +   <description>
  +<para>
  +Sets the entry in table <var>t</var> with key <var>k</var> to have value
  +<var>val</var>.  If no such entry exists, one is created.  If an
  +entry does exist, its value is replaced.  If there are multiple
  +entries with key <var>k</var>, the first one is modified, and
  +all the other matching entries are deleted from the table.  The value
  +is always duplicated from the routine argument into the table's pool
  +using <literal>ap_pstrdup()</literal>, and a pointer to the copy used; if a new
  +entry needs to be created, the key string is copied as well.  If both
  +the key and the value are literals, use <literal>ap_table_setn()</literal>
  +instead.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7737,7 +8980,20 @@
     <name>ap_table_setn</name>
     <definition>
      <declaration>void ap_table_setn(table *t, const char *k, const char *val);</declaration>
  -   <description href="dict-ap_table_setn.html" />
  +   <description>
  +<para>
  +Sets the entry in table <var>t</var> with key <var>k</var> to have value
  +<var>val</var>.  If no such entry exists, one is created.  If an
  +entry does exist, its value is replaced.  If there are multiple
  +entries with key <var>k</var>, the first one is modified, and
  +all the other matching entries are deleted from the table.
  +The key and value pointers from the argument list are inserted
  +directly into the table, so the caller <b>must not</b> modify
  +them after calling this routine.  If either the key or the
  +value cannot be guaranteed immutable, you should use
  +<literal>ap_table_set()</literal> (<i>q.v.</i>) instead.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7747,7 +9003,14 @@
     <name>ap_table_unset</name>
     <definition>
      <declaration>void ap_table_unset(table *t, const char *k);</declaration>
  -   <description href="dict-ap_table_unset.html" />
  +   <description>
  +<para>
  +Removes the table entry corresponding to <i>key</i>.
  +</para>
  +<para>
  +Removing nonexistent entries is not an error condition.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-tables</ref>
      </seealso>
  @@ -7771,7 +9034,14 @@
     <name>ap_tm2sec</name>
     <definition>
      <declaration>time_t ap_tm2sec(const struct tm *t);</declaration>
  -   <description href="dict-ap_tm2sec.html" />
  +   <description>
  +<para>
  +Returns time <i>t</i> to seconds since 1 Jan 1970 00:00 GMT.
  +</para>
  +<para>
  +<i>t</i> is assumed to be time in GMT format.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7797,21 +9067,42 @@
     <name>ap_uname2id</name>
     <definition>
      <declaration>uid_t ap_uname2id(const char *name);</declaration>
  -   <description href="dict-ap_uname2id.html" />
  +   <description>
  +<para>
  +Returns the UID corresponding to <i>name</i>.
  +</para>
  +<para>
  +If <i>name</i>'s first character is #, returns the number following as UID;
  +otherwise, uses getpwnam() to look up the UID.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_unblock_alarms</name>
     <definition>
      <declaration>void ap_unblock_alarms(void);</declaration>
  -   <description href="dict-ap_unblock_alarms.html" />
  +   <description>
  +<para>
  +Removes a block on alarms for a call to block_alarms.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
     <name>ap_unescape_url</name>
     <definition>
      <declaration>int ap_unescape_url(char *url);</declaration>
  -   <description href="dict-ap_unescape_url.html" />
  +   <description>
  +<para>
  +Replaces escape sequences (%nn) in a URL with the original unescaped character.
  +Replacement is done in place.
  +</para>
  +<para>
  +Returns 0 on success, BAD_REQUEST if a bad escape sequence is found, or
  +NOT_FOUND if %2F (/) is found.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7898,7 +9189,11 @@
     <name>ap_uudecode</name>
     <definition>
      <declaration>char *ap_uudecode(pool *p, const char *str);</declaration>
  -   <description href="dict-ap_uudecode.html" />
  +   <description>
  +<para>
  +Returns a uudecoded version of <i>str</i>.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7933,7 +9228,14 @@
     <name>ap_vbprintf</name>
     <definition>
      <declaration>int ap_vbprintf(BUFF *fb, const char *fmt, va_list vlist);</declaration>
  -   <description href="dict-ap_vbprintf.html" />
  +   <description>
  +<para>
  +Copies formatted data to a BUFF structure.
  +</para>
  +<para>
  +Returns 0 on success, -1 on failure.
  +</para>
  +   </description>
     </definition>
    </item>
    <item type="Routine">
  @@ -7964,7 +9266,27 @@
     <name>ap_vsnprintf</name>
     <definition>
      <declaration>int ap_vsnprintf(char *buf, size_t numbytes, const char *fmt, va_list ap);</declaration>
  -   <description href="dict-ap_vsnprintf.html" />
  +   <description>
  +<para>
  +These are vsnprintf implementations based on ap_vformatter().
  +</para>
  +<para>
  +Note that various standards and implementations disagree on the return
  +value of vsnprintf, and side-effects due to %n in the formatting string.
  +ap_vsnprintf behaves as follows:
  +</para>
  +<para>
  +Process the format string until the entire string is exhausted, or
  +the buffer fills.  If the buffer fills then stop processing immediately
  +(so no further %n arguments are processed), and return the buffer
  +length.  In all cases the buffer is NUL terminated.
  +</para>
  +<para>
  +In no event does ap_vsnprintf return a negative number.  It's not possible
  +to distinguish between an output which was truncated, and an output which
  +exactly filled the buffer.
  +</para>
  +   </description>
      <example>
       <text>const char *text;
   char str2[512];
  @@ -8085,7 +9407,42 @@
     <name>cmd_how</name>
     <definition>
      <declaration>#include &quot;httpd.h&quot;</declaration>
  -   <description href="dict-cmd_how.html" />
  +   <description>
  +<para>
  +A set of values designating how argument processing is done for a given
  +instance of a <literal>command_rec</literal>. Note that for all of these values
  +except <literal>RAW_ARGS</literal>, the config routine is passed a freshly
  +allocated string which can be modified or stored. It's only necessary to do
  +<literal>ap_pstrdup()</literal> copying with <literal>RAW_ARGS</literal>. The allowable
  +values are:
  +</para>
  +<dl compact="compact">
  +  <dt><literal>RAW_ARGS</literal></dt>
  +  <dd>cmd_func parses command line itself</dd>
  +  <dt><literal>TAKE1</literal></dt>
  +  <dd>one argument only</dd>
  +  <dt><literal>TAKE2</literal></dt>
  +  <dd>two arguments only</dd>
  +  <dt><literal>ITERATE</literal></dt>
  +  <dd>one argument, occuring multiple times (<i>e.g.</i>, IndexIgnore)</dd>
  +  <dt><literal>ITERATE2</literal></dt>
  +  <dd>two arguments, 2nd occurs multiple times (<i>e.g.</i>, AddIcon)</dd>
  +  <dt><literal>FLAG</literal></dt>
  +  <dd>One of 'On' or 'Off'</dd>
  +  <dt><literal>NO_ARGS</literal></dt>
  +  <dd>No arguments at all (<i>e.g.</i> &lt;/Directory&gt;)</dd>
  +  <dt><literal>TAKE12</literal></dt>
  +  <dd>one or two arguments</dd>
  +  <dt><literal>TAKE3</literal></dt>
  +  <dd>three arguments only</dd>
  +  <dt><literal>TAKE23</literal></dt>
  +  <dd>two or three arguments</dd>
  +  <dt><literal>TAKE123</literal></dt>
  +  <dd>one, two or three arguments</dd>
  +  <dt><literal>TAKE13</literal></dt>
  +  <dd>one or three arguments</dd>
  +</dl>
  +   </description>
      <example>
       <text>&lt;code&gt;cmd_how&lt;/code&gt; is an enum, but the enumeration type isn't used
        by modules, only the specific named values.</text>
  @@ -8110,7 +9467,12 @@
       const command_rec *cmd; 
       const char *end_token; 
   } cmd_parms;</declaration>
  -   <description href="dict-cmd_parms.html" />
  +   <description>
  +<para>
  +This structure is passed to a command which is being invoked,
  +to carry a large variety of miscellaneous data.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-core-rec</ref>
       <ref>SA-overrides</ref>
  @@ -8175,7 +9537,32 @@
       char *local_ip; 
       char *local_host; 
   };</declaration>
  -   <description href="dict-conn_rec.html" />
  +   <description>
  +<para>
  +The <literal>conn_rec</literal> structure is used to hold information
  +about a currently-open connexion between the Web server and a
  +client.  Since a connexion is made to a server host, a <literal>conn_rec</literal>
  +record is tied to a particular <literal>server_rec</literal>, and a
  +pointer to that server record is stored in the <literal>conn_rec</literal>
  +structure.
  +</para>
  +<para>
  +The structure also contains information about the client, such as its
  +IP address and DNS name (if a lookup has been performed).
  +</para>
  +<dl compact="compact">
  + <dt><b>Note:</b></dt>
  + <dd>An unfortunate assumption was made during the early days of
  +  Apache that only one set of authentication credentials would be
  +  in use for any connexion, even persistent ones.  That is why this
  +  structure includes the credential information instead of the
  +  <literal>request_rec</literal>, which is where it actually belongs.
  +  This has been corrected for Apache 2.0.</dd>
  + <dt><b>Note:</b></dt>
  + <dd>This structure has been very stable through the Apache 1.3
  +  series of releases, but has been updated for 2.0.</dd>
  +</dl>
  +   </description>
      <seealso>
       <ref>SA-core-rec</ref>
      </seealso>
  @@ -8185,7 +9572,12 @@
     <name>core_module</name>
     <definition>
      <declaration>module core_module {&lt;i&gt;module-specific-info&lt;/i&gt;};</declaration>
  -   <description href="dict-core_module.html" />
  +   <description>
  +<para>
  +This global module structure will be first in the core static module list.
  +The core_module is exposed to other modules for NCSA back compatibility.
  +</para>
  +   </description>
      <example>
       <text>module core_module = { 
      STANDARD_MODULE_STUFF, 
  @@ -8227,7 +9619,12 @@
      <declaration>typedef struct { 
       int exit_generation; 
   } global_score;</declaration>
  -   <description href="dict-global_score.html" />
  +   <description>
  +<para>
  +<i>exit_generation</i> is a boolean, set by the main process if a graceful
  +restart is required.
  +</para>
  +   </description>
      <example>
       <text>typedef struct { 
       short_score servers[HARD_SERVER_LIMIT]; 
  @@ -8244,7 +9641,25 @@
     <name>kill_conditions</name>
     <definition>
      <declaration>#include &quot;ap_alloc.h&quot;</declaration>
  -   <description href="dict-kill_conditions.html" />
  +   <description>
  +<para>
  +Enumeration of process termination conditions, used by Apache process
  +control functions such as ap_note_subprocess() and ap_spawn_child().
  +The values signify:
  +</para>
  +<dl compact="compact">
  +  <dt><literal>kill_never</literal></dt>
  +  <dd>process is never sent any signals</dd>
  +<dt><literal>kill_always</literal></dt>
  +<dd>process is sent SIGKILL on pool cleanup</dd>
  +<dt><literal>kill_after_timeout</literal></dt>
  +<dd>send SIGTERM, wait 3 seconds, send SIGKILL</dd>
  +<dt><literal>just_wait</literal></dt>
  +<dd>wait forever for the process to complete</dd>
  +<dt><literal>kill_only_once</literal></dt>
  +<dd>send SIGTERM and then wait</dd>
  +</dl>
  +   </description>
      <example>
       <text>&lt;code&gt;kill_conditions&lt;/code&gt; is an enum, but the enumeration type isn't used
        by modules, only the specific named values.</text>
  @@ -8294,7 +9709,30 @@
   #endif 
       int (*post_read_request) (request_rec *)r; 
   } module; </declaration>
  -   <description href="dict-module.html" />
  +   <description>
  +<para>
  +A server extension module in Apache can
  +declare handlers for a particular phase --- these are C functions
  +which return an integer status code, and which take as argument a pointer to a
  +structure known as a request_rec, which contains and coordinates all
  +of the information regarding a particular request: the URI requested,
  +type of the request, relevant directory-specific configuration
  +information, and the like. In fact, the interface between the server core
  +and extension modules (including the ones which implement the server's
  +native NCSA emulation functionality) is through a module structure which
  +consists mostly of pointers to handlers for various phases, or NULL,
  +if the module elects not to handle that phase (there is also other
  +information concerned with configuration management). 
  +</para>
  +<para>
  +As a special case, a module can declare several handlers for the
  +response-handling phase, distinguished by the types of entities
  +(scripts, directories, ordinary files of particular kinds, or anything
  +at all) that they wish to handle. The server core code does a dispatch
  +based on the type of the entity requested to find the handler (or
  +handlers, if the first one declines the request) which it eventually invokes. 
  +</para>
  +   </description>
      <example>
       <text>module *mpointer; 
      &lt;i&gt;or&lt;/i&gt; 
  @@ -8332,7 +9770,12 @@
     <name>mutex</name>
     <definition>
      <declaration>This is an opaque structure; you don't need to access any of its elements.</declaration>
  -   <description href="dict-mutex.html" />
  +   <description>
  +<para>
  +Mutual exclusion (mutex) semaphore locking mechanism used to serialise
  +interthread intraprocess activities.
  +</para>
  +   </description>
      <example>
       <text>mutex &lt;var&gt;identifier&lt;/var&gt;</text>
      </example>
  @@ -8393,7 +9836,16 @@
       vtime_t last_vtime; 
   #endif 
   } parent_score;</declaration>
  -   <description href="dict-parent_score.html" />
  +   <description>
  +<para>
  +This structure contains data which the parent generally writes and the
  +children rarely read.
  +</para>
  +<para>
  +The parent_rec structure contains time(0) of the last change,
  +and the last vtime the parent has seen.
  +</para>
  +   </description>
      <example>
       <text>parent_score ps_record; 
   for (i = 0; i &lt; HARD_SERVER_LIMIT; ++i) { 
  @@ -8430,7 +9882,16 @@
      <declaration>typedef struct pool pool;
   typedef struct pool ap_pool;
   struct pool &lt;var&gt;opaque-structure&lt;/var&gt;</declaration>
  -   <description href="dict-pool.html" />
  +   <description>
  +<para>
  +The <literal>pool</literal> type is another name for the
  +<literal>ap_pool</literal> structure (<i>q.v.</i>).  The
  +latter is the preferred type name, to avoid name collisions
  +with third-party library symbols.  However, due to
  +historical reasons, a lot of legacy usages of the
  +<literal>pool</literal> type name exist.
  +</para>
  +   </description>
      <example>
       <text>pool *p; 
   char *foo; 
  @@ -8574,7 +10035,227 @@
       const struct htaccess_result *htaccess; 
       char *case_preserved_filename; 
   };</declaration>
  -   <description href="dict-request_rec.html" />
  +   <description>
  +<para>
  +The <literal>request_rec</literal> structure is key to Apache's
  +processing of client requests.  A pointer to a
  +<literal>request_req</literal> structure is passed to all
  +phase handlers and many API routines, and it is usually
  +given the argument name '<literal>r</literal>' (<i>e.g.</i>,
  +<literal>ap_add_common_vars(r)</literal>).
  +</para>
  +
  +<para><b>Detailed Field Descriptions</b></para>
  +<dl>
  + <dt><literal><b>pool *pool</b></literal></dt> 
  + <dd>If a module routine is passed a <literal>request_rec</literal> structure,
  +  the <literal>pool</literal> pointer in the structure is available for
  +  memory allocation.  (See the description of <literal>ap_palloc()</literal>
  +  and related routines.)  When the request is completed, the
  +  memory pool will be released.</dd>
  + <dt><literal><b>conn_rec *connection</b></literal></dt>
  + <dd>This is a pointer to the <literal>conn_rec</literal> structure
  +  describing the TCP/IP connexion over which the request was received.</dd>
  + <dt><literal><b>server_rec *server</b></literal></dt>
  + <dd>This field contains a pointer to the <literal>server_rec</literal>
  +  structure for the virtual host which was assigned to handle the
  +  request.</dd>
  + <dt><literal><b>request_rec *next</b></literal></dt>
  + <dt><literal><b>request_rec *prev</b></literal></dt>
  + <dt><literal><b>request_rec *main</b></literal></dt>
  + <dd>These fields are pointers to other <literal>request_rec</literal>
  +  structures in the case of a complex opertion involving
  +  subrequests.  The <literal>main</literal> pointer refers to the
  +  request actually received from the client, as opposed to any
  +  internal ones created by Apache during its request resolution.</dd>
  + <dt><literal><b>char *the_request</b></literal></dt>
  + <dd>This is a pointer to the actual request string received from the client
  +  (<i>e.g.</i>, "<literal>GET /index.html HTTP/1.1</literal>").</dd>
  + <dt><literal><b>int assbackwards</b></literal></dt>
  + <dd>This is a Boolean flag indicating whether the request was made
  +  using the HTTP/0.9 protocol.  It is set to non-zero if so.</dd>
  + <dt><literal><b>enum proxyreqtype proxyreq</b></literal></dt>
  + <dd>This field is only used by proxy modules, and indicates
  +  the type of proxy request involved.  See the description of the
  +  <literal>proxyreqtype</literal> enumeration for more information.</dd>
  + <dt><literal><b>int header_only</b></literal></dt>
  + <dd>This Boolean flag is set to non-zero if the request was made with the
  +  <literal>HEAD</literal> method.  The response headers will be returned,
  +  but modules shouldn't bother to generate any content for the response.</dd>
  + <dt><literal><b>char *protocol</b></literal></dt>
  + <dd>This is a pointer to a string representing the protocol of the
  +  request, such as "<literal>HTTP/0.9</literal>" or "<literal>HTTP/1.1</literal>".</dd>
  + <dt><literal><b>int proto_num</b></literal></dt>
  + <dd>This is a numeric representation of the protocol level.  It can
  +  be parsed with the <literal>HTTP_VERSION_MAJOR()</literal> and
  +  <literal>HTTP_VERSION_MINOR()</literal> macros (<i>q.q.v.</i>).</dd>
  + <dt><literal><b>char *hostname</b></literal></dt>
  + <dd>Pointer to a string indicating the hostname to which the request
  +  was directed (extracted from either the <literal>r-&gt;the_request</literal>
  +  string or the <literal>Host</literal> request header field).  Note that
  +  this value may be different from the name of the host actually
  +  processing the request; that is, it may differ from any value in the
  +  <literal>r-&gt;server-&gt;names</literal> array.</dd>
  + <dt><literal><b>time_t request_time</b></literal></dt>
  + <dd>This field is used to record the time the request was received
  +  by the server.  This value is stored in local time, not GMT.</dd>
  + <dt><literal><b>const char *status_line</b></literal></dt>
  + <dd>This field is reserved to and used by the core server for
  +  constructing the status line portion of the response header.</dd>
  + <dt><literal><b>int status</b></literal></dt>
  + <dd>This is used to contain the numeric code of the HTTP response
  +  status, such as <literal>HTTP_NOT_MODIFIED</literal>.  It is typically
  +  not used by modules because the protocol module derives the
  +  correct value from module responses and the HTTP specification
  +  defining the interaction of header fields.</dd>
  + <dt><literal><b>const char *method</b></literal></dt>
  + <dd>This is a pointer to a string representing the name of the HTTP method
  +  used to make the request, such as "<literal>GET</literal>", as extracted
  +  from the <literal>r-&gt;the_request</literal> string.  Modules may
  +  want to reference this field if they handle extension methods not
  +  directly known to the core server and therefore not represented by
  +  a numeric value.  (See th enext field, <literal>method_number</literal>.)</dd>
  + <dt><literal><b>int method_number</b></literal></dt>
  + <dd>This field contains a numeric value representing the request
  +  method.  The possible values are give mnemonic names prefixed with
  +  "<literal>M_</literal>", such as "<literal>M_GET</literal>" and "<literal>M_DELETE</literal>"
  +  (<i>q.q.v.</i>; see the description of <literal>M_GET</literal> for additional
  +  references and information.)
  +  If the request was made using a method unknown to the core server,
  +  the value in this field will be <literal>M_INVALID</literal>, even if the
  +  server has been configured to recognise the method (such as with
  +  the <literal>Script</literal> directive).  In this case modules should
  +  check the string value in the <literal>method</literal> field of the
  +  <literal>request_rec</literal> structure, which immediately precedes this
  +  one.</dd>
  + <dt><literal><b>int allowed</b></literal></dt>
  + <dd>This is a bitmask of the HTTP methods permitted for the resource.  The
  +  module that generates the response content is responsible for setting
  +  this; it should
  +  do so before or during the content generation phase, before the response
  +  header is sent.  This mask is
  +  used solely to create the <literal>Allowed</literal> response header field.
  +  It's a good idea to set it in an earlier phase if possible, in case
  +  the request method is <literal>OPTIONS</literal> and will be handled by the
  +  <literal>default_handler</literal>.  Due to the dependence on hard-coded
  +  bitmask values, Apache 1.3 provides no support for listing
  +  extension methods in this field.</dd>
  + <dt><literal><b>int sent_bodyct</b></literal></dt>
  + <dd>This field is reserved for use by the core server.</dd>
  + <dt><literal><b>long bytes_sent</b></literal></dt>
  + <dd>This field is reserved for use by the core server.  At the completion
  +  of the request it contains the number of bytes sent as the response body;
  +  it does not include the bytes in the response header.  It is primarily
  +  used by logging modules.</dd>
  + <dt><literal><b>time_t mtime</b></literal></dt>
  + <dd>This field contains the last-modified time for the current
  +  document.  It should be set with the <literal>ap_update_mtime()</literal>
  +  or <literal>ap_rationalize_mtime()</literal> routines.</dd>
  + <dt><literal><b>int chunked</b></literal></dt>
  + <dd>This field is reserved for use by the core server.  It is a Boolean
  +  value indicating whether the response is being sent using chunked
  +  encoding.</dd>
  + <dt><literal><b>int byterange</b></literal></dt>
  + <dd>This field contains the number of distinct byte-ranges in the request
  +  header's <literal>Range</literal> field.</dd>
  + <dt><literal><b>char *boundary</b></literal></dt>
  + <dd>The delimiting string used in multipart or byterange bodies.</dd>
  + <dt><literal><b>const char *range</b></literal></dt>
  + <dd>The value of the request's <literal>Range</literal> header field.  This
  +  is stored here for convenience; it is also available in the
  +  <literal>headers_in</literal> table described below.</dd>
  + <dt><literal><b>long clength</b></literal></dt>
  + <dd>The actual length in bytes of the response body.  Set with the
  + <literal>ap_set_content_length()</literal> routine (<i>q.v.</i>).</dd>
  + <dt><literal><b>long remaining</b></literal></dt>
  + <dd>The number of bytes in the request body that have not yet been read.
  +  This is updated by the server core each time a module asks the server
  +  core for more of the body.  Modules must regard it as a read-only field.</dd>
  + <dt><literal><b>long read_length</b></literal></dt>
  + <dd>Similar to the <literal>remaining</literal> field described above, this
  +  field contains the count of bytes already read from the request bosy.
  +  Modules must regard this as a read-only field.</dd>
  + <dt><literal><b>int read_body</b></literal></dt>
  + <dt><literal><b>int read_chunked</b></literal></dt>
  + <dt><literal><b>unsigned expecting_100</b></literal></dt>
  + <dd>This field is reserved for use by the core server in handling
  +  aspects of the HTTP/1.1 protocol.</dd>
  + <dt><literal><b>table *headers_in</b></literal></dt>
  + <dd>This table contains a key/value pair for every field in the
  +  request header.  Some of the fields are also represented in other
  +  ways, such as the <literal>Range</literal> field, but all of the
  +  original request header fields are stored in this table in their
  +  raw form.  Modules must regard this table as read-only.</dd>
  + <dt><literal><b>table *headers_out</b></literal></dt>
  + <dd>This table is used to hold the key/value pairs of the
  +  header fields to be sent as part of the response.  Under certain
  +  conditions, such as error responses, the values in this table
  +  will <b>not</b> be used in the construction of the response
  +  header.  Under normal circumstances, however, its contents
  +  are merged with those in the <literal>r-&gt;err_headers_out</literal>
  +  table to form the response header.</dd>
  + <dt><literal><b>table *err_headers_out</b></literal></dt>
  + <dd>Similar to the <literal>headers_out</literal> table described
  +  previously, the contents of this table are used in the
  +  formation of the response header.  However, the values in
  +  <i>this</i> table are <b>always</b> used, even under
  +  error conditions.  Under normal conditions, they are merged
  +  with those in the <literal>r-&gt;header_out</literal> table and
  +  the result is used.</dd>
  + <dt><literal><b>table *subprocess_env</b></literal></dt>
  + <dd>The name of this field is somewhat misleading.  This table contains
  +  the names and values of 'environment' variables that are available
  +  to subsequent stages of processing for the request.  They are
  +  set as actual environment variables only if a child process
  +  needs to be created, such as for invoking a CGI script.
  +  However, these values are also available for use by things
  +  such as <literal>mod_include</literal>, even though no actual
  +  subprocess creation is involved.</dd>
  + <dt><literal><b>table *notes</b></literal></dt>
  + <dd>This table has no strictly defined purpose; it is generally
  +  intended to provide a means for modules to communicate with
  +  each other when processing a request, or for different phase
  +  handlers of the same module to pass information from phase
  +  to another.  For example, <literal>mod_speling</literal> uses this
  +  table to pass a list of possible document variants to
  +  <literal>mod_negotiation</literal>.</dd>
  + <dt><literal><b>const char *content_type</b></literal></dt>
  + <dd>Specifies the content-type of the respose body (if there is one).
  +  Modules should set this field rather than inserting an entry
  +  directly into either <literal>r-&gt;headers_out</literal> or
  +  <literal>r-&gt;err_headers_out</literal>.</dd>
  + <dt><literal><b>const char *handler</b></literal></dt>
  + <dt><literal><b>const char *content_encoding</b></literal></dt>
  + <dt><literal><b>const char *content_language</b></literal></dt>
  + <dt><literal><b>array_header *content_languages</b></literal></dt>
  + <dt><literal><b>char *vlist_validator</b></literal></dt>
  + <dt><literal><b>int no_cache</b></literal></dt>
  + <dt><literal><b>int no_local_copy</b></literal></dt>
  + <dt><literal><b>char *unparsed_uri</b></literal></dt>
  + <dt><literal><b>char *uri</b></literal></dt>
  + <dt><literal><b>char *filename</b></literal></dt>
  + <dt><literal><b>char *path_info</b></literal></dt>
  + <dt><literal><b>char *args</b></literal></dt>
  + <dt><literal><b>struct stat finfo</b></literal></dt>
  + <dt><literal><b>uri_components parsed_uri</b></literal></dt>
  + <dt><literal><b>void *per_dir_config</b></literal></dt>
  + <dt><literal><b>void *request_config</b></literal></dt>
  + <dt><literal><b>const struct htaccess_result *htaccess</b></literal></dt>
  + <dt><literal><b>char *case_preserved_filename</b></literal></dt>
  + <dd>This field contains the original translated filename
  +  representing the document source (if it actually is a file)
  +  before canonicalisation.  This is necessary for some
  +  situations in which canonicalisation actually modifies the
  +  name for later use.  For example, on Windows systems Apache
  +  always always translates filenames to lowercase for
  +  security reasons (among others).  This would cause problems
  +  if the case of the requested name was actually significant
  +  though the case of the actual filename was not, such as
  +  if the request was referring to a Java class file.  This
  +  field provides the original filename before the downcasing
  +  (or other canonicalisation transform) has been performed.</dd>
  +</dl>
  +   </description>
      <seealso>
       <ref>SA-core-rec</ref>
       <ref>HTTP_VERSION_MAJOR</ref>
  @@ -8646,7 +10327,15 @@
       int limit_req_fieldsize; 
       int limit_req_fields; 
   }; </declaration>
  -   <description href="dict-server_rec.html" />
  +   <description>
  +<para>
  +The <literal>server_rec</literal> structure is one of the key components
  +of the Apache API.  One is created for every virtual host (declared
  +by &lt;VirtualHost&gt; container directives in the server config files),
  +and one for the 'global' server whose characteristics are set by
  +the directives that aren't within a virtual host declaration.
  +</para>
  +   </description>
      <seealso>
       <ref>SA-core-rec</ref>
      </seealso>
  @@ -8696,7 +10385,12 @@
     <name>table</name>
     <definition>
      <declaration>typedef struct table {&lt;var&gt;opaque-structure&lt;/var&gt;};</declaration>
  -   <description href="dict-table.html" />
  +   <description>
  +<para>
  +A table is an association between two strings known as <i>key</i> and
  +<i>value</i>, accessed via <i>key</i>.
  +</para>
  +   </description>
      <example>
       <text>table *string_pairs;
        string_pairs = ap_make_table(p, 4);
  @@ -8711,7 +10405,15 @@
     <name>top_module</name>
     <definition>
      <declaration>module *top_module;</declaration>
  -   <description href="dict-top_module.html" />
  +   <description>
  +<para>
  +The server maintains a list of active modules, which it references
  +when going through the various configuration and request processing
  +phases.  The list is actually a linked list of all of the
  +<literal>module</literal> structures; this global cell points to the
  +first structure in the list.
  +</para>
  +   </description>
      <example>
       <text>module *top_module = NULL; 
   module *modp, *first; 
  @@ -8755,7 +10457,23 @@
     <name>vtime_t</name>
     <definition>
      <declaration>typedef unsigned vtime_t;</declaration>
  -   <description href="dict-vtime_t.html" />
  +   <description>
  +<para>
  +A "virtual time" is simply a counter that indicates that a child is
  +making progress.  The parent checks up on each child, and when they have
  +made progress it resets the last_rtime element.  But when the child hasn't
  +made progress in a time that's roughly timeout_len seconds long, it is
  +sent a SIGALRM.
  +</para>
  +<para>
  +Vtime is an optimization that is used only when the scoreboard is in
  +shared memory (it's not easy/feasible to do it in a scoreboard file).
  +The essential observation is that timeouts rarely occur, the vast majority
  +of hits finish before any timeout happens.  So it really is suboptimal to
  +have to ask the operating system to set up and destroy alarms many times
  +during a request.
  +</para>
  +   </description>
      <example>
       <text>short_score *ss; 
   parent_score *ps = &amp;ap_scoreboard_image-&gt;parent[i]; 
  
  
  

Mime
View raw message