From c24e5a01d95b7410436107aab7ba3f2596eb6976 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Tue, 29 May 2018 16:12:13 +0800 Subject: [PATCH] Minimig: support for custom config name. --- menu.cpp | 102 +++++++++++++++------------------------------ minimig_config.cpp | 81 ++++++++++++++++++++++++----------- minimig_config.h | 2 +- 3 files changed, 91 insertions(+), 94 deletions(-) diff --git a/menu.cpp b/menu.cpp index f64afc8..ab2fdf5 100644 --- a/menu.cpp +++ b/menu.cpp @@ -2166,36 +2166,28 @@ void HandleUI(void) case MENU_LOADCONFIG_1: helptext = helptexts[HELPTEXT_NONE]; - if (parentstate != menustate) // First run? + if (parentstate != menustate) { - menumask = 0x200; - if (ConfigurationExists(0)) menumask |= 0x001; - if (ConfigurationExists(1)) menumask |= 0x002; - if (ConfigurationExists(2)) menumask |= 0x004; - if (ConfigurationExists(3)) menumask |= 0x008; - if (ConfigurationExists(4)) menumask |= 0x010; - if (ConfigurationExists(5)) menumask |= 0x020; - if (ConfigurationExists(6)) menumask |= 0x040; - if (ConfigurationExists(7)) menumask |= 0x080; - if (ConfigurationExists(8)) menumask |= 0x100; + menumask = 0x400; + for (int i = 0; i < 10; i++) if (GetConfigDisplayName(i)) menumask |= 1< 0) - menusub--; - menustate = MENU_SAVECONFIG_1; - } - else if (down) - { - // if (menusub < 3) - if (menusub < 9) - menusub++; - menustate = MENU_SAVECONFIG_1; - } - else if (select) - { - if (menusub<9) - { - SaveConfiguration(menusub); - menustate = MENU_NONE1; - } - else - { - menustate = MENU_MAIN1; - menusub = 9; - } - } + else if (menu) // exit menu { menustate = MENU_MAIN1; @@ -2442,8 +2410,6 @@ void HandleUI(void) } break; - - /******************************************************************/ /* chipset settings menu */ /******************************************************************/ diff --git a/minimig_config.cpp b/minimig_config.cpp index 21a1e42..d6ac839 100644 --- a/minimig_config.cpp +++ b/minimig_config.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "hardware.h" #include "minimig_boot.h" @@ -232,23 +234,61 @@ static char UploadActionReplay() return(0); } -#define SET_CONFIG_NAME(str,num) \ - if (num) sprintf(str, "MINIMIG%d.CFG", num); \ - else strcpy(str, "MINIMIG.CFG"); - -unsigned char ConfigurationExists(int num) +static char* GetConfigurationName(int num) { - static char path[256]; - strcpy(path, CONFIG_DIR"/"); - SET_CONFIG_NAME((path+strlen(path)), num); + static char path[128]; + sprintf(path, "%s/%s", getRootDir(), CONFIG_DIR); - fileTYPE f = { 0 }; - if(FileOpen(&f, path)) + DIR *d; + struct dirent *dir; + d = opendir(path); + if (d) + { + if(num) sprintf(path, "minimig%d", num); + else sprintf(path, "minimig.cfg", num); + + while ((dir = readdir(d)) != NULL) + { + int len = strlen(dir->d_name); + if (len>10 && !strncasecmp(dir->d_name, path, strlen(path)) && !strcasecmp(dir->d_name+len-4, ".cfg")) + { + closedir(d); + strcpy(path, dir->d_name); + return path; + } + } + closedir(d); + } + + return NULL; +} + +unsigned char SaveConfiguration(int num) +{ + const char *filename = GetConfigurationName(num); + if (!filename) { - FileClose(&f); - return(1); + static char name[32]; + if (num) sprintf(name, "minimig%d.cfg", num); + else sprintf(name, "minimig.cfg"); + + filename = name; } - return(0); + + return FileSaveConfig(filename, &config, sizeof(config)); +} + +const char* GetConfigDisplayName(int num) +{ + char *filename = GetConfigurationName(num); + if (!filename) return NULL; + + filename[strlen(filename) - 4] = 0; + char *p = strchr(filename, '_'); + + if (p) return p+1; + + return ""; } static int force_reload_kickstart = 0; @@ -340,12 +380,11 @@ unsigned char LoadConfiguration(int num) char result = 0; unsigned char key, i; - static char filename[256]; - SET_CONFIG_NAME(filename, num); + const char *filename = GetConfigurationName(num); // load configuration data - int size = FileLoadConfig(filename, 0, 0); - if(size>0) + int size; + if(filename && (size = FileLoadConfig(filename, 0, 0))>0) { BootPrint("Opened configuration file\n"); printf("Configuration file size: %s, %lu\n", filename, size); @@ -455,14 +494,6 @@ unsigned char LoadConfiguration(int num) return(result); } -unsigned char SaveConfiguration(int num) -{ - static char filename[256]; - SET_CONFIG_NAME(filename, num); - - return FileSaveConfig(filename, &config, sizeof(config)); -} - void MinimigReset() { ApplyConfiguration(0); diff --git a/minimig_config.h b/minimig_config.h index 801bf07..b94d187 100644 --- a/minimig_config.h +++ b/minimig_config.h @@ -45,7 +45,7 @@ extern configTYPE config; unsigned char LoadConfiguration(int num); unsigned char SaveConfiguration(int num); -unsigned char ConfigurationExists(int num); +const char* GetConfigDisplayName(int num); void MinimigReset(); void SetKickstart(char *name);