<HTML>
	<HEAD>
    	<TITLE>Adobe ExtendScript Toolkit</TITLE>
		<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
		<LINK HREF="adobe.css" REL="stylesheet" TYPE="text/css">
        <LINK HREF="tabs.css" REL="stylesheet" TYPE="text/css">
 	</HEAD>
	<BODY> 
    <div class="header"><a href="http://www.adobe.com"><img src="adobelogo.jpg" alt="http://www.adobe.com"></a>&nbsp;<b>ExtendScript ToolKit</b></div>
<!-- Generated by Doxygen 1.5.5 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>BasicExternalObject.cpp File Reference</h1>The sample shows how to implement a basic external object and to extend the JavaScript DOM. <a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="_basic_external_object_8h.html">BasicExternalObject.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="_so_shared_lib_defs_8h.html">SoSharedLibDefs.h</a>&quot;</code><br>
<code>#include &lt;string&gt;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#6073cc33e04dc716f8f116ae51b02d53">getNewBuffer</a> (string &amp;s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Utility function to handle strings and memory clean up.  <a href="#6073cc33e04dc716f8f116ae51b02d53"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#e2ff3825f68f9491d37d0f7e7f6142f6">makeArray</a> (<a class="el" href="struct_tagged_data__s.html">TaggedData</a> *argv, long argc, <a class="el" href="struct_tagged_data__s.html">TaggedData</a> *retval)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a three-element array as a script and returns that array.  <a href="#e2ff3825f68f9491d37d0f7e7f6142f6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#9e7f9d2572cf7a4b473be84775bb72a8">getAverage</a> (<a class="el" href="struct_tagged_data__s.html">TaggedData</a> *argv, long argc, <a class="el" href="struct_tagged_data__s.html">TaggedData</a> *retval)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#f09ca128dc9332426b9ac03fefcbb5b0">appendString</a> (<a class="el" href="struct_tagged_data__s.html">TaggedData</a> *argv, long argc, <a class="el" href="struct_tagged_data__s.html">TaggedData</a> *retval)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#f448f4d2008a94dd31dcda2d5cc432cf">myScript</a> (<a class="el" href="struct_tagged_data__s.html">TaggedData</a> *argv, long argc, <a class="el" href="struct_tagged_data__s.html">TaggedData</a> *retval)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns a script that creates a new dialog window within the ESTK.  <a href="#f448f4d2008a94dd31dcda2d5cc432cf"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#8aaf9e3d63397fb7cf170f9f30d435db">acceptBoolean</a> (<a class="el" href="struct_tagged_data__s.html">TaggedData</a> *argv, long argc, <a class="el" href="struct_tagged_data__s.html">TaggedData</a> *retval)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">accepts a single parameter of true or false.  <a href="#8aaf9e3d63397fb7cf170f9f30d435db"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#e27fc7ab1b846a6185f3361fc1d8f6c6">ESFreeMem</a> (void *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free any string memory which has been returned as function result.  <a href="#e27fc7ab1b846a6185f3361fc1d8f6c6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#dd359b4e0739c54b26d20bdbbbdd7459">ESGetVersion</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the version number of the library.  <a href="#dd359b4e0739c54b26d20bdbbbdd7459"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#e6d11493cc933f1826466dc66402c252">ESInitialize</a> (const <a class="el" href="struct_tagged_data__s.html">TaggedData</a> **argv, long argc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the library and return function signatures.  <a href="#e6d11493cc933f1826466dc66402c252"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">BASICEXTERNALOBJECT_API void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_basic_external_object_8cpp.html#c2a9f8f38ca869a42b403d8013eacbc9">ESTerminate</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Terminate the library.  <a href="#c2a9f8f38ca869a42b403d8013eacbc9"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
The sample shows how to implement a basic external object and to extend the JavaScript DOM. 
<p>
The sample demonstrates how to pass simple data types back to JavaScript from the External Object such as Strings, booleans, integers and scripts.<p>
All of the exported functions that are available to JavaScript take 3 arguments:<p>
<ul>
<li>An array of variant data. </li>
<li>An argument count. </li>
<li>A variant data structure that takes the return value.</li>
</ul>
The variant data is of type TaggedData, which represents a JavaScript argument. The supported data types for TaggedData are:<p>
<ul>
<li>Undefinied </li>
<li>Boolean </li>
<li>Double </li>
<li>String </li>
<li>Script</li>
</ul>
For information on how to call the individual methods then see the comments for each methods or see the loadExternalObject.jsx script file that accompanies this sample.<p>
See <a class="el" href="_so_shared_lib_defs_8h.html">SoSharedLibDefs.h</a> for error codes and return types<p>
See sampleprojects for information on how to build the library<p>
See installing for information on how to install and use the library <hr><h2>Function Documentation</h2>
<a class="anchor" name="8aaf9e3d63397fb7cf170f9f30d435db"></a><!-- doxytag: member="BasicExternalObject.cpp::acceptBoolean" ref="8aaf9e3d63397fb7cf170f9f30d435db" args="(TaggedData *argv, long argc, TaggedData *retval)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long acceptBoolean           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>retval</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
accepts a single parameter of true or false. 
<p>
This methods returns a string to JavaScript describing the value that was passed in as an argument. To call from JavaScript:<p>
<div class="fragment"><pre class="fragment"> myObj.acceptBoolean(<span class="keyword">true</span>);
</pre></div><p>
If the arguments are not correct then a bad argument error code is returned.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argv</em>&nbsp;</td><td>- The JavaScript argument </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argc</em>&nbsp;</td><td>the argument count </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>retval</em>&nbsp;</td><td>The return value to be passed back to JavaScript </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="f09ca128dc9332426b9ac03fefcbb5b0"></a><!-- doxytag: member="BasicExternalObject.cpp::appendString" ref="f09ca128dc9332426b9ac03fefcbb5b0" args="(TaggedData *argv, long argc, TaggedData *retval)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long appendString           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>retval</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Appends a string onto the passed argument.<p>
This function only accepts a single argument, a String. The passed argument is appended with another string and then returned back to the scripting environment. To call from JavaScript:<p>
<div class="fragment"><pre class="fragment"> myObj.appendString(<span class="stringliteral">"A String"</span>);
</pre></div><p>
If the arguments are not correct then a bad argument error code is returned.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argv</em>&nbsp;</td><td>- The JavaScript argument </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argc</em>&nbsp;</td><td>the argument count </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>retval</em>&nbsp;</td><td>The return value to be passed back to JavaScript </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="e27fc7ab1b846a6185f3361fc1d8f6c6"></a><!-- doxytag: member="BasicExternalObject.cpp::ESFreeMem" ref="e27fc7ab1b846a6185f3361fc1d8f6c6" args="(void *p)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API void ESFreeMem           </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>p</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Free any string memory which has been returned as function result. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>*p</em>&nbsp;</td><td>Pointer to the string </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="dd359b4e0739c54b26d20bdbbbdd7459"></a><!-- doxytag: member="BasicExternalObject.cpp::ESGetVersion" ref="dd359b4e0739c54b26d20bdbbbdd7459" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long ESGetVersion           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Returns the version number of the library. 
<p>
ExtendScript publishes this number as the version property of the object created by new ExternalObject. 
</div>
</div><p>
<a class="anchor" name="e6d11493cc933f1826466dc66402c252"></a><!-- doxytag: member="BasicExternalObject.cpp::ESInitialize" ref="e6d11493cc933f1826466dc66402c252" args="(const TaggedData **argv, long argc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API char* ESInitialize           </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="struct_tagged_data__s.html">TaggedData</a> **&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialize the library and return function signatures. 
<p>
These signatures have no effect on the arguments that can be passed to the functions. They are used by JavaScript to cast the arguments, and to populate the reflection interface. 
</div>
</div><p>
<a class="anchor" name="c2a9f8f38ca869a42b403d8013eacbc9"></a><!-- doxytag: member="BasicExternalObject.cpp::ESTerminate" ref="c2a9f8f38ca869a42b403d8013eacbc9" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API void ESTerminate           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Terminate the library. 
<p>
Does any necessary clean up that is needed. 
</div>
</div><p>
<a class="anchor" name="9e7f9d2572cf7a4b473be84775bb72a8"></a><!-- doxytag: member="BasicExternalObject.cpp::getAverage" ref="9e7f9d2572cf7a4b473be84775bb72a8" args="(TaggedData *argv, long argc, TaggedData *retval)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long getAverage           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>retval</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Computes the average of passed integers.<p>
From JavaScript, this function can be called with any number of arguments. The passed arguments must be numbers and not strings. To call from JavaScript:<p>
<div class="fragment"><pre class="fragment"> myObj.average(10, 20, 30);
</pre></div><p>
If the arguments are not correct then a bad argument error code is returned.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argv</em>&nbsp;</td><td>- The JavaScript argument </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argc</em>&nbsp;</td><td>the argument count </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>retval</em>&nbsp;</td><td>The return value to be passed back to JavaScript </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="6073cc33e04dc716f8f116ae51b02d53"></a><!-- doxytag: member="BasicExternalObject.cpp::getNewBuffer" ref="6073cc33e04dc716f8f116ae51b02d53" args="(string &amp;s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static char* getNewBuffer           </td>
          <td>(</td>
          <td class="paramtype">string &amp;&nbsp;</td>
          <td class="paramname"> <em>s</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Utility function to handle strings and memory clean up. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>- The referenced string </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="e2ff3825f68f9491d37d0f7e7f6142f6"></a><!-- doxytag: member="BasicExternalObject.cpp::makeArray" ref="e2ff3825f68f9491d37d0f7e7f6142f6" args="(TaggedData *argv, long argc, TaggedData *retval)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long makeArray           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>retval</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create a three-element array as a script and returns that array. 
<p>
The return type is set to kTypeScript so when the string is returned to the scripting engine it will be evaluated and ran as a script. From JavaScript this methods accept zero arguments:<p>
<div class="fragment"><pre class="fragment"> myObj.makeArray();
</pre></div><p>
If the arguments are not correct then a bad argument error code is returned.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argv</em>&nbsp;</td><td>- The JavaScript argument </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argc</em>&nbsp;</td><td>the argument count </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>retval</em>&nbsp;</td><td>The return value to be passed back to JavaScript </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="f448f4d2008a94dd31dcda2d5cc432cf"></a><!-- doxytag: member="BasicExternalObject.cpp::myScript" ref="f448f4d2008a94dd31dcda2d5cc432cf" args="(TaggedData *argv, long argc, TaggedData *retval)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">BASICEXTERNALOBJECT_API long myScript           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_tagged_data__s.html">TaggedData</a> *&nbsp;</td>
          <td class="paramname"> <em>retval</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Returns a script that creates a new dialog window within the ESTK. 
<p>
The return type is set to kTypeScript so when the string is returned to the scripting engine it will be evaluated and ran as a script. The return script creates a new dialog window named 'Externalobject' with a 'OK' button that when clicked closes the connection between the jsx and ExternalObject.<p>
Function accepts any number of parameters of any data type but will ignore them. To call from JavaScript:<p>
<div class="fragment"><pre class="fragment"> myObj.myScript();
</pre></div><p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argv</em>&nbsp;</td><td>- The JavaScript argument </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argc</em>&nbsp;</td><td>the argument count </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>retval</em>&nbsp;</td><td>The return value to be passed back to JavaScript </td></tr>
  </table>
</dl>

</div>
</div><p>
</div>
<p><img src="1ptrans.gif" /><p>
<p><img src="1ptrans.gif"  /></p>
<p><img src="asn.gif" width="114" height="45" border="0" alt="Adobe Solutions Network">Copyright&#169; 2008 Adobe Systems Incorporated. All rights reserved.</p>
<p>
    	<a href="http://www.adobe.com/misc/copyright.html">Terms of Use</a>&nbsp;
        <a href="http://www.adobe.com/misc/privacy.html">Online Privacy Policy</a>&nbsp;
        <a href="http://access.adobe.com">Adobe and accessibility</a>&nbsp;
        <a href="http://www.adobe.com/aboutadobe/antipiracy/main.html">Avoid software piracy</a>&nbsp;
        <a href="http://www.adobe.com/misc/agreement.html">Permissions and Trademarks</a>
</p>
</body>
</html>
