summaryrefslogtreecommitdiff
path: root/src/mem_fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem_fb.c')
-rw-r--r--src/mem_fb.c79
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;
+}
+
+
© All Rights Reserved