mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-08 13:39:58 +00:00
Fix comment processing.
This commit is contained in:
parent
2fc73455b2
commit
62376c5156
@ -25,7 +25,7 @@
|
||||
<li><a href='#mxml_type_e'><tt>mxml_type_e</tt></a></li>
|
||||
</ul>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_type_e'>mxml_type_e</a></h3>
|
||||
<h3><a name='mxml_type_e'>mxml_type_e</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>The XML node type.</p>
|
||||
@ -33,13 +33,13 @@
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_CUSTOM</tt></td><td>Custom data</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_ELEMENT</tt></td><td>XML element with attributes</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_IGNORE</tt></td><td>Ignore/throw away node</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_INTEGER</tt></td><td>Integer value</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_OPAQUE</tt></td><td>Opaque string</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_REAL</tt></td><td>Real value</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>MXML_TEXT</tt></td><td>Text fragment</td></tr>
|
||||
<tr><td><tt>MXML_CUSTOM</tt></td><td>Custom data</td></tr>
|
||||
<tr><td><tt>MXML_ELEMENT</tt></td><td>XML element with attributes</td></tr>
|
||||
<tr><td><tt>MXML_IGNORE</tt></td><td>Ignore/throw away node</td></tr>
|
||||
<tr><td><tt>MXML_INTEGER</tt></td><td>Integer value</td></tr>
|
||||
<tr><td><tt>MXML_OPAQUE</tt></td><td>Opaque string</td></tr>
|
||||
<tr><td><tt>MXML_REAL</tt></td><td>Real value</td></tr>
|
||||
<tr><td><tt>MXML_TEXT</tt></td><td>Text fragment</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h2><a name='_functions'>Functions</a></h2>
|
||||
@ -88,7 +88,7 @@
|
||||
<li><a href='#mxmlWalkPrev'><tt>mxmlWalkPrev()</tt></a></li>
|
||||
</ul>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlAdd'>mxmlAdd()</a></h3>
|
||||
<h3><a name='mxmlAdd'>mxmlAdd()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Add a node to a tree.
|
||||
@ -120,7 +120,7 @@ mxmlAdd(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlDelete'>mxmlDelete()</a></h3>
|
||||
<h3><a name='mxmlDelete'>mxmlDelete()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Delete a node and all of its children.
|
||||
@ -142,7 +142,7 @@ mxmlDelete(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlElementGetAttr'>mxmlElementGetAttr()</a></h3>
|
||||
<h3><a name='mxmlElementGetAttr'>mxmlElementGetAttr()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Get an attribute.
|
||||
@ -166,7 +166,7 @@ mxmlElementGetAttr(
|
||||
<h4>Returns</h4>
|
||||
<p>Attribute value or NULL</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlElementSetAttr'>mxmlElementSetAttr()</a></h3>
|
||||
<h3><a name='mxmlElementSetAttr'>mxmlElementSetAttr()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set an attribute.
|
||||
@ -194,7 +194,7 @@ mxmlElementSetAttr(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlEntityAddCallback'>mxmlEntityAddCallback()</a></h3>
|
||||
<h3><a name='mxmlEntityAddCallback'>mxmlEntityAddCallback()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Add a callback to convert entities to Unicode.</p>
|
||||
@ -208,7 +208,7 @@ mxmlEntityAddCallback(void);
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlEntityGetName'>mxmlEntityGetName()</a></h3>
|
||||
<h3><a name='mxmlEntityGetName'>mxmlEntityGetName()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Get the name that corresponds to the character value.
|
||||
@ -229,7 +229,7 @@ mxmlEntityGetName(
|
||||
<h4>Returns</h4>
|
||||
<p>Entity name or NULL</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlEntityGetValue'>mxmlEntityGetValue()</a></h3>
|
||||
<h3><a name='mxmlEntityGetValue'>mxmlEntityGetValue()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Get the character corresponding to a named entity.
|
||||
@ -251,7 +251,7 @@ mxmlEntityGetValue(
|
||||
<h4>Returns</h4>
|
||||
<p>Character value or -1 on error</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlEntityRemoveCallback'>mxmlEntityRemoveCallback()</a></h3>
|
||||
<h3><a name='mxmlEntityRemoveCallback'>mxmlEntityRemoveCallback()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Remove a callback.</p>
|
||||
@ -265,7 +265,7 @@ mxmlEntityRemoveCallback(void);
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlFindElement'>mxmlFindElement()</a></h3>
|
||||
<h3><a name='mxmlFindElement'>mxmlFindElement()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Find the named element.
|
||||
@ -303,7 +303,7 @@ mxmlFindElement(
|
||||
<h4>Returns</h4>
|
||||
<p>Element node or NULL</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlIndexDelete'>mxmlIndexDelete()</a></h3>
|
||||
<h3><a name='mxmlIndexDelete'>mxmlIndexDelete()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Delete an index.</p>
|
||||
@ -322,7 +322,7 @@ mxmlIndexDelete(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlIndexEnum'>mxmlIndexEnum()</a></h3>
|
||||
<h3><a name='mxmlIndexEnum'>mxmlIndexEnum()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Return the next node in the index.
|
||||
@ -343,7 +343,7 @@ mxmlIndexEnum(
|
||||
<h4>Returns</h4>
|
||||
<p>Next node or NULL if there is none</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlIndexFind'>mxmlIndexFind()</a></h3>
|
||||
<h3><a name='mxmlIndexFind'>mxmlIndexFind()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Find the next matching node.
|
||||
@ -371,7 +371,7 @@ mxmlIndexFind(
|
||||
<h4>Returns</h4>
|
||||
<p>Node or NULL if none found</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlIndexNew'>mxmlIndexNew()</a></h3>
|
||||
<h3><a name='mxmlIndexNew'>mxmlIndexNew()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new index.
|
||||
@ -400,7 +400,7 @@ mxmlIndexNew(
|
||||
<h4>Returns</h4>
|
||||
<p>New index</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlIndexReset'>mxmlIndexReset()</a></h3>
|
||||
<h3><a name='mxmlIndexReset'>mxmlIndexReset()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Reset the enumeration/find pointer in the index and
|
||||
@ -423,7 +423,7 @@ mxmlIndexReset(
|
||||
<h4>Returns</h4>
|
||||
<p>First node or NULL if there is none</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlLoadFd'>mxmlLoadFd()</a></h3>
|
||||
<h3><a name='mxmlLoadFd'>mxmlLoadFd()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Load a file descriptor into an XML node tree.
|
||||
@ -455,7 +455,7 @@ mxmlLoadFd(
|
||||
<h4>Returns</h4>
|
||||
<p>First node or NULL if the file could not be read.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlLoadFile'>mxmlLoadFile()</a></h3>
|
||||
<h3><a name='mxmlLoadFile'>mxmlLoadFile()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Load a file into an XML node tree.
|
||||
@ -487,7 +487,7 @@ mxmlLoadFile(
|
||||
<h4>Returns</h4>
|
||||
<p>First node or NULL if the file could not be read.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlLoadString'>mxmlLoadString()</a></h3>
|
||||
<h3><a name='mxmlLoadString'>mxmlLoadString()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Load a string into an XML node tree.
|
||||
@ -519,7 +519,7 @@ mxmlLoadString(
|
||||
<h4>Returns</h4>
|
||||
<p>First node or NULL if the string has errors.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewCDATA'>mxmlNewCDATA()</a></h3>
|
||||
<h3><a name='mxmlNewCDATA'>mxmlNewCDATA()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new CDATA node.
|
||||
@ -545,7 +545,7 @@ mxmlNewCDATA(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewCustom'>mxmlNewCustom()</a></h3>
|
||||
<h3><a name='mxmlNewCustom'>mxmlNewCustom()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new custom data node.
|
||||
@ -571,7 +571,7 @@ mxmlNewCustom(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewElement'>mxmlNewElement()</a></h3>
|
||||
<h3><a name='mxmlNewElement'>mxmlNewElement()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new element node.
|
||||
@ -596,7 +596,7 @@ mxmlNewElement(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewInteger'>mxmlNewInteger()</a></h3>
|
||||
<h3><a name='mxmlNewInteger'>mxmlNewInteger()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new integer node.
|
||||
@ -621,7 +621,7 @@ mxmlNewInteger(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewOpaque'>mxmlNewOpaque()</a></h3>
|
||||
<h3><a name='mxmlNewOpaque'>mxmlNewOpaque()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new opaque string.
|
||||
@ -647,7 +647,7 @@ mxmlNewOpaque(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewReal'>mxmlNewReal()</a></h3>
|
||||
<h3><a name='mxmlNewReal'>mxmlNewReal()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new real number node.
|
||||
@ -672,7 +672,7 @@ mxmlNewReal(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewText'>mxmlNewText()</a></h3>
|
||||
<h3><a name='mxmlNewText'>mxmlNewText()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new text fragment node.
|
||||
@ -701,7 +701,7 @@ mxmlNewText(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlNewTextf'>mxmlNewTextf()</a></h3>
|
||||
<h3><a name='mxmlNewTextf'>mxmlNewTextf()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Create a new formatted text fragment node.
|
||||
@ -732,7 +732,7 @@ mxmlNewTextf(
|
||||
<h4>Returns</h4>
|
||||
<p>New node</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlRemove'>mxmlRemove()</a></h3>
|
||||
<h3><a name='mxmlRemove'>mxmlRemove()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Remove a node from its parent.
|
||||
@ -754,7 +754,7 @@ mxmlRemove(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSaveAllocString'>mxmlSaveAllocString()</a></h3>
|
||||
<h3><a name='mxmlSaveAllocString'>mxmlSaveAllocString()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Save an XML node tree to an allocated string.
|
||||
@ -785,7 +785,7 @@ mxmlSaveAllocString(
|
||||
<h4>Returns</h4>
|
||||
<p>Allocated string or NULL</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSaveFd'>mxmlSaveFd()</a></h3>
|
||||
<h3><a name='mxmlSaveFd'>mxmlSaveFd()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Save an XML tree to a file descriptor.
|
||||
@ -812,7 +812,7 @@ mxmlSaveFd(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on error.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSaveFile'>mxmlSaveFile()</a></h3>
|
||||
<h3><a name='mxmlSaveFile'>mxmlSaveFile()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Save an XML tree to a file.
|
||||
@ -839,7 +839,7 @@ mxmlSaveFile(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on error.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSaveString'>mxmlSaveString()</a></h3>
|
||||
<h3><a name='mxmlSaveString'>mxmlSaveString()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Save an XML node tree to a string.
|
||||
@ -872,7 +872,7 @@ mxmlSaveString(
|
||||
<h4>Returns</h4>
|
||||
<p>Size of string</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetCDATA'>mxmlSetCDATA()</a></h3>
|
||||
<h3><a name='mxmlSetCDATA'>mxmlSetCDATA()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the element name of a CDATA node.
|
||||
@ -895,7 +895,7 @@ mxmlSetCDATA(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetCustom'>mxmlSetCustom()</a></h3>
|
||||
<h3><a name='mxmlSetCustom'>mxmlSetCustom()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the data and destructor of a custom data node.
|
||||
@ -918,7 +918,7 @@ mxmlSetCustom(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetCustomHandlers'>mxmlSetCustomHandlers()</a></h3>
|
||||
<h3><a name='mxmlSetCustomHandlers'>mxmlSetCustomHandlers()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the handling functions for custom data.
|
||||
@ -945,7 +945,7 @@ mxmlSetCustomHandlers(
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetElement'>mxmlSetElement()</a></h3>
|
||||
<h3><a name='mxmlSetElement'>mxmlSetElement()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the name of an element node.
|
||||
@ -968,7 +968,7 @@ mxmlSetElement(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetErrorCallback'>mxmlSetErrorCallback()</a></h3>
|
||||
<h3><a name='mxmlSetErrorCallback'>mxmlSetErrorCallback()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the error message callback.</p>
|
||||
@ -982,7 +982,7 @@ mxmlSetErrorCallback(void);
|
||||
<h4>Returns</h4>
|
||||
<p>Nothing.</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetInteger'>mxmlSetInteger()</a></h3>
|
||||
<h3><a name='mxmlSetInteger'>mxmlSetInteger()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the value of an integer node.
|
||||
@ -1005,7 +1005,7 @@ mxmlSetInteger(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetOpaque'>mxmlSetOpaque()</a></h3>
|
||||
<h3><a name='mxmlSetOpaque'>mxmlSetOpaque()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the value of an opaque node.
|
||||
@ -1028,7 +1028,7 @@ mxmlSetOpaque(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetReal'>mxmlSetReal()</a></h3>
|
||||
<h3><a name='mxmlSetReal'>mxmlSetReal()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the value of a real number node.
|
||||
@ -1051,7 +1051,7 @@ mxmlSetReal(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetText'>mxmlSetText()</a></h3>
|
||||
<h3><a name='mxmlSetText'>mxmlSetText()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the value of a text node.
|
||||
@ -1076,7 +1076,7 @@ mxmlSetText(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlSetTextf'>mxmlSetTextf()</a></h3>
|
||||
<h3><a name='mxmlSetTextf'>mxmlSetTextf()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Set the value of a text node to a formatted string.
|
||||
@ -1103,7 +1103,7 @@ mxmlSetTextf(
|
||||
<h4>Returns</h4>
|
||||
<p>0 on success, -1 on failure</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlWalkNext'>mxmlWalkNext()</a></h3>
|
||||
<h3><a name='mxmlWalkNext'>mxmlWalkNext()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Walk to the next logical node in the tree.
|
||||
@ -1130,7 +1130,7 @@ mxmlWalkNext(
|
||||
<h4>Returns</h4>
|
||||
<p>Next node or NULL</p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxmlWalkPrev'>mxmlWalkPrev()</a></h3>
|
||||
<h3><a name='mxmlWalkPrev'>mxmlWalkPrev()</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Walk to the previous logical node in the tree.
|
||||
@ -1167,7 +1167,7 @@ mxmlWalkPrev(
|
||||
<li><a href='#mxml_value_s'><tt>mxml_value_s</tt></a></li>
|
||||
</ul>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_attr_s'>mxml_attr_s</a></h3>
|
||||
<h3><a name='mxml_attr_s'>mxml_attr_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML element attribute value.</p>
|
||||
@ -1183,11 +1183,11 @@ struct mxml_attr_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>name</tt></td><td>Attribute name</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>value</tt></td><td>Attribute value</td></tr>
|
||||
<tr><td><tt>name</tt></td><td>Attribute name</td></tr>
|
||||
<tr><td><tt>value</tt></td><td>Attribute value</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_custom_s'>mxml_custom_s</a></h3>
|
||||
<h3><a name='mxml_custom_s'>mxml_custom_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML custom value.</p>
|
||||
@ -1202,10 +1202,10 @@ struct mxml_custom_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>data</tt></td><td>Pointer to (allocated) custom data</td></tr>
|
||||
<tr><td><tt>data</tt></td><td>Pointer to (allocated) custom data</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_index_s'>mxml_index_s</a></h3>
|
||||
<h3><a name='mxml_index_s'>mxml_index_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node index.</p>
|
||||
@ -1224,14 +1224,14 @@ struct mxml_index_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>alloc_nodes</tt></td><td>Allocated nodes in index</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>attr</tt></td><td>Attribute used for indexing or NULL</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>cur_node</tt></td><td>Current node</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>nodes</tt></td><td>Node array</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>num_nodes</tt></td><td>Number of nodes in index</td></tr>
|
||||
<tr><td><tt>alloc_nodes</tt></td><td>Allocated nodes in index</td></tr>
|
||||
<tr><td><tt>attr</tt></td><td>Attribute used for indexing or NULL</td></tr>
|
||||
<tr><td><tt>cur_node</tt></td><td>Current node</td></tr>
|
||||
<tr><td><tt>nodes</tt></td><td>Node array</td></tr>
|
||||
<tr><td><tt>num_nodes</tt></td><td>Number of nodes in index</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_node_s'>mxml_node_s</a></h3>
|
||||
<h3><a name='mxml_node_s'>mxml_node_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node.</p>
|
||||
@ -1252,16 +1252,16 @@ struct mxml_node_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>child</tt></td><td>First child node</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>last_child</tt></td><td>Last child node</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>next</tt></td><td>Next node under same parent</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>parent</tt></td><td>Parent node</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>prev</tt></td><td>Previous node under same parent</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>type</tt></td><td>Node type</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>value</tt></td><td>Node value</td></tr>
|
||||
<tr><td><tt>child</tt></td><td>First child node</td></tr>
|
||||
<tr><td><tt>last_child</tt></td><td>Last child node</td></tr>
|
||||
<tr><td><tt>next</tt></td><td>Next node under same parent</td></tr>
|
||||
<tr><td><tt>parent</tt></td><td>Parent node</td></tr>
|
||||
<tr><td><tt>prev</tt></td><td>Previous node under same parent</td></tr>
|
||||
<tr><td><tt>type</tt></td><td>Node type</td></tr>
|
||||
<tr><td><tt>value</tt></td><td>Node value</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_text_s'>mxml_text_s</a></h3>
|
||||
<h3><a name='mxml_text_s'>mxml_text_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML text value.</p>
|
||||
@ -1277,11 +1277,11 @@ struct mxml_text_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>string</tt></td><td>Fragment string</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>whitespace</tt></td><td>Leading whitespace?</td></tr>
|
||||
<tr><td><tt>string</tt></td><td>Fragment string</td></tr>
|
||||
<tr><td><tt>whitespace</tt></td><td>Leading whitespace?</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_value_s'>mxml_value_s</a></h3>
|
||||
<h3><a name='mxml_value_s'>mxml_value_s</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML element value.</p>
|
||||
@ -1298,9 +1298,9 @@ struct mxml_value_s
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>attrs</tt></td><td>Attributes</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>name</tt></td><td>Name of element</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>num_attrs</tt></td><td>Number of attributes</td></tr>
|
||||
<tr><td><tt>attrs</tt></td><td>Attributes</td></tr>
|
||||
<tr><td><tt>name</tt></td><td>Name of element</td></tr>
|
||||
<tr><td><tt>num_attrs</tt></td><td>Number of attributes</td></tr>
|
||||
</tbody></table></p>
|
||||
<!-- NEW PAGE -->
|
||||
<h2><a name='_types'>Types</a></h2>
|
||||
@ -1316,7 +1316,7 @@ struct mxml_value_s
|
||||
<li><a href='#mxml_value_t'><tt>mxml_value_t</tt></a></li>
|
||||
</ul>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_attr_t'>mxml_attr_t</a></h3>
|
||||
<h3><a name='mxml_attr_t'>mxml_attr_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML element attribute value.</p>
|
||||
@ -1325,7 +1325,7 @@ struct mxml_value_s
|
||||
typedef struct <a href='#mxml_attr_s'>mxml_attr_s</a> mxml_attr_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_custom_load_cb_t'>mxml_custom_load_cb_t</a></h3>
|
||||
<h3><a name='mxml_custom_load_cb_t'>mxml_custom_load_cb_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Custom data load callback function</p>
|
||||
@ -1334,7 +1334,7 @@ typedef struct <a href='#mxml_attr_s'>mxml_attr_s</a> mxml_attr_t;
|
||||
typedef int (*mxml_custom_load_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *, const char *);
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_custom_save_cb_t'>mxml_custom_save_cb_t</a></h3>
|
||||
<h3><a name='mxml_custom_save_cb_t'>mxml_custom_save_cb_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>Custom data save callback function</p>
|
||||
@ -1343,7 +1343,7 @@ typedef int (*mxml_custom_load_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *, c
|
||||
typedef char * (*mxml_custom_save_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *);
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_custom_t'>mxml_custom_t</a></h3>
|
||||
<h3><a name='mxml_custom_t'>mxml_custom_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML custom value.</p>
|
||||
@ -1352,7 +1352,7 @@ typedef char * (*mxml_custom_save_cb_t)(<a href='#mxml_node_t'>mxml_node_t</a> *
|
||||
typedef struct <a href='#mxml_custom_s'>mxml_custom_s</a> mxml_custom_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_element_t'>mxml_element_t</a></h3>
|
||||
<h3><a name='mxml_element_t'>mxml_element_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML element value.</p>
|
||||
@ -1361,7 +1361,7 @@ typedef struct <a href='#mxml_custom_s'>mxml_custom_s</a> mxml_custom_t;
|
||||
typedef struct <a href='#mxml_value_s'>mxml_value_s</a> mxml_element_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_index_t'>mxml_index_t</a></h3>
|
||||
<h3><a name='mxml_index_t'>mxml_index_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node index.</p>
|
||||
@ -1370,7 +1370,7 @@ typedef struct <a href='#mxml_value_s'>mxml_value_s</a> mxml_element_t;
|
||||
typedef struct <a href='#mxml_index_s'>mxml_index_s</a> mxml_index_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_node_t'>mxml_node_t</a></h3>
|
||||
<h3><a name='mxml_node_t'>mxml_node_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node.</p>
|
||||
@ -1379,7 +1379,7 @@ typedef struct <a href='#mxml_index_s'>mxml_index_s</a> mxml_index_t;
|
||||
typedef struct <a href='#mxml_node_s'>mxml_node_s</a> mxml_node_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_text_t'>mxml_text_t</a></h3>
|
||||
<h3><a name='mxml_text_t'>mxml_text_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML text value.</p>
|
||||
@ -1388,7 +1388,7 @@ typedef struct <a href='#mxml_node_s'>mxml_node_s</a> mxml_node_t;
|
||||
typedef struct <a href='#mxml_text_s'>mxml_text_s</a> mxml_text_t;
|
||||
</pre>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_value_t'>mxml_value_t</a></h3>
|
||||
<h3><a name='mxml_value_t'>mxml_value_t</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node value.</p>
|
||||
@ -1402,7 +1402,7 @@ typedef union <a href='#mxml_value_u'>mxml_value_u</a> mxml_value_t;
|
||||
<li><a href='#mxml_value_u'><tt>mxml_value_u</tt></a></li>
|
||||
</ul>
|
||||
<!-- NEW PAGE -->
|
||||
<h3><span class='info'>NO</span><a name='mxml_value_u'>mxml_value_u</a></h3>
|
||||
<h3><a name='mxml_value_u'>mxml_value_u</a></h3>
|
||||
<hr noshade/>
|
||||
<h4>Description</h4>
|
||||
<p>An XML node value.</p>
|
||||
@ -1422,12 +1422,12 @@ union mxml_value_u
|
||||
<p class='table'><table align='center' border='1' width='80%'>
|
||||
<thead><tr><th>Name</th><th>Description</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class='info'>NO</span><tt>custom</tt></td><td>Custom data</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>element</tt></td><td>Element</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>integer</tt></td><td>Integer number</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>opaque</tt></td><td>Opaque string</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>real</tt></td><td>Real number</td></tr>
|
||||
<tr><td><span class='info'>NO</span><tt>text</tt></td><td>Text fragment</td></tr>
|
||||
<tr><td><tt>custom</tt></td><td>Custom data</td></tr>
|
||||
<tr><td><tt>element</tt></td><td>Element</td></tr>
|
||||
<tr><td><tt>integer</tt></td><td>Integer number</td></tr>
|
||||
<tr><td><tt>opaque</tt></td><td>Opaque string</td></tr>
|
||||
<tr><td><tt>real</tt></td><td>Real number</td></tr>
|
||||
<tr><td><tt>text</tt></td><td>Text fragment</td></tr>
|
||||
</tbody></table></p>
|
||||
</body>
|
||||
</html>
|
||||
|
141
mxmldoc.c
141
mxmldoc.c
@ -21,6 +21,7 @@
|
||||
* main() - Main entry for test program.
|
||||
* add_variable() - Add a variable or argument.
|
||||
* get_comment_info() - Get info from comment.
|
||||
* get_text() - Get the text for a node.
|
||||
* new_documentation() - Create a new documentation tree.
|
||||
* safe_strcpy() - Copy a string allowing for overlapping strings.
|
||||
* scan_file() - Scan a source file.
|
||||
@ -137,6 +138,7 @@
|
||||
static mxml_node_t *add_variable(mxml_node_t *parent, const char *name,
|
||||
mxml_node_t *type);
|
||||
static char *get_comment_info(mxml_node_t *description);
|
||||
static char *get_text(mxml_node_t *node, char *buffer, int buflen);
|
||||
static mxml_node_t *new_documentation(mxml_node_t **mxmldoc);
|
||||
static void safe_strcpy(char *dst, const char *src);
|
||||
static int scan_file(const char *filename, FILE *fp,
|
||||
@ -478,29 +480,72 @@ static char * /* O - Info from comment */
|
||||
get_comment_info(
|
||||
mxml_node_t *description) /* I - Description node */
|
||||
{
|
||||
char text[10240], /* Description text */
|
||||
since[255], /* @since value */
|
||||
*ptr; /* Pointer into text */
|
||||
static char info[1024]; /* Info string */
|
||||
int infolen; /* Length of info string */
|
||||
mxml_node_t *current; /* Current text node in description */
|
||||
|
||||
|
||||
if (!description)
|
||||
return ("<span class='info'>NULL</span>");
|
||||
return ("");
|
||||
|
||||
for (current = description->child; current; current = current->next)
|
||||
if (!strcmp(current->value.text.string, "@deprecated@"))
|
||||
get_text(description, text, sizeof(text));
|
||||
|
||||
for (ptr = strchr(text, '@'); ptr; ptr = strchr(ptr, '@'))
|
||||
{
|
||||
if (!strncmp(ptr, "@deprecated@", 12))
|
||||
return ("<span class='info'>DEPRECATED</span>");
|
||||
else if (!strcmp(current->value.text.string, "@since") && current->next)
|
||||
else if (!strncmp(ptr, "@since ", 7))
|
||||
{
|
||||
current = current->next;
|
||||
snprintf(info, sizeof(info), "<span class='info'>%s",
|
||||
current->value.text.string);
|
||||
infolen = strlen(info);
|
||||
strncpy(info + infolen - 1, "</span>", sizeof(info) - infolen);
|
||||
info[sizeof(info) - 1] = '\0';
|
||||
strncpy(since, ptr + 7, sizeof(since) - 1);
|
||||
since[sizeof(since) - 1] = '\0';
|
||||
|
||||
if ((ptr = strchr(since, '@')) != NULL)
|
||||
*ptr = '\0';
|
||||
|
||||
snprintf(info, sizeof(info), "<span class='info'>%s</span>", since);
|
||||
return (info);
|
||||
}
|
||||
}
|
||||
|
||||
return ("<span class='info'>NO</span>");
|
||||
return ("");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'get_text()' - Get the text for a node.
|
||||
*/
|
||||
|
||||
static char * /* O - Text in node */
|
||||
get_text(mxml_node_t *node, /* I - Node to get */
|
||||
char *buffer, /* I - Buffer */
|
||||
int buflen) /* I - Size of buffer */
|
||||
{
|
||||
char *ptr, /* Pointer into buffer */
|
||||
*end; /* End of buffer */
|
||||
int len; /* Length of node */
|
||||
mxml_node_t *current; /* Current node */
|
||||
|
||||
|
||||
ptr = buffer;
|
||||
end = buffer + buflen - 1;
|
||||
|
||||
for (current = node->child; current && ptr < end; current = current->next)
|
||||
{
|
||||
if (current->value.text.whitespace)
|
||||
*ptr++ = ' ';
|
||||
|
||||
len = strlen(current->value.text.string);
|
||||
if (len > (end - ptr))
|
||||
len = end - ptr;
|
||||
|
||||
memcpy(ptr, current->value.text.string, len);
|
||||
ptr += len;
|
||||
}
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
|
||||
@ -2004,30 +2049,70 @@ static void
|
||||
write_description(
|
||||
mxml_node_t *description) /* I - Description node */
|
||||
{
|
||||
mxml_node_t *current; /* Current text node in description */
|
||||
|
||||
char text[10240], /* Text for description */
|
||||
*ptr; /* Pointer into text */
|
||||
|
||||
if (!description)
|
||||
return;
|
||||
|
||||
for (current = description->child; current; current = current->next)
|
||||
if (!strcmp(current->value.text.string, "@deprecated@"))
|
||||
continue;
|
||||
else if (!strcmp(current->value.text.string, "@since") && current->next)
|
||||
get_text(description, text, sizeof(text));
|
||||
|
||||
for (ptr = text; *ptr; ptr ++)
|
||||
{
|
||||
if (*ptr == '@' && !strncmp(ptr + 1, "deprecated@", 11) &&
|
||||
!strncmp(ptr + 1, "since ", 6))
|
||||
{
|
||||
do
|
||||
ptr ++;
|
||||
while (*ptr && *ptr != '@')
|
||||
ptr ++;
|
||||
|
||||
if (!*ptr)
|
||||
return;
|
||||
}
|
||||
else if (*ptr == '&')
|
||||
fputs("&", stdout);
|
||||
else if (*ptr == '<')
|
||||
fputs("<", stdout);
|
||||
else if (*ptr == '>')
|
||||
fputs(">", stdout);
|
||||
else if (*ptr == '\"')
|
||||
fputs(""", stdout);
|
||||
else if (*ptr & 128)
|
||||
{
|
||||
/*
|
||||
* Convert UTF-8 to Unicode constant...
|
||||
*/
|
||||
|
||||
int ch; /* Unicode character */
|
||||
|
||||
|
||||
ch = *ptr & 255;
|
||||
|
||||
if ((ch & 0xe0) == 0xc0)
|
||||
{
|
||||
current = current->next;
|
||||
ch = ((ch & 0x1f) << 6) | (ptr[1] & 0x3f);
|
||||
ptr ++;
|
||||
}
|
||||
while (current && !strchr(current->value.text.string, '@'));
|
||||
else if ((ch & 0xf0) == 0xe0)
|
||||
{
|
||||
ch = ((((ch * 0x0f) << 6) | (ptr[1] & 0x3f)) << 6) | (ptr[2] & 0x3f);
|
||||
ptr += 2;
|
||||
}
|
||||
|
||||
if (ch == 0xa0)
|
||||
{
|
||||
/*
|
||||
* Handle non-breaking space as-is...
|
||||
*/
|
||||
|
||||
fputs(" ", stdout);
|
||||
}
|
||||
else
|
||||
printf("&#x%x;", ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (current->value.text.whitespace)
|
||||
putchar(' ');
|
||||
|
||||
write_string(current->value.text.string);
|
||||
}
|
||||
putchar(*ptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user