📄 flmodule.c
字号:
static PyObject *
newformobject(FL_FORM *form)
{
formobject *f;
f = PyObject_New(formobject, &Formtype);
if (f == NULL)
return NULL;
f->ob_form = form;
return (PyObject *)f;
}
/* The "fl" module */
static PyObject *
forms_make_form(PyObject *dummy, PyObject *args)
{
int type;
float w, h;
FL_FORM *form;
if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
return NULL;
form = fl_bgn_form(type, w, h);
if (form == NULL) {
/* XXX Actually, cannot happen! */
PyErr_NoMemory();
return NULL;
}
fl_end_form();
return newformobject(form);
}
static PyObject *
forms_activate_all_forms(PyObject *f, PyObject *args)
{
fl_activate_all_forms();
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_deactivate_all_forms(PyObject *f, PyObject *args)
{
fl_deactivate_all_forms();
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *my_event_callback = NULL;
static PyObject *
forms_set_event_call_back(PyObject *dummy, PyObject *args)
{
if (args == Py_None)
args = NULL;
my_event_callback = args;
Py_XINCREF(args);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_do_or_check_forms(PyObject *dummy, PyObject *args, FL_OBJECT *(*func)(void))
{
FL_OBJECT *generic;
genericobject *g;
PyObject *arg, *res;
if (!PyArg_NoArgs(args))
return NULL;
for (;;) {
Py_BEGIN_ALLOW_THREADS
generic = (*func)();
Py_END_ALLOW_THREADS
if (generic == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
if (generic == FL_EVENT) {
int dev;
short val;
if (my_event_callback == NULL)
return PyInt_FromLong(-1L);
dev = fl_qread(&val);
arg = Py_BuildValue("(ih)", dev, val);
if (arg == NULL)
return NULL;
res = PyEval_CallObject(my_event_callback, arg);
Py_XDECREF(res);
Py_DECREF(arg);
if (res == NULL)
return NULL; /* Callback raised exception */
continue;
}
g = findgeneric(generic);
if (g == NULL) {
/* Object not known to us (some dialogs cause this) */
continue; /* Ignore it */
}
if (g->ob_callback == NULL) {
Py_INCREF(g);
return ((PyObject *) g);
}
arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
if (arg == NULL)
return NULL;
res = PyEval_CallObject(g->ob_callback, arg);
Py_XDECREF(res);
Py_DECREF(arg);
if (res == NULL)
return NULL; /* Callback raised exception */
}
}
static PyObject *
forms_do_forms(PyObject *dummy, PyObject *args)
{
return forms_do_or_check_forms(dummy, args, fl_do_forms);
}
static PyObject *
forms_check_forms(PyObject *dummy, PyObject *args)
{
return forms_do_or_check_forms(dummy, args, fl_check_forms);
}
static PyObject *
forms_do_only_forms(PyObject *dummy, PyObject *args)
{
return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
}
static PyObject *
forms_check_only_forms(PyObject *dummy, PyObject *args)
{
return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
}
#ifdef UNUSED
static PyObject *
fl_call(void (*func)(void), PyObject *args)
{
if (!PyArg_NoArgs(args))
return NULL;
(*func)();
Py_INCREF(Py_None);
return Py_None;
}
#endif
static PyObject *
forms_set_graphics_mode(PyObject *dummy, PyObject *args)
{
int rgbmode, doublebuf;
if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
return NULL;
fl_set_graphics_mode(rgbmode,doublebuf);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_get_rgbmode(PyObject *dummy, PyObject *args)
{
extern int fl_rgbmode;
if (args != NULL) {
PyErr_BadArgument();
return NULL;
}
return PyInt_FromLong((long)fl_rgbmode);
}
static PyObject *
forms_show_errors(PyObject *dummy, PyObject *args)
{
int show;
if (!PyArg_Parse(args, "i", &show))
return NULL;
fl_show_errors(show);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_set_font_name(PyObject *dummy, PyObject *args)
{
int numb;
char *name;
if (!PyArg_Parse(args, "(is)", &numb, &name))
return NULL;
fl_set_font_name(numb, name);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_qdevice(PyObject *self, PyObject *args)
{
short arg1;
if (!PyArg_Parse(args, "h", &arg1))
return NULL;
fl_qdevice(arg1);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_unqdevice(PyObject *self, PyObject *args)
{
short arg1;
if (!PyArg_Parse(args, "h", &arg1))
return NULL;
fl_unqdevice(arg1);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_isqueued(PyObject *self, PyObject *args)
{
long retval;
short arg1;
if (!PyArg_Parse(args, "h", &arg1))
return NULL;
retval = fl_isqueued(arg1);
return PyInt_FromLong(retval);
}
static PyObject *
forms_qtest(PyObject *self, PyObject *args)
{
long retval;
retval = fl_qtest();
return PyInt_FromLong(retval);
}
static PyObject *
forms_qread(PyObject *self, PyObject *args)
{
int dev;
short val;
Py_BEGIN_ALLOW_THREADS
dev = fl_qread(&val);
Py_END_ALLOW_THREADS
return Py_BuildValue("(ih)", dev, val);
}
static PyObject *
forms_qreset(PyObject *self, PyObject *args)
{
if (!PyArg_NoArgs(args)) return NULL;
fl_qreset();
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_qenter(PyObject *self, PyObject *args)
{
short arg1, arg2;
if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
return NULL;
fl_qenter(arg1, arg2);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_color(PyObject *self, PyObject *args)
{
int arg;
if (!PyArg_Parse(args, "i", &arg)) return NULL;
fl_color((short) arg);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_mapcolor(PyObject *self, PyObject *args)
{
int arg0, arg1, arg2, arg3;
if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
return NULL;
fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_getmcolor(PyObject *self, PyObject *args)
{
int arg;
short r, g, b;
if (!PyArg_Parse(args, "i", &arg)) return NULL;
fl_getmcolor(arg, &r, &g, &b);
return Py_BuildValue("(hhh)", r, g, b);
}
static PyObject *
forms_get_mouse(PyObject *self, PyObject *args)
{
float x, y;
if (!PyArg_NoArgs(args)) return NULL;
fl_get_mouse(&x, &y);
return Py_BuildValue("(ff)", x, y);
}
static PyObject *
forms_tie(PyObject *self, PyObject *args)
{
short arg1, arg2, arg3;
if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
return NULL;
fl_tie(arg1, arg2, arg3);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_show_message(PyObject *f, PyObject *args)
{
char *a, *b, *c;
if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Py_BEGIN_ALLOW_THREADS
fl_show_message(a, b, c);
Py_END_ALLOW_THREADS
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *
forms_show_choice(PyObject *f, PyObject *args)
{
char *m1, *m2, *m3, *b1, *b2, *b3;
int nb;
char *format;
long rv;
if (args == NULL || !PyTuple_Check(args)) {
PyErr_BadArgument();
return NULL;
}
nb = PyTuple_Size(args) - 3;
if (nb <= 0) {
PyErr_SetString(PyExc_TypeError,
"need at least one button label");
return NULL;
}
if (PyInt_Check(PyTuple_GetItem(args, 3))) {
PyErr_SetString(PyExc_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:
PyErr_SetString(PyExc_TypeError, "too many button labels");
return NULL;
}
if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
return NULL;
Py_BEGIN_ALLOW_THREADS
rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
Py_END_ALLOW_THREADS
return PyInt_FromLong(rv);
}
static PyObject *
forms_show_question(PyObject *f, PyObject *args)
{
int ret;
char *a, *b, *c;
if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Py_BEGIN_ALLOW_THREADS
ret = fl_show_question(a, b, c);
Py_END_ALLOW_THREADS
return PyInt_FromLong((long) ret);
}
static PyObject *
forms_show_input(PyObject *f, PyObject *args)
{
char *str;
char *a, *b;
if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
Py_BEGIN_ALLOW_THREADS
str = fl_show_input(a, b);
Py_END_ALLOW_THREADS
if (str == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
return PyString_FromString(str);
}
static PyObject *
forms_file_selector(PyObject *f, PyObject *args)
{
char *str;
char *a, *b, *c, *d;
if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Py_BEGIN_ALLOW_THREADS
str = fl_show_file_selector(a, b, c, d);
Py_END_ALLOW_THREADS
if (str == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
return PyString_FromString(str);
}
static PyObject *
forms_file_selector_func(PyObject *args, char *(*func)(void))
{
char *str;
str = (*func) ();
if (str == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
return PyString_FromString(str);
}
static PyObject *
forms_get_directory(PyObject *f, PyObject *args)
{
return forms_file_selector_func(args, fl_get_directory);
}
static PyObject *
forms_get_pattern(PyObject *f, PyObject *args)
{
return forms_file_selector_func(args, fl_get_pattern);
}
static PyObject *
forms_get_filename(PyObject *f, PyObject *args)
{
return forms_file_selector_func(args, fl_get_filename);
}
static PyMethodDef forms_methods[] = {
/* adm */
{"make_form", forms_make_form},
{"activate_all_forms", forms_activate_all_forms},
{"deactivate_all_forms",forms_deactivate_all_forms},
/* gl support wrappers */
{"qdevice", forms_qdevice},
{"unqdevice", forms_unqdevice},
{"isqueued", forms_isqueued},
{"qtest", forms_qtest},
{"qread", forms_qread},
/* {"blkqread", forms_blkqread}, */
{"qreset", forms_qreset},
{"qenter", forms_qenter},
{"get_mouse", forms_get_mouse},
{"tie", forms_tie},
/* {"new_events", forms_new_events}, */
{"color", forms_color},
{"mapcolor", forms_mapcolor},
{"getmcolor", forms_getmcolor},
/* interaction */
{"do_forms", forms_do_forms},
{"do_only_forms", forms_do_only_forms},
{"check_forms", forms_check_forms},
{"check_only_forms", forms_check_only_forms},
{"set_event_call_back", forms_set_event_call_back},
/* goodies */
{"show_message", forms_show_message},
{"show_question", forms_show_question},
{"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},
{"set_graphics_mode", forms_set_graphics_mode},
{"get_rgbmode", forms_get_rgbmode},
{"show_errors", forms_show_errors},
{"set_font_name", forms_set_font_name},
{NULL, NULL} /* sentinel */
};
DL_EXPORT(void)
initfl(void)
{
Py_InitModule("fl", forms_methods);
foreground();
fl_init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -