Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
7d245d05
Commit
7d245d05
authored
Aug 22, 2010
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed spurious carriage returns
parent
d980c084
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1095 additions
and
1095 deletions
+1095
-1095
SDL_stdinc.h
include/SDL_stdinc.h
+801
-801
SDL_syshaptic.c
src/haptic/nds/SDL_syshaptic.c
+41
-41
SDL_sysjoystick.c
src/joystick/nds/SDL_sysjoystick.c
+23
-23
SDL_win32video.c
src/video/win32/SDL_win32video.c
+230
-230
No files found.
include/SDL_stdinc.h
View file @
7d245d05
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
/**
* \file SDL_stdinc.h
*
* This is a general header that includes C language support.
*/
#ifndef _SDL_stdinc_h
#define _SDL_stdinc_h
#include "SDL_config.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#if defined(STDC_HEADERS)
# include <stdlib.h>
# include <stddef.h>
# include <stdarg.h>
#else
# if defined(HAVE_STDLIB_H)
# include <stdlib.h>
# elif defined(HAVE_MALLOC_H)
# include <malloc.h>
# endif
# if defined(HAVE_STDDEF_H)
# include <stddef.h>
# endif
# if defined(HAVE_STDARG_H)
# include <stdarg.h>
# endif
#endif
#ifdef HAVE_STRING_H
# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
# include <memory.h>
# endif
# include <string.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#if defined(HAVE_INTTYPES_H)
# include <inttypes.h>
#elif defined(HAVE_STDINT_H)
# include <stdint.h>
#endif
#ifdef HAVE_CTYPE_H
# include <ctype.h>
#endif
#ifdef HAVE_MATH_H
# include <math.h>
#endif
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
# include <iconv.h>
#endif
/**
* The number of elements in an array.
*/
#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
#define SDL_TABLESIZE(table) SDL_arraysize(table)
/**
* \name Cast operators
*
* Use proper C++ casts when compiled as C++ to be compatible with the option
* -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above).
*/
/*@{*/
#ifdef __cplusplus
#define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
#define SDL_static_cast(type, expression) static_cast<type>(expression)
#else
#define SDL_reinterpret_cast(type, expression) ((type)(expression))
#define SDL_static_cast(type, expression) ((type)(expression))
#endif
/*@}*//*Cast operators*/
/* Define a four character code as a Uint32 */
#define SDL_FOURCC(A, B, C, D) \
((
SDL_static_cast
(
Uint32
,
SDL_static_cast
(
Uint8
,
(
A
)))
<<
0
)
|
\
(
SDL_static_cast
(
Uint32
,
SDL_static_cast
(
Uint8
,
(
B
)))
<<
8
)
|
\
(
SDL_static_cast
(
Uint32
,
SDL_static_cast
(
Uint8
,
(
C
)))
<<
16
)
|
\
(
SDL_static_cast
(
Uint32
,
SDL_static_cast
(
Uint8
,
(
D
)))
<<
24
))
/**
* \name Basic data types
*/
/*@{*/
typedef
enum
{
SDL_FALSE
=
0
,
SDL_TRUE
=
1
}
SDL_bool
;
/**
* \brief A signed 8-bit integer type.
*/
typedef
int8_t
Sint8
;
/**
* \brief An unsigned 8-bit integer type.
*/
typedef
uint8_t
Uint8
;
/**
* \brief A signed 16-bit integer type.
*/
typedef
int16_t
Sint16
;
/**
* \brief An unsigned 16-bit integer type.
*/
typedef
uint16_t
Uint16
;
/**
* \brief A signed 32-bit integer type.
*/
typedef
int32_t
Sint32
;
/**
* \brief An unsigned 32-bit integer type.
*/
typedef
uint32_t
Uint32
;
#ifdef SDL_HAS_64BIT_TYPE
/**
* \brief A signed 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Sint32!
*/
typedef
int64_t
Sint64
;
/**
* \brief An unsigned 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Uint32!
*/
typedef
uint64_t
Uint64
;
#else
/* This is really just a hack to prevent the compiler from complaining */
typedef
Sint32
Sint64
;
typedef
Uint32
Uint64
;
#endif
/*@}*//*Basic data types*/
#define SDL_COMPILE_TIME_ASSERT(name, x) \
typedef
int
SDL_dummy_
##
name
[(
x
)
*
2
-
1
]
/** \cond */
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
SDL_COMPILE_TIME_ASSERT
(
uint8
,
sizeof
(
Uint8
)
==
1
);
SDL_COMPILE_TIME_ASSERT
(
sint8
,
sizeof
(
Sint8
)
==
1
);
SDL_COMPILE_TIME_ASSERT
(
uint16
,
sizeof
(
Uint16
)
==
2
);
SDL_COMPILE_TIME_ASSERT
(
sint16
,
sizeof
(
Sint16
)
==
2
);
SDL_COMPILE_TIME_ASSERT
(
uint32
,
sizeof
(
Uint32
)
==
4
);
SDL_COMPILE_TIME_ASSERT
(
sint32
,
sizeof
(
Sint32
)
==
4
);
#ifndef __NINTENDODS__
/* TODO: figure out why the following happens:
include/SDL_stdinc.h:150: error: size of array 'SDL_dummy_uint64' is negative
include/SDL_stdinc.h:151: error: size of array 'SDL_dummy_sint64' is negative */
SDL_COMPILE_TIME_ASSERT
(
uint64
,
sizeof
(
Uint64
)
==
8
);
SDL_COMPILE_TIME_ASSERT
(
sint64
,
sizeof
(
Sint64
)
==
8
);
#endif
#endif
/* DOXYGEN_SHOULD_IGNORE_THIS */
/** \endcond */
/* Check to make sure enums are the size of ints, for structure packing.
For both Watcom C/C++ and Borland C/C++ the compiler option that makes
enums having the size of an int must be enabled.
This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
*/
/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
#ifdef __MWERKS__
#pragma enumsalwaysint on
#endif
/** \cond */
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
#ifndef __NINTENDODS__
/* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
typedef
enum
{
DUMMY_ENUM_VALUE
}
SDL_DUMMY_ENUM
;
SDL_COMPILE_TIME_ASSERT
(
enum
,
sizeof
(
SDL_DUMMY_ENUM
)
==
sizeof
(
int
));
#endif
#endif
/* DOXYGEN_SHOULD_IGNORE_THIS */
/** \endcond */
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
extern
"C"
{
/* *INDENT-ON* */
#endif
#ifdef HAVE_MALLOC
#define SDL_malloc malloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_malloc
(
size_t
size
);
#endif
#ifdef HAVE_CALLOC
#define SDL_calloc calloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_calloc
(
size_t
nmemb
,
size_t
size
);
#endif
#ifdef HAVE_REALLOC
#define SDL_realloc realloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_realloc
(
void
*
mem
,
size_t
size
);
#endif
#ifdef HAVE_FREE
#define SDL_free free
#else
extern
DECLSPEC
void
SDLCALL
SDL_free
(
void
*
mem
);
#endif
#if defined(HAVE_ALLOCA) && !defined(alloca)
# if defined(HAVE_ALLOCA_H)
# include <alloca.h>
# elif defined(__GNUC__)
# define alloca __builtin_alloca
# elif defined(_MSC_VER)
# include <malloc.h>
# define alloca _alloca
# elif defined(__WATCOMC__)
# include <malloc.h>
# elif defined(__BORLANDC__)
# include <malloc.h>
# elif defined(__DMC__)
# include <stdlib.h>
# elif defined(__AIX__)
#pragma alloca
# elif defined(__MRC__)
void
*
alloca
(
unsigned
);
# else
char
*
alloca
();
# endif
#endif
#ifdef HAVE_ALLOCA
#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
#define SDL_stack_free(data)
#else
#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
#define SDL_stack_free(data) SDL_free(data)
#endif
#ifdef HAVE_GETENV
#define SDL_getenv getenv
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_getenv
(
const
char
*
name
);
#endif
/* SDL_putenv() has moved to SDL_compat. */
#ifdef HAVE_SETENV
#define SDL_setenv setenv
#else
extern
DECLSPEC
int
SDLCALL
SDL_setenv
(
const
char
*
name
,
const
char
*
value
,
int
overwrite
);
#endif
#ifdef HAVE_QSORT
#define SDL_qsort qsort
#else
extern
DECLSPEC
void
SDLCALL
SDL_qsort
(
void
*
base
,
size_t
nmemb
,
size_t
size
,
int
(
*
compare
)
(
const
void
*
,
const
void
*
));
#endif
#ifdef HAVE_ABS
#define SDL_abs abs
#else
#define SDL_abs(X) ((X) < 0 ? -(X) : (X))
#endif
#define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
#define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
#ifdef HAVE_CTYPE_H
#define SDL_isdigit(X) isdigit(X)
#define SDL_isspace(X) isspace(X)
#define SDL_toupper(X) toupper(X)
#define SDL_tolower(X) tolower(X)
#else
#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9'))
#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n'))
#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X))
#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X))
#endif
#ifdef HAVE_MEMSET
#define SDL_memset memset
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_memset
(
void
*
dst
,
int
c
,
size_t
len
);
#endif
#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
#if defined(__GNUC__) && defined(i386)
#define SDL_memset4(dst, val, len) \
do
{
\
int
u0
,
u1
,
u2
;
\
__asm__
__volatile__
(
\
"cld
\n\t
"
\
"rep ; stosl
\n\t
"
\
:
"=&D"
(
u0
),
"=&a"
(
u1
),
"=&c"
(
u2
)
\
:
"0"
(
dst
),
"1"
(
val
),
"2"
(
SDL_static_cast
(
Uint32
,
len
))
\
:
"memory"
);
\
}
while
(
0
)
#endif
#ifndef SDL_memset4
#define SDL_memset4(dst, val, len) \
do
{
\
unsigned
_count
=
(
len
);
\
unsigned
_n
=
(
_count
+
3
)
/
4
;
\
Uint32
*
_p
=
SDL_static_cast
(
Uint32
*
,
dst
);
\
Uint32
_val
=
(
val
);
\
if
(
len
==
0
)
break
;
\
switch
(
_count
%
4
)
{
\
case
0
:
do
{
*
_p
++
=
_val
;
\
case
3
:
*
_p
++
=
_val
;
\
case
2
:
*
_p
++
=
_val
;
\
case
1
:
*
_p
++
=
_val
;
\
}
while
(
--
_n
);
\
}
\
}
while
(
0
)
#endif
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy(dst, src, len) memcpy(dst, src, len)
#elif defined(__GNUC__) && defined(i386)
#define SDL_memcpy(dst, src, len) \
do
{
\
int
u0
,
u1
,
u2
;
\
__asm__
__volatile__
(
\
"cld
\n\t
"
\
"rep ; movsl
\n\t
"
\
"testb $2,%b4
\n\t
"
\
"je 1f
\n\t
"
\
"movsw
\n
"
\
"1:
\t
testb $1,%b4
\n\t
"
\
"je 2f
\n\t
"
\
"movsb
\n
"
\
"2:"
\
:
"=&c"
(
u0
),
"=&D"
(
u1
),
"=&S"
(
u2
)
\
:
"0"
(
SDL_static_cast
(
unsigned
,
len
)
/
4
),
"q"
(
len
),
"1"
(
dst
),
"2"
(
src
)
\
:
"memory"
);
\
}
while
(
0
)
#endif
#ifndef SDL_memcpy
#ifdef HAVE_MEMCPY
#define SDL_memcpy memcpy
#elif defined(HAVE_BCOPY)
#define SDL_memcpy(d, s, n) bcopy((s), (d), (n))
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_memcpy
(
void
*
dst
,
const
void
*
src
,
size_t
len
);
#endif
#endif
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4)
#elif defined(__GNUC__) && defined(i386)
#define SDL_memcpy4(dst, src, len) \
do
{
\
int
ecx
,
edi
,
esi
;
\
__asm__
__volatile__
(
\
"cld
\n\t
"
\
"rep ; movsl"
\
:
"=&c"
(
ecx
),
"=&D"
(
edi
),
"=&S"
(
esi
)
\
:
"0"
(
SDL_static_cast
(
unsigned
,
len
)),
"1"
(
dst
),
"2"
(
src
)
\
:
"memory"
);
\
}
while
(
0
)
#endif
#ifndef SDL_memcpy4
#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2)
#endif
#if defined(__GNUC__) && defined(i386)
#define SDL_revcpy(dst, src, len) \
do
{
\
int
u0
,
u1
,
u2
;
\
char
*
dstp
=
SDL_static_cast
(
char
*
,
dst
);
\
char
*
srcp
=
SDL_static_cast
(
char
*
,
src
);
\
int
n
=
(
len
);
\
if
(
n
>=
4
)
{
\
__asm__
__volatile__
(
\
"std
\n\t
"
\
"rep ; movsl
\n\t
"
\
"cld
\n\t
"
\
:
"=&c"
(
u0
),
"=&D"
(
u1
),
"=&S"
(
u2
)
\
:
"0"
(
n
>>
2
),
\
"1"
(
dstp
+
(
n
-
4
)),
"2"
(
srcp
+
(
n
-
4
))
\
:
"memory"
);
\
}
\
switch
(
n
&
3
)
{
\
case
3
:
dstp
[
2
]
=
srcp
[
2
];
\
case
2
:
dstp
[
1
]
=
srcp
[
1
];
\
case
1
:
dstp
[
0
]
=
srcp
[
0
];
\
break
;
\
default
:
\
break
;
\
}
\
}
while
(
0
)
#endif
#ifndef SDL_revcpy
extern
DECLSPEC
void
*
SDLCALL
SDL_revcpy
(
void
*
dst
,
const
void
*
src
,
size_t
len
);
#endif
#ifdef HAVE_MEMMOVE
#define SDL_memmove memmove
#elif defined(HAVE_BCOPY)
#define SDL_memmove(d, s, n) bcopy((s), (d), (n))
#else
#define SDL_memmove(dst, src, len) \
do
{
\
if
(
dst
<
src
)
{
\
SDL_memcpy
(
dst
,
src
,
len
);
\
}
else
{
\
SDL_revcpy
(
dst
,
src
,
len
);
\
}
\
}
while
(
0
)
#endif
#ifdef HAVE_MEMCMP
#define SDL_memcmp memcmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_memcmp
(
const
void
*
s1
,
const
void
*
s2
,
size_t
len
);
#endif
#ifdef HAVE_STRLEN
#define SDL_strlen strlen
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlen
(
const
char
*
string
);
#endif
#ifdef HAVE_WCSLEN
#define SDL_wcslen wcslen
#else
#if !defined(wchar_t) && defined(__NINTENDODS__)
#define wchar_t short
/* TODO: figure out why libnds doesn't have this */
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_wcslen
(
const
wchar_t
*
string
);
#endif
#ifdef HAVE_WCSLCPY
#define SDL_wcslcpy wcslcpy
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
/**
* \file SDL_stdinc.h
*
* This is a general header that includes C language support.
*/
#ifndef _SDL_stdinc_h
#define _SDL_stdinc_h
#include "SDL_config.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#if defined(STDC_HEADERS)
# include <stdlib.h>
# include <stddef.h>
# include <stdarg.h>
#else
# if defined(HAVE_STDLIB_H)
# include <stdlib.h>
# elif defined(HAVE_MALLOC_H)
# include <malloc.h>
# endif
# if defined(HAVE_STDDEF_H)
# include <stddef.h>
# endif
# if defined(HAVE_STDARG_H)
# include <stdarg.h>
# endif
#endif
#ifdef HAVE_STRING_H
# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
# include <memory.h>
# endif
# include <string.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#if defined(HAVE_INTTYPES_H)
# include <inttypes.h>
#elif defined(HAVE_STDINT_H)
# include <stdint.h>
#endif
#ifdef HAVE_CTYPE_H
# include <ctype.h>
#endif
#ifdef HAVE_MATH_H
# include <math.h>
#endif
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
# include <iconv.h>
#endif
/**
* The number of elements in an array.
*/
#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
#define SDL_TABLESIZE(table) SDL_arraysize(table)
/**
* \name Cast operators
*
* Use proper C++ casts when compiled as C++ to be compatible with the option
* -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above).
*/
/*@{*/
#ifdef __cplusplus
#define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
#define SDL_static_cast(type, expression) static_cast<type>(expression)
#else
#define SDL_reinterpret_cast(type, expression) ((type)(expression))
#define SDL_static_cast(type, expression) ((type)(expression))
#endif
/*@}*//*Cast operators*/
/* Define a four character code as a Uint32 */
#define SDL_FOURCC(A, B, C, D) \
((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
/**
* \name Basic data types
*/
/*@{*/
typedef
enum
{
SDL_FALSE
=
0
,
SDL_TRUE
=
1
}
SDL_bool
;
/**
* \brief A signed 8-bit integer type.
*/
typedef
int8_t
Sint8
;
/**
* \brief An unsigned 8-bit integer type.
*/
typedef
uint8_t
Uint8
;
/**
* \brief A signed 16-bit integer type.
*/
typedef
int16_t
Sint16
;
/**
* \brief An unsigned 16-bit integer type.
*/
typedef
uint16_t
Uint16
;
/**
* \brief A signed 32-bit integer type.
*/
typedef
int32_t
Sint32
;
/**
* \brief An unsigned 32-bit integer type.
*/
typedef
uint32_t
Uint32
;
#ifdef SDL_HAS_64BIT_TYPE
/**
* \brief A signed 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Sint32!
*/
typedef
int64_t
Sint64
;
/**
* \brief An unsigned 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Uint32!
*/
typedef
uint64_t
Uint64
;
#else
/* This is really just a hack to prevent the compiler from complaining */
typedef
Sint32
Sint64
;
typedef
Uint32
Uint64
;
#endif
/*@}*//*Basic data types*/
#define SDL_COMPILE_TIME_ASSERT(name, x) \
typedef int SDL_dummy_ ## name[(x) * 2 - 1]
/** \cond */
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
SDL_COMPILE_TIME_ASSERT
(
uint8
,
sizeof
(
Uint8
)
==
1
);
SDL_COMPILE_TIME_ASSERT
(
sint8
,
sizeof
(
Sint8
)
==
1
);
SDL_COMPILE_TIME_ASSERT
(
uint16
,
sizeof
(
Uint16
)
==
2
);
SDL_COMPILE_TIME_ASSERT
(
sint16
,
sizeof
(
Sint16
)
==
2
);
SDL_COMPILE_TIME_ASSERT
(
uint32
,
sizeof
(
Uint32
)
==
4
);
SDL_COMPILE_TIME_ASSERT
(
sint32
,
sizeof
(
Sint32
)
==
4
);
#ifndef __NINTENDODS__
/* TODO: figure out why the following happens:
include/SDL_stdinc.h:150: error: size of array 'SDL_dummy_uint64' is negative
include/SDL_stdinc.h:151: error: size of array 'SDL_dummy_sint64' is negative */
SDL_COMPILE_TIME_ASSERT
(
uint64
,
sizeof
(
Uint64
)
==
8
);
SDL_COMPILE_TIME_ASSERT
(
sint64
,
sizeof
(
Sint64
)
==
8
);
#endif
#endif
/* DOXYGEN_SHOULD_IGNORE_THIS */
/** \endcond */
/* Check to make sure enums are the size of ints, for structure packing.
For both Watcom C/C++ and Borland C/C++ the compiler option that makes
enums having the size of an int must be enabled.
This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
*/
/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
#ifdef __MWERKS__
#pragma enumsalwaysint on
#endif
/** \cond */
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
#ifndef __NINTENDODS__
/* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
typedef
enum
{
DUMMY_ENUM_VALUE
}
SDL_DUMMY_ENUM
;
SDL_COMPILE_TIME_ASSERT
(
enum
,
sizeof
(
SDL_DUMMY_ENUM
)
==
sizeof
(
int
));
#endif
#endif
/* DOXYGEN_SHOULD_IGNORE_THIS */
/** \endcond */
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
extern
"C"
{
/* *INDENT-ON* */
#endif
#ifdef HAVE_MALLOC
#define SDL_malloc malloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_malloc
(
size_t
size
);
#endif
#ifdef HAVE_CALLOC
#define SDL_calloc calloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_calloc
(
size_t
nmemb
,
size_t
size
);
#endif
#ifdef HAVE_REALLOC
#define SDL_realloc realloc
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_realloc
(
void
*
mem
,
size_t
size
);
#endif
#ifdef HAVE_FREE
#define SDL_free free
#else
extern
DECLSPEC
void
SDLCALL
SDL_free
(
void
*
mem
);
#endif
#if defined(HAVE_ALLOCA) && !defined(alloca)
# if defined(HAVE_ALLOCA_H)
# include <alloca.h>
# elif defined(__GNUC__)
# define alloca __builtin_alloca
# elif defined(_MSC_VER)
# include <malloc.h>
# define alloca _alloca
# elif defined(__WATCOMC__)
# include <malloc.h>
# elif defined(__BORLANDC__)
# include <malloc.h>
# elif defined(__DMC__)
# include <stdlib.h>
# elif defined(__AIX__)
#pragma alloca
# elif defined(__MRC__)
void
*
alloca
(
unsigned
);
# else
char
*
alloca
();
# endif
#endif
#ifdef HAVE_ALLOCA
#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
#define SDL_stack_free(data)
#else
#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
#define SDL_stack_free(data) SDL_free(data)
#endif
#ifdef HAVE_GETENV
#define SDL_getenv getenv
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_getenv
(
const
char
*
name
);
#endif
/* SDL_putenv() has moved to SDL_compat. */
#ifdef HAVE_SETENV
#define SDL_setenv setenv
#else
extern
DECLSPEC
int
SDLCALL
SDL_setenv
(
const
char
*
name
,
const
char
*
value
,
int
overwrite
);
#endif
#ifdef HAVE_QSORT
#define SDL_qsort qsort
#else
extern
DECLSPEC
void
SDLCALL
SDL_qsort
(
void
*
base
,
size_t
nmemb
,
size_t
size
,
int
(
*
compare
)
(
const
void
*
,
const
void
*
));
#endif
#ifdef HAVE_ABS
#define SDL_abs abs
#else
#define SDL_abs(X) ((X) < 0 ? -(X) : (X))
#endif
#define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
#define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
#ifdef HAVE_CTYPE_H
#define SDL_isdigit(X) isdigit(X)
#define SDL_isspace(X) isspace(X)
#define SDL_toupper(X) toupper(X)
#define SDL_tolower(X) tolower(X)
#else
#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9'))
#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n'))
#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X))
#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X))
#endif
#ifdef HAVE_MEMSET
#define SDL_memset memset
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_memset
(
void
*
dst
,
int
c
,
size_t
len
);
#endif
#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
#if defined(__GNUC__) && defined(i386)
#define SDL_memset4(dst, val, len) \
do { \
int u0, u1, u2; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; stosl\n\t" \
: "=&D" (u0), "=&a" (u1), "=&c" (u2) \
: "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, len)) \
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memset4
#define SDL_memset4(dst, val, len) \
do { \
unsigned _count = (len); \
unsigned _n = (_count + 3) / 4; \
Uint32 *_p = SDL_static_cast(Uint32 *, dst); \
Uint32 _val = (val); \
if (len == 0) break; \
switch (_count % 4) { \
case 0: do { *_p++ = _val; \
case 3: *_p++ = _val; \
case 2: *_p++ = _val; \
case 1: *_p++ = _val; \
} while ( --_n ); \
} \
} while(0)
#endif
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy(dst, src, len) memcpy(dst, src, len)
#elif defined(__GNUC__) && defined(i386)
#define SDL_memcpy(dst, src, len) \
do { \
int u0, u1, u2; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; movsl\n\t" \
"testb $2,%b4\n\t" \
"je 1f\n\t" \
"movsw\n" \
"1:\ttestb $1,%b4\n\t" \
"je 2f\n\t" \
"movsb\n" \
"2:" \
: "=&c" (u0), "=&D" (u1), "=&S" (u2) \
: "0" (SDL_static_cast(unsigned, len)/4), "q" (len), "1" (dst),"2" (src) \
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memcpy
#ifdef HAVE_MEMCPY
#define SDL_memcpy memcpy
#elif defined(HAVE_BCOPY)
#define SDL_memcpy(d, s, n) bcopy((s), (d), (n))
#else
extern
DECLSPEC
void
*
SDLCALL
SDL_memcpy
(
void
*
dst
,
const
void
*
src
,
size_t
len
);
#endif
#endif
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4)
#elif defined(__GNUC__) && defined(i386)
#define SDL_memcpy4(dst, src, len) \
do { \
int ecx, edi, esi; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; movsl" \
: "=&c" (ecx), "=&D" (edi), "=&S" (esi) \
: "0" (SDL_static_cast(unsigned, len)), "1" (dst), "2" (src) \
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memcpy4
#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2)
#endif
#if defined(__GNUC__) && defined(i386)
#define SDL_revcpy(dst, src, len) \
do { \
int u0, u1, u2; \
char *dstp = SDL_static_cast(char *, dst); \
char *srcp = SDL_static_cast(char *, src); \
int n = (len); \
if ( n >= 4 ) { \
__asm__ __volatile__ ( \
"std\n\t" \
"rep ; movsl\n\t" \
"cld\n\t" \
: "=&c" (u0), "=&D" (u1), "=&S" (u2) \
: "0" (n >> 2), \
"1" (dstp+(n-4)), "2" (srcp+(n-4)) \
: "memory" ); \
} \
switch (n & 3) { \
case 3: dstp[2] = srcp[2]; \
case 2: dstp[1] = srcp[1]; \
case 1: dstp[0] = srcp[0]; \
break; \
default: \
break; \
} \
} while(0)
#endif
#ifndef SDL_revcpy
extern
DECLSPEC
void
*
SDLCALL
SDL_revcpy
(
void
*
dst
,
const
void
*
src
,
size_t
len
);
#endif
#ifdef HAVE_MEMMOVE
#define SDL_memmove memmove
#elif defined(HAVE_BCOPY)
#define SDL_memmove(d, s, n) bcopy((s), (d), (n))
#else
#define SDL_memmove(dst, src, len) \
do { \
if ( dst < src ) { \
SDL_memcpy(dst, src, len); \
} else { \
SDL_revcpy(dst, src, len); \
} \
} while(0)
#endif
#ifdef HAVE_MEMCMP
#define SDL_memcmp memcmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_memcmp
(
const
void
*
s1
,
const
void
*
s2
,
size_t
len
);
#endif
#ifdef HAVE_STRLEN
#define SDL_strlen strlen
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlen
(
const
char
*
string
);
#endif
#ifdef HAVE_WCSLEN
#define SDL_wcslen wcslen
#else
#if !defined(wchar_t) && defined(__NINTENDODS__)
#define wchar_t short
/* TODO: figure out why libnds doesn't have this */
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_wcslen
(
const
wchar_t
*
string
);
#endif
#ifdef HAVE_WCSLCPY
#define SDL_wcslcpy wcslcpy
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_wcslcpy
(
wchar_t
*
dst
,
const
wchar_t
*
src
,
size_t
maxlen
);
#endif
#endif
#ifdef HAVE_WCSLCAT
#define SDL_wcslcat wcslcat
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_wcslcat
(
wchar_t
*
dst
,
const
wchar_t
*
src
,
size_t
maxlen
);
#endif
#ifdef HAVE_STRLCPY
#define SDL_strlcpy strlcpy
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
maxlen
);
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_utf8strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
dst_bytes
);
#ifdef HAVE_STRLCAT
#define SDL_strlcat strlcat
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlcat
(
char
*
dst
,
const
char
*
src
,
size_t
maxlen
);
#endif
#ifdef HAVE_STRDUP
#define SDL_strdup strdup
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strdup
(
const
char
*
string
);
#endif
#ifdef HAVE__STRREV
#define SDL_strrev _strrev
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strrev
(
char
*
string
);
#endif
#ifdef HAVE__STRUPR
#define SDL_strupr _strupr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strupr
(
char
*
string
);
#endif
#ifdef HAVE__STRLWR
#define SDL_strlwr _strlwr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strlwr
(
char
*
string
);
#endif
#ifdef HAVE_STRCHR
#define SDL_strchr strchr
#elif defined(HAVE_INDEX)
#define SDL_strchr index
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strchr
(
const
char
*
string
,
int
c
);
#endif
#ifdef HAVE_STRRCHR
#define SDL_strrchr strrchr
#elif defined(HAVE_RINDEX)
#define SDL_strrchr rindex
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strrchr
(
const
char
*
string
,
int
c
);
#endif
#ifdef HAVE_STRSTR
#define SDL_strstr strstr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strstr
(
const
char
*
haystack
,
const
char
*
needle
);
#endif
#ifdef HAVE_ITOA
#define SDL_itoa itoa
#else
#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix)
#endif
#ifdef HAVE__LTOA
#define SDL_ltoa _ltoa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ltoa
(
long
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE__UITOA
#define SDL_uitoa _uitoa
#else
#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix)
#endif
#ifdef HAVE__ULTOA
#define SDL_ultoa _ultoa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ultoa
(
unsigned
long
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE_STRTOL
#define SDL_strtol strtol
#else
extern
DECLSPEC
long
SDLCALL
SDL_strtol
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef HAVE_STRTOUL
#define SDL_strtoul strtoul
#else
extern
DECLSPEC
unsigned
long
SDLCALL
SDL_strtoul
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef SDL_HAS_64BIT_TYPE
#ifdef HAVE__I64TOA
#define SDL_lltoa _i64toa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_lltoa
(
Sint64
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE__UI64TOA
#define SDL_ulltoa _ui64toa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ulltoa
(
Uint64
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE_STRTOLL
#define SDL_strtoll strtoll
#else
extern
DECLSPEC
Sint64
SDLCALL
SDL_strtoll
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef HAVE_STRTOULL
#define SDL_strtoull strtoull
#else
extern
DECLSPEC
Uint64
SDLCALL
SDL_strtoull
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#endif
/* SDL_HAS_64BIT_TYPE */
#ifdef HAVE_STRTOD
#define SDL_strtod strtod
#else
extern
DECLSPEC
double
SDLCALL
SDL_strtod
(
const
char
*
string
,
char
**
endp
);
#endif
#ifdef HAVE_ATOI
#define SDL_atoi atoi
#else
#define SDL_atoi(X) SDL_strtol(X, NULL, 0)
#endif
#ifdef HAVE_ATOF
#define SDL_atof atof
#else
#define SDL_atof(X) SDL_strtod(X, NULL)
#endif
#ifdef HAVE_STRCMP
#define SDL_strcmp strcmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strcmp
(
const
char
*
str1
,
const
char
*
str2
);
#endif
#ifdef HAVE_STRNCMP
#define SDL_strncmp strncmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strncmp
(
const
char
*
str1
,
const
char
*
str2
,
size_t
maxlen
);
#endif
#ifdef HAVE_STRCASECMP
#define SDL_strcasecmp strcasecmp
#elif defined(HAVE__STRICMP)
#define SDL_strcasecmp _stricmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strcasecmp
(
const
char
*
str1
,
const
char
*
str2
);
#endif
#ifdef HAVE_STRNCASECMP
#define SDL_strncasecmp strncasecmp
#elif defined(HAVE__STRNICMP)
#define SDL_strncasecmp _strnicmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strncasecmp
(
const
char
*
str1
,
const
char
*
str2
,
size_t
maxlen
);
#endif
#ifdef HAVE_SSCANF
#define SDL_sscanf sscanf
#else
extern
DECLSPEC
int
SDLCALL
SDL_sscanf
(
const
char
*
text
,
const
char
*
fmt
,
...);
#endif
#ifdef HAVE_SNPRINTF
#define SDL_snprintf snprintf
#else
extern
DECLSPEC
int
SDLCALL
SDL_snprintf
(
char
*
text
,
size_t
maxlen
,
const
char
*
fmt
,
...);
#endif
#ifdef HAVE_VSNPRINTF
#define SDL_vsnprintf vsnprintf
#else
extern
DECLSPEC
int
SDLCALL
SDL_vsnprintf
(
char
*
text
,
size_t
maxlen
,
const
char
*
fmt
,
va_list
ap
);
#endif
#ifndef HAVE_M_PI
#define M_PI 3.14159265358979323846264338327950288
/* pi */
#endif
#ifdef HAVE_CEIL
#define SDL_ceil ceil
#else
#define SDL_ceil(x) ((double)(int)((x)+0.5))
#endif
#ifdef HAVE_COPYSIGN
#define SDL_copysign copysign
#else
extern
DECLSPEC
double
SDLCALL
SDL_copysign
(
double
x
,
double
y
);
#endif
#ifdef HAVE_COS
#define SDL_cos cos
#else
extern
DECLSPEC
double
SDLCALL
SDL_cos
(
double
x
);
#endif
#ifdef HAVE_COSF
#define SDL_cosf cosf
#else
#define SDL_cosf(x) (float)SDL_cos((double)x)
#endif
#ifdef HAVE_FABS
#define SDL_fabs fabs
#else
extern
DECLSPEC
double
SDLCALL
SDL_fabs
(
double
x
);
#endif
#ifdef HAVE_FLOOR
#define SDL_floor floor
#else
extern
DECLSPEC
double
SDLCALL
SDL_floor
(
double
x
);
#endif
#ifdef HAVE_LOG
#define SDL_log log
#else
extern
DECLSPEC
double
SDLCALL
SDL_log
(
double
x
);
#endif
#ifdef HAVE_POW
#define SDL_pow pow
#else
extern
DECLSPEC
double
SDLCALL
SDL_pow
(
double
x
,
double
y
);
#endif
#ifdef HAVE_SCALBN
#define SDL_scalbn scalbn
#else
extern
DECLSPEC
double
SDLCALL
SDL_scalbn
(
double
x
,
int
n
);
#endif
#ifdef HAVE_SIN
#define SDL_sin sin
#else
extern
DECLSPEC
double
SDLCALL
SDL_sin
(
double
x
);
#endif
#ifdef HAVE_SINF
#define SDL_sinf sinf
#else
#define SDL_sinf(x) (float)SDL_sin((double)x)
#endif
#ifdef HAVE_SQRT
#define SDL_sqrt sqrt
#else
extern
DECLSPEC
double
SDLCALL
SDL_sqrt
(
double
x
);
#endif
/* The SDL implementation of iconv() returns these error codes */
#define SDL_ICONV_ERROR (size_t)-1
#define SDL_ICONV_E2BIG (size_t)-2
#define SDL_ICONV_EILSEQ (size_t)-3
#define SDL_ICONV_EINVAL (size_t)-4
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
#define SDL_iconv_t iconv_t
#define SDL_iconv_open iconv_open
#define SDL_iconv_close iconv_close
#else
typedef
struct
_SDL_iconv_t
*
SDL_iconv_t
;
extern
DECLSPEC
SDL_iconv_t
SDLCALL
SDL_iconv_open
(
const
char
*
tocode
,
const
char
*
fromcode
);
extern
DECLSPEC
int
SDLCALL
SDL_iconv_close
(
SDL_iconv_t
cd
);
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_iconv
(
SDL_iconv_t
cd
,
const
char
**
inbuf
,
size_t
*
inbytesleft
,
char
**
outbuf
,
size_t
*
outbytesleft
);
/**
* This function converts a string between encodings in one pass, returning a
* string that must be freed with SDL_free() or NULL on error.
*/
extern
DECLSPEC
char
*
SDLCALL
SDL_iconv_string
(
const
char
*
tocode
,
const
char
*
fromcode
,
const
char
*
inbuf
,
size_t
inbytesleft
);
#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
}
/* *INDENT-ON* */
#endif
#include "close_code.h"
#endif
/* _SDL_stdinc_h */
/* vi: set ts=4 sw=4 expandtab: */
#endif
#ifdef HAVE_STRLCPY
#define SDL_strlcpy strlcpy
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
maxlen
);
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_utf8strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
dst_bytes
);
#ifdef HAVE_STRLCAT
#define SDL_strlcat strlcat
#else
extern
DECLSPEC
size_t
SDLCALL
SDL_strlcat
(
char
*
dst
,
const
char
*
src
,
size_t
maxlen
);
#endif
#ifdef HAVE_STRDUP
#define SDL_strdup strdup
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strdup
(
const
char
*
string
);
#endif
#ifdef HAVE__STRREV
#define SDL_strrev _strrev
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strrev
(
char
*
string
);
#endif
#ifdef HAVE__STRUPR
#define SDL_strupr _strupr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strupr
(
char
*
string
);
#endif
#ifdef HAVE__STRLWR
#define SDL_strlwr _strlwr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strlwr
(
char
*
string
);
#endif
#ifdef HAVE_STRCHR
#define SDL_strchr strchr
#elif defined(HAVE_INDEX)
#define SDL_strchr index
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strchr
(
const
char
*
string
,
int
c
);
#endif
#ifdef HAVE_STRRCHR
#define SDL_strrchr strrchr
#elif defined(HAVE_RINDEX)
#define SDL_strrchr rindex
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strrchr
(
const
char
*
string
,
int
c
);
#endif
#ifdef HAVE_STRSTR
#define SDL_strstr strstr
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_strstr
(
const
char
*
haystack
,
const
char
*
needle
);
#endif
#ifdef HAVE_ITOA
#define SDL_itoa itoa
#else
#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix)
#endif
#ifdef HAVE__LTOA
#define SDL_ltoa _ltoa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ltoa
(
long
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE__UITOA
#define SDL_uitoa _uitoa
#else
#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix)
#endif
#ifdef HAVE__ULTOA
#define SDL_ultoa _ultoa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ultoa
(
unsigned
long
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE_STRTOL
#define SDL_strtol strtol
#else
extern
DECLSPEC
long
SDLCALL
SDL_strtol
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef HAVE_STRTOUL
#define SDL_strtoul strtoul
#else
extern
DECLSPEC
unsigned
long
SDLCALL
SDL_strtoul
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef SDL_HAS_64BIT_TYPE
#ifdef HAVE__I64TOA
#define SDL_lltoa _i64toa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_lltoa
(
Sint64
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE__UI64TOA
#define SDL_ulltoa _ui64toa
#else
extern
DECLSPEC
char
*
SDLCALL
SDL_ulltoa
(
Uint64
value
,
char
*
string
,
int
radix
);
#endif
#ifdef HAVE_STRTOLL
#define SDL_strtoll strtoll
#else
extern
DECLSPEC
Sint64
SDLCALL
SDL_strtoll
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#ifdef HAVE_STRTOULL
#define SDL_strtoull strtoull
#else
extern
DECLSPEC
Uint64
SDLCALL
SDL_strtoull
(
const
char
*
string
,
char
**
endp
,
int
base
);
#endif
#endif
/* SDL_HAS_64BIT_TYPE */
#ifdef HAVE_STRTOD
#define SDL_strtod strtod
#else
extern
DECLSPEC
double
SDLCALL
SDL_strtod
(
const
char
*
string
,
char
**
endp
);
#endif
#ifdef HAVE_ATOI
#define SDL_atoi atoi
#else
#define SDL_atoi(X) SDL_strtol(X, NULL, 0)
#endif
#ifdef HAVE_ATOF
#define SDL_atof atof
#else
#define SDL_atof(X) SDL_strtod(X, NULL)
#endif
#ifdef HAVE_STRCMP
#define SDL_strcmp strcmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strcmp
(
const
char
*
str1
,
const
char
*
str2
);
#endif
#ifdef HAVE_STRNCMP
#define SDL_strncmp strncmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strncmp
(
const
char
*
str1
,
const
char
*
str2
,
size_t
maxlen
);
#endif
#ifdef HAVE_STRCASECMP
#define SDL_strcasecmp strcasecmp
#elif defined(HAVE__STRICMP)
#define SDL_strcasecmp _stricmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strcasecmp
(
const
char
*
str1
,
const
char
*
str2
);
#endif
#ifdef HAVE_STRNCASECMP
#define SDL_strncasecmp strncasecmp
#elif defined(HAVE__STRNICMP)
#define SDL_strncasecmp _strnicmp
#else
extern
DECLSPEC
int
SDLCALL
SDL_strncasecmp
(
const
char
*
str1
,
const
char
*
str2
,
size_t
maxlen
);
#endif
#ifdef HAVE_SSCANF
#define SDL_sscanf sscanf
#else
extern
DECLSPEC
int
SDLCALL
SDL_sscanf
(
const
char
*
text
,
const
char
*
fmt
,
...);
#endif
#ifdef HAVE_SNPRINTF
#define SDL_snprintf snprintf
#else
extern
DECLSPEC
int
SDLCALL
SDL_snprintf
(
char
*
text
,
size_t
maxlen
,
const
char
*
fmt
,
...);
#endif
#ifdef HAVE_VSNPRINTF
#define SDL_vsnprintf vsnprintf
#else
extern
DECLSPEC
int
SDLCALL
SDL_vsnprintf
(
char
*
text
,
size_t
maxlen
,
const
char
*
fmt
,
va_list
ap
);
#endif
#ifndef HAVE_M_PI
#define M_PI 3.14159265358979323846264338327950288
/* pi */
#endif
#ifdef HAVE_CEIL
#define SDL_ceil ceil
#else
#define SDL_ceil(x) ((double)(int)((x)+0.5))
#endif
#ifdef HAVE_COPYSIGN
#define SDL_copysign copysign
#else
extern
DECLSPEC
double
SDLCALL
SDL_copysign
(
double
x
,
double
y
);
#endif
#ifdef HAVE_COS
#define SDL_cos cos
#else
extern
DECLSPEC
double
SDLCALL
SDL_cos
(
double
x
);
#endif
#ifdef HAVE_COSF
#define SDL_cosf cosf
#else
#define SDL_cosf(x) (float)SDL_cos((double)x)
#endif
#ifdef HAVE_FABS
#define SDL_fabs fabs
#else
extern
DECLSPEC
double
SDLCALL
SDL_fabs
(
double
x
);
#endif
#ifdef HAVE_FLOOR
#define SDL_floor floor
#else
extern
DECLSPEC
double
SDLCALL
SDL_floor
(
double
x
);
#endif
#ifdef HAVE_LOG
#define SDL_log log
#else
extern
DECLSPEC
double
SDLCALL
SDL_log
(
double
x
);
#endif
#ifdef HAVE_POW
#define SDL_pow pow
#else
extern
DECLSPEC
double
SDLCALL
SDL_pow
(
double
x
,
double
y
);
#endif
#ifdef HAVE_SCALBN
#define SDL_scalbn scalbn
#else
extern
DECLSPEC
double
SDLCALL
SDL_scalbn
(
double
x
,
int
n
);
#endif
#ifdef HAVE_SIN
#define SDL_sin sin
#else
extern
DECLSPEC
double
SDLCALL
SDL_sin
(
double
x
);
#endif
#ifdef HAVE_SINF
#define SDL_sinf sinf
#else
#define SDL_sinf(x) (float)SDL_sin((double)x)
#endif
#ifdef HAVE_SQRT
#define SDL_sqrt sqrt
#else
extern
DECLSPEC
double
SDLCALL
SDL_sqrt
(
double
x
);
#endif
/* The SDL implementation of iconv() returns these error codes */
#define SDL_ICONV_ERROR (size_t)-1
#define SDL_ICONV_E2BIG (size_t)-2
#define SDL_ICONV_EILSEQ (size_t)-3
#define SDL_ICONV_EINVAL (size_t)-4
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
#define SDL_iconv_t iconv_t
#define SDL_iconv_open iconv_open
#define SDL_iconv_close iconv_close
#else
typedef
struct
_SDL_iconv_t
*
SDL_iconv_t
;
extern
DECLSPEC
SDL_iconv_t
SDLCALL
SDL_iconv_open
(
const
char
*
tocode
,
const
char
*
fromcode
);
extern
DECLSPEC
int
SDLCALL
SDL_iconv_close
(
SDL_iconv_t
cd
);
#endif
extern
DECLSPEC
size_t
SDLCALL
SDL_iconv
(
SDL_iconv_t
cd
,
const
char
**
inbuf
,
size_t
*
inbytesleft
,
char
**
outbuf
,
size_t
*
outbytesleft
);
/**
* This function converts a string between encodings in one pass, returning a
* string that must be freed with SDL_free() or NULL on error.
*/
extern
DECLSPEC
char
*
SDLCALL
SDL_iconv_string
(
const
char
*
tocode
,
const
char
*
fromcode
,
const
char
*
inbuf
,
size_t
inbytesleft
);
#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
}
/* *INDENT-ON* */
#endif
#include "close_code.h"
#endif
/* _SDL_stdinc_h */
/* vi: set ts=4 sw=4 expandtab: */
src/haptic/nds/SDL_syshaptic.c
View file @
7d245d05
...
...
@@ -43,35 +43,35 @@ typedef struct
}
NDS_HapticData
;
v
oid
NDS_EZF_OpenNorWrite
()
void
NDS_EZF_OpenNorWrite
()
{
G
BA_BUS
[
0x0FF0000
]
=
0xD200
;
G
BA_BUS
[
0x0000000
]
=
0x1500
;
G
BA_BUS
[
0x0010000
]
=
0xD200
;
G
BA_BUS
[
0x0020000
]
=
0x1500
;
G
BA_BUS
[
0x0E20000
]
=
0x1500
;
G
BA_BUS
[
0x0FE0000
]
=
0x1500
;
}
void
NDS_EZF_CloseNorWrite
()
GBA_BUS
[
0x0FF0000
]
=
0xD200
;
GBA_BUS
[
0x0000000
]
=
0x1500
;
GBA_BUS
[
0x0010000
]
=
0xD200
;
GBA_BUS
[
0x0020000
]
=
0x1500
;
GBA_BUS
[
0x0E20000
]
=
0x1500
;
GBA_BUS
[
0x0FE0000
]
=
0x1500
;
}
void
NDS_EZF_CloseNorWrite
()
{
G
BA_BUS
[
0x0FF0000
]
=
0xD200
;
G
BA_BUS
[
0x0000000
]
=
0x1500
;
G
BA_BUS
[
0x0010000
]
=
0xD200
;
G
BA_BUS
[
0x0020000
]
=
0x1500
;
G
BA_BUS
[
0x0E20000
]
=
0xD200
;
G
BA_BUS
[
0x0FE0000
]
=
0x1500
;
}
GBA_BUS
[
0x0FF0000
]
=
0xD200
;
GBA_BUS
[
0x0000000
]
=
0x1500
;
GBA_BUS
[
0x0010000
]
=
0xD200
;
GBA_BUS
[
0x0020000
]
=
0x1500
;
GBA_BUS
[
0x0E20000
]
=
0xD200
;
GBA_BUS
[
0x0FE0000
]
=
0x1500
;
}
void
NDS_EZF_ChipReset
()
{
G
BA_BUS
[
0x0000
]
=
0x00F0
;
G
BA_BUS
[
0x1000
]
=
0x00F0
;
}
uint32
NDS_EZF_IsPresent
()
GBA_BUS
[
0x0000
]
=
0x00F0
;
GBA_BUS
[
0x1000
]
=
0x00F0
;
}
uint32
NDS_EZF_IsPresent
()
{
v
uint16
id1
,
id2
;
vuint16
id1
,
id2
;
NDS_EZF_OpenNorWrite
();
...
...
@@ -81,35 +81,35 @@ NDS_EZF_ChipReset()
GBA_BUS
[
0x1555
]
=
0x00AA
;
GBA_BUS
[
0x12AA
]
=
0x0055
;
GBA_BUS
[
0x1555
]
=
0x0090
;
i
d1
=
GBA_BUS
[
0x0001
];
i
d2
=
GBA_BUS
[
0x1001
];
i
f
((
id1
!=
0x227E
)
||
(
id2
!=
0x227E
))
{
id1
=
GBA_BUS
[
0x0001
];
id2
=
GBA_BUS
[
0x1001
];
if
((
id1
!=
0x227E
)
||
(
id2
!=
0x227E
))
{
NDS_EZF_CloseNorWrite
();
r
eturn
0
;
return
0
;
}
i
d1
=
GBA_BUS
[
0x000E
];
i
d2
=
GBA_BUS
[
0x100E
];
id1
=
GBA_BUS
[
0x000E
];
id2
=
GBA_BUS
[
0x100E
];
NDS_EZF_CloseNorWrite
();
i
f
(
id1
==
0x2218
&&
id2
==
0x2218
)
{
r
eturn
1
;
if
(
id1
==
0x2218
&&
id2
==
0x2218
)
{
return
1
;
}
r
eturn
0
;
}
v
oid
NDS_EZF_SetShake
(
u8
pos
)
return
0
;
}
void
NDS_EZF_SetShake
(
u8
pos
)
{
u16
data
=
((
pos
%
3
)
|
0x00F0
);
G
BA_BUS
[
0x0FF0000
]
=
0xD200
;
G
BA_BUS
[
0x0000000
]
=
0x1500
;
G
BA_BUS
[
0x0010000
]
=
0xD200
;
G
BA_BUS
[
0x0020000
]
=
0x1500
;
G
BA_BUS
[
0x0F10000
]
=
data
;
G
BA_BUS
[
0x0FE0000
]
=
0x1500
;
GBA_BUS
[
0x0FF0000
]
=
0xD200
;
GBA_BUS
[
0x0000000
]
=
0x1500
;
GBA_BUS
[
0x0010000
]
=
0xD200
;
GBA_BUS
[
0x0020000
]
=
0x1500
;
GBA_BUS
[
0x0F10000
]
=
data
;
GBA_BUS
[
0x0FE0000
]
=
0x1500
;
GBA_BUS
[
0
]
=
0x0000
;
/* write any value for vibration. */
GBA_BUS
[
0
]
=
0x0002
;
}
}
static
int
SDL_SYS_LogicError
(
void
)
...
...
src/joystick/nds/SDL_sysjoystick.c
View file @
7d245d05
...
...
@@ -45,7 +45,7 @@ int
SDL_SYS_JoystickInit
(
void
)
{
SDL_numjoysticks
=
1
;
r
eturn
(
1
);
return
(
1
);
}
/* Function to get the device-dependent name of a joystick */
...
...
@@ -73,7 +73,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick)
return
0
;
}
/* Function to update the state of a joystick - called as a device poll.
* This function shouldn't update the joystick structure directly,
* but instead should call SDL_PrivateJoystick*() to deliver events
...
...
@@ -84,8 +84,8 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
{
u32
keysd
,
keysu
;
int
magnitude
=
16384
;
/*scanKeys(); - this is done in PumpEvents, because touch uses it too */
/*scanKeys(); - this is done in PumpEvents, because touch uses it too */
keysd
=
keysDown
();
keysu
=
keysUp
();
...
...
@@ -101,61 +101,61 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
if
((
keysd
&
KEY_RIGHT
))
{
SDL_PrivateJoystickAxis
(
joystick
,
0
,
magnitude
);
}
i
f
((
keysu
&
(
KEY_UP
|
KEY_DOWN
)))
{
if
((
keysu
&
(
KEY_UP
|
KEY_DOWN
)))
{
SDL_PrivateJoystickAxis
(
joystick
,
1
,
0
);
}
i
f
((
keysu
&
(
KEY_LEFT
|
KEY_RIGHT
)))
{
if
((
keysu
&
(
KEY_LEFT
|
KEY_RIGHT
)))
{
SDL_PrivateJoystickAxis
(
joystick
,
0
,
0
);
}
i
f
((
keysd
&
KEY_A
))
{
if
((
keysd
&
KEY_A
))
{
SDL_PrivateJoystickButton
(
joystick
,
0
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_B
))
{
if
((
keysd
&
KEY_B
))
{
SDL_PrivateJoystickButton
(
joystick
,
1
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_X
))
{
if
((
keysd
&
KEY_X
))
{
SDL_PrivateJoystickButton
(
joystick
,
2
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_Y
))
{
if
((
keysd
&
KEY_Y
))
{
SDL_PrivateJoystickButton
(
joystick
,
3
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_L
))
{
if
((
keysd
&
KEY_L
))
{
SDL_PrivateJoystickButton
(
joystick
,
4
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_R
))
{
if
((
keysd
&
KEY_R
))
{
SDL_PrivateJoystickButton
(
joystick
,
5
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_SELECT
))
{
if
((
keysd
&
KEY_SELECT
))
{
SDL_PrivateJoystickButton
(
joystick
,
6
,
SDL_PRESSED
);
}
i
f
((
keysd
&
KEY_START
))
{
if
((
keysd
&
KEY_START
))
{
SDL_PrivateJoystickButton
(
joystick
,
7
,
SDL_PRESSED
);
}
i
f
((
keysu
&
KEY_A
))
{
if
((
keysu
&
KEY_A
))
{
SDL_PrivateJoystickButton
(
joystick
,
0
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_B
))
{
if
((
keysu
&
KEY_B
))
{
SDL_PrivateJoystickButton
(
joystick
,
1
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_X
))
{
if
((
keysu
&
KEY_X
))
{
SDL_PrivateJoystickButton
(
joystick
,
2
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_Y
))
{
if
((
keysu
&
KEY_Y
))
{
SDL_PrivateJoystickButton
(
joystick
,
3
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_L
))
{
if
((
keysu
&
KEY_L
))
{
SDL_PrivateJoystickButton
(
joystick
,
4
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_R
))
{
if
((
keysu
&
KEY_R
))
{
SDL_PrivateJoystickButton
(
joystick
,
5
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_SELECT
))
{
if
((
keysu
&
KEY_SELECT
))
{
SDL_PrivateJoystickButton
(
joystick
,
6
,
SDL_RELEASED
);
}
i
f
((
keysu
&
KEY_START
))
{
if
((
keysu
&
KEY_START
))
{
SDL_PrivateJoystickButton
(
joystick
,
7
,
SDL_RELEASED
);
}
}
}
/* Function to close a joystick after use */
void
...
...
src/video/win32/SDL_win32video.c
View file @
7d245d05
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#include "SDL_config.h"
#include "SDL_main.h"
#include "SDL_video.h"
#include "SDL_mouse.h"
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
#include "SDL_win32video.h"
#include "SDL_d3drender.h"
#include "SDL_gdirender.h"
/* Initialization/Query functions */
static
int
WIN_VideoInit
(
_THIS
);
static
void
WIN_VideoQuit
(
_THIS
);
/* Sets an error message based on GetLastError() */
void
WIN_SetError
(
const
char
*
prefix
)
{
TCHAR
buffer
[
1024
];
char
*
message
;
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM
,
NULL
,
GetLastError
(),
0
,
buffer
,
SDL_arraysize
(
buffer
),
NULL
);
message
=
WIN_StringToUTF8
(
buffer
);
SDL_SetError
(
"%s%s%s"
,
prefix
?
prefix
:
""
,
prefix
?
": "
:
""
,
message
);
SDL_free
(
message
);
}
/* WIN32 driver bootstrap functions */
static
int
WIN_Available
(
void
)
{
return
(
1
);
}
static
void
WIN_DeleteDevice
(
SDL_VideoDevice
*
device
)
{
SDL_VideoData
*
data
=
(
SDL_VideoData
*
)
device
->
driverdata
;
SDL_UnregisterApp
();
#if SDL_VIDEO_RENDER_D3D
if
(
data
->
d3d
)
{
IDirect3D9_Release
(
data
->
d3d
);
FreeLibrary
(
data
->
d3dDLL
);
}
#endif
#if SDL_VIDEO_RENDER_DDRAW
if
(
data
->
ddraw
)
{
data
->
ddraw
->
lpVtbl
->
Release
(
data
->
ddraw
);
FreeLibrary
(
data
->
ddrawDLL
);
}
#endif
SDL_free
(
device
->
driverdata
);
SDL_free
(
device
);
}
static
SDL_VideoDevice
*
WIN_CreateDevice
(
int
devindex
)
{
SDL_VideoDevice
*
device
;
SDL_VideoData
*
data
;
SDL_RegisterApp
(
NULL
,
0
,
NULL
);
/* Initialize all variables that we clean on shutdown */
device
=
(
SDL_VideoDevice
*
)
SDL_calloc
(
1
,
sizeof
(
SDL_VideoDevice
));
if
(
device
)
{
data
=
(
struct
SDL_VideoData
*
)
SDL_calloc
(
1
,
sizeof
(
SDL_VideoData
));
}
else
{
data
=
NULL
;
}
if
(
!
data
)
{
SDL_OutOfMemory
();
if
(
device
)
{
SDL_free
(
device
);
}
return
NULL
;
}
device
->
driverdata
=
data
;
#if SDL_VIDEO_RENDER_D3D
data
->
d3dDLL
=
LoadLibrary
(
TEXT
(
"D3D9.DLL"
));
if
(
data
->
d3dDLL
)
{
IDirect3D9
*
(
WINAPI
*
D3DCreate
)
(
UINT
SDKVersion
);
D3DCreate
=
(
IDirect3D9
*
(
WINAPI
*
)
(
UINT
))
GetProcAddress
(
data
->
d3dDLL
,
"Direct3DCreate9"
);
if
(
D3DCreate
)
{
data
->
d3d
=
D3DCreate
(
D3D_SDK_VERSION
);
}
if
(
!
data
->
d3d
)
{
FreeLibrary
(
data
->
d3dDLL
);
data
->
d3dDLL
=
NULL
;
}
}
#endif
/* SDL_VIDEO_RENDER_D3D */
#if SDL_VIDEO_RENDER_DDRAW
data
->
ddrawDLL
=
LoadLibrary
(
TEXT
(
"ddraw.dll"
));
if
(
data
->
ddrawDLL
)
{
IDirectDraw
*
(
WINAPI
*
DDCreate
)
(
GUID
FAR
*
lpGUID
,
LPDIRECTDRAW
FAR
*
lplpDD
,
IUnknown
FAR
*
pUnkOuter
);
DDCreate
=
(
IDirectDraw
*
(
WINAPI
*
)
(
GUID
FAR
*
,
LPDIRECTDRAW
FAR
*
,
IUnknown
FAR
*
))
GetProcAddress
(
data
->
ddrawDLL
,
TEXT
(
"DirectDrawCreate"
));
if
(
!
DDCreate
||
DDCreate
(
NULL
,
&
data
->
ddraw
,
NULL
)
!=
DD_OK
)
{
FreeLibrary
(
data
->
ddrawDLL
);
data
->
ddrawDLL
=
NULL
;
data
->
ddraw
=
NULL
;
}
}
#endif
/* SDL_VIDEO_RENDER_DDRAW */
/* Set the function pointers */
device
->
VideoInit
=
WIN_VideoInit
;
device
->
VideoQuit
=
WIN_VideoQuit
;
device
->
GetDisplayBounds
=
WIN_GetDisplayBounds
;
device
->
GetDisplayModes
=
WIN_GetDisplayModes
;
device
->
SetDisplayMode
=
WIN_SetDisplayMode
;
device
->
SetDisplayGammaRamp
=
WIN_SetDisplayGammaRamp
;
device
->
GetDisplayGammaRamp
=
WIN_GetDisplayGammaRamp
;
device
->
PumpEvents
=
WIN_PumpEvents
;
#undef CreateWindow
device
->
CreateWindow
=
WIN_CreateWindow
;
device
->
CreateWindowFrom
=
WIN_CreateWindowFrom
;
device
->
SetWindowTitle
=
WIN_SetWindowTitle
;
device
->
SetWindowIcon
=
WIN_SetWindowIcon
;
device
->
SetWindowPosition
=
WIN_SetWindowPosition
;
device
->
SetWindowSize
=
WIN_SetWindowSize
;
device
->
ShowWindow
=
WIN_ShowWindow
;
device
->
HideWindow
=
WIN_HideWindow
;
device
->
RaiseWindow
=
WIN_RaiseWindow
;
device
->
MaximizeWindow
=
WIN_MaximizeWindow
;
device
->
MinimizeWindow
=
WIN_MinimizeWindow
;
device
->
RestoreWindow
=
WIN_RestoreWindow
;
device
->
SetWindowGrab
=
WIN_SetWindowGrab
;
device
->
DestroyWindow
=
WIN_DestroyWindow
;
device
->
GetWindowWMInfo
=
WIN_GetWindowWMInfo
;
#ifdef SDL_VIDEO_OPENGL_WGL
device
->
GL_LoadLibrary
=
WIN_GL_LoadLibrary
;
device
->
GL_GetProcAddress
=
WIN_GL_GetProcAddress
;
device
->
GL_UnloadLibrary
=
WIN_GL_UnloadLibrary
;
device
->
GL_CreateContext
=
WIN_GL_CreateContext
;
device
->
GL_MakeCurrent
=
WIN_GL_MakeCurrent
;
device
->
GL_SetSwapInterval
=
WIN_GL_SetSwapInterval
;
device
->
GL_GetSwapInterval
=
WIN_GL_GetSwapInterval
;
device
->
GL_SwapWindow
=
WIN_GL_SwapWindow
;
device
->
GL_DeleteContext
=
WIN_GL_DeleteContext
;
#endif
device
->
StartTextInput
=
WIN_StartTextInput
;
device
->
StopTextInput
=
WIN_StopTextInput
;
device
->
SetTextInputRect
=
WIN_SetTextInputRect
;
device
->
SetClipboardText
=
WIN_SetClipboardText
;
device
->
GetClipboardText
=
WIN_GetClipboardText
;
device
->
HasClipboardText
=
WIN_HasClipboardText
;
device
->
free
=
WIN_DeleteDevice
;
return
device
;
}
VideoBootStrap
WIN32_bootstrap
=
{
"win32"
,
"SDL Win32/64 video driver"
,
WIN_Available
,
WIN_CreateDevice
};
int
WIN_VideoInit
(
_THIS
)
{
if
(
WIN_InitModes
(
_this
)
<
0
)
{
return
-
1
;
}
#if SDL_VIDEO_RENDER_D3D
D3D_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_DDRAW
DDRAW_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_GDI
GDI_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_GAPI
GAPI_AddRenderDriver
(
_this
);
#endif
WIN_InitKeyboard
(
_this
);
WIN_InitMouse
(
_this
);
return
0
;
}
void
WIN_VideoQuit
(
_THIS
)
{
WIN_QuitModes
(
_this
);
WIN_QuitKeyboard
(
_this
);
WIN_QuitMouse
(
_this
);
}
/* vim: set ts=4 sw=4 expandtab: */
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#include "SDL_config.h"
#include "SDL_main.h"
#include "SDL_video.h"
#include "SDL_mouse.h"
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
#include "SDL_win32video.h"
#include "SDL_d3drender.h"
#include "SDL_gdirender.h"
/* Initialization/Query functions */
static
int
WIN_VideoInit
(
_THIS
);
static
void
WIN_VideoQuit
(
_THIS
);
/* Sets an error message based on GetLastError() */
void
WIN_SetError
(
const
char
*
prefix
)
{
TCHAR
buffer
[
1024
];
char
*
message
;
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM
,
NULL
,
GetLastError
(),
0
,
buffer
,
SDL_arraysize
(
buffer
),
NULL
);
message
=
WIN_StringToUTF8
(
buffer
);
SDL_SetError
(
"%s%s%s"
,
prefix
?
prefix
:
""
,
prefix
?
": "
:
""
,
message
);
SDL_free
(
message
);
}
/* WIN32 driver bootstrap functions */
static
int
WIN_Available
(
void
)
{
return
(
1
);
}
static
void
WIN_DeleteDevice
(
SDL_VideoDevice
*
device
)
{
SDL_VideoData
*
data
=
(
SDL_VideoData
*
)
device
->
driverdata
;
SDL_UnregisterApp
();
#if SDL_VIDEO_RENDER_D3D
if
(
data
->
d3d
)
{
IDirect3D9_Release
(
data
->
d3d
);
FreeLibrary
(
data
->
d3dDLL
);
}
#endif
#if SDL_VIDEO_RENDER_DDRAW
if
(
data
->
ddraw
)
{
data
->
ddraw
->
lpVtbl
->
Release
(
data
->
ddraw
);
FreeLibrary
(
data
->
ddrawDLL
);
}
#endif
SDL_free
(
device
->
driverdata
);
SDL_free
(
device
);
}
static
SDL_VideoDevice
*
WIN_CreateDevice
(
int
devindex
)
{
SDL_VideoDevice
*
device
;
SDL_VideoData
*
data
;
SDL_RegisterApp
(
NULL
,
0
,
NULL
);
/* Initialize all variables that we clean on shutdown */
device
=
(
SDL_VideoDevice
*
)
SDL_calloc
(
1
,
sizeof
(
SDL_VideoDevice
));
if
(
device
)
{
data
=
(
struct
SDL_VideoData
*
)
SDL_calloc
(
1
,
sizeof
(
SDL_VideoData
));
}
else
{
data
=
NULL
;
}
if
(
!
data
)
{
SDL_OutOfMemory
();
if
(
device
)
{
SDL_free
(
device
);
}
return
NULL
;
}
device
->
driverdata
=
data
;
#if SDL_VIDEO_RENDER_D3D
data
->
d3dDLL
=
LoadLibrary
(
TEXT
(
"D3D9.DLL"
));
if
(
data
->
d3dDLL
)
{
IDirect3D9
*
(
WINAPI
*
D3DCreate
)
(
UINT
SDKVersion
);
D3DCreate
=
(
IDirect3D9
*
(
WINAPI
*
)
(
UINT
))
GetProcAddress
(
data
->
d3dDLL
,
"Direct3DCreate9"
);
if
(
D3DCreate
)
{
data
->
d3d
=
D3DCreate
(
D3D_SDK_VERSION
);
}
if
(
!
data
->
d3d
)
{
FreeLibrary
(
data
->
d3dDLL
);
data
->
d3dDLL
=
NULL
;
}
}
#endif
/* SDL_VIDEO_RENDER_D3D */
#if SDL_VIDEO_RENDER_DDRAW
data
->
ddrawDLL
=
LoadLibrary
(
TEXT
(
"ddraw.dll"
));
if
(
data
->
ddrawDLL
)
{
IDirectDraw
*
(
WINAPI
*
DDCreate
)
(
GUID
FAR
*
lpGUID
,
LPDIRECTDRAW
FAR
*
lplpDD
,
IUnknown
FAR
*
pUnkOuter
);
DDCreate
=
(
IDirectDraw
*
(
WINAPI
*
)
(
GUID
FAR
*
,
LPDIRECTDRAW
FAR
*
,
IUnknown
FAR
*
))
GetProcAddress
(
data
->
ddrawDLL
,
TEXT
(
"DirectDrawCreate"
));
if
(
!
DDCreate
||
DDCreate
(
NULL
,
&
data
->
ddraw
,
NULL
)
!=
DD_OK
)
{
FreeLibrary
(
data
->
ddrawDLL
);
data
->
ddrawDLL
=
NULL
;
data
->
ddraw
=
NULL
;
}
}
#endif
/* SDL_VIDEO_RENDER_DDRAW */
/* Set the function pointers */
device
->
VideoInit
=
WIN_VideoInit
;
device
->
VideoQuit
=
WIN_VideoQuit
;
device
->
GetDisplayBounds
=
WIN_GetDisplayBounds
;
device
->
GetDisplayModes
=
WIN_GetDisplayModes
;
device
->
SetDisplayMode
=
WIN_SetDisplayMode
;
device
->
SetDisplayGammaRamp
=
WIN_SetDisplayGammaRamp
;
device
->
GetDisplayGammaRamp
=
WIN_GetDisplayGammaRamp
;
device
->
PumpEvents
=
WIN_PumpEvents
;
#undef CreateWindow
device
->
CreateWindow
=
WIN_CreateWindow
;
device
->
CreateWindowFrom
=
WIN_CreateWindowFrom
;
device
->
SetWindowTitle
=
WIN_SetWindowTitle
;
device
->
SetWindowIcon
=
WIN_SetWindowIcon
;
device
->
SetWindowPosition
=
WIN_SetWindowPosition
;
device
->
SetWindowSize
=
WIN_SetWindowSize
;
device
->
ShowWindow
=
WIN_ShowWindow
;
device
->
HideWindow
=
WIN_HideWindow
;
device
->
RaiseWindow
=
WIN_RaiseWindow
;
device
->
MaximizeWindow
=
WIN_MaximizeWindow
;
device
->
MinimizeWindow
=
WIN_MinimizeWindow
;
device
->
RestoreWindow
=
WIN_RestoreWindow
;
device
->
SetWindowGrab
=
WIN_SetWindowGrab
;
device
->
DestroyWindow
=
WIN_DestroyWindow
;
device
->
GetWindowWMInfo
=
WIN_GetWindowWMInfo
;
#ifdef SDL_VIDEO_OPENGL_WGL
device
->
GL_LoadLibrary
=
WIN_GL_LoadLibrary
;
device
->
GL_GetProcAddress
=
WIN_GL_GetProcAddress
;
device
->
GL_UnloadLibrary
=
WIN_GL_UnloadLibrary
;
device
->
GL_CreateContext
=
WIN_GL_CreateContext
;
device
->
GL_MakeCurrent
=
WIN_GL_MakeCurrent
;
device
->
GL_SetSwapInterval
=
WIN_GL_SetSwapInterval
;
device
->
GL_GetSwapInterval
=
WIN_GL_GetSwapInterval
;
device
->
GL_SwapWindow
=
WIN_GL_SwapWindow
;
device
->
GL_DeleteContext
=
WIN_GL_DeleteContext
;
#endif
device
->
StartTextInput
=
WIN_StartTextInput
;
device
->
StopTextInput
=
WIN_StopTextInput
;
device
->
SetTextInputRect
=
WIN_SetTextInputRect
;
device
->
SetClipboardText
=
WIN_SetClipboardText
;
device
->
GetClipboardText
=
WIN_GetClipboardText
;
device
->
HasClipboardText
=
WIN_HasClipboardText
;
device
->
free
=
WIN_DeleteDevice
;
return
device
;
}
VideoBootStrap
WIN32_bootstrap
=
{
"win32"
,
"SDL Win32/64 video driver"
,
WIN_Available
,
WIN_CreateDevice
};
int
WIN_VideoInit
(
_THIS
)
{
if
(
WIN_InitModes
(
_this
)
<
0
)
{
return
-
1
;
}
#if SDL_VIDEO_RENDER_D3D
D3D_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_DDRAW
DDRAW_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_GDI
GDI_AddRenderDriver
(
_this
);
#endif
#if SDL_VIDEO_RENDER_GAPI
GAPI_AddRenderDriver
(
_this
);
#endif
WIN_InitKeyboard
(
_this
);
WIN_InitMouse
(
_this
);
return
0
;
}
void
WIN_VideoQuit
(
_THIS
)
{
WIN_QuitModes
(
_this
);
WIN_QuitKeyboard
(
_this
);
WIN_QuitMouse
(
_this
);
}
/* vim: set ts=4 sw=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment