diff options
Diffstat (limited to 'src/mem_fb.c')
-rw-r--r-- | src/mem_fb.c | 79 |
1 files changed, 42 insertions, 37 deletions
diff --git a/src/mem_fb.c b/src/mem_fb.c index ee736c7..bd25265 100644 --- a/src/mem_fb.c +++ b/src/mem_fb.c @@ -26,43 +26,6 @@ typedef struct mem_fb_t { } mem_fb_t; -static int mem_fb_setup(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup) -{ - const char *size; - int r; - - r = til_settings_get_and_describe_value(settings, - &(til_setting_spec_t){ - .name = "Virtual window size", - .key = "size", - .regex = "[1-9][0-9]*[xX][1-9][0-9]*", - .preferred = "640x480", - .values = NULL, - .annotations = NULL - }, - &size, - res_setting, - res_desc); - if (r) - return r; - - if (res_setup) { - mem_fb_setup_t *setup; - - setup = til_setup_new(settings, sizeof(*setup), NULL); - if (!setup) - return -ENOMEM; - - /* TODO FIXME: parse errors */ - sscanf(size, "%ux%u", &setup->width, &setup->height); - - *res_setup = &setup->til_setup; - } - - return 0; -} - - static int mem_fb_init(const char *title, const til_setup_t *setup, void **res_context) { mem_fb_t *c; @@ -163,6 +126,9 @@ static int mem_fb_page_flip(til_fb_t *fb, void *context, void *page) } +static int mem_fb_setup(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup); + + til_fb_ops_t mem_fb_ops = { .setup = mem_fb_setup, .init = mem_fb_init, @@ -173,3 +139,42 @@ til_fb_ops_t mem_fb_ops = { .page_free = mem_fb_page_free, .page_flip = mem_fb_page_flip }; + + +static int mem_fb_setup(const til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup) +{ + const char *size; + int r; + + r = til_settings_get_and_describe_value(settings, + &(til_setting_spec_t){ + .name = "Virtual window size", + .key = "size", + .regex = "[1-9][0-9]*[xX][1-9][0-9]*", + .preferred = "640x480", + .values = NULL, + .annotations = NULL + }, + &size, + res_setting, + res_desc); + if (r) + return r; + + if (res_setup) { + mem_fb_setup_t *setup; + + setup = til_setup_new(settings, sizeof(*setup), NULL, &mem_fb_ops); + if (!setup) + return -ENOMEM; + + /* TODO FIXME: parse errors */ + sscanf(size, "%ux%u", &setup->width, &setup->height); + + *res_setup = &setup->til_setup; + } + + return 0; +} + + |