int rzx_start_recording( const char *filename, int embed_snapshot ) { int error; if( rzx_playback ) return 1; rzx = libspectrum_rzx_alloc(); /* Store the filename */ rzx_filename = utils_safe_strdup( filename ); /* If we're embedding a snapshot, create it now */ if( embed_snapshot ) { error = rzx_add_snap( rzx, 0 ); if( error ) { libspectrum_free( rzx_filename ); libspectrum_rzx_free( rzx ); return error; } } start_recording( rzx, settings_current.competition_mode ); return 0; }
int memory_source_register( const char *description ) { const char *copy = utils_safe_strdup( description ); g_array_append_val( memory_sources, copy ); return memory_sources->len - 1; }
void debugger_variable_set( const char *name, libspectrum_dword value ) { /* Check if we need to allocate memory for this key */ if( !g_hash_table_lookup( debugger_variables, name ) ) name = utils_safe_strdup( name ); /* Cast is safe as we have either taken a copy of the key, or know that it already exists so we're not going to use it */ g_hash_table_insert( debugger_variables, (char*)name, GINT_TO_POINTER(value) ); }
int rzx_continue_recording( const char *filename ) { utils_file file; libspectrum_error libspec_error; int error; libspectrum_snap* snap = NULL; libspectrum_rzx_iterator last_it = NULL; if( rzx_recording || rzx_playback ) return 1; /* Store the filename */ rzx_filename = utils_safe_strdup( filename ); error = utils_read_file( filename, &file ); if( error ) return error; rzx = libspectrum_rzx_alloc(); libspec_error = libspectrum_rzx_read( rzx, file.buffer, file.length ); if( libspec_error != LIBSPECTRUM_ERROR_NONE ) { utils_close_file( &file ); return libspec_error; } utils_close_file( &file ); /* Get final snapshot */ last_it = libspectrum_rzx_iterator_last( rzx ); if( last_it ) snap = libspectrum_rzx_iterator_get_snap( last_it ); if( snap ) { error = snapshot_copy_from( snap ); if( error ) return error; } else { ui_error( UI_ERROR_WARNING, "RZX file cannot be continued" ); libspectrum_free( rzx_filename ); libspectrum_rzx_free( rzx ); return 1; } start_recording( rzx, 0 ); return 0; }
static char* run_dialog( const char *title, int is_saving ) { OPENFILENAME ofn; char szFile[512]; int result; memset( &ofn, 0, sizeof( ofn ) ); szFile[0] = '\0'; ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = fuse_hWnd; ofn.lpstrFilter = "All Files\0*.*\0\0"; ofn.lpstrCustomFilter = NULL; ofn.nFilterIndex = 0; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof( szFile ); ofn.lpstrFileTitle = NULL; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = title; ofn.Flags = /* OFN_DONTADDTORECENT | */ OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; if( is_saving ) { ofn.Flags |= OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN; } else { ofn.Flags |= OFN_FILEMUSTEXIST; } ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; /* ofn.pvReserved = NULL; */ /* ofn.FlagsEx = 0; */ if( is_saving ) { result = GetSaveFileName( &ofn ); } else { result = GetOpenFileName( &ofn ); } if( !result ) { return NULL; } else { return utils_safe_strdup( ofn.lpstrFile ); } }