Mercurial > repos > blastem
diff config.c @ 2413:64cf80e683aa
Initial support for Colecovision emulation
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 04 Jan 2024 22:56:35 -0800 |
parents | af3075c1e421 |
children | 2972a8e16ed2 |
line wrap: on
line diff
--- a/config.c Thu Jan 04 22:14:29 2024 -0800 +++ b/config.c Thu Jan 04 22:56:35 2024 -0800 @@ -316,7 +316,7 @@ *pads = tern_insert_node(*pads, key, val.ptrval); } -#define CONFIG_VERSION 8 +#define CONFIG_VERSION 9 static tern_node *migrate_config(tern_node *config, int from_version) { tern_node *def_config = parse_bundled_config("default.cfg"); @@ -444,6 +444,42 @@ free(exts[0]);//All extensions in this list share an allocation, first one is a pointer to the buffer free(exts); } + case 8: { + uint32_t num_exts; + char **exts = get_extension_list(config, &num_exts); + char *need_add[] = {"col"}; + uint32_t num_need_add = sizeof(need_add)/sizeof(*need_add); + for (uint32_t i = 0; i < num_exts && num_need_add; i++) + { + for (uint32_t j = 0; j < num_need_add; j++) + { + if (!strcmp(exts[i], need_add[j])) { + num_need_add--; + need_add[j] = need_add[num_need_add]; + break; + } + } + } + if (num_need_add) { + const char **parts = calloc(2 * (num_exts + num_need_add) - 1, sizeof(char*)); + uint32_t dest = 0; + for (uint32_t i = 0; i < num_exts; i++) + { + parts[dest++] = exts[i]; + parts[dest++] = " "; + } + for (uint32_t i = 0; i < num_need_add - 1; i++) + { + parts[dest++] = need_add[i]; + parts[dest++] = " "; + } + parts[dest++] = need_add[num_need_add - 1]; + config = tern_insert_path(config, "ui\0extensions\0", (tern_val){.ptrval = alloc_concat_m(dest, parts)}, TVAL_PTR); + free(parts); + } + free(exts[0]);//All extensions in this list share an allocation, first one is a pointer to the buffer + free(exts); + } } char buffer[16]; sprintf(buffer, "%d", CONFIG_VERSION);