diff --git a/project/jni/application/src b/project/jni/application/src index 59d41f41e..104f796a6 120000 --- a/project/jni/application/src +++ b/project/jni/application/src @@ -1 +1 @@ -fheroes2 \ No newline at end of file +ballfield \ No newline at end of file diff --git a/project/jni/sdl-1.2/src/video/android/SDL_fake_stdout.c b/project/jni/sdl-1.2/src/video/android/SDL_fake_stdout.c new file mode 120000 index 000000000..f63ebc09f --- /dev/null +++ b/project/jni/sdl-1.2/src/video/android/SDL_fake_stdout.c @@ -0,0 +1 @@ +../../../../sdl-1.3/src/video/android/SDL_fake_stdout.c \ No newline at end of file diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c index 34c25a002..2438e4f47 100644 --- a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c @@ -229,6 +229,8 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t JavaShowScreenKeyboard = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "showScreenKeyboard", "()V"); ANDROID_InitOSKeymap(); + + SDL_ANDROID_initFakeStdout(); } int SDL_ANDROID_SetApplicationPutToBackgroundCallback( diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.h b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.h index 7caa5c3a5..036f074a7 100644 --- a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.h +++ b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.h @@ -51,6 +51,7 @@ extern void SDL_ANDROID_VideoContextRecreated(); extern void SDL_ANDROID_processAndroidTrackballDampening(); extern void SDL_ANDROID_processMoveMouseWithKeyboard(); extern int SDL_ANDROID_InsideVideoThread(); +extern void SDL_ANDROID_initFakeStdout(); extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex); extern void SDL_ANDROID_ProcessDeferredEvents(); extern void SDL_ANDROID_WarpMouse(int x, int y); diff --git a/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.c b/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.c new file mode 100644 index 000000000..78fb69966 --- /dev/null +++ b/project/jni/sdl-1.3/src/video/android/SDL_fake_stdout.c @@ -0,0 +1,40 @@ +/* +Writing to stdout will crash your program on some particular Android tablets. +Although this is the device bug I've put a workaround here, +it is heavily dependent on NDK internals and is not portable in any way. +*/ + +#include +#include + +extern FILE __SDL_fake_stdout[]; +extern int __SDL_android_printf(const char * fmt, ...); + +FILE __SDL_fake_stdout[3]; + +extern void SDL_ANDROID_initFakeStdout() +{ + FILE * ff = NULL; + __SDL_fake_stdout[0] = * fopen("/dev/null", "r"); + __SDL_fake_stdout[1] = * fopen("/dev/null", "w"); + __SDL_fake_stdout[2] = * fopen("/dev/null", "w"); +} + +int __SDL_android_printf(const char * fmt, ...) +{ + int return_value; + char buff[1024]; + va_list ap; + va_start(ap, fmt); + /* + int characters = vfprintf(stdout, fmt, ap); // get buffer size + if(characters<0) return; + char* buff = new char[characters+1]; + return_value = vsprintf(buff, fmt, ap); + */ + return_value = vsnprintf(buff, sizeof(buff), fmt, ap); + va_end(ap); + __android_log_print(ANDROID_LOG_INFO, "libSDL", buff); + //delete buff; + return return_value; +} diff --git a/project/jni/sdl_fake_stdout/SDL_fake_stdout.cpp b/project/jni/sdl_fake_stdout/SDL_fake_stdout.cpp index 592d5f1c5..351270f47 100644 --- a/project/jni/sdl_fake_stdout/SDL_fake_stdout.cpp +++ b/project/jni/sdl_fake_stdout/SDL_fake_stdout.cpp @@ -1,46 +1,7 @@ -/* -Writing to stdout will crash your program on some particular Android tablets. -Although this is the device bug I've put a workaround here, -it is heavily dependent on NDK internals and is not portable in any way. -*/ - -#ifndef _SDL_fake_stdout_h -#define _SDL_fake_stdout_h #include #include #include -extern "C" FILE __SDL_fake_stdout[]; - -FILE __SDL_fake_stdout[3]; - -extern "C" void SDL_ANDROID_initFakeStdout() -{ - FILE * ff = NULL; - __SDL_fake_stdout[0] = * fopen("/dev/null", "r"); - __SDL_fake_stdout[1] = * fopen("/dev/null", "w"); - __SDL_fake_stdout[2] = * fopen("/dev/null", "w"); -} - -int __SDL_android_printf(const char * fmt, ...) -{ - int return_value; - char buff[1024]; - va_list ap; - va_start(ap, fmt); - /* - int characters = vfprintf(stdout, fmt, ap); // get buffer size - if(characters<0) return; - char* buff = new char[characters+1]; - return_value = vsprintf(buff, fmt, ap); - */ - return_value = vsnprintf(buff, sizeof(buff), fmt, ap); - va_end(ap); - __android_log_print(ANDROID_LOG_INFO, "libSDL", buff); - //delete buff; - return return_value; -} - /* Outputting anything to cout/cerr WILL CRASH YOUR PROGRAM on specific devices - x5a/x6d Android 2.1 tablet, and some other tablets, however the same code runs on my HTC Evo without problem. @@ -119,4 +80,3 @@ ostream __SDL_fake_cerr(new _android_debugbuf()); ostream __SDL_fake_clog(new _android_debugbuf()); } -#endif diff --git a/project/jni/sdl_main/sdl_main.c b/project/jni/sdl_main/sdl_main.c index 668424ff6..bb1e0891b 100644 --- a/project/jni/sdl_main/sdl_main.c +++ b/project/jni/sdl_main/sdl_main.c @@ -24,8 +24,6 @@ #define JAVA_EXPORT_NAME1(name,package) JAVA_EXPORT_NAME2(name,package) #define JAVA_EXPORT_NAME(name) JAVA_EXPORT_NAME1(name,SDL_JAVA_PACKAGE_PATH) -extern C_LINKAGE void SDL_ANDROID_initFakeStdout(void); - extern C_LINKAGE void JAVA_EXPORT_NAME(DemoRenderer_nativeInit) ( JNIEnv* env, jobject thiz, jstring jcurdir, jstring cmdline ) { @@ -88,8 +86,6 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInit) ( JNIEnv* env, jobject thiz, jstring for( i = 0; i < argc; i++ ) __android_log_print(ANDROID_LOG_INFO, "libSDL", "param %d = \"%s\"", i, argv[i]); - SDL_ANDROID_initFakeStdout(); - main( argc, argv ); };