imcplugin demo: Extend to support stat() call
[nativeclient.git] / tests / mandel / mandel.c
blob65d693ba635524f238fb71ffef7d4ad95feaa7eb
1 /*
2 * Copyright 2008, Google Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following disclaimer
13 * in the documentation and/or other materials provided with the
14 * distribution.
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 simple demo for nacl client, computed mandelbrot set
36 #include <string.h>
38 #include <nacl/nacl_srpc.h>
40 int Mandel(NaClSrpcChannel *, NaClSrpcArg **, NaClSrpcArg **);
42 NACL_SRPC_METHOD("mandel:dddd:iii", Mandel);
45 * Sample application-specific RPC code.
48 int Mandel(NaClSrpcChannel *channel,
49 NaClSrpcArg **in_args,
50 NaClSrpcArg **out_args) {
51 double i = in_args[0]->u.dval;
52 double j = in_args[1]->u.dval;
53 double xsteps = in_args[2]->u.dval;
54 double ysteps = in_args[3]->u.dval;
56 double cx = (4.0/xsteps) * i - 3.0;
57 double cy = 1.5 - (3.0/ysteps) * j;
59 double re = cx;
60 double im = cy;
61 const double threshold = 1.0e8;
62 int r;
63 int g;
64 int b;
66 int count = 0;
67 while (count < 256 && re * re + im * im < threshold) {
68 double new_re = re * re - im * im + cx;
69 double new_im = 2 * re * im + cy;
70 re = new_re;
71 im = new_im;
72 count++;
75 if (count < 8) {
76 r = 128;
77 g = 0;
78 b = 0;
79 } else if (count < 16) {
80 r = 255;
81 g = 0;
82 b = 0;
83 } else if (count < 32) {
84 r = 255;
85 g = 255;
86 b = 0;
87 } else if (count < 64) {
88 r = 0;
89 g = 255;
90 b = 0;
91 } else if (count < 128) {
92 r = 0;
93 g = 255;
94 b = 255;
95 } else if (count < 256) {
96 r = 0;
97 g = 0;
98 b = 255;
99 } else {
100 r = 0;
101 g = 0;
102 b = 0;
105 out_args[0]->u.ival = r;
106 out_args[1]->u.ival = g;
107 out_args[2]->u.ival = b;
108 return NACL_SRPC_RESULT_OK;