diff options
-rw-r--r-- | Modules/flmodule.c | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/Modules/flmodule.c b/Modules/flmodule.c index 1fd9a2c..3ed2f4d 100644 --- a/Modules/flmodule.c +++ b/Modules/flmodule.c @@ -1985,9 +1985,11 @@ forms_do_or_check_forms(dummy, args, func) } g = findgeneric(generic); if (g == NULL) { - err_setstr(RuntimeError, - "{do|check}_forms returns unknown object"); - return NULL; + /* XXX What kind of weird object is this? */ + /* XXX Maybe caused by a bug here */ + fprintf(stderr, "weird object: class %d, label '%s'\n", + generic->objclass, generic->label); + continue; /* Ignore it */ } if (g->ob_callback == NULL) { INCREF(g); @@ -2274,6 +2276,44 @@ forms_show_message(f, args) } static object * +forms_show_choice(f, args) + object *f; + object *args; +{ + char *m1, *m2, *m3, *b1, *b2, *b3; + int nb; + char *format; + + if (args == NULL || !is_tupleobject(args)) { + err_badarg(); + return NULL; + } + nb = gettuplesize(args) - 3; + if (nb <= 0) { + err_setstr(TypeError, "need at least one button label"); + return NULL; + } + if (is_intobject(gettupleitem(args, 3))) { + err_setstr(TypeError, + "'number-of-buttons' argument not needed"); + return NULL; + } + switch (nb) { + case 1: format = "(ssss)"; break; + case 2: format = "(sssss)"; break; + case 3: format = "(ssssss)"; break; + default: + err_setstr(TypeError, "too many button labels"); + return NULL; + } + + if (!getargs(args, format, &m1, &m2, &m3, &b1, &b2, &b3)) + return NULL; + + return newintobject(fl_show_choice(m1, m2, m3, nb, b1, b2, b3)); +} + +static object * forms_show_question(f, args) object *f; object *args; @@ -2392,7 +2432,10 @@ static struct methodlist forms_methods[] = { /* goodies */ {"show_message", forms_show_message}, {"show_question", forms_show_question}, - {"file_selector", forms_file_selector}, + {"show_choice", forms_show_choice}, + {"show_input", forms_show_input}, + {"show_file_selector", forms_file_selector}, + {"file_selector", forms_file_selector}, /* BW compat */ {"get_directory", forms_get_directory}, {"get_pattern", forms_get_pattern}, {"get_filename", forms_get_filename}, @@ -2400,11 +2443,6 @@ static struct methodlist forms_methods[] = { {"set_graphics_mode", forms_set_graphics_mode}, {"get_rgbmode", forms_get_rgbmode}, #endif /* !FL_V15 */ -/* - {"show_choice", forms_show_choice}, - XXX - draw.c -*/ - {"show_input", forms_show_input}, {NULL, NULL} /* sentinel */ }; |