From 2ceae8b42ee74217733df44428533a8aee598d4d Mon Sep 17 00:00:00 2001 From: Ender's Games Date: Tue, 28 Aug 2018 03:07:23 -0400 Subject: [PATCH] Android: Parameter to swap dynamic disk --- .../java/com/reicast/emulator/emu/JNIdc.java | 2 +- .../com/reicast/emulator/emu/OnScreenMenu.java | 3 ++- .../reicast/src/main/jni/src/Android.cpp | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/JNIdc.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/JNIdc.java index 3eee04438..8dc38e99e 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/JNIdc.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/JNIdc.java @@ -26,7 +26,7 @@ public final class JNIdc public static native void initControllers(boolean[] controllers, int[][] peripherals); public static native void setupMic(Object sip); - public static native void diskSwap(); + public static native void diskSwap(String disk); public static native void vmuSwap(); public static native void setupVmu(Object sip); public static native void dynarec(int dynarec); diff --git a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/OnScreenMenu.java b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/OnScreenMenu.java index f4aaa1907..ed5bb027f 100644 --- a/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/OnScreenMenu.java +++ b/shell/android-studio/reicast/src/main/java/com/reicast/emulator/emu/OnScreenMenu.java @@ -496,7 +496,8 @@ public class OnScreenMenu { OnClickListener clickDisk = new OnClickListener() { public void onClick(View v) { - JNIdc.diskSwap(); + if (Emulator.bootdisk == null) + JNIdc.diskSwap(null); dismiss(); } }; diff --git a/shell/android-studio/reicast/src/main/jni/src/Android.cpp b/shell/android-studio/reicast/src/main/jni/src/Android.cpp index 9c327ee8c..2f74a577a 100644 --- a/shell/android-studio/reicast/src/main/jni/src/Android.cpp +++ b/shell/android-studio/reicast/src/main/jni/src/Android.cpp @@ -41,7 +41,7 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vjoy(JNIEnv * env, jo JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_initControllers(JNIEnv *env, jobject obj, jbooleanArray controllers, jobjectArray peripherals) __attribute__((visibility("default"))); JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupMic(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default"))); -JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj) __attribute__((visibility("default"))); +JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj,jstring disk) __attribute__((visibility("default"))); JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,jobject obj) __attribute__((visibility("default"))); JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default"))); @@ -445,7 +445,7 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_destroy(JNIEnv *env,j dc_term(); } -JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj) +JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env,jobject obj,jstring disk) { if (settings.imgread.LoadDefaultImage == 1) { if (!gamedisk) settings.imgread.DefaultImage[0] = '\0'; @@ -455,6 +455,19 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_diskSwap(JNIEnv *env, settings.imgread.DefaultImage[sizeof(settings.imgread.DefaultImage) - 1] = '\0'; } DiscSwap(); + } else if (disk != NULL) { + settings.imgread.LoadDefaultImage = 1; + const char *P = disk ? env->GetStringUTFChars(disk, 0) : 0; + if (!P) settings.imgread.DefaultImage[0] = '\0'; + else { + printf("Got URI: '%s'\n", P); + strncpy(settings.imgread.DefaultImage, + (strlen(P) >= 7) && !memcmp(P, "file://", 7) ? P + 7 : P, + sizeof(settings.imgread.DefaultImage)); + settings.imgread.DefaultImage[sizeof(settings.imgread.DefaultImage) - 1] = '\0'; + env->ReleaseStringUTFChars(disk, P); + } + DiscSwap(); } }