static struct level lvl;
+static const char *opt_fname;
+
int main(int argc, char **argv)
{
utk_set_size(uiwin_new, utk_get_width(vbox) + pad * 2.0f, utk_get_height(vbox) + pad * 2.0f);
- if(init_level(&lvl, 32, 32) == -1) {
- fprintf(stderr, "failed to create level\n");
- return -1;
+ if(opt_fname) {
+ if(load_level(&lvl, opt_fname) == -1) {
+ fprintf(stderr, "failed to load level: %s\n", opt_fname);
+ return -1;
+ }
+ } else {
+ if(init_level(&lvl, 32, 32) == -1) {
+ fprintf(stderr, "failed to create level\n");
+ return -1;
+ }
}
if(init_lview(&lvl) == -1) {
return -1;
static void cb_open_ok(utk_event *ev, void *data)
{
+ char *errmsg = 0;
+ const char *path;
+
utk_widget *dlg = utk_event_widget(ev);
- printf("selected: %s\n", utk_file_dialog_file(dlg));
+ path = utk_file_dialog_path(dlg);
+ printf("selected: %s\n", path);
+ if(load_level(&lvl, path) == -1) {
+ errmsg = alloca(strlen(path) + 32);
+ sprintf(errmsg, "Failed to load level: %s", path);
+ }
utk_destroy_window(dlg);
if(uigrab == dlg) uigrab = 0;
+
+ if(errmsg) {
+ uigrab = utk_message_dialog(errmsg, UTK_MSG_TYPE_ERROR, UTK_MSG_BN_OK, cb_cancel, 0);
+ }
}
static void cb_save(utk_event *ev, void *data)
return -1;
}
} else {
- fprintf(stderr, "unexpected argument: %s\n", argv[i]);
- return -1;
+ if(opt_fname) {
+ fprintf(stderr, "unexpected argument: %s\n", argv[i]);
+ return -1;
+ }
+ opt_fname = argv[i];
}
}
return 0;