int fs_init(int argc, char **argv) { char buf[PATH_MAX]; int len; char *ptr; sf_list_def_t def; if (fs.isinited) { sf_log(SF_LOG_WARN, "fs_init: filesystem already initialized."); return SF_OK; } sf_memzero(&def, sizeof(def)); def.size = sizeof(struct directory); def.free = directory_close; sf_list_init(&fs.directories, &def); #ifdef __WIN32__ if (argv[0][1] == ':') { #else if (argv[0][0] == '/') { #endif strncpy(buf, argv[0], PATH_MAX); } else { len = PATH_MAX; getcwd(buf, len); len = strlen(buf); buf[len++] = seperator; buf[len] = '\0'; strncat(buf, argv[0], PATH_MAX - len); } ptr = strrchr(buf, seperator); assert(ptr != NULL); *ptr = '\0'; if (fs_cd(buf) != SF_OK) { sf_list_destroy(&fs.directories); return SF_ERR; } fs.isinited = 1; return SF_OK; } void fs_term(void) { sf_list_destroy(&fs.directories); }
int ui_toolbox_init(struct ui_toolbox *tb, int w, int h, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { sf_list_def_t def; ui_init((struct ui *) tb, w, h); tb->background_color[0] = r; tb->background_color[1] = g; tb->background_color[2] = b; tb->background_color[3] = a; sf_memzero(&def, sizeof(def)); def.size = sizeof(struct ui *); if (sf_list_init(&tb->buttons, &def) != SF_OK) { return -1; } UI_CALLBACK(tb, render, ui_toolbox_on_render); UI_CALLBACK(tb, press, ui_toolbox_on_press); UI_CALLBACK(tb, resize, ui_toolbox_on_resize); UI_CALLBACK(tb, destroy, ui_toolbox_on_destroy); return 0; }