@@ -119,6 +119,7 @@ int mouseLpre = 0; /* old mouse button state */
119
119
bool uses_mouse = true;
120
120
bool uses_pointer = false;
121
121
bool booted = false;
122
+ bool restarting = false;
122
123
123
124
unsigned int readSize = 16384 ;
124
125
unsigned char readBuffer [16384 ];
@@ -138,6 +139,9 @@ int framesDropped = 0;
138
139
/* Libretro exposed config variables START */
139
140
140
141
char * options_update ; /* String containing the options updated in check_variables() */
142
+ char * systemPath ; /* Path of FreeJ2ME's jar */
143
+ char * outPath ; /* Actual path of FreeJ2ME's jar to start */
144
+ char * * params ; /* Char matrix containing launch arguments */
141
145
unsigned int optstrlen ; /* length of the string above */
142
146
unsigned long int screenRes [2 ]; /* {width, height} */
143
147
int rotateScreen ; /* acts as a boolean */
@@ -443,6 +447,8 @@ static void check_variables(bool first_time_startup)
443
447
444
448
445
449
/* Prepare a string to pass those core options to the Java app */
450
+ options_update = malloc (sizeof (char ) * PIPE_MAX_LEN );
451
+
446
452
snprintf (options_update , PIPE_MAX_LEN , "FJ2ME_LR_OPTS:|%lux%lu|%d|%d|%d|%d|%d|%d|%d" , screenRes [0 ], screenRes [1 ], rotateScreen , phoneType , gameFPS , soundEnabled , customMidi , maxMidiPlayers , dumpAudioStreams );
447
453
optstrlen = strlen (options_update );
448
454
@@ -456,6 +462,8 @@ static void check_variables(bool first_time_startup)
456
462
write_to_pipe (pWrite [1 ], options_update , optstrlen );
457
463
log_fn (RETRO_LOG_INFO , "Sent updated options to the Java app.\n" );
458
464
}
465
+
466
+ free (options_update );
459
467
}
460
468
461
469
/* Core exit function */
@@ -466,7 +474,6 @@ void quit(int state)
466
474
{
467
475
kill (javaProcess , SIGKILL );
468
476
}
469
- /* exit(state); */
470
477
}
471
478
472
479
#elif _WIN32
@@ -491,8 +498,6 @@ void retro_init(void)
491
498
/* init buffers, structs */
492
499
memset (frame , 0 , frameSize );
493
500
memset (frameBuffer , 0 , frameBufferSize );
494
- options_update = malloc (sizeof (char ) * PIPE_MAX_LEN );
495
-
496
501
/*
497
502
* Those below are arguments sent to Java during init. Otherwise, games
498
503
* wouldn't get a res setting, rotation, fps, etc. that matched the
@@ -515,14 +520,35 @@ void retro_init(void)
515
520
sprintf (dumpAudioArg , "%d" , dumpAudioStreams );
516
521
517
522
/* start java process */
518
- char * javapath ;
519
- Environ (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY , & javapath );
520
- char * outPath = malloc (sizeof (char ) * PATH_MAX_LENGTH );
521
- fill_pathname_join (outPath , javapath , "freej2me-lr.jar" , PATH_MAX_LENGTH );
522
- char * params [] = { "java" , "-jar" , outPath , resArg [0 ], resArg [1 ], rotateArg , phoneArg , fpsArg , soundArg , midiArg , maxMidiArg , dumpAudioArg , NULL };
523
523
524
- log_fn (RETRO_LOG_INFO , "Passing params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
524
+
525
+ if (!restarting )
526
+ {
527
+ log_fn (RETRO_LOG_INFO , "Setting up FreeJ2ME-Plus' Java app.\n" );
528
+ Environ (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY , & systemPath );
529
+ outPath = malloc (sizeof (char ) * PATH_MAX_LENGTH );
530
+ fill_pathname_join (outPath , systemPath , "freej2me-lr.jar" , PATH_MAX_LENGTH );
531
+
532
+ log_fn (RETRO_LOG_INFO , "Setting up params. \n" );
533
+ params = (char * * )malloc (sizeof (char * ) * PATH_MAX_LENGTH * 2 );
534
+ params [0 ] = strdup ("java" );
535
+ params [1 ] = strdup ("-jar" );
536
+ params [2 ] = strdup (outPath );
537
+ params [3 ] = strdup (resArg [0 ]);
538
+ params [4 ] = strdup (resArg [1 ]);
539
+ params [5 ] = strdup (rotateArg );
540
+ params [6 ] = strdup (phoneArg );
541
+ params [7 ] = strdup (fpsArg );
542
+ params [8 ] = strdup (soundArg );
543
+ params [9 ] = strdup (midiArg );
544
+ params [10 ] = strdup (maxMidiArg );
545
+ params [11 ] = strdup (dumpAudioArg );
546
+ params [12 ] = NULL ; // Null-terminate the array
547
+
548
+ log_fn (RETRO_LOG_INFO , "Passing params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
525
549
* (params + 4 ), * (params + 5 ), * (params + 6 ), * (params + 7 ), * (params + 8 ), * (params + 9 ), * (params + 10 ), * (params + 11 ));
550
+ }
551
+
526
552
log_fn (RETRO_LOG_INFO , "Preparing to open FreeJ2ME-Plus' Java app (make sure freej2me-lr.jar is inside system/).\n" );
527
553
528
554
#ifdef __linux__
@@ -983,6 +1009,8 @@ void retro_deinit(void)
983
1009
984
1010
void retro_reset (void )
985
1011
{
1012
+ restarting = true;
1013
+ booted = false;
986
1014
retro_deinit ();
987
1015
retro_init ();
988
1016
retro_load_game (& gameinfo );
@@ -1007,15 +1035,17 @@ pid_t javaOpen(char *cmd, char **params)
1007
1035
{
1008
1036
pid_t pid ;
1009
1037
1010
- char * systemPath ;
1011
- Environ ( RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY , & systemPath );
1012
- log_fn (RETRO_LOG_INFO , "System Path: %s\n" , systemPath );
1038
+ if (! restarting )
1039
+ {
1040
+ log_fn (RETRO_LOG_INFO , "System Path: %s\n" , systemPath );
1013
1041
1014
- log_fn (RETRO_LOG_INFO , "Setting up java app's process and pipes...\n" );
1042
+ log_fn (RETRO_LOG_INFO , "Setting up java app's process and pipes...\n" );
1015
1043
1016
- log_fn (RETRO_LOG_INFO , "Opening: %s %s %s ...\n" , * (params + 0 ), * (params + 1 ), * (params + 2 ));
1017
- log_fn (RETRO_LOG_INFO , "Params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
1018
- * (params + 4 ), * (params + 5 ), * (params + 6 ), * (params + 7 ), * (params + 8 ), * (params + 9 ), * (params + 10 ), * (params + 11 ));
1044
+ log_fn (RETRO_LOG_INFO , "Opening: %s %s %s ...\n" , * (params + 0 ), * (params + 1 ), * (params + 2 ));
1045
+ log_fn (RETRO_LOG_INFO , "Params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
1046
+ * (params + 4 ), * (params + 5 ), * (params + 6 ), * (params + 7 ), * (params + 8 ), * (params + 9 ), * (params + 10 ), * (params + 11 ));
1047
+ }
1048
+ else { log_fn (RETRO_LOG_INFO , "\n\nRESTARTING!!!\n\n" ); restarting = false; }
1019
1049
1020
1050
int fd_stdin = 0 ;
1021
1051
int fd_stdout = 1 ;
@@ -1079,9 +1109,6 @@ void javaOpen(char *cmd, char **params)
1079
1109
{
1080
1110
SECURITY_ATTRIBUTES pipeSec ;
1081
1111
1082
- char * systemPath ;
1083
- Environ (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY , & systemPath );
1084
- log_fn (RETRO_LOG_INFO , "System Path: %s\n" , systemPath );
1085
1112
log_fn (RETRO_LOG_INFO , "Setting up java app's process and pipes...\n" );
1086
1113
1087
1114
ZeroMemory ( & pipeSec , sizeof (pipeSec ) );
@@ -1146,13 +1173,21 @@ void javaOpen(char *cmd, char **params)
1146
1173
log_fn (RETRO_LOG_INFO , "Opening: %s \n" , cmd );
1147
1174
for (int i = 3 ; i <= 11 ; i ++ ) /* There are 10 cmd arguments for now */
1148
1175
{
1149
- log_fn (RETRO_LOG_INFO , "Processing arg %d: %s \n" , i , * (params + i ));
1176
+ // log_fn(RETRO_LOG_INFO, "Processing arg %d: %s \n", i, *(params+i));
1150
1177
sprintf (cmdWin , "%s %s" , cmdWin , * (params + i ));
1151
1178
}
1152
1179
1153
- log_fn (RETRO_LOG_INFO , "Creating proc: %s \n" , cmdWin );
1154
- log_fn (RETRO_LOG_INFO , "Params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
1155
- * (params + 4 ), * (params + 5 ), * (params + 6 ), * (params + 7 ), * (params + 8 ), * (params + 9 ), * (params + 10 ), * (params + 11 ));
1180
+ if (!restarting )
1181
+ {
1182
+ log_fn (RETRO_LOG_INFO , "System Path: %s\n" , systemPath );
1183
+
1184
+ log_fn (RETRO_LOG_INFO , "Setting up java app's process and pipes...\n" );
1185
+
1186
+ log_fn (RETRO_LOG_INFO , "Opening: %s %s %s ...\n" , * (params + 0 ), * (params + 1 ), * (params + 2 ));
1187
+ log_fn (RETRO_LOG_INFO , "Params: %s | %s | %s | %s | %s | %s | %s | %s | %s\n" , * (params + 3 ),
1188
+ * (params + 4 ), * (params + 5 ), * (params + 6 ), * (params + 7 ), * (params + 8 ), * (params + 9 ), * (params + 10 ), * (params + 11 ));
1189
+ }
1190
+ else { log_fn (RETRO_LOG_INFO , "\n\nRESTARTING!!!\n\n" ); restarting = false; }
1156
1191
1157
1192
GetStartupInfo (& startInfo );
1158
1193
startInfo .dwFlags = STARTF_USESTDHANDLES ;
0 commit comments