3rdparty: remove the heavy (+90MBytes) SDL test directory. Completely useless and save us few minutes of download
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4712 96395faa-99c1-11dd-bbfe-3dabce05a288
|
@ -1,3 +0,0 @@
|
|||
handle SIGUSR1 pass noprint
|
||||
handle SIGUSR2 pass noprint
|
||||
break main
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
The test programs in this directory tree are for demonstrating and
|
||||
testing the functionality of the SDL library, and are placed in the
|
||||
public domain.
|
||||
|
||||
October 28, 1997
|
||||
--
|
||||
Sam Lantinga (slouken@libsdl.org)
|
|
@ -1,227 +0,0 @@
|
|||
# Makefile to build the SDL tests
|
||||
|
||||
srcdir = @srcdir@
|
||||
|
||||
CC = @CC@
|
||||
EXE = @EXE@
|
||||
CFLAGS = @CFLAGS@
|
||||
LIBS = @LIBS@
|
||||
|
||||
TARGETS = \
|
||||
checkkeys$(EXE) \
|
||||
graywin$(EXE) \
|
||||
loopwave$(EXE) \
|
||||
testalpha$(EXE) \
|
||||
testatomic$(EXE) \
|
||||
testaudioinfo$(EXE) \
|
||||
testbitmap$(EXE) \
|
||||
testblitspeed$(EXE) \
|
||||
testcursor$(EXE) \
|
||||
testdraw2$(EXE) \
|
||||
testdyngl$(EXE) \
|
||||
testdyngles$(EXE) \
|
||||
testerror$(EXE) \
|
||||
testfile$(EXE) \
|
||||
testfill$(EXE) \
|
||||
testgesture$(EXE) \
|
||||
testgl$(EXE) \
|
||||
testgl2$(EXE) \
|
||||
testgles$(EXE) \
|
||||
testhaptic$(EXE) \
|
||||
testrumble$(EXE) \
|
||||
testhread$(EXE) \
|
||||
testiconv$(EXE) \
|
||||
testime$(EXE) \
|
||||
testintersections$(EXE) \
|
||||
testjoystick$(EXE) \
|
||||
testkeys$(EXE) \
|
||||
testloadso$(EXE) \
|
||||
testlock$(EXE) \
|
||||
testmultiaudio$(EXE) \
|
||||
testoverlay$(EXE) \
|
||||
testoverlay2$(EXE) \
|
||||
testplatform$(EXE) \
|
||||
testpower$(EXE) \
|
||||
testresample$(EXE) \
|
||||
testscale$(EXE) \
|
||||
testsem$(EXE) \
|
||||
testshader$(EXE) \
|
||||
testshape$(EXE) \
|
||||
testsprite$(EXE) \
|
||||
testsprite2$(EXE) \
|
||||
testspriteminimal$(EXE) \
|
||||
teststreaming$(EXE) \
|
||||
testtimer$(EXE) \
|
||||
testver$(EXE) \
|
||||
testvidinfo$(EXE) \
|
||||
testwin$(EXE) \
|
||||
testwm$(EXE) \
|
||||
testwm2$(EXE) \
|
||||
threadwin$(EXE) \
|
||||
torturethread$(EXE) \
|
||||
|
||||
all: Makefile $(TARGETS)
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in
|
||||
$(SHELL) config.status $@
|
||||
|
||||
checkkeys$(EXE): $(srcdir)/checkkeys.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
graywin$(EXE): $(srcdir)/graywin.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
loopwave$(EXE): $(srcdir)/loopwave.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testresample$(EXE): $(srcdir)/testresample.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testaudioinfo$(EXE): $(srcdir)/testaudioinfo.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testmultiaudio$(EXE): $(srcdir)/testmultiaudio.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testalpha$(EXE): $(srcdir)/testalpha.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testatomic$(EXE): $(srcdir)/testatomic.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testbitmap$(EXE): $(srcdir)/testbitmap.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testblitspeed$(EXE): $(srcdir)/testblitspeed.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testcursor$(EXE): $(srcdir)/testcursor.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testintersections$(EXE): $(srcdir)/testintersections.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testintersections.c $(srcdir)/common.c $(CFLAGS) $(LIBS)
|
||||
|
||||
testdraw2$(EXE): $(srcdir)/testdraw2.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testdraw2.c $(srcdir)/common.c $(CFLAGS) $(LIBS)
|
||||
|
||||
testdyngl$(EXE): $(srcdir)/testdyngl.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testdyngles$(EXE): $(srcdir)/testdyngles.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testerror$(EXE): $(srcdir)/testerror.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testfile$(EXE): $(srcdir)/testfile.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testfill$(EXE): $(srcdir)/testfill.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testgesture$(EXE): $(srcdir)/testgesture.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testgl$(EXE): $(srcdir)/testgl.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@
|
||||
|
||||
testgl2$(EXE): $(srcdir)/testgl2.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testgl2.c $(srcdir)/common.c $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@
|
||||
|
||||
testgles$(EXE): $(srcdir)/testgles.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testgles.c $(srcdir)/common.c $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@
|
||||
|
||||
testhaptic$(EXE): $(srcdir)/testhaptic.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testrumble$(EXE): $(srcdir)/testrumble.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testhread$(EXE): $(srcdir)/testhread.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testiconv$(EXE): $(srcdir)/testiconv.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testime$(EXE): $(srcdir)/testime.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @SDL_TTF_LIB@
|
||||
|
||||
testjoystick$(EXE): $(srcdir)/testjoystick.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testkeys$(EXE): $(srcdir)/testkeys.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testloadso$(EXE): $(srcdir)/testloadso.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testlock$(EXE): $(srcdir)/testlock.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testoverlay2$(EXE): $(srcdir)/testoverlay2.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testoverlay$(EXE): $(srcdir)/testoverlay.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testplatform$(EXE): $(srcdir)/testplatform.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testpower$(EXE): $(srcdir)/testpower.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testscale$(EXE): $(srcdir)/testscale.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testscale.c $(srcdir)/common.c $(CFLAGS) $(LIBS)
|
||||
|
||||
testsem$(EXE): $(srcdir)/testsem.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testshader$(EXE): $(srcdir)/testshader.c
|
||||
$(CC) -o $@ $(srcdir)/testshader.c $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@
|
||||
|
||||
testshape$(EXE): $(srcdir)/testshape.c
|
||||
$(CC) -o $@ $? -std=c99 $(CFLAGS) $(LIBS)
|
||||
|
||||
testsprite$(EXE): $(srcdir)/testsprite.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testsprite2$(EXE): $(srcdir)/testsprite2.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testsprite2.c $(srcdir)/common.c $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testspriteminimal$(EXE): $(srcdir)/testspriteminimal.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
teststreaming$(EXE): $(srcdir)/teststreaming.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||
|
||||
testtimer$(EXE): $(srcdir)/testtimer.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testver$(EXE): $(srcdir)/testver.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testvidinfo$(EXE): $(srcdir)/testvidinfo.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testwin$(EXE): $(srcdir)/testwin.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testwm$(EXE): $(srcdir)/testwm.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
testwm2$(EXE): $(srcdir)/testwm2.c $(srcdir)/common.c
|
||||
$(CC) -o $@ $(srcdir)/testwm2.c $(srcdir)/common.c $(CFLAGS) $(LIBS)
|
||||
|
||||
threadwin$(EXE): $(srcdir)/threadwin.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
torturethread$(EXE): $(srcdir)/torturethread.c
|
||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(TARGETS)
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile
|
||||
rm -f config.status config.cache config.log
|
||||
rm -rf $(srcdir)/autom4te*
|
|
@ -1,41 +0,0 @@
|
|||
|
||||
These are test programs for the SDL library:
|
||||
|
||||
checkkeys Watch the key events to check the keyboard
|
||||
graywin Display a gray gradient and center mouse on spacebar
|
||||
loopwave Audio test -- loop playing a WAV file
|
||||
testalpha Display an alpha faded icon -- paint with mouse
|
||||
testaudioinfo Lists audio device capabilities
|
||||
testbitmap Test displaying 1-bit bitmaps
|
||||
testblitspeed Tests performance of SDL's blitters and converters.
|
||||
testcdrom Sample audio CD control program
|
||||
testcursor Tests custom mouse cursor
|
||||
testdyngl Tests dynamically loading OpenGL library
|
||||
testerror Tests multi-threaded error handling
|
||||
testfile Tests RWops layer
|
||||
testgamma Tests video device gamma ramp
|
||||
testgl A very simple example of using OpenGL with SDL
|
||||
testgl2 An even simpler example using the SDL 1.3 API
|
||||
testhread Hacked up test of multi-threading
|
||||
testiconv Tests international string conversion
|
||||
testjoystick List joysticks and watch joystick events
|
||||
testkeys List the available keyboard keys
|
||||
testloadso Tests the loadable library layer
|
||||
testlock Hacked up test of multi-threading and locking
|
||||
testmultiaudio Tests using several audio devices
|
||||
testoverlay Tests the software/hardware overlay functionality.
|
||||
testoverlay2 Tests the overlay flickering/scaling during playback.
|
||||
testpalette Tests palette color cycling
|
||||
testplatform Tests types, endianness and cpu capabilities
|
||||
testsem Tests SDL's semaphore implementation
|
||||
testshape Tests shaped windows
|
||||
testsprite Example of fast sprite movement on the screen
|
||||
testsprite2 Improved version of testsprite
|
||||
testtimer Test the timer facilities
|
||||
testver Check the version and dynamic loading and endianness
|
||||
testvidinfo Show the pixel format of the display and perfom the benchmark
|
||||
testwin Display a BMP image at various depths
|
||||
testwm Test window manager -- title, icon, events
|
||||
testwm2 Improved version of testwm
|
||||
threadwin Test multi-threaded event handling
|
||||
torturethread Simple test for thread creation/destruction
|
|
@ -1,181 +0,0 @@
|
|||
# Configure paths for SDL
|
||||
# Sam Lantinga 9/21/99
|
||||
# stolen from Manish Singh
|
||||
# stolen back from Frank Belew
|
||||
# stolen from Manish Singh
|
||||
# Shamelessly stolen from Owen Taylor
|
||||
|
||||
dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
|
||||
dnl
|
||||
AC_DEFUN([AM_PATH_SDL],
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the sdl-config script
|
||||
dnl
|
||||
AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
|
||||
sdl_prefix="$withval", sdl_prefix="")
|
||||
AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
|
||||
sdl_exec_prefix="$withval", sdl_exec_prefix="")
|
||||
AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
|
||||
, enable_sdltest=yes)
|
||||
|
||||
if test x$sdl_exec_prefix != x ; then
|
||||
sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
|
||||
if test x${SDL_CONFIG+set} != xset ; then
|
||||
SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
|
||||
fi
|
||||
fi
|
||||
if test x$sdl_prefix != x ; then
|
||||
sdl_args="$sdl_args --prefix=$sdl_prefix"
|
||||
if test x${SDL_CONFIG+set} != xset ; then
|
||||
SDL_CONFIG=$sdl_prefix/bin/sdl-config
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$prefix" != xNONE; then
|
||||
PATH="$prefix/bin:$prefix/usr/bin:$PATH"
|
||||
fi
|
||||
AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
|
||||
min_sdl_version=ifelse([$1], ,0.11.0,$1)
|
||||
AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
|
||||
no_sdl=""
|
||||
if test "$SDL_CONFIG" = "no" ; then
|
||||
no_sdl=yes
|
||||
else
|
||||
SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
|
||||
SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
|
||||
|
||||
sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test "x$enable_sdltest" = "xyes" ; then
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
|
||||
LIBS="$LIBS $SDL_LIBS"
|
||||
dnl
|
||||
dnl Now check if the installed SDL is sufficiently new. (Also sanity
|
||||
dnl checks the results of sdl-config to some extent
|
||||
dnl
|
||||
rm -f conf.sdltest
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "SDL.h"
|
||||
|
||||
char*
|
||||
my_strdup (char *str)
|
||||
{
|
||||
char *new_str;
|
||||
|
||||
if (str)
|
||||
{
|
||||
new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
|
||||
strcpy (new_str, str);
|
||||
}
|
||||
else
|
||||
new_str = NULL;
|
||||
|
||||
return new_str;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
int major, minor, micro;
|
||||
char *tmp_version;
|
||||
|
||||
/* This hangs on some systems (?)
|
||||
system ("touch conf.sdltest");
|
||||
*/
|
||||
{ FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
|
||||
|
||||
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||
tmp_version = my_strdup("$min_sdl_version");
|
||||
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||
printf("%s, bad version string\n", "$min_sdl_version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (($sdl_major_version > major) ||
|
||||
(($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
|
||||
(($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
|
||||
printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
|
||||
printf("*** best to upgrade to the required version.\n");
|
||||
printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
|
||||
printf("*** to point to the correct copy of sdl-config, and remove the file\n");
|
||||
printf("*** config.cache before re-running configure\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
if test "x$no_sdl" = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$SDL_CONFIG" = "no" ; then
|
||||
echo "*** The sdl-config script installed by SDL could not be found"
|
||||
echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the SDL_CONFIG environment variable to the"
|
||||
echo "*** full path to sdl-config."
|
||||
else
|
||||
if test -f conf.sdltest ; then
|
||||
:
|
||||
else
|
||||
echo "*** Could not run SDL test program, checking why..."
|
||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
|
||||
LIBS="$LIBS $SDL_LIBS"
|
||||
AC_TRY_LINK([
|
||||
#include <stdio.h>
|
||||
#include "SDL.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{ return 0; }
|
||||
#undef main
|
||||
#define main K_and_R_C_main
|
||||
], [ return 0; ],
|
||||
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||
echo "*** that the run-time linker is not finding SDL or finding the wrong"
|
||||
echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
|
||||
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||
echo "*** is required on your system"
|
||||
echo "***"
|
||||
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
|
||||
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||
echo "*** exact error that occured. This usually means SDL was incorrectly installed"
|
||||
echo "*** or that you have moved SDL since it was installed. In the latter case, you"
|
||||
echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
SDL_CFLAGS=""
|
||||
SDL_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(SDL_CFLAGS)
|
||||
AC_SUBST(SDL_LIBS)
|
||||
rm -f conf.sdltest
|
||||
])
|
|
@ -1,181 +0,0 @@
|
|||
# Configure paths for SDL
|
||||
# Sam Lantinga 9/21/99
|
||||
# stolen from Manish Singh
|
||||
# stolen back from Frank Belew
|
||||
# stolen from Manish Singh
|
||||
# Shamelessly stolen from Owen Taylor
|
||||
|
||||
dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
|
||||
dnl
|
||||
AC_DEFUN([AM_PATH_SDL],
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the sdl-config script
|
||||
dnl
|
||||
AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
|
||||
sdl_prefix="$withval", sdl_prefix="")
|
||||
AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
|
||||
sdl_exec_prefix="$withval", sdl_exec_prefix="")
|
||||
AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
|
||||
, enable_sdltest=yes)
|
||||
|
||||
if test x$sdl_exec_prefix != x ; then
|
||||
sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
|
||||
if test x${SDL_CONFIG+set} != xset ; then
|
||||
SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
|
||||
fi
|
||||
fi
|
||||
if test x$sdl_prefix != x ; then
|
||||
sdl_args="$sdl_args --prefix=$sdl_prefix"
|
||||
if test x${SDL_CONFIG+set} != xset ; then
|
||||
SDL_CONFIG=$sdl_prefix/bin/sdl-config
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$prefix" != xNONE; then
|
||||
PATH="$prefix/bin:$prefix/usr/bin:$PATH"
|
||||
fi
|
||||
AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
|
||||
min_sdl_version=ifelse([$1], ,0.11.0,$1)
|
||||
AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
|
||||
no_sdl=""
|
||||
if test "$SDL_CONFIG" = "no" ; then
|
||||
no_sdl=yes
|
||||
else
|
||||
SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
|
||||
SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
|
||||
|
||||
sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test "x$enable_sdltest" = "xyes" ; then
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
|
||||
LIBS="$LIBS $SDL_LIBS"
|
||||
dnl
|
||||
dnl Now check if the installed SDL is sufficiently new. (Also sanity
|
||||
dnl checks the results of sdl-config to some extent
|
||||
dnl
|
||||
rm -f conf.sdltest
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "SDL.h"
|
||||
|
||||
char*
|
||||
my_strdup (char *str)
|
||||
{
|
||||
char *new_str;
|
||||
|
||||
if (str)
|
||||
{
|
||||
new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
|
||||
strcpy (new_str, str);
|
||||
}
|
||||
else
|
||||
new_str = NULL;
|
||||
|
||||
return new_str;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
int major, minor, micro;
|
||||
char *tmp_version;
|
||||
|
||||
/* This hangs on some systems (?)
|
||||
system ("touch conf.sdltest");
|
||||
*/
|
||||
{ FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
|
||||
|
||||
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||
tmp_version = my_strdup("$min_sdl_version");
|
||||
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||
printf("%s, bad version string\n", "$min_sdl_version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (($sdl_major_version > major) ||
|
||||
(($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
|
||||
(($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
|
||||
printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
|
||||
printf("*** best to upgrade to the required version.\n");
|
||||
printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
|
||||
printf("*** to point to the correct copy of sdl-config, and remove the file\n");
|
||||
printf("*** config.cache before re-running configure\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
if test "x$no_sdl" = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$SDL_CONFIG" = "no" ; then
|
||||
echo "*** The sdl-config script installed by SDL could not be found"
|
||||
echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the SDL_CONFIG environment variable to the"
|
||||
echo "*** full path to sdl-config."
|
||||
else
|
||||
if test -f conf.sdltest ; then
|
||||
:
|
||||
else
|
||||
echo "*** Could not run SDL test program, checking why..."
|
||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
|
||||
LIBS="$LIBS $SDL_LIBS"
|
||||
AC_TRY_LINK([
|
||||
#include <stdio.h>
|
||||
#include "SDL.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{ return 0; }
|
||||
#undef main
|
||||
#define main K_and_R_C_main
|
||||
], [ return 0; ],
|
||||
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||
echo "*** that the run-time linker is not finding SDL or finding the wrong"
|
||||
echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
|
||||
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||
echo "*** is required on your system"
|
||||
echo "***"
|
||||
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
|
||||
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||
echo "*** exact error that occured. This usually means SDL was incorrectly installed"
|
||||
echo "*** or that you have moved SDL since it was installed. In the latter case, you"
|
||||
echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
SDL_CFLAGS=""
|
||||
SDL_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(SDL_CFLAGS)
|
||||
AC_SUBST(SDL_LIBS)
|
||||
rm -f conf.sdltest
|
||||
])
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Regenerate configuration files
|
||||
cp acinclude.m4 aclocal.m4
|
||||
found=false
|
||||
for autoconf in autoconf autoconf259 autoconf-2.59
|
||||
do if which $autoconf >/dev/null 2>&1; then $autoconf && found=true; break; fi
|
||||
done
|
||||
if test x$found = xfalse; then
|
||||
echo "Couldn't find autoconf, aborting"
|
||||
exit 1
|
||||
fi
|
|
@ -1,60 +0,0 @@
|
|||
|
||||
|
||||
CFLAGS := -W -Wall -Wextra -g `sdl-config --cflags` -DSDL_NO_COMPAT
|
||||
LDFLAGS := `sdl-config --libs`
|
||||
|
||||
# If it doesn't pick up defaults
|
||||
#CFLAGS := -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/local/include/SDL
|
||||
#LDFLAGS := -lm -ldl -lesd -lpthread
|
||||
|
||||
SRC := testsdl.c \
|
||||
platform/platform.c \
|
||||
rect/rect.c \
|
||||
surface/surface.c \
|
||||
render/render.c \
|
||||
audio/audio.c
|
||||
COMMON_SRC := SDL_at.c common/common.c
|
||||
COMMON_INCLUDE := SDL_at.h
|
||||
|
||||
RWOPS_SRC := rwops/rwops.c rwops/TestSupportRWops_Generic.c
|
||||
|
||||
TESTS_ALL := testsdl \
|
||||
platform/platform \
|
||||
rwops/rwops \
|
||||
rect/rect \
|
||||
surface/surface \
|
||||
render/render \
|
||||
audio/audio
|
||||
|
||||
|
||||
.PHONY: all clean test
|
||||
|
||||
|
||||
all: $(TESTS_ALL)
|
||||
|
||||
test: all
|
||||
@./testsdl
|
||||
|
||||
testsdl: $(SRC) $(RWOPS_SRC) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) $(RWOPS_SRC) $(COMMON_SRC)
|
||||
|
||||
platform/platform: platform/platform.c $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ platform/platform.c $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
rwops/rwops: $(RWOPS_SRC) $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(RWOPS_SRC) $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
rect/rect: rect/rect.c $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ rect/rect.c $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
surface/surface: surface/surface.c $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ surface/surface.c $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
render/render: render/render.c $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ render/render.c $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
audio/audio: audio/audio.c $(COMMON_INCLUDE) $(COMMON_SRC)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ audio/audio.c $(COMMON_SRC) -DTEST_STANDALONE
|
||||
|
||||
clean:
|
||||
$(RM) $(TESTS_ALL)
|
|
@ -1,59 +0,0 @@
|
|||
|
||||
|
||||
SDL Automated Testing Framework User Documentation
|
||||
by Edgar Simo Serra
|
||||
|
||||
|
||||
|
||||
Abstract
|
||||
|
||||
The SDL Automated Testing Framework, hereby after called SDL_AT, is a meant
|
||||
to test the SDL code for regressions and other possible failures. It can also
|
||||
be used to display what your SDL set up supports.
|
||||
|
||||
|
||||
|
||||
Basics
|
||||
|
||||
The main way to use the framework is to compile it and run it, that can be
|
||||
done with the following command:
|
||||
|
||||
$> make test
|
||||
|
||||
It should then display something like:
|
||||
|
||||
Platform : All tests successful (2)
|
||||
SDL_RWops : All tests successful (5)
|
||||
SDL_Surface : All tests successful (6)
|
||||
Rendering with x11 driver : All tests successful (4)
|
||||
|
||||
Indicating that all tests were successful. If however a test fails output it
|
||||
will report the failure to stderr indicating where and why it happened. This
|
||||
output can then be sent to the developers so they can attempt to fix the
|
||||
problem.
|
||||
|
||||
|
||||
|
||||
Advanced
|
||||
|
||||
By passing the "-h" or "--help" parameter to testsdl you can get an overview
|
||||
of all the possible options you can set to furthur tweak the testing. A sample
|
||||
of the options would be the following:
|
||||
|
||||
Usage: ./testsdl [OPTIONS]
|
||||
Options are:
|
||||
-m, --manual enables tests that require user interaction
|
||||
--noplatform do not run the platform tests
|
||||
--norwops do not run the rwops tests
|
||||
--nosurface do not run the surface tests
|
||||
--norender do not run the render tests
|
||||
-v, --verbose increases verbosity level by 1 for each -v
|
||||
-q, --quiet only displays errors
|
||||
-h, --help display this message and exit
|
||||
|
||||
|
||||
|
||||
Developers
|
||||
|
||||
See SDL_at.h for developer information.
|
||||
|
|
@ -1,331 +0,0 @@
|
|||
/*
|
||||
* Common code for automated test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL_at.h"
|
||||
#include "SDL_stdinc.h"
|
||||
#include "SDL_error.h"
|
||||
|
||||
#include <stdio.h> /* printf/fprintf */
|
||||
#include <stdarg.h> /* va_list */
|
||||
|
||||
|
||||
/*
|
||||
* Internal usage SDL_AT variables.
|
||||
*/
|
||||
static char *at_suite_msg = NULL; /**< Testsuite message. */
|
||||
static char *at_test_msg = NULL; /**< Testcase message. */
|
||||
static int at_success = 0; /**< Number of successful testcases. */
|
||||
static int at_failure = 0; /**< Number of failed testcases. */
|
||||
|
||||
|
||||
/*
|
||||
* Global properties.
|
||||
*/
|
||||
static int at_verbose = 0; /**< Verbosity. */
|
||||
static int at_quiet = 0; /**< Quietness. */
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes.
|
||||
*/
|
||||
static void SDL_ATcleanup (void);
|
||||
static void SDL_ATendWith( int success );
|
||||
static void SDL_ATassertFailed( const char *msg );
|
||||
|
||||
|
||||
/**
|
||||
* @brief Cleans up the automated testsuite state.
|
||||
*/
|
||||
static void SDL_ATcleanup (void)
|
||||
{
|
||||
if (at_suite_msg != NULL)
|
||||
SDL_free(at_suite_msg);
|
||||
at_suite_msg = NULL;
|
||||
if (at_test_msg != NULL)
|
||||
SDL_free(at_test_msg);
|
||||
at_test_msg = NULL;
|
||||
at_success = 0;
|
||||
at_failure = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Begin testsuite.
|
||||
*/
|
||||
void SDL_ATinit( const char *suite )
|
||||
{
|
||||
/* Do not open twice. */
|
||||
if (at_suite_msg) {
|
||||
SDL_ATprintErr( "AT suite '%s' not closed before opening suite '%s'\n",
|
||||
at_suite_msg, suite );
|
||||
}
|
||||
/* Must have a name. */
|
||||
if (suite == NULL) {
|
||||
SDL_ATprintErr( "AT testsuite does not have a name.\n");
|
||||
}
|
||||
SDL_ATcleanup();
|
||||
at_suite_msg = SDL_strdup(suite);
|
||||
|
||||
/* Verbose message. */
|
||||
SDL_ATprintVerbose( 2, "--+---> Started Test Suite '%s'\n", at_suite_msg );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Finish testsuite.
|
||||
*/
|
||||
int SDL_ATfinish (void)
|
||||
{
|
||||
int failed;
|
||||
|
||||
/* Make sure initialized. */
|
||||
if (at_suite_msg == NULL) {
|
||||
SDL_ATprintErr("Ended testcase without initializing.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Finished without closing testcase. */
|
||||
if (at_test_msg) {
|
||||
SDL_ATprintErr( "AT suite '%s' finished without closing testcase '%s'\n",
|
||||
at_suite_msg, at_test_msg );
|
||||
}
|
||||
|
||||
/* Verbose message. */
|
||||
SDL_ATprintVerbose( 2, "<-+---- Finished Test Suite '%s'\n", at_suite_msg );
|
||||
|
||||
/* Display message if verbose on failed. */
|
||||
failed = at_failure;
|
||||
if (at_failure > 0) {
|
||||
SDL_ATprintErr( "%s : Failed %d out of %d testcases!\n",
|
||||
at_suite_msg, at_failure, at_failure+at_success );
|
||||
}
|
||||
else {
|
||||
SDL_ATprint( "%s : All tests successful (%d)\n",
|
||||
at_suite_msg, at_success );
|
||||
}
|
||||
|
||||
/* Clean up. */
|
||||
SDL_ATcleanup();
|
||||
|
||||
/* Return failed. */
|
||||
return failed;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Sets a property.
|
||||
*/
|
||||
void SDL_ATseti( int property, int value )
|
||||
{
|
||||
switch (property) {
|
||||
case SDL_AT_VERBOSE:
|
||||
at_verbose = value;
|
||||
break;
|
||||
|
||||
case SDL_AT_QUIET:
|
||||
at_quiet = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Gets a property.
|
||||
*/
|
||||
void SDL_ATgeti( int property, int *value )
|
||||
{
|
||||
switch (property) {
|
||||
case SDL_AT_VERBOSE:
|
||||
*value = at_verbose;
|
||||
break;
|
||||
|
||||
case SDL_AT_QUIET:
|
||||
*value = at_quiet;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Begin testcase.
|
||||
*/
|
||||
void SDL_ATbegin( const char *testcase )
|
||||
{
|
||||
/* Do not open twice. */
|
||||
if (at_test_msg) {
|
||||
SDL_ATprintErr( "AT testcase '%s' not closed before opening testcase '%s'\n",
|
||||
at_test_msg, testcase );
|
||||
}
|
||||
/* Must have a name. */
|
||||
if (testcase == NULL) {
|
||||
SDL_ATprintErr( "AT testcase does not have a name.\n");
|
||||
}
|
||||
at_test_msg = SDL_strdup(testcase);
|
||||
|
||||
/* Verbose message. */
|
||||
SDL_ATprintVerbose( 2, " +---> StartedTest Case '%s'\n", testcase );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Ends the testcase with a succes or failure.
|
||||
*/
|
||||
static void SDL_ATendWith( int success )
|
||||
{
|
||||
/* Make sure initialized. */
|
||||
if (at_test_msg == NULL) {
|
||||
SDL_ATprintErr("Ended testcase without initializing.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Mark as success or failure. */
|
||||
if (success)
|
||||
at_success++;
|
||||
else
|
||||
at_failure++;
|
||||
|
||||
/* Verbose message. */
|
||||
SDL_ATprintVerbose( 2, " +---- Finished Test Case '%s'\n", at_test_msg );
|
||||
|
||||
/* Clean up. */
|
||||
if (at_test_msg != NULL)
|
||||
SDL_free(at_test_msg);
|
||||
at_test_msg = NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Display failed assert message.
|
||||
*/
|
||||
static void SDL_ATassertFailed( const char *msg )
|
||||
{
|
||||
/* Print. */
|
||||
SDL_ATprintErr( "Assert Failed!\n" );
|
||||
SDL_ATprintErr( " %s\n", msg );
|
||||
SDL_ATprintErr( " Test Case '%s'\n", at_test_msg );
|
||||
SDL_ATprintErr( " Test Suite '%s'\n", at_suite_msg );
|
||||
SDL_ATprintErr( " Last SDL error '%s'\n", SDL_GetError() );
|
||||
/* End. */
|
||||
SDL_ATendWith(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Testcase test.
|
||||
*/
|
||||
int SDL_ATassert( const char *msg, int condition )
|
||||
{
|
||||
/* Condition failed. */
|
||||
if (!condition) {
|
||||
/* Failed message. */
|
||||
SDL_ATassertFailed(msg);
|
||||
}
|
||||
return !condition;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Testcase test.
|
||||
*/
|
||||
int SDL_ATvassert( int condition, const char *msg, ... )
|
||||
{
|
||||
va_list args;
|
||||
char buf[256];
|
||||
|
||||
/* Condition failed. */
|
||||
if (!condition) {
|
||||
/* Get message. */
|
||||
va_start( args, msg );
|
||||
SDL_vsnprintf( buf, sizeof(buf), msg, args );
|
||||
va_end( args );
|
||||
/* Failed message. */
|
||||
SDL_ATassertFailed( buf );
|
||||
}
|
||||
return !condition;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief End testcase.
|
||||
*/
|
||||
void SDL_ATend (void)
|
||||
{
|
||||
SDL_ATendWith(1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Displays an error.
|
||||
*/
|
||||
int SDL_ATprintErr( const char *msg, ... )
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
/* Make sure there is something to print. */
|
||||
if (msg == NULL)
|
||||
return 0;
|
||||
else {
|
||||
va_start(ap, msg);
|
||||
ret = vfprintf( stderr, msg, ap );
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Displays a message.
|
||||
*/
|
||||
int SDL_ATprint( const char *msg, ... )
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
/* Only print if not quiet. */
|
||||
if (at_quiet)
|
||||
return 0;
|
||||
|
||||
/* Make sure there is something to print. */
|
||||
if (msg == NULL)
|
||||
return 0;
|
||||
else {
|
||||
va_start(ap, msg);
|
||||
ret = vfprintf( stdout, msg, ap );
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Displays a verbose message.
|
||||
*/
|
||||
int SDL_ATprintVerbose( int level, const char *msg, ... )
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
/* Only print if not quiet. */
|
||||
if (at_quiet || (at_verbose < level))
|
||||
return 0;
|
||||
|
||||
/* Make sure there is something to print. */
|
||||
if (msg == NULL)
|
||||
return 0;
|
||||
else {
|
||||
va_start(ap, msg);
|
||||
ret = vfprintf( stdout, msg, ap );
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -1,158 +0,0 @@
|
|||
/*
|
||||
* Common code for automated test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file SDL_at.h
|
||||
*
|
||||
* @brief Handles automatic testing functionality.
|
||||
*
|
||||
* The basic approach with SDL_AT is to divide the tests into what are called
|
||||
* test suites and test cases. Each test suite should have multiple test
|
||||
* cases, each test case can have multiple asserts.
|
||||
*
|
||||
* To actually test for conditions within the testcase you check asserts, if
|
||||
* the asserts fail the failures will be logged in the testsuite and
|
||||
* displayed.
|
||||
*
|
||||
* Syntax is similar to OpenGL. An example would be:
|
||||
*
|
||||
* @code
|
||||
* int f; // Number failed
|
||||
* SDL_ATinit( "My testsuite" );
|
||||
*
|
||||
* SDL_ATbegin( "My first testcase" );
|
||||
* if (!SDL_ATassert( (1+1)==2, "Trying '1+1=2'."))
|
||||
* return; // Implicitly calls SDL_ATend if assert fails
|
||||
* SDL_ATend(); // Finish testcase
|
||||
*
|
||||
* SDL_ATbegin( "My second testcase" );
|
||||
* if (!SDL_ATassert( (4/2)==2, "Trying '4/2=2'."))
|
||||
* return; // Implicitly calls SDL_ATend if assert fails
|
||||
* SDL_ATend(); // Finish testcase
|
||||
*
|
||||
* f = SDL_ATfinish();
|
||||
* @endcode
|
||||
*
|
||||
* @author Edgar Simo "bobbens"
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _SDL_AT_H
|
||||
# define _SDL_AT_H
|
||||
|
||||
|
||||
|
||||
enum {
|
||||
SDL_AT_VERBOSE, /**< Sets the verbose level. */
|
||||
SDL_AT_QUIET /**< Sets quietness. */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Suite level actions.
|
||||
*/
|
||||
/**
|
||||
* @brief Starts the testsuite.
|
||||
*
|
||||
* @param suite Name of the suite to start testing.
|
||||
*/
|
||||
void SDL_ATinit( const char *suite );
|
||||
/**
|
||||
* @brief Finishes the testsuite printing out global results if verbose.
|
||||
*
|
||||
* @return 0 if no errors occurred, otherwise number of failures.
|
||||
*/
|
||||
int SDL_ATfinish (void);
|
||||
/**
|
||||
* @brief Sets a global property value.
|
||||
*
|
||||
* @param property Property to set.
|
||||
* @param value Value to set property to.
|
||||
*/
|
||||
void SDL_ATseti( int property, int value );
|
||||
/**
|
||||
* @brief Gets a global property value.
|
||||
*
|
||||
* @param property Property to get.
|
||||
* @param[out] value Value of the property.
|
||||
*/
|
||||
void SDL_ATgeti( int property, int *value );
|
||||
|
||||
|
||||
/*
|
||||
* Testcase level actions.
|
||||
*/
|
||||
/**
|
||||
* @brief Begins a testcase.
|
||||
*
|
||||
* @param testcase Name of the testcase to begin.
|
||||
*/
|
||||
void SDL_ATbegin( const char *testcase );
|
||||
/**
|
||||
* @brief Checks a condition in the testcase.
|
||||
*
|
||||
* Will automatically call SDL_ATend if the condition isn't met.
|
||||
*
|
||||
* @param condition Condition to make sure is true.
|
||||
* @param msg Message to display for failure.
|
||||
* @return Returns 1 if the condition isn't met.
|
||||
*/
|
||||
int SDL_ATassert( const char *msg, int condition );
|
||||
/**
|
||||
* @brief Checks a condition in the testcase.
|
||||
*
|
||||
* Will automatically call SDL_ATend if the condition isn't met.
|
||||
*
|
||||
* @param condition Condition to make sure is true.
|
||||
* @param msg Message to display for failure with printf style formatting.
|
||||
* @return Returns 1 if the condition isn't met.
|
||||
*/
|
||||
int SDL_ATvassert( int condition, const char *msg, ... );
|
||||
/**
|
||||
* @brief Ends a testcase.
|
||||
*/
|
||||
void SDL_ATend (void);
|
||||
|
||||
|
||||
/*
|
||||
* Misc functions.
|
||||
*/
|
||||
/**
|
||||
* @brief Prints an error.
|
||||
*
|
||||
* @param msg printf formatted string to display.
|
||||
* @return Number of character printed.
|
||||
*/
|
||||
int SDL_ATprintErr( const char *msg, ... );
|
||||
/**
|
||||
* @brief Prints some text.
|
||||
*
|
||||
* @param msg printf formatted string to display.
|
||||
* @return Number of character printed.
|
||||
*/
|
||||
int SDL_ATprint( const char *msg, ... );
|
||||
/**
|
||||
* @brief Prints some verbose text.
|
||||
*
|
||||
* Verbosity levels are as follows:
|
||||
*
|
||||
* - 0 standard stdout, enabled by default
|
||||
* - 1 additional information
|
||||
* - 2 detailed information (spammy)
|
||||
*
|
||||
* @param level Level of verbosity to print at.
|
||||
* @param msg printf formatted string to display.
|
||||
* @return Number of character printed.
|
||||
*/
|
||||
int SDL_ATprintVerbose( int level, const char *msg, ... );
|
||||
|
||||
|
||||
#endif /* _SDL_AT_H */
|
||||
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
/**
|
||||
* Automated SDL_RWops test.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL.h"
|
||||
#include "../SDL_at.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Prints available devices.
|
||||
*/
|
||||
static int audio_printDevices( int iscapture )
|
||||
{
|
||||
int i, n;
|
||||
|
||||
/* Get number of devices. */
|
||||
n = SDL_GetNumAudioDevices(iscapture);
|
||||
SDL_ATprintVerbose( 1, "%d %s Audio Devices\n",
|
||||
n, iscapture ? "Capture" : "Output" );
|
||||
|
||||
/* List devices. */
|
||||
for (i=0; i<n; i++) {
|
||||
SDL_ATprintVerbose( 1, " %d) %s\n", i+1, SDL_GetAudioDeviceName( i, iscapture ) );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Makes sure parameters work properly.
|
||||
*/
|
||||
static void audio_testOpen (void)
|
||||
{
|
||||
int i, n;
|
||||
int ret;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "Audio Open" );
|
||||
|
||||
/* List drivers. */
|
||||
n = SDL_GetNumAudioDrivers();
|
||||
SDL_ATprintVerbose( 1, "%d Audio Drivers\n", n );
|
||||
for (i=0; i<n; i++) {
|
||||
SDL_ATprintVerbose( 1, " %s\n", SDL_GetAudioDriver(i) );
|
||||
}
|
||||
|
||||
/* Start SDL. */
|
||||
ret = SDL_Init( SDL_INIT_AUDIO );
|
||||
if (SDL_ATvassert( ret==0, "SDL_Init( SDL_INIT_AUDIO ): %s", SDL_GetError()))
|
||||
return;
|
||||
|
||||
/* Print devices. */
|
||||
SDL_ATprintVerbose( 1, "Using Audio Driver '%s'\n", SDL_GetCurrentAudioDriver() );
|
||||
audio_printDevices(0);
|
||||
audio_printDevices(1);
|
||||
|
||||
/* Quit SDL. */
|
||||
SDL_Quit();
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Entry point.
|
||||
*/
|
||||
#ifdef TEST_STANDALONE
|
||||
int main( int argc, const char *argv[] )
|
||||
{
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#else /* TEST_STANDALONE */
|
||||
int test_audio (void)
|
||||
{
|
||||
#endif /* TEST_STANDALONE */
|
||||
|
||||
SDL_ATinit( "SDL_Audio" );
|
||||
|
||||
audio_testOpen();
|
||||
|
||||
return SDL_ATfinish();
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_AUDIO
|
||||
# define _TEST_AUDIO
|
||||
|
||||
|
||||
int test_audio (void);
|
||||
|
||||
|
||||
#endif /* _TEST_AUDIO */
|
||||
|
|
@ -1,110 +0,0 @@
|
|||
/**
|
||||
* Automated SDL_Surface test.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL.h"
|
||||
#include "../SDL_at.h"
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Compares a surface and a surface image for equality.
|
||||
*/
|
||||
int surface_compare( SDL_Surface *sur, const SurfaceImage_t *img, int allowable_error )
|
||||
{
|
||||
int ret;
|
||||
int i,j;
|
||||
int bpp;
|
||||
Uint8 *p, *pd;
|
||||
|
||||
/* Make sure size is the same. */
|
||||
if ((sur->w != img->width) || (sur->h != img->height))
|
||||
return -1;
|
||||
|
||||
SDL_LockSurface( sur );
|
||||
|
||||
ret = 0;
|
||||
bpp = sur->format->BytesPerPixel;
|
||||
|
||||
/* Compare image - should be same format. */
|
||||
for (j=0; j<sur->h; j++) {
|
||||
for (i=0; i<sur->w; i++) {
|
||||
p = (Uint8 *)sur->pixels + j * sur->pitch + i * bpp;
|
||||
pd = (Uint8 *)img->pixel_data + (j*img->width + i) * img->bytes_per_pixel;
|
||||
switch (bpp) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
ret += 1;
|
||||
/*printf("%d BPP not supported yet.\n",bpp);*/
|
||||
break;
|
||||
|
||||
case 4:
|
||||
{
|
||||
int dist = 0;
|
||||
Uint8 R, G, B, A;
|
||||
|
||||
SDL_GetRGBA(*(Uint32*)p, sur->format, &R, &G, &B, &A);
|
||||
|
||||
if (img->bytes_per_pixel == 3) {
|
||||
dist += (R-pd[0])*(R-pd[0]);
|
||||
dist += (G-pd[1])*(G-pd[1]);
|
||||
dist += (B-pd[2])*(B-pd[2]);
|
||||
} else {
|
||||
dist += (R-pd[0])*(R-pd[0]);
|
||||
dist += (G-pd[1])*(G-pd[1]);
|
||||
dist += (B-pd[2])*(B-pd[2]);
|
||||
dist += (A-pd[3])*(A-pd[3]);
|
||||
}
|
||||
/* Allow some difference in blending accuracy */
|
||||
if (dist > allowable_error) {
|
||||
/*printf("pixel %d,%d varies by %d\n", i, j, dist);*/
|
||||
++ret;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_UnlockSurface( sur );
|
||||
|
||||
if (ret) {
|
||||
SDL_SaveBMP(sur, "fail.bmp");
|
||||
|
||||
SDL_LockSurface( sur );
|
||||
|
||||
bpp = sur->format->BytesPerPixel;
|
||||
|
||||
if (bpp == 4) {
|
||||
for (j=0; j<sur->h; j++) {
|
||||
for (i=0; i<sur->w; i++) {
|
||||
Uint8 R, G, B, A;
|
||||
p = (Uint8 *)sur->pixels + j * sur->pitch + i * bpp;
|
||||
pd = (Uint8 *)img->pixel_data + (j*img->width + i) * img->bytes_per_pixel;
|
||||
|
||||
R = pd[0];
|
||||
G = pd[1];
|
||||
B = pd[2];
|
||||
if (img->bytes_per_pixel == 4) {
|
||||
A = pd[3];
|
||||
} else {
|
||||
A = 0;
|
||||
}
|
||||
*(Uint32*)p = (A << 24) | (R << 16) | (G << 8) | B;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_UnlockSurface( sur );
|
||||
|
||||
SDL_SaveBMP(sur, "good.bmp");
|
||||
}
|
||||
return ret;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
/**
|
||||
* Automated SDL test common framework.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef COMMON_H
|
||||
# define COMMON_H
|
||||
|
||||
|
||||
# define FORMAT SDL_PIXELFORMAT_ARGB8888
|
||||
# define AMASK 0xff000000 /**< Alpha bit mask. */
|
||||
# define RMASK 0x00ff0000 /**< Red bit mask. */
|
||||
# define GMASK 0x0000ff00 /**< Green bit mask. */
|
||||
# define BMASK 0x000000ff /**< Blue bit mask. */
|
||||
|
||||
|
||||
typedef struct SurfaceImage_s {
|
||||
int width;
|
||||
int height;
|
||||
unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */
|
||||
const unsigned char pixel_data[];
|
||||
} SurfaceImage_t;
|
||||
|
||||
#define ALLOWABLE_ERROR_OPAQUE 0
|
||||
#define ALLOWABLE_ERROR_BLENDED 64
|
||||
|
||||
/**
|
||||
* @brief Compares a surface and a surface image for equality.
|
||||
*
|
||||
* @param sur Surface to compare.
|
||||
* @param img Image to compare against.
|
||||
* @return 0 if they are the same, -1 on error and positive if different.
|
||||
*/
|
||||
int surface_compare( SDL_Surface *sur, const SurfaceImage_t *img, int allowable_error );
|
||||
|
||||
|
||||
#endif /* COMMON_H */
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
|
||||
|
||||
#ifndef IMAGES_H
|
||||
# define IMAGES_H
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
/*
|
||||
* Pull in images for testcases.
|
||||
*/
|
||||
#include "img_primitives.c"
|
||||
#include "img_primitivesblend.c"
|
||||
#include "img_face.c"
|
||||
#include "img_blit.c"
|
||||
#include "img_blitblend.c"
|
||||
|
||||
|
||||
#endif /* IMAGES_H */
|
||||
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
/* GIMP RGBA C-Source image dump (face.c) */
|
||||
|
||||
static const SurfaceImage_t img_face = {
|
||||
32, 32, 4,
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0"
|
||||
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
|
||||
"\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377"
|
||||
"\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\0\0\0\377\0\0\0\377\377\377\377\0\0\0\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0"
|
||||
"\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0"
|
||||
"\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0"
|
||||
"\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0"
|
||||
"\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377"
|
||||
"\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0"
|
||||
"\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
|
||||
"\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
|
||||
"\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377"
|
||||
"\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
|
||||
"\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0"
|
||||
"\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
|
||||
"\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
|
||||
"\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
|
||||
"\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
|
||||
"\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
|
||||
"\377\377\0\377\377\377\0",
|
||||
};
|
||||
|
|
@ -1,463 +0,0 @@
|
|||
/* GIMP RGB C-Source image dump (primitives.c) */
|
||||
|
||||
static const SurfaceImage_t img_primitives = {
|
||||
80, 60, 3,
|
||||
"\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15"
|
||||
"I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310"
|
||||
"\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0"
|
||||
"\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0"
|
||||
"\0\5ii\0\0\0\5ii\0\0\0\3\1\1\0\0\0\5\2\1\0\0\0\7\3\2\0\0\0\11\4\3\0\0\0\13"
|
||||
"\5\3\0\0\0\15\6\4\0\0\0\17\7\5\0\0\0\21\10\5\0\0\0\23\11\6\0\0\0\25\12\7"
|
||||
"\0\0\0\27\13\7\0\0\0\31\14\10\0\0\0\33\15\11\0\0\0\35\16\11\0\0\0\37\17\12"
|
||||
"\0\0\0!\20\13\0\0\0#\21\13\0\0\0%\22\14\0\0\0'\23\15\15I\310)\24\15\15I\310"
|
||||
"+\25\16\15I\310-\26\17\15I\310/\27\17\15I\3101\30\20\15I\3103\31\21\15I\310"
|
||||
"5\32\21\15I\3107\33\22\15I\3109\34\23\15I\310;\35\23\15I\310=\36\24\15I\310"
|
||||
"?\37\25\15I\310A\40\25\15I\310C!\26\15I\310E\"\27\15I\310G#\27\15I\310I$"
|
||||
"\30\15I\310K%\31\15I\310M&\31\5iiO'\32\0\0\0\0\0\0\5ii\0\0\0\10\4\2\0\0\0"
|
||||
"\14\6\4\0\0\0\20\10\5\0\0\0\24\12\6\0\0\0\30\14\10\0\0\0\34\16\11\0\0\0\40"
|
||||
"\20\12\0\0\0$\22\14\0\0\0(\24\15\0\0\0,\26\16\0\0\0""0\30\20\0\0\0""4\32"
|
||||
"\21\0\0\0""8\34\22\0\0\0<\36\24\0\0\0@\40\25\0\0\0D\"\26\0\0\0H$\30\0\0\0"
|
||||
"L&\31\0\0\0P(\32\15I\310T*\34\15I\310X,\35\15I\310\\.\36\15I\310`0\40\15"
|
||||
"I\310d2!\15I\310h4\"\15I\310l6$\15I\310p8%\15I\310t:&\15I\310x<(\15I\310"
|
||||
"|>)\15I\310\200@*\15I\310\204B,\15I\310\210D-\15I\310\214F.\15I\310\220H"
|
||||
"0\15I\310\224J1\15I\310\230L2\5ii\234N4\15I\310\0\0\0\0\0\0\0\0\0\5ii\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii"
|
||||
"\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d"
|
||||
"\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\5ii\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\5ii\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d"
|
||||
"\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d"
|
||||
"\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d"
|
||||
"\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5"
|
||||
"ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d"
|
||||
"\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d"
|
||||
"\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0"
|
||||
"\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0"
|
||||
"\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0"
|
||||
"\0\377\0\0\377\0\0\377\0\0\377\0\5ii\0\377\0\0\377\0\0\377\0\0\377\0\0\377"
|
||||
"\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0""77\5\0\377\0\0\377\0\0\377\0"
|
||||
"\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\5ii\0\377\0\0\377\0\0\377"
|
||||
"\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377"
|
||||
"\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377"
|
||||
"\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5"
|
||||
"ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d"
|
||||
"\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5i"
|
||||
"i\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310"
|
||||
"\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\5ii\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310"
|
||||
"\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\5ii\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\5ii\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15"
|
||||
"I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d7"
|
||||
"7\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0"
|
||||
"d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310"
|
||||
"\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310"
|
||||
"\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5"
|
||||
"ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310"
|
||||
"\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\0\0\0\0"
|
||||
"\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\5ii\15I\310\15I\310\15I\310\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii"
|
||||
"\15I\310\15I\310\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\5ii\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||
"\0\0\0\0\0\0\0""77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I"
|
||||
"\310\15I\310\15I\310\15I\310\15I\310\5ii",
|
||||
};
|
||||
|
|
@ -1,645 +0,0 @@
|
|||
/* GIMP RGB C-Source image dump (alpha.c) */
|
||||
|
||||
static const SurfaceImage_t img_blend = {
|
||||
80, 60, 3,
|
||||
"\260e\15\222\356/\37\313\15\36\330\17K\3745D\3471\0\20\0D\3502D\3502<\321"
|
||||
",\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0-\0\377\377"
|
||||
"\377\377\377\377\311\324\311\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\0H\0\377\377\377\377\377\377\256\307\256\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\0c\0\377\377\377\377\377\377"
|
||||
"\223\300\223\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\0~\0\377\377\377\377\377\377x\277x\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\0\231\0\377\377\377\377\377\377]\303]\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\0\264\0\377\377\377\377\377"
|
||||
"\377B\316B\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0"
|
||||
"\317\0\377\377\377\377\377\377'\335'\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\0\352\0\377\377\377#\262\6\260d\15\260e\15\224\357"
|
||||
"/&\262\6\34\300\5.\314\22\40\315\12[\3747M\332/\27\331\12\27\331\12K\374"
|
||||
"5K\3745K\3745D\3471D\3471D\3471D\3471D\3471D\3502D\3502D\3502D\3502D\350"
|
||||
"2D\3502D\3502D\3502D\3502D\3502\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377,\372\27\273\3465\327"
|
||||
"Q.\260d\15\213\213\40\241\3601\200\366*=\265\13?\301\25s\375<Y\316-X\320"
|
||||
"-!\315\13]\3749]\3749O\3321O\3321P\3342P\3342P\3342\371\377\364\371\377\364"
|
||||
"\371\377\364\371\377\364\371\377\364\362\375\360\362\375\360\362\375\360"
|
||||
"\362\375\360\362\375\360D\3471D\3471D\3471D\3502D\3502D\3502D\3502D\3502"
|
||||
"D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"K\3745&\262\6\213\213\40\11\2\0\260`\15\241~#m}\11\273\363AQ\247\15S\266"
|
||||
"\31\212\373@e\302,\4\33\2s\375<\\\3161M\260*\\\3202X\320-\366\377\354\364"
|
||||
"\377\352O\3321\3""5\2O\3321O\3321<\261&P\3342P\3342S\3655\377\377\377\377"
|
||||
"\377\377\14Z\14\377\377\377\377\377\377\234\302\231\371\377\364\362\375\360"
|
||||
"\367\377\365\362\375\360\362\375\360\13t\13\362\375\360\362\375\360\177\275"
|
||||
"~\362\375\360\362\375\360\370\377\366\362\375\360\377\377\377\14\220\14\377"
|
||||
"\377\377D\3502\"\267\33D\3502D\3502K\3779D\3502D\3502\3\233\2D\3502D\350"
|
||||
"2\34\303\26D\3502D\3502L\377:D\3502D\3502\3\264\2D\3502D\3502\25\323\22\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\14\341\14\377\377"
|
||||
"\377\377\377\377\40\353\40\377\377\377D\3471\34\300\5e\247\33\356\336?\277"
|
||||
"f)\260P\17\260i\16\356\336?\331\353C\274\363GQ\247\15\243\370Cp\270)\212"
|
||||
"\373@h\3021h\3042c\304+\364\377\336\\\3161\\\3161\\\3202\\\3202\\\3202\377"
|
||||
"\377\377\364\377\352\364\377\352\346\371\342\346\371\342O\3321O\3321P\334"
|
||||
"2P\3342P\3342P\3342P\3342P\3342\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\362\375\360\362\375\360\362\375\360\362\375\360\362\375"
|
||||
"\360\362\375\360\362\375\360\362\375\360\362\375\360\362\375\360\362\375"
|
||||
"\360\362\375\360\362\375\360\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502D\3502\40"
|
||||
"\315\12=\265\13f\230\14\237y\15\274Y\17\327Q.\260X\14\243\177$\220\214\""
|
||||
"\215\235*\274\363G\177\252+\243\370Cu\2661p\270)\367\377\324h\3021h\3021"
|
||||
"h\3042\364\377\336\364\377\336\335\364\323\\\3161\\\3161\\\3202\\\3202\\"
|
||||
"\3202\377\377\377\377\377\377\364\377\352\364\377\352\346\371\342\346\371"
|
||||
"\342\346\371\342\346\371\342O\3321P\3342P\3342P\3342P\3342P\3342P\3342P\334"
|
||||
"2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\362\375\360\362\375\360"
|
||||
"\362\375\360\362\375\360\362\375\360\362\375\360\362\375\360\362\375\360"
|
||||
"\362\375\360\362\375\360\362\375\360\362\375\360\362\375\360\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\6\0\4[\3747?\301\25N\241\14\331\353C\243\177$\275Z\21\377\254W\260Q\17\30"
|
||||
"\26\7\370\343N\201\210\16|\213-\274\363G\200\2521\202\263+\243\370Cu\266"
|
||||
"1\12&\4\367\377\324h\3021S\241)h\3042h\3042\377\377\377\364\377\336\335\364"
|
||||
"\323\24M\23\\\3161\\\3202C\245(\\\3202\\\3202\377\377\377\377\377\377\377"
|
||||
"\377\377\30l\30\346\371\342\346\371\342\207\273\205\346\371\342\346\371\342"
|
||||
"\361\377\355\377\377\377P\3342\7t\4P\3342P\3342/\260\"P\3342P\3342^\377@"
|
||||
"\377\377\377\377\377\377\30\242\30\377\377\377\377\377\377d\306d\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\30\275\30\377\377\377"
|
||||
"\377\377\377K\322K\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\30\330\30\362\375\360\362\375\3601\3431\362\375\360\362\375\360\377"
|
||||
"\377\377\362\375\360D\3502M\332/s\375<>\265\14\177\252+\201\210\16\245\204"
|
||||
"*\377\314U\312\\,\224'\11\260i\17\244\210\40\232\2211\331\353J\215\2351\377"
|
||||
"\377\276\200\2521\200\2542\375\377\310u\2661t\2702t\2702\367\377\324\325"
|
||||
"\355\305h\3021h\3042h\3042\377\377\377\377\377\377\364\377\336\335\364\323"
|
||||
"\335\364\323\335\364\323\\\3202\\\3202\\\3202\\\3202\\\3202\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371\342\346"
|
||||
"\371\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377\377"
|
||||
"\377\377P\3342P\3342P\3342P\3342P\3342P\3342P\3342P\3342\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\27\331\12Y\316-h\3021\243\370Cg\230\15\230\224\"\245"
|
||||
"\204*\377\314U\310J\21\327Q.\260b\21\245\2041\370\343N\230\2242\331\353J"
|
||||
"\214\2402\377\377\276\200\2521\200\2542\375\377\310\317\344\266u\2661t\270"
|
||||
"2\377\377\377\367\377\324\325\355\305h\3021h\3042h\3042h\3042\377\377\377"
|
||||
"\377\377\377\364\377\336\335\364\323\335\364\323\335\364\323\335\364\323"
|
||||
"\\\3202\\\3202\\\3202\\\3202\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371"
|
||||
"\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377P\3342P\3342P\3342P\3342P\3342P\3342P\3342P\334"
|
||||
"2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377K\3745!\315\13d\304,p\270)\177\252+\23\13\6\232\2211\245\204"
|
||||
"1\347\270O\377\277Y\324<\22\265V\24\377\330Q\244\210\40#(\13\230\224\"\331"
|
||||
"\353Ju\211.\377\377\276\200\2521\210\273:\200\2542\375\377\310\20""3\6u\266"
|
||||
"1t\2702\271\307\271\367\377\324\325\355\305\341\377\321h\3021h\3042\16L\7"
|
||||
"h\3042\377\377\377\242\300\242\377\377\377\335\364\323\355\377\343\335\364"
|
||||
"\323\335\364\323\14f\7\\\3202\\\3202>\250*\\\3202\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377$\231$\377\377\377\377\377\377s\303s\377\377\377"
|
||||
"\346\371\342\376\377\372\346\371\342\346\371\342\40\257\37\346\371\342\346"
|
||||
"\371\342\\\316\\\377\377\377\377\377\377\377\377\377\377\377\377P\3342\13"
|
||||
"\262\7P\3342P\3342*\327%P\3342P\3342o\377Q\377\377\377\377\377\377$\352$"
|
||||
"\377\377\377\377\377\377K\3745]\3749s\375<\212\373@\243\370C\274\363G\331"
|
||||
"\353J\370\343N\377\330Q\377\314U\377\277Y\377\260\\\224(\11\260|\36\245\204"
|
||||
"1\377\377\250\232\2211\230\224\"\215\2351\214\2402\377\377\276\312\332\250"
|
||||
"\200\2521\200\2542\377\377\377\317\344\266u\2661t\2702t\2702\377\377\377"
|
||||
"\377\377\377\325\355\305\325\355\305\325\355\305h\3042h\3042h\3042\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\335\364\323\335\364\323\335\364"
|
||||
"\323\335\364\323\335\364\323\\\3202\\\3202\\\3202\\\3202\\\3202\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371\342"
|
||||
"\346\371\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377P\3342P\3342"
|
||||
"P\3342P\3342\377\377\377K\3745O\3321\\\3161h\3021t\2702~\254'\214\240%\377"
|
||||
"\377\262\370\343N\377\330Q\262x1\277l1\312`1\327R.\260X\23\377\330Q\244\210"
|
||||
"2\377\377\250\230\2242\377\377\262\215\2351\214\2402\377\377\377\312\332"
|
||||
"\250\200\2521\200\2542\377\377\377\375\377\310\317\344\266u\2661t\2702t\270"
|
||||
"2\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305h\3042h\304"
|
||||
"2h\3042h\3042\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\335\364\323\335\364\323\335\364\323\335\364\323\377\377\377\\\3202\\\320"
|
||||
"2\\\3202\\\3202\\\3202\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\346\371\342\346\371\342\346\371\342\346"
|
||||
"\371\342\346\371\342\346\371\342\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377D\3471O\3321\21\7\11c\304+\367\377\324o\2520\200\252"
|
||||
"1\214\2402\235\226'\377\377\250\377\330Q!\20\11\277l1\310d2\266?\33\224("
|
||||
"\11\260|\36\257\217;\377\377\250\232\2211\34$\11\377\377\262\215\2351q\206"
|
||||
"0\377\377\377\312\332\250\217\303@\200\2542\200\25420Z0\317\344\266\317\344"
|
||||
"\266X\2260t\2702t\2702\377\377\377\377\377\377\325\355\305(l%\325\355\305"
|
||||
"\325\355\305K\2410h\3042h\3042\377\377\377\377\377\377\377\377\3770\2200"
|
||||
"\377\377\377\377\377\377t\274p\335\364\323\335\364\323\373\377\361\377\377"
|
||||
"\377\377\377\377\21\213\11\\\3202\\\3202<\274/\\\3202\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\3770\3060\377\377\377\377\377\377V\330V\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\3770\3410\346\371\342\346"
|
||||
"\371\342>\352>\346\371\342\377\377\377D\3471P\3342\364\377\352s\375<h\302"
|
||||
"1t\2702~\254'\377\377\276\215\2351\230\2242\244\210\40\377\377\234\262x1"
|
||||
"\277l1\310W\32\377\260\\\327T1\260|2\377\330Q\244\2102\377\377\250\232\221"
|
||||
"1\230\2242\377\377\262\215\2351\214\2402\377\377\377\377\377\276\312\332"
|
||||
"\250\200\2542\200\2542\377\377\377\375\377\310\317\344\266\317\344\266t\270"
|
||||
"2t\2702t\2702\377\377\377\377\377\377\377\377\377\325\355\305\325\355\305"
|
||||
"\325\355\305h\3042h\3042h\3042h\3042\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\335\364\323\335\364\323\335\364\323"
|
||||
"\335\364\323\335\364\323\377\377\377\377\377\377\\\3202\\\3202\\\3202\\\320"
|
||||
"2\\\3202\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377D\3471P\3342\364\377\352\\\3161h\3042\367"
|
||||
"\377\324u\2661\200\2542\214\240%\377\377\262\232\2211\244\2102\377\377\234"
|
||||
"\262x1\274p2\377\337\207\377\260\\\327T1\227/\14\377\377\234\245\2041\244"
|
||||
"\2102\307\300\213\230\2242\377\377\377\377\377\262\215\2351\214\2402\377"
|
||||
"\377\377\377\377\276\312\332\250\200\2542\200\2542\377\377\377\377\377\377"
|
||||
"\317\344\266\317\344\266\317\344\266t\2702t\2702\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305\377\377\377"
|
||||
"h\3042h\3042h\3042h\3042\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\335\364\323\335\364\323\335\364\323"
|
||||
"\335\364\323\377\377\377\377\377\377\377\377\377\\\3202\\\3202\\\3202\\\320"
|
||||
"2\\\3202\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377<\0<D\3502\371\377\364N\3221\\\3202\364\377"
|
||||
"\336l\3035t\2702\375\377\310\36\22\13\214\2402\377\377\262\214\2012\244\210"
|
||||
"2\377\377\234\274\177;\274p2\377\337\207/\24\13\324X2\227/\14\222l3\307\260"
|
||||
"|\244\2102\377\377\270\232\2211\230\2242<Q<\310\316\231\215\2351o\2065\377"
|
||||
"\377\377\377\377\276\341\377\277\200\2521\200\2542\36H\13\377\377\377\377"
|
||||
"\377\377\213\260}\317\344\266t\2702\221\366Ot\2702\377\377\377<\207<\377"
|
||||
"\377\377\377\377\377}\270v\325\355\305\325\355\305\371\377\351\377\377\377"
|
||||
"h\3042\30|\13h\3042\377\377\377|\306|\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377<\275<\335\364\323\335\364\323_\317]\335\364\323"
|
||||
"\335\364\323\377\377\377\377\377\377\377\377\377\25\260\13\\\3202\\\3202"
|
||||
">\3369\\\3202\377\377\377\377\377\377\377\377\377\377\377\377D\3502\371\377"
|
||||
"\364O\3321\\\3202\364\377\336h\3042\367\377\324u\2661\200\2542\377\377\276"
|
||||
"\215\2351\230\2242\307\300\213\244\2102\377\377\234\262x1\274p2\377\337\207"
|
||||
"\312`1\324E\30\327T1\260|2\377\377\234\245\2041\244\2102\377\377\250\232"
|
||||
"\2211\230\2242\377\377\377\310\316\231\215\2351\214\2402\377\377\377\377"
|
||||
"\377\377\312\332\250\312\332\250\200\2542\200\2542\377\377\377\377\377\377"
|
||||
"\317\344\266\317\344\266\317\344\266t\2702t\2702t\2702\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355"
|
||||
"\305\377\377\377h\3042h\3042h\3042h\3042\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\335\364\323\335\364\323\335\364\323\335\364\323\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\\\3202\\\3202\\\3202\377\377\377D\3502\371\377"
|
||||
"\364O\3321\377\377\377\\\3161h\3042\367\377\324t\2702\375\377\310\200\252"
|
||||
"1\377\377\377\215\2351\230\2242\377\377\250\244\2102\377\377\234\262x1\274"
|
||||
"p2\316\214_\310d2\377\310|\327T1\227/\14\377\377\377\307\260|\244\2102\377"
|
||||
"\377\377\307\300\213\230\2242\230\2242\377\377\377\310\316\231\214\2402\214"
|
||||
"\2402\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200\2542\377"
|
||||
"\377\377\377\377\377\377\377\377\317\344\266\317\344\266\317\344\266t\270"
|
||||
"2t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\325\355\305\325\355\305\325\355\305\377\377\377\377\377\377h\3042h\3042"
|
||||
"h\3042\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\335\364\323\335\364"
|
||||
"\323\335\364\323\335\364\323\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377D\3502\371\377\364R\3344\364\377\352\\\3161H\22Hh\3021\377\377\377o\244"
|
||||
"2\200\2542\312\332\250\226\245<\377\377\262\230\2242H-/\245\2041\377\377"
|
||||
"\377\233i5\274p2\277l1\331sC\377\310|\324X2*\15\3\260|2\377\377\234\206s"
|
||||
"7\244\2102\377\377\250\340\337\244\230\2242\377\377\377Hc2\310\316\231\214"
|
||||
"\2402n\211:\377\377\377\377\377\377\353\377\311\312\332\250\200\2542$T\16"
|
||||
"\377\377\377\377\377\377\236\277\236\377\377\377\317\344\266\367\377\336"
|
||||
"\377\377\377t\2702\40n\16t\2702\377\377\377\212\303\212\377\377\377\377\377"
|
||||
"\377\377\377\377\325\355\305\325\355\305<\2477\377\377\377\377\377\377O\276"
|
||||
"Ah\3042h\3042\237\377i\377\377\377\377\377\377H\317H\377\377\377\377\377"
|
||||
"\377c\335c\377\377\377\377\377\377\377\377\377\377\377\377\335\364\323>\337"
|
||||
";\335\364\323\377\377\377D\3502\362\375\360P\3342\346\371\342\\\3202\364"
|
||||
"\377\336h\3042\367\377\324t\2702\375\377\310\200\2542\377\377\276\214\240"
|
||||
"2\377\377\262\232\2211\377\377\377\245\2041\377\377\377\262x1\377\377\377"
|
||||
"\277l1\310d2\312`1\324X2\327T1\260|2\377\377\377\307\260|\244\2102\377\377"
|
||||
"\377\307\300\213\232\2211\230\2242\377\377\377\377\377\262\310\316\231\214"
|
||||
"\2402\214\2402\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200"
|
||||
"\2542\200\2542\377\377\377\377\377\377\377\377\377\317\344\266\317\344\266"
|
||||
"\317\344\266\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305\325\355"
|
||||
"\305\377\377\377\377\377\377h\3042h\3042h\3042h\3042\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377D\3502\362\375\360P\3342\346\371\342\\\3202\335"
|
||||
"\364\323h\3042\325\355\305t\2702\317\344\266\377\377\377\200\2521\377\377"
|
||||
"\377\215\2351\377\377\377\232\2211\377\377\377\245\2041\377\377\377\262x"
|
||||
"1\377\377\377\277l1\377\377\377\312`1\377\310|\327T1\227/\14\377\377\377"
|
||||
"\307\260|\244\2102\244\2102\377\377\377\307\300\213\230\2242\230\2242\377"
|
||||
"\377\377\310\316\231\310\316\231\214\2402\214\2402\377\377\377\377\377\377"
|
||||
"\312\332\250\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\317\344\266\317\344\266\377\377\377\377\377"
|
||||
"\377t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305\377\377"
|
||||
"\377\377\377\377\377\377\377h\3042h\3042h\3042\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362\375\360"
|
||||
"T\11TO\3321\377\377\377Z\3002\377\377\377h\3042\377\377\334t\2702\375\377"
|
||||
"\310*\30\20\312\332\250\214\2402\262\260\214\230\2242\307\300\213\377\377"
|
||||
"\377\245\2041\377\377\377:\35\20\377\377\377\277l1\316\264w\310d2\377\310"
|
||||
"|\356qL\227/\14\260|2TZ3\307\260|\244\2102\274\302\274\307\300\213\307\300"
|
||||
"\213\273\301U\377\377\377\377\377\377A^2\310\316\231\214\2402o\216B\377\377"
|
||||
"\377\377\377\377\366\377\324\312\332\250\312\332\250*a\20\200\2542\377\377"
|
||||
"\377\230\301\230\377\377\377\377\377\377\377\377\353\317\344\266\317\344"
|
||||
"\266T\253Tt\2702t\2702]\265I\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377T\306T\377\377\377\325\355\305l\324i\325\355\305\377\377"
|
||||
"\377\377\377\377\377\377\377h\3042\"\254\20h\3042h\3042b\353b\377\377\377"
|
||||
"\377\377\377D\3502\362\375\360\377\377\377O\3321\377\377\377\\\3202\364\377"
|
||||
"\336h\3042\325\355\305t\2702\317\344\266\377\377\377\200\2521\377\377\377"
|
||||
"\214\2402\377\377\262\230\2242\307\300\213\244\2102\307\260|\377\377\377"
|
||||
"\262x1\377\377\377\274p2\377\337\207\310d2\377\310|\324X2\333bB\260|2\377"
|
||||
"\377\377\307\260|\244\2102\244\2102\377\377\377\307\300\213\232\2211\230"
|
||||
"\2242\377\377\377\377\377\377\310\316\231\310\316\231\214\2402\214\2402\377"
|
||||
"\377\377\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200\254"
|
||||
"2\200\2542\377\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317"
|
||||
"\344\266\317\344\266\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\325\355\305"
|
||||
"\325\355\305\325\355\305\325\355\305\377\377\377\377\377\377\377\377\377"
|
||||
"h\3042h\3042\377\377\377\377\377\377D\3471\377\377\377P\3342\364\377\352"
|
||||
"\\\3202\335\364\323\377\377\377h\3021\377\377\377t\2702\375\377\310\200\254"
|
||||
"2\312\332\250\377\377\377\215\2351\377\377\377\230\2242\377\377\250\244\210"
|
||||
"2\307\260|\377\377\377\262x1\377\377\377\274p2\377\337\207\310d2\323xQ\324"
|
||||
"X2\327T1\227/\14\260|2\377\377\234\307\260|\244\2102\377\377\377\377\377"
|
||||
"\377\307\300\213\230\2242\230\2242\377\377\377\377\377\377\310\316\231\310"
|
||||
"\316\231\214\2402\214\2402\377\377\377\377\377\377\377\377\377\312\332\250"
|
||||
"\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\317\344\266\317\344\266\377\377\377\377\377"
|
||||
"\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\325\355\305\325\355\305\325"
|
||||
"\355\305\377\377\377\377\377\377`\0`\377\377\377D\3471\371\366\371P\3342"
|
||||
"\346\371\342\377\377\377\\\3161\377\377\377'\24\22\325\355\305t\2702\276"
|
||||
"\310\251\377\377\377\200\2542\377\377\316\214\2402\310\316\231`6`\230\224"
|
||||
"2\377\377\250\222u<\307\260|\377\377\377\315\214L\377\377\377\274p2M,#\310"
|
||||
"d2\312`1\306\304\306\324X2\333bB\325\242W\377\377\377\307\260|=9\22\244\210"
|
||||
"2\377\377\377\227\234w\307\300\213\230\2242\307\322a\377\377\377\377\377"
|
||||
"\377Km9\310\316\231\214\2402r\226K\377\377\377\377\377\377\377\377\377\312"
|
||||
"\332\250\312\332\250`\242`\200\2542\200\2542\224\306\224\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\317\344\266M\250D\317\344\266\377\377\377"
|
||||
"\203\322\203t\2702t\2702\301\377\177\377\377\377\377\377\377`\330`\377\377"
|
||||
"\377\377\377\377r\344r\377\377\377\377\377\377\377\377\377\325\355\305\377"
|
||||
"\377\377\377\377\377D\3502\371\377\364P\3342\346\371\342\377\377\377\\\320"
|
||||
"2\364\377\336h\3042\325\355\305\377\377\377t\2702\317\344\266\200\2542\312"
|
||||
"\332\250\377\377\377\214\2402\310\316\231\230\2242\307\300\213\377\377\377"
|
||||
"\244\2102\307\260|\377\377\377\200U0\220^\377\7\4/\227U[\246]\377\255Q1\377"
|
||||
"\242y\10\3/\306M@\6\4/{^\377mVvmVv\6\5/h\\\377h\\\377\\U\204\12\12\360\5"
|
||||
"\5/VX\377VX\377\12\12\360LR\221\12\12\360\5\6/\214\2402\377\377\377\377\377"
|
||||
"\377\377\377\377\312\332\250\312\332\250\377\377\377\200\2542\200\2542\200"
|
||||
"\2542\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\317\344"
|
||||
"\266\317\344\266\317\344\266\377\377\377\377\377\377t\2702t\2702\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377D\3502\362\375\360P\3342\346\371"
|
||||
"\342\377\377\377\\\3202\335\364\323\377\377\377h\3042\367\377\324t\2702\317"
|
||||
"\344\266\377\377\377\200\2542\312\332\250\377\377\377\214\2402\377\377\262"
|
||||
"\230\2242\307\300\213\377\377\377\244\2102\307\260|{^\377\200U0\220^\377"
|
||||
"\7\4/\227U[\246]\377\7\3/\377\242y\236\37""2\306M0\210%\14T-2{^\377mVv\6"
|
||||
"\5/\6\5/h\\\377\\U\204\\U\204\5\5/\5\5/VX\377VX\377LR\221LR\221\377\377\377"
|
||||
"\214\2402\214\2402\377\377\377\377\377\377\377\377\377\312\332\250\312\332"
|
||||
"\250\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317\344\266\377"
|
||||
"\377\377\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377D\3502\365\375\363\377\377"
|
||||
"\377O\3321l\22l\\\3202\335\364\323\357\346\357h\3042\325\355\305\377\377"
|
||||
"\377t\2702\317\344\266l-l\200\2521\377\377\377\204\211=\310\316\231\377\377"
|
||||
"\377\262\243L\307\300\213\377\377\377E&\25mVv{^\377ySB\220^\377\7\4/\275"
|
||||
"t\201\246]\377\7\3/I\37!\277Z\377\10\3/\237YQ\6\4/{^\377\236\213\247mVv\6"
|
||||
"\5/,-lh\\\377\\U\204dow\5\5/\5\5/\222\251\377VX\377\310\316\231T{@\377\377"
|
||||
"\377\214\2402w\240V\377\377\377\377\377\377\377\377\377\377\377\377\312\332"
|
||||
"\250U\231G\377\377\377\200\2542q\270\\\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377l\317l\317\344\266\317\344\266z\330v\377\377\377"
|
||||
"\377\377\377\323\377\221t\2702t\2702l\352l\377\377\377\377\377\377\377\377"
|
||||
"\377D\3502\362\375\360\377\377\377P\3342\346\371\342\377\377\377\\\3202\364"
|
||||
"\377\336h\3042\325\355\305\377\377\377t\2702\317\344\266\377\377\377\200"
|
||||
"\2542\312\332\250\377\377\377\214\2402\310\316\231\377\377\377\230\2242\307"
|
||||
"\300\213\377\377\377\6\5/mVv{^\377\200U0\220^\377\7\4/\227U[\246]\377\7\3"
|
||||
"/\255RN\277Z\377\10\3/\306M@\6\4/{^\377{^\377mVv\6\5/\6\5/h\\\377h\\\377"
|
||||
"\\U\204\12\12\360\5\5/\12\12\360\377\377\377\377\377\377\310\316\231\310"
|
||||
"\316\231\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\312\332\250\312\332\250\377\377\377\200\2542\200\2542\200\254"
|
||||
"2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\317\344\266\317\344\266\317\344\266\377\377\377\377\377\377t\2702t\2702"
|
||||
"\377\377\377\377\377\377D\3502\362\375\360\377\377\377P\3342\346\371\342"
|
||||
"\377\377\377\\\3202\335\364\323\377\377\377h\3042\325\355\305\377\377\377"
|
||||
"t\2702\317\344\266\377\377\377\200\2542\312\332\250\377\377\377\214\2402"
|
||||
"\310\316\231\377\377\377\230\2242\307\300\213h\\\377\6\5/mVv{^\377\200U0"
|
||||
"\220^\377\7\4/\227U[\246]\377\7\3/\255RN\277Z\377\10\3/\306M@\6\4/\6\4/{"
|
||||
"^\377mVvmVv\6\5/\12\12\360h\\\377\\U\204\\U\204\5\5/\230\2242\377\377\377"
|
||||
"\377\377\377\377\377\377\310\316\231\310\316\231\377\377\377\214\2402\214"
|
||||
"\2402\377\377\377\377\377\377\377\377\377\377\377\377\312\332\250\312\332"
|
||||
"\250\377\377\377\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317"
|
||||
"\344\266\377\377\377\377\377\377\377\377\377\377\377\377D\3502q\10p\377\377"
|
||||
"\377P\3342\335\350\332\377\377\377\\\3202\351\366\337\377\377\377h\3042d"
|
||||
"!\\\377\377\377t\2702\277\302\252\377\377\377\200\2542\343\345\301\377\377"
|
||||
"\377\214\2402^2H\377\377\377\230\2242\257\235\204h\\\377\6\5/\223o\234{^"
|
||||
"\377\6\4/<\36""1\377\252\215j)2\211XK\377\250\203\202$2\337~c\377\242y\236"
|
||||
"\37""2]#\26\306M@\6\4/ym\274{^\377mVvELn\6\5/h\\\37703x\\U\204\307\300\213"
|
||||
"\204\226\\\230\2242\377\377\377\377\377\377\377\377\377\310\316\231^\212"
|
||||
"H\377\377\377\214\2402}\256b\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\312\332\250_\251O\377\377\377\377\377\377y\310j\200\2542\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377x\341x\377\377\377\377\377\377\177\350"
|
||||
"|\317\344\266\377\377\377\377\377\377D\3502\362\375\360\377\377\377P\334"
|
||||
"2\346\371\342\377\377\377\\\3202\335\364\323\377\377\377\377\377\377h\304"
|
||||
"2\325\355\305\377\377\377t\2702\317\344\266\377\377\377\200\2542\312\332"
|
||||
"\250\377\377\377\214\2402\310\316\231\377\377\377\230\2242\\U\204h\\\377"
|
||||
"\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\246]\377\7\3/\255"
|
||||
"RN\277Z\377\10\3/\306M@\6\4/\12\12\360{^\377mVvmVv\6\5/\12\12\360h\\\377"
|
||||
"\377\377\377\307\300\213\377\377\377\230\2242\230\2242\377\377\377\377\377"
|
||||
"\377\377\377\377\310\316\231\310\316\231\377\377\377\214\2402\214\2402\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\312\332\250\312\332\250\312"
|
||||
"\332\250\377\377\377\200\2542\200\2542\200\2542\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\350"
|
||||
"2\362\375\360\377\377\377P\3342\377\377\377\346\371\342\377\377\377\\\320"
|
||||
"2\335\364\323\377\377\377h\3042\325\355\305\377\377\377t\2702\317\344\266"
|
||||
"\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\214\2402\310\316"
|
||||
"\231\377\377\377\5\5/\\U\204h\\\377\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220"
|
||||
"^\377\7\4/\227U[\246]\377\7\3/\255RN\277Z\377\10\3/\306M@\6\4/\6\4/{^\377"
|
||||
"\12\12\360mVv\6\5/\6\5/\377\377\377\377\377\377\307\300\213\307\300\213\377"
|
||||
"\377\377\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310\316"
|
||||
"\231\310\316\231\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\312\332\250\312\332\250\377\377\377\377"
|
||||
"\377\377\200\2542\200\2542\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\204\0\204\377\377\377D\3502\355\364\353\377\377\377\377\377\377Y\335;\346"
|
||||
"\371\342\377\377\377/\26\31\335\364\323\377\377\377k\255<\325\355\305\377"
|
||||
"\377\377\377\377\377t\2702\317\344\266\2046\204\200\2542\312\332\250\340"
|
||||
"\317\340\214\2402\310\316\231\377\377\377VX\377\5\5//\33Dh\\\377\6\5/tVz"
|
||||
"{^\377\6\4/=0\377\201Vi\220^\377\3\1\30\227U[\246]\377?6U\255RN\277Z\377"
|
||||
"\337]s\306M0\306M@\3\2\30{^\377{^\377yv}mVv\244\2102\377\377\377\377\377"
|
||||
"\377\377\377\377gyG\307\300\213\230\2242\212\242h\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\310\316\231g\230O\377\377\377\214\2402\205\274q"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377h\270V\312\332"
|
||||
"\250\377\377\377\222\344\222\200\2542\200\2542\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377D\3502\362\375\360\377\377\377\377\377\377P\3342\346"
|
||||
"\371\342\377\377\377\\\3202\335\364\323\377\377\377\377\377\377h\3042\325"
|
||||
"\355\305\377\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312"
|
||||
"\332\250\377\377\377\214\2402\310\316\231VX\377\12\12\360\5\5/\\U\204h\\"
|
||||
"\377\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\246]\377\7\3"
|
||||
"/\255RN\255RN\277Z\377\10\3/\306M@\6\4/\12\12\360{^\377\12\12\360\307\260"
|
||||
"|\244\2102\244\2102\377\377\377\377\377\377\377\377\377\307\300\213\377\377"
|
||||
"\377\230\2242\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310"
|
||||
"\316\231\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\312\332\250\312\332\250\377\377\377"
|
||||
"\377\377\377\200\2542\200\2542\377\377\377\377\377\377D\3502\377\377\377"
|
||||
"\362\375\360\377\377\377P\3342\346\371\342\377\377\377\\\3202\377\377\377"
|
||||
"\335\364\323\377\377\377h\3042\325\355\305\377\377\377\377\377\377t\2702"
|
||||
"\317\344\266\377\377\377\200\2542\312\332\250\377\377\377\377\377\377\214"
|
||||
"\2402LR\221VX\377\5\5/\\U\204\12\12\360h\\\377\6\5/mVv{^\377\6\4/\12\12\360"
|
||||
"\201Vi\220^\377\7\4/\227U[\246]\377\7\3/\7\3/\255RN\277Z\377\10\3/\306M@"
|
||||
"\6\4/\6\4/{^\377\377\377\377\307\260|\377\377\377\244\2102\377\377\377\377"
|
||||
"\377\377\377\377\377\307\300\213\307\300\213\377\377\377\230\2242\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\310\316\231\310\316\231\377\377"
|
||||
"\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\312\332\250\312\332\250\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377D\3502\377\377\377\362\375\360\377\377\377-\17\34\346"
|
||||
"\371\342\377\377\377\363\346\363\\\3202\335\364\323\377\377\377h\3042\377"
|
||||
"\377\377x)o\377\377\377t\2702\301\276\255\377\377\377\377\377\377\243\273"
|
||||
"U\312\332\250\377\377\377O-\34\12\12\360LR\221gU\333\5\5/\\U\204<)\377h\\"
|
||||
"\377\6\5/=!B{^\377\6\4/A2\306\201Vi\220^\377I9q\227U[\246]\377]-\220\7\3"
|
||||
"/\255RN\245q\304\10\3/\306M0\377\236\221\6\4/\377\377\377\220\231\220\307"
|
||||
"\260|\307\260|\226\227m\244\2102\377\377\377\377\377\377\377\377\377\307"
|
||||
"\300\213p\207N\230\2242\230\2242\254\316\254\377\377\377\377\377\377\377"
|
||||
"\377\377\310\316\231\310\316\231\220\317\220\377\377\377\214\2402\216\316"
|
||||
"\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377r\310^\312"
|
||||
"\332\250\377\377\377\377\377\377\377\377\377D\3502\362\375\360\377\377\377"
|
||||
"P\3342\377\377\377\346\371\342\377\377\377\\\3202\335\364\323\377\377\377"
|
||||
"\377\377\377h\3042\325\355\305\377\377\377\377\377\377t\2702\317\344\266"
|
||||
"\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\5\6/LR\221\12\12"
|
||||
"\360VX\377\5\5/\\U\204h\\\377\12\12\360\6\5/mVv{^\377\6\4/\12\12\360\201"
|
||||
"Vi\220^\377\7\4/\227U[\12\12\360\246]\377\7\3/\255RN\277Z\377\277Z\377\10"
|
||||
"\3/\306M@\260|2\260|2\377\377\377\377\377\377\307\260|\377\377\377\244\210"
|
||||
"2\377\377\377\377\377\377\377\377\377\377\377\377\307\300\213\377\377\377"
|
||||
"\230\2242\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310\316"
|
||||
"\231\310\316\231\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377D\3502\362\375\360\377\377\377P\3342\377\377\377\346\371\342\377"
|
||||
"\377\377\\\3202\377\377\377\335\364\323\377\377\377h\3042\325\355\305\377"
|
||||
"\377\377\377\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312"
|
||||
"\332\250\377\377\377\12\12\360\5\6/LR\221VX\377\12\12\360\5\5/\\U\204h\\"
|
||||
"\377\6\5/\12\12\360mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\227"
|
||||
"U[\246]\377\7\3/\255RN\12\12\360\277Z\377\10\3/\333bB\377\377\377\260|2\377"
|
||||
"\377\377\377\377\377\307\260|\307\260|\244\2102\244\2102\377\377\377\377"
|
||||
"\377\377\377\377\377\307\300\213\307\300\213\377\377\377\230\2242\230\224"
|
||||
"2\377\377\377\377\377\377\377\377\377\377\377\377\310\316\231\310\316\231"
|
||||
"\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377)\10\36\362\375\360\377\377\377\370"
|
||||
"\356\370P\3342\346\371\342\377\377\377\377\377\377\\\3202\207\"\201\377\377"
|
||||
"\377\377\377\377p\250D\325\355\305\377\377\377\377\377\377t\2702\317\344"
|
||||
"\266\234?\234\200\2542\377\377\377\274\260\244FS\377\5\6/;#\377LR\221VX\377"
|
||||
"\3\1\34\12\12\360\\U\204{^\330\6\5/\12\12\360\257\203\270{^\377\6\4/\6\4"
|
||||
"\222\201Vi\220^\377P@d\12\12\360\227U[\370\244\377\7\3/\255RNi./\277Z\377"
|
||||
"\324X2\264\202w\333bB\260|2\377\377\377\377\377\377\377\377\377yvK\377\377"
|
||||
"\377\244\2102\236\247|\377\377\377\377\377\377\377\377\377\307\300\213\307"
|
||||
"\300\213\234\306\234\230\2242\377\377\377\256\330\256\377\377\377\377\377"
|
||||
"\377\377\377\377\310\316\231\310\316\231\234\341\234\377\377\377\214\240"
|
||||
"2\232\343\223\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362\375"
|
||||
"\360\377\377\377\377\377\377P\3342\346\371\342\377\377\377\377\377\377\\"
|
||||
"\3202\335\364\323\377\377\377\377\377\377h\3042\325\355\305\377\377\377\377"
|
||||
"\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312\332\250\12"
|
||||
"\12\360FS\377\5\6/LR\221\12\12\360RW\255\3\5\35\6\11\224ZT\\d[\261\3\4\35"
|
||||
"\6\11\224lVTw]\264\4\4\35\6\11\224\200VN\214]\270\4\3\35\6\11\224\226UG\242"
|
||||
"\\\274\4\3\35\4\3\35\254R@\377\377\311\203U\36\203U\36\323a:my\36my\36\377"
|
||||
"\377\276\377\377\276\243\255X\243\255X\236\371\236e\204\36\236\371\236\374"
|
||||
"\377\273\236\371\236\236\371\236\234\275`\236\371\236^\220\36^\220\36\236"
|
||||
"\371\236\352\377\267\352\377\267\236\371\236\236\371\236\310\316\231\310"
|
||||
"\316\231\377\377\377\377\377\377\214\2402\377\377\377\377\377\377\377\377"
|
||||
"\377D\3502\362\375\360\377\377\377\377\377\377P\3342\346\371\342\377\377"
|
||||
"\377\377\377\377\\\3202\377\377\377\335\364\323\377\377\377h\3042\377\377"
|
||||
"\377\325\355\305\377\377\377t\2702\377\377\377\317\344\266\377\377\377\377"
|
||||
"\377\377\200\2542<L\237FS\377\12\12\360\5\6/LR\221\6\11\224RW\255\3\5\35"
|
||||
"ZT\\\6\11\224d[\261\3\4\35\6\11\224lVTw]\264\4\4\35\6\11\224\200VN\214]\270"
|
||||
"\4\3\35\4\3\35\226UG\242\\\274\6\11\224\4\3\35\304wB\377\377\311\377\377"
|
||||
"\311\203U\36\323a:\236\371\236my\36\236\371\236\377\377\276\236\371\236\243"
|
||||
"\255X\236\371\236e\204\36e\204\36\374\377\273\374\377\273\236\371\236\234"
|
||||
"\275`\234\275`\236\371\236^\220\36^\220\36\236\371\236\352\377\267\352\377"
|
||||
"\267\377\377\377\377\377\377\310\316\231\310\316\231\377\377\377\250\0\250"
|
||||
"\377\377\377\377\377\377F\3375\362\375\360\377\377\377\377\377\377P\3342"
|
||||
"\377\377\377\227\32\224\377\377\377\\\3202\362\340\362\335\364\323\377\377"
|
||||
"\377\377\377\377h\3042\325\355\305\2506\250\377\377\377t\2702\304\272\262"
|
||||
"\377\377\377\377\377\377\257\300a\12\12\360<L\237.\32\250\5\6/\12\12\360"
|
||||
"jSzRW\255\6\11\224D+^ZT\\\6\11\224A&t\3\4\35lVTP9\235w]\264\4\4\35YG\347"
|
||||
"\200VN\214]\270\3\4a\4\3\35\226UG\244y\257\6\11\224{a\36\377\322\246\236"
|
||||
"\371\236\377\377\311V6\23\323a:\323a:\223\231y\236\371\236\377\377\276\377"
|
||||
"\377\377\243\255X\243\255Xh\270he\204\36\236\371\236\272\322\253\374\377"
|
||||
"\273\236\371\236\377\377\350\236\371\236\236\371\236=y\23\236\371\236\236"
|
||||
"\371\236\262\344\262\377\377\377\377\377\377\377\377\377\310\316\231\377"
|
||||
"\377\377\377\377\377\377\377\377D\3502\362\375\360\377\377\377\377\377\377"
|
||||
"P\3342\377\377\377\346\371\342\377\377\377\377\377\377\\\3202\335\364\323"
|
||||
"\377\377\377\377\377\377h\3042\325\355\305\377\377\377\377\377\377t\2702"
|
||||
"\377\377\377\317\344\266\377\377\377\377\377\377\5\6/<L\237\12\12\360FS\377"
|
||||
"\5\6/\6\11\224JQbRW\255\6\11\224\3\5\35ZT\\d[\261\6\11\224\3\4\35lVT\6\11"
|
||||
"\224w]\264\4\4\35\6\11\224\200VN\214]\270\6\11\224\4\3\35\226UG\242\\\274"
|
||||
"\377\377\306{a\36\304wB\304wB\377\377\311\203U\36\203U\36\323a:my\36my\36"
|
||||
"\377\377\276\377\377\276\236\371\236\243\255X\236\371\236e\204\36e\204\36"
|
||||
"\236\371\236\374\377\273\236\371\236\234\275`\234\275`\236\371\236^\220\36"
|
||||
"^\220\36\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377D\3502\362\375\360\377\377\377\377\377\377"
|
||||
"P\3342\377\377\377\346\371\342\377\377\377\377\377\377\\\3202\335\364\323"
|
||||
"\377\377\377\377\377\377h\3042\377\377\377\325\355\305\377\377\377\377\377"
|
||||
"\377t\2702\317\344\266\377\377\377\377\377\377\5\6/\12\12\360<L\237FS\377"
|
||||
"\12\12\360\3\5\35JQb\6\11\224RW\255\3\5\35\6\11\224ZT\\d[\261\6\11\224\3"
|
||||
"\4\35lVT\6\11\224w]\264\4\4\35\6\11\224\200VN\214]\270\6\11\224\4\3\35\226"
|
||||
"UG\236\371\236\377\377\306{a\36\236\371\236\304wB\377\377\311\236\371\236"
|
||||
"\203U\36\323a:\236\371\236my\36\236\371\236\377\377\276\236\371\236\243\255"
|
||||
"X\243\255X\236\371\236e\204\36\236\371\236\374\377\273\374\377\273\236\371"
|
||||
"\236\234\275`\234\275`\236\371\236\230\2242\230\2242\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377J\3508\377\377\377\362"
|
||||
"\375\360\264\22\264\377\377\377P\3342\340\340\335\377\377\377\377\377\377"
|
||||
"u\325K\377\377\377\335\364\323\264-\264\377\377\377h\3042\315\305\301\377"
|
||||
"\377\377\377\377\377\240\307^\377\377\377\317\344\266\264H\264\12\12\360"
|
||||
"\5\6/aL\245\12\12\360FS\377E(\323\3\5\35JQb\4\3hRW\255\3\5\35O2\241ZT\\d"
|
||||
"[\261X>\346\3\4\35lVT\4\4hw]\264\4\4\35aK\244\200VN\214]\270kZ\371\4\3\35"
|
||||
"\270\212Io\225o\377\377\306{a\36\253\300\253\304wB\377\377\311\377\377\377"
|
||||
"\203U\36\323a:\224D(my\36\236\371\236\307\316\266\377\377\276\236\371\236"
|
||||
"\377\377\343\236\371\236e\204\36Gk\25\236\371\236\374\377\273\260\334\260"
|
||||
"\236\371\236\234\275`\377\377\377\377\377\377\230\2242k\207#\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362\375\360\377\377"
|
||||
"\377\377\377\377P\3342\346\371\342\377\377\377\377\377\377\\\3202\377\377"
|
||||
"\377\335\364\323\377\377\377\377\377\377h\3042\377\377\377\325\355\305\377"
|
||||
"\377\377\377\377\377t\2702\317\344\266\377\377\3778L\377\12\12\360\5\6/<"
|
||||
"L\237\12\12\360BR\252\3\5\35\6\11\224JQbRW\255\6\11\224\3\5\35ZT\\\6\11\224"
|
||||
"d[\261\6\11\224\3\4\35lVT\6\11\224w]\264\4\4\35\6\11\224\200VN\214]\270\6"
|
||||
"\11\224tm\36\270\212I\270\212I\377\377\306{a\36{a\36\304wB\236\371\236\377"
|
||||
"\377\311\203U\36\236\371\236\323a:my\36my\36\236\371\236\377\377\276\236"
|
||||
"\371\236\243\255X\243\255X\236\371\236e\204\36\236\371\236\374\377\273\374"
|
||||
"\377\273\236\371\236\307\300\213\307\300\213\377\377\377\377\377\377\230"
|
||||
"\2242\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362\375\360\377"
|
||||
"\377\377\377\377\377P\3342\377\377\377\346\371\342\377\377\377\377\377\377"
|
||||
"\\\3202\335\364\323\377\377\377\377\377\377\377\377\377h\3042\325\355\305"
|
||||
"\377\377\377\377\377\377t\2702\377\377\377\317\344\2668L\377\12\12\360\5"
|
||||
"\6/\12\12\360<L\237BR\252\6\11\224\3\5\35JQb\6\11\224RW\255\6\11\224\3\5"
|
||||
"\35ZT\\\6\11\224d[\261\3\4\35\6\11\224lVT\6\11\224w]\264\4\4\35\6\11\224"
|
||||
"\200VN\214]\270\236\371\236tm\36\236\371\236\270\212I\377\377\306\236\371"
|
||||
"\236{a\36\304wB\236\371\236\377\377\311\203U\36\203U\36\323a:\236\371\236"
|
||||
"my\36\236\371\236\377\377\276\377\377\276\236\371\236\243\255X\236\371\236"
|
||||
"e\204\36e\204\36\236\371\236\374\377\273\377\377\377\377\377\377\307\300"
|
||||
"\213\307\300\213\377\377\377\377\377\377\377\377\377\377\377\3773\10%\377"
|
||||
"\377\377\362\375\360\372\356\372\377\377\377P\3342\377\377\377\346\371\342"
|
||||
"\377\377\377\300$\300\\\3202\377\377\377\327\317\316\377\377\377\377\377"
|
||||
"\377\220\317Z\377\377\377\325\355\305\300?\300\377\377\377t\2702\312\267"
|
||||
"\270\12\12\3608L\377F#\377\5\6/<L\237\4\3oBR\252\6\11\224K)[JQb\6\11\224"
|
||||
"\243\204\376\3\5\35\6\11\224C&E\6\11\224d[\261_@l\6\11\224lVTkP\371w]\264"
|
||||
"\4\4\35\4\5o\200VN\377\377\302\262\276\262tm\36\236\371\236\377\360\302\377"
|
||||
"\377\306\236\371\236\\A\26\304wB\304wB\322\312\302\236\371\236\203U\36\377"
|
||||
"\355\310\323a:my\36R]\26\236\371\236\377\377\276\270\326\270\243\255X\236"
|
||||
"\371\236\377\377\377e\204\36\236\371\236\300\341\300\377\377\377\377\377"
|
||||
"\377\305\353\305\307\300\213\377\377\377\377\377\377\377\377\377D\3502\377"
|
||||
"\377\377\362\375\360\377\377\377\377\377\377P\3342\377\377\377\346\371\342"
|
||||
"\377\377\377\377\377\377\\\3202\377\377\377\335\364\323\377\377\377\377\377"
|
||||
"\377h\3042\377\377\377\325\355\305\377\377\377\377\377\377t\2702\377\377"
|
||||
"\3770E\254\12\12\3608L\377\5\6/\12\12\360:Lj\6\11\224BR\252\3\5\35\6\11\224"
|
||||
"JQb\6\11\224RW\255\3\5\35\6\11\224ZT\\\6\11\224d[\261\3\4\35\6\11\224lVT"
|
||||
"\6\11\224w]\264\4\4\35\6\11\224\255\235Q\377\377\302\377\377\302tm\36\236"
|
||||
"\371\236\270\212I\377\377\306\377\377\306{a\36\236\371\236\304wB\377\377"
|
||||
"\311\377\377\311\203U\36\236\371\236\323a:\236\371\236my\36\236\371\236\377"
|
||||
"\377\276\236\371\236\243\255X\243\255X\236\371\236e\204\36\244\2102\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377D\3502\377\377\377\362\375\360\377\377\377\377\377\377P\3342\377\377"
|
||||
"\377\346\371\342\377\377\377\377\377\377\377\377\377\\\3202\335\364\323\377"
|
||||
"\377\377\377\377\377\377\377\377h\3042\325\355\305\377\377\377\377\377\377"
|
||||
"\377\377\377t\2702\317\344\266\377\377\377\377\377\377\377\377\377\200\254"
|
||||
"2\236\371\236\222\326p\332\377\264\236\371\236V\234\36\236\371\236\226\312"
|
||||
"g\352\377\267\236\371\236^\220\36\236\371\236\234\275`\374\377\273\236\371"
|
||||
"\236e\204\36\236\371\236\243\255X\377\377\276\236\371\236my\36\236\371\236"
|
||||
"\255\235Q\236\371\236\377\377\302tm\36\236\371\236\270\212I\236\371\236\377"
|
||||
"\377\306{a\36\236\371\236\304wB\236\371\236\377\377\311\203U\36\203U\36\323"
|
||||
"a:\236\371\236my\36\236\371\236\377\377\276\377\377\276\236\371\236\243\255"
|
||||
"X\236\371\236\377\377\377\244\2102\377\377\377\377\377\377\377\377\377\314"
|
||||
"\0\314\377\377\377\377\377\377H\3377\377\377\377\362\375\360\377\377\377"
|
||||
"\377\377\377\377\377\377@\27(\346\371\342\377\377\377\367\340\367\377\377"
|
||||
"\377\\\3202\377\377\377\335\364\323\377\377\377\3146\314h\3042\377\377\377"
|
||||
"\322\301\306\377\377\377\377\377\377\255\314k\377\377\377\317\344\266\314"
|
||||
"Q\314\377\377\377\200\2542\256\300\256\222\326p\236\371\236\377\377\377\236"
|
||||
"\371\236V\234\36xUR\236\371\236\352\377\267\262\273\262^\220\36\234\275`"
|
||||
"\377\377\377\374\377\273\236\371\236PE\30\236\371\236\243\255X\342\300\305"
|
||||
"\236\371\236my\36\377\377\377\255\235Q\236\371\236\314\242\233tm\36\236\371"
|
||||
"\236\304\237\240\236\371\236\377\377\306\377\340\256{a\36\304wB~\270~\377"
|
||||
"\377\311\236\371\236\273\254\244\323a:\323a:\377\377\303my\36\236\371\236"
|
||||
"\314\330\230\236\371\236\243\255X\313\332\302\377\377\377\244\2102\377\377"
|
||||
"\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362"
|
||||
"\375\360\377\377\377\377\377\377\377\377\377P\3342\377\377\377\346\371\342"
|
||||
"\377\377\377\377\377\377\\\3202\377\377\377\335\364\323\377\377\377\377\377"
|
||||
"\377h\3042\377\377\377\325\355\305\377\377\377\377\377\377\377\377\377t\270"
|
||||
"2\317\344\266\377\377\377\377\377\377\377\377\377O\247\36\236\371\236\222"
|
||||
"\326p\332\377\264\236\371\236V\234\36\236\371\236\226\312g\236\371\236\352"
|
||||
"\377\267\236\371\236^\220\36\234\275`\236\371\236\374\377\273\236\371\236"
|
||||
"e\204\36\236\371\236\243\255X\377\377\276\236\371\236my\36\236\371\236\255"
|
||||
"\235Q\236\371\236\377\377\302tm\36\236\371\236\270\212I\236\371\236\377\377"
|
||||
"\306\236\371\236{a\36\304wB\304wB\377\377\311\236\371\236\203U\36\236\371"
|
||||
"\236\323a:\236\371\236my\36\236\371\236\377\377\276\377\377\276\377\377\377"
|
||||
"\307\260|\377\377\377\377\377\377\244\2102\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377D\3502\362\375\360\377\377\377\377\377\377\377\377\377P\334"
|
||||
"2\377\377\377\346\371\342\377\377\377\377\377\377\\\3202\377\377\377\335"
|
||||
"\364\323\377\377\377\377\377\377\377\377\377h\3042\377\377\377\325\355\305"
|
||||
"\377\377\377\377\377\377t\2702\377\377\377\317\344\266\377\377\377\377\377"
|
||||
"\377\236\371\236O\247\36\222\326p\236\371\236\332\377\264\236\371\236V\234"
|
||||
"\36\236\371\236\226\312g\236\371\236\352\377\267^\220\36\236\371\236\234"
|
||||
"\275`\236\371\236\374\377\273\236\371\236e\204\36\236\371\236\243\255X\377"
|
||||
"\377\276\236\371\236my\36\236\371\236\255\235Q\236\371\236\377\377\302tm"
|
||||
"\36tm\36\270\212I\236\371\236\377\377\306\236\371\236{a\36\236\371\236\304"
|
||||
"wB\377\377\311\377\377\311\203U\36\236\371\236\323a:\236\371\236my\36\236"
|
||||
"\371\236\236\371\236\377\377\377\377\377\377\307\260|\307\260|\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362\375\360\330\22"
|
||||
"\330\377\377\377\377\377\377]\306B\377\377\377\346\371\342\377\377\377\377"
|
||||
"\377\377\377\377\377M$*\335\364\323\377\377\377\366\324\366\377\377\377h"
|
||||
"\3042\377\377\377\325\355\305\377\377\377\330H\330\377\377\377t\2702\321"
|
||||
"\264\300\377\377\377\377\377\377\352\377\352O\247\36\236\371\236{S^\236\371"
|
||||
"\236\332\377\264\266\274\266V\234\36\226\312g\377\377\377\352\377\267\236"
|
||||
"\371\236OG\31\236\371\236\234\275`\274\274\274\374\377\273\236\371\236\336"
|
||||
"\325\227\243\255X\236\371\236\330\231\240\236\371\236my\36\302\300\302\255"
|
||||
"\235Q\236\371\236\377\377\377\236\371\236tm\36\233a=\236\371\236\377\377"
|
||||
"\306\310\314\310{a\36\236\371\236\377\377\351\236\371\236\377\377\311nE\31"
|
||||
"\203U\36\323a:\326\304\276my\36my\36\377\377\377\377\377\377\377\377\377"
|
||||
"\330\352\330\307\260|\377\377\377\377\377\377\377\377\377\377\377\377D\350"
|
||||
"2\377\377\377\362\375\360\377\377\377\377\377\377P\3342\377\377\377\346\371"
|
||||
"\342\377\377\377\377\377\377\377\377\377\\\3202\377\377\377\335\364\323\377"
|
||||
"\377\377\377\377\377\377\377\377h\3042\325\355\305\377\377\377\377\377\377"
|
||||
"\377\377\377t\2702\377\377\377\317\344\266\377\377\377\377\377\377\377\377"
|
||||
"\377\200\2542\377\377\377\312\332\250\377\377\377\377\377\377\214\2402\377"
|
||||
"\377\377\310\316\231\377\377\377\377\377\377\377\377\377\230\2242\377\377"
|
||||
"\377\307\300\213\377\377\377\377\377\377\244\2102\377\377\377\307\260|\377"
|
||||
"\377\377\377\377\377\377\377\377\260|2\377\377\377\312\237n\377\377\377\377"
|
||||
"\377\377\377\377\377\274p2\316\214_\316\214_\377\377\377\377\377\377\310"
|
||||
"d2\377\377\377\323xQ\377\377\377\377\377\377\377\377\377\324X2\377\377\377"
|
||||
"\333bB\377\377\377\260|2\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362\375"
|
||||
"\360\377\377\377\377\377\377P\3342\377\377\377\346\371\342\377\377\377\377"
|
||||
"\377\377\377\377\377\\\3202\377\377\377\335\364\323\377\377\377\377\377\377"
|
||||
"\377\377\377h\3042\377\377\377\325\355\305\377\377\377\377\377\377\377\377"
|
||||
"\377t\2702\317\344\266\377\377\377\377\377\377\377\377\377\200\2542\377\377"
|
||||
"\377\312\332\250\377\377\377\377\377\377\377\377\377\214\2402\377\377\377"
|
||||
"\310\316\231\377\377\377\377\377\377\377\377\377\230\2242\377\377\377\307"
|
||||
"\300\213\377\377\377\377\377\377\244\2102\377\377\377\307\260|\377\377\377"
|
||||
"\377\377\377\377\377\377\260|2\377\377\377\312\237n\377\377\377\377\377\377"
|
||||
"\377\377\377\274p2\377\377\377\316\214_\377\377\377\377\377\377\310d2\310"
|
||||
"d2\323xQ\377\377\377\377\377\377\377\377\377\324X2\377\377\377\333bB\377"
|
||||
"\377\377\260|2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\344\11\344D\3502\377\377\377\360\354\357\377\377\377\377\377"
|
||||
"\377\377\377\377P\3342\377\377\377\315#\312\377\377\377\377\377\377s\262"
|
||||
"Q\377\377\377\335\364\323\377\377\377\377\377\377\377\377\377\\0,\377\377"
|
||||
"\377\325\355\305\367\313\367\377\377\377\377\377\377\274\321z\377\377\377"
|
||||
"\317\344\266\344Z\344\377\377\377\377\377\377\246\217v\377\377\377\312\332"
|
||||
"\250\377\377\377\377\377\377\377\377\377}I,\377\377\377\310\316\231\361\277"
|
||||
"\361\377\377\377\230\2242\377\377\377\307\300\213\377\377\377\344\220\344"
|
||||
"\377\377\377\244\2102\356\301\356\307\260|\377\377\377\377\377\377\377\377"
|
||||
"\377\260|2\344\253\344\312\237n\377\377\377\353\312\353\377\377\377\274p"
|
||||
"2\377\377\377\316\214_\377\377\377\344\306\344\377\377\377\310d2\340\276"
|
||||
"\310\323xQ\377\377\377\377\377\377\324X2\324X2\303V;\333bB\260|2\337\340"
|
||||
"\325\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\3502\377"
|
||||
"\377\377\362\375\360\377\377\377\377\377\377\377\377\377P\3342\377\377\377"
|
||||
"\346\371\342\377\377\377\377\377\377\377\377\377\\\3202\377\377\377\335\364"
|
||||
"\323\377\377\377\377\377\377\377\377\377h\3042\377\377\377\325\355\305\377"
|
||||
"\377\377\377\377\377\377\377\377t\2702\317\344\266\377\377\377\377\377\377"
|
||||
"\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\377\377\377\377"
|
||||
"\377\377\214\2402\377\377\377\310\316\231\377\377\377\377\377\377\377\377"
|
||||
"\377\230\2242\377\377\377\307\300\213\377\377\377\377\377\377\377\377\377"
|
||||
"\244\2102\377\377\377\307\260|\377\377\377\377\377\377\377\377\377\260|2"
|
||||
"\377\377\377\312\237n\377\377\377\377\377\377\377\377\377\274p2\377\377\377"
|
||||
"\316\214_\377\377\377\377\377\377\377\377\377\310d2\377\377\377\323xQ\377"
|
||||
"\377\377\377\377\377\377\377\377\324X2\377\377\377\333bB\377\377\377\260"
|
||||
"|2\377\377\377\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362"
|
||||
"\375\360\377\377\377\377\377\377\377\377\377P\3342\377\377\377\346\371\342"
|
||||
"\377\377\377\377\377\377\377\377\377\\\3202\377\377\377\335\364\323\377\377"
|
||||
"\377\377\377\377\377\377\377h\3042\377\377\377\325\355\305\377\377\377\377"
|
||||
"\377\377\377\377\377t\2702\377\377\377\317\344\266\377\377\377\377\377\377"
|
||||
"\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\377\377\377\377"
|
||||
"\377\377\214\2402\377\377\377\310\316\231\377\377\377\377\377\377\377\377"
|
||||
"\377\230\2242\377\377\377\307\300\213\377\377\377\377\377\377\377\377\377"
|
||||
"\244\2102\377\377\377\307\260|\377\377\377\377\377\377\377\377\377\260|2"
|
||||
"\377\377\377\312\237n\377\377\377\377\377\377\377\377\377\274p2\377\377\377"
|
||||
"\316\214_\377\377\377\377\377\377\377\377\377\310d2\377\377\377\323xQ\377"
|
||||
"\377\377\377\377\377\377\377\377\324X2\377\377\377\333bB\377\377\377",
|
||||
};
|
||||
|
|
@ -1,172 +0,0 @@
|
|||
/**
|
||||
* Automated SDL platform test.
|
||||
*
|
||||
* Based off of testplatform.c.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include "SDL.h"
|
||||
#include "SDL_endian.h"
|
||||
#include "SDL_cpuinfo.h"
|
||||
#include "../SDL_at.h"
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes.
|
||||
*/
|
||||
static int plat_testSize( size_t sizeoftype, size_t hardcodetype );
|
||||
static void plat_testTypes (void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Test size.
|
||||
*
|
||||
* @note Watcom C flags these as Warning 201: "Unreachable code" if you just
|
||||
* compare them directly, so we push it through a function to keep the
|
||||
* compiler quiet. --ryan.
|
||||
*/
|
||||
static int plat_testSize( size_t sizeoftype, size_t hardcodetype )
|
||||
{
|
||||
return sizeoftype != hardcodetype;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests type size.
|
||||
*/
|
||||
static void plat_testTypes (void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
SDL_ATbegin( "Type size" );
|
||||
|
||||
ret = plat_testSize( sizeof(Uint8), 1 );
|
||||
if (SDL_ATvassert( ret == 0, "sizeof(Uint8) = %lu instead of 1", sizeof(Uint8) ))
|
||||
return;
|
||||
|
||||
ret = plat_testSize( sizeof(Uint16), 2 );
|
||||
if (SDL_ATvassert( ret == 0, "sizeof(Uint16) = %lu instead of 2", sizeof(Uint16) ))
|
||||
return;
|
||||
|
||||
ret = plat_testSize( sizeof(Uint32), 4 );
|
||||
if (SDL_ATvassert( ret == 0, "sizeof(Uint32) = %lu instead of 4", sizeof(Uint32) ))
|
||||
return;
|
||||
|
||||
#ifdef SDL_HAS_64BIT_TYPE
|
||||
ret = plat_testSize( sizeof(Uint64), 8 );
|
||||
if (SDL_ATvassert( ret == 0, "sizeof(Uint64) = %lu instead of 8", sizeof(Uint64) ))
|
||||
return;
|
||||
#endif /* SDL_HAS_64BIT_TYPE */
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests platform endianness.
|
||||
*/
|
||||
static void plat_testEndian (void)
|
||||
{
|
||||
Uint16 value = 0x1234;
|
||||
int real_byteorder;
|
||||
Uint16 value16 = 0xCDAB;
|
||||
Uint16 swapped16 = 0xABCD;
|
||||
Uint32 value32 = 0xEFBEADDE;
|
||||
Uint32 swapped32 = 0xDEADBEEF;
|
||||
#ifdef SDL_HAS_64BIT_TYPE
|
||||
Uint64 value64, swapped64;
|
||||
value64 = 0xEFBEADDE;
|
||||
value64 <<= 32;
|
||||
value64 |= 0xCDAB3412;
|
||||
swapped64 = 0x1234ABCD;
|
||||
swapped64 <<= 32;
|
||||
swapped64 |= 0xDEADBEEF;
|
||||
#endif
|
||||
|
||||
SDL_ATbegin( "Endianness" );
|
||||
|
||||
/* Test endianness. */
|
||||
if ((*((char *) &value) >> 4) == 0x1) {
|
||||
real_byteorder = SDL_BIG_ENDIAN;
|
||||
} else {
|
||||
real_byteorder = SDL_LIL_ENDIAN;
|
||||
}
|
||||
if (SDL_ATvassert( real_byteorder == SDL_BYTEORDER,
|
||||
"Machine detected as %s endian but appears to be %s endian.",
|
||||
(SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big",
|
||||
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" ))
|
||||
return;
|
||||
|
||||
/* Test 16 swap. */
|
||||
if (SDL_ATvassert( SDL_Swap16(value16) == swapped16,
|
||||
"16 bit swapped incorrectly: 0x%X => 0x%X",
|
||||
value16, SDL_Swap16(value16) ))
|
||||
return;
|
||||
|
||||
/* Test 32 swap. */
|
||||
if (SDL_ATvassert( SDL_Swap32(value32) == swapped32,
|
||||
"32 bit swapped incorrectly: 0x%X => 0x%X",
|
||||
value32, SDL_Swap32(value32) ))
|
||||
return;
|
||||
|
||||
#ifdef SDL_HAS_64BIT_TYPE
|
||||
/* Test 64 swap. */
|
||||
if (SDL_ATvassert( SDL_Swap64(value64) == swapped64,
|
||||
#ifdef _MSC_VER
|
||||
"64 bit swapped incorrectly: 0x%I64X => 0x%I64X",
|
||||
#else
|
||||
"64 bit swapped incorrectly: 0x%llX => 0x%llX",
|
||||
#endif
|
||||
value64, SDL_Swap64(value64) ))
|
||||
return;
|
||||
#endif
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Platform test entrypoint.
|
||||
*/
|
||||
#ifdef TEST_STANDALONE
|
||||
int main( int argc, const char *argv[] )
|
||||
{
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#else /* TEST_STANDALONE */
|
||||
int test_platform (void)
|
||||
{
|
||||
#endif /* TEST_STANDALONE */
|
||||
|
||||
SDL_ATinit( "Platform" );
|
||||
|
||||
/* Debug information. */
|
||||
SDL_ATprintVerbose( 1, "%s System detected\n", SDL_GetPlatform() );
|
||||
SDL_ATprintVerbose( 1, "System is %s endian\n",
|
||||
#ifdef SDL_LIL_ENDIAN
|
||||
"little"
|
||||
#else
|
||||
"big"
|
||||
#endif
|
||||
);
|
||||
SDL_ATprintVerbose( 1, "CPU count: %d\n", SDL_GetCPUCount());
|
||||
SDL_ATprintVerbose( 1, "Available extensions:\n" );
|
||||
SDL_ATprintVerbose( 1, " RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " MMX %s\n", SDL_HasMMX()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " SSE %s\n", SDL_HasSSE()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected" );
|
||||
SDL_ATprintVerbose( 1, " SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected" );
|
||||
|
||||
plat_testTypes();
|
||||
plat_testEndian();
|
||||
|
||||
return SDL_ATfinish();
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_PLATFORM
|
||||
# define _TEST_PLATFORM
|
||||
|
||||
|
||||
int test_platform (void);
|
||||
|
||||
|
||||
#endif /* _TEST_PLATFORM */
|
||||
|
|
@ -1,156 +0,0 @@
|
|||
/**
|
||||
* Automated SDL rect test.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include "SDL_rect.h"
|
||||
#include "../SDL_at.h"
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes.
|
||||
*/
|
||||
static void rect_testIntersectRectAndLine (void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests SDL_IntersectRectAndLine()
|
||||
*/
|
||||
static void rect_testIntersectRectAndLine (void)
|
||||
{
|
||||
SDL_Rect rect = { 0, 0, 32, 32 };
|
||||
int x1, y1;
|
||||
int x2, y2;
|
||||
SDL_bool clipped;
|
||||
|
||||
SDL_ATbegin( "IntersectRectAndLine" );
|
||||
|
||||
x1 = -10;
|
||||
y1 = 0;
|
||||
x2 = -10;
|
||||
y2 = 31;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( !clipped &&
|
||||
x1 == -10 && y1 == 0 && x2 == -10 && y2 == 31,
|
||||
"line outside to the left was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 40;
|
||||
y1 = 0;
|
||||
x2 = 40;
|
||||
y2 = 31;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( !clipped &&
|
||||
x1 == 40 && y1 == 0 && x2 == 40 && y2 == 31,
|
||||
"line outside to the right was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 0;
|
||||
y1 = -10;
|
||||
x2 = 31;
|
||||
y2 = -10;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( !clipped &&
|
||||
x1 == 0 && y1 == -10 && x2 == 31 && y2 == -10,
|
||||
"line outside above was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 0;
|
||||
y1 = 40;
|
||||
x2 = 31;
|
||||
y2 = 40;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( !clipped &&
|
||||
x1 == 0 && y1 == 40 && x2 == 31 && y2 == 40,
|
||||
"line outside below was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 0;
|
||||
y1 = 0;
|
||||
x2 = 31;
|
||||
y2 = 31;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
|
||||
"line fully inside rect was clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = -10;
|
||||
y1 = 15;
|
||||
x2 = 40;
|
||||
y2 = 15;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 0 && y1 == 15 && x2 == 31 && y2 == 15,
|
||||
"horizontal line rect was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = -32;
|
||||
y1 = -32;
|
||||
x2 = 63;
|
||||
y2 = 63;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
|
||||
"diagonal line to lower right was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 63;
|
||||
y1 = 63;
|
||||
x2 = -32;
|
||||
y2 = -32;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 31 && y1 == 31 && x2 == 0 && y2 == 0,
|
||||
"diagonal line to upper left was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = 63;
|
||||
y1 = -32;
|
||||
x2 = -32;
|
||||
y2 = 63;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 31 && y1 == 0 && x2 == 0 && y2 == 31,
|
||||
"diagonal line to lower left was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
x1 = -32;
|
||||
y1 = 63;
|
||||
x2 = 63;
|
||||
y2 = -32;
|
||||
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
||||
SDL_ATvassert( clipped &&
|
||||
x1 == 0 && y1 == 31 && x2 == 31 && y2 == 0,
|
||||
"diagonal line to upper right was incorrectly clipped: %d,%d - %d,%d",
|
||||
x1, y1, x2, y2);
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Rect test entrypoint.
|
||||
*/
|
||||
#ifdef TEST_STANDALONE
|
||||
int main( int argc, const char *argv[] )
|
||||
{
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#else /* TEST_STANDALONE */
|
||||
int test_rect (void)
|
||||
{
|
||||
#endif /* TEST_STANDALONE */
|
||||
|
||||
SDL_ATinit( "Rect" );
|
||||
|
||||
rect_testIntersectRectAndLine();
|
||||
|
||||
return SDL_ATfinish();
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_RECT
|
||||
# define _TEST_RECT
|
||||
|
||||
|
||||
int test_rect (void);
|
||||
|
||||
|
||||
#endif /* _TEST_RECT */
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_RENDER
|
||||
# define _TEST_RENDER
|
||||
|
||||
|
||||
int test_render (void);
|
||||
|
||||
|
||||
#endif /* _TEST_RENDER */
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include "SDL.h"
|
||||
|
||||
#ifndef TestSupportRWops_h
|
||||
#define TestSupportRWops_h
|
||||
|
||||
FILE* TestSupportRWops_OpenFPFromReadDir(const char *file, const char *mode);
|
||||
FILE* TestSupportRWops_OpenFPFromWriteDir(const char *file, const char *mode);
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromReadDir(const char *file, const char *mode);
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromWriteDir(const char *file, const char *mode);
|
||||
|
||||
|
||||
#endif
|
|
@ -1,89 +0,0 @@
|
|||
#import "TestSupportRWops.h"
|
||||
#import <Foundation/Foundation.h>
|
||||
#include "SDL.h"
|
||||
|
||||
/* For proper OS X applications, the resources are contained inside the application bundle.
|
||||
So the strategy is to first check the application bundle for the file, then fallback to the current working directory.
|
||||
Note: One additional corner-case is if the resource is in a framework's resource bundle instead of the app.
|
||||
We might want to use bundle identifiers, e.g. org.libsdl.sdl to get the bundle for the framework,
|
||||
but we would somehow need to know what the bundle identifiers we need to search are.
|
||||
Conversely, write directories are usually not in the bundles. This implementation uses NSTemporaryDirectory,
|
||||
but consider Preferences, Application Support, Documents, etc.
|
||||
Also, note the bundle layouts are different for iPhone and Mac.
|
||||
*/
|
||||
|
||||
const char* RWOPS_READ = "rwops/read";
|
||||
const char* RWOPS_WRITE = "write";
|
||||
|
||||
|
||||
FILE* TestSupportRWops_OpenFPFromReadDir(const char *file, const char *mode)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
|
||||
// If the file mode is writable, skip all the bundle stuff because generally the bundle is read-only.
|
||||
if(strcmp("r", mode) && strcmp("rb", mode))
|
||||
{
|
||||
return fopen(file, mode);
|
||||
}
|
||||
|
||||
NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
|
||||
NSFileManager* file_manager = [NSFileManager defaultManager];
|
||||
NSString* resource_path = [[NSBundle mainBundle] resourcePath];
|
||||
|
||||
NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)];
|
||||
|
||||
NSString* full_path_with_file_to_try = [resource_path stringByAppendingPathComponent:ns_string_file_component];
|
||||
if([file_manager fileExistsAtPath:full_path_with_file_to_try])
|
||||
{
|
||||
fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
fp = fopen(file, mode);
|
||||
}
|
||||
|
||||
[autorelease_pool drain];
|
||||
|
||||
return fp;
|
||||
}
|
||||
|
||||
FILE* TestSupportRWops_OpenFPFromWriteDir(const char *file, const char *mode)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
|
||||
NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
NSFileManager* file_manager = [NSFileManager defaultManager];
|
||||
NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)];
|
||||
NSString* full_path_with_file_to_try = [NSTemporaryDirectory() stringByAppendingPathComponent:ns_string_file_component];
|
||||
|
||||
fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode);
|
||||
|
||||
[autorelease_pool drain];
|
||||
|
||||
return fp;
|
||||
}
|
||||
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromReadDir(const char *file, const char *mode)
|
||||
{
|
||||
return SDL_RWFromFile(file, mode);
|
||||
}
|
||||
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromWriteDir(const char *file, const char *mode)
|
||||
{
|
||||
SDL_RWops* rw = NULL;
|
||||
|
||||
NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
NSFileManager* file_manager = [NSFileManager defaultManager];
|
||||
NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)];
|
||||
NSString* full_path_with_file_to_try = [NSTemporaryDirectory() stringByAppendingPathComponent:ns_string_file_component];
|
||||
|
||||
rw = SDL_RWFromFile( [full_path_with_file_to_try fileSystemRepresentation], mode );
|
||||
|
||||
[autorelease_pool drain];
|
||||
return rw;
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
/* Generic implementation for file opening routines.
|
||||
* Customizations for specific platforms should go in alternative files.
|
||||
*/
|
||||
|
||||
// quiet windows compiler warnings
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
#include <stdio.h>
|
||||
#include "SDL.h"
|
||||
|
||||
const char* RWOPS_READ = "rwops/read";
|
||||
const char* RWOPS_WRITE = "rwops/write";
|
||||
|
||||
FILE* TestSupportRWops_OpenFPFromReadDir(const char *file, const char *mode)
|
||||
{
|
||||
return fopen(file, mode);
|
||||
}
|
||||
|
||||
FILE* TestSupportRWops_OpenFPFromWriteDir(const char *file, const char *mode)
|
||||
{
|
||||
return fopen(file, mode);
|
||||
}
|
||||
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromReadDir(const char *file, const char *mode)
|
||||
{
|
||||
return SDL_RWFromFile(file, mode);
|
||||
}
|
||||
|
||||
SDL_RWops* TestSupportRWops_OpenRWopsFromWriteDir(const char *file, const char *mode)
|
||||
{
|
||||
return SDL_RWFromFile(file, mode);
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
Hello World!
|
|
@ -1,272 +0,0 @@
|
|||
/**
|
||||
* Automated SDL_RWops test.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL.h"
|
||||
#include "../SDL_at.h"
|
||||
#include "TestSupportRWops.h"
|
||||
|
||||
/* Defined in TestSupportRWops implementation to allow flexibility. */
|
||||
extern const char* RWOPS_READ;
|
||||
extern const char* RWOPS_WRITE;
|
||||
|
||||
static const char hello_world[] = "Hello World!";
|
||||
|
||||
|
||||
/**
|
||||
* @brief Makes sure parameters work properly.
|
||||
*/
|
||||
static void rwops_testParam (void)
|
||||
{
|
||||
SDL_RWops *rwops;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "RWops Parameters" );
|
||||
|
||||
/* These should all fail. */
|
||||
rwops = SDL_RWFromFile(NULL, NULL);
|
||||
if (SDL_ATassert( "SDL_RWFromFile(NULL, NULL) worked", rwops == NULL ))
|
||||
return;
|
||||
rwops = SDL_RWFromFile(NULL, "ab+");
|
||||
if (SDL_ATassert( "SDL_RWFromFile(NULL, \"ab+\") worked", rwops == NULL ))
|
||||
return;
|
||||
rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj");
|
||||
if (SDL_ATassert( "SDL_RWFromFile(NULL, \"sldfkjsldkfj\") worked", rwops == NULL ))
|
||||
return;
|
||||
rwops = SDL_RWFromFile("something", "");
|
||||
if (SDL_ATassert( "SDL_RWFromFile(\"something\", \"\") worked", rwops == NULL ))
|
||||
return;
|
||||
rwops = SDL_RWFromFile("something", NULL);
|
||||
if (SDL_ATassert( "SDL_RWFromFile(\"something\", NULL) worked", rwops == NULL ))
|
||||
return;
|
||||
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Does a generic rwops test.
|
||||
*
|
||||
* RWops should have "Hello World!" in it already if write is disabled.
|
||||
*
|
||||
* @param write Test writing also.
|
||||
* @return 1 if an assert is failed.
|
||||
*/
|
||||
static int rwops_testGeneric( SDL_RWops *rw, int write )
|
||||
{
|
||||
char buf[sizeof(hello_world)];
|
||||
int i;
|
||||
|
||||
/* Set to start. */
|
||||
i = SDL_RWseek( rw, 0, RW_SEEK_SET );
|
||||
if (SDL_ATvassert( i == 0,
|
||||
"Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
|
||||
i, 0 ))
|
||||
return 1;
|
||||
|
||||
/* Test write. */
|
||||
i = SDL_RWwrite( rw, hello_world, sizeof(hello_world)-1, 1 );
|
||||
if (write) {
|
||||
if (SDL_ATassert( "Writing with SDL_RWwrite (failed to write)", i == 1 ))
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
if (SDL_ATassert( "Writing with SDL_RWwrite (wrote when shouldn't have)", i <= 0 ))
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Test seek. */
|
||||
i = SDL_RWseek( rw, 6, RW_SEEK_SET );
|
||||
if (SDL_ATvassert( i == 6,
|
||||
"Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
|
||||
i, 0 ))
|
||||
return 1;
|
||||
|
||||
/* Test seek. */
|
||||
i = SDL_RWseek( rw, 0, RW_SEEK_SET );
|
||||
if (SDL_ATvassert( i == 0,
|
||||
"Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
|
||||
i, 0 ))
|
||||
return 1;
|
||||
|
||||
/* Test read. */
|
||||
i = SDL_RWread( rw, buf, 1, sizeof(hello_world)-1 );
|
||||
if (SDL_ATassert( "Reading with SDL_RWread", i == sizeof(hello_world)-1 ))
|
||||
return 1;
|
||||
if (SDL_ATassert( "Memory read does not match memory written",
|
||||
SDL_memcmp( buf, hello_world, sizeof(hello_world)-1 ) == 0 ))
|
||||
return 1;
|
||||
|
||||
/* More seek tests. */
|
||||
i = SDL_RWseek( rw, -4, RW_SEEK_CUR );
|
||||
if (SDL_ATvassert( i == sizeof(hello_world)-5,
|
||||
"Seeking with SDL_RWseek (RW_SEEK_CUR): got %d, expected %d",
|
||||
i, sizeof(hello_world)-5 ))
|
||||
return 1;
|
||||
i = SDL_RWseek( rw, -1, RW_SEEK_END );
|
||||
if (SDL_ATvassert( i == sizeof(hello_world)-2,
|
||||
"Seeking with SDL_RWseek (RW_SEEK_END): got %d, expected %d",
|
||||
i, sizeof(hello_world)-2 ))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests opening from memory.
|
||||
*/
|
||||
static void rwops_testMem (void)
|
||||
{
|
||||
char mem[sizeof(hello_world)];
|
||||
SDL_RWops *rw;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "SDL_RWFromMem" );
|
||||
|
||||
/* Open. */
|
||||
rw = SDL_RWFromMem( mem, sizeof(hello_world)-1 );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromMem", rw != NULL ))
|
||||
return;
|
||||
|
||||
/* Run generic tests. */
|
||||
if (rwops_testGeneric( rw, 1 ))
|
||||
return;
|
||||
|
||||
/* Close. */
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
static const char const_mem[] = "Hello World!";
|
||||
/**
|
||||
* @brief Tests opening from memory.
|
||||
*/
|
||||
static void rwops_testConstMem (void)
|
||||
{
|
||||
SDL_RWops *rw;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "SDL_RWFromConstMem" );
|
||||
|
||||
/* Open. */
|
||||
rw = SDL_RWFromConstMem( const_mem, sizeof(const_mem)-1 );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromConstMem", rw != NULL ))
|
||||
return;
|
||||
|
||||
/* Run generic tests. */
|
||||
if (rwops_testGeneric( rw, 0 ))
|
||||
return;
|
||||
|
||||
/* Close. */
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests opening from memory.
|
||||
*/
|
||||
static void rwops_testFile (void)
|
||||
{
|
||||
SDL_RWops *rw;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "SDL_RWFromFile" );
|
||||
|
||||
/* Read test. */
|
||||
rw = TestSupportRWops_OpenRWopsFromReadDir( RWOPS_READ, "r" );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromFile RWOPS_READ", rw != NULL ))
|
||||
return;
|
||||
if (rwops_testGeneric( rw, 0 ))
|
||||
return;
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* Write test. */
|
||||
rw = TestSupportRWops_OpenRWopsFromWriteDir( RWOPS_WRITE, "w+" );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromFile RWOPS_WRITE", rw != NULL ))
|
||||
return;
|
||||
if (rwops_testGeneric( rw, 1 ))
|
||||
return;
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests opening from memory.
|
||||
*/
|
||||
static void rwops_testFP (void)
|
||||
{
|
||||
#ifdef HAVE_STDIO_H
|
||||
FILE *fp;
|
||||
SDL_RWops *rw;
|
||||
|
||||
/* Begin testcase. */
|
||||
SDL_ATbegin( "SDL_RWFromFP" );
|
||||
|
||||
/* Run read tests. */
|
||||
fp = TestSupportRWops_OpenFPFromReadDir( RWOPS_READ, "r" );
|
||||
if (SDL_ATassert( "Failed to open file 'WOPS_READ", fp != NULL))
|
||||
return;
|
||||
rw = SDL_RWFromFP( fp, 1 );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromFP", rw != NULL ))
|
||||
return;
|
||||
if (rwops_testGeneric( rw, 0 ))
|
||||
return;
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* Run write tests. */
|
||||
fp = TestSupportRWops_OpenFPFromWriteDir( RWOPS_WRITE, "w+" );
|
||||
if (SDL_ATassert( "Failed to open file RWOPS_WRITE", fp != NULL))
|
||||
return;
|
||||
rw = SDL_RWFromFP( fp, 1 );
|
||||
if (SDL_ATassert( "Opening memory with SDL_RWFromFP", rw != NULL ))
|
||||
return;
|
||||
if (rwops_testGeneric( rw, 1 ))
|
||||
return;
|
||||
SDL_FreeRW( rw );
|
||||
|
||||
/* End testcase. */
|
||||
SDL_ATend();
|
||||
#endif /* HAVE_STDIO_H */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Entry point.
|
||||
*/
|
||||
#ifdef TEST_STANDALONE
|
||||
int main( int argc, const char *argv[] )
|
||||
{
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#else /* TEST_STANDALONE */
|
||||
int test_rwops (void)
|
||||
{
|
||||
#endif /* TEST_STANDALONE */
|
||||
|
||||
SDL_ATinit( "SDL_RWops" );
|
||||
|
||||
rwops_testParam();
|
||||
rwops_testMem();
|
||||
rwops_testConstMem();
|
||||
rwops_testFile();
|
||||
rwops_testFP();
|
||||
|
||||
return SDL_ATfinish();
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_RWOPS
|
||||
# define _TEST_RWOPS
|
||||
|
||||
|
||||
int test_rwops (void);
|
||||
|
||||
|
||||
#endif /* _TEST_RWOPS */
|
||||
|
|
@ -1,449 +0,0 @@
|
|||
/**
|
||||
* Automated SDL_Surface test.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#include "SDL.h"
|
||||
#include "SDL_surface.h"
|
||||
#include "SDL_video.h"
|
||||
#include "../SDL_at.h"
|
||||
|
||||
#include "../common/common.h"
|
||||
|
||||
|
||||
/*
|
||||
* Pull in images for testcases.
|
||||
*/
|
||||
#include "../common/images.h"
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes.
|
||||
*/
|
||||
/* Testcases. */
|
||||
static void surface_testLoad( SDL_Surface *testsur );
|
||||
static void surface_testBlit( SDL_Surface *testsur );
|
||||
static int surface_testBlitBlendMode( SDL_Surface *testsur, SDL_Surface *face, int mode );
|
||||
static void surface_testBlitBlend( SDL_Surface *testsur );
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests sprite loading.
|
||||
*/
|
||||
static void surface_testLoad( SDL_Surface *testsur )
|
||||
{
|
||||
int ret;
|
||||
SDL_Surface *face, *rface;
|
||||
|
||||
SDL_ATbegin( "Load Test" );
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Create the blit surface. */
|
||||
#ifdef __APPLE__
|
||||
face = SDL_LoadBMP("icon.bmp");
|
||||
#else
|
||||
face = SDL_LoadBMP("../icon.bmp");
|
||||
#endif
|
||||
|
||||
if (SDL_ATassert( "SDL_CreateLoadBmp", face != NULL))
|
||||
return;
|
||||
|
||||
/* Set transparent pixel as the pixel at (0,0) */
|
||||
if (face->format->palette) {
|
||||
ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels);
|
||||
if (SDL_ATassert( "SDL_SetColorKey", ret == 0))
|
||||
return;
|
||||
}
|
||||
|
||||
/* Convert to 32 bit to compare. */
|
||||
rface = SDL_ConvertSurface( face, testsur->format, 0 );
|
||||
if (SDL_ATassert( "SDL_ConvertSurface", rface != NULL))
|
||||
return;
|
||||
|
||||
/* See if it's the same. */
|
||||
if (SDL_ATassert( "Primitives output not the same.",
|
||||
surface_compare( rface, &img_face, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clean up. */
|
||||
SDL_FreeSurface( rface );
|
||||
SDL_FreeSurface( face );
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests some blitting routines.
|
||||
*/
|
||||
static void surface_testBlit( SDL_Surface *testsur )
|
||||
{
|
||||
int ret;
|
||||
SDL_Rect rect;
|
||||
SDL_Surface *face;
|
||||
int i, j, ni, nj;
|
||||
|
||||
SDL_ATbegin( "Blit Tests" );
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Create face surface. */
|
||||
face = SDL_CreateRGBSurfaceFrom( (void*)img_face.pixel_data,
|
||||
img_face.width, img_face.height, 32, img_face.width*4,
|
||||
#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
|
||||
0xff000000, /* Red bit mask. */
|
||||
0x00ff0000, /* Green bit mask. */
|
||||
0x0000ff00, /* Blue bit mask. */
|
||||
0x000000ff /* Alpha bit mask. */
|
||||
#else
|
||||
0x000000ff, /* Red bit mask. */
|
||||
0x0000ff00, /* Green bit mask. */
|
||||
0x00ff0000, /* Blue bit mask. */
|
||||
0xff000000 /* Alpha bit mask. */
|
||||
#endif
|
||||
);
|
||||
if (SDL_ATassert( "SDL_CreateRGBSurfaceFrom", face != NULL))
|
||||
return;
|
||||
|
||||
/* Constant values. */
|
||||
rect.w = face->w;
|
||||
rect.h = face->h;
|
||||
ni = testsur->w - face->w;
|
||||
nj = testsur->h - face->h;
|
||||
|
||||
/* Loop blit. */
|
||||
for (j=0; j <= nj; j+=4) {
|
||||
for (i=0; i <= ni; i+=4) {
|
||||
/* Blitting. */
|
||||
rect.x = i;
|
||||
rect.y = j;
|
||||
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
|
||||
if (SDL_ATassert( "SDL_BlitSurface", ret == 0))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* See if it's the same. */
|
||||
if (SDL_ATassert( "Blitting output not the same (normal blit).",
|
||||
surface_compare( testsur, &img_blit, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Test blitting with colour mod. */
|
||||
for (j=0; j <= nj; j+=4) {
|
||||
for (i=0; i <= ni; i+=4) {
|
||||
/* Set colour mod. */
|
||||
ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceColorMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Blitting. */
|
||||
rect.x = i;
|
||||
rect.y = j;
|
||||
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
|
||||
if (SDL_ATassert( "SDL_BlitSurface", ret == 0))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* See if it's the same. */
|
||||
if (SDL_ATassert( "Blitting output not the same (using SDL_SetSurfaceColorMod).",
|
||||
surface_compare( testsur, &img_blitColour, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Restore colour. */
|
||||
ret = SDL_SetSurfaceColorMod( face, 255, 255, 255 );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceColorMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Test blitting with colour mod. */
|
||||
for (j=0; j <= nj; j+=4) {
|
||||
for (i=0; i <= ni; i+=4) {
|
||||
/* Set alpha mod. */
|
||||
ret = SDL_SetSurfaceAlphaMod( face, (255/ni)*i );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceAlphaMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Blitting. */
|
||||
rect.x = i;
|
||||
rect.y = j;
|
||||
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
|
||||
if (SDL_ATassert( "SDL_BlitSurface", ret == 0))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* See if it's the same. */
|
||||
if (SDL_ATassert( "Blitting output not the same (using SDL_SetSurfaceAlphaMod).",
|
||||
surface_compare( testsur, &img_blitAlpha, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clean up. */
|
||||
SDL_FreeSurface( face );
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests a blend mode.
|
||||
*/
|
||||
static int surface_testBlitBlendMode( SDL_Surface *testsur, SDL_Surface *face, int mode )
|
||||
{
|
||||
int ret;
|
||||
int i, j, ni, nj;
|
||||
SDL_Rect rect;
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return 1;
|
||||
|
||||
/* Steps to take. */
|
||||
ni = testsur->w - face->w;
|
||||
nj = testsur->h - face->h;
|
||||
|
||||
/* Constant values. */
|
||||
rect.w = face->w;
|
||||
rect.h = face->h;
|
||||
|
||||
/* Test blend mode. */
|
||||
for (j=0; j <= nj; j+=4) {
|
||||
for (i=0; i <= ni; i+=4) {
|
||||
/* Set blend mode. */
|
||||
ret = SDL_SetSurfaceBlendMode( face, mode );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceBlendMode", ret == 0))
|
||||
return 1;
|
||||
|
||||
/* Blitting. */
|
||||
rect.x = i;
|
||||
rect.y = j;
|
||||
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
|
||||
if (SDL_ATassert( "SDL_BlitSurface", ret == 0))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests some more blitting routines.
|
||||
*/
|
||||
static void surface_testBlitBlend( SDL_Surface *testsur )
|
||||
{
|
||||
int ret;
|
||||
SDL_Rect rect;
|
||||
SDL_Surface *face;
|
||||
int i, j, ni, nj;
|
||||
int mode;
|
||||
|
||||
SDL_ATbegin( "Blit Blending Tests" );
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Create the blit surface. */
|
||||
face = SDL_CreateRGBSurfaceFrom( (void*)img_face.pixel_data,
|
||||
img_face.width, img_face.height, 32, img_face.width*4,
|
||||
#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
|
||||
0xff000000, /* Red bit mask. */
|
||||
0x00ff0000, /* Green bit mask. */
|
||||
0x0000ff00, /* Blue bit mask. */
|
||||
0x000000ff /* Alpha bit mask. */
|
||||
#else
|
||||
0x000000ff, /* Red bit mask. */
|
||||
0x0000ff00, /* Green bit mask. */
|
||||
0x00ff0000, /* Blue bit mask. */
|
||||
0xff000000 /* Alpha bit mask. */
|
||||
#endif
|
||||
);
|
||||
if (SDL_ATassert( "SDL_CreateRGBSurfaceFrom", face != NULL))
|
||||
return;
|
||||
|
||||
/* Set alpha mod. */
|
||||
ret = SDL_SetSurfaceAlphaMod( face, 100 );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceAlphaMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Steps to take. */
|
||||
ni = testsur->w - face->w;
|
||||
nj = testsur->h - face->h;
|
||||
|
||||
/* Constant values. */
|
||||
rect.w = face->w;
|
||||
rect.h = face->h;
|
||||
|
||||
/* Test None. */
|
||||
if (surface_testBlitBlendMode( testsur, face, SDL_BLENDMODE_NONE ))
|
||||
return;
|
||||
if (SDL_ATassert( "Blitting blending output not the same (using SDL_BLENDMODE_NONE).",
|
||||
surface_compare( testsur, &img_blendNone, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Test Blend. */
|
||||
if (surface_testBlitBlendMode( testsur, face, SDL_BLENDMODE_BLEND ))
|
||||
return;
|
||||
if (SDL_ATassert( "Blitting blending output not the same (using SDL_BLENDMODE_BLEND).",
|
||||
surface_compare( testsur, &img_blendBlend, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Test Add. */
|
||||
if (surface_testBlitBlendMode( testsur, face, SDL_BLENDMODE_ADD ))
|
||||
return;
|
||||
if (SDL_ATassert( "Blitting blending output not the same (using SDL_BLENDMODE_ADD).",
|
||||
surface_compare( testsur, &img_blendAdd, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Test Mod. */
|
||||
if (surface_testBlitBlendMode( testsur, face, SDL_BLENDMODE_MOD ))
|
||||
return;
|
||||
if (SDL_ATassert( "Blitting blending output not the same (using SDL_BLENDMODE_MOD).",
|
||||
surface_compare( testsur, &img_blendMod, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clear surface. */
|
||||
ret = SDL_FillRect( testsur, NULL,
|
||||
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
|
||||
if (SDL_ATassert( "SDL_FillRect", ret == 0))
|
||||
return;
|
||||
|
||||
/* Loop blit. */
|
||||
for (j=0; j <= nj; j+=4) {
|
||||
for (i=0; i <= ni; i+=4) {
|
||||
|
||||
/* Set colour mod. */
|
||||
ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceColorMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Set alpha mod. */
|
||||
ret = SDL_SetSurfaceAlphaMod( face, (100/ni)*i );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceAlphaMod", ret == 0))
|
||||
return;
|
||||
|
||||
/* Crazy blending mode magic. */
|
||||
mode = (i/4*j/4) % 4;
|
||||
if (mode==0) mode = SDL_BLENDMODE_NONE;
|
||||
else if (mode==1) mode = SDL_BLENDMODE_BLEND;
|
||||
else if (mode==2) mode = SDL_BLENDMODE_ADD;
|
||||
else if (mode==3) mode = SDL_BLENDMODE_MOD;
|
||||
ret = SDL_SetSurfaceBlendMode( face, mode );
|
||||
if (SDL_ATassert( "SDL_SetSurfaceBlendMode", ret == 0))
|
||||
return;
|
||||
|
||||
/* Blitting. */
|
||||
rect.x = i;
|
||||
rect.y = j;
|
||||
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
|
||||
if (SDL_ATassert( "SDL_BlitSurface", ret == 0))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check to see if matches. */
|
||||
if (SDL_ATassert( "Blitting blending output not the same (using SDL_BLEND_*).",
|
||||
surface_compare( testsur, &img_blendAll, 0 )==0 ))
|
||||
return;
|
||||
|
||||
/* Clean up. */
|
||||
SDL_FreeSurface( face );
|
||||
|
||||
SDL_ATend();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Runs all the tests on the surface.
|
||||
*
|
||||
* @param testsur Surface to run tests on.
|
||||
*/
|
||||
void surface_runTests( SDL_Surface *testsur )
|
||||
{
|
||||
/* Software surface blitting. */
|
||||
surface_testBlit( testsur );
|
||||
surface_testBlitBlend( testsur );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Entry point.
|
||||
*/
|
||||
#ifdef TEST_STANDALONE
|
||||
int main( int argc, const char *argv[] )
|
||||
{
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
#else /* TEST_STANDALONE */
|
||||
int test_surface (void)
|
||||
{
|
||||
#endif /* TEST_STANDALONE */
|
||||
int ret;
|
||||
SDL_Surface *testsur;
|
||||
|
||||
SDL_ATinit( "SDL_Surface" );
|
||||
|
||||
SDL_ATbegin( "Initializing" );
|
||||
/* Initializes the SDL subsystems. */
|
||||
ret = SDL_Init(0);
|
||||
if (SDL_ATassert( "SDL_Init(0)", ret == 0))
|
||||
goto err;
|
||||
|
||||
/* Now run on the video mode. */
|
||||
ret = SDL_InitSubSystem( SDL_INIT_VIDEO );
|
||||
if (SDL_ATassert( "SDL_InitSubSystem( SDL_INIT_VIDEO )", ret == 0))
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* Surface on surface tests.
|
||||
*/
|
||||
/* Create the test surface. */
|
||||
testsur = SDL_CreateRGBSurface( 0, 80, 60, 32,
|
||||
RMASK, GMASK, BMASK, AMASK );
|
||||
if (SDL_ATassert( "SDL_CreateRGBSurface", testsur != NULL))
|
||||
goto err;
|
||||
SDL_ATend();
|
||||
/* Run surface on surface tests. */
|
||||
surface_testLoad( testsur );
|
||||
surface_runTests( testsur );
|
||||
/* Clean up. */
|
||||
SDL_FreeSurface( testsur );
|
||||
|
||||
/* Exit SDL. */
|
||||
SDL_Quit();
|
||||
|
||||
return SDL_ATfinish();
|
||||
|
||||
err:
|
||||
return SDL_ATfinish();
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Part of SDL test suite.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TEST_SURFACE
|
||||
# define _TEST_SURFACE
|
||||
|
||||
|
||||
int test_surface (void);
|
||||
|
||||
|
||||
#endif /* _TEST_SURFACE */
|
||||
|
|
@ -1,185 +0,0 @@
|
|||
/*
|
||||
* SDL test suite framework code.
|
||||
*
|
||||
* Written by Edgar Simo "bobbens"
|
||||
*
|
||||
* Released under Public Domain.
|
||||
*/
|
||||
|
||||
#include "SDL.h"
|
||||
#include "SDL_at.h"
|
||||
|
||||
#include "platform/platform.h"
|
||||
#include "rwops/rwops.h"
|
||||
#include "rect/rect.h"
|
||||
#include "surface/surface.h"
|
||||
#include "render/render.h"
|
||||
#include "audio/audio.h"
|
||||
|
||||
#if defined(WIN32)
|
||||
#define NO_GETOPT
|
||||
#endif
|
||||
#if defined(__QNXNTO__)
|
||||
#define NO_GETOPT_LONG 1
|
||||
#endif /* __QNXNTO__ */
|
||||
|
||||
#include <stdio.h> /* printf */
|
||||
#include <stdlib.h> /* exit */
|
||||
#ifndef NO_GETOPT
|
||||
#include <unistd.h> /* getopt */
|
||||
#if !defined(NO_GETOPT_LONG)
|
||||
#include <getopt.h> /* getopt_long */
|
||||
#endif /* !NO_GETOPT_LONG */
|
||||
#endif /* !NO_GETOPT */
|
||||
|
||||
|
||||
/*
|
||||
* Tests to run.
|
||||
*/
|
||||
static int run_manual = 0; /**< Run manual tests. */
|
||||
/* Manual. */
|
||||
/* Automatic. */
|
||||
static int run_platform = 1; /**< Run platform tests. */
|
||||
static int run_rwops = 1; /**< Run RWops tests. */
|
||||
static int run_rect = 1; /**< Run rect tests. */
|
||||
static int run_surface = 1; /**< Run surface tests. */
|
||||
static int run_render = 1; /**< Run render tests. */
|
||||
static int run_audio = 1; /**< Run audio tests. */
|
||||
|
||||
/*
|
||||
* Prototypes.
|
||||
*/
|
||||
static void print_usage( const char *name );
|
||||
static void parse_options( int argc, char *argv[] );
|
||||
|
||||
|
||||
/**
|
||||
* @brief Displays program usage.
|
||||
*/
|
||||
static void print_usage( const char *name )
|
||||
{
|
||||
printf("Usage: %s [OPTIONS]\n", name);
|
||||
printf("Options are:\n");
|
||||
printf(" -m, --manual enables tests that require user interaction\n");
|
||||
printf(" --noplatform do not run the platform tests\n");
|
||||
printf(" --norwops do not run the rwops tests\n");
|
||||
printf(" --norect do not run the rect tests\n");
|
||||
printf(" --nosurface do not run the surface tests\n");
|
||||
printf(" --norender do not run the render tests\n");
|
||||
printf(" --noaudio do not run the audio tests\n");
|
||||
printf(" -v, --verbose increases verbosity level by 1 for each -v\n");
|
||||
printf(" -q, --quiet only displays errors\n");
|
||||
printf(" -h, --help display this message and exit\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handles the options.
|
||||
*/
|
||||
static void parse_options( int argc, char *argv[] )
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < argc; ++i) {
|
||||
const char *arg = argv[i];
|
||||
if (SDL_strcmp(arg, "-m") == 0 || SDL_strcmp(arg, "--manual") == 0) {
|
||||
run_manual = 1;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "-v") == 0 || SDL_strcmp(arg, "--verbose") == 0) {
|
||||
int level;
|
||||
SDL_ATgeti( SDL_AT_VERBOSE, &level );
|
||||
SDL_ATseti( SDL_AT_VERBOSE, level+1 );
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "-q") == 0 || SDL_strcmp(arg, "--quiet") == 0) {
|
||||
SDL_ATseti( SDL_AT_QUIET, 1 );
|
||||
SDL_setenv("SDL_ASSERT", "abort", 0);
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--noplatform") == 0) {
|
||||
run_platform = 0;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--norwops") == 0) {
|
||||
run_rwops = 0;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--norect") == 0) {
|
||||
run_rect = 0;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--nosurface") == 0) {
|
||||
run_surface = 0;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--norender") == 0) {
|
||||
run_render = 0;
|
||||
continue;
|
||||
}
|
||||
if (SDL_strcmp(arg, "--noaudio") == 0) {
|
||||
run_audio = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Print help and exit! */
|
||||
print_usage( argv[0] );
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Main entry point.
|
||||
*/
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
int failed;
|
||||
const char *rev;
|
||||
SDL_version ver;
|
||||
|
||||
/* Get options. */
|
||||
parse_options( argc, argv );
|
||||
|
||||
/* Defaults. */
|
||||
failed = 0;
|
||||
|
||||
/* Print some text if verbose. */
|
||||
SDL_GetVersion( &ver );
|
||||
rev = SDL_GetRevision();
|
||||
SDL_ATprintVerbose( 1, "Running tests with SDL %d.%d.%d revision %s\n",
|
||||
ver.major, ver.minor, ver.patch, rev );
|
||||
|
||||
/* Automatic tests. */
|
||||
if (run_platform)
|
||||
failed += test_platform();
|
||||
if (run_rwops)
|
||||
failed += test_rwops();
|
||||
if (run_rect)
|
||||
failed += test_rect();
|
||||
if (run_surface)
|
||||
failed += test_surface();
|
||||
if (run_render)
|
||||
failed += test_render();
|
||||
if (run_audio)
|
||||
failed += test_audio();
|
||||
|
||||
/* Manual tests. */
|
||||
if (run_manual) {
|
||||
}
|
||||
|
||||
/* Display more information if failed. */
|
||||
if (failed > 0) {
|
||||
SDL_ATprintErr( "Tests run with SDL %d.%d.%d revision %d\n",
|
||||
ver.major, ver.minor, ver.patch, rev );
|
||||
SDL_ATprintErr( "System is running %s and is %s endian\n",
|
||||
SDL_GetPlatform(),
|
||||
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||||
"little"
|
||||
#else
|
||||
"big"
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
return failed;
|
||||
}
|
||||
|
|
@ -1,158 +0,0 @@
|
|||
|
||||
/* Simple program: Loop, watching keystrokes
|
||||
Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to
|
||||
pump the event loop and catch keystrokes.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "SDL.h"
|
||||
|
||||
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||
static void
|
||||
quit(int rc)
|
||||
{
|
||||
SDL_Quit();
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
static void
|
||||
print_modifiers(void)
|
||||
{
|
||||
int mod;
|
||||
printf(" modifiers:");
|
||||
mod = SDL_GetModState();
|
||||
if (!mod) {
|
||||
printf(" (none)");
|
||||
return;
|
||||
}
|
||||
if (mod & KMOD_LSHIFT)
|
||||
printf(" LSHIFT");
|
||||
if (mod & KMOD_RSHIFT)
|
||||
printf(" RSHIFT");
|
||||
if (mod & KMOD_LCTRL)
|
||||
printf(" LCTRL");
|
||||
if (mod & KMOD_RCTRL)
|
||||
printf(" RCTRL");
|
||||
if (mod & KMOD_LALT)
|
||||
printf(" LALT");
|
||||
if (mod & KMOD_RALT)
|
||||
printf(" RALT");
|
||||
if (mod & KMOD_LGUI)
|
||||
printf(" LGUI");
|
||||
if (mod & KMOD_RGUI)
|
||||
printf(" RGUI");
|
||||
if (mod & KMOD_NUM)
|
||||
printf(" NUM");
|
||||
if (mod & KMOD_CAPS)
|
||||
printf(" CAPS");
|
||||
if (mod & KMOD_MODE)
|
||||
printf(" MODE");
|
||||
}
|
||||
|
||||
static void
|
||||
PrintKey(SDL_Keysym * sym, SDL_bool pressed, SDL_bool repeat)
|
||||
{
|
||||
/* Print the keycode, name and state */
|
||||
if (sym->sym) {
|
||||
printf("Key %s: scancode %d = %s, keycode 0x%08X = %s ",
|
||||
pressed ? "pressed " : "released",
|
||||
sym->scancode,
|
||||
SDL_GetScancodeName(sym->scancode),
|
||||
sym->sym, SDL_GetKeyName(sym->sym));
|
||||
} else {
|
||||
printf("Unknown Key (scancode %d = %s) %s ",
|
||||
sym->scancode,
|
||||
SDL_GetScancodeName(sym->scancode),
|
||||
pressed ? "pressed" : "released");
|
||||
}
|
||||
|
||||
/* Print the translated character, if one exists */
|
||||
if (sym->unicode) {
|
||||
/* Is it a control-character? */
|
||||
if (sym->unicode < ' ') {
|
||||
printf(" (^%c)", sym->unicode + '@');
|
||||
} else {
|
||||
#ifdef UNICODE
|
||||
printf(" (%c)", sym->unicode);
|
||||
#else
|
||||
/* This is a Latin-1 program, so only show 8-bits */
|
||||
if (!(sym->unicode & 0xFF00))
|
||||
printf(" (%c)", sym->unicode);
|
||||
else
|
||||
printf(" (0x%X)", sym->unicode);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
print_modifiers();
|
||||
if (repeat) {
|
||||
printf(" (repeat)");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
PrintText(char *text)
|
||||
{
|
||||
printf("Text: %s\n", text);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
SDL_Event event;
|
||||
int done;
|
||||
Uint32 videoflags;
|
||||
|
||||
/* Initialize SDL */
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||
return (1);
|
||||
}
|
||||
|
||||
videoflags = SDL_SWSURFACE;
|
||||
while (argc > 1) {
|
||||
--argc;
|
||||
if (argv[argc] && !strcmp(argv[argc], "-fullscreen")) {
|
||||
videoflags |= SDL_FULLSCREEN;
|
||||
} else {
|
||||
fprintf(stderr, "Usage: %s [-fullscreen]\n", argv[0]);
|
||||
quit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set 640x480 video mode */
|
||||
if (SDL_SetVideoMode(640, 480, 0, videoflags) == NULL) {
|
||||
fprintf(stderr, "Couldn't set 640x480 video mode: %s\n",
|
||||
SDL_GetError());
|
||||
quit(2);
|
||||
}
|
||||
|
||||
/* Watch keystrokes */
|
||||
done = 0;
|
||||
while (!done) {
|
||||
/* Check for events */
|
||||
SDL_WaitEvent(&event);
|
||||
switch (event.type) {
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
PrintKey(&event.key.keysym, event.key.state, event.key.repeat);
|
||||
break;
|
||||
case SDL_TEXTINPUT:
|
||||
PrintText(event.text.text);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
/* Any button press quits the app... */
|
||||
case SDL_QUIT:
|
||||
done = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
return (0);
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
|
||||
/* A simple test program framework */
|
||||
|
||||
#define SDL_NO_COMPAT
|
||||
#include "SDL.h"
|
||||
|
||||
#define DEFAULT_WINDOW_WIDTH 640
|
||||
#define DEFAULT_WINDOW_HEIGHT 480
|
||||
|
||||
#define VERBOSE_VIDEO 0x00000001
|
||||
#define VERBOSE_MODES 0x00000002
|
||||
#define VERBOSE_RENDER 0x00000004
|
||||
#define VERBOSE_EVENT 0x00000008
|
||||
#define VERBOSE_AUDIO 0x00000010
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* SDL init flags */
|
||||
char **argv;
|
||||
Uint32 flags;
|
||||
Uint32 verbose;
|
||||
|
||||
/* Video info */
|
||||
const char *videodriver;
|
||||
int display;
|
||||
const char *window_title;
|
||||
const char *window_icon;
|
||||
Uint32 window_flags;
|
||||
int window_x;
|
||||
int window_y;
|
||||
int window_w;
|
||||
int window_h;
|
||||
int depth;
|
||||
int refresh_rate;
|
||||
int num_windows;
|
||||
SDL_Window **windows;
|
||||
|
||||
/* Renderer info */
|
||||
const char *renderdriver;
|
||||
Uint32 render_flags;
|
||||
SDL_bool skip_renderer;
|
||||
SDL_Renderer **renderers;
|
||||
|
||||
/* Audio info */
|
||||
const char *audiodriver;
|
||||
SDL_AudioSpec audiospec;
|
||||
|
||||
/* GL settings */
|
||||
int gl_red_size;
|
||||
int gl_green_size;
|
||||
int gl_blue_size;
|
||||
int gl_alpha_size;
|
||||
int gl_buffer_size;
|
||||
int gl_depth_size;
|
||||
int gl_stencil_size;
|
||||
int gl_double_buffer;
|
||||
int gl_accum_red_size;
|
||||
int gl_accum_green_size;
|
||||
int gl_accum_blue_size;
|
||||
int gl_accum_alpha_size;
|
||||
int gl_stereo;
|
||||
int gl_multisamplebuffers;
|
||||
int gl_multisamplesamples;
|
||||
int gl_retained_backing;
|
||||
int gl_accelerated;
|
||||
int gl_major_version;
|
||||
int gl_minor_version;
|
||||
} CommonState;
|
||||
|
||||
extern CommonState *CommonCreateState(char **argv, Uint32 flags);
|
||||
extern int CommonArg(CommonState * state, int index);
|
||||
extern const char *CommonUsage(CommonState * state);
|
||||
extern SDL_bool CommonInit(CommonState * state);
|
||||
extern void CommonEvent(CommonState * state, SDL_Event * event, int *done);
|
||||
extern void CommonQuit(CommonState * state);
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
|
@ -1,150 +0,0 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(README)
|
||||
|
||||
dnl Detect the canonical build and host environments
|
||||
AC_CONFIG_AUX_DIRS($srcdir/../build-scripts)
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
dnl Check for tools
|
||||
|
||||
AC_PROG_CC
|
||||
|
||||
dnl Check for compiler environment
|
||||
|
||||
AC_C_CONST
|
||||
|
||||
dnl Figure out which math library to use
|
||||
case "$host" in
|
||||
*-*-cygwin* | *-*-mingw32*)
|
||||
EXE=".exe"
|
||||
MATHLIB=""
|
||||
SYS_GL_LIBS="-lopengl32"
|
||||
;;
|
||||
*-*-beos* | *-*-haiku*)
|
||||
EXE=""
|
||||
MATHLIB=""
|
||||
SYS_GL_LIBS="-lGL"
|
||||
;;
|
||||
*-*-darwin* )
|
||||
EXE=""
|
||||
MATHLIB=""
|
||||
SYS_GL_LIBS="-Wl,-framework,OpenGL"
|
||||
;;
|
||||
*-*-aix*)
|
||||
EXE=""
|
||||
if test x$ac_cv_prog_gcc = xyes; then
|
||||
CFLAGS="-mthreads"
|
||||
fi
|
||||
SYS_GL_LIBS=""
|
||||
;;
|
||||
*-*-mint*)
|
||||
EXE=""
|
||||
MATHLIB=""
|
||||
AC_PATH_PROG(OSMESA_CONFIG, osmesa-config, no)
|
||||
if test "x$OSMESA_CONFIG" = "xyes"; then
|
||||
OSMESA_CFLAGS=`$OSMESA_CONFIG --cflags`
|
||||
OSMESA_LIBS=`$OSMESA_CONFIG --libs`
|
||||
CFLAGS="$CFLAGS $OSMESA_CFLAGS"
|
||||
SYS_GL_LIBS="$OSMESA_LIBS"
|
||||
else
|
||||
SYS_GL_LIBS="-lOSMesa"
|
||||
fi
|
||||
;;
|
||||
*-*-qnx*)
|
||||
EXE=""
|
||||
MATHLIB=""
|
||||
SYS_GL_LIBS="-lGLES_CM"
|
||||
;;
|
||||
*)
|
||||
EXE=""
|
||||
MATHLIB="-lm"
|
||||
SYS_GL_LIBS="-lGL"
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(EXE)
|
||||
AC_SUBST(MATHLIB)
|
||||
|
||||
dnl Check for SDL
|
||||
SDL_VERSION=1.3.0
|
||||
AM_PATH_SDL($SDL_VERSION,
|
||||
:,
|
||||
AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
|
||||
)
|
||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
||||
LIBS="$LIBS $SDL_LIBS"
|
||||
|
||||
dnl Check for X11 path, needed for OpenGL on some systems
|
||||
AC_PATH_X
|
||||
if test x$have_x = xyes; then
|
||||
if test x$ac_x_includes = xno || test x$ac_x_includes = x; then
|
||||
:
|
||||
else
|
||||
CFLAGS="$CFLAGS -I$ac_x_includes"
|
||||
fi
|
||||
if test x$ac_x_libraries = xno || test x$ac_x_libraries = x; then
|
||||
:
|
||||
else
|
||||
XPATH="-L$ac_x_libraries"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Check for OpenGL
|
||||
AC_MSG_CHECKING(for OpenGL support)
|
||||
have_opengl=no
|
||||
AC_TRY_COMPILE([
|
||||
#include "SDL_opengl.h"
|
||||
],[
|
||||
],[
|
||||
have_opengl=yes
|
||||
])
|
||||
AC_MSG_RESULT($have_opengl)
|
||||
|
||||
dnl Check for OpenGL ES
|
||||
AC_MSG_CHECKING(for OpenGL ES support)
|
||||
have_opengles=no
|
||||
AC_TRY_COMPILE([
|
||||
#if defined (__QNXNTO__)
|
||||
#include <GLES/gl.h>
|
||||
#elif defined (__IPHONEOS__)
|
||||
#include <OpenGLES/ES1/gl.h>
|
||||
#else
|
||||
#error "No OpenGL ES support"
|
||||
#endif /* __QNXNTO__ */
|
||||
],[
|
||||
],[
|
||||
have_opengles=yes
|
||||
])
|
||||
AC_MSG_RESULT($have_opengles)
|
||||
|
||||
if test x$have_opengl = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGL"
|
||||
GLLIB="$XPATH $SYS_GL_LIBS"
|
||||
elif test x$have_opengles = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_OPENGLES"
|
||||
GLLIB="$XPATH $SYS_GL_LIBS"
|
||||
else
|
||||
GLLIB=""
|
||||
fi
|
||||
|
||||
AC_SUBST(GLLIB)
|
||||
|
||||
dnl Check for SDL_ttf
|
||||
AC_MSG_CHECKING(for SDL_ttf)
|
||||
have_SDL_ttf=no
|
||||
AC_TRY_COMPILE([
|
||||
#include "SDL_ttf.h"
|
||||
],[
|
||||
],[
|
||||
have_SDL_ttf=yes
|
||||
])
|
||||
AC_MSG_RESULT($have_SDL_ttf)
|
||||
|
||||
if test x$have_SDL_ttf = xyes; then
|
||||
CFLAGS="$CFLAGS -DHAVE_SDL_TTF"
|
||||
SDL_TTF_LIB="-lSDL_ttf"
|
||||
fi
|
||||
|
||||
AC_SUBST(SDL_TTF_LIB)
|
||||
|
||||
dnl Finally create all the generated files
|
||||
AC_OUTPUT([Makefile])
|
|
@ -1,110 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Build Universal binaries on Mac OS X, thanks Ryan!
|
||||
#
|
||||
# Usage: ./configure CC="sh gcc-fat.sh" && make && rm -rf ppc x86
|
||||
|
||||
# PowerPC compiler flags (10.2 runtime compatibility)
|
||||
GCC_COMPILE_PPC="gcc-3.3 -arch ppc \
|
||||
-DMAC_OS_X_VERSION_MIN_REQUIRED=1020 \
|
||||
-nostdinc \
|
||||
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \
|
||||
-I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \
|
||||
-isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include"
|
||||
|
||||
GCC_LINK_PPC="\
|
||||
-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \
|
||||
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \
|
||||
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk"
|
||||
|
||||
# Intel compiler flags (10.4 runtime compatibility)
|
||||
GCC_COMPILE_X86="gcc-4.0 -arch i386 -mmacosx-version-min=10.4 \
|
||||
-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \
|
||||
-nostdinc \
|
||||
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
|
||||
-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include \
|
||||
-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include"
|
||||
|
||||
GCC_LINK_X86="\
|
||||
-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.0 \
|
||||
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
|
||||
|
||||
# Output both PowerPC and Intel object files
|
||||
args="$*"
|
||||
compile=yes
|
||||
link=yes
|
||||
while test x$1 != x; do
|
||||
case $1 in
|
||||
--version) exec gcc $1;;
|
||||
-v) exec gcc $1;;
|
||||
-V) exec gcc $1;;
|
||||
-print-prog-name=*) exec gcc $1;;
|
||||
-print-search-dirs) exec gcc $1;;
|
||||
-E) GCC_COMPILE_PPC="$GCC_COMPILE_PPC -E"
|
||||
GCC_COMPILE_X86="$GCC_COMPILE_X86 -E"
|
||||
compile=no; link=no;;
|
||||
-c) link=no;;
|
||||
-o) output=$2;;
|
||||
*.c|*.cc|*.cpp|*.S) source=$1;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if test x$link = xyes; then
|
||||
GCC_COMPILE_PPC="$GCC_COMPILE_PPC $GCC_LINK_PPC"
|
||||
GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86"
|
||||
fi
|
||||
if test x"$output" = x; then
|
||||
if test x$link = xyes; then
|
||||
output=a.out
|
||||
elif test x$compile = xyes; then
|
||||
output=`echo $source | sed -e 's|.*/||' -e 's|\(.*\)\.[^\.]*|\1|'`.o
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x"$output" != x; then
|
||||
dir=ppc/`dirname $output`
|
||||
if test -d $dir; then
|
||||
:
|
||||
else
|
||||
mkdir -p $dir
|
||||
fi
|
||||
fi
|
||||
set -- $args
|
||||
while test x$1 != x; do
|
||||
if test -f "ppc/$1" && test "$1" != "$output"; then
|
||||
ppc_args="$ppc_args ppc/$1"
|
||||
else
|
||||
ppc_args="$ppc_args $1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
$GCC_COMPILE_PPC $ppc_args || exit $?
|
||||
if test x"$output" != x; then
|
||||
cp $output ppc/$output
|
||||
fi
|
||||
|
||||
if test x"$output" != x; then
|
||||
dir=x86/`dirname $output`
|
||||
if test -d $dir; then
|
||||
:
|
||||
else
|
||||
mkdir -p $dir
|
||||
fi
|
||||
fi
|
||||
set -- $args
|
||||
while test x$1 != x; do
|
||||
if test -f "x86/$1" && test "$1" != "$output"; then
|
||||
x86_args="$x86_args x86/$1"
|
||||
else
|
||||
x86_args="$x86_args $1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
$GCC_COMPILE_X86 $x86_args || exit $?
|
||||
if test x"$output" != x; then
|
||||
cp $output x86/$output
|
||||
fi
|
||||
|
||||
if test x"$output" != x; then
|
||||
lipo -create -o $output ppc/$output x86/$output
|
||||
fi
|
|
@ -1,248 +0,0 @@
|
|||
|
||||
/* Simple program: Fill a colormap with gray and stripe it down the screen */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "SDL.h"
|
||||
|
||||
#ifdef TEST_VGA16 /* Define this if you want to test VGA 16-color video modes */
|
||||
#define NUM_COLORS 16
|
||||
#else
|
||||
#define NUM_COLORS 256
|
||||
#endif
|
||||
|
||||
/* Draw a randomly sized and colored box centered about (X,Y) */
|
||||
void
|
||||
DrawBox(SDL_Surface * screen, int X, int Y, int width, int height)
|
||||
{
|
||||
static unsigned int seeded = 0;
|
||||
SDL_Rect area;
|
||||
Uint32 color;
|
||||
Uint32 randc;
|
||||
|
||||
/* Seed the random number generator */
|
||||
if (seeded == 0) {
|
||||
srand((unsigned int)time(NULL));
|
||||
seeded = 1;
|
||||
}
|
||||
|
||||
/* Get the bounds of the rectangle */
|
||||
area.w = (rand() % width);
|
||||
area.h = (rand() % height);
|
||||
area.x = X - (area.w / 2);
|
||||
area.y = Y - (area.h / 2);
|
||||
randc = (rand() % NUM_COLORS);
|
||||
|
||||
if (screen->format->BytesPerPixel == 1) {
|
||||
color = randc;
|
||||
} else {
|
||||
color = SDL_MapRGB(screen->format, randc, randc, randc);
|
||||
}
|
||||
|
||||
/* Do it! */
|
||||
SDL_FillRect(screen, &area, color);
|
||||
if (screen->flags & SDL_DOUBLEBUF) {
|
||||
SDL_Flip(screen);
|
||||
} else {
|
||||
SDL_UpdateRects(screen, 1, &area);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
DrawBackground(SDL_Surface * screen)
|
||||
{
|
||||
int i, j, k;
|
||||
Uint8 *buffer;
|
||||
Uint16 *buffer16;
|
||||
Uint16 color;
|
||||
Uint8 gradient;
|
||||
|
||||
/* Set the surface pixels and refresh! */
|
||||
/* Use two loops in case the surface is double-buffered (both sides) */
|
||||
|
||||
for (j = 0; j < 2; ++j) {
|
||||
if (SDL_LockSurface(screen) < 0) {
|
||||
fprintf(stderr, "Couldn't lock display surface: %s\n",
|
||||
SDL_GetError());
|
||||
return;
|
||||
}
|
||||
buffer = (Uint8 *) screen->pixels;
|
||||
|
||||
if (screen->format->BytesPerPixel != 2) {
|
||||
for (i = 0; i < screen->h; ++i) {
|
||||
memset(buffer, (i * (NUM_COLORS - 1)) / screen->h,
|
||||
screen->w * screen->format->BytesPerPixel);
|
||||
buffer += screen->pitch;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < screen->h; ++i) {
|
||||
gradient = ((i * (NUM_COLORS - 1)) / screen->h);
|
||||
color =
|
||||
SDL_MapRGB(screen->format, gradient, gradient, gradient);
|
||||
buffer16 = (Uint16 *) buffer;
|
||||
for (k = 0; k < screen->w; k++) {
|
||||
*(buffer16 + k) = color;
|
||||
}
|
||||
buffer += screen->pitch;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_UnlockSurface(screen);
|
||||
if (screen->flags & SDL_DOUBLEBUF) {
|
||||
SDL_Flip(screen);
|
||||
} else {
|
||||
SDL_UpdateRect(screen, 0, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Surface *
|
||||
CreateScreen(Uint16 w, Uint16 h, Uint8 bpp, Uint32 flags)
|
||||
{
|
||||
SDL_Surface *screen;
|
||||
int i;
|
||||
SDL_Color palette[NUM_COLORS];
|
||||
|
||||
/* Set the video mode */
|
||||
screen = SDL_SetVideoMode(w, h, bpp, flags);
|
||||
if (screen == NULL) {
|
||||
fprintf(stderr, "Couldn't set display mode: %s\n", SDL_GetError());
|
||||
return (NULL);
|
||||
}
|
||||
fprintf(stderr, "Screen is in %s mode\n",
|
||||
(screen->flags & SDL_FULLSCREEN) ? "fullscreen" : "windowed");
|
||||
|
||||
if (bpp == 8) {
|
||||
/* Set a gray colormap, reverse order from white to black */
|
||||
for (i = 0; i < NUM_COLORS; ++i) {
|
||||
palette[i].r = (NUM_COLORS - 1) - i * (256 / NUM_COLORS);
|
||||
palette[i].g = (NUM_COLORS - 1) - i * (256 / NUM_COLORS);
|
||||
palette[i].b = (NUM_COLORS - 1) - i * (256 / NUM_COLORS);
|
||||
}
|
||||
SDL_SetColors(screen, palette, 0, NUM_COLORS);
|
||||
}
|
||||
|
||||
return (screen);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
SDL_Surface *screen;
|
||||
Uint32 videoflags;
|
||||
int done;
|
||||
SDL_Event event;
|
||||
int width, height, bpp;
|
||||
|
||||
/* Initialize SDL */
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* See if we try to get a hardware colormap */
|
||||
width = 640;
|
||||
height = 480;
|
||||
bpp = 8;
|
||||
videoflags = SDL_SWSURFACE;
|
||||
while (argc > 1) {
|
||||
--argc;
|
||||
if (argv[argc - 1] && (strcmp(argv[argc - 1], "-width") == 0)) {
|
||||
width = atoi(argv[argc]);
|
||||
--argc;
|
||||
} else if (argv[argc - 1]
|
||||
&& (strcmp(argv[argc - 1], "-height") == 0)) {
|
||||
height = atoi(argv[argc]);
|
||||
--argc;
|
||||
} else if (argv[argc - 1] && (strcmp(argv[argc - 1], "-bpp") == 0)) {
|
||||
bpp = atoi(argv[argc]);
|
||||
--argc;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-hw") == 0)) {
|
||||
videoflags |= SDL_HWSURFACE;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-hwpalette") == 0)) {
|
||||
videoflags |= SDL_HWPALETTE;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-flip") == 0)) {
|
||||
videoflags |= SDL_DOUBLEBUF;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-noframe") == 0)) {
|
||||
videoflags |= SDL_NOFRAME;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-resize") == 0)) {
|
||||
videoflags |= SDL_RESIZABLE;
|
||||
} else if (argv[argc] && (strcmp(argv[argc], "-fullscreen") == 0)) {
|
||||
videoflags |= SDL_FULLSCREEN;
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"Usage: %s [-width] [-height] [-bpp] [-hw] [-hwpalette] [-flip] [-noframe] [-fullscreen] [-resize]\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set a video mode */
|
||||
screen = CreateScreen(width, height, bpp, videoflags);
|
||||
if (screen == NULL) {
|
||||
exit(2);
|
||||
}
|
||||
|
||||
DrawBackground(screen);
|
||||
|
||||
/* Wait for a keystroke */
|
||||
done = 0;
|
||||
while (!done && SDL_WaitEvent(&event)) {
|
||||
switch (event.type) {
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
DrawBox(screen, event.button.x, event.button.y, width, height);
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
/* Ignore ALT-TAB for windows */
|
||||
if ((event.key.keysym.sym == SDLK_LALT) ||
|
||||
(event.key.keysym.sym == SDLK_TAB)) {
|
||||
break;
|
||||
}
|
||||
/* Center the mouse on <SPACE> */
|
||||
if (event.key.keysym.sym == SDLK_SPACE) {
|
||||
SDL_WarpMouse(width / 2, height / 2);
|
||||
break;
|
||||
}
|
||||
/* Toggle fullscreen mode on <RETURN> */
|
||||
if (event.key.keysym.sym == SDLK_RETURN) {
|
||||
videoflags ^= SDL_FULLSCREEN;
|
||||
screen = CreateScreen(screen->w, screen->h,
|
||||
screen->format->BitsPerPixel,
|
||||
videoflags);
|
||||
if (screen == NULL) {
|
||||
fprintf(stderr, "Couldn't toggle fullscreen mode\n");
|
||||
done = 1;
|
||||
}
|
||||
DrawBackground(screen);
|
||||
break;
|
||||
}
|
||||
/* Any other key quits the application... */
|
||||
case SDL_QUIT:
|
||||
done = 1;
|
||||
break;
|
||||
case SDL_VIDEOEXPOSE:
|
||||
DrawBackground(screen);
|
||||
break;
|
||||
case SDL_VIDEORESIZE:
|
||||
printf("Screen resized to %dx%d\n", event.resize.w,
|
||||
event.resize.h);
|
||||
screen =
|
||||
CreateScreen(event.resize.w, event.resize.h,
|
||||
screen->format->BitsPerPixel, videoflags);
|
||||
if (screen == NULL) {
|
||||
fprintf(stderr, "Couldn't resize video mode\n");
|
||||
done = 1;
|
||||
}
|
||||
DrawBackground(screen);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
SDL_Quit();
|
||||
return (0);
|
||||
}
|
Before Width: | Height: | Size: 578 B |
|
@ -1,117 +0,0 @@
|
|||
|
||||
/* Program to load a wave file and loop playing it using SDL sound */
|
||||
|
||||
/* loopwaves.c is much more robust in handling WAVE files --
|
||||
This is only for simple WAVEs
|
||||
*/
|
||||
#include "SDL_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#include "SDL.h"
|
||||
#include "SDL_audio.h"
|
||||
|
||||
struct
|
||||
{
|
||||
SDL_AudioSpec spec;
|
||||
Uint8 *sound; /* Pointer to wave data */
|
||||
Uint32 soundlen; /* Length of wave data */
|
||||
int soundpos; /* Current play position */
|
||||
} wave;
|
||||
|
||||
|
||||
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||
static void
|
||||
quit(int rc)
|
||||
{
|
||||
SDL_Quit();
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
|
||||
void SDLCALL
|
||||
fillerup(void *unused, Uint8 * stream, int len)
|
||||
{
|
||||
Uint8 *waveptr;
|
||||
int waveleft;
|
||||
|
||||
/* Set up the pointers */
|
||||
waveptr = wave.sound + wave.soundpos;
|
||||
waveleft = wave.soundlen - wave.soundpos;
|
||||
|
||||
/* Go! */
|
||||
while (waveleft <= len) {
|
||||
SDL_memcpy(stream, waveptr, waveleft);
|
||||
stream += waveleft;
|
||||
len -= waveleft;
|
||||
waveptr = wave.sound;
|
||||
waveleft = wave.soundlen;
|
||||
wave.soundpos = 0;
|
||||
}
|
||||
SDL_memcpy(stream, waveptr, len);
|
||||
wave.soundpos += len;
|
||||
}
|
||||
|
||||
static int done = 0;
|
||||
void
|
||||
poked(int sig)
|
||||
{
|
||||
done = 1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
/* Load the SDL library */
|
||||
if (SDL_Init(SDL_INIT_AUDIO) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (argv[1] == NULL) {
|
||||
argv[1] = "sample.wav";
|
||||
}
|
||||
/* Load the wave file into memory */
|
||||
if (SDL_LoadWAV(argv[1], &wave.spec, &wave.sound, &wave.soundlen) == NULL) {
|
||||
fprintf(stderr, "Couldn't load %s: %s\n", argv[1], SDL_GetError());
|
||||
quit(1);
|
||||
}
|
||||
|
||||
wave.spec.callback = fillerup;
|
||||
#if HAVE_SIGNAL_H
|
||||
/* Set the signals */
|
||||
#ifdef SIGHUP
|
||||
signal(SIGHUP, poked);
|
||||
#endif
|
||||
signal(SIGINT, poked);
|
||||
#ifdef SIGQUIT
|
||||
signal(SIGQUIT, poked);
|
||||
#endif
|
||||
signal(SIGTERM, poked);
|
||||
#endif /* HAVE_SIGNAL_H */
|
||||
|
||||
/* Initialize fillerup() variables */
|
||||
if (SDL_OpenAudio(&wave.spec, NULL) < 0) {
|
||||
fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
|
||||
SDL_FreeWAV(wave.sound);
|
||||
quit(2);
|
||||
}
|
||||
|
||||
printf("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
|
||||
|
||||
/* Let the audio run */
|
||||
SDL_PauseAudio(0);
|
||||
while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING))
|
||||
SDL_Delay(1000);
|
||||
|
||||
/* Clean up on signal */
|
||||
SDL_CloseAudio();
|
||||
SDL_FreeWAV(wave.sound);
|
||||
SDL_Quit();
|
||||
return (0);
|
||||
}
|
|
@ -1,132 +0,0 @@
|
|||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
ifeq ($(strip $(DEVKITARM)),)
|
||||
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
||||
endif
|
||||
|
||||
include $(DEVKITARM)/ds_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# INCLUDES is a list of directories containing extra header files
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := $(shell basename $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := source
|
||||
DATA := data
|
||||
INCLUDES := include
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
ARCH := -mthumb -mthumb-interwork
|
||||
|
||||
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
|
||||
# *insists* it has a FPU or VFP, and it won't take no for an answer!
|
||||
CFLAGS := -save-temps -g -Wall -O0\
|
||||
-mcpu=arm9tdmi -mtune=arm9tdmi \
|
||||
$(ARCH)
|
||||
|
||||
CFLAGS += $(INCLUDE) -DARM9 -D__NDS__
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fno-exceptions -fno-rtti
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lSDL -lfat -lnds9
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS := $(LIBNDS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CC)
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CXX)
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
.PHONY: $(BUILD) clean
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
$(OUTPUT).ds.gba : $(OUTPUT).nds
|
||||
$(OUTPUT).nds : $(OUTPUT).arm9
|
||||
$(OUTPUT).arm9 : $(OUTPUT).elf
|
||||
$(OUTPUT).elf : $(OFILES)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
%.pcx.o : %.pcx
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
@$(bin2o)
|
||||
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------------
|
|
@ -1,96 +0,0 @@
|
|||
|
||||
#include <SDL/SDL.h>
|
||||
#if defined(NDS) || defined(__NDS__) || defined (__NDS)
|
||||
#include <nds.h>
|
||||
#include <fat.h>
|
||||
#else
|
||||
#define swiWaitForVBlank()
|
||||
#define consoleDemoInit()
|
||||
#define fatInitDefault()
|
||||
#define RGB15(r,g,b) SDL_MapRGB(screen->format,((r)<<3),((g)<<3),((b)<<3))
|
||||
#endif
|
||||
void
|
||||
splash(SDL_Surface * screen, int s)
|
||||
{
|
||||
SDL_Surface *logo;
|
||||
SDL_Rect area = { 0, 0, 256, 192 };
|
||||
|
||||
logo = SDL_LoadBMP("sdl.bmp");
|
||||
if (!logo) {
|
||||
printf("Couldn't splash.\n");
|
||||
return;
|
||||
}
|
||||
/*logo->flags &= ~SDL_PREALLOC; */
|
||||
SDL_BlitSurface(logo, NULL, screen, &area);
|
||||
SDL_Flip(screen);
|
||||
while (s-- > 0) {
|
||||
int i = 60;
|
||||
while (--i)
|
||||
swiWaitForVBlank();
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
SDL_Surface *screen;
|
||||
SDL_Joystick *stick;
|
||||
SDL_Event event;
|
||||
SDL_Rect rect = { 0, 0, 256, 192 };
|
||||
int i;
|
||||
|
||||
consoleDemoInit();
|
||||
puts("Hello world! Initializing FAT...");
|
||||
fatInitDefault();
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) {
|
||||
puts("# error initializing SDL");
|
||||
puts(SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
puts("* initialized SDL");
|
||||
screen = SDL_SetVideoMode(256, 192, 15, SDL_SWSURFACE);
|
||||
if (!screen) {
|
||||
puts("# error setting video mode");
|
||||
puts(SDL_GetError());
|
||||
return 2;
|
||||
}
|
||||
screen->flags &= ~SDL_PREALLOC;
|
||||
puts("* set video mode");
|
||||
stick = SDL_JoystickOpen(0);
|
||||
if (stick == NULL) {
|
||||
puts("# error opening joystick");
|
||||
puts(SDL_GetError());
|
||||
// return 3;
|
||||
}
|
||||
puts("* opened joystick");
|
||||
|
||||
/*splash(screen, 3); */
|
||||
|
||||
SDL_FillRect(screen, &rect, RGB15(0, 0, 31) | 0x8000);
|
||||
SDL_Flip(screen);
|
||||
|
||||
while (1)
|
||||
while (SDL_PollEvent(&event))
|
||||
switch (event.type) {
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
SDL_FillRect(screen, &rect, (u16) rand() | 0x8000);
|
||||
SDL_Flip(screen);
|
||||
if (rect.w > 8) {
|
||||
rect.x += 4;
|
||||
rect.y += 3;
|
||||
rect.w -= 8;
|
||||
rect.h -= 6;
|
||||
}
|
||||
printf("button %d pressed at %d ticks\n",
|
||||
event.jbutton.button, SDL_GetTicks());
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
ifeq ($(strip $(DEVKITARM)),)
|
||||
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
||||
endif
|
||||
|
||||
include $(DEVKITARM)/ds_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# INCLUDES is a list of directories containing extra header files
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := $(shell basename $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := source
|
||||
DATA := data
|
||||
INCLUDES := include
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
ARCH := -mthumb -mthumb-interwork
|
||||
|
||||
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
|
||||
# *insists* it has a FPU or VFP, and it won't take no for an answer!
|
||||
CFLAGS := -save-temps -g -Wall -O0\
|
||||
-mcpu=arm9tdmi -mtune=arm9tdmi \
|
||||
$(ARCH)
|
||||
|
||||
CFLAGS += $(INCLUDE) -DARM9 -D__NDS__
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fno-exceptions -fno-rtti
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lSDL -lfat -lnds9
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS := $(LIBNDS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CC)
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CXX)
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
.PHONY: $(BUILD) clean
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
$(OUTPUT).ds.gba : $(OUTPUT).nds
|
||||
$(OUTPUT).nds : $(OUTPUT).arm9
|
||||
$(OUTPUT).arm9 : $(OUTPUT).elf
|
||||
$(OUTPUT).elf : $(OFILES)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
%.pcx.o : %.pcx
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
@$(bin2o)
|
||||
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------------
|
|
@ -1,965 +0,0 @@
|
|||
|
||||
/* A simple test program framework */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define VIDEO_USAGE \
|
||||
"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display %d] [--fullscreen | --windows N] [--title title] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab]"
|
||||
|
||||
#define AUDIO_USAGE \
|
||||
"[--rate N] [--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE] [--channels N] [--samples N]"
|
||||
|
||||
CommonState *
|
||||
CommonCreateState(char **argv, Uint32 flags)
|
||||
{
|
||||
CommonState *state = SDL_calloc(1, sizeof(*state));
|
||||
if (!state) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Initialize some defaults */
|
||||
state->argv = argv;
|
||||
state->flags = flags;
|
||||
state->window_title = argv[0];
|
||||
state->window_flags = SDL_WINDOW_SHOWN;
|
||||
state->window_x = SDL_WINDOWPOS_UNDEFINED;
|
||||
state->window_y = SDL_WINDOWPOS_UNDEFINED;
|
||||
state->window_w = 256;
|
||||
state->window_h = 192;
|
||||
state->num_windows = 1;
|
||||
state->audiospec.freq = 22050;
|
||||
state->audiospec.format = AUDIO_S16;
|
||||
state->audiospec.channels = 2;
|
||||
state->audiospec.samples = 2048;
|
||||
return state;
|
||||
}
|
||||
|
||||
int
|
||||
CommonArg(CommonState * state, int index)
|
||||
{
|
||||
char **argv = state->argv;
|
||||
|
||||
if (SDL_strcasecmp(argv[index], "--video") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->videodriver = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--renderer") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->renderdriver = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--info") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "all") == 0) {
|
||||
state->verbose |=
|
||||
(VERBOSE_VIDEO | VERBOSE_MODES | VERBOSE_RENDER |
|
||||
VERBOSE_EVENT);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "video") == 0) {
|
||||
state->verbose |= VERBOSE_VIDEO;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "modes") == 0) {
|
||||
state->verbose |= VERBOSE_MODES;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "render") == 0) {
|
||||
state->verbose |= VERBOSE_RENDER;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "event") == 0) {
|
||||
state->verbose |= VERBOSE_EVENT;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--display") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->display = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--fullscreen") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_FULLSCREEN;
|
||||
state->num_windows = 1;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--windows") == 0) {
|
||||
++index;
|
||||
if (!argv[index] || !SDL_isdigit(*argv[index])) {
|
||||
return -1;
|
||||
}
|
||||
if (!(state->window_flags & SDL_WINDOW_FULLSCREEN)) {
|
||||
state->num_windows = SDL_atoi(argv[index]);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--title") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->window_title = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--center") == 0) {
|
||||
state->window_x = SDL_WINDOWPOS_CENTERED;
|
||||
state->window_y = SDL_WINDOWPOS_CENTERED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--position") == 0) {
|
||||
char *x, *y;
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
x = argv[index];
|
||||
y = argv[index];
|
||||
while (*y && *y != ',') {
|
||||
++y;
|
||||
}
|
||||
if (!*y) {
|
||||
return -1;
|
||||
}
|
||||
*y++ = '\0';
|
||||
state->window_x = SDL_atoi(x);
|
||||
state->window_y = SDL_atoi(y);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--geometry") == 0) {
|
||||
char *w, *h;
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
w = argv[index];
|
||||
h = argv[index];
|
||||
while (*h && *h != 'x') {
|
||||
++h;
|
||||
}
|
||||
if (!*h) {
|
||||
return -1;
|
||||
}
|
||||
*h++ = '\0';
|
||||
state->window_w = SDL_atoi(w);
|
||||
state->window_h = SDL_atoi(h);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--depth") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->depth = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--refresh") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->refresh_rate = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--vsync") == 0) {
|
||||
state->render_flags |= SDL_RENDERER_PRESENTVSYNC;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--noframe") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_BORDERLESS;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--resize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_RESIZABLE;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--minimize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_MINIMIZED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--maximize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_MAXIMIZED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--grab") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_INPUT_GRABBED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--rate") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.freq = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--format") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U8") == 0) {
|
||||
state->audiospec.format = AUDIO_U8;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S8") == 0) {
|
||||
state->audiospec.format = AUDIO_S8;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16") == 0) {
|
||||
state->audiospec.format = AUDIO_U16;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16LE") == 0) {
|
||||
state->audiospec.format = AUDIO_U16LSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16BE") == 0) {
|
||||
state->audiospec.format = AUDIO_U16MSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16") == 0) {
|
||||
state->audiospec.format = AUDIO_S16;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16LE") == 0) {
|
||||
state->audiospec.format = AUDIO_S16LSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16BE") == 0) {
|
||||
state->audiospec.format = AUDIO_S16MSB;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--channels") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.channels = (Uint8) SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--samples") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.samples = (Uint16) SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if ((SDL_strcasecmp(argv[index], "-h") == 0)
|
||||
|| (SDL_strcasecmp(argv[index], "--help") == 0)) {
|
||||
/* Print the usage message */
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *
|
||||
CommonUsage(CommonState * state)
|
||||
{
|
||||
switch (state->flags & (SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
|
||||
case SDL_INIT_VIDEO:
|
||||
return VIDEO_USAGE;
|
||||
case SDL_INIT_AUDIO:
|
||||
return AUDIO_USAGE;
|
||||
case (SDL_INIT_VIDEO | SDL_INIT_AUDIO):
|
||||
return VIDEO_USAGE " " AUDIO_USAGE;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintRendererFlag(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_RENDERER_SINGLEBUFFER:
|
||||
fprintf(stderr, "SingleBuffer");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTCOPY:
|
||||
fprintf(stderr, "PresentCopy");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTFLIP2:
|
||||
fprintf(stderr, "PresentFlip2");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTFLIP3:
|
||||
fprintf(stderr, "PresentFlip3");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTDISCARD:
|
||||
fprintf(stderr, "PresentDiscard");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTVSYNC:
|
||||
fprintf(stderr, "PresentVSync");
|
||||
break;
|
||||
case SDL_RENDERER_ACCELERATED:
|
||||
fprintf(stderr, "Accelerated");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintBlendMode(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_BLENDMODE_NONE:
|
||||
fprintf(stderr, "None");
|
||||
break;
|
||||
case SDL_BLENDMODE_MASK:
|
||||
fprintf(stderr, "Mask");
|
||||
break;
|
||||
case SDL_BLENDMODE_BLEND:
|
||||
fprintf(stderr, "Blend");
|
||||
break;
|
||||
case SDL_BLENDMODE_ADD:
|
||||
fprintf(stderr, "Add");
|
||||
break;
|
||||
case SDL_BLENDMODE_MOD:
|
||||
fprintf(stderr, "Mod");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintScaleMode(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_TEXTURESCALEMODE_NONE:
|
||||
fprintf(stderr, "None");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_FAST:
|
||||
fprintf(stderr, "Fast");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_SLOW:
|
||||
fprintf(stderr, "Slow");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_BEST:
|
||||
fprintf(stderr, "Best");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintPixelFormat(Uint32 format)
|
||||
{
|
||||
switch (format) {
|
||||
case SDL_PIXELFORMAT_UNKNOWN:
|
||||
fprintf(stderr, "Unknwon");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX1LSB:
|
||||
fprintf(stderr, "Index1LSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX1MSB:
|
||||
fprintf(stderr, "Index1MSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX4LSB:
|
||||
fprintf(stderr, "Index4LSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX4MSB:
|
||||
fprintf(stderr, "Index4MSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX8:
|
||||
fprintf(stderr, "Index8");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB332:
|
||||
fprintf(stderr, "RGB332");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB444:
|
||||
fprintf(stderr, "RGB444");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB555:
|
||||
fprintf(stderr, "RGB555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB4444:
|
||||
fprintf(stderr, "ARGB4444");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB1555:
|
||||
fprintf(stderr, "ARGB1555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB565:
|
||||
fprintf(stderr, "RGB565");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB24:
|
||||
fprintf(stderr, "RGB24");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR24:
|
||||
fprintf(stderr, "BGR24");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB888:
|
||||
fprintf(stderr, "RGB888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR888:
|
||||
fprintf(stderr, "BGR888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB8888:
|
||||
fprintf(stderr, "ARGB8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGBA8888:
|
||||
fprintf(stderr, "RGBA8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ABGR8888:
|
||||
fprintf(stderr, "ABGR8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGRA8888:
|
||||
fprintf(stderr, "BGRA8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB2101010:
|
||||
fprintf(stderr, "ARGB2101010");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YV12:
|
||||
fprintf(stderr, "YV12");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_IYUV:
|
||||
fprintf(stderr, "IYUV");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YUY2:
|
||||
fprintf(stderr, "YUY2");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_UYVY:
|
||||
fprintf(stderr, "UYVY");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YVYU:
|
||||
fprintf(stderr, "YVYU");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ABGR1555:
|
||||
fprintf(stderr, "ABGR1555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR555:
|
||||
fprintf(stderr, "BGR555");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintRenderer(SDL_RendererInfo * info)
|
||||
{
|
||||
int i, count;
|
||||
|
||||
fprintf(stderr, " Renderer %s:\n", info->name);
|
||||
|
||||
fprintf(stderr, " Flags: 0x%8.8X", info->flags);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->flags) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->flags & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintRendererFlag(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Blend: 0x%8.8X", info->blend_modes);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->blend_modes) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->blend_modes & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintBlendMode(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Scale: 0x%8.8X", info->scale_modes);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->scale_modes) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->scale_modes & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintScaleMode(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Texture formats (%d): ", info->num_texture_formats);
|
||||
for (i = 0; i < (int) info->num_texture_formats; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ", ");
|
||||
}
|
||||
PrintPixelFormat(info->texture_formats[i]);
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
if (info->max_texture_width || info->max_texture_height) {
|
||||
fprintf(stderr, " Max Texture Size: %dx%d\n",
|
||||
info->max_texture_width, info->max_texture_height);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_bool
|
||||
CommonInit(CommonState * state)
|
||||
{
|
||||
int i, j, m, n;
|
||||
SDL_DisplayMode fullscreen_mode;
|
||||
|
||||
if (state->flags & SDL_INIT_VIDEO) {
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
n = SDL_GetNumVideoDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in video drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in video drivers:");
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ",");
|
||||
}
|
||||
fprintf(stderr, " %s", SDL_GetVideoDriver(i));
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
if (SDL_VideoInit(state->videodriver, 0) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize video driver: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
fprintf(stderr, "Video driver: %s\n",
|
||||
SDL_GetCurrentVideoDriver());
|
||||
}
|
||||
|
||||
if (state->verbose & VERBOSE_MODES) {
|
||||
SDL_DisplayMode mode;
|
||||
int bpp;
|
||||
Uint32 Rmask, Gmask, Bmask, Amask;
|
||||
|
||||
n = SDL_GetNumVideoDisplays();
|
||||
fprintf(stderr, "Number of displays: %d\n", n);
|
||||
for (i = 0; i < n; ++i) {
|
||||
fprintf(stderr, "Display %d:\n", i);
|
||||
SDL_SelectVideoDisplay(i);
|
||||
|
||||
SDL_GetDesktopDisplayMode(&mode);
|
||||
SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask, &Gmask,
|
||||
&Bmask, &Amask);
|
||||
fprintf(stderr,
|
||||
" Current mode: %dx%d@%dHz, %d bits-per-pixel\n",
|
||||
mode.w, mode.h, mode.refresh_rate, bpp);
|
||||
if (Rmask || Gmask || Bmask) {
|
||||
fprintf(stderr, " Red Mask = 0x%.8x\n", Rmask);
|
||||
fprintf(stderr, " Green Mask = 0x%.8x\n", Gmask);
|
||||
fprintf(stderr, " Blue Mask = 0x%.8x\n", Bmask);
|
||||
if (Amask)
|
||||
fprintf(stderr, " Alpha Mask = 0x%.8x\n", Amask);
|
||||
}
|
||||
|
||||
/* Print available fullscreen video modes */
|
||||
m = SDL_GetNumDisplayModes();
|
||||
if (m == 0) {
|
||||
fprintf(stderr, "No available fullscreen video modes\n");
|
||||
} else {
|
||||
fprintf(stderr, " Fullscreen video modes:\n");
|
||||
for (j = 0; j < m; ++j) {
|
||||
SDL_GetDisplayMode(j, &mode);
|
||||
SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask,
|
||||
&Gmask, &Bmask, &Amask);
|
||||
fprintf(stderr,
|
||||
" Mode %d: %dx%d@%dHz, %d bits-per-pixel\n",
|
||||
j, mode.w, mode.h, mode.refresh_rate, bpp);
|
||||
if (Rmask || Gmask || Bmask) {
|
||||
fprintf(stderr, " Red Mask = 0x%.8x\n",
|
||||
Rmask);
|
||||
fprintf(stderr, " Green Mask = 0x%.8x\n",
|
||||
Gmask);
|
||||
fprintf(stderr, " Blue Mask = 0x%.8x\n",
|
||||
Bmask);
|
||||
if (Amask)
|
||||
fprintf(stderr,
|
||||
" Alpha Mask = 0x%.8x\n",
|
||||
Amask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SelectVideoDisplay(state->display);
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
SDL_RendererInfo info;
|
||||
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in render drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in render drivers:\n");
|
||||
for (i = 0; i < n; ++i) {
|
||||
SDL_GetRenderDriverInfo(i, &info);
|
||||
PrintRenderer(&info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (state->depth) {
|
||||
case 8:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_INDEX8;
|
||||
break;
|
||||
case 15:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_BGR555;
|
||||
break;
|
||||
case 16:
|
||||
default:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_ABGR1555;
|
||||
break;
|
||||
/* NDS default:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_RGB888;
|
||||
break;*/
|
||||
}
|
||||
fullscreen_mode.w = state->window_w;
|
||||
fullscreen_mode.h = state->window_h;
|
||||
fullscreen_mode.refresh_rate = state->refresh_rate;
|
||||
SDL_SetFullscreenDisplayMode(&fullscreen_mode);
|
||||
|
||||
state->windows =
|
||||
(SDL_WindowID *) SDL_malloc(state->num_windows *
|
||||
sizeof(*state->windows));
|
||||
if (!state->windows) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
return SDL_FALSE;
|
||||
}
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
char title[1024];
|
||||
|
||||
if (state->num_windows > 1) {
|
||||
SDL_snprintf(title, SDL_arraysize(title), "%s %d",
|
||||
state->window_title, i + 1);
|
||||
} else {
|
||||
SDL_strlcpy(title, state->window_title, SDL_arraysize(title));
|
||||
}
|
||||
state->windows[i] =
|
||||
SDL_CreateWindow(title, state->window_x, state->window_y,
|
||||
state->window_w, state->window_h,
|
||||
state->window_flags);
|
||||
if (!state->windows[i]) {
|
||||
fprintf(stderr, "Couldn't create window: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!state->skip_renderer
|
||||
&& (state->renderdriver
|
||||
|| !(state->window_flags & SDL_WINDOW_OPENGL))) {
|
||||
m = -1;
|
||||
if (state->renderdriver) {
|
||||
SDL_RendererInfo info;
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
for (j = 0; j < n; ++j) {
|
||||
SDL_GetRenderDriverInfo(j, &info);
|
||||
if (SDL_strcasecmp(info.name, state->renderdriver) ==
|
||||
0) {
|
||||
m = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (m == n) {
|
||||
fprintf(stderr,
|
||||
"Couldn't find render driver named %s",
|
||||
state->renderdriver);
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
if (SDL_CreateRenderer
|
||||
(state->windows[i], m, state->render_flags) < 0) {
|
||||
fprintf(stderr, "Couldn't create renderer: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
SDL_RendererInfo info;
|
||||
|
||||
fprintf(stderr, "Current renderer:\n");
|
||||
SDL_GetRendererInfo(&info);
|
||||
PrintRenderer(&info);
|
||||
}
|
||||
}
|
||||
}
|
||||
SDL_SelectRenderer(state->windows[0]);
|
||||
}
|
||||
|
||||
if (state->flags & SDL_INIT_AUDIO) {
|
||||
if (state->verbose & VERBOSE_AUDIO) {
|
||||
n = SDL_GetNumAudioDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in audio drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in audio drivers:");
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ",");
|
||||
}
|
||||
fprintf(stderr, " %s", SDL_GetAudioDriver(i));
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
if (SDL_AudioInit(state->audiodriver) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize audio driver: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
fprintf(stderr, "Audio driver: %s\n",
|
||||
SDL_GetCurrentAudioDriver());
|
||||
}
|
||||
|
||||
if (SDL_OpenAudio(&state->audiospec, NULL) < 0) {
|
||||
fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
PrintEvent(SDL_Event * event)
|
||||
{
|
||||
fprintf(stderr, "SDL EVENT: ");
|
||||
switch (event->type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event->window.event) {
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
fprintf(stderr, "Window %d shown", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
fprintf(stderr, "Window %d hidden", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
fprintf(stderr, "Window %d exposed", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
fprintf(stderr, "Window %d moved to %d,%d",
|
||||
event->window.windowID, event->window.data1,
|
||||
event->window.data2);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
fprintf(stderr, "Window %d resized to %dx%d",
|
||||
event->window.windowID, event->window.data1,
|
||||
event->window.data2);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
fprintf(stderr, "Window %d minimized", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
fprintf(stderr, "Window %d maximized", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
fprintf(stderr, "Window %d restored", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
fprintf(stderr, "Mouse entered window %d",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
fprintf(stderr, "Mouse left window %d", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
fprintf(stderr, "Window %d gained keyboard focus",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
fprintf(stderr, "Window %d lost keyboard focus",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
fprintf(stderr, "Window %d closed", event->window.windowID);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Window %d got unknown event %d",
|
||||
event->window.windowID, event->window.event);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
fprintf(stderr,
|
||||
"Keyboard %d: key pressed in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
|
||||
event->key.which, event->key.windowID,
|
||||
event->key.keysym.scancode,
|
||||
SDL_GetScancodeName(event->key.keysym.scancode),
|
||||
event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
fprintf(stderr,
|
||||
"Keyboard %d: key released in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
|
||||
event->key.which, event->key.windowID,
|
||||
event->key.keysym.scancode,
|
||||
SDL_GetScancodeName(event->key.keysym.scancode),
|
||||
event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
|
||||
break;
|
||||
case SDL_TEXTINPUT:
|
||||
fprintf(stderr, "Keyboard %d: text input \"%s\" in window %d",
|
||||
event->text.which, event->text.text, event->text.windowID);
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
fprintf(stderr, "Mouse %d: moved to %d,%d (%d,%d) in window %d",
|
||||
event->motion.which, event->motion.x, event->motion.y,
|
||||
event->motion.xrel, event->motion.yrel,
|
||||
event->motion.windowID);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
fprintf(stderr, "Mouse %d: button %d pressed at %d,%d in window %d",
|
||||
event->button.which, event->button.button, event->button.x,
|
||||
event->button.y, event->button.windowID);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
fprintf(stderr, "Mouse %d: button %d released at %d,%d in window %d",
|
||||
event->button.which, event->button.button, event->button.x,
|
||||
event->button.y, event->button.windowID);
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
fprintf(stderr,
|
||||
"Mouse %d: wheel scrolled %d in x and %d in y in window %d",
|
||||
event->wheel.which, event->wheel.x, event->wheel.y,
|
||||
event->wheel.windowID);
|
||||
break;
|
||||
case SDL_JOYBALLMOTION:
|
||||
fprintf(stderr, "Joystick %d: ball %d moved by %d,%d",
|
||||
event->jball.which, event->jball.ball, event->jball.xrel,
|
||||
event->jball.yrel);
|
||||
break;
|
||||
case SDL_JOYHATMOTION:
|
||||
fprintf(stderr, "Joystick %d: hat %d moved to ", event->jhat.which,
|
||||
event->jhat.hat);
|
||||
switch (event->jhat.value) {
|
||||
case SDL_HAT_CENTERED:
|
||||
fprintf(stderr, "CENTER");
|
||||
break;
|
||||
case SDL_HAT_UP:
|
||||
fprintf(stderr, "UP");
|
||||
break;
|
||||
case SDL_HAT_RIGHTUP:
|
||||
fprintf(stderr, "RIGHTUP");
|
||||
break;
|
||||
case SDL_HAT_RIGHT:
|
||||
fprintf(stderr, "RIGHT");
|
||||
break;
|
||||
case SDL_HAT_RIGHTDOWN:
|
||||
fprintf(stderr, "RIGHTDOWN");
|
||||
break;
|
||||
case SDL_HAT_DOWN:
|
||||
fprintf(stderr, "DOWN");
|
||||
break;
|
||||
case SDL_HAT_LEFTDOWN:
|
||||
fprintf(stderr, "LEFTDOWN");
|
||||
break;
|
||||
case SDL_HAT_LEFT:
|
||||
fprintf(stderr, "LEFT");
|
||||
break;
|
||||
case SDL_HAT_LEFTUP:
|
||||
fprintf(stderr, "LEFTUP");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "UNKNOWN");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
fprintf(stderr, "Joystick %d: button %d pressed",
|
||||
event->jbutton.which, event->jbutton.button);
|
||||
break;
|
||||
case SDL_JOYBUTTONUP:
|
||||
fprintf(stderr, "Joystick %d: button %d released",
|
||||
event->jbutton.which, event->jbutton.button);
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
fprintf(stderr, "Quit requested");
|
||||
break;
|
||||
case SDL_USEREVENT:
|
||||
fprintf(stderr, "User event %d", event->user.code);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unknown event %d", event->type);
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
CommonEvent(CommonState * state, SDL_Event * event, int *done)
|
||||
{
|
||||
if (state->verbose & VERBOSE_EVENT) {
|
||||
PrintEvent(event);
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event->window.event) {
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
*done = 1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
switch (event->key.keysym.sym) {
|
||||
/* Add hotkeys here */
|
||||
case SDLK_g:
|
||||
if (event->key.keysym.mod & KMOD_CTRL) {
|
||||
/* Ctrl-G toggle grab */
|
||||
}
|
||||
break;
|
||||
case SDLK_ESCAPE:
|
||||
*done = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
*done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CommonQuit(CommonState * state)
|
||||
{
|
||||
if (state->flags & SDL_INIT_VIDEO) {
|
||||
SDL_VideoQuit();
|
||||
}
|
||||
if (state->flags & SDL_INIT_AUDIO) {
|
||||
SDL_AudioQuit();
|
||||
}
|
||||
if (state->windows) {
|
||||
SDL_free(state->windows);
|
||||
}
|
||||
SDL_free(state);
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
|
||||
/* A simple test program framework */
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#define VERBOSE_VIDEO 0x00000001
|
||||
#define VERBOSE_MODES 0x00000002
|
||||
#define VERBOSE_RENDER 0x00000004
|
||||
#define VERBOSE_EVENT 0x00000008
|
||||
#define VERBOSE_AUDIO 0x00000010
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* SDL init flags */
|
||||
char **argv;
|
||||
Uint32 flags;
|
||||
Uint32 verbose;
|
||||
|
||||
/* Video info */
|
||||
const char *videodriver;
|
||||
int display;
|
||||
const char *window_title;
|
||||
Uint32 window_flags;
|
||||
int window_x;
|
||||
int window_y;
|
||||
int window_w;
|
||||
int window_h;
|
||||
int depth;
|
||||
int refresh_rate;
|
||||
int num_windows;
|
||||
SDL_WindowID *windows;
|
||||
|
||||
/* Renderer info */
|
||||
const char *renderdriver;
|
||||
Uint32 render_flags;
|
||||
SDL_bool skip_renderer;
|
||||
|
||||
/* Audio info */
|
||||
const char *audiodriver;
|
||||
SDL_AudioSpec audiospec;
|
||||
} CommonState;
|
||||
|
||||
extern CommonState *CommonCreateState(char **argv, Uint32 flags);
|
||||
extern int CommonArg(CommonState * state, int index);
|
||||
extern const char *CommonUsage(CommonState * state);
|
||||
extern SDL_bool CommonInit(CommonState * state);
|
||||
extern void CommonEvent(CommonState * state, SDL_Event * event, int *done);
|
||||
extern void CommonQuit(CommonState * state);
|
|
@ -1,316 +0,0 @@
|
|||
/* Simple program: Move N sprites around on the screen as fast as possible */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <fat.h>
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#define NUM_SPRITES 10
|
||||
#define MAX_SPEED 1
|
||||
|
||||
SDL_Surface *sprite;
|
||||
int numsprites;
|
||||
SDL_Rect *sprite_rects;
|
||||
SDL_Rect *positions;
|
||||
SDL_Rect *velocities;
|
||||
int sprites_visible;
|
||||
int debug_flip;
|
||||
Uint16 sprite_w, sprite_h;
|
||||
|
||||
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||
static void
|
||||
quit(int rc)
|
||||
{
|
||||
SDL_Quit();
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
int
|
||||
LoadSprite(char *file)
|
||||
{
|
||||
SDL_Surface *temp;
|
||||
|
||||
/* Load the sprite image */
|
||||
sprite = SDL_LoadBMP(file);
|
||||
if (sprite == NULL) {
|
||||
fprintf(stderr, "Couldn't load %s: %s", file, SDL_GetError());
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Set transparent pixel as the pixel at (0,0) */
|
||||
if (sprite->format->palette) {
|
||||
SDL_SetColorKey(sprite, (SDL_SRCCOLORKEY | SDL_RLEACCEL),
|
||||
*(Uint8 *) sprite->pixels);
|
||||
}
|
||||
|
||||
/* Convert sprite to video format */
|
||||
temp = SDL_DisplayFormat(sprite);
|
||||
SDL_FreeSurface(sprite);
|
||||
if (temp == NULL) {
|
||||
fprintf(stderr, "Couldn't convert background: %s\n", SDL_GetError());
|
||||
return (-1);
|
||||
}
|
||||
sprite = temp;
|
||||
|
||||
/* We're ready to roll. :) */
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
MoveSprites(SDL_Surface * screen, Uint32 background)
|
||||
{
|
||||
int i, nupdates;
|
||||
SDL_Rect area, *position, *velocity;
|
||||
|
||||
nupdates = 0;
|
||||
/* Erase all the sprites if necessary */
|
||||
if (sprites_visible) {
|
||||
SDL_FillRect(screen, NULL, background);
|
||||
}
|
||||
|
||||
/* Move the sprite, bounce at the wall, and draw */
|
||||
for (i = 0; i < numsprites; ++i) {
|
||||
position = &positions[i];
|
||||
velocity = &velocities[i];
|
||||
position->x += velocity->x;
|
||||
if ((position->x < 0) || (position->x >= (screen->w - sprite_w))) {
|
||||
velocity->x = -velocity->x;
|
||||
position->x += velocity->x;
|
||||
}
|
||||
position->y += velocity->y;
|
||||
if ((position->y < 0) || (position->y >= (screen->h - sprite_w))) {
|
||||
velocity->y = -velocity->y;
|
||||
position->y += velocity->y;
|
||||
}
|
||||
|
||||
/* Blit the sprite onto the screen */
|
||||
area = *position;
|
||||
SDL_BlitSurface(sprite, NULL, screen, &area);
|
||||
sprite_rects[nupdates++] = area;
|
||||
}
|
||||
|
||||
if (debug_flip) {
|
||||
if ((screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) {
|
||||
static int t = 0;
|
||||
|
||||
Uint32 color = SDL_MapRGB(screen->format, 255, 0, 0);
|
||||
SDL_Rect r;
|
||||
r.x = t;
|
||||
/* (sin((float) t * 2 * 3.1459) + 1.0) / 2.0 * (screen->w - 20); */
|
||||
r.y = 0;
|
||||
r.w = 20;
|
||||
r.h = screen->h;
|
||||
|
||||
SDL_FillRect(screen, &r, color);
|
||||
t += 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update the screen! */
|
||||
if ((screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) {
|
||||
SDL_Flip(screen);
|
||||
} else {
|
||||
SDL_UpdateRects(screen, nupdates, sprite_rects);
|
||||
}
|
||||
sprites_visible = 1;
|
||||
}
|
||||
|
||||
/* This is a way of telling whether or not to use hardware surfaces */
|
||||
Uint32
|
||||
FastestFlags(Uint32 flags, int width, int height, int bpp)
|
||||
{
|
||||
const SDL_VideoInfo *info;
|
||||
|
||||
/* Hardware acceleration is only used in fullscreen mode */
|
||||
flags |= SDL_FULLSCREEN;
|
||||
|
||||
/* Check for various video capabilities */
|
||||
info = SDL_GetVideoInfo();
|
||||
if (info->blit_hw_CC && info->blit_fill) {
|
||||
/* We use accelerated colorkeying and color filling */
|
||||
flags |= SDL_HWSURFACE;
|
||||
}
|
||||
/* If we have enough video memory, and will use accelerated
|
||||
blits directly to it, then use page flipping.
|
||||
*/
|
||||
if ((flags & SDL_HWSURFACE) == SDL_HWSURFACE) {
|
||||
/* Direct hardware blitting without double-buffering
|
||||
causes really bad flickering.
|
||||
*/
|
||||
if (info->video_mem * 1024 > (height * width * bpp / 8)) {
|
||||
flags |= SDL_DOUBLEBUF;
|
||||
} else {
|
||||
flags &= ~SDL_HWSURFACE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the flags */
|
||||
return (flags);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
SDL_Surface *screen;
|
||||
Uint8 *mem;
|
||||
int width, height;
|
||||
Uint8 video_bpp;
|
||||
Uint32 videoflags;
|
||||
Uint32 background;
|
||||
int i, done;
|
||||
SDL_Event event;
|
||||
Uint32 then, now, frames;
|
||||
|
||||
consoleDemoInit();
|
||||
puts("Hello world! Initializing FAT...");
|
||||
fatInitDefault();
|
||||
/* Initialize SDL */
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||
return (1);
|
||||
}
|
||||
puts("* initialized SDL");
|
||||
|
||||
numsprites = NUM_SPRITES;
|
||||
videoflags = SDL_SWSURFACE /*| SDL_ANYFORMAT */ ;
|
||||
width = 256;
|
||||
height = 192;
|
||||
video_bpp = 15;
|
||||
debug_flip = 0;
|
||||
while (argc > 1) {
|
||||
--argc;
|
||||
if (strcmp(argv[argc - 1], "-width") == 0) {
|
||||
width = atoi(argv[argc]);
|
||||
--argc;
|
||||
} else if (strcmp(argv[argc - 1], "-height") == 0) {
|
||||
height = atoi(argv[argc]);
|
||||
--argc;
|
||||
} else if (strcmp(argv[argc - 1], "-bpp") == 0) {
|
||||
video_bpp = atoi(argv[argc]);
|
||||
videoflags &= ~SDL_ANYFORMAT;
|
||||
--argc;
|
||||
} else if (strcmp(argv[argc], "-fast") == 0) {
|
||||
videoflags = FastestFlags(videoflags, width, height, video_bpp);
|
||||
} else if (strcmp(argv[argc], "-hw") == 0) {
|
||||
videoflags ^= SDL_HWSURFACE;
|
||||
} else if (strcmp(argv[argc], "-flip") == 0) {
|
||||
videoflags ^= SDL_DOUBLEBUF;
|
||||
} else if (strcmp(argv[argc], "-debugflip") == 0) {
|
||||
debug_flip ^= 1;
|
||||
} else if (strcmp(argv[argc], "-fullscreen") == 0) {
|
||||
videoflags ^= SDL_FULLSCREEN;
|
||||
} else if (isdigit(argv[argc][0])) {
|
||||
numsprites = atoi(argv[argc]);
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"Usage: %s [-bpp N] [-hw] [-flip] [-fast] [-fullscreen] [numsprites]\n",
|
||||
argv[0]);
|
||||
quit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set video mode */
|
||||
screen = SDL_SetVideoMode(width, height, video_bpp, videoflags);
|
||||
if (!screen) {
|
||||
fprintf(stderr, "Couldn't set %dx%d video mode: %s\n",
|
||||
width, height, SDL_GetError());
|
||||
quit(2);
|
||||
}
|
||||
screen->flags &= ~SDL_PREALLOC;
|
||||
puts("* set video mode");
|
||||
|
||||
/* Load the sprite */
|
||||
if (LoadSprite("icon.bmp") < 0) {
|
||||
quit(1);
|
||||
}
|
||||
puts("* loaded sprite");
|
||||
|
||||
/* Allocate memory for the sprite info */
|
||||
mem = (Uint8 *) malloc(4 * sizeof(SDL_Rect) * numsprites);
|
||||
if (mem == NULL) {
|
||||
SDL_FreeSurface(sprite);
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
quit(2);
|
||||
}
|
||||
sprite_rects = (SDL_Rect *) mem;
|
||||
positions = sprite_rects;
|
||||
sprite_rects += numsprites;
|
||||
velocities = sprite_rects;
|
||||
sprite_rects += numsprites;
|
||||
sprite_w = sprite->w;
|
||||
sprite_h = sprite->h;
|
||||
srand(time(NULL));
|
||||
for (i = 0; i < numsprites; ++i) {
|
||||
positions[i].x = rand() % (screen->w - sprite_w);
|
||||
positions[i].y = rand() % (screen->h - sprite_h);
|
||||
positions[i].w = sprite->w;
|
||||
positions[i].h = sprite->h;
|
||||
velocities[i].x = 0;
|
||||
velocities[i].y = 0;
|
||||
while (!velocities[i].x && !velocities[i].y) {
|
||||
velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||
velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||
}
|
||||
}
|
||||
background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
|
||||
|
||||
/* Print out information about our surfaces */
|
||||
printf("Screen is at %d bits per pixel\n", screen->format->BitsPerPixel);
|
||||
if ((screen->flags & SDL_HWSURFACE) == SDL_HWSURFACE) {
|
||||
printf("Screen is in video memory\n");
|
||||
} else {
|
||||
printf("Screen is in system memory\n");
|
||||
}
|
||||
if ((screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) {
|
||||
printf("Screen has double-buffering enabled\n");
|
||||
}
|
||||
if ((sprite->flags & SDL_HWSURFACE) == SDL_HWSURFACE) {
|
||||
printf("Sprite is in video memory\n");
|
||||
} else {
|
||||
printf("Sprite is in system memory\n");
|
||||
}
|
||||
/* Run a sample blit to trigger blit acceleration */
|
||||
{
|
||||
SDL_Rect dst;
|
||||
dst.x = 0;
|
||||
dst.y = 0;
|
||||
dst.w = sprite->w;
|
||||
dst.h = sprite->h;
|
||||
SDL_BlitSurface(sprite, NULL, screen, &dst);
|
||||
SDL_FillRect(screen, &dst, background);
|
||||
}
|
||||
if ((sprite->flags & SDL_HWACCEL) == SDL_HWACCEL) {
|
||||
printf("Sprite blit uses hardware acceleration\n");
|
||||
}
|
||||
if ((sprite->flags & SDL_RLEACCEL) == SDL_RLEACCEL) {
|
||||
printf("Sprite blit uses RLE acceleration\n");
|
||||
}
|
||||
|
||||
/* Loop, blitting sprites and waiting for a keystroke */
|
||||
frames = 0;
|
||||
then = SDL_GetTicks();
|
||||
done = 0;
|
||||
sprites_visible = 0;
|
||||
puts("hello!");
|
||||
while (!done) {
|
||||
/* Check for events */
|
||||
++frames;
|
||||
printf(".");
|
||||
swiWaitForVBlank();
|
||||
MoveSprites(screen, background);
|
||||
}
|
||||
puts("goodbye!");
|
||||
SDL_FreeSurface(sprite);
|
||||
free(mem);
|
||||
|
||||
/* Print out some timing information */
|
||||
now = SDL_GetTicks();
|
||||
if (now > then) {
|
||||
printf("%2.2f frames per second\n",
|
||||
((double) frames * 1000) / (now - then));
|
||||
}
|
||||
SDL_Quit();
|
||||
return (0);
|
||||
}
|
|
@ -1,132 +0,0 @@
|
|||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
ifeq ($(strip $(DEVKITARM)),)
|
||||
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
||||
endif
|
||||
|
||||
include $(DEVKITARM)/ds_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# INCLUDES is a list of directories containing extra header files
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := $(shell basename $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := source
|
||||
DATA := data
|
||||
INCLUDES := include
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
ARCH := -mthumb -mthumb-interwork
|
||||
|
||||
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
|
||||
# *insists* it has a FPU or VFP, and it won't take no for an answer!
|
||||
CFLAGS := -save-temps -g -Wall -O0\
|
||||
-mcpu=arm9tdmi -mtune=arm9tdmi \
|
||||
$(ARCH)
|
||||
|
||||
CFLAGS += $(INCLUDE) -DARM9 -D__NDS__
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fno-exceptions -fno-rtti
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lSDL -lfat -lnds9
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS := $(LIBNDS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CC)
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CXX)
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
.PHONY: $(BUILD) clean
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
$(OUTPUT).ds.gba : $(OUTPUT).nds
|
||||
$(OUTPUT).nds : $(OUTPUT).arm9
|
||||
$(OUTPUT).arm9 : $(OUTPUT).elf
|
||||
$(OUTPUT).elf : $(OFILES)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
%.bin.o : %.bin
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
@$(bin2o)
|
||||
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------------
|
Before Width: | Height: | Size: 578 B |
|
@ -1,965 +0,0 @@
|
|||
|
||||
/* A simple test program framework */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define VIDEO_USAGE \
|
||||
"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display %d] [--fullscreen | --windows N] [--title title] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab]"
|
||||
|
||||
#define AUDIO_USAGE \
|
||||
"[--rate N] [--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE] [--channels N] [--samples N]"
|
||||
|
||||
CommonState *
|
||||
CommonCreateState(char **argv, Uint32 flags)
|
||||
{
|
||||
CommonState *state = SDL_calloc(1, sizeof(*state));
|
||||
if (!state) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Initialize some defaults */
|
||||
state->argv = argv;
|
||||
state->flags = flags;
|
||||
state->window_title = argv[0];
|
||||
state->window_flags = SDL_WINDOW_SHOWN;
|
||||
state->window_x = SDL_WINDOWPOS_UNDEFINED;
|
||||
state->window_y = SDL_WINDOWPOS_UNDEFINED;
|
||||
state->window_w = 256;
|
||||
state->window_h = 192;
|
||||
state->num_windows = 1;
|
||||
state->audiospec.freq = 22050;
|
||||
state->audiospec.format = AUDIO_S16;
|
||||
state->audiospec.channels = 2;
|
||||
state->audiospec.samples = 2048;
|
||||
return state;
|
||||
}
|
||||
|
||||
int
|
||||
CommonArg(CommonState * state, int index)
|
||||
{
|
||||
char **argv = state->argv;
|
||||
|
||||
if (SDL_strcasecmp(argv[index], "--video") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->videodriver = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--renderer") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->renderdriver = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--info") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "all") == 0) {
|
||||
state->verbose |=
|
||||
(VERBOSE_VIDEO | VERBOSE_MODES | VERBOSE_RENDER |
|
||||
VERBOSE_EVENT);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "video") == 0) {
|
||||
state->verbose |= VERBOSE_VIDEO;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "modes") == 0) {
|
||||
state->verbose |= VERBOSE_MODES;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "render") == 0) {
|
||||
state->verbose |= VERBOSE_RENDER;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "event") == 0) {
|
||||
state->verbose |= VERBOSE_EVENT;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--display") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->display = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--fullscreen") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_FULLSCREEN;
|
||||
state->num_windows = 1;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--windows") == 0) {
|
||||
++index;
|
||||
if (!argv[index] || !SDL_isdigit(*argv[index])) {
|
||||
return -1;
|
||||
}
|
||||
if (!(state->window_flags & SDL_WINDOW_FULLSCREEN)) {
|
||||
state->num_windows = SDL_atoi(argv[index]);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--title") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->window_title = argv[index];
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--center") == 0) {
|
||||
state->window_x = SDL_WINDOWPOS_CENTERED;
|
||||
state->window_y = SDL_WINDOWPOS_CENTERED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--position") == 0) {
|
||||
char *x, *y;
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
x = argv[index];
|
||||
y = argv[index];
|
||||
while (*y && *y != ',') {
|
||||
++y;
|
||||
}
|
||||
if (!*y) {
|
||||
return -1;
|
||||
}
|
||||
*y++ = '\0';
|
||||
state->window_x = SDL_atoi(x);
|
||||
state->window_y = SDL_atoi(y);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--geometry") == 0) {
|
||||
char *w, *h;
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
w = argv[index];
|
||||
h = argv[index];
|
||||
while (*h && *h != 'x') {
|
||||
++h;
|
||||
}
|
||||
if (!*h) {
|
||||
return -1;
|
||||
}
|
||||
*h++ = '\0';
|
||||
state->window_w = SDL_atoi(w);
|
||||
state->window_h = SDL_atoi(h);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--depth") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->depth = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--refresh") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->refresh_rate = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--vsync") == 0) {
|
||||
state->render_flags |= SDL_RENDERER_PRESENTVSYNC;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--noframe") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_BORDERLESS;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--resize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_RESIZABLE;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--minimize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_MINIMIZED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--maximize") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_MAXIMIZED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--grab") == 0) {
|
||||
state->window_flags |= SDL_WINDOW_INPUT_GRABBED;
|
||||
return 1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--rate") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.freq = SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--format") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U8") == 0) {
|
||||
state->audiospec.format = AUDIO_U8;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S8") == 0) {
|
||||
state->audiospec.format = AUDIO_S8;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16") == 0) {
|
||||
state->audiospec.format = AUDIO_U16;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16LE") == 0) {
|
||||
state->audiospec.format = AUDIO_U16LSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "U16BE") == 0) {
|
||||
state->audiospec.format = AUDIO_U16MSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16") == 0) {
|
||||
state->audiospec.format = AUDIO_S16;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16LE") == 0) {
|
||||
state->audiospec.format = AUDIO_S16LSB;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "S16BE") == 0) {
|
||||
state->audiospec.format = AUDIO_S16MSB;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--channels") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.channels = (Uint8) SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--samples") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
state->audiospec.samples = (Uint16) SDL_atoi(argv[index]);
|
||||
return 2;
|
||||
}
|
||||
if ((SDL_strcasecmp(argv[index], "-h") == 0)
|
||||
|| (SDL_strcasecmp(argv[index], "--help") == 0)) {
|
||||
/* Print the usage message */
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *
|
||||
CommonUsage(CommonState * state)
|
||||
{
|
||||
switch (state->flags & (SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
|
||||
case SDL_INIT_VIDEO:
|
||||
return VIDEO_USAGE;
|
||||
case SDL_INIT_AUDIO:
|
||||
return AUDIO_USAGE;
|
||||
case (SDL_INIT_VIDEO | SDL_INIT_AUDIO):
|
||||
return VIDEO_USAGE " " AUDIO_USAGE;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintRendererFlag(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_RENDERER_SINGLEBUFFER:
|
||||
fprintf(stderr, "SingleBuffer");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTCOPY:
|
||||
fprintf(stderr, "PresentCopy");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTFLIP2:
|
||||
fprintf(stderr, "PresentFlip2");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTFLIP3:
|
||||
fprintf(stderr, "PresentFlip3");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTDISCARD:
|
||||
fprintf(stderr, "PresentDiscard");
|
||||
break;
|
||||
case SDL_RENDERER_PRESENTVSYNC:
|
||||
fprintf(stderr, "PresentVSync");
|
||||
break;
|
||||
case SDL_RENDERER_ACCELERATED:
|
||||
fprintf(stderr, "Accelerated");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintBlendMode(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_BLENDMODE_NONE:
|
||||
fprintf(stderr, "None");
|
||||
break;
|
||||
case SDL_BLENDMODE_MASK:
|
||||
fprintf(stderr, "Mask");
|
||||
break;
|
||||
case SDL_BLENDMODE_BLEND:
|
||||
fprintf(stderr, "Blend");
|
||||
break;
|
||||
case SDL_BLENDMODE_ADD:
|
||||
fprintf(stderr, "Add");
|
||||
break;
|
||||
case SDL_BLENDMODE_MOD:
|
||||
fprintf(stderr, "Mod");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintScaleMode(Uint32 flag)
|
||||
{
|
||||
switch (flag) {
|
||||
case SDL_TEXTURESCALEMODE_NONE:
|
||||
fprintf(stderr, "None");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_FAST:
|
||||
fprintf(stderr, "Fast");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_SLOW:
|
||||
fprintf(stderr, "Slow");
|
||||
break;
|
||||
case SDL_TEXTURESCALEMODE_BEST:
|
||||
fprintf(stderr, "Best");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", flag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintPixelFormat(Uint32 format)
|
||||
{
|
||||
switch (format) {
|
||||
case SDL_PIXELFORMAT_UNKNOWN:
|
||||
fprintf(stderr, "Unknwon");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX1LSB:
|
||||
fprintf(stderr, "Index1LSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX1MSB:
|
||||
fprintf(stderr, "Index1MSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX4LSB:
|
||||
fprintf(stderr, "Index4LSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX4MSB:
|
||||
fprintf(stderr, "Index4MSB");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_INDEX8:
|
||||
fprintf(stderr, "Index8");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB332:
|
||||
fprintf(stderr, "RGB332");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB444:
|
||||
fprintf(stderr, "RGB444");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB555:
|
||||
fprintf(stderr, "RGB555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB4444:
|
||||
fprintf(stderr, "ARGB4444");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB1555:
|
||||
fprintf(stderr, "ARGB1555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB565:
|
||||
fprintf(stderr, "RGB565");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB24:
|
||||
fprintf(stderr, "RGB24");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR24:
|
||||
fprintf(stderr, "BGR24");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGB888:
|
||||
fprintf(stderr, "RGB888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR888:
|
||||
fprintf(stderr, "BGR888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB8888:
|
||||
fprintf(stderr, "ARGB8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_RGBA8888:
|
||||
fprintf(stderr, "RGBA8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ABGR8888:
|
||||
fprintf(stderr, "ABGR8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGRA8888:
|
||||
fprintf(stderr, "BGRA8888");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ARGB2101010:
|
||||
fprintf(stderr, "ARGB2101010");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YV12:
|
||||
fprintf(stderr, "YV12");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_IYUV:
|
||||
fprintf(stderr, "IYUV");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YUY2:
|
||||
fprintf(stderr, "YUY2");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_UYVY:
|
||||
fprintf(stderr, "UYVY");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_YVYU:
|
||||
fprintf(stderr, "YVYU");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_ABGR1555:
|
||||
fprintf(stderr, "ABGR1555");
|
||||
break;
|
||||
case SDL_PIXELFORMAT_BGR555:
|
||||
fprintf(stderr, "BGR555");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "0x%8.8x", format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PrintRenderer(SDL_RendererInfo * info)
|
||||
{
|
||||
int i, count;
|
||||
|
||||
fprintf(stderr, " Renderer %s:\n", info->name);
|
||||
|
||||
fprintf(stderr, " Flags: 0x%8.8X", info->flags);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->flags) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->flags & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintRendererFlag(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Blend: 0x%8.8X", info->blend_modes);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->blend_modes) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->blend_modes & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintBlendMode(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Scale: 0x%8.8X", info->scale_modes);
|
||||
fprintf(stderr, " (");
|
||||
count = 0;
|
||||
for (i = 0; i < sizeof(info->scale_modes) * 8; ++i) {
|
||||
Uint32 flag = (1 << i);
|
||||
if (info->scale_modes & flag) {
|
||||
if (count > 0) {
|
||||
fprintf(stderr, " | ");
|
||||
}
|
||||
PrintScaleMode(flag);
|
||||
++count;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ")\n");
|
||||
|
||||
fprintf(stderr, " Texture formats (%d): ", info->num_texture_formats);
|
||||
for (i = 0; i < (int) info->num_texture_formats; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ", ");
|
||||
}
|
||||
PrintPixelFormat(info->texture_formats[i]);
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
if (info->max_texture_width || info->max_texture_height) {
|
||||
fprintf(stderr, " Max Texture Size: %dx%d\n",
|
||||
info->max_texture_width, info->max_texture_height);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_bool
|
||||
CommonInit(CommonState * state)
|
||||
{
|
||||
int i, j, m, n;
|
||||
SDL_DisplayMode fullscreen_mode;
|
||||
|
||||
if (state->flags & SDL_INIT_VIDEO) {
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
n = SDL_GetNumVideoDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in video drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in video drivers:");
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ",");
|
||||
}
|
||||
fprintf(stderr, " %s", SDL_GetVideoDriver(i));
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
if (SDL_VideoInit(state->videodriver, 0) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize video driver: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
fprintf(stderr, "Video driver: %s\n",
|
||||
SDL_GetCurrentVideoDriver());
|
||||
}
|
||||
|
||||
if (state->verbose & VERBOSE_MODES) {
|
||||
SDL_DisplayMode mode;
|
||||
int bpp;
|
||||
Uint32 Rmask, Gmask, Bmask, Amask;
|
||||
|
||||
n = SDL_GetNumVideoDisplays();
|
||||
fprintf(stderr, "Number of displays: %d\n", n);
|
||||
for (i = 0; i < n; ++i) {
|
||||
fprintf(stderr, "Display %d:\n", i);
|
||||
SDL_SelectVideoDisplay(i);
|
||||
|
||||
SDL_GetDesktopDisplayMode(&mode);
|
||||
SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask, &Gmask,
|
||||
&Bmask, &Amask);
|
||||
fprintf(stderr,
|
||||
" Current mode: %dx%d@%dHz, %d bits-per-pixel\n",
|
||||
mode.w, mode.h, mode.refresh_rate, bpp);
|
||||
if (Rmask || Gmask || Bmask) {
|
||||
fprintf(stderr, " Red Mask = 0x%.8x\n", Rmask);
|
||||
fprintf(stderr, " Green Mask = 0x%.8x\n", Gmask);
|
||||
fprintf(stderr, " Blue Mask = 0x%.8x\n", Bmask);
|
||||
if (Amask)
|
||||
fprintf(stderr, " Alpha Mask = 0x%.8x\n", Amask);
|
||||
}
|
||||
|
||||
/* Print available fullscreen video modes */
|
||||
m = SDL_GetNumDisplayModes();
|
||||
if (m == 0) {
|
||||
fprintf(stderr, "No available fullscreen video modes\n");
|
||||
} else {
|
||||
fprintf(stderr, " Fullscreen video modes:\n");
|
||||
for (j = 0; j < m; ++j) {
|
||||
SDL_GetDisplayMode(j, &mode);
|
||||
SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask,
|
||||
&Gmask, &Bmask, &Amask);
|
||||
fprintf(stderr,
|
||||
" Mode %d: %dx%d@%dHz, %d bits-per-pixel\n",
|
||||
j, mode.w, mode.h, mode.refresh_rate, bpp);
|
||||
if (Rmask || Gmask || Bmask) {
|
||||
fprintf(stderr, " Red Mask = 0x%.8x\n",
|
||||
Rmask);
|
||||
fprintf(stderr, " Green Mask = 0x%.8x\n",
|
||||
Gmask);
|
||||
fprintf(stderr, " Blue Mask = 0x%.8x\n",
|
||||
Bmask);
|
||||
if (Amask)
|
||||
fprintf(stderr,
|
||||
" Alpha Mask = 0x%.8x\n",
|
||||
Amask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SelectVideoDisplay(state->display);
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
SDL_RendererInfo info;
|
||||
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in render drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in render drivers:\n");
|
||||
for (i = 0; i < n; ++i) {
|
||||
SDL_GetRenderDriverInfo(i, &info);
|
||||
PrintRenderer(&info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (state->depth) {
|
||||
case 8:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_INDEX8;
|
||||
break;
|
||||
case 15:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_BGR555;
|
||||
break;
|
||||
case 16:
|
||||
default:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_ABGR1555;
|
||||
break;
|
||||
/* NDS default:
|
||||
fullscreen_mode.format = SDL_PIXELFORMAT_RGB888;
|
||||
break;*/
|
||||
}
|
||||
fullscreen_mode.w = state->window_w;
|
||||
fullscreen_mode.h = state->window_h;
|
||||
fullscreen_mode.refresh_rate = state->refresh_rate;
|
||||
SDL_SetFullscreenDisplayMode(&fullscreen_mode);
|
||||
|
||||
state->windows =
|
||||
(SDL_WindowID *) SDL_malloc(state->num_windows *
|
||||
sizeof(*state->windows));
|
||||
if (!state->windows) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
return SDL_FALSE;
|
||||
}
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
char title[1024];
|
||||
|
||||
if (state->num_windows > 1) {
|
||||
SDL_snprintf(title, SDL_arraysize(title), "%s %d",
|
||||
state->window_title, i + 1);
|
||||
} else {
|
||||
SDL_strlcpy(title, state->window_title, SDL_arraysize(title));
|
||||
}
|
||||
state->windows[i] =
|
||||
SDL_CreateWindow(title, state->window_x, state->window_y,
|
||||
state->window_w, state->window_h,
|
||||
state->window_flags);
|
||||
if (!state->windows[i]) {
|
||||
fprintf(stderr, "Couldn't create window: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!state->skip_renderer
|
||||
&& (state->renderdriver
|
||||
|| !(state->window_flags & SDL_WINDOW_OPENGL))) {
|
||||
m = -1;
|
||||
if (state->renderdriver) {
|
||||
SDL_RendererInfo info;
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
for (j = 0; j < n; ++j) {
|
||||
SDL_GetRenderDriverInfo(j, &info);
|
||||
if (SDL_strcasecmp(info.name, state->renderdriver) ==
|
||||
0) {
|
||||
m = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (m == n) {
|
||||
fprintf(stderr,
|
||||
"Couldn't find render driver named %s",
|
||||
state->renderdriver);
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
if (SDL_CreateRenderer
|
||||
(state->windows[i], m, state->render_flags) < 0) {
|
||||
fprintf(stderr, "Couldn't create renderer: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
SDL_RendererInfo info;
|
||||
|
||||
fprintf(stderr, "Current renderer:\n");
|
||||
SDL_GetRendererInfo(&info);
|
||||
PrintRenderer(&info);
|
||||
}
|
||||
}
|
||||
}
|
||||
SDL_SelectRenderer(state->windows[0]);
|
||||
}
|
||||
|
||||
if (state->flags & SDL_INIT_AUDIO) {
|
||||
if (state->verbose & VERBOSE_AUDIO) {
|
||||
n = SDL_GetNumAudioDrivers();
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "No built-in audio drivers\n");
|
||||
} else {
|
||||
fprintf(stderr, "Built-in audio drivers:");
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i > 0) {
|
||||
fprintf(stderr, ",");
|
||||
}
|
||||
fprintf(stderr, " %s", SDL_GetAudioDriver(i));
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
if (SDL_AudioInit(state->audiodriver) < 0) {
|
||||
fprintf(stderr, "Couldn't initialize audio driver: %s\n",
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->verbose & VERBOSE_VIDEO) {
|
||||
fprintf(stderr, "Audio driver: %s\n",
|
||||
SDL_GetCurrentAudioDriver());
|
||||
}
|
||||
|
||||
if (SDL_OpenAudio(&state->audiospec, NULL) < 0) {
|
||||
fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
PrintEvent(SDL_Event * event)
|
||||
{
|
||||
fprintf(stderr, "SDL EVENT: ");
|
||||
switch (event->type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event->window.event) {
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
fprintf(stderr, "Window %d shown", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
fprintf(stderr, "Window %d hidden", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
fprintf(stderr, "Window %d exposed", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
fprintf(stderr, "Window %d moved to %d,%d",
|
||||
event->window.windowID, event->window.data1,
|
||||
event->window.data2);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
fprintf(stderr, "Window %d resized to %dx%d",
|
||||
event->window.windowID, event->window.data1,
|
||||
event->window.data2);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
fprintf(stderr, "Window %d minimized", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
fprintf(stderr, "Window %d maximized", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
fprintf(stderr, "Window %d restored", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
fprintf(stderr, "Mouse entered window %d",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
fprintf(stderr, "Mouse left window %d", event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
fprintf(stderr, "Window %d gained keyboard focus",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
fprintf(stderr, "Window %d lost keyboard focus",
|
||||
event->window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
fprintf(stderr, "Window %d closed", event->window.windowID);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Window %d got unknown event %d",
|
||||
event->window.windowID, event->window.event);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
fprintf(stderr,
|
||||
"Keyboard %d: key pressed in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
|
||||
event->key.which, event->key.windowID,
|
||||
event->key.keysym.scancode,
|
||||
SDL_GetScancodeName(event->key.keysym.scancode),
|
||||
event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
fprintf(stderr,
|
||||
"Keyboard %d: key released in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
|
||||
event->key.which, event->key.windowID,
|
||||
event->key.keysym.scancode,
|
||||
SDL_GetScancodeName(event->key.keysym.scancode),
|
||||
event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
|
||||
break;
|
||||
case SDL_TEXTINPUT:
|
||||
fprintf(stderr, "Keyboard %d: text input \"%s\" in window %d",
|
||||
event->text.which, event->text.text, event->text.windowID);
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
fprintf(stderr, "Mouse %d: moved to %d,%d (%d,%d) in window %d",
|
||||
event->motion.which, event->motion.x, event->motion.y,
|
||||
event->motion.xrel, event->motion.yrel,
|
||||
event->motion.windowID);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
fprintf(stderr, "Mouse %d: button %d pressed at %d,%d in window %d",
|
||||
event->button.which, event->button.button, event->button.x,
|
||||
event->button.y, event->button.windowID);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
fprintf(stderr, "Mouse %d: button %d released at %d,%d in window %d",
|
||||
event->button.which, event->button.button, event->button.x,
|
||||
event->button.y, event->button.windowID);
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
fprintf(stderr,
|
||||
"Mouse %d: wheel scrolled %d in x and %d in y in window %d",
|
||||
event->wheel.which, event->wheel.x, event->wheel.y,
|
||||
event->wheel.windowID);
|
||||
break;
|
||||
case SDL_JOYBALLMOTION:
|
||||
fprintf(stderr, "Joystick %d: ball %d moved by %d,%d",
|
||||
event->jball.which, event->jball.ball, event->jball.xrel,
|
||||
event->jball.yrel);
|
||||
break;
|
||||
case SDL_JOYHATMOTION:
|
||||
fprintf(stderr, "Joystick %d: hat %d moved to ", event->jhat.which,
|
||||
event->jhat.hat);
|
||||
switch (event->jhat.value) {
|
||||
case SDL_HAT_CENTERED:
|
||||
fprintf(stderr, "CENTER");
|
||||
break;
|
||||
case SDL_HAT_UP:
|
||||
fprintf(stderr, "UP");
|
||||
break;
|
||||
case SDL_HAT_RIGHTUP:
|
||||
fprintf(stderr, "RIGHTUP");
|
||||
break;
|
||||
case SDL_HAT_RIGHT:
|
||||
fprintf(stderr, "RIGHT");
|
||||
break;
|
||||
case SDL_HAT_RIGHTDOWN:
|
||||
fprintf(stderr, "RIGHTDOWN");
|
||||
break;
|
||||
case SDL_HAT_DOWN:
|
||||
fprintf(stderr, "DOWN");
|
||||
break;
|
||||
case SDL_HAT_LEFTDOWN:
|
||||
fprintf(stderr, "LEFTDOWN");
|
||||
break;
|
||||
case SDL_HAT_LEFT:
|
||||
fprintf(stderr, "LEFT");
|
||||
break;
|
||||
case SDL_HAT_LEFTUP:
|
||||
fprintf(stderr, "LEFTUP");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "UNKNOWN");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
fprintf(stderr, "Joystick %d: button %d pressed",
|
||||
event->jbutton.which, event->jbutton.button);
|
||||
break;
|
||||
case SDL_JOYBUTTONUP:
|
||||
fprintf(stderr, "Joystick %d: button %d released",
|
||||
event->jbutton.which, event->jbutton.button);
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
fprintf(stderr, "Quit requested");
|
||||
break;
|
||||
case SDL_USEREVENT:
|
||||
fprintf(stderr, "User event %d", event->user.code);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unknown event %d", event->type);
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
CommonEvent(CommonState * state, SDL_Event * event, int *done)
|
||||
{
|
||||
if (state->verbose & VERBOSE_EVENT) {
|
||||
PrintEvent(event);
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event->window.event) {
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
*done = 1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
switch (event->key.keysym.sym) {
|
||||
/* Add hotkeys here */
|
||||
case SDLK_g:
|
||||
if (event->key.keysym.mod & KMOD_CTRL) {
|
||||
/* Ctrl-G toggle grab */
|
||||
}
|
||||
break;
|
||||
case SDLK_ESCAPE:
|
||||
*done = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
*done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CommonQuit(CommonState * state)
|
||||
{
|
||||
if (state->flags & SDL_INIT_VIDEO) {
|
||||
SDL_VideoQuit();
|
||||
}
|
||||
if (state->flags & SDL_INIT_AUDIO) {
|
||||
SDL_AudioQuit();
|
||||
}
|
||||
if (state->windows) {
|
||||
SDL_free(state->windows);
|
||||
}
|
||||
SDL_free(state);
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
|
||||
/* A simple test program framework */
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#define VERBOSE_VIDEO 0x00000001
|
||||
#define VERBOSE_MODES 0x00000002
|
||||
#define VERBOSE_RENDER 0x00000004
|
||||
#define VERBOSE_EVENT 0x00000008
|
||||
#define VERBOSE_AUDIO 0x00000010
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* SDL init flags */
|
||||
char **argv;
|
||||
Uint32 flags;
|
||||
Uint32 verbose;
|
||||
|
||||
/* Video info */
|
||||
const char *videodriver;
|
||||
int display;
|
||||
const char *window_title;
|
||||
Uint32 window_flags;
|
||||
int window_x;
|
||||
int window_y;
|
||||
int window_w;
|
||||
int window_h;
|
||||
int depth;
|
||||
int refresh_rate;
|
||||
int num_windows;
|
||||
SDL_WindowID *windows;
|
||||
|
||||
/* Renderer info */
|
||||
const char *renderdriver;
|
||||
Uint32 render_flags;
|
||||
SDL_bool skip_renderer;
|
||||
|
||||
/* Audio info */
|
||||
const char *audiodriver;
|
||||
SDL_AudioSpec audiospec;
|
||||
} CommonState;
|
||||
|
||||
extern CommonState *CommonCreateState(char **argv, Uint32 flags);
|
||||
extern int CommonArg(CommonState * state, int index);
|
||||
extern const char *CommonUsage(CommonState * state);
|
||||
extern SDL_bool CommonInit(CommonState * state);
|
||||
extern void CommonEvent(CommonState * state, SDL_Event * event, int *done);
|
||||
extern void CommonQuit(CommonState * state);
|
|
@ -1,270 +0,0 @@
|
|||
/* Simple program: Move N sprites around on the screen as fast as possible */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <nds.h>
|
||||
#include <fat.h>
|
||||
#include "common.h"
|
||||
|
||||
#define NUM_SPRITES 10
|
||||
#define MAX_SPEED 1
|
||||
|
||||
static CommonState *state;
|
||||
static int num_sprites;
|
||||
static SDL_TextureID *sprites;
|
||||
static SDL_bool cycle_color;
|
||||
static SDL_bool cycle_alpha;
|
||||
static int cycle_direction = 1;
|
||||
static int current_alpha = 0;
|
||||
static int current_color = 0;
|
||||
static SDL_Rect *positions;
|
||||
static SDL_Rect *velocities;
|
||||
static int sprite_w, sprite_h;
|
||||
static SDL_BlendMode blendMode = SDL_BLENDMODE_MASK;
|
||||
static SDL_TextureScaleMode scaleMode = SDL_TEXTURESCALEMODE_NONE;
|
||||
|
||||
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||
static void
|
||||
quit(int rc)
|
||||
{
|
||||
if (sprites) {
|
||||
SDL_free(sprites);
|
||||
}
|
||||
if (positions) {
|
||||
SDL_free(positions);
|
||||
}
|
||||
if (velocities) {
|
||||
SDL_free(velocities);
|
||||
}
|
||||
CommonQuit(state);
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
int
|
||||
LoadSprite(char *file)
|
||||
{
|
||||
int i;
|
||||
SDL_Surface *temp;
|
||||
|
||||
/* Load the sprite image */
|
||||
temp = SDL_LoadBMP(file);
|
||||
if (temp == NULL) {
|
||||
fprintf(stderr, "Couldn't load %s: %s", file, SDL_GetError());
|
||||
return (-1);
|
||||
}
|
||||
sprite_w = temp->w;
|
||||
sprite_h = temp->h;
|
||||
|
||||
/* Set transparent pixel as the pixel at (0,0) */
|
||||
if (temp->format->palette) {
|
||||
SDL_SetColorKey(temp, SDL_SRCCOLORKEY, *(Uint8 *) temp->pixels);
|
||||
}
|
||||
|
||||
/* Create textures from the image */
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
SDL_SelectRenderer(state->windows[i]);
|
||||
sprites[i] = SDL_CreateTextureFromSurface(0, temp);
|
||||
if (!sprites[i]) {
|
||||
fprintf(stderr, "Couldn't create texture: %s\n", SDL_GetError());
|
||||
SDL_FreeSurface(temp);
|
||||
return (-1);
|
||||
}
|
||||
SDL_SetTextureBlendMode(sprites[i], blendMode);
|
||||
SDL_SetTextureScaleMode(sprites[i], scaleMode);
|
||||
}
|
||||
SDL_FreeSurface(temp);
|
||||
|
||||
/* We're ready to roll. :) */
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
LoadSprite2(const u8 * ptr, int size)
|
||||
{
|
||||
int i;
|
||||
SDL_Rect r = { 0, 0, 32, 32 };
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
SDL_SelectRenderer(state->windows[i]);
|
||||
sprites[i] = SDL_CreateTexture(SDL_PIXELFORMAT_ABGR1555,
|
||||
SDL_TEXTUREACCESS_STATIC, r.w, r.h);
|
||||
if (!sprites[i]) {
|
||||
fprintf(stderr, "Couldn't create texture: %s\n", SDL_GetError());
|
||||
return -1;
|
||||
}
|
||||
SDL_UpdateTexture(sprites[i], &r, ptr, r.w * 2);
|
||||
SDL_SetTextureBlendMode(sprites[i], blendMode);
|
||||
SDL_SetTextureScaleMode(sprites[i], scaleMode);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
MoveSprites(SDL_WindowID window, SDL_TextureID sprite)
|
||||
{
|
||||
int i, n;
|
||||
int window_w, window_h;
|
||||
SDL_Rect area, *position, *velocity;
|
||||
|
||||
SDL_SelectRenderer(window);
|
||||
|
||||
/* Query the sizes */
|
||||
SDL_GetWindowSize(window, &window_w, &window_h);
|
||||
|
||||
/* Cycle the color and alpha, if desired */
|
||||
if (cycle_color) {
|
||||
current_color += cycle_direction;
|
||||
if (current_color < 0) {
|
||||
current_color = 0;
|
||||
cycle_direction = -cycle_direction;
|
||||
}
|
||||
if (current_color > 255) {
|
||||
current_color = 255;
|
||||
cycle_direction = -cycle_direction;
|
||||
}
|
||||
SDL_SetTextureColorMod(sprite, 255, (Uint8) current_color,
|
||||
(Uint8) current_color);
|
||||
}
|
||||
if (cycle_alpha) {
|
||||
current_alpha += cycle_direction;
|
||||
if (current_alpha < 0) {
|
||||
current_alpha = 0;
|
||||
cycle_direction = -cycle_direction;
|
||||
}
|
||||
if (current_alpha > 255) {
|
||||
current_alpha = 255;
|
||||
cycle_direction = -cycle_direction;
|
||||
}
|
||||
SDL_SetTextureAlphaMod(sprite, (Uint8) current_alpha);
|
||||
}
|
||||
|
||||
/* Move the sprite, bounce at the wall, and draw */
|
||||
n = 0;
|
||||
SDL_RenderFill(0xA0, 0xA0, 0xA0, 0xFF, NULL);
|
||||
for (i = 0; i < num_sprites; ++i) {
|
||||
position = &positions[i];
|
||||
velocity = &velocities[i];
|
||||
position->x += velocity->x;
|
||||
if ((position->x < 0) || (position->x >= (window_w - sprite_w))) {
|
||||
velocity->x = -velocity->x;
|
||||
position->x += velocity->x;
|
||||
}
|
||||
position->y += velocity->y;
|
||||
if ((position->y < 0) || (position->y >= (window_h - sprite_w))) {
|
||||
velocity->y = -velocity->y;
|
||||
position->y += velocity->y;
|
||||
}
|
||||
|
||||
/* Blit the sprite onto the screen */
|
||||
SDL_RenderCopy(sprite, NULL, position);
|
||||
}
|
||||
|
||||
/* Update the screen! */
|
||||
SDL_RenderPresent();
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int i, done;
|
||||
SDL_Event event;
|
||||
Uint32 then, now, frames;
|
||||
|
||||
consoleDemoInit();
|
||||
puts("Hello world! Initializing FAT...");
|
||||
fatInitDefault();
|
||||
|
||||
/* Initialize parameters */
|
||||
num_sprites = NUM_SPRITES;
|
||||
|
||||
/* Initialize test framework */
|
||||
state = CommonCreateState(argv, SDL_INIT_VIDEO);
|
||||
if (!state) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!CommonInit(state)) {
|
||||
quit(2);
|
||||
}
|
||||
|
||||
/* Create the windows, initialize the renderers, and load the textures */
|
||||
sprites =
|
||||
(SDL_TextureID *) SDL_malloc(state->num_windows * sizeof(*sprites));
|
||||
if (!sprites) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
quit(2);
|
||||
}
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
SDL_SelectRenderer(state->windows[i]);
|
||||
SDL_RenderFill(0xA0, 0xA0, 0xA0, 0xFF, NULL);
|
||||
}
|
||||
if (LoadSprite("icon.bmp") < 0) {
|
||||
printf("\nerrored.\n");
|
||||
while (1);
|
||||
quit(2);
|
||||
}
|
||||
|
||||
/* Allocate memory for the sprite info */
|
||||
positions = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect));
|
||||
velocities = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect));
|
||||
if (!positions || !velocities) {
|
||||
fprintf(stderr, "Out of memory!\n");
|
||||
quit(2);
|
||||
}
|
||||
srand(time(NULL));
|
||||
if (scaleMode != SDL_TEXTURESCALEMODE_NONE) {
|
||||
sprite_w += sprite_w / 2;
|
||||
sprite_h += sprite_h / 2;
|
||||
}
|
||||
for (i = 0; i < num_sprites; ++i) {
|
||||
positions[i].x = rand() % (state->window_w - sprite_w);
|
||||
positions[i].y = rand() % (state->window_h - sprite_h);
|
||||
positions[i].w = sprite_w;
|
||||
positions[i].h = sprite_h;
|
||||
velocities[i].x = 0;
|
||||
velocities[i].y = 0;
|
||||
while (!velocities[i].x && !velocities[i].y) {
|
||||
velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||
velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main render loop */
|
||||
frames = 0;
|
||||
then = SDL_GetTicks();
|
||||
done = 0;
|
||||
while (!done) {
|
||||
/* Check for events */
|
||||
++frames;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
CommonEvent(state, &event, &done);
|
||||
switch (event.type) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event.window.event) {
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
SDL_SelectRenderer(event.window.windowID);
|
||||
SDL_RenderFill(0xA0, 0xA0, 0xA0, 0xFF, NULL);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
MoveSprites(state->windows[i], sprites[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Print out some timing information */
|
||||
now = SDL_GetTicks();
|
||||
if (now > then) {
|
||||
printf("%2.2f frames per second\n",
|
||||
((double) frames * 1000) / (now - then));
|
||||
}
|
||||
|
||||
quit(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
|
@ -1,14 +0,0 @@
|
|||
#define picture_width 32
|
||||
#define picture_height 32
|
||||
static char picture_bits[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x18,
|
||||
0x64, 0x6f, 0xf6, 0x26, 0x0a, 0x00, 0x00, 0x50, 0xf2, 0xff, 0xff, 0x4f,
|
||||
0x14, 0x04, 0x00, 0x28, 0x14, 0x0e, 0x00, 0x28, 0x10, 0x32, 0x00, 0x08,
|
||||
0x94, 0x03, 0x00, 0x08, 0xf4, 0x04, 0x00, 0x08, 0xb0, 0x08, 0x00, 0x08,
|
||||
0x34, 0x01, 0x00, 0x28, 0x34, 0x01, 0x00, 0x28, 0x12, 0x00, 0x40, 0x48,
|
||||
0x12, 0x20, 0xa6, 0x48, 0x14, 0x50, 0x11, 0x29, 0x14, 0x50, 0x48, 0x2a,
|
||||
0x10, 0x27, 0xac, 0x0e, 0xd4, 0x71, 0xe8, 0x0a, 0x74, 0x20, 0xa8, 0x0a,
|
||||
0x14, 0x20, 0x00, 0x08, 0x10, 0x50, 0x00, 0x08, 0x14, 0x00, 0x00, 0x28,
|
||||
0x14, 0x00, 0x00, 0x28, 0xf2, 0xff, 0xff, 0x4f, 0x0a, 0x00, 0x00, 0x50,
|
||||
0x64, 0x6f, 0xf6, 0x26, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 401 KiB |