<!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>Crystal Space 1.2.1: csPolygonClipper Class Reference (Crystal Space 1.2.1 Public API Reference)</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <table border="0" cellpadding="0" cellspacing="0" width="100%" class="head"> <tr height="59"> <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td> <td class="head"><h2>Public API Reference</h2></td> </tr> <tr height="11"> <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td> </tr> </table> <div class="content"> <!-- Generated by Doxygen 1.5.3 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="classes.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="classes.html"><span>Alphabetical List</span></a></li> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <h1>csPolygonClipper Class Reference<br> <small> [<a class="el" href="group__geom__utils.html">Geometry utilities</a>]</small> </h1><!-- doxytag: class="csPolygonClipper" --><!-- doxytag: inherits="csClipper" -->The <a class="el" href="classcsPolygonClipper.html" title="The csPolygonClipper class can be used for clipping any polygon against any other...">csPolygonClipper</a> class can be used for clipping any polygon against any other convex polygon. <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="polyclip_8h-source.html">csgeom/polyclip.h</a>></code> <p> <div class="dynheader"> Inheritance diagram for csPolygonClipper:</div> <div class="dynsection"> <p><center><img src="classcsPolygonClipper__inherit__graph.png" border="0" usemap="#csPolygonClipper__inherit__map" alt="Inheritance graph"></center> <map name="csPolygonClipper__inherit__map"> <area shape="rect" href="classcsClipper.html" title="The csClipper class is an abstract parent to all 2D clipping objects." alt="" coords="171,239,251,265"><area shape="rect" href="classscfImplementation1.html" title="scfImplementation1\< csClipper, iClipper2D \>" alt="" coords="55,161,367,188"><area shape="rect" href="classscfImplementation.html" title="scfImplementation\< csClipper \>" alt="" coords="5,84,235,111"><area shape="rect" href="structiBase.html" title="This is the basic interface: all other interfaces should be derived from this one..." alt="" coords="264,7,320,33"><area shape="rect" href="structiClipper2D.html" title="This interfaces represents a 2D clipper for polygons." alt="" coords="259,84,347,111"><area shape="rect" href="classCS_1_1Memory_1_1CustomAllocated.html" title="Class that overrides operator new/operator delete/etc." alt="" coords="9,7,231,33"></map> <center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div> <p> <a href="classcsPolygonClipper-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#164092c4a641fb265404144e0eca5581">ClassifyBox</a> (const <a class="el" href="classcsBox2.html">csBox2</a> &box)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Classify some bounding box against this clipper. <a href="#164092c4a641fb265404144e0eca5581"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#71d7718035a5726b8953cd77039b8d5e">Clip</a> (<a class="el" href="classcsVector2.html">csVector2</a> *InPolygon, size_t InCount, <a class="el" href="classcsVector2.html">csVector2</a> *OutPolygon, size_t &OutCount, <a class="el" href="structcsVertexStatus.html">csVertexStatus</a> *OutStatus)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Clip and return additional information about each vertex. <a href="#71d7718035a5726b8953cd77039b8d5e"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#0e279c9b3565af1f753d1020c1dd00a8">Clip</a> (<a class="el" href="classcsVector2.html">csVector2</a> *InPolygon, size_t InCount, <a class="el" href="classcsVector2.html">csVector2</a> *OutPolygon, size_t &OutCount, <a class="el" href="classcsBox2.html">csBox2</a> &BoundingBox)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Clip and compute the bounding box. <a href="#0e279c9b3565af1f753d1020c1dd00a8"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#348b1a64a65d8e9c45747ba58d2a699f">Clip</a> (<a class="el" href="classcsVector2.html">csVector2</a> *InPolygon, size_t InCount, <a class="el" href="classcsVector2.html">csVector2</a> *OutPolygon, size_t &OutCount)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Simple clipping. <a href="#348b1a64a65d8e9c45747ba58d2a699f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#0ceb62ef3f67eeb59f9bcd8c8cdc5eee">csPolygonClipper</a> (<a class="el" href="classcsVector2.html">csVector2</a> *Clipper, size_t Count, bool mirror=false, bool copy=false)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Create a polygon clipper object from a set of 2D vectors. <a href="#0ceb62ef3f67eeb59f9bcd8c8cdc5eee"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#18a8bbd353e049fafa7d10006c5faba6">csPolygonClipper</a> (<a class="el" href="classcsPoly2D.html">csPoly2D</a> *Clipper, bool mirror=false, bool copy=false)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Create a polygon clipper object from a 2D polygon. <a href="#18a8bbd353e049fafa7d10006c5faba6"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="structiClipper2D.html#03ed976bdb8cd014a5dabccc06bd3730">ClipperType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#243d6b080a6679ec445bd4342267edd0">GetClipperType</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the type of this clipper. <a href="#243d6b080a6679ec445bd4342267edd0"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classcsVector2.html">csVector2</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#a7a349bdcfcd1e804cba188dd93a331e">GetClipPoly</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return a pointer to the array of csVector2's. <a href="#a7a349bdcfcd1e804cba188dd93a331e"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#26d0d6eca7d087e976d95b527ac72cff">GetVertexCount</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return number of vertices for this clipper polygon. <a href="#26d0d6eca7d087e976d95b527ac72cff"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#5915e077e6346b0c4b1611a3d66d3cf7">IsInside</a> (const <a class="el" href="classcsVector2.html">csVector2</a> &v)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return true if given point is inside (or on bound) of clipper polygon. <a href="#5915e077e6346b0c4b1611a3d66d3cf7"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classcsPolygonClipper.html#300d232ca0e06816eb6bb9355a8c24dc">~csPolygonClipper</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy the polygon clipper object. <a href="#300d232ca0e06816eb6bb9355a8c24dc"></a><br></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> The <a class="el" href="classcsPolygonClipper.html" title="The csPolygonClipper class can be used for clipping any polygon against any other...">csPolygonClipper</a> class can be used for clipping any polygon against any other convex polygon. <p> The clipper object should be used, if possible, for many polygons (for example, a 3D sprite can initialize a clipper object then clip all of its triangle against it at once) as the initialization of clipper polygon involves some (although not too expensive) calculations. The clipping polygon *should* be convex since the routine does not expect any line to intersect the edge of clipping polygon more than twice. <p>Definition at line <a class="el" href="polyclip_8h-source.html#l00142">142</a> of file <a class="el" href="polyclip_8h-source.html">polyclip.h</a>.</p> <hr><h2>Constructor & Destructor Documentation</h2> <a class="anchor" name="18a8bbd353e049fafa7d10006c5faba6"></a><!-- doxytag: member="csPolygonClipper::csPolygonClipper" ref="18a8bbd353e049fafa7d10006c5faba6" args="(csPoly2D *Clipper, bool mirror=false, bool copy=false)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">csPolygonClipper::csPolygonClipper </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsPoly2D.html">csPoly2D</a> * </td> <td class="paramname"> <em>Clipper</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"> <em>mirror</em> = <code>false</code>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"> <em>copy</em> = <code>false</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Create a polygon clipper object from a 2D polygon. <p> </div> </div><p> <a class="anchor" name="0ceb62ef3f67eeb59f9bcd8c8cdc5eee"></a><!-- doxytag: member="csPolygonClipper::csPolygonClipper" ref="0ceb62ef3f67eeb59f9bcd8c8cdc5eee" args="(csVector2 *Clipper, size_t Count, bool mirror=false, bool copy=false)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">csPolygonClipper::csPolygonClipper </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>Clipper</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>Count</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"> <em>mirror</em> = <code>false</code>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"> <em>copy</em> = <code>false</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Create a polygon clipper object from a set of 2D vectors. <p> </div> </div><p> <a class="anchor" name="300d232ca0e06816eb6bb9355a8c24dc"></a><!-- doxytag: member="csPolygonClipper::~csPolygonClipper" ref="300d232ca0e06816eb6bb9355a8c24dc" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual csPolygonClipper::~csPolygonClipper </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Destroy the polygon clipper object. <p> </div> </div><p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="164092c4a641fb265404144e0eca5581"></a><!-- doxytag: member="csPolygonClipper::ClassifyBox" ref="164092c4a641fb265404144e0eca5581" args="(const csBox2 &box)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual int csPolygonClipper::ClassifyBox </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsBox2.html">csBox2</a> & </td> <td class="paramname"> <em>box</em> </td> <td> ) </td> <td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Classify some bounding box against this clipper. <p> <p>Implements <a class="el" href="structiClipper2D.html#f79ddb0aa5da86b8fe78d25395385de6">iClipper2D</a>.</p> </div> </div><p> <a class="anchor" name="71d7718035a5726b8953cd77039b8d5e"></a><!-- doxytag: member="csPolygonClipper::Clip" ref="71d7718035a5726b8953cd77039b8d5e" args="(csVector2 *InPolygon, size_t InCount, csVector2 *OutPolygon, size_t &OutCount, csVertexStatus *OutStatus)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> csPolygonClipper::Clip </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>InPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>InCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>OutPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t & </td> <td class="paramname"> <em>OutCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structcsVertexStatus.html">csVertexStatus</a> * </td> <td class="paramname"> <em>OutStatus</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Clip and return additional information about each vertex. <p> <p>Implements <a class="el" href="structiClipper2D.html#3bd59eeae178ed2b3af653f88b71e9aa">iClipper2D</a>.</p> </div> </div><p> <a class="anchor" name="0e279c9b3565af1f753d1020c1dd00a8"></a><!-- doxytag: member="csPolygonClipper::Clip" ref="0e279c9b3565af1f753d1020c1dd00a8" args="(csVector2 *InPolygon, size_t InCount, csVector2 *OutPolygon, size_t &OutCount, csBox2 &BoundingBox)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> csPolygonClipper::Clip </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>InPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>InCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>OutPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t & </td> <td class="paramname"> <em>OutCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classcsBox2.html">csBox2</a> & </td> <td class="paramname"> <em>BoundingBox</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Clip and compute the bounding box. <p> <p>Implements <a class="el" href="structiClipper2D.html#5868f2ecb9b6de52cb9a2fb27901ea66">iClipper2D</a>.</p> </div> </div><p> <a class="anchor" name="348b1a64a65d8e9c45747ba58d2a699f"></a><!-- doxytag: member="csPolygonClipper::Clip" ref="348b1a64a65d8e9c45747ba58d2a699f" args="(csVector2 *InPolygon, size_t InCount, csVector2 *OutPolygon, size_t &OutCount)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="group__util.html#gdde6aaee8457bee49c2a92621fe22b79">uint8</a> csPolygonClipper::Clip </td> <td>(</td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>InPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>InCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classcsVector2.html">csVector2</a> * </td> <td class="paramname"> <em>OutPolygon</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t & </td> <td class="paramname"> <em>OutCount</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Simple clipping. <p> <p>Implements <a class="el" href="structiClipper2D.html#2b9dcd9f97500ea210e434a2f5f02299">iClipper2D</a>.</p> </div> </div><p> <a class="anchor" name="243d6b080a6679ec445bd4342267edd0"></a><!-- doxytag: member="csPolygonClipper::GetClipperType" ref="243d6b080a6679ec445bd4342267edd0" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="structiClipper2D.html#03ed976bdb8cd014a5dabccc06bd3730">ClipperType</a> csPolygonClipper::GetClipperType </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Retrieve the type of this clipper. <p> <p>Implements <a class="el" href="structiClipper2D.html#7016695a49e465211d75df6224a17979">iClipper2D</a>.</p> <p>Definition at line <a class="el" href="polyclip_8h-source.html#l00193">193</a> of file <a class="el" href="polyclip_8h-source.html">polyclip.h</a>.</p> </div> </div><p> <a class="anchor" name="a7a349bdcfcd1e804cba188dd93a331e"></a><!-- doxytag: member="csPolygonClipper::GetClipPoly" ref="a7a349bdcfcd1e804cba188dd93a331e" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="classcsVector2.html">csVector2</a>* csPolygonClipper::GetClipPoly </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Return a pointer to the array of csVector2's. <p> <p>Implements <a class="el" href="structiClipper2D.html#8210d2f967bdd837630a6caccea43169">iClipper2D</a>.</p> <p>Definition at line <a class="el" href="polyclip_8h-source.html#l00190">190</a> of file <a class="el" href="polyclip_8h-source.html">polyclip.h</a>.</p> </div> </div><p> <a class="anchor" name="26d0d6eca7d087e976d95b527ac72cff"></a><!-- doxytag: member="csPolygonClipper::GetVertexCount" ref="26d0d6eca7d087e976d95b527ac72cff" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual size_t csPolygonClipper::GetVertexCount </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Return number of vertices for this clipper polygon. <p> <p>Implements <a class="el" href="structiClipper2D.html#624994070bdb107a90f8902ba332a937">iClipper2D</a>.</p> <p>Definition at line <a class="el" href="polyclip_8h-source.html#l00187">187</a> of file <a class="el" href="polyclip_8h-source.html">polyclip.h</a>.</p> </div> </div><p> <a class="anchor" name="5915e077e6346b0c4b1611a3d66d3cf7"></a><!-- doxytag: member="csPolygonClipper::IsInside" ref="5915e077e6346b0c4b1611a3d66d3cf7" args="(const csVector2 &v)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual bool csPolygonClipper::IsInside </td> <td>(</td> <td class="paramtype">const <a class="el" href="classcsVector2.html">csVector2</a> & </td> <td class="paramname"> <em>v</em> </td> <td> ) </td> <td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Return true if given point is inside (or on bound) of clipper polygon. <p> <p>Implements <a class="el" href="structiClipper2D.html#c0b0813e21123d4211d8cd093b8dd3ba">iClipper2D</a>.</p> </div> </div><p> <hr>The documentation for this class was generated from the following file:<ul> <li>csgeom/<a class="el" href="polyclip_8h-source.html">polyclip.h</a></ul> <hr size="1"><address><small>Generated for Crystal Space 1.2.1 by <a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 </small></address> </div></body> </html>