<function>
<fname property="Applicative Order / LEVEL: 1">
OpenInterpreter
</fname>
<prototype>
LISP形式

(OpenInterpreter "stdio/socket/ipc" env-exp option )

XML形式

<Interpreter>
	stdio/accept/connect/ipc/file
	env-exp
	option
</OpenInterpreter>
</prototype>
<prototype>
C関数宣言
</prototype>
<explanation>
インタプリタの受け口を定義する。受け口の接続元を、stdio,accept,connect,ipcの中から指定する。また、最初のエントリ環境をenv-expに指定する。optionは以下の通り。
  <table border=1 cellspacing=0 cellpadding=0>
    <tr> 
      <td valign=top > 
        <p>LISP形式</p>
      </td>
      <td  valign=top > 
        <p>XML形式</p>
      </td>
      <td  valign=top > 
        <p>説明</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(FormatMode 
          &quot;lisp/xml/html&quot;)</p>
      </td>
      <td  valign=top > 
        <p>&lt;FormatMode&gt; 
          lisp/xml/html &lt;/FormatMode&gt;</p>
      </td>
      <td  valign=top > 
        <p>インタプリタの結果出力形式の指定</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(FormatIndent 
          string-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;FormatIndent&gt; 
          string-exp &lt;/FormatIndent&gt;</p>
      </td>
      <td  valign=top > 
        <p>インデントの設定1がインデントあり。</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(Port 
          integer-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;Port&gt; 
          integer-exp &lt;/Port&gt;</p>
      </td>
      <td  valign=top > 
        <p>ソケットまたはIPCのアクセプト・ポート番号</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(MaxConnection 
          integer-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;MaxConnection&gt; 
          integer-exp &lt;/MaxConnection&gt;</p>
      </td>
      <td  valign=top > 
        <p>最大ソケット/IPC接続数の指定</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(InputFileName 
          string-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;InputFileName&gt; 
          string-exp &lt;/InputFileName&gt;</p>
      </td>
      <td  valign=top > 
        <p>接続元の入力ストリームとなるファイル名</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(OutputFileName 
          string-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;OutputFileName&gt; 
          string-exp &lt;/FileName&gt;</p>
      </td>
      <td  valign=top > 
        <p>接続元の出力ストリームとなるファイル名</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(MaxConnectionTime 
          integer-exp)</p>
      </td>
      <td  valign=top > 
        <p >&lt;MaxConnectionTime&gt; 
          integer-exp &lt;/MaxConnectionTime&gt;</p>
      </td>
      <td  valign=top > 
        <p>最大コネクション時間の指定（秒）</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(MaxSilentTime 
          integer-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;MaxSilentTime&gt; 
          integer-exp &lt;/MaxSilentTime&gt;</p>
      </td>
      <td  valign=top > 
        <p>最大停止時間の指定（秒）</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(Environment 
          &quot;new/thisone&quot;)</p>
      </td>
      <td  valign=top > 
        <p>&lt;Environment&gt; 
          new/thisone &lt;/Environment&gt;</p>
      </td>
      <td  valign=top > 
        <p >&quot;thisone&quot;を指定すると、与えられたenv-expをそのままエントリ環境とする。&quot;new&quot;を指定すると新しい環境を生成し、その親をenv-expとする。</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(HostName 
          string-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;HostName&gt; 
          string-exp &lt;/HostName&gt;</p>
      </td>
      <td  valign=top > 
        <p>connect 先のホスト名を指定する</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(Result 
          integer-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;Result&gt; 
          integer-exp &lt;/Result&gt;</p>
      </td>
      <td  valign=top > 
        <p>1を指定すると、&lt;Result&gt;タグで結果を囲う。0を指定すると囲わない。</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(IP 
          string-exp)</p>
      </td>
      <td  valign=top > 
        <p>&lt;IP&gt; 
          string-exp &lt;/IP&gt;</p>
      </td>
      <td  valign=top > 
        <p>connect 先のIPアドレスを指定する。</p>
      </td>
    </tr>
    <tr> 
      <td  valign=top > 
        <p>(Permission 
          exp(login mode) allow/deny ...)</p>
      </td>
      <td  valign=top > 
        <p>&lt;IP&gt; 
          exp(login mode) allow/deny ... &lt;/IP&gt;</p>
      </td>
      <td  valign=top > 
        <p>accept 可能な接続元の指定。</p>
      </td>
    </tr>
  </table>

  <table border=1 cellspacing=0 cellpadding=0>
    <tr> 
      <td valign=bottom > 
        <p>命令</p>
      </td>
      <td valign=bottom > 
        <p>対象となる入力ストリームの種類</p>
      </td>
      <td valign=bottom > 
        <p>デフォルト値</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>FormatMode</p>
      </td>
      <td valign=bottom > 
        <p>stdio/file/connect/ipc</p>
      </td>
      <td valign=bottom > 
        <p>lisp</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>FormatIndent</p>
      </td>
      <td valign=bottom > 
        <p>stdio/file/connect/ipc</p>
      </td>
      <td valign=bottom > 
        <p>0</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>Port</p>
      </td>
      <td valign=bottom > 
        <p>connect/ipc</p>
      </td>
      <td valign=bottom > 
        <p>9090</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>MaxConnection</p>
      </td>
      <td valign=bottom > 
        <p>connect/ipc</p>
      </td>
      <td valign=bottom > 
        <p>10</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>InputFileName</p>
      </td>
      <td valign=bottom > 
        <p>file</p>
      </td>
      <td valign=bottom > 
        <p>なし。指定しないとエラー</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>OutputFileName</p>
      </td>
      <td valign=bottom > 
        <p>file</p>
      </td>
      <td valign=bottom > 
        <p>なし。指定しないと出力されない。</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>MaxConnectionTime</p>
      </td>
      <td valign=bottom > 
        <p>stdio/connect/ipc/file</p>
      </td>
      <td valign=bottom > 
        <p>無限大(-1)</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>MaxSilentTime</p>
      </td>
      <td valign=bottom > 
        <p>stdio/connect/ipc/file</p>
      </td>
      <td valign=bottom > 
        <p>無限大(-1)</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>Environment</p>
      </td>
      <td valign=bottom > 
        <p>stdio/connect/ipc/file</p>
      </td>
      <td valign=bottom > 
        <p>thisone</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>HostName</p>
      </td>
      <td valign=bottom > 
        <p>connect</p>
      </td>
      <td valign=bottom > 
        <p>HostName 
          または IP のどちらかを指定しないとエラー </p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>Result</p>
      </td>
      <td valign=bottom > 
        <p>すべて。</p>
      </td>
      <td valign=bottom> 
        <p>1</p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>IP</p>
      </td>
      <td valign=bottom > 
        <p>connect</p>
      </td>
      <td valign=bottom > 
        <p>HostName 
          または IP のどちらかを指定しないとエラー </p>
      </td>
    </tr>
    <tr> 
      <td valign=bottom > 
        <p>Permission</p>
      </td>
      <td valign=bottom > 
        <p>connect</p>
      </td>
      <td valign=bottom > 
        <p>全ての接続を拒絶</p>
      </td>
    </tr>
  </table>
Permission はApplicative 関数であり、その指定方法は、以下の通りである。 
<pre>
<Permission>
	<list> string-exp .... </list>
	<Allow/Deny> ... </Allow/Deny>
	....
</Permission>
</pre>
そしてAllow/Denyの指定方法は以下の通りである。Denyも同じである。 
<pre>
(1) <Allow>ip string-exp(ipアドレス) string-exp(ipアドレスマスク) </Allow>
(2) <Allow>domain string-exp</Allow>
(3) <Allow>all</Allow>
</pre>
ip で始まる物は、接続を許可するipアドレスを指定する。domainで始まる物は、接続を許可するdomainを指定する。allは全てを許可するという意味である。Denyは同様に拒絶するアドレスを指定する。 

接続を要求するクライアントがあった場合、Permissionの第二引数より、順番にチェックしていき、初めてマッチした要素がAllowであれば、接続許可、Denyであれば、接続拒絶となる。接続が許可された場合は、使用可能な接続モードが最初のリストに指定されている接続モードである。 

さらに、Permissionは複数指定することが出来る。クライアントから接続要求があると、始めに現れたPermissionからチェックし、最初にAllowとなったパーミッションの接続モードが使用可能な接続モードとなる。すべてのPermissionがDenyであると、接続拒絶である。

</explanation>