From 7051021efc8f0805f41f42839256e3db131d9c2b Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 27 Feb 2013 08:44:52 +0000 Subject: [PATCH] slight refinements in backup type database recordkeeping, and win32 import save dialog --- desmume/src/NDSSystem.cpp | 4 +- desmume/src/mc.cpp | 65 ++++++++++++------------------ desmume/src/mc.h | 12 ++++-- desmume/src/windows/importSave.cpp | 28 +++++++------ 4 files changed, 52 insertions(+), 57 deletions(-) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index b91037060..c91bc5b20 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -1,6 +1,6 @@ /* Copyright (C) 2006 yopyop - Copyright (C) 2008-2012 DeSmuME team + Copyright (C) 2008-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -598,7 +598,7 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi printf("None"); else { - printf("%s", save_names[sv]); + printf("%s", save_types[sv].descr); if (CommonSettings.autodetectBackupMethod == 1) backup_setManualBackupType(sv+1); } diff --git a/desmume/src/mc.cpp b/desmume/src/mc.cpp index 8fcb039fc..eedf0d3ac 100644 --- a/desmume/src/mc.cpp +++ b/desmume/src/mc.cpp @@ -1,7 +1,7 @@ /* Copyright (C) 2006 thoduv Copyright (C) 2006-2007 Theo Berkau - Copyright (C) 2008-2012 DeSmuME team + Copyright (C) 2008-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -87,38 +87,23 @@ static const u32 saveSizes[] = {512, // 4k static const u32 saveSizes_count = ARRAY_SIZE(saveSizes); //the lookup table from user save types to save parameters -const int save_types[][2] = { - {MC_TYPE_AUTODETECT,1}, - {MC_TYPE_EEPROM1,MC_SIZE_4KBITS}, - {MC_TYPE_EEPROM2,MC_SIZE_64KBITS}, - {MC_TYPE_EEPROM2,MC_SIZE_512KBITS}, - {MC_TYPE_FRAM,MC_SIZE_256KBITS}, - {MC_TYPE_FLASH,MC_SIZE_2MBITS}, - {MC_TYPE_FLASH,MC_SIZE_4MBITS}, - {MC_TYPE_FLASH,MC_SIZE_8MBITS}, - {MC_TYPE_FLASH,MC_SIZE_16MBITS}, - {MC_TYPE_FLASH,MC_SIZE_32MBITS}, - {MC_TYPE_FLASH,MC_SIZE_64MBITS}, - {MC_TYPE_FLASH,MC_SIZE_128MBITS}, - {MC_TYPE_FLASH,MC_SIZE_256MBITS}, - {MC_TYPE_FLASH,MC_SIZE_512MBITS} +const SAVE_TYPE save_types[] = { + {"Autodetect", MC_TYPE_AUTODETECT,1}, + {"EEPROM 4kbit",MC_TYPE_EEPROM1,MC_SIZE_4KBITS}, + {"EEPROM 64kbit",MC_TYPE_EEPROM2,MC_SIZE_64KBITS}, + {"EEPROM 512kbit",MC_TYPE_EEPROM2,MC_SIZE_512KBITS}, + {"FRAM 256kbit",MC_TYPE_FRAM,MC_SIZE_256KBITS}, + {"FLASH 2Mbit",MC_TYPE_FLASH,MC_SIZE_2MBITS}, + {"FLASH 4Mbit",MC_TYPE_FLASH,MC_SIZE_4MBITS}, + {"FLASH 8Mbit",MC_TYPE_FLASH,MC_SIZE_8MBITS}, + {"FLASH 16Mbit",MC_TYPE_FLASH,MC_SIZE_16MBITS}, + {"FLASH 32Mbit",MC_TYPE_FLASH,MC_SIZE_32MBITS}, + {"FLASH 64Mbit",MC_TYPE_FLASH,MC_SIZE_64MBITS}, + {"FLASH 128Mbit",MC_TYPE_FLASH,MC_SIZE_128MBITS}, + {"FLASH 256Mbit",MC_TYPE_FLASH,MC_SIZE_256MBITS}, + {"FLASH 512Mbit",MC_TYPE_FLASH,MC_SIZE_512MBITS} }; -const char *save_names[] = { - "EEPROM 4kbit", - "EEPROM 64kbit", - "EEPROM 512kbit", - "FRAM 256kbit", - "FLASH 2Mbit", - "FLASH 4Mbit", - "FLASH 8Mbit", - "FLASH 16Mbit", - "FLASH 32Mbit", - "FLASH 64Mbit", - "FLASH 128Mbit", - "FLASH 256Mbit", - "FLASH 512Mbit" -}; //forces the currently selected backup type to be current //(can possibly be used to repair poorly chosen save types discovered late in gameplay i.e. pokemon gamers) @@ -422,8 +407,8 @@ void BackupDevice::reset() if(state == DETECTING && CommonSettings.manualBackupType != MC_TYPE_AUTODETECT) { state = RUNNING; - int savetype = save_types[CommonSettings.manualBackupType][0]; - int savesize = save_types[CommonSettings.manualBackupType][1]; + int savetype = save_types[CommonSettings.manualBackupType].media_type; + int savesize = save_types[CommonSettings.manualBackupType].size; ensure((u32)savesize); //expand properly if necessary resize(savesize); //truncate if necessary addr_size = addr_size_for_old_save_type(savetype); @@ -440,7 +425,7 @@ u8 BackupDevice::searchFileSaveType(u32 size) { for (u8 i = 1; i < MAX_SAVE_TYPES; i++) { - if (size == save_types[i][1]) + if (size == save_types[i].size) return (i-1); } return 0xFF; @@ -896,8 +881,8 @@ static u32 no_gba_fillLeft(u32 size) { for (u32 i = 1; i < ARRAY_SIZE(save_types); i++) { - if (size <= (u32)save_types[i][1]) - return (size + (save_types[i][1] - size)); + if (size <= (u32)save_types[i].size) + return (size + (save_types[i].size - size)); } return size; } @@ -1053,7 +1038,7 @@ void BackupDevice::loadfile() info.type = advsc.getSaveType(); if (info.type != 0xFF && info.type != 0xFE) { - u32 adv_size = save_types[info.type+1][1]; + u32 adv_size = save_types[info.type+1].size; if (info.size > adv_size) info.size = adv_size; else @@ -1190,8 +1175,8 @@ void BackupDevice::raw_applyUserSettings(u32& size, bool manual) u32 res = searchFileSaveType(size); if (res != 0xFF) type = (res + 1); // +1 - skip autodetect } - int savetype = save_types[type][0]; - int savesize = save_types[type][1]; + int savetype = save_types[type].media_type; + int savesize = save_types[type].size; addr_size = addr_size_for_old_save_type(savetype); if((u32)savesize= 1024) - sprintf(buf, "%i Mbit", ss / 1024); - else - sprintf(buf, "%i Kbit", ss); - SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_ADDSTRING, 0, (LPARAM)buf); + SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_ADDSTRING, 0, (LPARAM)save_types[i].descr); } SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_SETCURSEL, MMU_new.backupDevice.info.type, 0); @@ -87,7 +82,7 @@ BOOL CALLBACK ImportSizeSelect_Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l { char sizeS[30] = {0}; memset(&sizeS[0], 0, sizeof(size)); - u32 ss = save_types[fileSaveType+1][1] * 8 / 1024; + u32 ss = save_types[fileSaveType+1].size * 8 / 1024; if (ss >= 1024) sprintf(sizeS, "%i Mbit", ss / 1024); else @@ -107,11 +102,20 @@ BOOL CALLBACK ImportSizeSelect_Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l } return false; - + case WM_COMMAND: { switch(LOWORD(wParam)) { + case IDC_IMP_MANUAL_SIZE: + + //when the user changes the desired size, automatically select manual radiobutton option + if(HIWORD(wParam) == CBN_SELCHANGE) + { + CheckRadioButton(hDlg,IDC_IMP_AUTO_CURRENT,IDC_IMP_MANUAL,IDC_IMP_MANUAL); + } + break; + case IDOK: { u32 res = 0; @@ -175,7 +179,7 @@ bool importSave(HWND hwnd, HINSTANCE hAppInst) u32 res = DialogBoxW(hAppInst, MAKEINTRESOURCEW(IDD_IMPORT_SAVE_SIZE), hwnd, (DLGPROC)ImportSizeSelect_Proc); if (res < MAX_SAVE_TYPES) { - res = NDS_ImportSave(ImportSavFName, save_types[res+1][1]); + res = NDS_ImportSave(ImportSavFName, save_types[res+1].size); if (res) { printf("Save was successfully imported\n");