aboutsummaryrefslogtreecommitdiffstats
path: root/trio/html
diff options
context:
space:
mode:
Diffstat (limited to 'trio/html')
-rw-r--r--trio/html/group___dynamic_strings.html362
-rw-r--r--trio/html/group___printf.html1259
-rw-r--r--trio/html/group___scanf.html145
-rw-r--r--trio/html/group___special_quantities.html390
-rw-r--r--trio/html/group___static_strings.html1809
-rw-r--r--trio/html/group___user_defined.html379
-rw-r--r--trio/html/index.html88
-rw-r--r--trio/html/modules.html23
-rw-r--r--trio/html/trio.css35
9 files changed, 4490 insertions, 0 deletions
diff --git a/trio/html/group___dynamic_strings.html b/trio/html/group___dynamic_strings.html
new file mode 100644
index 00000000..ab349297
--- /dev/null
+++ b/trio/html/group___dynamic_strings.html
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>Dynamic String Functions.</h1>Dynamic string functions.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC trio_string_t *&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a3">trio_string_create</a> (int initial_size)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Create a new dynamic string.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC void&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a4">trio_string_destroy</a> (trio_string_t *self)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Deallocate the dynamic string and its contents.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a5">trio_string_get</a> (trio_string_t *self, int offset)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Get a pointer to the content.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a6">trio_string_extract</a> (trio_string_t *self)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Extract the content.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC void&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a7">trio_xstring_set</a> (trio_string_t *self, char *buffer)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Set the content of the dynamic string.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a10">trio_string_append</a> (trio_string_t *self, trio_string_t *other)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Append the second string to the first.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___dynamic_strings.html#a13">trio_string_contains</a> (trio_string_t *self, trio_string_t *other)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Search for the first occurrence of second parameter in the first.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Dynamic string functions.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;triostr.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b> <hr><h2>Function Documentation</h2>
+<a name="a10" doxytag="triostr.c::trio_string_append"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_string_append </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>self</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>other</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Append the second string to the first.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic string to be modified. </td></tr>
+<tr><td valign=top><em>other</em>&nbsp;</td><td>
+Dynamic string to copy from. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure. </dl> </td>
+ </tr>
+</table>
+<a name="a13" doxytag="triostr.c::trio_string_contains"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_string_contains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>self</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>other</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Search for the first occurrence of second parameter in the first.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic string to be modified. </td></tr>
+<tr><td valign=top><em>other</em>&nbsp;</td><td>
+Dynamic string to copy from. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure. </dl> </td>
+ </tr>
+</table>
+<a name="a3" doxytag="triostr.c::trio_string_create"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC trio_string_t* trio_string_create </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>initial_size</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Create a new dynamic string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>initial_size</em>&nbsp;</td><td>
+Initial size of the buffer. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Newly allocated dynamic string, or NULL if memory allocation failed. </dl> </td>
+ </tr>
+</table>
+<a name="a4" doxytag="triostr.c::trio_string_destroy"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC void trio_string_destroy </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>self</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Deallocate the dynamic string and its contents.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic string </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a6" doxytag="triostr.c::trio_string_extract"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_string_extract </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>self</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Extract the content.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic String </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Content of dynamic string.</dl>The content is removed from the dynamic string. This enables destruction of the dynamic string without deallocation of the content. </td>
+ </tr>
+</table>
+<a name="a5" doxytag="triostr.c::trio_string_get"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_string_get </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>self</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>offset</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Get a pointer to the content.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic string. </td></tr>
+<tr><td valign=top><em>offset</em>&nbsp;</td><td>
+Offset into content. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Pointer to the content.</dl><code>Offset</code> can be zero, positive, or negative. If <code>offset</code> is zero, then the start of the content will be returned. If <code>offset</code> is positive, then a pointer to <code>offset</code> number of characters from the beginning of the content is returned. If <code>offset</code> is negative, then a pointer to <code>offset</code> number of characters from the ending of the string, starting at the terminating zero, is returned. </td>
+ </tr>
+</table>
+<a name="a7" doxytag="triostr.c::trio_xstring_set"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC void trio_xstring_set </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_string_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>self</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the content of the dynamic string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>self</em>&nbsp;</td><td>
+Dynamic String </td></tr>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+The new content.</td></tr>
+</table>
+</dl>Sets the content of the dynamic string to a copy <code>buffer</code>. An existing content will be deallocated first, if necessary.
+<p>
+<dl compact><dt><b>
+Remarks: </b><dd>
+ This function will make a copy of <code>buffer</code>. You are responsible for deallocating <code>buffer</code> yourself. </dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/group___printf.html b/trio/html/group___printf.html
new file mode 100644
index 00000000..7f79200f
--- /dev/null
+++ b/trio/html/group___printf.html
@@ -0,0 +1,1259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>Formatted Printing Functions.</h1>Variations of formatted printing functions.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a0">trio_printf</a> (const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to standard output stream.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a1">trio_vprintf</a> (const char *format, va_list args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to standard output stream.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a2">trio_printfv</a> (const char *format, trio_pointer_t *args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to standard output stream.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a3">trio_fprintf</a> (FILE *file, const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a4">trio_vfprintf</a> (FILE *file, const char *format, va_list args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a5">trio_fprintfv</a> (FILE *file, const char *format, trio_pointer_t *args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a6">trio_dprintf</a> (int fd, const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file descriptor.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a7">trio_vdprintf</a> (int fd, const char *format, va_list args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file descriptor.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a8">trio_dprintfv</a> (int fd, const char *format, trio_pointer_t *args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to file descriptor.</em> <a href="#a8">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a12">trio_sprintf</a> (char *buffer, const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to string.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a13">trio_vsprintf</a> (char *buffer, const char *format, va_list args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to string.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a14">trio_sprintfv</a> (char *buffer, const char *format, trio_pointer_t *args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print to string.</em> <a href="#a14">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a15">trio_snprintf</a> (char *buffer, size_t max, const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print at most <code>max</code> characters to string.</em> <a href="#a15">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a16">trio_vsnprintf</a> (char *buffer, size_t max, const char *format, va_list args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print at most <code>max</code> characters to string.</em> <a href="#a16">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___printf.html#a17">trio_snprintfv</a> (char *buffer, size_t max, const char *format, trio_pointer_t *args)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Print at most <code>max</code> characters to string.</em> <a href="#a17">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Variations of formatted printing functions.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;trio.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b>
+<p>
+This documentation is incomplete. The documentation of the printf family in [C99] and [UNIX98] also applies to the trio counterparts.
+<p>
+All these functions outputs a string which is formatted according to the <code>format</code> string and the consecutive arguments. The <code>format</code> string is described in the Formatting section below.
+<p>
+<a class="el" href="group___printf.html#a0">trio_printf</a>, <a class="el" href="group___printf.html#a1">trio_vprintf</a>, and <a class="el" href="group___printf.html#a2">trio_printfv</a> writes the output to the standard output stream (stdout).
+<p>
+<a class="el" href="group___printf.html#a3">trio_fprintf</a>, <a class="el" href="group___printf.html#a4">trio_vfprintf</a>, and <a class="el" href="group___printf.html#a5">trio_fprintfv</a> writes the output to a given output stream.
+<p>
+<a class="el" href="group___printf.html#a6">trio_dprintf</a>, <a class="el" href="group___printf.html#a7">trio_vdprintf</a>, and <a class="el" href="group___printf.html#a8">trio_dprintfv</a> writes the output to a file descriptor (this includes, for example, sockets).
+<p>
+<a class="el" href="group___printf.html#a12">trio_sprintf</a>, <a class="el" href="group___printf.html#a13">trio_vsprintf</a>, and <a class="el" href="group___printf.html#a14">trio_sprintfv</a> writes the output into <code>buffer</code>.
+<p>
+<a class="el" href="group___printf.html#a15">trio_snprintf</a>, <a class="el" href="group___printf.html#a16">trio_vsnprintf</a>, and <a class="el" href="group___printf.html#a17">trio_snprintfv</a> writes <code>max</code> - 1 characters into <code>buffer</code> followed by a terminating zero character. If <code>max</code> is 1, then <code>buffer</code> will be an empty string. If <code>max</code> is 0, then <code>buffer</code> is left untouched, and can consequently be NULL. The number of characters that would have been written to <code>buffer</code>, had there been sufficient space, is returned.
+<p>
+trio_snprintfcat appends the formatted text at the end of <code>buffer</code>.
+<p>
+trio_asprintf and trio_vasprintf allocates and returns an allocated string in <code>buffer</code> containing the formatted text.
+<p>
+<b>FORMATTING</b>
+<p>
+The <code>format</code> string can contain normal text and conversion indicators. The normal text can be any character except the nil character (\000 = '\0') and the percent character (\045 = '%'). Conversion indicators consists of an indication character (%), followed by zero or more conversion modifiers, and exactly one conversion specifier.
+<p>
+<b>Modifiers</b>
+<p>
+Some modifiers exhibit the same behaviour for all specifiers, other modifiers indicate different behaviours for different specifiers, and other modifiers are only applicable to certain specifiers. The relationship is described for each modifier. The number 9 is used to denotes an arbitrary integer.
+<p>
+<em>Positional</em> ( <code>9$</code> ) [UNIX98]
+<p>
+Normally the arguments supplied to these functions are interpreted incrementially from left to right. Arguments can be referenced specifically in the format string. The modifier n$ selects the nth argument. The first argument is referred as 1$. If this modifier is used, it must be the first modifier after the indication character. n$ can also be used for argument width, precision, and base.
+<p>
+The performance penalty of using positionals is almost neglible (contrary to most other printf implementations).
+<p>
+<ul>
+<li> <em>Reference</em> <em>Mix</em>. Mixing normal and positional specifiers is allowed [TRIO]. For example, <div class="fragment"><pre>
+ trio_printf("%d %3$d %2$d\n", 1, 2, 3);
+</pre></div> results in <div class="fragment"><pre>
+ 1 3 2
+</pre></div> Arguments for the printf family are passed on the stack. On most platforms it is not possible to determine the size of individual stack elements, so it is essential that the format string corresponds exactly to the passed arguments. If this is not the case, incorrect values may be put into the result.</ul>
+<ul>
+<li> <em>Reference</em> <em>Gap</em>. For the same reason it is also essential that the format string does not contain any "gaps" in the positional arguments. For example, <div class="fragment"><pre>
+ trio_printf("%1$d %3$d\n", 1, 2, 3);
+</pre></div> is NOT allowed. The format string parser has no knowledge about whether the second argument is, say, an integer or a long double (which have different sizes). <div class="fragment"><pre>
+</pre></div> [UNIX98] describes this as unspecified behaviour. [TRIO] will detect reference gaps and return an error.</ul>
+<ul>
+<li> <em>Double</em> <em>Reference</em>. It is also not allowed to reference an argument twice or more. For example, <div class="fragment"><pre>
+ trio_printf("%1$d %1$lf\n", 1);
+</pre></div> is NOT allowed, because it references the first argument as two differently sized objects. <div class="fragment"><pre>
+</pre></div> [UNIX98] describes this as unspecified behaviour. [TRIO] will detect double references and return an error.</ul>
+The following two statements are equivalent <div class="fragment"><pre>
+ trio_printf("|%d %s\n|", 42, "meanings");
+ |42 meanings|
+
+ trio_printf("|%1$d %2$s|\n", 42, "meanings");
+ |42 meanings|
+</pre></div>
+<p>
+<em>Width</em> ( <code>9</code> )
+<p>
+Specifies the minimum width of a field. If the fields has less characters than specified by the width, the field will be left adjusted and padded by spaces. The adjustment and padding can be changed by the Alignment ( <code>-</code> ) and Padding ( <code>0</code> ) modifiers.
+<p>
+The width is specified as a number. If an asterix ( <code>*</code> ) is used instead, the width will be read from the argument list.
+<p>
+Prefixes, such as 0x for hexadecimal integers, are part of width. <div class="fragment"><pre>
+ trio_printf("|%10i|\n", 42);
+ | 42|
+</pre></div>
+<p>
+<em>Precision</em> ( .<code>9</code> )
+<p>
+The precision has different semantics for the various data types. The precision specifies the maximum number of printed characters for strings, the number of digits after the decimal-point for floating-point numbers, the number of significant digits for the <code>g</code> (and <code>G)</code> representation of floating-point numbers, the minimum number of printed digits for integers. <div class="fragment"><pre>
+ trio_printf("|%10.8i|%.8i|\n", 42, 42);
+ | 00000042|00000042|
+</pre></div>
+<p>
+<em>Base</em> ( ..<code>9</code> ) [TRIO]
+<p>
+Sets the base that the associated integer must be converted to. The base can be between 2 and 36 (both included). <div class="fragment"><pre>
+ trio_printf("|%10.8.2i|%10..2i|%..2i|\n", 42, 42, 42);
+ | 00101010| 101010|101010|
+
+ trio_printf("|%*.8.*i|\n", 10, 2, 42);
+ | 00101010|
+</pre></div>
+<p>
+<em>Padding</em> ( <code>0</code> )
+<p>
+Integer and floating point numbers are prepended by zeros. The number of leading zeros are determined by the precision. If precision is not present, width is used instead.
+<p>
+<em>Short</em> ( <code>h</code> )
+<p>
+Integer arguments are read as an ( <code>unsigned</code> ) <code>short</code> <code>int</code>. String and character arguments are read as <code>char</code> <code>*</code> and <code>char</code> respectively.
+<p>
+<em>Short</em> <em>short</em> ( <code>hh</code> ) [C99, GNU]
+<p>
+The argument is read as an ( <code>unsigned</code> ) <code>char</code>.
+<p>
+<em>Fixed</em> <em>Size</em> ( <code>I</code> ) [MSVC]
+<p>
+The argument is read as a fixed sized integer. The modifier is followed by a number, which specifies the number of bits in the integer, and can be one of the following
+<p>
+<ul>
+<li> <code>I8</code> <li> <code>I16</code> <li> <code>I32</code> <li> <code>I64</code> (if 64-bits integers are supported)</ul>
+Works only for integers (i, u, d, o, x, X)
+<p>
+<em>Largest</em> ( <code>j</code> ) [C99]
+<p>
+The argument is read as an <code>intmax_t</code> / <code>uintmax_t</code>, which is defined to be the largest signed/unsigned integer.
+<p>
+<em>Long</em> ( <code>l</code> )
+<p>
+An integral argument is read as an ( <code>unsigned</code> ) <code>long</code> <code>int</code>. A string argument is read as a <code>wchar_t</code> <code>*</code>, and output as a multi-byte character sequence.
+<p>
+<em>Long</em> <em>long</em> ( <code>ll</code> ) [C99, UNIX98, GNU]
+<p>
+The argument is read as an ( <code>unsigned</code> ) <code>long</code> <code>long</code> <code>int</code>.
+<p>
+<em>Long</em> <em>double</em> ( <code>L</code> ) [C99, UNIX98, GNU]
+<p>
+The argument is read as a <code>long</code> <code>double</code>.
+<p>
+<em>ptrdiff_t</em> ( <code>t</code> ) [C99]
+<p>
+The argument is read as a <code>ptrdiff_t</code>, which is defined to be the signed integer type of the result of subtracting two pointers.
+<p>
+<em>Quad</em> ( <code>q</code> ) [BSD, GNU]
+<p>
+Corresponds to the long long modifier ( <code>ll</code> ).
+<p>
+<em>Wide</em> ( <code>w</code> ) [MISC]
+<p>
+For a string argument this is equivalent to using the long modifier ( <code>l</code> ).
+<p>
+<em>size_t</em> ( <code>z</code> ) [C99]
+<p>
+The argument is read as a <code>size_t</code>, which is defined to be the type returned by the <code>sizeof</code> operator.
+<p>
+<em>size_t</em> ( <code>Z</code> ) [GNU]
+<p>
+Corresponds to the size_t modifier ( <code>z</code> ).
+<p>
+<em>Alternative</em> ( <code>#</code> )
+<p>
+Prepend radix indicator for hexadecimal, octal, and binary integer numbers and for pointers. Always add a decimal-pointer for floating-point numbers. Escape non-printable characters for strings.
+<p>
+<em>Spacing</em> ( )
+<p>
+Prepend leading spaces when necessary.
+<p>
+<em>Sign</em> ( <code>+</code> )
+<p>
+Always prepend a sign to numbers. Normally only the negative sign is prepended to a number. With this modifier the positive sign may also be prepended.
+<p>
+<em>Alignment</em> ( <code>-</code> )
+<p>
+The output will be left-justified in the field specified by the width.
+<p>
+<em>Argument</em> ( <code>*</code> )
+<p>
+Width, precision, or base is read from the argument list, rather than from the formatting string.
+<p>
+<em>Quote</em> / <em>Grouping</em> ( ' <code>)</code> [MISC]
+<p>
+Groups integers and the integer-part of floating-point numbers according to the locale. Quote strings and characters.
+<p>
+<em>Sticky</em> ( <code>!</code> ) [TRIO]
+<p>
+The modifiers listed for the current specifier will be reused by subsequent specifiers of the same group. The following specifier groups exists <ul>
+<li> Integer ( <code>i</code>, <code>u</code>, <code>d</code>, <code>o</code>, <code>x</code>, <code>X</code> ) <li> Floating-point ( <code>f</code>, <code>F</code>, <code>e</code>, <code>E</code>, <code>g</code>, <code>G</code>, <code>a</code>, <code>A</code> ) <li> Character ( <code>c</code> ) <li> String ( <code>s</code> ) <li> Pointer ( <code>p</code> ) <li> Count ( <code>n</code> ) <li> Errno ( <code>m</code> ) <li> Group ( <code>[]</code> )</ul>
+The sticky modifiers are active until superseeded by other sticky modifiers, or the end of the format string is reached. Local modifiers overrides sticky modifiers for the given specifier only. <div class="fragment"><pre>
+ trio_printf("|%!08#x|%04x|%x|\n", 42, 42, 42);
+ |0x00002a|0x2a|0x00002a|
+</pre></div>
+<p>
+<b>Specifiers</b>
+<p>
+<em>Percent</em> ( <code>%</code> )
+<p>
+Produce a percent ( <code>%</code> ) character. This is used to quote the indication character. No modifiers are allowed. The full syntax is <code>%%</code>. <div class="fragment"><pre>
+ trio_printf("Percent is %%\n");
+ Percent is %
+</pre></div>
+<p>
+<em>Hex</em> <em>floats</em> ( <code>a</code>, <code>A</code> ) [C99]
+<p>
+Output a hexadecimal (base 16) representation of a floating point number. The number is automatically preceeded by <code>0x</code> ( or <code>0X</code> ). The exponent is <code>p</code> ( or <code>P</code> ). <div class="fragment"><pre>
+ trio_printf("|%a|%A|\n", 3.1415, 3.1415e20);
+ |0x3.228bc|0X3.228BCP+14|
+</pre></div>
+<p>
+<em>Binary</em> <em>numbers</em> ( <code>b</code>, <code>B</code> ) [MISC - SCO UnixWare 7]
+<p>
+DEPRECATED: Use Base modifier <code>%..2i</code> instead.
+<p>
+<em>Character</em> ( <code>c</code> )
+<p>
+Output a single character.
+<p>
+<ul>
+<li> Quote ( ' <code>)</code> [TRIO]. Quote the character.</ul>
+<em>Decimal</em> ( <code>d</code> )
+<p>
+Output a decimal (base 10) representation of a number.
+<p>
+<ul>
+<li> Grouping ( ' <code>)</code> [TRIO]. The number is separated by the locale thousand separator. <div class="fragment"><pre>
+ trio_printf("|%'ld|\n", 1234567);
+ |1,234,567|
+</pre></div></ul>
+<em>Floating-point</em> ( <code>e</code>, <code>E)</code>
+<p>
+Output a decimal floating-point number. The style is <code>[-]9.99e[-]9</code>, where <ul>
+<li> <code>[-]9.99</code> is the mantissa (as described for the <code>f</code>, <code>F</code> specifier), and <li> <code>e[-]9</code> is the exponent indicator (either <code>e</code> or <code>E</code>, depending on the floating-point specifier), followed by an optional sign and the exponent</ul>
+If the precision is wider than the maximum number of digits that can be represented by the floating-point unit, then the number will be adequately rounded. For example, assuming DBL_DIG is 15 <div class="fragment"><pre>
+ trio_printf("|%.18e|\n", (1.0 / 3.0));
+ |3.333333333333333000e-01|
+</pre></div>
+<p>
+<em>Floating-point</em> ( <code>f</code>, <code>F</code> )
+<p>
+Output a decimal floating-point number. The style is <code>[-]9.99</code>, where <ul>
+<li> <code>[-]</code> is an optional sign (either <code>+</code> or <code>-)</code>, <li> <code>9</code> is the integer-part (possibly interspersed with thousand-separators), <li> . <code>is</code> the decimal-point (depending on the locale), and <li> <code>99</code> is the fractional-part.</ul>
+If more digits are needed to output the number, than can be represented with the accuracy of the floating-point unit, then the number will be adequately rounded. For example, assuming that DBL_DIG is 15 <div class="fragment"><pre>
+ trio_printf("|%f|\n", (2.0 / 3.0) * 1E18);
+ |666666666666666700.000000|
+</pre></div>
+<p>
+The following modifiers holds a special meaning for this specifier <ul>
+<li> Alternative ( <code>#</code> ) [C99]. Add decimal point. <li> Grouping ( ' <code>)</code> [TRIO]. Group integer part of number into thousands (according to locale).</ul>
+<em>Floating-point</em> ( <code>g</code>, <code>G)</code>
+<p>
+Output a decimal floating-point representation of a number. The format of either the <code>f</code>, <code>F</code> specifier or the <code>e</code>, <code>E</code> specifier is used, whatever produces the shortest result.
+<p>
+<em>Integer</em> ( <code>i</code> )
+<p>
+Output a signed integer. Default base is 10.
+<p>
+<em>Errno</em> ( <code>m</code> ) [GNU]
+<p>
+<em>Count</em> ( <code>n</code> )
+<p>
+Insert into the location pointed to by the argument, the number of octets written to the output so far.
+<p>
+<em>Octal</em> ( <code>o</code> )
+<p>
+Output an octal (base 8) representation of a number.
+<p>
+<em>Pointer</em> ( <code>p</code> )
+<p>
+Ouput the address of the argument. The address is printed as a hexadecimal number. If the argument is the NULL pointer the text <code>(nil)</code> will be used instead. <ul>
+<li> Alternative ( <code>#</code> ) [TRIO]. Prepend 0x</ul>
+<em>String</em> ( <code>s</code>, <code>S</code> )
+<p>
+Output a string. The argument must point to a zero terminated string. If the argument is the NULL pointer the text <code>(nil)</code> will be used instead. <code>S</code> is equivalent to <code>ls</code>. <ul>
+<li> Alternative ( <code>#</code> ) [TRIO]. Escape non-printable characters.</ul>
+Non-printable characters are converted into C escapes, or hexadecimal numbers where no C escapes exists for the character. The C escapes, the hexadecimal number, and all backslashes are prepended by a backslash ( <code>\</code> ). The supported C escapes are <ul>
+<li> <code>\a</code> (\007) = alert <li> <code>\b</code> (\010) = backspace <li> <code>\f</code> (\014) = formfeed <li> <code>\n</code> (\012) = newline <li> <code>\r</code> (\015) = carriage return <li> <code>\t</code> (\011) = horizontal tab <li> <code>\v</code> (\013) = vertical tab</ul>
+<div class="fragment"><pre>
+ trio_printf("|One %s Three|One %'s Three|\n", "Two", "Two");
+ |One Two Three|One "Two" Three|
+
+ trio_printf("|Argument missing %s|\n", NULL);
+ |Argument missing (nil)|
+
+ trio_printf("|%#s|\n", "\007 \a.");
+ |\a \a.|
+</pre></div>
+<p>
+<em>Unsigned</em> ( <code>u</code> )
+<p>
+Output an unsigned integer. Default base is 10.
+<p>
+<em>Hex</em> ( <code>x</code>, <code>X</code> )
+<p>
+Output a hexadecimal (base 16) representation of a number.
+<p>
+<ul>
+<li> Alternative ( <code>#</code> ). Preceed the number by <code>0x</code> ( or <code>0X</code> ). The two characters are counted as part of the width.</ul>
+<em>User-defined</em> ( <code>&lt;&gt;</code> )
+<p>
+Invoke user-defined formatting. See <a class="el" href="group___user_defined.html#a0">trio_register</a> for further information.
+<p>
+<b>RETURN</b> <b>VALUES</b>
+<p>
+All functions returns the number of outputted characters. If an error occured then a negative error code is returned [TRIO]. Note that this is a deviation from the standard, which simply returns -1 (or EOF) and errno set appropriately. The error condition can be detected by checking whether the function returns a negative number or not, and the number can be parsed with the following macros. The error codes are primarily intended as debugging aide for the developer.
+<p>
+<ul>
+<li> TRIO_EINVAL: Invalid argument. <li> TRIO_ETOOMANY: Too many arguments. <li> TRIO_EDBLREF: Double argument reference. <li> TRIO_EGAP: Argument reference gap. <li> TRIO_ENOMEM: Out of memory. <li> TRIO_ERANGE: Invalid range. <li> TRIO_ERRNO: The error is specified by the errno variable.</ul>
+Example: <div class="fragment"><pre>
+ int rc;
+
+ rc = trio_printf("%r\n", 42);
+ if (rc &lt; 0) {
+ if (TRIO_ERROR_CODE(rc) != TRIO_EOF) {
+ trio_printf("Error: %s at position %d\n",
+ TRIO_ERROR_NAME(rc),
+ TRIO_ERROR_POSITION(rc));
+ }
+ }
+</pre></div>
+<p>
+<b>SEE</b> <b>ALSO</b>
+<p>
+<em>trio_scanf</em>, <em>trio_register</em>.
+<p>
+<b>NOTES</b>
+<p>
+The printfv family uses an array rather than the stack to pass arguments. This means that <code>short</code> <code>int</code> and <code>float</code> values will not be handled by the default argument promotion in C. Instead, these values must be explicitly converted with the Short (h) modifier in both cases.
+<p>
+Example: <div class="fragment"><pre>
+ void *array[2];
+ float float_number = 42.0;
+ short short_number = 42;
+
+ array[0] = &amp;float_number;
+ array[1] = &amp;short_number;
+
+ trio_printfv("%hf %hd\n", array); /* CORRECT */
+ trio_printfv("%f %d\n", array); /* WRONG */
+</pre></div>
+<p>
+<b>CONFORMING</b> <b>TO</b>
+<p>
+Throughout this document the following abbreviations have been used to indicate what standard a feature conforms to. If nothing else is indicated ANSI C (C89) is assumed.
+<p>
+<ul>
+<li> [C89] ANSI X3.159-1989 <li> [C99] ISO/IEC 9899:1999 <li> [UNIX98] The Single UNIX Specification, Version 2 <li> [BSD] 4.4BSD <li> [GNU] GNU libc <li> [MSVC] Microsoft Visual C <li> [MISC] Other non-standard sources <li> [TRIO] Extensions specific for this package </ul>
+<hr><h2>Function Documentation</h2>
+<a name="a6" doxytag="trio.c::trio_dprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_dprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file descriptor.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>fd</em>&nbsp;</td><td>
+File descriptor. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a8" doxytag="trio.c::trio_dprintfv"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_dprintfv </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_pointer_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file descriptor.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>fd</em>&nbsp;</td><td>
+File descriptor. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a3" doxytag="trio.c::trio_fprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_fprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">FILE *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>file</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>file</em>&nbsp;</td><td>
+File pointer. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a5" doxytag="trio.c::trio_fprintfv"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_fprintfv </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">FILE *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>file</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_pointer_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>file</em>&nbsp;</td><td>
+File pointer. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a0" doxytag="trio.c::trio_printf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_printf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to standard output stream.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a2" doxytag="trio.c::trio_printfv"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_printfv </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_pointer_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to standard output stream.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a15" doxytag="trio.c::trio_snprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_snprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print at most <code>max</code> characters to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to print. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a17" doxytag="trio.c::trio_snprintfv"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_snprintfv </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_pointer_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print at most <code>max</code> characters to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to print. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a12" doxytag="trio.c::trio_sprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_sprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a14" doxytag="trio.c::trio_sprintfv"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_sprintfv </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>trio_pointer_t *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a7" doxytag="trio.c::trio_vdprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_vdprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>va_list&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file descriptor.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>fd</em>&nbsp;</td><td>
+File descriptor. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a4" doxytag="trio.c::trio_vfprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_vfprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">FILE *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>file</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>va_list&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to file.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>file</em>&nbsp;</td><td>
+File pointer. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a1" doxytag="trio.c::trio_vprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_vprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>va_list&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to standard output stream.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a16" doxytag="trio.c::trio_vsnprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_vsnprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>va_list&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print at most <code>max</code> characters to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to print. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a13" doxytag="trio.c::trio_vsprintf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_vsprintf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>va_list&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>args</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Print to string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>buffer</em>&nbsp;</td><td>
+Output string. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>args</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of printed characters. </dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/group___scanf.html b/trio/html/group___scanf.html
new file mode 100644
index 00000000..0c8d9d2b
--- /dev/null
+++ b/trio/html/group___scanf.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>Formatted Scanning Functions.</h1>Variations of formatted scanning functions.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___scanf.html#a0">trio_scanf</a> (const char *format,...)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Scan characters from standard input stream.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Variations of formatted scanning functions.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;trio.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b>
+<p>
+This documentation is incomplete. The documentation of the scanf family in [C99] and [UNIX98] also applies to the trio counterparts.
+<p>
+<b>SCANNING</b>
+<p>
+The scanning is controlled by the format string. The format string can contain normal text and conversion indicators. The normal text can be any character except the nil character (\000) and the percent character (\045 = '%'). Conversion indicators consists of an indication character (%), followed by zero or more conversion modifiers, and exactly one conversion specifier.
+<p>
+<b>Modifiers</b>
+<p>
+<em>Positional</em> ( <code>9$</code> ) [UNIX98]
+<p>
+See <a class="el" href="group___printf.html#a0">trio_printf</a>.
+<p>
+<b>Specifiers</b>
+<p>
+<em>Percent</em> ( <code>%</code> )
+<p>
+<em>Character</em> ( <code>c</code> )
+<p>
+<em>Decimal</em> ( <code>d</code> )
+<p>
+<em>Floating-point</em> ( <code>a</code>, <code>A</code>, <code>e</code>, <code>E</code>, <code>f</code>, <code>F</code>, <code>g</code>, <code>G</code> )
+<p>
+<em>Integer</em> ( <code>i</code> )
+<p>
+<em>Count</em> ( <code>n</code> )
+<p>
+<em>Octal</em> ( <code>o</code> )
+<p>
+<em>Pointer</em> ( <code>p</code> )
+<p>
+<em>String</em> ( <code>s</code> )
+<p>
+<em>Unsigned</em> ( <code>u</code> )
+<p>
+<em>Hex</em> ( <code>x</code>, <code>X</code> )
+<p>
+<em>Scanlist</em> ( <code>[]</code> )
+<p>
+Scanlist Exclusion (<code>^</code> )
+<p>
+Scanlist Range ( <code>-</code> ) [TRIO]
+<p>
+<ul>
+<li> Only increasing ranges, i.e. <code>[a-b]</code>, but not <code>[b-a]</code>. <li> Transitive ranges, ie. <code>[a-b-c]</code> equals <code>[a-c]</code>. <li> Trailing minus, ie. <code>[a-]</code> is interpreted as an <code>a</code> and a <code>-</code>. <li> Duplicates are ignored.</ul>
+Scanlist Equivalence Class Expression ( <code>[</code>= =<code>]</code> ) [TRIO]
+<p>
+Locale dependent (LC_COLLATE). Only one expression can appear inside the delimiters. <ul>
+<li> <code>[=a=]</code> All letters in the same equivalence class as the letter <code>a</code>. <div class="fragment"><pre>
+ trio_scanf("%[[=a=]b]\n", buffer);
+ trio_scanf("%[[=a=][=b=]]\n", buffer);
+</pre></div></ul>
+Scanlist Character Class Expression ( <code>[</code>: :<code>])</code> [TRIO] Locale dependent (LC_CTYPE). Only one expression can appear inside the delimiters. <ul>
+<li> <code>[:alnum:]</code> Same as <code>[:alpha:]</code> and <code>[:digit:]</code> <li> <code>[:alpha:]</code> Same as <code>[:lower:]</code> and <code>[:upper:]</code> <li> <code>[:cntrl:]</code> Control characters <li> <code>[:digit:]</code> Decimal digits <li> <code>[:graph:]</code> Printable characters except space <li> <code>[:lower:]</code> Lower case alphabetic letters <li> <code>[:print:]</code> Printable characters <li> <code>[:punct:]</code> Punctuation <li> <code>[:space:]</code> Whitespace characters <li> <code>[:upper:]</code> Upper case alphabetic letters <li> <code>[:xdigit:]</code> Hexadecimal digits <div class="fragment"><pre>
+ trio_scanf("%[[:alnum:]]\n", buffer);
+ trio_scanf("%[[:alpha:][:digit:]]\n", buffer);
+</pre></div></ul>
+<b>RETURN</b> <b>VALUES</b>
+<p>
+<b>SEE</b> <b>ALSO</b>
+<p>
+<a class="el" href="group___printf.html#a0">trio_printf</a> <hr><h2>Function Documentation</h2>
+<a name="a0" doxytag="trio.c::trio_scanf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_scanf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>...&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Scan characters from standard input stream.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>...</em>&nbsp;</td><td>
+Arguments. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of scanned characters. </dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/group___special_quantities.html b/trio/html/group___special_quantities.html
new file mode 100644
index 00000000..cdc294f2
--- /dev/null
+++ b/trio/html/group___special_quantities.html
@@ -0,0 +1,390 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>Special Quantifies.</h1>Functions to detect and fabricate special quantities in floating-point numbers.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a1">trio_nzero</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Generate negative zero.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a2">trio_pinf</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Generate positive infinity.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a3">trio_ninf</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Generate negative infinity.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>double&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a4">trio_nan</a> (void)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Generate NaN.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a5">trio_isnan</a> (double number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Check for NaN.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a6">trio_isinf</a> (double number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Check for infinity.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a7">trio_isfinite</a> (double number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Check for finity.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a9">trio_signbit</a> (double number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Examine the sign of a number.</em> <a href="#a9">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="group___special_quantities.html#a10">trio_fpclassify</a> (double number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Examine the class of a number.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions to detect and fabricate special quantities in floating-point numbers.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;trionan.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b>
+<p>
+Certain arithmetical operations does not result in normal numbers. Instead they result in special quantities that must be handled differently by the floating-point hardware. These includes Infinity and Not-A-Number (NaN).
+<p>
+For example, 0/0 (zero divided by zero) yields NaN. Any operation which involves a NaN will result in NaN. Any comparison involving NaN will be unsuccessful, even if NaN is compared to NaN.
+<p>
+These special quantities are represented with special bit patterns by the floating-point hardware, and this bit patterns depend on the hardware. There may even be hardware that does not support special quantities, so the functions in this module are not guaranteed to work on all platforms.
+<p>
+The approach used in this module is to (in decreasing order of importance) <ul>
+<li> Use C99 functionality when available. <li> Use IEEE 754-1985 bit patterns if possible. <li> Use platform-specific techniques.</ul>
+<b>NOTES</b>
+<p>
+This module does not depend on the rest of trio, and can thus be reused separately. The following files are necessary: <ul>
+<li> <code>triodef.h</code> <li> <code>trionan.h</code> <li> <code>trionan.c</code> </ul>
+<hr><h2>Function Documentation</h2>
+<a name="a10" doxytag="trionan.c::trio_fpclassify"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_fpclassify </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">double&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Examine the class of a number.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>number</em>&nbsp;</td><td>
+An arbitrary floating-point number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Enumerable value indicating the class of <code>number</code> </dl> </td>
+ </tr>
+</table>
+<a name="a7" doxytag="trionan.c::trio_isfinite"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_isfinite </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">double&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Check for finity.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>number</em>&nbsp;</td><td>
+An arbitrary floating-point number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating whether or not the number is a finite. </dl> </td>
+ </tr>
+</table>
+<a name="a6" doxytag="trionan.c::trio_isinf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_isinf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">double&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Check for infinity.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>number</em>&nbsp;</td><td>
+An arbitrary floating-point number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+1 if positive infinity, -1 if negative infinity, 0 otherwise. </dl> </td>
+ </tr>
+</table>
+<a name="a5" doxytag="trionan.c::trio_isnan"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_isnan </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">double&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Check for NaN.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>number</em>&nbsp;</td><td>
+An arbitrary floating-point number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating whether or not the number is a NaN. </dl> </td>
+ </tr>
+</table>
+<a name="a4" doxytag="trionan.c::trio_nan"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double trio_nan </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Generate NaN.
+<p>
+<dl compact><dt><b>
+Returns: </b><dd>
+Floating-point representation of NaN. </dl> </td>
+ </tr>
+</table>
+<a name="a3" doxytag="trionan.c::trio_ninf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double trio_ninf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Generate negative infinity.
+<p>
+<dl compact><dt><b>
+Returns: </b><dd>
+Floating-point value of negative infinity. </dl> </td>
+ </tr>
+</table>
+<a name="a1" doxytag="trionan.c::trio_nzero"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double trio_nzero </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Generate negative zero.
+<p>
+<dl compact><dt><b>
+Returns: </b><dd>
+Floating-point representation of negative zero. </dl> </td>
+ </tr>
+</table>
+<a name="a2" doxytag="trionan.c::trio_pinf"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double trio_pinf </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Generate positive infinity.
+<p>
+<dl compact><dt><b>
+Returns: </b><dd>
+Floating-point representation of positive infinity. </dl> </td>
+ </tr>
+</table>
+<a name="a9" doxytag="trionan.c::trio_signbit"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> int trio_signbit </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">double&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Examine the sign of a number.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>number</em>&nbsp;</td><td>
+An arbitrary floating-point number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating whether or not the number has the sign bit set (i.e. is negative). </dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/group___static_strings.html b/trio/html/group___static_strings.html
new file mode 100644
index 00000000..840f36a5
--- /dev/null
+++ b/trio/html/group___static_strings.html
@@ -0,0 +1,1809 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>Static String Functions.</h1>Replacements for the standard C string functions.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a0">trio_create</a> (size_t size)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Create new string.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC void&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a1">trio_destroy</a> (char *string)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Destroy string.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC size_t&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a2">trio_length</a> (const char *string)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Count the number of characters in a string.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a3">trio_append</a> (char *target, const char *source)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Append <code>source</code> at the end of <code>target</code>.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a4">trio_append_max</a> (char *target, size_t max, const char *source)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Append at most <code>max</code> characters from <code>source</code> to <code>target</code>.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a5">trio_contains</a> (const char *string, const char *substring)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Determine if a string contains a substring.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a6">trio_copy</a> (char *target, const char *source)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Copy <code>source</code> to <code>target</code>.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a7">trio_copy_max</a> (char *target, size_t max, const char *source)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Copy at most <code>max</code> characters from <code>source</code> to <code>target</code>.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a9">trio_duplicate</a> (const char *source)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Duplicate <code>source</code>.</em> <a href="#a9">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a10">trio_duplicate_max</a> (const char *source, size_t max)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Duplicate at most <code>max</code> characters of <code>source</code>.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a11">trio_equal</a> (const char *first, const char *second)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare if two strings are equal.</em> <a href="#a11">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a12">trio_equal_case</a> (const char *first, const char *second)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare if two strings are equal.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a13">trio_equal_case_max</a> (const char *first, size_t max, const char *second)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare if two strings up until the first <code>max</code> characters are equal.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a14">trio_equal_locale</a> (const char *first, const char *second)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare if two strings are equal.</em> <a href="#a14">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a15">trio_equal_max</a> (const char *first, size_t max, const char *second)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare if two strings up until the first <code>max</code> characters are equal.</em> <a href="#a15">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC const char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a16">trio_error</a> (int error_number)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Provide a textual description of an error code (errno).</em> <a href="#a16">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC size_t&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a17">trio_format_date_max</a> (char *target, size_t max, const char *format, const struct tm *datetime)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Format the date/time according to <code>format</code>.</em> <a href="#a17">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC unsigned <br>
+long&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a18">trio_hash</a> (const char *string, int type)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Calculate a hash value for a string.</em> <a href="#a18">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a19">trio_index</a> (const char *string, int character)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Find first occurrence of a character in a string.</em> <a href="#a19">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a20">trio_index_last</a> (const char *string, int character)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Find last occurrence of a character in a string.</em> <a href="#a20">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a21">trio_lower</a> (char *target)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert the alphabetic letters in the string to lower-case.</em> <a href="#a21">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a22">trio_match</a> (const char *string, const char *pattern)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare two strings using wildcards.</em> <a href="#a22">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a23">trio_match_case</a> (const char *string, const char *pattern)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Compare two strings using wildcards.</em> <a href="#a23">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC size_t&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a24">trio_span_function</a> (char *target, const char *source, int(*Function)(int))</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Execute a function on each character in string.</em> <a href="#a24">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a25">trio_substring</a> (const char *string, const char *substring)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Search for a substring in a string.</em> <a href="#a25">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a26">trio_substring_max</a> (const char *string, size_t max, const char *substring)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Search for a substring in the first <code>max</code> characters of a string.</em> <a href="#a26">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC char *&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a27">trio_tokenize</a> (char *string, const char *delimiters)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Tokenize string.</em> <a href="#a27">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC trio_long_double_t&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a28">trio_to_long_double</a> (const char *source, char **endp)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert string to floating-point number.</em> <a href="#a28">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC double&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a29">trio_to_double</a> (const char *source, char **endp)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert string to floating-point number.</em> <a href="#a29">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC float&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a30">trio_to_float</a> (const char *source, char **endp)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert string to floating-point number.</em> <a href="#a30">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC long&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a31">trio_to_long</a> (const char *string, char **endp, int base)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert string to signed integer.</em> <a href="#a31">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC unsigned <br>
+long&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a32">trio_to_unsigned_long</a> (const char *string, char **endp, int base)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert string to unsigned integer.</em> <a href="#a32">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>TRIO_STRING_PUBLIC int&nbsp;</td><td valign=bottom><a class="el" href="group___static_strings.html#a33">trio_upper</a> (char *target)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Convert the alphabetic letters in the string to upper-case.</em> <a href="#a33">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Replacements for the standard C string functions.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;triostr.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b>
+<p>
+This package renames, fixes, and extends the standard C string handling functions.
+<p>
+<b>Naming</b>
+<p>
+Renaming is done to provide more clear names, to provide a consistant naming and argument policy, and to hide portability issues.
+<p>
+<ul>
+<li> All functions starts with "trio_". <li> Target is always the first argument, if present, except where the target is optional, such as <a class="el" href="group___static_strings.html#a29">trio_to_double</a>. <li> Functions requiring a size for target includes "_max" in its name, and the size is always the second argument. <li> Functions performing case-sensitive operations includes "_case" in its name.</ul>
+<b>Fixing</b>
+<p>
+Fixing is done to avoid subtle error conditions. For example, <code>strncpy</code> does not terminate the result with a zero if the source string is bigger than the maximal length, so technically the result is not a C string anymore. <a class="el" href="group___static_strings.html#a7">trio_copy_max</a> makes sure that the result is zero terminated.
+<p>
+<b>Extending</b>
+<p>
+Extending is done to provide a richer set of fundamental functions. This includes functionality such as wildcard matching ( <code>trio_match</code> ) and calculation of hash values ( <code>trio_hash</code> ). <hr><h2>Function Documentation</h2>
+<a name="a3" doxytag="triostr.c::trio_append"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_append </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Append <code>source</code> at the end of <code>target</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl><dl compact><dt><b>
+Precondition: </b><dd>
+<code>target</code> must point to a memory chunk with sufficient room to contain the <code>target</code> string and <code>source</code> string. <dd>
+No boundary checking is performed, so insufficient memory will result in a buffer overrun. </dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a4" doxytag="triostr.c::trio_append_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_append_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Append at most <code>max</code> characters from <code>source</code> to <code>target</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to append. </td></tr>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl><dl compact><dt><b>
+Precondition: </b><dd>
+<code>target</code> must point to a memory chuck with sufficient room to contain the <code>target</code> string and the <code>source</code> string (at most <code>max</code> characters). <dd>
+No boundary checking is performed, so insufficient memory will result in a buffer overrun. </dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a5" doxytag="triostr.c::trio_contains"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_contains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>substring</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Determine if a string contains a substring.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>substring</em>&nbsp;</td><td>
+String to be found. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure. </dl> </td>
+ </tr>
+</table>
+<a name="a6" doxytag="triostr.c::trio_copy"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_copy </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Copy <code>source</code> to <code>target</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl><dl compact><dt><b>
+Precondition: </b><dd>
+<code>target</code> must point to a memory chunk with sufficient room to contain the <code>source</code> string. <dd>
+No boundary checking is performed, so insufficient memory will result in a buffer overrun. </dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a7" doxytag="triostr.c::trio_copy_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_copy_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Copy at most <code>max</code> characters from <code>source</code> to <code>target</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to append. </td></tr>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl><dl compact><dt><b>
+Precondition: </b><dd>
+<code>target</code> must point to a memory chunk with sufficient room to contain the <code>source</code> string (at most <code>max</code> characters). <dd>
+No boundary checking is performed, so insufficient memory will result in a buffer overrun. </dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a0" doxytag="triostr.c::trio_create"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_create </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">size_t&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>size</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Create new string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>size</em>&nbsp;</td><td>
+Size of new string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Pointer to string, or NULL if allocation failed. </dl> </td>
+ </tr>
+</table>
+<a name="a1" doxytag="triostr.c::trio_destroy"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC void trio_destroy </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>string</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Destroy string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be freed. </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a9" doxytag="triostr.c::trio_duplicate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_duplicate </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>source</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Duplicate <code>source</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+A copy of the <code>source</code> string.</dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a10" doxytag="triostr.c::trio_duplicate_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_duplicate_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Duplicate at most <code>max</code> characters of <code>source</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to duplicate. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+A copy of the <code>source</code> string.</dl><dl compact><dt><b>
+Postcondition: </b><dd>
+<code>target</code> will be zero terminated. </dl> </td>
+ </tr>
+</table>
+<a name="a11" doxytag="triostr.c::trio_equal"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_equal </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>second</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare if two strings are equal.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>first</em>&nbsp;</td><td>
+First string. </td></tr>
+<tr><td valign=top><em>second</em>&nbsp;</td><td>
+Second string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean indicating whether the two strings are equal or not.</dl>Case-insensitive comparison. </td>
+ </tr>
+</table>
+<a name="a12" doxytag="triostr.c::trio_equal_case"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_equal_case </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>second</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare if two strings are equal.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>first</em>&nbsp;</td><td>
+First string. </td></tr>
+<tr><td valign=top><em>second</em>&nbsp;</td><td>
+Second string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean indicating whether the two strings are equal or not.</dl>Case-sensitive comparison. </td>
+ </tr>
+</table>
+<a name="a13" doxytag="triostr.c::trio_equal_case_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_equal_case_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>second</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare if two strings up until the first <code>max</code> characters are equal.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>first</em>&nbsp;</td><td>
+First string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to compare. </td></tr>
+<tr><td valign=top><em>second</em>&nbsp;</td><td>
+Second string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean indicating whether the two strings are equal or not.</dl>Case-sensitive comparison. </td>
+ </tr>
+</table>
+<a name="a14" doxytag="triostr.c::trio_equal_locale"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_equal_locale </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>second</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare if two strings are equal.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>first</em>&nbsp;</td><td>
+First string. </td></tr>
+<tr><td valign=top><em>second</em>&nbsp;</td><td>
+Second string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean indicating whether the two strings are equal or not.</dl>Collating characters are considered equal. </td>
+ </tr>
+</table>
+<a name="a15" doxytag="triostr.c::trio_equal_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_equal_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>first</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>second</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare if two strings up until the first <code>max</code> characters are equal.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>first</em>&nbsp;</td><td>
+First string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to compare. </td></tr>
+<tr><td valign=top><em>second</em>&nbsp;</td><td>
+Second string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean indicating whether the two strings are equal or not.</dl>Case-insensitive comparison. </td>
+ </tr>
+</table>
+<a name="a16" doxytag="triostr.c::trio_error"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC const char* trio_error </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>error_number</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Provide a textual description of an error code (errno).
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>error_number</em>&nbsp;</td><td>
+Error number. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Textual description of <code>error_number</code>. </dl> </td>
+ </tr>
+</table>
+<a name="a17" doxytag="triostr.c::trio_format_date_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC size_t trio_format_date_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const struct tm *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>datetime</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Format the date/time according to <code>format</code>.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum number of characters to format. </td></tr>
+<tr><td valign=top><em>format</em>&nbsp;</td><td>
+Formatting string. </td></tr>
+<tr><td valign=top><em>datetime</em>&nbsp;</td><td>
+Date/time structure. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of formatted characters.</dl>The formatting string accepts the same specifiers as the standard C function strftime. </td>
+ </tr>
+</table>
+<a name="a18" doxytag="triostr.c::trio_hash"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC unsigned long trio_hash </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>type</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Calculate a hash value for a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be calculated on. </td></tr>
+<tr><td valign=top><em>type</em>&nbsp;</td><td>
+Hash function. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Calculated hash value.</dl><code>type</code> can be one of the following <ul>
+<li> <code>TRIO_HASH_PLAIN</code> Plain hash function. </ul>
+ </td>
+ </tr>
+</table>
+<a name="a19" doxytag="triostr.c::trio_index"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_index </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>character</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Find first occurrence of a character in a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>character</em>&nbsp;</td><td>
+Character to be found. </td></tr>
+<tr><td valign=top><em>A</em>&nbsp;</td><td>
+pointer to the found character, or NULL if character was not found. </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a20" doxytag="triostr.c::trio_index_last"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_index_last </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>character</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Find last occurrence of a character in a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>character</em>&nbsp;</td><td>
+Character to be found. </td></tr>
+<tr><td valign=top><em>A</em>&nbsp;</td><td>
+pointer to the found character, or NULL if character was not found. </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a2" doxytag="triostr.c::trio_length"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC size_t trio_length </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>string</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Count the number of characters in a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to measure. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of characters in @string. </dl> </td>
+ </tr>
+</table>
+<a name="a21" doxytag="triostr.c::trio_lower"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_lower </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>target</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert the alphabetic letters in the string to lower-case.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of processed characters (converted or not). </dl> </td>
+ </tr>
+</table>
+<a name="a22" doxytag="triostr.c::trio_match"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_match </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>pattern</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare two strings using wildcards.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>pattern</em>&nbsp;</td><td>
+Pattern, including wildcards, to search for. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl>Case-insensitive comparison.
+<p>
+The following wildcards can be used <ul>
+<li> <code>*</code> Match any number of characters. <li> ? <code>Match</code> a single character. </ul>
+ </td>
+ </tr>
+</table>
+<a name="a23" doxytag="triostr.c::trio_match_case"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_match_case </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>pattern</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Compare two strings using wildcards.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>pattern</em>&nbsp;</td><td>
+Pattern, including wildcards, to search for. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Boolean value indicating success or failure.</dl>Case-sensitive comparison.
+<p>
+The following wildcards can be used <ul>
+<li> <code>*</code> Match any number of characters. <li> ? <code>Match</code> a single character. </ul>
+ </td>
+ </tr>
+</table>
+<a name="a24" doxytag="triostr.c::trio_span_function"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC size_t trio_span_function </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>target</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int(*&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>Function</em>)(int)</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Execute a function on each character in string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+Target string. </td></tr>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+Source string. </td></tr>
+<tr><td valign=top><em>Function</em>&nbsp;</td><td>
+Function to be executed. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Number of processed characters. </dl> </td>
+ </tr>
+</table>
+<a name="a25" doxytag="triostr.c::trio_substring"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_substring </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>substring</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Search for a substring in a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>substring</em>&nbsp;</td><td>
+String to be found. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Pointer to first occurrence of <code>substring</code> in <code>string</code>, or NULL if no match was found. </dl> </td>
+ </tr>
+</table>
+<a name="a26" doxytag="triostr.c::trio_substring_max"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_substring_max </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>size_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>max</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>substring</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Search for a substring in the first <code>max</code> characters of a string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be searched. </td></tr>
+<tr><td valign=top><em>max</em>&nbsp;</td><td>
+Maximum characters to be searched. </td></tr>
+<tr><td valign=top><em>substring</em>&nbsp;</td><td>
+String to be found. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Pointer to first occurrence of <code>substring</code> in <code>string</code>, or NULL if no match was found. </dl> </td>
+ </tr>
+</table>
+<a name="a29" doxytag="triostr.c::trio_to_double"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC double trio_to_double </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char **&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>endp</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert string to floating-point number.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+<tr><td valign=top><em>endp</em>&nbsp;</td><td>
+Pointer to end of the converted string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+A floating-point number.</dl>See <a class="el" href="group___static_strings.html#a28">trio_to_long_double</a>. </td>
+ </tr>
+</table>
+<a name="a30" doxytag="triostr.c::trio_to_float"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC float trio_to_float </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char **&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>endp</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert string to floating-point number.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+<tr><td valign=top><em>endp</em>&nbsp;</td><td>
+Pointer to end of the converted string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+A floating-point number.</dl>See <a class="el" href="group___static_strings.html#a28">trio_to_long_double</a>. </td>
+ </tr>
+</table>
+<a name="a31" doxytag="triostr.c::trio_to_long"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC long trio_to_long </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char **&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>endp</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>base</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert string to signed integer.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+<tr><td valign=top><em>endp</em>&nbsp;</td><td>
+Pointer to end of converted string. </td></tr>
+<tr><td valign=top><em>base</em>&nbsp;</td><td>
+Radix number of number. </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a28" doxytag="triostr.c::trio_to_long_double"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC trio_long_double_t trio_to_long_double </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char **&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>endp</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert string to floating-point number.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>source</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+<tr><td valign=top><em>endp</em>&nbsp;</td><td>
+Pointer to end of the converted string. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+A floating-point number.</dl>The following Extended Backus-Naur form is used <div class="fragment"><pre>
+ double ::= [ &lt;sign&gt; ]
+ ( &lt;number&gt; |
+ &lt;number&gt; &lt;decimal_point&gt; &lt;number&gt; |
+ &lt;decimal_point&gt; &lt;number&gt; )
+ [ &lt;exponential&gt; [ &lt;sign&gt; ] &lt;number&gt; ]
+ number ::= 1*( &lt;digit&gt; )
+ digit ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
+ exponential ::= ( 'e' | 'E' )
+ sign ::= ( '-' | '+' )
+ decimal_point ::= '.'
+ </pre></div> </td>
+ </tr>
+</table>
+<a name="a32" doxytag="triostr.c::trio_to_unsigned_long"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC unsigned long trio_to_unsigned_long </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>char **&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>endp</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>int&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>base</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert string to unsigned integer.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be converted. </td></tr>
+<tr><td valign=top><em>endp</em>&nbsp;</td><td>
+Pointer to end of converted string. </td></tr>
+<tr><td valign=top><em>base</em>&nbsp;</td><td>
+Radix number of number. </td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<a name="a27" doxytag="triostr.c::trio_tokenize"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC char* trio_tokenize </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>string</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>delimiters</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Tokenize string.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>string</em>&nbsp;</td><td>
+String to be tokenized. </td></tr>
+<tr><td valign=top><em>tokens</em>&nbsp;</td><td>
+String containing list of delimiting characters. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Start of new token.</dl><dl compact><dt><b>
+Warning: </b><dd>
+<code>string</code> will be destroyed. </dl> </td>
+ </tr>
+</table>
+<a name="a33" doxytag="triostr.c::trio_upper"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> TRIO_STRING_PUBLIC int trio_upper </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>target</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Convert the alphabetic letters in the string to upper-case.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>target</em>&nbsp;</td><td>
+The string to be converted. </td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+The number of processed characters (converted or not). </dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/group___user_defined.html b/trio/html/group___user_defined.html
new file mode 100644
index 00000000..b2507275
--- /dev/null
+++ b/trio/html/group___user_defined.html
@@ -0,0 +1,379 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>User-defined Formatted Printing Functions.</h1>Functions for using customized formatting specifiers.
+<a href="#_details">More...</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Functions</h2></td></tr>
+<tr><td nowrap align=right valign=top>trio_pointer_t&nbsp;</td><td valign=bottom><a class="el" href="group___user_defined.html#a0">trio_register</a> (trio_callback_t callback, const char *name)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Register new user-defined specifier.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="group___user_defined.html#a1">trio_unregister</a> (trio_pointer_t handle)</td></tr>
+<tr><td>&nbsp;</td><td><font size=-1><em>Unregister an existing user-defined specifier.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for using customized formatting specifiers.
+<p>
+<b>SYNOPSIS</b>
+<p>
+<div class="fragment"><pre>
+cc ... -ltrio -lm
+
+#include &lt;trio.h&gt;
+#include &lt;triop.h&gt;
+</pre></div>
+<p>
+<b>DESCRIPTION</b>
+<p>
+This documentation is incomplete.
+<p>
+<b>User-defined</b> <b>Specifier</b>
+<p>
+The user-defined specifier consists of a start character (\074 = '&lt;'), an optional namespace string followed by a namespace separator (\072 = ':'), a format string, and an end character (\076 = '&gt;').
+<p>
+The namespace string can consist of alphanumeric characters, and is used to define a named reference (see below). The namespace is case-sensitive. If no namespace is specified, then we use an unnamed reference (see below).
+<p>
+The format can consist of any character except the end character ('&gt;'), the namespace separator (':'), and the nil character (\000).
+<p>
+Any modifier can be used together with the user-defined specifier.
+<p>
+<b>Registering</b>
+<p>
+A user-defined specifier must be registered before it can be used. Unregistered user-defined specifiers are ignored. The <a class="el" href="group___user_defined.html#a0">trio_register</a> function is used to register a user-defined specifier. It takes two argument, a callback function and a namespace, and it returns a handle. The handle must be used to unregister the specifier later.
+<p>
+The following example registers a user-define specifier with the "my_namespace" namespace:
+<p>
+<div class="fragment"><pre>
+ my_handle = trio_register(my_callback, "my_namespace");
+</pre></div>
+<p>
+There can only be one user-defined specifier with a given namespace. There can be an unlimited number (subject to maximum length of the namespace) of different user-defined specifiers.
+<p>
+Passing NULL as the namespace argument results in an anonymous reference. There can be an unlimited number of anonymous references.
+<p>
+<b>REFERENCES</b>
+<p>
+There are two ways that a registered callback can be called. Either the user-defined specifier must contain the registered namespace in the format string, or the handle is passed as an argument to the formatted printing function.
+<p>
+If the namespace is used, then a user-defined pointer must be passed as an argument:
+<p>
+<div class="fragment"><pre>
+ trio_printf("&lt;my_namespace:format&gt;\n", my_data);
+</pre></div>
+<p>
+If the handle is used, then the user-defined specifier must not contain a namespace. Instead the handle must be passed as an argument, followed by a user-defined pointer:
+<p>
+<div class="fragment"><pre>
+ trio_printf("&lt;format&gt;\n", my_handle, my_data);
+</pre></div>
+<p>
+The two examples above are equivalent.
+<p>
+There must be exactly one user-defined pointer per user-defined specifier. This pointer can be used within the callback function with the trio_get_argument getter function (see below).
+<p>
+The format string is optional. It can be used within the callback function with the trio_get_format getter function.
+<p>
+<b>Anonymous</b> <b>References</b> Anonymous references are specified by passing NULL as the namespace.
+<p>
+The handle must be passed as an argument followed by a user-defined pointer. No namespace can be specified.
+<p>
+<div class="fragment"><pre>
+ anon_handle = trio_register(callback, NULL);
+ trio_printf("&lt;format&gt;\n", anon_handle, my_data);
+</pre></div>
+<p>
+<b>Restrictions</b>
+<p>
+<ul>
+<li> The length of the namespace string cannot exceed 63 characters. <li> The length of the user-defined format string cannot exceed 255 characters. <li> User-defined formatting cannot re-define existing specifiers. This restriction was imposed because the existing formatting specifiers have a well-defined behaviour, and any re-definition would apply globally to an application (imagine a third-party library changing the behaviour of a specifier that is crusial to your application).</ul>
+<b>CALLBACK</b> <b>FUNCTION</b>
+<p>
+The callback function will be called if a matching user-defined specifier is found within the formatting string. The callback function takes one input parameter, an opaque reference which is needed by the private functions. It returns an <code>int</code>, which is currently ignored. The prototype is
+<p>
+<div class="fragment"><pre>
+ int (*trio_callback_t)(void *ref);
+</pre></div>
+<p>
+See the Example section for full examples.
+<p>
+<b>PRINTING</b> <b>FUNCTIONS</b>
+<p>
+The following printing functions must only be used inside a callback function. These functions will print to the same output medium as the printf function which invoked the callback function. For example, if the user-defined specifier is used in an sprintf function, then these print functions will output their result to the same string.
+<p>
+<b>Elementary</b> <b>Printing</b>
+<p>
+There are a number of function to print elementary data types.
+<p>
+<ul>
+<li> trio_print_int Print a signed integer. For example: <div class="fragment"><pre>
+ trio_print_int(42);
+</pre></div> <li> trio_print_uint Print an unsigned integer. <li> trio_print_double Print a floating-point number. <li> trio_print_string Print a string. For example: <div class="fragment"><pre>
+ trio_print_string("Hello World");
+ trio_print_string(trio_get_format());
+</pre></div> <li> trio_print_pointer Print a pointer.</ul>
+<b>Formatted</b> <b>Printing</b>
+<p>
+The functions trio_print_ref, trio_vprint_ref, and trio_printv_ref outputs a formatted string just like its printf equivalents.
+<p>
+<div class="fragment"><pre>
+ trio_print_ref(ref, "There are %d towels\n", 42);
+ trio_print_ref(ref, "%&lt;recursive&gt;\n", recursive_writer, trio_get_argument());
+</pre></div>
+<p>
+<b>GETTER</b> <b>AND</b> <b>SETTER</b> <b>FUNCTIONS</b>
+<p>
+The following getter and setter functions must only be used inside a callback function. They can either operate on the modifiers or on special data.
+<p>
+<b>Modifiers</b>
+<p>
+The value of a modifier, or a boolean indication of its presence or absence, can be found or set with the getter and setter functions. The generic prototypes of the these getter and setter functions are
+<p>
+<div class="fragment"><pre>
+ int trio_get_???(void *ref);
+ void trio_set_???(void *ref, int);
+</pre></div>
+<p>
+where ??? <code>refers</code> to a modifier. For example, to get the width of the user-defined specifier use
+<p>
+<div class="fragment"><pre>
+ int width = trio_get_width(ref);
+</pre></div>
+<p>
+<b>Special</b> <b>Data</b>
+<p>
+Consider the following user-defined specifier, in its two possible referencing presentations.
+<p>
+<div class="fragment"><pre>
+ trio_printf("%&lt;format&gt;\n", namespace_writer, argument);
+ trio_printf("%&lt;namespace:format&gt;\n", argument);
+</pre></div>
+<p>
+trio_get_format will get the <code>format</code> string, and trio_get_argument} will get the <code>argument</code> parameter. There are no associated setter functions.
+<p>
+<b>EXAMPLES</b>
+<p>
+The following examples show various types of user-defined specifiers. Although each specifier is demonstrated in isolation, they can all co-exist within the same application.
+<p>
+<b>Time</b> <b>Example</b>
+<p>
+Print the time in the format "HOUR:MINUTE:SECOND" if "time" is specified inside the user-defined specifier.
+<p>
+<div class="fragment"><pre>
+ static int time_writer(void *ref)
+ {
+ const char *format;
+ time_t *data;
+ char buffer[256];
+
+ format = trio_get_format(ref);
+ if ((format) &amp;&amp; (strcmp(format, "time") == 0)) {
+ data = trio_get_argument(ref);
+ if (data == NULL)
+ return -1;
+ strftime(buffer, sizeof(buffer), "%H:%M:%S", localtime(data));
+ trio_print_string(ref, buffer);
+ }
+ return 0;
+ }
+</pre></div>
+<p>
+<div class="fragment"><pre>
+ int main(void)
+ {
+ void *handle;
+ time_t now = time(NULL);
+
+ handle = trio_register(time_print, "my_time");
+
+ trio_printf("%&lt;time&gt;\n", handle, &amp;now);
+ trio_printf("%&lt;my_time:time&gt;\n", &amp;now);
+
+ trio_unregister(handle);
+ return 0;
+ }
+</pre></div>
+<p>
+<b>Complex</b> <b>Numbers</b> <b>Example</b>
+<p>
+Consider a complex number consisting of a real part, re, and an imaginary part, im.
+<p>
+<div class="fragment"><pre>
+ struct Complex {
+ double re;
+ double im;
+ };
+</pre></div>
+<p>
+This example can print such a complex number in one of two formats. The default format is "re + i im". If the alternative modifier is used, then the format is "r exp(i theta)", where r is the length of the complex vector (re, im) and theta is its angle.
+<p>
+<div class="fragment"><pre>
+ static int complex_print(void *ref)
+ {
+ struct Complex *data;
+ const char *format;
+
+ data = (struct Complex *)trio_get_argument(ref);
+ if (data) {
+ format = trio_get_format(ref);
+
+ if (trio_get_alternative(ref)) {
+ double r, theta;
+
+ r = sqrt(pow(data-&gt;re, 2) + pow(data-&gt;im, 2));
+ theta = acos(data-&gt;re / r);
+ trio_print_ref(ref, "%#f exp(i %#f)", r, theta);
+
+ } else {
+ trio_print_ref(ref, "%#f + i %#f", data-&gt;re, data-&gt;im);
+ }
+ }
+ return 0;
+ }
+</pre></div>
+<p>
+<div class="fragment"><pre>
+ int main(void)
+ {
+ void *handle;
+
+ handle = trio_register(complex_print, "complex");
+
+ /* Normal format. With handle and the with namespace */
+ trio_printf("%&lt;&gt;\n", handle, &amp;complex);
+ trio_printf("%&lt;complex:&gt;\n", &amp;complex);
+ /* In exponential notation */
+ trio_printf("%#&lt;&gt;\n", handle, &amp;complex);
+ trio_printf("%#&lt;complex:unused data&gt;\n", &amp;complex);
+
+ trio_unregister(handle);
+ return 0;
+ }
+</pre></div>
+<p>
+<b>RETURN</b> <b>VALUES</b>
+<p>
+<a class="el" href="group___user_defined.html#a0">trio_register</a> returns a handle, or NULL if an error occured.
+<p>
+<b>SEE</b> <b>ALSO</b>
+<p>
+<a class="el" href="group___printf.html#a0">trio_printf</a>
+<p>
+<b>NOTES</b>
+<p>
+User-defined specifiers, <a class="el" href="group___user_defined.html#a0">trio_register</a>, and <a class="el" href="group___user_defined.html#a1">trio_unregister</a> are not thread-safe. In multi-threaded applications they must be guarded by mutexes. Trio provides two special callback functions, called ":enter" and ":leave", which are invoked every time a thread-unsafe operation is attempted. As the thread model is determined by the application, these callback functions must be implemented by the application.
+<p>
+The following callback functions are for demonstration-purposes only. Replace their bodies with locking and unlocking of a mutex to achieve thread-safety. <div class="fragment"><pre>
+ static int enter_region(void *ref)
+ {
+ fprintf(stderr, "Enter Region\n");
+ return 1;
+ }
+
+ static int leave_region(void *ref)
+ {
+ fprintf(stderr, "Leave Region\n");
+ return 1;
+ }
+</pre></div> These two callbacks must be registered before other callbacks are registered. <div class="fragment"><pre>
+ trio_register(enter_region, ":enter");
+ trio_register(leave_region, ":leave");
+
+ another_handle = trio_register(another_callback, NULL);
+</pre></div> <hr><h2>Function Documentation</h2>
+<a name="a0" doxytag="trio.c::trio_register"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> trio_pointer_t trio_register </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_callback_t&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>callback</em>, </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap>&nbsp; <em>name</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Register new user-defined specifier.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>callback</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em>name</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl><dl compact><dt><b>
+Returns: </b><dd>
+Handle. </dl> </td>
+ </tr>
+</table>
+<a name="a1" doxytag="trio.c::trio_unregister"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+ <tr>
+ <td class="md">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void trio_unregister </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">trio_pointer_t&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap>&nbsp; <em>handle</em> </td>
+ <td class="md" valign="top">)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Unregister an existing user-defined specifier.
+<p>
+<dl compact><dt><b>
+Parameters: </b><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>handle</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl> </td>
+ </tr>
+</table>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/index.html b/trio/html/index.html
new file mode 100644
index 00000000..124ad017
--- /dev/null
+++ b/trio/html/index.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>TRIO Documentation</h1>
+<p>
+ <dl compact><dt><b>
+Author: </b><dd>
+Bjørn Reese , Daniel Stenberg</dl><a name="intro"><h2>Introduction</h2></a>
+
+<p>
+Trio is a fully matured and stable set of printf and string functions designed be used by applications with focus on portability or with the need for additional features that are not supported by standard stdio implementation.
+<p>
+There are several cases where you may want to consider using trio:
+<p>
+<ul>
+<li> Portability across heterogeneous platforms. <li> Embedded systems without stdio support. <li> Extendability of unsupported features. <li> Your native version does not do everything you need.</ul>
+When you write applications that must be portable to a wide range of platforms you often have to deal with inadequate implementations of the stdio library functions. Most notably is the lack of secure formatting functions, such as snprintf, or the lack of parameter reordering commonly used for the internationalization of applications, such as the &lt;num&gt;$ modifier. Sometimes the feature you need is simply not present in stdio. So you end up spending much effort on determining which platforms supports what, and to write your own versions of various features. This is where trio can help you. Trio is a platform-independent implementation of the stdio printf and scanf functions and the string library functions.
+<p>
+The functionality described in the stdio standards is a compromise, and does unfortunately not include a mechanism to extend the functionality for an individual application. Oftentimes an application has the need for an extra feature, and the application code can become much more clear and readable by using an extension mechanism. Trio supports a range of useful extensions such as user-defined specifiers, passing of arguments in arrays, localized string scanning, thousand-separators, and arbitrary integer bases.
+<p>
+Trio fully implements the C99 (ISO/IEC 9899:1999) and UNIX98 (the Single Unix Specification, Version 2) standards, as well as many features from other implemenations, e.g. the GNU libc and BSD4.
+<p>
+<a name="examples"><h2>Examples</h2></a>
+
+<p>
+<a name="ex1"><h3>Binary Numbers</h3></a>
+ Output an integer as a binary number using a trio extension. <div class="fragment"><pre>
+ trio_printf("%..2i\n", number);
+</pre></div>
+<p>
+<a name="ex2"><h3>Thousand-separator</h3></a>
+ Output a number with thousand-separator using a trio extension. <div class="fragment"><pre>
+ trio_printf("%'f\n", 12345.6);
+</pre></div> The thousand-separator described by the locale is used.
+<p>
+<a name="ex3"><h3>Fixed Length Array and Sticky Modifier</h3></a>
+ Output an fixed length array of floating-point numbers. <div class="fragment"><pre>
+ double array[] = {1.0, 2.0, 3.0};
+ printf("%.2f %.2f %.2f\n", array[0], array[1], array[2]);
+</pre></div> The same with two trio extensions (arguments are passed in an array, and the first formatting specifier sets the sticky option so we do not have to type all the formatting modifiers for the remaining formatting specifiers) <div class="fragment"><pre>
+ trio_printfv("%!.2f %f %f\n", array);
+</pre></div> Another, and more powerful, application of being able to pass arguments in an array is the creation of the printf/scanf statement at run-time, where the formatting string, and thus the argument list, is based on an external configuration file.
+<p>
+<a name="ex4"><h3>Localized scanning</h3></a>
+ Parse a string consisting of one or more upper-case alphabetic characters followed by one or more numeric characters. <div class="fragment"><pre>
+ sscanf(buffer, "%[A-Z]%[0-9]", alphabetic, numeric);
+</pre></div> The same but with locale using a trio extension. <div class="fragment"><pre>
+ trio_sscanf(buffer, "%[[:upper:]]%[[:digit:]]", alphabetic, numeric);
+</pre></div>
+<p>
+<a name="legal"><h2>Legal Issues</h2></a>
+ Trio is distributed under the following license, which allows practically anybody to use it in almost any kind of software, including proprietary software, without difficulty.
+<p>
+"Copyright (C) 1998-2001 Bjorn Reese and Daniel Stenberg.
+<p>
+Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+<p>
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER."
+<p>
+<a name="contribution"><h2>Contribution</h2></a>
+
+<p>
+<a name="contribute"><h3>Contribute</h3></a>
+ We appreciate any type of contribution, from ideas over improvements to error corrections.
+<p>
+The project space contains references to bug and feature tracking, mailing-list, and the CVS repository. We prefer communication via the mailing-list, but do not require you to be subscribed, because trio is a small project.
+<p>
+The project space is located at <a href="http://sourceforge.net/projects/ctrio/">http://sourceforge.net/projects/ctrio/</a>
+<p>
+<a name="contributors"><h3>Contributors</h3></a>
+ We have received contributions from the following persons (in alphabetic order sorted by surname)
+<p>
+<ul>
+<li> Craig Berry <li> Stan Boehm <li> Robert Collins <li> Danny Dulai <li> John Fotheringham <li> Markus Henke <li> Ken Gibson <li> Paul Janzen <li> Richard Jinks <li> Tero Jänkä <li> Howard Kapustein <li> Mehdi Lavasani <li> Alexander Lukyanov <li> Emmanuel Mogenet <li> Jacob Navia <li> Jose Ortiz <li> Joe Orton <li> Gisli Ottarsson <li> Marc Werwerft <li> Igor Zlatkovic</ul>
+Please let us know, and accept our apology, if we have omitted anybody.
+<p>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/modules.html b/trio/html/modules.html
new file mode 100644
index 00000000..49885970
--- /dev/null
+++ b/trio/html/modules.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>TRIO</title>
+ <link href="trio.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- Generated by Doxygen 1.2.12 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; </center>
+<hr><h1>TRIO Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="group___printf.html">Formatted Printing Functions.</a>
+<li><a class="el" href="group___user_defined.html">User-defined Formatted Printing Functions.</a>
+<li><a class="el" href="group___scanf.html">Formatted Scanning Functions.</a>
+<li><a class="el" href="group___special_quantities.html">Special Quantifies.</a>
+<li><a class="el" href="group___static_strings.html">Static String Functions.</a>
+<li><a class="el" href="group___dynamic_strings.html">Dynamic String Functions.</a>
+</ul>
+<HR>
+<center class="copyright">Copyright (C) 2001 Bj&oslash;rn Reese and Daniel Stenberg.</center>
+</body>
+</html>
diff --git a/trio/html/trio.css b/trio/html/trio.css
new file mode 100644
index 00000000..1b3a9926
--- /dev/null
+++ b/trio/html/trio.css
@@ -0,0 +1,35 @@
+/* HTML tags */
+
+BODY {
+ background-color: white;
+ color: darkblue;
+}
+
+TD { color: darkblue; }
+
+H1 { text-align: center; }
+
+H3 { font-style: italic; }
+
+HR {
+ width: 85%;
+ align: center;
+}
+
+.copyright { color: darkblue; }
+
+/* Links */
+
+:link { color: blue; }
+
+:visited { color: purple; }
+
+:active { color: red; }
+
+.el:link { font-style: italic; }
+
+/* Examples */
+
+DIV.fragment {
+ color: maroon;
+}