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
This commit is contained in:
gregory.hainaut@gmail.com 2011-06-05 09:57:49 +00:00
parent e9183c87f0
commit daa5a00a98
162 changed files with 0 additions and 32465 deletions

View File

@ -1,3 +0,0 @@
handle SIGUSR1 pass noprint
handle SIGUSR2 pass noprint
break main

View File

@ -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)

View File

@ -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*

View File

@ -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

View File

@ -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, &micro) != 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
])

View File

@ -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, &micro) != 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
])

View File

@ -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

View File

@ -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)

View File

@ -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.

View File

@ -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;
}

View File

@ -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 */

View File

@ -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();
}

View File

@ -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 */

View File

@ -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;
}

View File

@ -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 */

View File

@ -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 */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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",
};

View File

@ -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",
};

View File

@ -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",
};

View File

@ -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();
}

View File

@ -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 */

View File

@ -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();
}

View File

@ -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 */

File diff suppressed because it is too large Load Diff

View File

@ -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 */

View File

@ -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

View File

@ -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;
}

View File

@ -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);
}

View File

@ -1 +0,0 @@
Hello World!

View File

@ -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();
}

View File

@ -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 */

View File

@ -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();
}

View File

@ -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 */

View File

@ -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;
}

View File

@ -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);
}

File diff suppressed because it is too large Load Diff

View File

@ -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: */

File diff suppressed because it is too large Load Diff

View File

@ -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])

View File

@ -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

View File

@ -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);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 578 B

View File

@ -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);
}

Binary file not shown.

View File

@ -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
#---------------------------------------------------------------------------------------

View File

@ -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;
}

View File

@ -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
#---------------------------------------------------------------------------------------

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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
#---------------------------------------------------------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 578 B

View File

@ -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);
}

View File

@ -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);

View File

@ -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: */

View File

@ -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};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Some files were not shown because too many files have changed in this diff Show More