1555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* 2555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Simple DirectMedia Layer 3555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> 4555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 5555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot This software is provided 'as-is', without any express or implied 6555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot warranty. In no event will the authors be held liable for any damages 7555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot arising from the use of this software. 8555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 9555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Permission is granted to anyone to use this software for any purpose, 10555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot including commercial applications, and to alter it and redistribute it 11555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot freely, subject to the following restrictions: 12555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 13555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 1. The origin of this software must not be misrepresented; you must not 14555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot claim that you wrote the original software. If you use this software 15555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot in a product, an acknowledgment in the product documentation would be 16555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot appreciated but is not required. 17555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 2. Altered source versions must be plainly marked as such, and must not be 18555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot misrepresented as being the original software. 19555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 3. This notice may not be removed or altered from any source distribution. 20555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot*/ 21555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 22555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 23555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \file SDL_stdinc.h 24555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * 25555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * This is a general header that includes C language support. 26555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 27555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 28555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifndef _SDL_stdinc_h 29555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define _SDL_stdinc_h 30555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 31555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include "SDL_config.h" 32555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 33555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_SYS_TYPES_H 34555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include <sys/types.h> 35555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 36555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_STDIO_H 37555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include <stdio.h> 38555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 39555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if defined(STDC_HEADERS) 40555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdlib.h> 41555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stddef.h> 42555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdarg.h> 43555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#else 44555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# if defined(HAVE_STDLIB_H) 45555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdlib.h> 46555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(HAVE_MALLOC_H) 47555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <malloc.h> 48555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# endif 49555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# if defined(HAVE_STDDEF_H) 50555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stddef.h> 51555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# endif 52555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# if defined(HAVE_STDARG_H) 53555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdarg.h> 54555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# endif 55555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 56555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_STRING_H 57555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) 58555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <memory.h> 59555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# endif 60555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <string.h> 61555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 62555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_STRINGS_H 63555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <strings.h> 64555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 65555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if defined(HAVE_INTTYPES_H) 66555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <inttypes.h> 67555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#elif defined(HAVE_STDINT_H) 68555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdint.h> 69555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 70555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_CTYPE_H 71555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <ctype.h> 72555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 73555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_MATH_H 74555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <math.h> 75555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 76555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) 77555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <iconv.h> 78555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 79555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 80555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 81555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * The number of elements in an array. 82555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 83555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) 84555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_TABLESIZE(table) SDL_arraysize(table) 85555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 86555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 87555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \name Cast operators 88555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * 89555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * Use proper C++ casts when compiled as C++ to be compatible with the option 90555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). 91555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 92555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* @{ */ 93555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef __cplusplus 94555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression) 95555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_static_cast(type, expression) static_cast<type>(expression) 96555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_const_cast(type, expression) const_cast<type>(expression) 97555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#else 98555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_reinterpret_cast(type, expression) ((type)(expression)) 99555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_static_cast(type, expression) ((type)(expression)) 100555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_const_cast(type, expression) ((type)(expression)) 101555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 102555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* @} *//* Cast operators */ 103555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 104555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* Define a four character code as a Uint32 */ 105555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_FOURCC(A, B, C, D) \ 106555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ 107555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ 108555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ 109555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) 110555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 111555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 112555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \name Basic data types 113555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 114555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* @{ */ 115555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 116555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef enum 117555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot{ 118555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SDL_FALSE = 0, 119555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot SDL_TRUE = 1 120555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot} SDL_bool; 121555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 122555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 123555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief A signed 8-bit integer type. 124555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 125555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef int8_t Sint8; 126555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 127555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief An unsigned 8-bit integer type. 128555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 129555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef uint8_t Uint8; 130555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 131555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief A signed 16-bit integer type. 132555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 133555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef int16_t Sint16; 134555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 135555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief An unsigned 16-bit integer type. 136555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 137555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef uint16_t Uint16; 138555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 139555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief A signed 32-bit integer type. 140555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 141555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef int32_t Sint32; 142555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 143555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief An unsigned 32-bit integer type. 144555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 145555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef uint32_t Uint32; 146555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 147555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 148555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief A signed 64-bit integer type. 149555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 150555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef int64_t Sint64; 151555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 152555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * \brief An unsigned 64-bit integer type. 153555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 154555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef uint64_t Uint64; 155555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 156555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* @} *//* Basic data types */ 157555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 158555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 159555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_COMPILE_TIME_ASSERT(name, x) \ 160555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot typedef int SDL_dummy_ ## name[(x) * 2 - 1] 161555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** \cond */ 162555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifndef DOXYGEN_SHOULD_IGNORE_THIS 163555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); 164555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); 165555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); 166555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); 167555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); 168555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); 169555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); 170555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); 171555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ 172555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** \endcond */ 173555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 174555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* Check to make sure enums are the size of ints, for structure packing. 175555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot For both Watcom C/C++ and Borland C/C++ the compiler option that makes 176555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot enums having the size of an int must be enabled. 177555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). 178555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot*/ 179555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 180555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** \cond */ 181555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifndef DOXYGEN_SHOULD_IGNORE_THIS 182555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if !defined(__ANDROID__) 183555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ 184555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef enum 185555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot{ 186555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot DUMMY_ENUM_VALUE 187555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot} SDL_DUMMY_ENUM; 188555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 189555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); 190555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 191555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ 192555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** \endcond */ 193555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 194555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include "begin_code.h" 195555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* Set up for C function definitions, even when using C++ */ 196555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef __cplusplus 197555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern "C" { 198555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 199555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 200555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if defined(HAVE_ALLOCA) && !defined(alloca) 201555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# if defined(HAVE_ALLOCA_H) 202555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <alloca.h> 203555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__GNUC__) 204555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# define alloca __builtin_alloca 205555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(_MSC_VER) 206555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <malloc.h> 207555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# define alloca _alloca 208555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__WATCOMC__) 209555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <malloc.h> 210555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__BORLANDC__) 211555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <malloc.h> 212555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__DMC__) 213555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# include <stdlib.h> 214555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__AIX__) 215555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#pragma alloca 216555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# elif defined(__MRC__) 217555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotvoid *alloca(unsigned); 218555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# else 219555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotchar *alloca(); 220555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot# endif 221555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 222555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef HAVE_ALLOCA 223555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) 224555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_stack_free(data) 225555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#else 226555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) 227555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_stack_free(data) SDL_free(data) 228555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 229555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 230555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_malloc(size_t size); 231555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); 232555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); 233555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void SDLCALL SDL_free(void *mem); 234555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 235555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_getenv(const char *name); 236555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); 237555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 238555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); 239555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 240555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_abs(int x); 241555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 242555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* !!! FIXME: these have side effects. You probably shouldn't use them. */ 243555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* !!! FIXME: Maybe we do forceinline functions of SDL_mini, SDL_minf, etc? */ 244555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) 245555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) 246555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 247555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_isdigit(int x); 248555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_isspace(int x); 249555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_toupper(int x); 250555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_tolower(int x); 251555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 252555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); 253555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 254555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) 255555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) 256555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 257555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ 258555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) 259555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot{ 260555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#if defined(__GNUC__) && defined(i386) 261555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot int u0, u1, u2; 262555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot __asm__ __volatile__ ( 263555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot "cld \n\t" 264555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot "rep ; stosl \n\t" 265555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot : "=&D" (u0), "=&a" (u1), "=&c" (u2) 266555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) 267555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot : "memory" 268555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot ); 269555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#else 270555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot size_t _n = (dwords + 3) / 4; 271555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Uint32 *_p = SDL_static_cast(Uint32 *, dst); 272555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Uint32 _val = (val); 273555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot if (dwords == 0) 274555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return; 275555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot switch (dwords % 4) 276555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot { 277555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot case 0: do { *_p++ = _val; 278555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot case 3: *_p++ = _val; 279555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot case 2: *_p++ = _val; 280555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot case 1: *_p++ = _val; 281555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } while ( --_n ); 282555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot } 283555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 284555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot} 285555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 286555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 287555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); 288555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 289555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team RobotSDL_FORCE_INLINE void *SDL_memcpy4(void *dst, const void *src, size_t dwords) 290555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot{ 291555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot return SDL_memcpy(dst, src, dwords * 4); 292555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot} 293555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 294555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC void *SDLCALL SDL_memmove(void *dst, const void *src, size_t len); 295555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); 296555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 297555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); 298555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); 299555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); 300555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 301555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); 302555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); 303555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); 304555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); 305555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strdup(const char *str); 306555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strrev(char *str); 307555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strupr(char *str); 308555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strlwr(char *str); 309555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); 310555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); 311555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); 312555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 313555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); 314555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); 315555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); 316555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); 317555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); 318555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); 319555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 320555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_atoi(const char *str); 321555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_atof(const char *str); 322555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); 323555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); 324555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); 325555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); 326555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); 327555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 328555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); 329555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); 330555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); 331555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); 332555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 333555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); 334555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); 335555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); 336555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); 337555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 338555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifndef HAVE_M_PI 339555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifndef M_PI 340555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define M_PI 3.14159265358979323846264338327950288 /* pi */ 341555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 342555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 343555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 344555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_acos(double x); 345555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_asin(double x); 346555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_atan(double x); 347555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_atan2(double x, double y); 348555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_ceil(double x); 349555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_copysign(double x, double y); 350555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_cos(double x); 351555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC float SDLCALL SDL_cosf(float x); 352555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_fabs(double x); 353555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_floor(double x); 354555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_log(double x); 355555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_pow(double x, double y); 356555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); 357555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_sin(double x); 358555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC float SDLCALL SDL_sinf(float x); 359555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC double SDLCALL SDL_sqrt(double x); 360555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 361555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* The SDL implementation of iconv() returns these error codes */ 362555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_ICONV_ERROR (size_t)-1 363555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_ICONV_E2BIG (size_t)-2 364555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_ICONV_EILSEQ (size_t)-3 365555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_ICONV_EINVAL (size_t)-4 366555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 367555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ 368555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottypedef struct _SDL_iconv_t *SDL_iconv_t; 369555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, 370555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot const char *fromcode); 371555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); 372555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, 373555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot size_t * inbytesleft, char **outbuf, 374555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot size_t * outbytesleft); 375555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/** 376555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * This function converts a string between encodings in one pass, returning a 377555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * string that must be freed with SDL_free() or NULL on error. 378555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */ 379555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotextern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, 380555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot const char *fromcode, 381555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot const char *inbuf, 382555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot size_t inbytesleft); 383555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) 384555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) 385555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) 386555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 387555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* Ends C function definitions when using C++ */ 388555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef __cplusplus 389555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot} 390555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif 391555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include "close_code.h" 392555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 393555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif /* _SDL_stdinc_h */ 394555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 395555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* vi: set ts=4 sw=4 expandtab: */ 396