Files
commandergenius/project/jni/sdl_main/sdl_main.c

115 lines
2.4 KiB
C

#ifdef ANDROID
#include <unistd.h>
#include <stdlib.h>
#include <jni.h>
#include <android/log.h>
#include "SDL_thread.h"
#include "SDL_main.h"
/* JNI-C wrapper stuff */
#ifdef __cplusplus
#define C_LINKAGE "C"
#else
#define C_LINKAGE
#endif
#ifndef SDL_JAVA_PACKAGE_PATH
#error You have to define SDL_JAVA_PACKAGE_PATH to your package path with dots replaced with underscores, for example "com_example_SanAngeles"
#endif
#define JAVA_EXPORT_NAME2(name,package) Java_##package##_##name
#define JAVA_EXPORT_NAME1(name,package) JAVA_EXPORT_NAME2(name,package)
#define JAVA_EXPORT_NAME(name) JAVA_EXPORT_NAME1(name,SDL_JAVA_PACKAGE_PATH)
static int isSdcardUsed = 0;
extern C_LINKAGE void
JAVA_EXPORT_NAME(DemoRenderer_nativeInit) ( JNIEnv* env, jobject thiz, jstring cmdline )
{
char curdir[512];
const jbyte *str;
int argc = 1;
char ** argv = { "sdl" };
if( isSdcardUsed )
{
strcpy(curdir, "/sdcard/app-data/");
strcat(curdir, SDL_CURDIR_PATH);
}
else
{
strcpy(curdir, "/data/data/");
strcat(curdir, SDL_CURDIR_PATH);
strcat(curdir, "/files");
}
chdir(curdir);
setenv("HOME", curdir, 1);
str = (*env)->GetStringUTFChars(env, cmdline, NULL);
if (str != NULL && strlen(str) > 0)
{
char * str1, * str2;
argc = 0;
str1 = strdup(str);
str2 = str1;
int i = 0;
while(str2)
{
argc++;
str2 = strchr(str2, ' ');
if(!str2)
break;
str2++;
}
argv = (char **)malloc(argc*sizeof(char *));
str2 = str1;
while(str2)
{
argv[i] = str2;
i++;
str2 = strchr(str2, ' ');
if(str2)
*str2 = 0;
else
break;
str2++;
}
}
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Calling SDL_main(\"%s\")", str);
(*env)->ReleaseStringUTFChars(env, cmdline, str);
main( argc, argv );
};
extern C_LINKAGE void
JAVA_EXPORT_NAME(Settings_nativeIsSdcardUsed) ( JNIEnv* env, jobject thiz, jint flag )
{
isSdcardUsed = flag;
}
extern C_LINKAGE void
JAVA_EXPORT_NAME(Settings_nativeSetEnv) ( JNIEnv* env, jobject thiz, jstring j_name, jstring j_value )
{
jboolean iscopy;
const char *name = (*env)->GetStringUTFChars(env, j_name, &iscopy);
const char *value = (*env)->GetStringUTFChars(env, j_value, &iscopy);
setenv(name, value, 1);
(*env)->ReleaseStringUTFChars(env, j_name, name);
(*env)->ReleaseStringUTFChars(env, j_value, value);
}
#undef JAVA_EXPORT_NAME
#undef JAVA_EXPORT_NAME1
#undef JAVA_EXPORT_NAME2
#undef C_LINKAGE
#endif