Sophie

Sophie

distrib > Mandriva > 2011.0 > x86_64 > by-pkgid > e4e5aca55b6d7244e6bae95bf4fde3ca > files > 374

lib64edelib-devel-2.0-1.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>edelib: Scheme interpreter</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">edelib
   &#160;<span id="projectnumber">2.0.0</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Scheme interpreter</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga8ac96df41766b3d2e3a8cf24650b780d">edelib_scheme_init_raw</a>&#160;&#160;&#160;scheme_init_new</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga6a6998e98c566466519bc21e9c5adfd7">edelib_scheme_deinit</a>&#160;&#160;&#160;scheme_deinit</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga25575558e2f197319ccb7eab3edd9e30">edelib_scheme_load_file</a>&#160;&#160;&#160;scheme_load_file</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga5d3d56c8b646ecb82f3ad459cadeee76">edelib_scheme_load_string</a>&#160;&#160;&#160;scheme_load_string</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gac967923d8455f3a9a57bcdd74add789e">edelib_scheme_set_external_data</a>&#160;&#160;&#160;scheme_set_external_data</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gae419764bce5ba4ac915c2df084202334">edelib_scheme_get_external_data</a>(sc)&#160;&#160;&#160;(sc)-&gt;ext_data</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga343d31f2d64147a36d5ff372526d777e">edelib_scheme_define</a>&#160;&#160;&#160;scheme_define</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga75a1af941638f83db7dbf724234afa0e">edelib_scheme_call</a>&#160;&#160;&#160;scheme_call</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gaf2261ee5566dbc81aed08e9ced1e2dc5">edelib_scheme_set_input_port_file</a>&#160;&#160;&#160;scheme_set_input_port_file</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gad6f90747aad3a644976ebeee64a3e10a">edelib_scheme_set_output_port_file</a>&#160;&#160;&#160;scheme_set_output_port_file</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gac49c7cf6069b6c6d8bd0636fe9b90480">edelib_scheme_set_input_port_string</a>&#160;&#160;&#160;scheme_set_input_port_string</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga65c228429c3e02bff96db30226d1447b">edelib_scheme_set_output_port_string</a>&#160;&#160;&#160;scheme_set_output_port_string</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga8d41e4f5ff2b84fd37369c1deca0a472">EDELIB_SCHEME_DEFINE</a>(sc, func_ptr, func_name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gaade059b8f78f5125faeef464bf35ac54">EDELIB_SCHEME_DEFINE2</a>(sc, func_ptr, func_name, doc)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gad9eb194a7959efa61fa6131963cdbadd">EDELIB_SCHEME_IS_NIL</a>(sc, var)&#160;&#160;&#160;((var) == sc-&gt;NIL)</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">scheme *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga6499e0c4ad67fe153645988e50b3ee1e">edelib_scheme_init</a> (void)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>This code provides Scheme interpreter and implements most of R5RS specification. The backend is based on <a href="http://tinyscheme.sourceforge.net">tinyscheme</a>.</p>
<p>If you are not familiar with Scheme, you can find numerous tutorials online about this language. Here are two, quite suitable for begginers:</p>
<ul>
<li><a href="http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html">Teach Yourself Scheme in Fixnum Days</a></li>
<li><a href="http://www.shido.info/lisp/idx_scm_e.html">Yet Another Scheme Tutorial</a></li>
</ul>
<p>To initialize interpreter you start with <em>edelib_scheme_init</em> or <em>edelib_scheme_init_raw</em>, which will return interpreter object. As interpreter does not use any global state, you can safely run multiple interpreter instances in different threads.</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000024">Todo:</a></b></dt><dd>Complete docs. </dd></dl>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga75a1af941638f83db7dbf724234afa0e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_call" ref="ga75a1af941638f83db7dbf724234afa0e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga75a1af941638f83db7dbf724234afa0e">edelib_scheme_call</a>&#160;&#160;&#160;scheme_call</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Calls scheme function. </p>

</div>
</div>
<a class="anchor" id="ga343d31f2d64147a36d5ff372526d777e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_define" ref="ga343d31f2d64147a36d5ff372526d777e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga343d31f2d64147a36d5ff372526d777e">edelib_scheme_define</a>&#160;&#160;&#160;scheme_define</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Defines a new function. You shoud use EDELIB_SCHEME_DEFINE or EDELIB_SCHEME_DEFINE2 instead. </p>

</div>
</div>
<a class="anchor" id="ga8d41e4f5ff2b84fd37369c1deca0a472"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_DEFINE" ref="ga8d41e4f5ff2b84fd37369c1deca0a472" args="(sc, func_ptr, func_name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga8d41e4f5ff2b84fd37369c1deca0a472">EDELIB_SCHEME_DEFINE</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sc, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">func_ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">func_name&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">sc-&gt;vptr-&gt;scheme_define(sc, sc-&gt;global_env,                           \
                              sc-&gt;vptr-&gt;mk_symbol(sc, func_name),       \
                              sc-&gt;vptr-&gt;mk_foreign_func(sc, func_ptr))
</pre></div><p>Define new scheme function. </p>

</div>
</div>
<a class="anchor" id="gaade059b8f78f5125faeef464bf35ac54"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_DEFINE2" ref="gaade059b8f78f5125faeef464bf35ac54" args="(sc, func_ptr, func_name, doc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gaade059b8f78f5125faeef464bf35ac54">EDELIB_SCHEME_DEFINE2</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sc, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">func_ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">func_name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">doc&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                                                           \
        scheme_load_string(sc, <span class="stringliteral">&quot;(add-doc &quot;</span> #func_name <span class="stringliteral">&quot;,&quot;</span> #doc <span class="stringliteral">&quot;)&quot;</span>); \
        EDELIB_SCHEME_DEFINE(sc, func_name, func_ptr);                           \
  } <span class="keywordflow">while</span>(0)
</pre></div><p>Define new scheme function with documentation. </p>

</div>
</div>
<a class="anchor" id="ga6a6998e98c566466519bc21e9c5adfd7"></a><!-- doxytag: member="Scheme.h::edelib_scheme_deinit" ref="ga6a6998e98c566466519bc21e9c5adfd7" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga6a6998e98c566466519bc21e9c5adfd7">edelib_scheme_deinit</a>&#160;&#160;&#160;scheme_deinit</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Deinitialize and clear scheme interpeter object. </p>

</div>
</div>
<a class="anchor" id="gae419764bce5ba4ac915c2df084202334"></a><!-- doxytag: member="Scheme.h::edelib_scheme_get_external_data" ref="gae419764bce5ba4ac915c2df084202334" args="(sc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gae419764bce5ba4ac915c2df084202334">edelib_scheme_get_external_data</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sc</td><td>)</td>
          <td>&#160;&#160;&#160;(sc)-&gt;ext_data</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get data set with <em>edelib_scheme_set_external_data</em>. </p>

</div>
</div>
<a class="anchor" id="ga8ac96df41766b3d2e3a8cf24650b780d"></a><!-- doxytag: member="Scheme.h::edelib_scheme_init_raw" ref="ga8ac96df41766b3d2e3a8cf24650b780d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga8ac96df41766b3d2e3a8cf24650b780d">edelib_scheme_init_raw</a>&#160;&#160;&#160;scheme_init_new</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Initialize scheme interpeter, but will not load any code. Useful for explicitly loading desired bootstrap code. </p>

</div>
</div>
<a class="anchor" id="gad9eb194a7959efa61fa6131963cdbadd"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_IS_NIL" ref="gad9eb194a7959efa61fa6131963cdbadd" args="(sc, var)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gad9eb194a7959efa61fa6131963cdbadd">EDELIB_SCHEME_IS_NIL</a></td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sc, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">var&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;((var) == sc-&gt;NIL)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Macro for checking if given variable nil (NULL in scheme parlance). </p>

</div>
</div>
<a class="anchor" id="ga25575558e2f197319ccb7eab3edd9e30"></a><!-- doxytag: member="Scheme.h::edelib_scheme_load_file" ref="ga25575558e2f197319ccb7eab3edd9e30" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga25575558e2f197319ccb7eab3edd9e30">edelib_scheme_load_file</a>&#160;&#160;&#160;scheme_load_file</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Load scheme source from file. </p>

</div>
</div>
<a class="anchor" id="ga5d3d56c8b646ecb82f3ad459cadeee76"></a><!-- doxytag: member="Scheme.h::edelib_scheme_load_string" ref="ga5d3d56c8b646ecb82f3ad459cadeee76" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga5d3d56c8b646ecb82f3ad459cadeee76">edelib_scheme_load_string</a>&#160;&#160;&#160;scheme_load_string</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Load scheme source from string. </p>

</div>
</div>
<a class="anchor" id="gac967923d8455f3a9a57bcdd74add789e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_external_data" ref="gac967923d8455f3a9a57bcdd74add789e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gac967923d8455f3a9a57bcdd74add789e">edelib_scheme_set_external_data</a>&#160;&#160;&#160;scheme_set_external_data</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set additional data (pointer) accessible from scheme function. You can get data with <em>edelib_scheme_get_external_data</em> </p>

</div>
</div>
<a class="anchor" id="gaf2261ee5566dbc81aed08e9ced1e2dc5"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_input_port_file" ref="gaf2261ee5566dbc81aed08e9ced1e2dc5" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gaf2261ee5566dbc81aed08e9ced1e2dc5">edelib_scheme_set_input_port_file</a>&#160;&#160;&#160;scheme_set_input_port_file</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set FILE object as input port. </p>

</div>
</div>
<a class="anchor" id="gac49c7cf6069b6c6d8bd0636fe9b90480"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_input_port_string" ref="gac49c7cf6069b6c6d8bd0636fe9b90480" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gac49c7cf6069b6c6d8bd0636fe9b90480">edelib_scheme_set_input_port_string</a>&#160;&#160;&#160;scheme_set_input_port_string</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set character array as input port. You should give pointer to the first element and pointer to the last. </p>

</div>
</div>
<a class="anchor" id="gad6f90747aad3a644976ebeee64a3e10a"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_output_port_file" ref="gad6f90747aad3a644976ebeee64a3e10a" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#gad6f90747aad3a644976ebeee64a3e10a">edelib_scheme_set_output_port_file</a>&#160;&#160;&#160;scheme_set_output_port_file</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set FILE object as output port. </p>

</div>
</div>
<a class="anchor" id="ga65c228429c3e02bff96db30226d1447b"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_output_port_string" ref="ga65c228429c3e02bff96db30226d1447b" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__scheme.html#ga65c228429c3e02bff96db30226d1447b">edelib_scheme_set_output_port_string</a>&#160;&#160;&#160;scheme_set_output_port_string</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set character array as output port. You should give pointer to the first element and pointer to the last. </p>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga6499e0c4ad67fe153645988e50b3ee1e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_init" ref="ga6499e0c4ad67fe153645988e50b3ee1e" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">scheme* <a class="el" href="group__scheme.html#ga6499e0c4ad67fe153645988e50b3ee1e">edelib_scheme_init</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Initialize scheme interpreter and returns scheme object. By default, it will try to search bootstrap files in builtin path (depends on <em>--prefix</em> when <b>configure</b> script was run). This can be overridden by setting <em>EDELIB_SCHEME_INIT</em> environment variable with explicitly given bootstrap files and their absolute path. The paths should be separated with <b>:</b> (just as PATH), e.g. <em>path/init.ss:path/init-2.ss:/path/other.ss</em>. </p>

</div>
</div>
</div><!-- contents -->


<hr class="footer"/><address class="footer"><small>
Generated on Tue Jun 5 2012 17:49:02 for edelib by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>

</body>
</html>