sel_ldr: Remove support for rodata segment at start of executable
[nativeclient.git] / common / standalone.h
blobdb8e44c8fa17bb0b25bfe507626714a8a55fe4e9
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.
32 // Standalone helper functions
33 // Mimic barebones nacl multimedia interface for standalone
34 // non-nacl applications. Mainly used as a debugging aid.
35 // * Only supported under Mac & Linux for now.
37 #ifndef NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_
38 #define NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_
40 #if defined(STANDALONE)
41 #include <SDL.h>
42 #include <stdint.h>
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
48 #define kNaClAudioBufferLength (16 * 1024)
49 #define kNaClVideoMinWindowSize (32)
50 #define kNaClVideoMaxWindowSize (4096)
52 enum {
53 /* subsystems represented as bitset, ie 0x01, 0x02, 0x04 */
54 NACL_SUBSYSTEM_VIDEO = 0x01,
55 NACL_SUBSYSTEM_AUDIO = 0x02,
58 /* NACL_SUBSYSTEM_EMBED is not supported for standalone */
59 enum {
60 NACL_SUBSYSTEM_EMBED = 0
63 enum NaClAudioFormat {
64 NACL_AUDIO_FORMAT_STEREO_44K = 0,
65 NACL_AUDIO_FORMAT_STEREO_48K,
68 enum NaClEvent {
69 NACL_EVENT_NOT_USED = 0,
70 NACL_EVENT_ACTIVE,
71 NACL_EVENT_EXPOSE,
72 NACL_EVENT_KEY_DOWN,
73 NACL_EVENT_KEY_UP,
74 NACL_EVENT_MOUSE_MOTION,
75 NACL_EVENT_MOUSE_BUTTON_DOWN,
76 NACL_EVENT_MOUSE_BUTTON_UP,
77 NACL_EVENT_QUIT,
78 NACL_EVENT_UNSUPPORTED
81 enum NaClKey {
82 NACL_KEY_UNKNOWN = 0,
83 NACL_KEY_FIRST = 0,
84 NACL_KEY_BACKSPACE = 8,
85 NACL_KEY_TAB = 9,
86 NACL_KEY_CLEAR = 12,
87 NACL_KEY_RETURN = 13,
88 NACL_KEY_PAUSE = 19,
89 NACL_KEY_ESCAPE = 27,
90 NACL_KEY_SPACE = 32,
91 NACL_KEY_EXCLAIM = 33,
92 NACL_KEY_QUOTEDBL = 34,
93 NACL_KEY_HASH = 35,
94 NACL_KEY_DOLLAR = 36,
95 NACL_KEY_AMPERSAND = 38,
96 NACL_KEY_QUOTE = 39,
97 NACL_KEY_LEFTPAREN = 40,
98 NACL_KEY_RIGHTPAREN = 41,
99 NACL_KEY_ASTERISK = 42,
100 NACL_KEY_PLUS = 43,
101 NACL_KEY_COMMA = 44,
102 NACL_KEY_MINUS = 45,
103 NACL_KEY_PERIOD = 46,
104 NACL_KEY_SLASH = 47,
105 NACL_KEY_0 = 48,
106 NACL_KEY_1 = 49,
107 NACL_KEY_2 = 50,
108 NACL_KEY_3 = 51,
109 NACL_KEY_4 = 52,
110 NACL_KEY_5 = 53,
111 NACL_KEY_6 = 54,
112 NACL_KEY_7 = 55,
113 NACL_KEY_8 = 56,
114 NACL_KEY_9 = 57,
115 NACL_KEY_COLON = 58,
116 NACL_KEY_SEMICOLON = 59,
117 NACL_KEY_LESS = 60,
118 NACL_KEY_EQUALS = 61,
119 NACL_KEY_GREATER = 62,
120 NACL_KEY_QUESTION = 63,
121 NACL_KEY_AT = 64,
122 NACL_KEY_LEFTBRACKET = 91,
123 NACL_KEY_BACKSLASH = 92,
124 NACL_KEY_RIGHTBRACKET = 93,
125 NACL_KEY_CARET = 94,
126 NACL_KEY_UNDERSCORE = 95,
127 NACL_KEY_BACKQUOTE = 96,
128 NACL_KEY_a = 97,
129 NACL_KEY_b = 98,
130 NACL_KEY_c = 99,
131 NACL_KEY_d = 100,
132 NACL_KEY_e = 101,
133 NACL_KEY_f = 102,
134 NACL_KEY_g = 103,
135 NACL_KEY_h = 104,
136 NACL_KEY_i = 105,
137 NACL_KEY_j = 106,
138 NACL_KEY_k = 107,
139 NACL_KEY_l = 108,
140 NACL_KEY_m = 109,
141 NACL_KEY_n = 110,
142 NACL_KEY_o = 111,
143 NACL_KEY_p = 112,
144 NACL_KEY_q = 113,
145 NACL_KEY_r = 114,
146 NACL_KEY_s = 115,
147 NACL_KEY_t = 116,
148 NACL_KEY_u = 117,
149 NACL_KEY_v = 118,
150 NACL_KEY_w = 119,
151 NACL_KEY_x = 120,
152 NACL_KEY_y = 121,
153 NACL_KEY_z = 122,
154 NACL_KEY_DELETE = 127,
155 NACL_KEY_WORLD_0 = 160,
156 NACL_KEY_WORLD_1 = 161,
157 NACL_KEY_WORLD_2 = 162,
158 NACL_KEY_WORLD_3 = 163,
159 NACL_KEY_WORLD_4 = 164,
160 NACL_KEY_WORLD_5 = 165,
161 NACL_KEY_WORLD_6 = 166,
162 NACL_KEY_WORLD_7 = 167,
163 NACL_KEY_WORLD_8 = 168,
164 NACL_KEY_WORLD_9 = 169,
165 NACL_KEY_WORLD_10 = 170,
166 NACL_KEY_WORLD_11 = 171,
167 NACL_KEY_WORLD_12 = 172,
168 NACL_KEY_WORLD_13 = 173,
169 NACL_KEY_WORLD_14 = 174,
170 NACL_KEY_WORLD_15 = 175,
171 NACL_KEY_WORLD_16 = 176,
172 NACL_KEY_WORLD_17 = 177,
173 NACL_KEY_WORLD_18 = 178,
174 NACL_KEY_WORLD_19 = 179,
175 NACL_KEY_WORLD_20 = 180,
176 NACL_KEY_WORLD_21 = 181,
177 NACL_KEY_WORLD_22 = 182,
178 NACL_KEY_WORLD_23 = 183,
179 NACL_KEY_WORLD_24 = 184,
180 NACL_KEY_WORLD_25 = 185,
181 NACL_KEY_WORLD_26 = 186,
182 NACL_KEY_WORLD_27 = 187,
183 NACL_KEY_WORLD_28 = 188,
184 NACL_KEY_WORLD_29 = 189,
185 NACL_KEY_WORLD_30 = 190,
186 NACL_KEY_WORLD_31 = 191,
187 NACL_KEY_WORLD_32 = 192,
188 NACL_KEY_WORLD_33 = 193,
189 NACL_KEY_WORLD_34 = 194,
190 NACL_KEY_WORLD_35 = 195,
191 NACL_KEY_WORLD_36 = 196,
192 NACL_KEY_WORLD_37 = 197,
193 NACL_KEY_WORLD_38 = 198,
194 NACL_KEY_WORLD_39 = 199,
195 NACL_KEY_WORLD_40 = 200,
196 NACL_KEY_WORLD_41 = 201,
197 NACL_KEY_WORLD_42 = 202,
198 NACL_KEY_WORLD_43 = 203,
199 NACL_KEY_WORLD_44 = 204,
200 NACL_KEY_WORLD_45 = 205,
201 NACL_KEY_WORLD_46 = 206,
202 NACL_KEY_WORLD_47 = 207,
203 NACL_KEY_WORLD_48 = 208,
204 NACL_KEY_WORLD_49 = 209,
205 NACL_KEY_WORLD_50 = 210,
206 NACL_KEY_WORLD_51 = 211,
207 NACL_KEY_WORLD_52 = 212,
208 NACL_KEY_WORLD_53 = 213,
209 NACL_KEY_WORLD_54 = 214,
210 NACL_KEY_WORLD_55 = 215,
211 NACL_KEY_WORLD_56 = 216,
212 NACL_KEY_WORLD_57 = 217,
213 NACL_KEY_WORLD_58 = 218,
214 NACL_KEY_WORLD_59 = 219,
215 NACL_KEY_WORLD_60 = 220,
216 NACL_KEY_WORLD_61 = 221,
217 NACL_KEY_WORLD_62 = 222,
218 NACL_KEY_WORLD_63 = 223,
219 NACL_KEY_WORLD_64 = 224,
220 NACL_KEY_WORLD_65 = 225,
221 NACL_KEY_WORLD_66 = 226,
222 NACL_KEY_WORLD_67 = 227,
223 NACL_KEY_WORLD_68 = 228,
224 NACL_KEY_WORLD_69 = 229,
225 NACL_KEY_WORLD_70 = 230,
226 NACL_KEY_WORLD_71 = 231,
227 NACL_KEY_WORLD_72 = 232,
228 NACL_KEY_WORLD_73 = 233,
229 NACL_KEY_WORLD_74 = 234,
230 NACL_KEY_WORLD_75 = 235,
231 NACL_KEY_WORLD_76 = 236,
232 NACL_KEY_WORLD_77 = 237,
233 NACL_KEY_WORLD_78 = 238,
234 NACL_KEY_WORLD_79 = 239,
235 NACL_KEY_WORLD_80 = 240,
236 NACL_KEY_WORLD_81 = 241,
237 NACL_KEY_WORLD_82 = 242,
238 NACL_KEY_WORLD_83 = 243,
239 NACL_KEY_WORLD_84 = 244,
240 NACL_KEY_WORLD_85 = 245,
241 NACL_KEY_WORLD_86 = 246,
242 NACL_KEY_WORLD_87 = 247,
243 NACL_KEY_WORLD_88 = 248,
244 NACL_KEY_WORLD_89 = 249,
245 NACL_KEY_WORLD_90 = 250,
246 NACL_KEY_WORLD_91 = 251,
247 NACL_KEY_WORLD_92 = 252,
248 NACL_KEY_WORLD_93 = 253,
249 NACL_KEY_WORLD_94 = 254,
250 NACL_KEY_WORLD_95 = 255,
252 /* numeric keypad */
253 NACL_KEY_KP0 = 256,
254 NACL_KEY_KP1 = 257,
255 NACL_KEY_KP2 = 258,
256 NACL_KEY_KP3 = 259,
257 NACL_KEY_KP4 = 260,
258 NACL_KEY_KP5 = 261,
259 NACL_KEY_KP6 = 262,
260 NACL_KEY_KP7 = 263,
261 NACL_KEY_KP8 = 264,
262 NACL_KEY_KP9 = 265,
263 NACL_KEY_KP_PERIOD = 266,
264 NACL_KEY_KP_DIVIDE = 267,
265 NACL_KEY_KP_MULTIPLY = 268,
266 NACL_KEY_KP_MINUS = 269,
267 NACL_KEY_KP_PLUS = 270,
268 NACL_KEY_KP_ENTER = 271,
269 NACL_KEY_KP_EQUALS = 272,
271 /* arrow & insert/delete pad */
272 NACL_KEY_UP = 273,
273 NACL_KEY_DOWN = 274,
274 NACL_KEY_RIGHT = 275,
275 NACL_KEY_LEFT = 276,
276 NACL_KEY_INSERT = 277,
277 NACL_KEY_HOME = 278,
278 NACL_KEY_END = 279,
279 NACL_KEY_PAGEUP = 280,
280 NACL_KEY_PAGEDOWN = 281,
282 /* function keys */
283 NACL_KEY_F1 = 282,
284 NACL_KEY_F2 = 283,
285 NACL_KEY_F3 = 284,
286 NACL_KEY_F4 = 285,
287 NACL_KEY_F5 = 286,
288 NACL_KEY_F6 = 287,
289 NACL_KEY_F7 = 288,
290 NACL_KEY_F8 = 289,
291 NACL_KEY_F9 = 290,
292 NACL_KEY_F10 = 291,
293 NACL_KEY_F11 = 292,
294 NACL_KEY_F12 = 293,
295 NACL_KEY_F13 = 294,
296 NACL_KEY_F14 = 295,
297 NACL_KEY_F15 = 296,
299 /* modifier keys */
300 NACL_KEY_NUMLOCK = 300,
301 NACL_KEY_CAPSLOCK = 301,
302 NACL_KEY_SCROLLOCK = 302,
303 NACL_KEY_RSHIFT = 303,
304 NACL_KEY_LSHIFT = 304,
305 NACL_KEY_RCTRL = 305,
306 NACL_KEY_LCTRL = 306,
307 NACL_KEY_RALT = 307,
308 NACL_KEY_LALT = 308,
309 NACL_KEY_RMETA = 309,
310 NACL_KEY_LMETA = 310,
311 NACL_KEY_LSUPER = 311,
312 NACL_KEY_RSUPER = 312,
313 NACL_KEY_MODE = 313,
314 NACL_KEY_COMPOSE = 314,
316 /* misc keys */
317 NACL_KEY_HELP = 315,
318 NACL_KEY_PRINT = 316,
319 NACL_KEY_SYSREQ = 317,
320 NACL_KEY_BREAK = 318,
321 NACL_KEY_MENU = 319,
322 NACL_KEY_POWER = 320,
323 NACL_KEY_EURO = 321,
324 NACL_KEY_UNDO = 322,
326 /* Add any other keys here */
327 NACL_KEY_LAST
330 enum NaClKeyMod {
331 /* mods represented as bitset */
332 NACL_KEYMOD_NONE = 0x0000,
333 NACL_KEYMOD_LSHIFT= 0x0001,
334 NACL_KEYMOD_RSHIFT= 0x0002,
335 NACL_KEYMOD_LCTRL = 0x0040,
336 NACL_KEYMOD_RCTRL = 0x0080,
337 NACL_KEYMOD_LALT = 0x0100,
338 NACL_KEYMOD_RALT = 0x0200,
339 NACL_KEYMOD_LMETA = 0x0400,
340 NACL_KEYMOD_RMETA = 0x0800,
341 NACL_KEYMOD_NUM = 0x1000,
342 NACL_KEYMOD_CAPS = 0x2000,
343 NACL_KEYMOD_MODE = 0x4000,
344 NACL_KEYMOD_RESERVED = 0x8000
347 enum NaClMouseButton {
348 NACL_MOUSE_BUTTON_LEFT = 1,
349 NACL_MOUSE_BUTTON_MIDDLE = 2,
350 NACL_MOUSE_BUTTON_RIGHT = 3,
351 NACL_MOUSE_SCROLL_UP = 4,
352 NACL_MOUSE_SCROLL_DOWN = 5
355 enum NaClMouseState {
356 NACL_MOUSE_STATE_LEFT_BUTTON_PRESSED = 1,
357 NACL_MOUSE_STATE_MIDDLE_BUTTON_PRESSED = 2,
358 NACL_MOUSE_STATE_RIGHT_BUTTON_PRESSED = 4
361 enum NaClActive {
362 NACL_ACTIVE_MOUSE = 1,
363 NACL_ACTIVE_INPUT_FOCUS = 2,
364 NACL_ACTIVE_APPLICATION = 4
367 struct NaClMultimediaKeySymbol {
368 uint8_t scancode;
369 int16_t sym;
370 int16_t mod;
371 uint16_t unicode;
374 struct NaClMultimediaActiveEvent {
375 uint8_t type;
376 uint8_t gain;
377 uint8_t state;
380 struct NaClMultimediaKeyboardEvent {
381 uint8_t type;
382 uint8_t which;
383 uint8_t state;
384 struct NaClMultimediaKeySymbol keysym;
387 struct NaClMultimediaMouseMotionEvent {
388 uint8_t type;
389 uint8_t which;
390 uint8_t state;
391 uint16_t x;
392 uint16_t y;
393 int16_t xrel;
394 int16_t yrel;
397 struct NaClMultimediaMouseButtonEvent {
398 uint8_t type;
399 uint8_t which;
400 uint8_t button;
401 uint8_t state;
402 uint16_t x;
403 uint16_t y;
406 struct NaClMultimediaQuitEvent {
407 uint8_t type;
410 union NaClMultimediaEvent {
411 uint8_t type;
412 struct NaClMultimediaActiveEvent active;
413 struct NaClMultimediaKeyboardEvent key;
414 struct NaClMultimediaMouseMotionEvent motion;
415 struct NaClMultimediaMouseButtonEvent button;
416 struct NaClMultimediaQuitEvent quit;
419 extern int nacl_multimedia_init(int subsystems);
420 extern int nacl_multimedia_shutdown();
422 extern int nacl_multimedia_is_embedded(int *embedded);
423 extern int nacl_multimedia_get_embed_size(int *width, int *height);
424 extern int nacl_video_init(int width, int height);
425 extern int nacl_video_shutdown();
426 extern int nacl_video_update(const void *data);
427 extern int nacl_video_poll_event(union NaClMultimediaEvent *event);
428 extern int nacl_audio_init(enum NaClAudioFormat format,
429 int desired_samples, int *obtained_samples);
430 extern int nacl_audio_shutdown();
431 extern int nacl_audio_stream(const void *data, size_t *size);
433 #ifdef __cplusplus
435 #endif
437 #endif // STANDALONE
438 #endif // NATIVE_CLIENT_TESTS_COMMON_STANDALONE_H_