~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to system/doc/tutorial/complex2.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
-module(complex2).
 
2
-export([start/1, stop/0, init/1]).
 
3
-export([foo/1, bar/1]).
 
4
 
 
5
start(ExtPrg) ->
 
6
    spawn(?MODULE, init, [ExtPrg]).
 
7
stop() ->
 
8
    complex ! stop.
 
9
 
 
10
foo(X) ->
 
11
    call_port({foo, X}).
 
12
bar(Y) ->
 
13
    call_port({bar, Y}).
 
14
 
 
15
call_port(Msg) ->
 
16
    complex ! {call, self(), Msg},
 
17
    receive
 
18
        {complex, Result} ->
 
19
            Result
 
20
    end.
 
21
 
 
22
init(ExtPrg) ->
 
23
    register(complex, self()),
 
24
    process_flag(trap_exit, true),
 
25
    Port = open_port({spawn, ExtPrg}, [{packet, 2}, binary]),
 
26
    loop(Port).
 
27
 
 
28
loop(Port) ->
 
29
    receive
 
30
        {call, Caller, Msg} ->
 
31
            Port ! {self(), {command, term_to_binary(Msg)}},
 
32
            receive
 
33
                {Port, {data, Data}} ->
 
34
                    Caller ! {complex, binary_to_term(Data)}
 
35
            end,
 
36
            loop(Port);
 
37
        stop ->
 
38
            Port ! {self(), close},
 
39
            receive
 
40
                {Port, closed} ->
 
41
                    exit(normal)
 
42
            end;
 
43
        {'EXIT', Port, Reason} ->
 
44
            exit(port_terminated)
 
45
    end.