From 0b41f0599f62ec9099197bbe6f4dd7144cebe0df Mon Sep 17 00:00:00 2001 From: Andrew Mahone Date: Sat, 17 Jan 2009 22:53:12 +0000 Subject: [PATCH] unify pointers to value for configfile, and add TYPE_BOOL type, used by pictureflow git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19786 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/brickmania.c | 2 +- apps/plugins/chopper.c | 2 +- apps/plugins/dice.c | 4 +-- apps/plugins/jpeg/jpeg.c | 12 ++++---- apps/plugins/lib/configfile.c | 25 ++++++++++++----- apps/plugins/lib/configfile.h | 11 +++++--- apps/plugins/mazezam.c | 8 +++--- apps/plugins/mpegplayer/mpeg_settings.c | 34 ++++++++++++----------- apps/plugins/oscilloscope.c | 10 ++++--- apps/plugins/pacbox/pacbox.c | 14 ++++++---- apps/plugins/pictureflow.c | 37 ++++++++++++------------- apps/plugins/solitaire.c | 2 +- apps/plugins/sudoku/sudoku.c | 6 ++-- apps/plugins/wavrecord.c | 9 ++++-- apps/plugins/wormlet.c | 17 ++++++------ apps/plugins/zxbox/spmain.c | 18 +++++++----- 16 files changed, 120 insertions(+), 91 deletions(-) diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index d0e4a593a0..5c915c92f2 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -813,7 +813,7 @@ int highscore; #define MAX_POINTS 200000 /* i dont think it needs to be more */ static struct configdata config[] = { - {TYPE_INT, 0, MAX_POINTS, &highscore, "highscore", NULL, NULL} + {TYPE_INT, 0, MAX_POINTS, { .int_p = &highscore }, "highscore", NULL} }; void int_game(int new_game) diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c index 971aeb8512..594c4e48bd 100644 --- a/apps/plugins/chopper.c +++ b/apps/plugins/chopper.c @@ -181,7 +181,7 @@ static int score; #define MAX_POINTS 50000 static struct configdata config[] = { - {TYPE_INT, 0, MAX_POINTS, &highscore, "highscore", NULL, NULL} + {TYPE_INT, 0, MAX_POINTS, { .int_p = &highscore }, "highscore", NULL} }; struct CBlock diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c index 46b39a67ae..5ef5d5099d 100644 --- a/apps/plugins/dice.c +++ b/apps/plugins/dice.c @@ -63,8 +63,8 @@ static int nb_sides_values[] = { 3, 4, 6, 8, 10, 12, 20, 100 }; static char *sides_conf[] = {"3", "4", "6", "8", "10", "12", "20", "100" }; static struct configdata config[] = { - {TYPE_INT, 0, MAX_DICES, &dice.nb_dices, "dice count", NULL, NULL}, - {TYPE_ENUM, 0, 8, &sides_index, "side count", sides_conf, NULL} + {TYPE_INT, 0, MAX_DICES, { .int_p = &dice.nb_dices}, "dice count", NULL}, + {TYPE_ENUM, 0, 8, { .int_p = &sides_index }, "side count", sides_conf} }; void dice_init(struct dices* dice); diff --git a/apps/plugins/jpeg/jpeg.c b/apps/plugins/jpeg/jpeg.c index 82d9186298..649cca8288 100644 --- a/apps/plugins/jpeg/jpeg.c +++ b/apps/plugins/jpeg/jpeg.c @@ -122,13 +122,13 @@ static struct jpeg_settings old_settings; static struct configdata jpeg_config[] = { #ifdef HAVE_LCD_COLOR - { TYPE_ENUM, 0, COLOUR_NUM_MODES, &jpeg_settings.colour_mode, - "Colour Mode", (char *[]){ "Colour", "Grayscale" }, NULL }, - { TYPE_ENUM, 0, DITHER_NUM_MODES, &jpeg_settings.dither_mode, - "Dither Mode", (char *[]){ "None", "Ordered", "Diffusion" }, NULL }, + { TYPE_ENUM, 0, COLOUR_NUM_MODES, { .int_p = &jpeg_settings.colour_mode }, + "Colour Mode", (char *[]){ "Colour", "Grayscale" } }, + { TYPE_ENUM, 0, DITHER_NUM_MODES, { .int_p = &jpeg_settings.dither_mode }, + "Dither Mode", (char *[]){ "None", "Ordered", "Diffusion" } }, #endif - { TYPE_INT, SS_MIN_TIMEOUT, SS_MAX_TIMEOUT, &jpeg_settings.ss_timeout, - "Slideshow Time", NULL, NULL}, + { TYPE_INT, SS_MIN_TIMEOUT, SS_MAX_TIMEOUT, + { .int_p = &jpeg_settings.ss_timeout }, "Slideshow Time", NULL }, }; #if LCD_DEPTH > 1 diff --git a/apps/plugins/lib/configfile.c b/apps/plugins/lib/configfile.c index 419109f904..063efdde2e 100644 --- a/apps/plugins/lib/configfile.c +++ b/apps/plugins/lib/configfile.c @@ -59,15 +59,21 @@ int configfile_save(const char *filename, struct configdata *cfg, /* pre-allocate 10 bytes for INT */ rb->fdprintf(fd, "%s: %10d\n", cfg[i].name, - *cfg[i].val); + *cfg[i].int_p); + break; + + case TYPE_BOOL: + rb->fdprintf(fd, "%s: 10%d\n", + cfg[i].name, + (int)*cfg[i].bool_p); break; case TYPE_ENUM: rb->fdprintf(fd, "%s: %s\n", cfg[i].name, - cfg[i].values[*cfg[i].val]); + cfg[i].values[*cfg[i].int_p]); break; - + case TYPE_STRING: rb->fdprintf(fd, "%s: %s\n", cfg[i].name, @@ -116,17 +122,22 @@ int configfile_load(const char *filename, struct configdata *cfg, tmp = rb->atoi(val); /* Only set it if it's within range */ if(tmp >= cfg[i].min && tmp <= cfg[i].max) - *cfg[i].val = tmp; + *cfg[i].int_p = tmp; break; - + + case TYPE_BOOL: + tmp = rb->atoi(val); + *cfg[i].bool_p = (bool)tmp; + break; + case TYPE_ENUM: for(j = 0;j < cfg[i].max;j++) { if(!rb->strcmp(cfg[i].values[j], val)) { - *cfg[i].val = j; + *cfg[i].int_p = j; } } break; - + case TYPE_STRING: rb->strncpy(cfg[i].string, val, cfg[i].max); break; diff --git a/apps/plugins/lib/configfile.h b/apps/plugins/lib/configfile.h index 0804a5930d..5dc31735a3 100644 --- a/apps/plugins/lib/configfile.h +++ b/apps/plugins/lib/configfile.h @@ -24,6 +24,7 @@ #define TYPE_INT 1 #define TYPE_ENUM 2 #define TYPE_STRING 3 +#define TYPE_BOOL 4 struct configdata { @@ -31,12 +32,14 @@ struct configdata int min; /* Min value for integers, should be 0 for enums */ int max; /* Max value for enums and integers, buffer size for strings */ - int *val; /* Pointer to integer/enum value, - NULL if the item is a string */ + union + { + int *int_p; + bool *bool_p; + char *string; + }; /* Pointer to value, a union of the possible types */ char *name; /* Pointer to the name of the item */ char **values; /* List of strings for enums, NULL if not enum */ - char *string; /* Pointer to a string buffer if the item is a string, - NULL otherwise */ }; /* configfile_save - Given configdata entries this function will diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c index 8981986144..6b9ad43cc7 100644 --- a/apps/plugins/mazezam.c +++ b/apps/plugins/mazezam.c @@ -807,8 +807,8 @@ static void game_loop(struct resume_data *r) static void resume_load_data (struct resume_data *r, struct resume_data *old) { struct configdata config[] = { - {TYPE_INT,0,MAZEZAM_NUM_LEVELS-1,&(r->level), - MAZEZAM_CONFIG_LEVELS_NAME,NULL,NULL} + {TYPE_INT,0,MAZEZAM_NUM_LEVELS-1, { .int_p = &(r->level) }, + MAZEZAM_CONFIG_LEVELS_NAME,NULL} }; if (configfile_load(MAZEZAM_CONFIG_FILENAME,config, @@ -827,8 +827,8 @@ static void resume_load_data (struct resume_data *r, struct resume_data *old) static void resume_save_data (struct resume_data *r, struct resume_data *old) { struct configdata config[] = { - {TYPE_INT,0,MAZEZAM_NUM_LEVELS-1,&(r->level), - MAZEZAM_CONFIG_LEVELS_NAME,NULL,NULL} + {TYPE_INT,0,MAZEZAM_NUM_LEVELS-1, {.int_p = &(r->level) }, + MAZEZAM_CONFIG_LEVELS_NAME,NULL} }; /* To reduce disk usage, only write the file if the resume data has diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c index 3e83f8bc17..4b77518f54 100644 --- a/apps/plugins/mpegplayer/mpeg_settings.c +++ b/apps/plugins/mpegplayer/mpeg_settings.c @@ -178,25 +178,27 @@ struct mpeg_settings settings; static struct configdata config[] = { - {TYPE_INT, 0, 2, &settings.showfps, "Show FPS", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.limitfps, "Limit FPS", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.skipframes, "Skip frames", NULL, NULL}, - {TYPE_INT, 0, INT_MAX, &settings.resume_count, "Resume count", - NULL, NULL}, - {TYPE_INT, 0, MPEG_RESUME_NUM_OPTIONS, &settings.resume_options, - "Resume options", NULL, NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.showfps }, "Show FPS", NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.limitfps }, "Limit FPS", NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.skipframes }, "Skip frames", NULL}, + {TYPE_INT, 0, INT_MAX, { .int_p = &settings.resume_count }, "Resume count", + NULL}, + {TYPE_INT, 0, MPEG_RESUME_NUM_OPTIONS, + { .int_p = &settings.resume_options }, "Resume options", NULL}, #if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200) || defined(SANSA_C200) - {TYPE_INT, 0, INT_MAX, &settings.displayoptions, "Display options", - NULL, NULL}, + {TYPE_INT, 0, INT_MAX, { .int_p = &settings.displayoptions }, + "Display options", NULL}, #endif - {TYPE_INT, 0, 2, &settings.tone_controls, "Tone controls", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.channel_modes, "Channel modes", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.crossfeed, "Crossfeed", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.equalizer, "Equalizer", NULL, NULL}, - {TYPE_INT, 0, 2, &settings.dithering, "Dithering", NULL, NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.tone_controls }, "Tone controls", + NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.channel_modes }, "Channel modes", + NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.crossfeed }, "Crossfeed", NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.equalizer }, "Equalizer", NULL}, + {TYPE_INT, 0, 2, { .int_p = &settings.dithering }, "Dithering", NULL}, #ifdef HAVE_BACKLIGHT_BRIGHTNESS - {TYPE_INT, -1, INT_MAX, &settings.backlight_brightness, - "Backlight brightness", NULL, NULL}, + {TYPE_INT, -1, INT_MAX, { .int_p = &settings.backlight_brightness }, + "Backlight brightness", NULL}, #endif }; diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index ab3c5b2e39..9401c62d1f 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -312,10 +312,12 @@ static char *advance_str[2] = { "scroll", "wrap" }; static char *orientation_str[2] = { "horizontal", "vertical" }; struct configdata disk_config[] = { - { TYPE_INT, 1, 99, &osc_disk.delay, "delay", NULL, NULL }, - { TYPE_ENUM, 0, MAX_DRAW, &osc_disk.draw, "draw", draw_str, NULL }, - { TYPE_ENUM, 0, MAX_ADV, &osc_disk.advance, "advance", advance_str, NULL }, - { TYPE_ENUM, 0, MAX_OSC, &osc_disk.orientation, "orientation", orientation_str, NULL } + { TYPE_INT, 1, 99, { .int_p = &osc_disk.delay }, "delay", NULL }, + { TYPE_ENUM, 0, MAX_DRAW, { .int_p = &osc_disk.draw }, "draw", draw_str }, + { TYPE_ENUM, 0, MAX_ADV, { .int_p = &osc_disk.advance }, "advance", + advance_str }, + { TYPE_ENUM, 0, MAX_OSC, { .int_p = &osc_disk.orientation }, "orientation", + orientation_str } }; diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c index ef5d4f5c0e..560e185704 100644 --- a/apps/plugins/pacbox/pacbox.c +++ b/apps/plugins/pacbox/pacbox.c @@ -57,11 +57,15 @@ static char* showfps_options[] = {"No", "Yes"}; static struct configdata config[] = { - {TYPE_ENUM, 0, 2, &settings.difficulty, "Difficulty", difficulty_options, NULL}, - {TYPE_ENUM, 0, 4, &settings.numlives, "Pacmen Per Game", numlives_options, NULL}, - {TYPE_ENUM, 0, 4, &settings.bonus, "Bonus", bonus_options, NULL}, - {TYPE_ENUM, 0, 2, &settings.ghostnames, "Ghost Names", ghostnames_options , NULL}, - {TYPE_ENUM, 0, 2, &settings.showfps, "Show FPS", showfps_options, NULL}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.difficulty }, "Difficulty", + difficulty_options}, + {TYPE_ENUM, 0, 4, { .int_p = &settings.numlives }, "Pacmen Per Game", + numlives_options}, + {TYPE_ENUM, 0, 4, { .int_p = &settings.bonus }, "Bonus", bonus_options}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.ghostnames }, "Ghost Names", + ghostnames_options}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.showfps }, "Show FPS", + showfps_options}, }; static bool loadFile( const char * name, unsigned char * buf, int len ) diff --git a/apps/plugins/pictureflow.c b/apps/plugins/pictureflow.c index 807ba19e7e..b107227e40 100644 --- a/apps/plugins/pictureflow.c +++ b/apps/plugins/pictureflow.c @@ -203,22 +203,25 @@ static int slide_spacing = (LCD_WIDTH - DISPLAY_WIDTH) / 8; static int center_margin = (LCD_WIDTH - DISPLAY_WIDTH) / 16; static int num_slides = 4; static int zoom = 100; -static int show_fps = false; -static int resize = true; +static bool show_fps = false; +static bool resize = true; static int cache_version = 0; static int show_album_name = album_name_top; static struct configdata config[] = { - { TYPE_INT, 0, MAX_SPACING, &slide_spacing, "slide spacing", NULL, NULL }, - { TYPE_INT, 0, MAX_MARGIN, ¢er_margin, "center margin", NULL, NULL }, - { TYPE_INT, 0, MAX_SLIDES_COUNT, &num_slides, "slides count", NULL, NULL }, - { TYPE_INT, 0, 300, &zoom, "zoom", NULL, NULL }, - { TYPE_INT, 0, 1, &show_fps, "show fps", NULL, NULL }, - { TYPE_INT, 0, 1, &resize, "resize", NULL, NULL }, - { TYPE_INT, 0, 100, &cache_version, "cache version", NULL, NULL }, - { TYPE_ENUM, 0, 2, &show_album_name, "show album name", - show_album_name_conf, NULL } + { TYPE_INT, 0, MAX_SPACING, { .int_p = &slide_spacing }, "slide spacing", + NULL }, + { TYPE_INT, 0, MAX_MARGIN, { .int_p = ¢er_margin }, "center margin", + NULL }, + { TYPE_INT, 0, MAX_SLIDES_COUNT, { .int_p = &num_slides }, "slides count", + NULL }, + { TYPE_INT, 0, 300, { .int_p = &zoom }, "zoom", NULL }, + { TYPE_BOOL, 0, 1, { .bool_p = &show_fps }, "show fps", NULL }, + { TYPE_BOOL, 0, 1, { .bool_p = &resize }, "resize", NULL }, + { TYPE_INT, 0, 100, { .int_p = &cache_version }, "cache version", NULL }, + { TYPE_ENUM, 0, 2, { .int_p = &show_album_name }, "show album name", + show_album_name_conf } }; #define CONFIG_NUM_ITEMS (sizeof(config) / sizeof(struct configdata)) @@ -1555,7 +1558,6 @@ int settings_menu(void) { int selection = 0; bool old_val; - bool new_val; MENUITEM_STRINGLIST(settings_menu, "PictureFlow Settings", NULL, "Show FPS", "Spacing", "Center margin", "Number of slides", "Zoom", @@ -1565,9 +1567,7 @@ int settings_menu(void) selection=rb->do_menu(&settings_menu,&selection, NULL, false); switch(selection) { case 0: - new_val = show_fps; - rb->set_bool("Show FPS", &new_val); - show_fps = new_val; + rb->set_bool("Show FPS", &show_fps); reset_track_list(); break; @@ -1607,10 +1607,9 @@ int settings_menu(void) reset_slides(); break; case 6: - old_val = new_val = resize; - rb->set_bool("Resize Covers", &new_val); - resize = new_val; - if (old_val == new_val) /* changed? */ + old_val = resize; + rb->set_bool("Resize Covers", &resize); + if (old_val == resize) /* changed? */ break; /* fallthrough if changed, since cache needs to be rebuilt */ case 7: diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index 2f5f2dc4a8..bbf7c11291 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -749,7 +749,7 @@ struct sol_config sol_disk = {0}; struct sol_config sol; static struct configdata config[] = { - { TYPE_INT, 0, 1, &sol_disk.draw_type, "draw_type", NULL, NULL }, + { TYPE_INT, 0, 1, { .int_p = &sol_disk.draw_type }, "draw_type", NULL } }; char draw_option_string[32]; diff --git a/apps/plugins/sudoku/sudoku.c b/apps/plugins/sudoku/sudoku.c index 88fd0bd8ec..69c41f476e 100644 --- a/apps/plugins/sudoku/sudoku.c +++ b/apps/plugins/sudoku/sudoku.c @@ -245,10 +245,12 @@ static char *mark_str[2] = { "hide", "show" }; struct configdata disk_config[] = { #ifdef HAVE_LCD_COLOR - { TYPE_ENUM, 0, 2, &sudcfg_disk.number_display, "numbers", number_str, NULL }, + { TYPE_ENUM, 0, 2, { .int_p = &sudcfg_disk.number_display }, "numbers", + number_str }, #endif #ifdef SUDOKU_BUTTON_POSSIBLE - { TYPE_ENUM, 0, 2, &sudcfg_disk.show_markings, "markings", mark_str, NULL }, + { TYPE_ENUM, 0, 2, { .int_p = &sudcfg_disk.show_markings }, "markings", + mark_str }, #endif }; #endif diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c index 69d243e12b..58a103dfe2 100644 --- a/apps/plugins/wavrecord.c +++ b/apps/plugins/wavrecord.c @@ -3191,9 +3191,12 @@ static char *source_str[WAV_NUM_SRC] = { "line in", "mic", HAVE_SPDIF_REC_("spdif",) }; struct configdata disk_config[] = { - { TYPE_ENUM, 0, 9, &reccfg_disk.samplerate, "sample rate", samplerate_str, NULL }, - { TYPE_ENUM, 0, 2, &reccfg_disk.channels, "channels", channel_str, NULL }, - { TYPE_ENUM, 0, WAV_NUM_SRC, &reccfg_disk.source, "source", source_str, NULL }, + { TYPE_ENUM, 0, 9, { .int_p = &reccfg_disk.samplerate }, "sample rate", + samplerate_str }, + { TYPE_ENUM, 0, 2, { .int_p = &reccfg_disk.channels }, "channels", + channel_str }, + { TYPE_ENUM, 0, WAV_NUM_SRC, { .int_p = &reccfg_disk.source }, "source", + source_str }, }; static char recfilename[MAX_PATH]; diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index abb2653501..ee8046275f 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c @@ -468,15 +468,14 @@ static int players = 1; static struct configdata config[] = { - {TYPE_INT, 0, 1024, &highscore, "highscore", NULL, NULL}, - {TYPE_INT, 0, 15, &arghs_per_food, "arghs per food", NULL, NULL}, - {TYPE_INT, 0, 15, &argh_size, "argh size", NULL, NULL}, - {TYPE_INT, 0, 15, &food_size, "food size", NULL, NULL}, - {TYPE_INT, 0, 3, &players, "players", NULL, NULL}, - {TYPE_INT, 0, 3, &worm_count, "worms", NULL, NULL}, - {TYPE_INT, 0, 20, &speed, "speed", NULL, NULL}, - {TYPE_INT, 0, 15, &worm_food, "Worm Growth Per Food", NULL, NULL}//, - //{TYPE_INT, 0, 3, &use_remote, "use remote", NULL, NULL} + {TYPE_INT, 0, 1024, { .int_p = &highscore }, "highscore", NULL}, + {TYPE_INT, 0, 15, { .int_p = &arghs_per_food }, "arghs per food", NULL}, + {TYPE_INT, 0, 15, { .int_p = &argh_size }, "argh size", NULL}, + {TYPE_INT, 0, 15, { .int_p = &food_size }, "food size", NULL}, + {TYPE_INT, 0, 3, { .int_p = &players }, "players", NULL}, + {TYPE_INT, 0, 3, { .int_p = &worm_count }, "worms", NULL}, + {TYPE_INT, 0, 20, { .int_p = &speed }, "speed", NULL}, + {TYPE_INT, 0, 15, { .int_p = &worm_food }, "Worm Growth Per Food", NULL} }; #ifdef DEBUG_WORMLET diff --git a/apps/plugins/zxbox/spmain.c b/apps/plugins/zxbox/spmain.c index e304d8b52d..b7d20ecf5e 100644 --- a/apps/plugins/zxbox/spmain.c +++ b/apps/plugins/zxbox/spmain.c @@ -75,13 +75,17 @@ static char* showfps_options[] = {"No", "Yes"};*/ static struct configdata config[] = { - {TYPE_ENUM, 0, 2, &settings.invert_colors, "Invert Colors", noyes_options, NULL}, - {TYPE_ENUM, 0, 2, &settings.kempston, "Map keys to kempston", noyes_options, NULL}, - {TYPE_ENUM, 0, 2, &settings.showfps, "Show Speed", noyes_options, NULL}, - {TYPE_ENUM, 0, 2, &settings.sound, "Sound", noyes_options, NULL}, - {TYPE_INT, 0, 9, &settings.frameskip, "Frameskip", NULL, NULL}, - {TYPE_INT, 1, 10, &settings.volume, "Volume", NULL, NULL}, - {TYPE_STRING, 0, 5, NULL,"Key Mapping", NULL, (char*)&settings.keymap}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.invert_colors }, "Invert Colors", + noyes_options}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.kempston }, "Map keys to kempston", + noyes_options}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.showfps }, "Show Speed", + noyes_options}, + {TYPE_ENUM, 0, 2, { .int_p = &settings.sound }, "Sound", noyes_options}, + {TYPE_INT, 0, 9, { .int_p = &settings.frameskip }, "Frameskip", NULL}, + {TYPE_INT, 1, 10, { .int_p = &settings.volume }, "Volume", NULL}, + {TYPE_STRING, 0, 5, { .string = (char*)&settings.keymap }, "Key Mapping", + NULL}, }; int spcf_read_conf_file(const char *filename) {