@@ -44,38 +44,30 @@ rcvar_t emu_exports[] =
4444/* Quick save and turn off the console */
4545void quick_save_and_poweroff ()
4646{
47- /* Vars */
48- char shell_cmd [1024 ];
49- FILE * fp ;
50-
51- /* Send command to kill any previously scheduled shutdown */
52- sprintf (shell_cmd , "pkill %s" , SHELL_CMD_SCHEDULE_POWERDOWN );
53- fp = popen (shell_cmd , "r" );
54- if (fp == NULL )
47+ printf ("Save Instant Play file\n" );
48+
49+ Uint32 start = SDL_GetTicks ();
50+
51+ /* Send command to cancel any previously scheduled powerdown */
52+ if (popen (SHELL_CMD_CANCEL_SCHED_POWERDOWN , "r" ) == NULL )
5553 {
56- printf ("Failed to run command %s\n" , shell_cmd );
54+ /* Countdown is still ticking, so better do nothing
55+ than start writing and get interrupted!
56+ */
57+ printf ("Failed to cancel scheduled shutdown\n" );
58+ exit (0 );
5759 }
5860
61+ printf ("============== Cancel time %d\n" , SDL_GetTicks () - start );
5962 /* Save */
6063 state_file_save (quick_save_file );
6164
62- /* Write quick load file */
63- sprintf (shell_cmd , "%s SDL_NOMOUSE=1 \"%s\" --loadStateFile \"%s\" \"%s\"" ,
64- SHELL_CMD_WRITE_QUICK_LOAD_CMD , prog_name , quick_save_file , mRomName );
65- printf ("Cmd write quick load file:\n %s\n" , shell_cmd );
66- fp = popen (shell_cmd , "r" );
67- if (fp == NULL )
68- {
69- printf ("Failed to run command %s\n" , shell_cmd );
70- }
65+ /* Perform Instant Play save and shutdown */
66+ execlp (SHELL_CMD_INSTANT_PLAY , SHELL_CMD_INSTANT_PLAY ,
67+ prog_name , "--loadStateFile" , quick_save_file , mRomName , NULL );
7168
72- /* Clean Poweroff */
73- sprintf (shell_cmd , "%s" , SHELL_CMD_POWERDOWN );
74- fp = popen (shell_cmd , "r" );
75- if (fp == NULL )
76- {
77- printf ("Failed to run command %s\n" , shell_cmd );
78- }
69+ /* Should not be reached */
70+ printf ("Failed to perform Instant Play save and shutdown\n" );
7971
8072 /* Exit Emulator */
8173 exit (0 );
0 commit comments