Minimig: support for custom config name.

This commit is contained in:
sorgelig
2018-05-29 16:12:13 +08:00
parent a9192e5819
commit c24e5a01d9
3 changed files with 91 additions and 94 deletions

102
menu.cpp
View File

@@ -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<<i;
}
parentstate = menustate;
OsdSetTitle("Load", 0);
OsdSetTitle("Load config", 0);
OsdWrite(0, "", 0, 0);
OsdWrite(1, "", 0, 0);
OsdWrite(2, " Default", menusub == 0, (menumask & 1) == 0);
OsdWrite(2, " Default", menusub == 0, (menumask & 1) == 0);
OsdWrite(3, "", 0, 0);
OsdWrite(4, " 1", menusub == 1, (menumask & 2) == 0);
OsdWrite(5, " 2", menusub == 2, (menumask & 4) == 0);
OsdWrite(6, " 3", menusub == 3, (menumask & 8) == 0);
OsdWrite(7, " 4", menusub == 4, (menumask & 0x10) == 0);
OsdWrite(8, " 5", menusub == 5, (menumask & 0x20) == 0);
OsdWrite(9, " 6", menusub == 6, (menumask & 0x40) == 0);
OsdWrite(10, " 7", menusub == 7, (menumask & 0x80) == 0);
OsdWrite(11, " 8", menusub == 8, (menumask & 0x100) == 0);
for (int i = 12; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 9, 0);
for (int i = 1; i < 10; i++)
{
static char name[64];
sprintf(name, " %d ", i);
if (menumask & (1 << i)) strcat(name, GetConfigDisplayName(i));
OsdWrite(3+i, name, menusub == i, !(menumask & (1 << i)));
}
for (int i = 13; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 10, 0);
menustate = MENU_LOADCONFIG_2;
break;
@@ -2208,7 +2200,7 @@ void HandleUI(void)
}
else if (select)
{
if (menusub<9)
if (menusub<10)
{
OsdDisable();
LoadConfiguration(menusub);
@@ -2379,62 +2371,38 @@ void HandleUI(void)
case MENU_SAVECONFIG_1:
helptext = helptexts[HELPTEXT_NONE];
menumask = 0x3ff;
menumask = 0x7ff;
parentstate = menustate;
OsdSetTitle("Save", 0);
OsdSetTitle("Save config", 0);
OsdWrite(0, "", 0, 0);
OsdWrite(1, "", 0, 0);
OsdWrite(2, " Default", menusub == 0, 0);
OsdWrite(2, " Default", menusub == 0, 0);
OsdWrite(3, "", 0, 0);
OsdWrite(4, " 1", menusub == 1, 0);
OsdWrite(5, " 2", menusub == 2, 0);
OsdWrite(6, " 3", menusub == 3, 0);
OsdWrite(7, " 4", menusub == 4, 0);
OsdWrite(8, " 5", menusub == 5, 0);
OsdWrite(9, " 6", menusub == 6, 0);
OsdWrite(10, " 7", menusub == 7, 0);
OsdWrite(11, " 8", menusub == 8, 0);
for (int i = 12; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 9, 0);
for (int i = 1; i < 10; i++)
{
static char name[64];
sprintf(name, " %d ", i);
const char *cfgname = GetConfigDisplayName(i);
if (cfgname) strcat(name, GetConfigDisplayName(i));
OsdWrite(3 + i, name, menusub == i, !(menumask & (1 << i)));
}
for (int i = 13; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0);
OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 10, 0);
menustate = MENU_SAVECONFIG_2;
break;
case MENU_SAVECONFIG_2:
if (menu)
if (select)
{
if (menusub<10) SaveConfiguration(menusub);
menustate = MENU_MAIN1;
menusub = 9;
}
else if (up)
{
if (menusub > 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 */
/******************************************************************/

View File

@@ -3,6 +3,8 @@
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <dirent.h>
#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);

View File

@@ -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);