aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ic/doc/src/ch_erl_plain.xml
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/ic/doc/src/ch_erl_plain.xml
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/ic/doc/src/ch_erl_plain.xml')
-rw-r--r--lib/ic/doc/src/ch_erl_plain.xml175
1 files changed, 175 insertions, 0 deletions
diff --git a/lib/ic/doc/src/ch_erl_plain.xml b/lib/ic/doc/src/ch_erl_plain.xml
new file mode 100644
index 0000000000..36de46f624
--- /dev/null
+++ b/lib/ic/doc/src/ch_erl_plain.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1998</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>Using the Plain Erlang Back-end</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>98-05-06</date>
+ <rev>B</rev>
+ <file>ch_erl_plain.xml</file>
+ </header>
+
+ <section>
+ <title>Introduction</title>
+ <p>The mapping of OMG IDL to the Erlang programming language when
+ Plain Erlang
+ is the back-end of choice is similar to the one used in pure Erlang IDL
+ mapping. The only difference is on the generated code and the extended
+ use of pragmas for code generation: IDL functions are translated
+ to Erlang
+ module function calls.</p>
+ </section>
+
+ <section>
+ <title>Compiling the Code</title>
+ <p>In the Erlang shell type :</p>
+ <p>ic:gen(<c><![CDATA[<filename>, [{be, erl_plain}])]]></c>.</p>
+ </section>
+
+ <section>
+ <title>Writing the Implementation File</title>
+ <p>For each IDL interface <c><![CDATA[<interface name>]]></c> defined in the IDL file:</p>
+ <list type="bulleted">
+ <item>Create the corresponding Erlang file that will hold the
+ Erlang implementation of the IDL definitions. </item>
+ <item>Call the implementation file after the scope of the IDL interface,
+ followed by the suffix <c>_impl</c>.</item>
+ <item>Export the implementation functions.</item>
+ </list>
+ <p>For each function defined in the IDL interface :</p>
+ <list type="bulleted">
+ <item>Implement an Erlang function that uses as arguments in the same
+ order, as the input arguments described in the IDL file, and returns
+ the value described in the interface.</item>
+ <item>When using the function, follow the mapping described in chapter 2.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>An Example</title>
+ <p> <marker id="plain_idl"></marker>
+
+ In this example, a file "random.idl" is generates code for the plain Erlang
+ back-end :</p>
+ <list type="bulleted">
+ <item>
+ <p>Main file : "plain.idl"</p>
+ <code type="none">
+\011
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+ </code>
+ </item>
+ </list>
+ <p>Compile the file :</p>
+ <code type="none">
+ Erlang (BEAM) emulator version 4.9
+
+ Eshell V4.9 (abort with ^G)
+ 1> ic:gen(random,[{be, erl_plain}]).
+ Erlang IDL compiler version 2.5.1
+ ok
+ 2>
+ </code>
+ <p></p>
+ <p>When the file "random.idl" is compiled it produces five files: two for
+ the top scope, two for the interface scope, and one for the module
+ scope. The header files for top scope and interface
+ are empty and not shown here. In this case only the file for the interface
+ <c>rmod_random.erl</c> is important :.
+ <marker id="generated files"></marker>
+</p>
+ <list type="bulleted">
+ <item>
+ <p>Erlang file for interface : "rmod_random.erl"</p>
+ <code type="none">
+
+-module(rmod_random).
+
+
+
+%% Interface functions
+-export([produce/0, init/3]).
+
+%%------------------------------------------------------------
+%% Operation: produce
+%%
+%% Returns: RetVal
+%%
+produce() ->
+ rmod_random_impl:produce().
+
+%%------------------------------------------------------------
+%% Operation: init
+%%
+%% Returns: RetVal
+%%
+init(Seed1, Seed2, Seed3) ->
+ rmod_random_impl:init(Seed1, Seed2, Seed3).
+ </code>
+ </item>
+ </list>
+ <p>The implementation file should be called <c>rmod_random_impl.erl</c>
+ and could look like this:</p>
+ <code type="none">
+ -module('rmod_random_impl').
+
+ -export([produce/0,init/3]).
+
+
+ produce() ->
+ random:uniform().
+
+
+ init(S1,S2,S3) ->
+ random:seed(S1,S2,S3).
+ </code>
+ <p>Compiling the code : </p>
+ <code type="none">
+2> make:all().
+Recompile: rmod_random
+Recompile: oe_random
+Recompile: rmod_random_impl
+up_to_date
+ </code>
+ <p></p>
+ <p>Running the example : </p>
+ <code type="none">
+3> rmod_random:init(1,2,3).
+ok
+4> rmod_random:produce().
+1.97963e-4
+5>
+ </code>
+ </section>
+</chapter>
+