OSDN Git Service

271ad56bf997980b6c4b8a63ffdee9e14b85ee10
[ring-lang-081/ring.git] / docs / build / html / embedding.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>C/C++ プログラムへ Ring を組み込むには &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
10     
11     <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    './',
17         VERSION:     '1.12',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="_static/jquery.js"></script>
24     <script type="text/javascript" src="_static/underscore.js"></script>
25     <script type="text/javascript" src="_static/doctools.js"></script>
26     <script type="text/javascript" src="_static/translations.js"></script>
27     <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28     <link rel="next" title="C/C++ ライブラリ接続用コード生成器" href="codegenerator.html" />
29     <link rel="prev" title="C/C++ による拡張機能の開発方法" href="extension.html" />
30     <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
31
32   </head>
33   <body role="document">
34 <div class="topbar">
35   <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
36   <ul>
37     
38     <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39     <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40     <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41     <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42     <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43     <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
44     
45     <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46     <li><a title="総合索引" href="genindex.html">Index</a></li>
47     <li>
48       
49       
50 <form action="search.html" method="get">
51   <input type="text" name="q" placeholder="Search" />
52   <input type="hidden" name="check_keywords" value="yes" />
53   <input type="hidden" name="area" value="default" />
54 </form>
55       
56     </li>
57   </ul>
58 </div>
59
60 <div class="related">
61     <h3>ナビゲーション</h3>
62     <ul>
63       <li class="right">
64         <a href="codegenerator.html" title="C/C++ ライブラリ接続用コード生成器">
65           next &raquo;
66         </a>
67       </li>
68       <li class="right">
69         <a href="extension.html" title="C/C++ による拡張機能の開発方法">
70           &laquo; previous
71         </a>
72          |
73       </li>
74       <li>
75         <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
76          &raquo;
77       </li>
78       
79       <li>C/C++ プログラムへ Ring を組み込むには</li> 
80     </ul>
81 </div>
82   
83
84     <div class="document">
85       <div class="documentwrapper">
86         <div class="bodywrapper">
87           <div class="body" role="main">
88             
89   <div class="section" id="c-c-ring">
90 <span id="index-0"></span><h1>C/C++ プログラムへ Ring を組み込むには<a class="headerlink" href="#c-c-ring" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>この関数により C/C++ プログラムから Ring を使えます。</p>
92 <div class="highlight-C"><div class="highlight"><pre><span class="n">RingState</span> <span class="o">*</span><span class="nf">ring_state_init</span><span class="p">();</span>
93 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">RingState</span> <span class="o">*</span><span class="n">pState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cCode</span><span class="p">);</span>
94 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">RingState</span> <span class="o">*</span><span class="n">pState</span><span class="p">);</span>
95 </pre></div>
96 </div>
97 <div class="section" id="ring">
98 <span id="index-1"></span><h2>Ring のステート<a class="headerlink" href="#ring" title="このヘッドラインへのパーマリンク">¶</a></h2>
99 <p>考えかたとしては ring_state_init() で Ring ステートの新規作成後に、
100 ring_state_runcode() 関数を呼び出すことで、同一ステートの Ring コードの実行します。
101 処理完了後に ring_state_delete() を呼び出して、メモリを解放します。</p>
102 <p>用例:</p>
103 <div class="highlight-C"><div class="highlight"><pre><span class="cp">#include &quot;ring.h&quot;</span>
104 <span class="cp">#include &quot;stdlib.h&quot;</span>
105 <span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span>
106 <span class="p">{</span>
107   <span class="n">RingState</span> <span class="o">*</span><span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">();</span>
108   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;welcome</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
109   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;hello world from the ring programming language&#39;+nl&quot;</span><span class="p">);</span>
110   <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">);</span>
111 <span class="p">}</span>
112 </pre></div>
113 </div>
114 <p>実行結果:</p>
115 <div class="highlight-C"><div class="highlight"><pre><span class="n">welcome</span>
116 <span class="n">hello</span> <span class="n">world</span> <span class="n">from</span> <span class="n">the</span> <span class="n">ring</span> <span class="n">programming</span> <span class="n">language</span>
117 </pre></div>
118 </div>
119 </div>
120 <div class="section" id="index-2">
121 <span id="id1"></span><h2>Ring ステート関数<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
122 <p>Ring の API にはステートの作成と削除を行う関数です。
123 また、新しい変数の作成と変数の値を取得するための関数もあります。</p>
124 <div class="highlight-C"><div class="highlight"><pre><span class="n">RingState</span> <span class="o">*</span> <span class="nf">ring_state_init</span> <span class="p">(</span> <span class="kt">void</span> <span class="p">)</span> <span class="p">;</span>
125 <span class="n">RingState</span> <span class="o">*</span> <span class="nf">ring_state_delete</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span> <span class="p">)</span> <span class="p">;</span>
126 <span class="kt">void</span> <span class="nf">ring_state_runcode</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cStr</span> <span class="p">)</span> <span class="p">;</span>
127 <span class="n">List</span> <span class="o">*</span> <span class="nf">ring_state_findvar</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cStr</span> <span class="p">)</span> <span class="p">;</span>
128 <span class="n">List</span> <span class="o">*</span> <span class="nf">ring_state_newvar</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cStr</span> <span class="p">)</span> <span class="p">;</span>
129 <span class="kt">void</span> <span class="nf">ring_state_main</span> <span class="p">(</span> <span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[]</span> <span class="p">)</span> <span class="p">;</span>
130 <span class="kt">void</span> <span class="nf">ring_state_runfile</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cFileName</span> <span class="p">)</span> <span class="p">;</span>
131 <span class="kt">void</span> <span class="nf">ring_state_runobjectfile</span> <span class="p">(</span> <span class="n">RingState</span> <span class="o">*</span><span class="n">pRingState</span><span class="p">,</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cFileName</span> <span class="p">)</span> <span class="p">;</span>
132 </pre></div>
133 </div>
134 </div>
135 <div class="section" id="index-3">
136 <span id="id2"></span><h2>Ring ステート変数<a class="headerlink" href="#index-3" title="このヘッドラインへのパーマリンク">¶</a></h2>
137 <p>同一プログラム内で複数の Ring のステートを作成できます。また、変数の作成と値の変更もできます。</p>
138 <p>ring_state_findvar() 関数は変数のリストを取得します。</p>
139 <p>ring_state_newvar() 関数は新しい変数を作成します。</p>
140 <p>用例:</p>
141 <div class="highlight-C"><div class="highlight"><pre><span class="cp">#include &quot;ring.h&quot;</span>
142 <span class="cp">#include &quot;stdlib.h&quot;</span>
143
144 <span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span>
145 <span class="p">{</span>
146   <span class="n">List</span> <span class="o">*</span><span class="n">pList</span><span class="p">;</span>
147
148   <span class="n">RingState</span> <span class="o">*</span><span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">();</span>
149   <span class="n">RingState</span> <span class="o">*</span><span class="n">pState2</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">();</span>
150
151   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;welcome</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
152   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;hello world from the ring programming language&#39;+nl&quot;</span><span class="p">);</span>
153
154   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;Again from C we will call ring code</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
155   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;for x = 1 to 10 see x + nl next&quot;</span><span class="p">);</span>
156
157   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">&quot;for x = 1 to 5 see x + nl next&quot;</span><span class="p">);</span>
158
159   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;Now we will display the x variable value from ring code</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
160   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;x value : &#39; + x + nl &quot;</span><span class="p">);</span>
161   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">&quot;see &#39;x value : &#39; + x + nl &quot;</span><span class="p">);</span>
162
163   <span class="n">pList</span> <span class="o">=</span> <span class="n">ring_state_findvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;x&quot;</span><span class="p">);</span>
164
165   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;Printing Ring variable value from C , %.0f</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
166                 <span class="n">ring_list_getdouble</span><span class="p">(</span><span class="n">pList</span><span class="p">,</span><span class="n">RING_VAR_VALUE</span><span class="p">));</span>
167
168   <span class="n">printf</span><span class="p">(</span><span class="s">&quot;now we will set the ring variable value from C</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
169   <span class="n">ring_list_setdouble</span><span class="p">(</span><span class="n">pList</span><span class="p">,</span><span class="n">RING_VAR_VALUE</span><span class="p">,</span><span class="mi">20</span><span class="p">);</span>
170
171   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;x value after update : &#39; + x + nl &quot;</span><span class="p">);</span>
172
173   <span class="n">pList</span> <span class="o">=</span> <span class="n">ring_state_newvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;v1&quot;</span><span class="p">);</span>
174   <span class="n">ring_list_setdouble</span><span class="p">(</span><span class="n">pList</span><span class="p">,</span><span class="n">RING_VAR_VALUE</span><span class="p">,</span><span class="mi">10</span><span class="p">);</span>
175
176   <span class="n">pList</span> <span class="o">=</span> <span class="n">ring_state_newvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;v2&quot;</span><span class="p">);</span>
177   <span class="n">ring_list_setdouble</span><span class="p">(</span><span class="n">pList</span><span class="p">,</span><span class="n">RING_VAR_VALUE</span><span class="p">,</span><span class="mi">20</span><span class="p">);</span>
178
179   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;v1 + v2 = &#39; see v1+v2 see nl&quot;</span><span class="p">);</span>
180
181   <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">&quot;see &#39;end of test&#39; + nl&quot;</span><span class="p">);</span>
182
183   <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">);</span>
184   <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState2</span><span class="p">);</span>
185 <span class="p">}</span>
186 </pre></div>
187 </div>
188 <p>実行結果:</p>
189 <div class="highlight-ring"><div class="highlight"><pre><span class="n">welcome</span>
190 <span class="n">hello</span> <span class="n">world</span> <span class="k">from</span> <span class="n">the</span> <span class="n">ring</span> <span class="n">programming</span> <span class="n">language</span>
191 <span class="k">Again</span> <span class="k">from</span> <span class="n">C</span> <span class="n">we</span> <span class="n">will</span> <span class="k">call</span> <span class="n">ring</span> <span class="n">code</span>
192 <span class="mi">1</span>
193 <span class="mi">2</span>
194 <span class="mi">3</span>
195 <span class="mi">4</span>
196 <span class="mi">5</span>
197 <span class="mi">6</span>
198 <span class="mi">7</span>
199 <span class="mi">8</span>
200 <span class="mi">9</span>
201 <span class="mi">10</span>
202 <span class="mi">1</span>
203 <span class="mi">2</span>
204 <span class="mi">3</span>
205 <span class="mi">4</span>
206 <span class="mi">5</span>
207 <span class="n">Now</span> <span class="n">we</span> <span class="n">will</span> <span class="n">display</span> <span class="n">the</span> <span class="n">x</span> <span class="n">variable</span> <span class="n">value</span> <span class="k">from</span> <span class="n">ring</span> <span class="n">code</span>
208 <span class="n">x</span> <span class="n">value</span> <span class="p">:</span> <span class="mi">11</span>
209 <span class="n">x</span> <span class="n">value</span> <span class="p">:</span> <span class="mi">6</span>
210 <span class="n">Printing</span> <span class="n">Ring</span> <span class="n">variable</span> <span class="n">value</span> <span class="k">from</span> <span class="n">C</span> <span class="p">,</span> <span class="mi">11</span>
211 <span class="n">now</span> <span class="n">we</span> <span class="n">will</span> <span class="n">set</span> <span class="n">the</span> <span class="n">ring</span> <span class="n">variable</span> <span class="n">value</span> <span class="k">from</span> <span class="n">C</span>
212 <span class="n">x</span> <span class="n">value</span> <span class="n">after</span> <span class="n">update</span> <span class="p">:</span> <span class="mi">20</span>
213 <span class="n">v1</span> <span class="o">+</span> <span class="n">v2</span> <span class="o">=</span> <span class="mi">30</span>
214 <span class="k">end</span> <span class="n">of</span> <span class="n">test</span>
215 </pre></div>
216 </div>
217 </div>
218 </div>
219
220
221           </div>
222         </div>
223       </div>
224       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
225         <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
226 <ul>
227 <li><a class="reference internal" href="#">C/C++ プログラムへ Ring を組み込むには</a><ul>
228 <li><a class="reference internal" href="#ring">Ring のステート</a></li>
229 <li><a class="reference internal" href="#index-2">Ring ステート関数</a></li>
230 <li><a class="reference internal" href="#index-3">Ring ステート変数</a></li>
231 </ul>
232 </li>
233 </ul>
234
235
236   <h4>前のトピックへ</h4>
237   <p class="topless"><a href="extension.html"
238                         title="前の章へ">C/C++ による拡張機能の開発方法</a></p>
239   <h4>次のトピックへ</h4>
240   <p class="topless"><a href="codegenerator.html"
241                         title="次の章へ">C/C++ ライブラリ接続用コード生成器</a></p>
242   <div role="note" aria-label="source link">
243     <h3>このページ</h3>
244     <ul class="this-page-menu">
245       <li><a href="_sources/embedding.txt"
246             rel="nofollow">ソースコードを表示</a></li>
247     </ul>
248    </div>
249       
250 <form action="search.html" method="get">
251   <input type="text" name="q" placeholder="Search" />
252   <input type="hidden" name="check_keywords" value="yes" />
253   <input type="hidden" name="area" value="default" />
254 </form>
255       
256         </div>
257       </div>
258       <div class="clearer"></div>
259     </div>
260 <footer class="footer">
261   <p class="pull-right">
262     <a href="_sources/embedding.txt"
263        rel="nofollow">Page Source</a> &nbsp;
264     <a href="#">Back to Top</a></p>
265   <p>
266     &copy; Copyright 2016-2020, Ring Team.<br/>
267     Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
268   </p>
269 </footer>
270   </body>
271 </html>