X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=common%2Fconfig.c;h=55b1eae1a9f8b20b65ec388ebdaebc8c7dc77ef9;hb=fe01739339fe177363948c6fd518352243d5cf37;hp=f90ab0bff7cb9626408771acb63cb82532f96bb2;hpb=4b8126a4967bcd525336010a66a25f953fd4ff43;p=libpicofe.git diff --git a/common/config.c b/common/config.c index f90ab0b..55b1eae 100644 --- a/common/config.c +++ b/common/config.c @@ -3,20 +3,28 @@ * (c) */ +#include #include #include #include "config.h" +#include "lprintf.h" + +static char *mystrip(char *str); + +#ifndef _MSC_VER + #include "menu.h" #include "emu.h" -#include "lprintf.h" #include extern menu_entry opt_entries[]; extern menu_entry opt2_entries[]; extern menu_entry cdopt_entries[]; +extern menu_entry ctrlopt_entries[]; extern const int opt_entry_count; extern const int opt2_entry_count; extern const int cdopt_entry_count; +extern const int ctrlopt_entry_count; #ifdef PSP extern menu_entry opt3_entries[]; extern const int opt3_entry_count; @@ -27,6 +35,7 @@ static menu_entry *cfg_opts[] = opt_entries, opt2_entries, cdopt_entries, + ctrlopt_entries, #ifdef PSP opt3_entries, #endif @@ -37,6 +46,7 @@ static const int *cfg_opt_counts[] = &opt_entry_count, &opt2_entry_count, &cdopt_entry_count, + &ctrlopt_entry_count, #ifdef PSP &opt3_entry_count, #endif @@ -45,24 +55,6 @@ static const int *cfg_opt_counts[] = #define NL "\r\n" -static char *mystrip(char *str) -{ - int i, len; - - len = strlen(str); - for (i = 0; i < len; i++) - if (str[i] != ' ') break; - if (i > 0) memmove(str, str + i, len - i + 1); - - len = strlen(str); - for (i = len - 1; i >= 0; i--) - if (str[i] != ' ') break; - str[i+1] = 0; - - return str; -} - - static int seek_sect(FILE *f, const char *section) { char line[128], *tmp; @@ -289,6 +281,9 @@ static int default_var(const menu_entry *me) case MA_CDOPT_LEDS: return defaultConfig.EmuOpt; + case MA_CTRL_TURBO_RATE: + return defaultConfig.turbo_rate; + case MA_OPT_SAVE_SLOT: default: return 0; @@ -382,7 +377,7 @@ write: if (!no_defaults || ((*(int *)me->var ^ default_var(me)) & me->mask)) fprintf(fn, "%s = %i" NL, me->name, (*(int *)me->var & me->mask) ? 1 : 0); } else if (me->beh == MB_RANGE) { - if (!no_defaults || ((*(int *)me->var ^ default_var(me)) & me->mask)) + if (!no_defaults || (*(int *)me->var ^ default_var(me))) fprintf(fn, "%s = %i" NL, me->name, *(int *)me->var); } } @@ -807,12 +802,11 @@ int config_havesect(const char *fname, const char *section) return ret; } - int config_readsect(const char *fname, const char *section) { - char line[128], *var, *val, *tmp; - int len, i, ret; + char line[128], *var, *val; FILE *f; + int ret; f = fopen(fname, "r"); if (f == NULL) return -1; @@ -831,35 +825,9 @@ int config_readsect(const char *fname, const char *section) while (!feof(f)) { - tmp = fgets(line, sizeof(line), f); - if (tmp == NULL) break; - - if (line[0] == '[') break; // other section - - // strip comments, linefeed, spaces.. - len = strlen(line); - for (i = 0; i < len; i++) - if (line[i] == '#' || line[i] == '\r' || line[i] == '\n') { line[i] = 0; break; } - mystrip(line); - len = strlen(line); - if (len <= 0) continue; - - // get var and val - for (i = 0; i < len; i++) - if (line[i] == '=') break; - if (i >= len || strchr(&line[i+1], '=') != NULL) { - lprintf("config_readsect: can't parse: %s\n", line); - continue; - } - line[i] = 0; - var = line; - val = &line[i+1]; - mystrip(var); - mystrip(val); - if (strlen(var) == 0 || (strlen(val) == 0 && strncasecmp(var, "bind", 4) != 0)) { - lprintf("config_readsect: something's empty: \"%s\" = \"%s\"\n", var, val); - continue; - } + ret = config_get_var_val(f, line, sizeof(line), &var, &val); + if (ret == 0) break; + if (ret == -1) continue; parse(var, val); } @@ -868,3 +836,71 @@ int config_readsect(const char *fname, const char *section) return 0; } +#endif // _MSC_VER + +static char *mystrip(char *str) +{ + int i, len; + + len = strlen(str); + for (i = 0; i < len; i++) + if (str[i] != ' ') break; + if (i > 0) memmove(str, str + i, len - i + 1); + + len = strlen(str); + for (i = len - 1; i >= 0; i--) + if (str[i] != ' ') break; + str[i+1] = 0; + + return str; +} + +/* returns: + * 0 - EOF, end + * 1 - parsed ok + * -1 - failed to parse line + */ +int config_get_var_val(void *file, char *line, int lsize, char **rvar, char **rval) +{ + char *var, *val, *tmp; + FILE *f = file; + int len, i; + + tmp = fgets(line, lsize, f); + if (tmp == NULL) return 0; + + if (line[0] == '[') return 0; // other section + + // strip comments, linefeed, spaces.. + len = strlen(line); + for (i = 0; i < len; i++) + if (line[i] == '#' || line[i] == '\r' || line[i] == '\n') { line[i] = 0; break; } + mystrip(line); + len = strlen(line); + if (len <= 0) return -1;; + + // get var and val + for (i = 0; i < len; i++) + if (line[i] == '=') break; + if (i >= len || strchr(&line[i+1], '=') != NULL) { + lprintf("config_readsect: can't parse: %s\n", line); + return -1; + } + line[i] = 0; + var = line; + val = &line[i+1]; + mystrip(var); + mystrip(val); + +#ifndef _MSC_VER + if (strlen(var) == 0 || (strlen(val) == 0 && strncasecmp(var, "bind", 4) != 0)) { + lprintf("config_readsect: something's empty: \"%s\" = \"%s\"\n", var, val); + return -1;; + } +#endif + + *rvar = var; + *rval = val; + return 1; +} +