blob: 0ddf6006e277d3a1c04ab022c15049d22e080dfb [file] [log] [blame]
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001/* FL module -- interface to Mark Overmars' FORMS Library. */
2
Roger E. Masse7ba4c071997-01-03 22:17:11 +00003/* This code works with FORMS version 2.2 (if you defined
4 OBSOLETE_FORMS_CALLS), and 2.3.
Guido van Rossumf1dc5661993-07-05 10:31:29 +00005 FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
6 /pub/SGI/FORMS. */
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00007
Jack Jansen743db361992-08-13 14:13:11 +00008/* A half-hearted attempt has been made to allow programs using this
9 * module to exploit parallelism (through the threads module). No provisions
10 * have been made for multiple threads to use this module at the same time,
11 * though. So, a program with a forms thread and a non-forms thread will work
12 * fine but a program with two threads using forms will probably crash (unless
13 * the program takes precaution to ensure that only one thread can be in
14 * this module at any time). This will have to be fixed some time.
Thomas Wouters7e474022000-07-16 12:04:32 +000015 * (A fix will probably also have to synchronize with the gl module).
Jack Jansen743db361992-08-13 14:13:11 +000016 */
17
Roger E. Masse7ba4c071997-01-03 22:17:11 +000018#include "Python.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000019#include "forms.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000020#include "structmember.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000021
22/* Generic Forms Objects */
23
24typedef struct {
Antoine Pitrouc83ea132010-05-09 14:46:46 +000025 PyObject_HEAD
26 FL_OBJECT *ob_generic;
27 PyMethodDef *ob_methods;
28 PyObject *ob_callback;
29 PyObject *ob_callback_arg;
Guido van Rossumc7df79e1991-08-07 11:32:58 +000030} genericobject;
31
Jeremy Hylton938ace62002-07-17 16:30:39 +000032static PyTypeObject GenericObjecttype;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000033
34#define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
35
36/* List of all objects (XXX this should be a hash table on address...) */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000037
Roger E. Masse7ba4c071997-01-03 22:17:11 +000038static PyObject *allgenerics = NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000039static int nfreeslots = 0;
40
41/* Add an object to the list of known objects */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000042
43static void
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +000044knowgeneric(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +000045{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000046 int i, n;
47 /* Create the list if it doesn't already exist */
48 if (allgenerics == NULL) {
49 allgenerics = PyList_New(0);
50 if (allgenerics == NULL) {
51 PyErr_Clear();
52 return; /* Too bad, live without allgenerics... */
53 }
54 }
55 if (nfreeslots > 0) {
56 /* Search the list for reusable slots (NULL items) */
57 /* XXX This can be made faster! */
58 n = PyList_Size(allgenerics);
59 for (i = 0; i < n; i++) {
60 if (PyList_GetItem(allgenerics, i) == NULL) {
61 Py_INCREF(g);
62 PyList_SetItem(allgenerics, i, (PyObject *)g);
63 nfreeslots--;
64 return;
65 }
66 }
67 /* Strange... no free slots found... */
68 nfreeslots = 0;
69 }
70 /* No free entries, append new item to the end */
71 PyList_Append(allgenerics, (PyObject *)g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000072}
73
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000074/* Find an object in the list of known objects */
75
Guido van Rossumc7df79e1991-08-07 11:32:58 +000076static genericobject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +000077findgeneric(FL_OBJECT *generic)
Guido van Rossumc7df79e1991-08-07 11:32:58 +000078{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000079 int i, n;
80 genericobject *g;
81
82 if (allgenerics == NULL)
83 return NULL; /* No objects known yet */
84 n = PyList_Size(allgenerics);
85 for (i = 0; i < n; i++) {
86 g = (genericobject *)PyList_GetItem(allgenerics, i);
87 if (g != NULL && g->ob_generic == generic)
88 return g;
89 }
90 return NULL; /* Unknown object */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000091}
92
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +000093/* Remove an object from the list of known objects */
94
95static void
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +000096forgetgeneric(genericobject *g)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +000097{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000098 int i, n;
99
Serhiy Storchaka98a97222014-02-09 13:14:04 +0200100 Py_CLEAR(g->ob_callback);
101 Py_CLEAR(g->ob_callback_arg);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000102 if (allgenerics == NULL)
103 return; /* No objects known yet */
104 n = PyList_Size(allgenerics);
105 for (i = 0; i < n; i++) {
106 if (g == (genericobject *)PyList_GetItem(allgenerics, i)) {
107 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
108 nfreeslots++;
109 break;
110 }
111 }
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000112}
113
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000114/* Called when a form is about to be freed --
115 remove all the objects that we know about from it. */
116
117static void
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000118releaseobjects(FL_FORM *form)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000119{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000120 int i, n;
121 genericobject *g;
122
123 if (allgenerics == NULL)
124 return; /* No objects known yet */
125 n = PyList_Size(allgenerics);
126 for (i = 0; i < n; i++) {
127 g = (genericobject *)PyList_GetItem(allgenerics, i);
128 if (g != NULL && g->ob_generic->form == form) {
129 fl_delete_object(g->ob_generic);
130 /* The object is now unreachable for
131 do_forms and check_forms, so
132 delete it from the list of known objects */
Serhiy Storchaka98a97222014-02-09 13:14:04 +0200133 Py_CLEAR(g->ob_callback);
134 Py_CLEAR(g->ob_callback_arg);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000135 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
136 nfreeslots++;
137 }
138 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000139}
140
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000141
142/* Methods of generic objects */
143
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000144static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000145generic_set_call_back(genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000146{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000147 if (PyTuple_GET_SIZE(args) == 0) {
148 Py_XDECREF(g->ob_callback);
149 Py_XDECREF(g->ob_callback_arg);
150 g->ob_callback = NULL;
151 g->ob_callback_arg = NULL;
152 }
153 else {
154 PyObject *a, *b;
155 if (!PyArg_UnpackTuple(args, "set_call_back", 2, 2, &a, &b))
156 return NULL;
157 Py_XDECREF(g->ob_callback);
158 Py_XDECREF(g->ob_callback_arg);
159 g->ob_callback = a;
160 Py_INCREF(g->ob_callback);
161 g->ob_callback_arg = b;
162 Py_INCREF(g->ob_callback_arg);
163 }
164 Py_INCREF(Py_None);
165 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000166}
167
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000168static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000169generic_call(genericobject *g, void (*func)(FL_OBJECT *))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000170{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000171 (*func)(g->ob_generic);
172 Py_INCREF(Py_None);
173 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000174}
175
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000176static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000177generic_delete_object(genericobject *g)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000178{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000179 PyObject *res;
180 res = generic_call(g, fl_delete_object);
181 if (res != NULL)
182 forgetgeneric(g);
183 return res;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000184}
185
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000186static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000187generic_show_object(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000188{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000189 return generic_call(g, fl_show_object);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000190}
191
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000192static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000193generic_hide_object(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000194{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000195 return generic_call(g, fl_hide_object);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000196}
197
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000198static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000199generic_redraw_object(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000200{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000201 return generic_call(g, fl_redraw_object);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000202}
203
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000204#ifdef OBSOLETE_FORMS_CALLS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000205
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000206 /* (un)freeze_object() are obsolete in FORMS 2.2 and unsupported
207 in 2.3. Since there's no foolproof way to tell which version we're
208 using, we omit them unconditionally. */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000209
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000210static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000211generic_freeze_object(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000212{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000213 return generic_call(g, fl_freeze_object);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000214}
215
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000216static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000217generic_unfreeze_object(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000218{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000219 return generic_call(g, fl_unfreeze_object);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000220}
221
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000222#endif /* OBSOLETE_FORMS_CALLS */
223
224static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000225generic_activate_object(genericobject *g)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000226{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000227 return generic_call(g, fl_activate_object);
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000228}
229
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000230static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000231generic_deactivate_object(genericobject *g)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000232{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000233 return generic_call(g, fl_deactivate_object);
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000234}
235
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000236static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000237generic_set_object_shortcut(genericobject *g, PyObject *args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000238{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000239 char *str;
240 if (!PyArg_ParseTuple(args, "s:set_object_shortcut", &str))
241 return NULL;
242 fl_set_object_shortcut(g->ob_generic, str);
243 Py_INCREF(Py_None);
244 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000245}
246
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000247static PyMethodDef generic_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000248 {"set_call_back", (PyCFunction)generic_set_call_back, METH_VARARGS},
249 {"delete_object", (PyCFunction)generic_delete_object, METH_NOARGS},
250 {"show_object", (PyCFunction)generic_show_object, METH_NOARGS},
251 {"hide_object", (PyCFunction)generic_hide_object, METH_NOARGS},
252 {"redraw_object", (PyCFunction)generic_redraw_object, METH_NOARGS},
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000253#ifdef OBSOLETE_FORMS_CALLS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000254 {"freeze_object", (PyCFunction)generic_freeze_object, METH_NOARGS},
255 {"unfreeze_object", (PyCFunction)generic_unfreeze_object, METH_NOARGS},
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000256#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000257 {"activate_object", (PyCFunction)generic_activate_object, METH_NOARGS},
258 {"deactivate_object", (PyCFunction)generic_deactivate_object, METH_NOARGS},
259 {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut, METH_VARARGS},
260 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000261};
262
263static void
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000264generic_dealloc(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000265{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000266 fl_free_object(g->ob_generic);
267 Py_XDECREF(g->ob_callback);
268 Py_XDECREF(g->ob_callback_arg);
269 PyObject_Del(g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000270}
271
272#define OFF(x) offsetof(FL_OBJECT, x)
273
274static struct memberlist generic_memberlist[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000275 {"objclass", T_INT, OFF(objclass), RO},
276 {"type", T_INT, OFF(type), RO},
277 {"boxtype", T_INT, OFF(boxtype)},
278 {"x", T_FLOAT, OFF(x)},
279 {"y", T_FLOAT, OFF(y)},
280 {"w", T_FLOAT, OFF(w)},
281 {"h", T_FLOAT, OFF(h)},
282 {"col1", T_INT, OFF(col1)},
283 {"col2", T_INT, OFF(col2)},
284 {"align", T_INT, OFF(align)},
285 {"lcol", T_INT, OFF(lcol)},
286 {"lsize", T_FLOAT, OFF(lsize)},
287 /* "label" is treated specially! */
288 {"lstyle", T_INT, OFF(lstyle)},
289 {"pushed", T_INT, OFF(pushed), RO},
290 {"focus", T_INT, OFF(focus), RO},
291 {"belowmouse", T_INT, OFF(belowmouse),RO},
292/* {"frozen", T_INT, OFF(frozen), RO}, */
293 {"active", T_INT, OFF(active)},
294 {"input", T_INT, OFF(input)},
295 {"visible", T_INT, OFF(visible), RO},
296 {"radio", T_INT, OFF(radio)},
297 {"automatic", T_INT, OFF(automatic)},
298 {NULL} /* Sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000299};
300
Guido van Rossumd97f0481991-11-19 20:26:28 +0000301#undef OFF
302
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000303static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000304generic_getattr(genericobject *g, char *name)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000305{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000306 PyObject *meth;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000307
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000308 /* XXX Ought to special-case name "__methods__" */
309 if (g-> ob_methods) {
310 meth = Py_FindMethod(g->ob_methods, (PyObject *)g, name);
311 if (meth != NULL) return meth;
312 PyErr_Clear();
313 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000314
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000315 meth = Py_FindMethod(generic_methods, (PyObject *)g, name);
316 if (meth != NULL)
317 return meth;
318 PyErr_Clear();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000319
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000320 /* "label" is an exception, getmember only works for char pointers,
321 not for char arrays */
322 if (strcmp(name, "label") == 0)
323 return PyString_FromString(g->ob_generic->label);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000324
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000325 return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000326}
327
328static int
Sjoerd Mullender0ae52842000-07-12 10:43:11 +0000329generic_setattr(genericobject *g, char *name, PyObject *v)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000330{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000331 int ret;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000332
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000333 if (v == NULL) {
334 PyErr_SetString(PyExc_TypeError,
335 "can't delete forms object attributes");
336 return -1;
337 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000338
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000339 /* "label" is an exception: setmember doesn't set strings;
340 and FORMS wants you to call a function to set the label */
341 if (strcmp(name, "label") == 0) {
342 if (!PyString_Check(v)) {
343 PyErr_SetString(PyExc_TypeError,
344 "label attr must be string");
345 return -1;
346 }
347 fl_set_object_label(g->ob_generic, PyString_AsString(v));
348 return 0;
349 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000350
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000351 ret = PyMember_Set((char *)g->ob_generic, generic_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000352
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000353 /* Rather than calling all the various set_object_* functions,
354 we call fl_redraw_object here. This is sometimes redundant
355 but I doubt that's a big problem */
356 if (ret == 0)
357 fl_redraw_object(g->ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000358
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000359 return ret;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000360}
361
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000362static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000363generic_repr(genericobject *g)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000364{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000365 char buf[100];
366 PyOS_snprintf(buf, sizeof(buf), "<FORMS_object at %p, objclass=%d>",
367 g, g->ob_generic->objclass);
368 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000369}
370
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000371static PyTypeObject GenericObjecttype = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000372 PyObject_HEAD_INIT(&PyType_Type)
373 0, /*ob_size*/
374 "fl.FORMS_object", /*tp_name*/
375 sizeof(genericobject), /*tp_size*/
376 0, /*tp_itemsize*/
377 /* methods */
378 (destructor)generic_dealloc, /*tp_dealloc*/
379 0, /*tp_print*/
380 (getattrfunc)generic_getattr, /*tp_getattr*/
381 (setattrfunc)generic_setattr, /*tp_setattr*/
382 0, /*tp_compare*/
383 (reprfunc)generic_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000384};
385
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000386static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000387newgenericobject(FL_OBJECT *generic, PyMethodDef *methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000388{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000389 genericobject *g;
390 g = PyObject_New(genericobject, &GenericObjecttype);
391 if (g == NULL)
392 return NULL;
393 g-> ob_generic = generic;
394 g->ob_methods = methods;
395 g->ob_callback = NULL;
396 g->ob_callback_arg = NULL;
397 knowgeneric(g);
398 return (PyObject *)g;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000399}
400
401/**********************************************************************/
402/* Some common calling sequences */
403
404/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000405static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000406call_forms_INf (void (*func)(FL_OBJECT *, float), FL_OBJECT *obj, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000407{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000408 float parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000409
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000410 if (!PyArg_Parse(args, "f", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000411
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000412 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000413
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000414 Py_INCREF(Py_None);
415 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000416}
417
418/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000419static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000420call_forms_INfINf (void (*func)(FL_OBJECT *, float, float), FL_OBJECT *obj, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000421{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000422 float par1, par2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000423
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000424 if (!PyArg_Parse(args, "(ff)", &par1, &par2)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000425
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000426 (*func) (obj, par1, par2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000427
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000428 Py_INCREF(Py_None);
429 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000430}
431
432/* void func (object, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000433static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000434call_forms_INi (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000435{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000436 int parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000437
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000438 if (!PyArg_Parse(args, "i", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000439
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000440 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000441
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000442 Py_INCREF(Py_None);
443 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000444}
445
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000446/* void func (object, char) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000447static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000448call_forms_INc (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000449{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000450 char *a;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000451
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000452 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000453
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000454 (*func) (obj, a[0]);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000455
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000456 Py_INCREF(Py_None);
457 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000458}
459
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000460/* void func (object, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000461static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000462call_forms_INstr (void (*func)(FL_OBJECT *, char *), FL_OBJECT *obj, PyObject *args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000463{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000464 char *a;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000465
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000466 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000467
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000468 (*func) (obj, a);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000469
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000470 Py_INCREF(Py_None);
471 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000472}
473
474
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000475/* void func (object, int, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000476static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000477call_forms_INiINstr (void (*func)(FL_OBJECT *, int, char *), FL_OBJECT *obj, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000478{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000479 char *b;
480 int a;
481
482 if (!PyArg_Parse(args, "(is)", &a, &b)) return NULL;
483
484 (*func) (obj, a, b);
485
486 Py_INCREF(Py_None);
487 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000488}
489
Guido van Rossum03747111991-08-08 12:10:01 +0000490#ifdef UNUSED
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000491/* void func (object, int, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000492static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000493call_forms_INiINi (void (*func)(FL_OBJECT *, int, int), FL_OBJECT *obj, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000494{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000495 int par1, par2;
496
497 if (!PyArg_Parse(args, "(ii)", &par1, &par2)) return NULL;
498
499 (*func) (obj, par1, par2);
500
501 Py_INCREF(Py_None);
502 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000503}
Guido van Rossum03747111991-08-08 12:10:01 +0000504#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000505
506/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000507static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000508call_forms_Ri (int (*func)(FL_OBJECT *), FL_OBJECT *obj)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000509{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000510 int retval;
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000511
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000512 retval = (*func) (obj);
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000513
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000514 return PyInt_FromLong ((long) retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000515}
516
517/* char * func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000518static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000519call_forms_Rstr (char * (*func)(FL_OBJECT *), FL_OBJECT *obj)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000520{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000521 char *str;
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000522
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000523 str = (*func) (obj);
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000524
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000525 if (str == NULL) {
526 Py_INCREF(Py_None);
527 return Py_None;
528 }
529 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000530}
531
532/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000533static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000534call_forms_Rf (float (*func)(FL_OBJECT *), FL_OBJECT *obj)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000535{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000536 float retval;
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000537
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000538 retval = (*func) (obj);
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000539
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000540 return PyFloat_FromDouble (retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000541}
542
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000543static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000544call_forms_OUTfOUTf (void (*func)(FL_OBJECT *, float *, float *), FL_OBJECT *obj)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000545{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000546 float f1, f2;
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000547
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000548 (*func) (obj, &f1, &f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000549
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000550 return Py_BuildValue("(ff)", f1, f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000551}
552
Guido van Rossum03747111991-08-08 12:10:01 +0000553#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000554static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000555call_forms_OUTf (void (*func)(FL_OBJECT *, float *), FL_OBJECT *obj)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000556{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000557 float f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000558
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000559 (*func) (obj, &f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000560
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000561 return PyFloat_FromDouble (f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000562}
Guido van Rossum03747111991-08-08 12:10:01 +0000563#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000564
565/**********************************************************************/
566/* Class : browser */
567
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000568static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000569set_browser_topline(genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000570{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000571 return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000572}
573
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000574static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000575clear_browser(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000576{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000577 return generic_call (g, fl_clear_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000578}
579
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000580static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000581add_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000582{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000583 return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000584}
585
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000586static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000587addto_browser (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000588{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000589 return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000590}
591
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000592static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000593insert_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000594{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000595 return call_forms_INiINstr (fl_insert_browser_line,
596 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000597}
598
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000599static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000600delete_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000601{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000602 return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000603}
604
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000605static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000606replace_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000607{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000608 return call_forms_INiINstr (fl_replace_browser_line,
609 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000610}
611
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000612static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000613get_browser_line(genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000614{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000615 int i;
616 char *str;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000617
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000618 if (!PyArg_Parse(args, "i", &i))
619 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000620
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000621 str = fl_get_browser_line (g->ob_generic, i);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000622
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000623 if (str == NULL) {
624 Py_INCREF(Py_None);
625 return Py_None;
626 }
627 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000628}
629
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000630static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000631load_browser (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000632{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000633 /* XXX strictly speaking this is wrong since fl_load_browser
634 XXX returns int, not void */
635 return call_forms_INstr (fl_load_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000636}
637
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000638static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000639get_browser_maxline(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000640{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000641 return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000642}
643
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000644static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000645select_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000646{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000647 return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000648}
649
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000650static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000651deselect_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000652{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000653 return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000654}
655
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000656static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000657deselect_browser (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000658{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000659 return generic_call (g, fl_deselect_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000660}
661
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000662static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000663isselected_browser_line (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000664{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000665 int i, j;
666
667 if (!PyArg_Parse(args, "i", &i))
668 return NULL;
669
670 j = fl_isselected_browser_line (g->ob_generic, i);
671
672 return PyInt_FromLong (j);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000673}
674
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000675static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000676get_browser (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000677{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000678 return call_forms_Ri (fl_get_browser, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000679}
680
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000681static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000682set_browser_fontsize (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000683{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000684 return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000685}
686
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000687static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000688set_browser_fontstyle (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000689{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000690 return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000691}
692
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000693static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000694set_browser_specialkey (genericobject *g, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000695{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000696 return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000697}
698
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000699static PyMethodDef browser_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000700 {"set_browser_topline", (PyCFunction)set_browser_topline,
701 METH_OLDARGS},
702 {"clear_browser", (PyCFunction)clear_browser,
703 METH_NOARGS},
704 {"add_browser_line", (PyCFunction)add_browser_line,
705 METH_OLDARGS},
706 {"addto_browser", (PyCFunction)addto_browser,
707 METH_OLDARGS},
708 {"insert_browser_line", (PyCFunction)insert_browser_line,
709 METH_OLDARGS},
710 {"delete_browser_line", (PyCFunction)delete_browser_line,
711 METH_OLDARGS},
712 {"replace_browser_line", (PyCFunction)replace_browser_line,
713 METH_OLDARGS},
714 {"get_browser_line", (PyCFunction)get_browser_line,
715 METH_OLDARGS},
716 {"load_browser", (PyCFunction)load_browser,
717 METH_OLDARGS},
718 {"get_browser_maxline", (PyCFunction)get_browser_maxline,
719 METH_NOARGS,}
720 {"select_browser_line", (PyCFunction)select_browser_line,
721 METH_OLDARGS},
722 {"deselect_browser_line", (PyCFunction)deselect_browser_line,
723 METH_OLDARGS},
724 {"deselect_browser", (PyCFunction)deselect_browser,
725 METH_NOARGS,}
726 {"isselected_browser_line", (PyCFunction)isselected_browser_line,
727 METH_OLDARGS},
728 {"get_browser", (PyCFunction)get_browser,
729 METH_NOARGS,}
730 {"set_browser_fontsize", (PyCFunction)set_browser_fontsize,
731 METH_OLDARGS},
732 {"set_browser_fontstyle", (PyCFunction)set_browser_fontstyle,
733 METH_OLDARGS},
734 {"set_browser_specialkey", (PyCFunction)set_browser_specialkey,
735 METH_OLDARGS},
736 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000737};
738
739/* Class: button */
740
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000741static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000742set_button(genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000743{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000744 return call_forms_INi (fl_set_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000745}
746
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000747static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000748get_button(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000749{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000750 return call_forms_Ri (fl_get_button, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000751}
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000752
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000753static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000754get_button_numb(genericobject *g)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000755{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000756 return call_forms_Ri (fl_get_button_numb, g-> ob_generic);
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000757}
758
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000759static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000760set_button_shortcut(genericobject *g, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000761{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000762 return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000763}
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000764
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000765static PyMethodDef button_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000766 {"set_button", (PyCFunction)set_button, METH_OLDARGS},
767 {"get_button", (PyCFunction)get_button, METH_NOARGS},
768 {"get_button_numb", (PyCFunction)get_button_numb, METH_NOARGS},
769 {"set_button_shortcut", (PyCFunction)set_button_shortcut, METH_OLDARGS},
770 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000771};
772
773/* Class: choice */
774
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000775static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000776set_choice(genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000777{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000778 return call_forms_INi (fl_set_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000779}
780
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000781static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000782get_choice(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000783{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000784 return call_forms_Ri (fl_get_choice, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000785}
786
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000787static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000788clear_choice (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000789{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000790 return generic_call (g, fl_clear_choice);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000791}
792
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000793static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000794addto_choice (genericobject *g, PyObject *args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000795{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000796 return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000797}
798
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000799static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000800replace_choice (genericobject *g, PyObject *args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000801{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000802 return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000803}
804
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000805static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000806delete_choice (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000807{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000808 return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000809}
810
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000811static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000812get_choice_text (genericobject *g)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000813{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000814 return call_forms_Rstr (fl_get_choice_text, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000815}
816
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000817static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000818set_choice_fontsize (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000819{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000820 return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000821}
822
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000823static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000824set_choice_fontstyle (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000825{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000826 return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000827}
828
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000829static PyMethodDef choice_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000830 {"set_choice", (PyCFunction)set_choice, METH_OLDARGS},
831 {"get_choice", (PyCFunction)get_choice, METH_NOARGS},
832 {"clear_choice", (PyCFunction)clear_choice, METH_NOARGS},
833 {"addto_choice", (PyCFunction)addto_choice, METH_OLDARGS},
834 {"replace_choice", (PyCFunction)replace_choice, METH_OLDARGS},
835 {"delete_choice", (PyCFunction)delete_choice, METH_OLDARGS},
836 {"get_choice_text", (PyCFunction)get_choice_text, METH_NOARGS},
837 {"set_choice_fontsize", (PyCFunction)set_choice_fontsize, METH_OLDARGS},
838 {"set_choice_fontstyle",(PyCFunction)set_choice_fontstyle, METH_OLDARGS},
839 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000840};
841
842/* Class : Clock */
843
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000844static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000845get_clock(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000846{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000847 int i0, i1, i2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000848
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000849 fl_get_clock (g->ob_generic, &i0, &i1, &i2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000850
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000851 return Py_BuildValue("(iii)", i0, i1, i2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000852}
853
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000854static PyMethodDef clock_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000855 {"get_clock", (PyCFunction)get_clock, METH_NOARGS},
856 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000857};
858
859/* CLass : Counters */
860
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000861static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000862get_counter_value(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000863{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000864 return call_forms_Rf (fl_get_counter_value, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000865}
866
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000867static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000868set_counter_value (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000869{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000870 return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000871}
872
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000873static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000874set_counter_precision (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000875{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000876 return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000877}
878
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000879static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000880set_counter_bounds (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000881{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000882 return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000883}
884
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000885static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000886set_counter_step (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000887{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000888 return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000889}
890
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000891static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000892set_counter_return (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000893{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000894 return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000895}
896
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000897static PyMethodDef counter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000898 {"set_counter_value", (PyCFunction)set_counter_value,
899 METH_OLDARGS},
900 {"get_counter_value", (PyCFunction)get_counter_value,
901 METH_NOARGS},
902 {"set_counter_bounds", (PyCFunction)set_counter_bounds,
903 METH_OLDARGS},
904 {"set_counter_step", (PyCFunction)set_counter_step,
905 METH_OLDARGS},
906 {"set_counter_precision", (PyCFunction)set_counter_precision,
907 METH_OLDARGS},
908 {"set_counter_return", (PyCFunction)set_counter_return,
909 METH_OLDARGS},
910 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000911};
912
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000913
914/* Class: Dials */
915
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000916static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000917get_dial_value(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000918{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000919 return call_forms_Rf (fl_get_dial_value, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000920}
921
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000922static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000923set_dial_value (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000924{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000925 return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000926}
927
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000928static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000929set_dial_bounds (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000930{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000931 return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000932}
933
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000934static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000935get_dial_bounds (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000936{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000937 return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000938}
939
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000940static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000941set_dial_step (genericobject *g, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000942{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000943 return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000944}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000945
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000946static PyMethodDef dial_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000947 {"set_dial_value", (PyCFunction)set_dial_value, METH_OLDARGS},
948 {"get_dial_value", (PyCFunction)get_dial_value, METH_NOARGS},
949 {"set_dial_bounds", (PyCFunction)set_dial_bounds, METH_OLDARGS},
950 {"get_dial_bounds", (PyCFunction)get_dial_bounds, METH_NOARGS},
951 {"set_dial_step", (PyCFunction)set_dial_step, METH_OLDARGS},
952 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000953};
954
955/* Class : Input */
956
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000957static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000958set_input (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000959{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000960 return call_forms_INstr (fl_set_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000961}
962
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000963static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000964get_input (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000965{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000966 return call_forms_Rstr (fl_get_input, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000967}
968
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000969static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000970set_input_color (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000971{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000972 return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000973}
974
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000975static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000976set_input_return (genericobject *g, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000977{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000978 return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000979}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000980
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000981static PyMethodDef input_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000982 {"set_input", (PyCFunction)set_input, METH_OLDARGS},
983 {"get_input", (PyCFunction)get_input, METH_NOARGS},
984 {"set_input_color", (PyCFunction)set_input_color, METH_OLDARGS},
985 {"set_input_return", (PyCFunction)set_input_return, METH_OLDARGS},
986 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000987};
988
989
990/* Class : Menu */
991
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000992static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +0000993set_menu (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000994{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000995 return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000996}
997
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000998static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +0000999get_menu (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001000{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001001 /* XXX strictly speaking this is wrong since fl_get_menu
1002 XXX returns long, not int */
1003 return call_forms_Ri (fl_get_menu, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001004}
1005
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001006static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001007get_menu_text (genericobject *g)
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001008{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001009 return call_forms_Rstr (fl_get_menu_text, g-> ob_generic);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001010}
1011
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001012static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001013addto_menu (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001014{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001015 return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001016}
1017
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001018static PyMethodDef menu_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001019 {"set_menu", (PyCFunction)set_menu, METH_OLDARGS},
1020 {"get_menu", (PyCFunction)get_menu, METH_NOARGS},
1021 {"get_menu_text", (PyCFunction)get_menu_text, METH_NOARGS},
1022 {"addto_menu", (PyCFunction)addto_menu, METH_OLDARGS},
1023 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001024};
1025
1026
1027/* Class: Sliders */
1028
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001029static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001030get_slider_value(genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001031{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001032 return call_forms_Rf (fl_get_slider_value, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001033}
1034
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001035static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001036set_slider_value (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001037{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001038 return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001039}
1040
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001041static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001042set_slider_bounds (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001043{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001044 return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001045}
1046
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001047static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001048get_slider_bounds (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001049{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001051}
1052
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001053static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001054set_slider_return (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001055{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001056 return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001057}
1058
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001059static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001060set_slider_size (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001061{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001062 return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001063}
1064
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001065static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001066set_slider_precision (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001067{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001068 return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001069}
1070
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001071static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001072set_slider_step (genericobject *g, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001073{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001074 return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001075}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001076
1077
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001078static PyMethodDef slider_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001079 {"set_slider_value", (PyCFunction)set_slider_value, METH_OLDARGS},
1080 {"get_slider_value", (PyCFunction)get_slider_value, METH_NOARGS},
1081 {"set_slider_bounds", (PyCFunction)set_slider_bounds, METH_OLDARGS},
1082 {"get_slider_bounds", (PyCFunction)get_slider_bounds, METH_NOARGS},
1083 {"set_slider_return", (PyCFunction)set_slider_return, METH_OLDARGS},
1084 {"set_slider_size", (PyCFunction)set_slider_size, METH_OLDARGS},
1085 {"set_slider_precision",(PyCFunction)set_slider_precision, METH_OLDARGS},
1086 {"set_slider_step", (PyCFunction)set_slider_step, METH_OLDARGS},
1087 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001088};
1089
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001090static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001091set_positioner_xvalue (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001092{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001093 return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001094}
1095
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001096static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001097set_positioner_xbounds (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001098{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001099 return call_forms_INfINf (fl_set_positioner_xbounds,
1100 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001101}
1102
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001103static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001104set_positioner_yvalue (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001105{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001106 return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001107}
1108
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001109static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001110set_positioner_ybounds (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001111{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001112 return call_forms_INfINf (fl_set_positioner_ybounds,
1113 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001114}
1115
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001116static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001117get_positioner_xvalue (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001118{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001119 return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001120}
1121
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001122static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001123get_positioner_xbounds (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001124{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001125 return call_forms_OUTfOUTf (fl_get_positioner_xbounds, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001126}
1127
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001128static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001129get_positioner_yvalue (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001130{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001131 return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001132}
1133
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001134static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001135get_positioner_ybounds (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001136{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001137 return call_forms_OUTfOUTf (fl_get_positioner_ybounds, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001138}
1139
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001140static PyMethodDef positioner_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001141 {"set_positioner_xvalue", (PyCFunction)set_positioner_xvalue,
1142 METH_OLDARGS},
1143 {"set_positioner_yvalue", (PyCFunction)set_positioner_yvalue,
1144 METH_OLDARGS},
1145 {"set_positioner_xbounds", (PyCFunction)set_positioner_xbounds,
1146 METH_OLDARGS},
1147 {"set_positioner_ybounds", (PyCFunction)set_positioner_ybounds,
1148 METH_OLDARGS},
1149 {"get_positioner_xvalue", (PyCFunction)get_positioner_xvalue,
1150 METH_NOARGS},
1151 {"get_positioner_yvalue", (PyCFunction)get_positioner_yvalue,
1152 METH_NOARGS},
1153 {"get_positioner_xbounds", (PyCFunction)get_positioner_xbounds,
1154 METH_NOARGS},
1155 {"get_positioner_ybounds", (PyCFunction)get_positioner_ybounds,
1156 METH_NOARGS},
1157 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001158};
1159
1160/* Class timer */
1161
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001162static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001163set_timer (genericobject *g, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001164{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001165 return call_forms_INf (fl_set_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001166}
1167
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001168static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001169get_timer (genericobject *g)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001170{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001171 return call_forms_Rf (fl_get_timer, g-> ob_generic);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001172}
1173
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001174static PyMethodDef timer_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001175 {"set_timer", (PyCFunction)set_timer, METH_OLDARGS},
1176 {"get_timer", (PyCFunction)get_timer, METH_NOARGS},
1177 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001178};
1179
1180/* Form objects */
1181
1182typedef struct {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001183 PyObject_HEAD
1184 FL_FORM *ob_form;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001185} formobject;
1186
Jeremy Hylton938ace62002-07-17 16:30:39 +00001187static PyTypeObject Formtype;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001188
1189#define is_formobject(v) ((v)->ob_type == &Formtype)
1190
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001191static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001192form_show_form(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001193{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001194 int place, border;
1195 char *name;
1196 if (!PyArg_Parse(args, "(iis)", &place, &border, &name))
1197 return NULL;
1198 fl_show_form(f->ob_form, place, border, name);
1199 Py_INCREF(Py_None);
1200 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001201}
1202
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001203static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001204form_call(void (*func)(FL_FORM *), FL_FORM *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001205{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001206 (*func)(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001207
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001208 Py_INCREF(Py_None);
1209 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001210}
1211
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001212static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001213form_call_INiINi(void (*func)(FL_FORM *, int, int), FL_FORM *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001214{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001215 int a, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001216
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001217 if (!PyArg_Parse(args, "(ii)", &a, &b)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001218
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001219 (*func)(f, a, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001220
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001221 Py_INCREF(Py_None);
1222 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001223}
1224
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001225static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001226form_call_INfINf(void (*func)(FL_FORM *, float, float), FL_FORM *f, PyObject *args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001227{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001228 float a, b;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001229
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001230 if (!PyArg_Parse(args, "(ff)", &a, &b)) return NULL;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001231
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001232 (*func)(f, a, b);
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001233
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001234 Py_INCREF(Py_None);
1235 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001236}
1237
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001238static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001239form_hide_form(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001240{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001241 return form_call(fl_hide_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001242}
1243
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001244static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001245form_redraw_form(formobject *f)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001246{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001247 return form_call(fl_redraw_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001248}
1249
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001250static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001251form_set_form_position(formobject *f, PyObject *args)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001252{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001253 return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001254}
1255
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001256static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001257form_set_form_size(formobject *f, PyObject *args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001258{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001259 return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001260}
1261
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001262static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001263form_scale_form(formobject *f, PyObject *args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001264{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001265 return form_call_INfINf(fl_scale_form, f-> ob_form, args);
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001266}
1267
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001268static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001269generic_add_object(formobject *f, PyObject *args, FL_OBJECT *(*func)(int, float, float, float, float, char*), PyMethodDef *internal_methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001270{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001271 int type;
1272 float x, y, w, h;
1273 char *name;
1274 FL_OBJECT *obj;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001275
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001276 if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
1277 return NULL;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001278
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001279 fl_addto_form (f-> ob_form);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001280
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001281 obj = (*func) (type, x, y, w, h, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001282
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 fl_end_form();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001284
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001285 if (obj == NULL) {
1286 PyErr_NoMemory();
1287 return NULL;
1288 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001289
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001290 return newgenericobject (obj, internal_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001291}
1292
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001293static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001294form_add_button(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001295{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001296 return generic_add_object(f, args, fl_add_button, button_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001297}
1298
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001299static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001300form_add_lightbutton(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001301{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001302 return generic_add_object(f, args, fl_add_lightbutton, button_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001303}
1304
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001305static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001306form_add_roundbutton(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001307{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001308 return generic_add_object(f, args, fl_add_roundbutton, button_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001309}
1310
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001311static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001312form_add_menu (formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001313{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001314 return generic_add_object(f, args, fl_add_menu, menu_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001315}
1316
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001317static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001318form_add_slider(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001319{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001320 return generic_add_object(f, args, fl_add_slider, slider_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001321}
1322
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001323static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001324form_add_valslider(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001325{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001326 return generic_add_object(f, args, fl_add_valslider, slider_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001327}
1328
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001329static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001330form_add_dial(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001331{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001332 return generic_add_object(f, args, fl_add_dial, dial_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001333}
1334
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001335static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001336form_add_counter(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001337{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001338 return generic_add_object(f, args, fl_add_counter, counter_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001339}
1340
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001341static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001342form_add_clock(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001343{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001344 return generic_add_object(f, args, fl_add_clock, clock_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001345}
1346
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001347static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001348form_add_box(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001349{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001350 return generic_add_object(f, args, fl_add_box,
1351 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001352}
1353
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001354static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001355form_add_choice(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001356{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001357 return generic_add_object(f, args, fl_add_choice, choice_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001358}
1359
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001360static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001361form_add_browser(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001362{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001363 return generic_add_object(f, args, fl_add_browser, browser_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001364}
1365
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001366static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001367form_add_positioner(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001368{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001369 return generic_add_object(f, args, fl_add_positioner,
1370 positioner_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001371}
1372
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001373static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001374form_add_input(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001375{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001376 return generic_add_object(f, args, fl_add_input, input_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001377}
1378
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001379static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001380form_add_text(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001381{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001382 return generic_add_object(f, args, fl_add_text,
1383 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001384}
1385
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001386static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001387form_add_timer(formobject *f, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001388{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001389 return generic_add_object(f, args, fl_add_timer, timer_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001390}
1391
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001392static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001393form_freeze_form(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001394{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001395 return form_call(fl_freeze_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001396}
1397
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001398static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001399form_unfreeze_form(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001400{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001401 return form_call(fl_unfreeze_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001402}
1403
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001404static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001405form_activate_form(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001406{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001407 return form_call(fl_activate_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001408}
1409
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001410static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001411form_deactivate_form(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001412{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001413 return form_call(fl_deactivate_form, f-> ob_form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001414}
1415
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001416static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001417form_bgn_group(formobject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00001418{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001419 FL_OBJECT *obj;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001420
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001421 fl_addto_form(f-> ob_form);
1422 obj = fl_bgn_group();
1423 fl_end_form();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001424
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001425 if (obj == NULL) {
1426 PyErr_NoMemory();
1427 return NULL;
1428 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001429
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001430 return newgenericobject (obj, (PyMethodDef *) NULL);
Guido van Rossum03747111991-08-08 12:10:01 +00001431}
1432
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001433static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001434form_end_group(formobject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00001435{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001436 fl_addto_form(f-> ob_form);
1437 fl_end_group();
1438 fl_end_form();
1439 Py_INCREF(Py_None);
1440 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001441}
1442
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001443static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001444forms_find_first_or_last(FL_OBJECT *(*func)(FL_FORM *, int, float, float), formobject *f, PyObject *args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001445{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001446 int type;
1447 float mx, my;
1448 FL_OBJECT *generic;
1449 genericobject *g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001450
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001451 if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001452
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001453 generic = (*func) (f-> ob_form, type, mx, my);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001454
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001455 if (generic == NULL)
1456 {
1457 Py_INCREF(Py_None);
1458 return Py_None;
1459 }
1460
1461 g = findgeneric(generic);
1462 if (g == NULL) {
1463 PyErr_SetString(PyExc_RuntimeError,
1464 "forms_find_{first|last} returns unknown object");
1465 return NULL;
1466 }
1467 Py_INCREF(g);
1468 return (PyObject *) g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001469}
1470
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001471static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001472form_find_first(formobject *f, PyObject *args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001473{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001474 return forms_find_first_or_last(fl_find_first, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001475}
1476
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001477static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001478form_find_last(formobject *f, PyObject *args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001479{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001480 return forms_find_first_or_last(fl_find_last, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001481}
1482
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001483static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001484form_set_object_focus(formobject *f, PyObject *args)
Guido van Rossum7066dd71992-09-17 17:54:56 +00001485{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001486 genericobject *g;
1487 if (args == NULL || !is_genericobject(args)) {
1488 PyErr_BadArgument();
1489 return NULL;
1490 }
1491 g = (genericobject *)args;
1492 fl_set_object_focus(f->ob_form, g->ob_generic);
1493 Py_INCREF(Py_None);
1494 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001495}
1496
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001497static PyMethodDef form_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001498/* adm */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001499 {"show_form", (PyCFunction)form_show_form, METH_OLDARGS},
1500 {"hide_form", (PyCFunction)form_hide_form, METH_NOARGS},
1501 {"redraw_form", (PyCFunction)form_redraw_form, METH_NOARGS},
1502 {"set_form_position", (PyCFunction)form_set_form_position, METH_OLDARGS},
1503 {"set_form_size", (PyCFunction)form_set_form_size, METH_OLDARGS},
1504 {"scale_form", (PyCFunction)form_scale_form, METH_OLDARGS},
1505 {"freeze_form", (PyCFunction)form_freeze_form, METH_NOARGS},
1506 {"unfreeze_form", (PyCFunction)form_unfreeze_form, METH_NOARGS},
1507 {"activate_form", (PyCFunction)form_activate_form, METH_NOARGS},
1508 {"deactivate_form", (PyCFunction)form_deactivate_form, METH_NOARGS},
1509 {"bgn_group", (PyCFunction)form_bgn_group, METH_OLDARGS},
1510 {"end_group", (PyCFunction)form_end_group, METH_OLDARGS},
1511 {"find_first", (PyCFunction)form_find_first, METH_OLDARGS},
1512 {"find_last", (PyCFunction)form_find_last, METH_OLDARGS},
1513 {"set_object_focus", (PyCFunction)form_set_object_focus, METH_OLDARGS},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001514
1515/* basic objects */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001516 {"add_button", (PyCFunction)form_add_button, METH_OLDARGS},
1517/* {"add_bitmap", (method)form_add_bitmap, METH_OLDARGS}, */
1518 {"add_lightbutton", (PyCFunction)form_add_lightbutton, METH_OLDARGS},
1519 {"add_roundbutton", (PyCFunction)form_add_roundbutton, METH_OLDARGS},
1520 {"add_menu", (PyCFunction)form_add_menu, METH_OLDARGS},
1521 {"add_slider", (PyCFunction)form_add_slider, METH_OLDARGS},
1522 {"add_positioner", (PyCFunction)form_add_positioner, METH_OLDARGS},
1523 {"add_valslider", (PyCFunction)form_add_valslider, METH_OLDARGS},
1524 {"add_dial", (PyCFunction)form_add_dial, METH_OLDARGS},
1525 {"add_counter", (PyCFunction)form_add_counter, METH_OLDARGS},
1526 {"add_box", (PyCFunction)form_add_box, METH_OLDARGS},
1527 {"add_clock", (PyCFunction)form_add_clock, METH_OLDARGS},
1528 {"add_choice", (PyCFunction)form_add_choice, METH_OLDARGS},
1529 {"add_browser", (PyCFunction)form_add_browser, METH_OLDARGS},
1530 {"add_input", (PyCFunction)form_add_input, METH_OLDARGS},
1531 {"add_timer", (PyCFunction)form_add_timer, METH_OLDARGS},
1532 {"add_text", (PyCFunction)form_add_text, METH_OLDARGS},
1533 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001534};
1535
1536static void
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001537form_dealloc(formobject *f)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001538{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001539 releaseobjects(f->ob_form);
1540 if (f->ob_form->visible)
1541 fl_hide_form(f->ob_form);
1542 fl_free_form(f->ob_form);
1543 PyObject_Del(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001544}
1545
Guido van Rossumd97f0481991-11-19 20:26:28 +00001546#define OFF(x) offsetof(FL_FORM, x)
1547
Guido van Rossum32db5e31991-11-12 15:43:18 +00001548static struct memberlist form_memberlist[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001549 {"window", T_LONG, OFF(window), RO},
1550 {"w", T_FLOAT, OFF(w)},
1551 {"h", T_FLOAT, OFF(h)},
1552 {"x", T_FLOAT, OFF(x), RO},
1553 {"y", T_FLOAT, OFF(y), RO},
1554 {"deactivated", T_INT, OFF(deactivated)},
1555 {"visible", T_INT, OFF(visible), RO},
1556 {"frozen", T_INT, OFF(frozen), RO},
1557 {"doublebuf", T_INT, OFF(doublebuf)},
1558 {NULL} /* Sentinel */
Guido van Rossum32db5e31991-11-12 15:43:18 +00001559};
1560
Guido van Rossumd97f0481991-11-19 20:26:28 +00001561#undef OFF
1562
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001563static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001564form_getattr(formobject *f, char *name)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001565{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001566 PyObject *meth;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001567
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001568 meth = Py_FindMethod(form_methods, (PyObject *)f, name);
1569 if (meth != NULL)
1570 return meth;
1571 PyErr_Clear();
1572 return PyMember_Get((char *)f->ob_form, form_memberlist, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001573}
1574
1575static int
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001576form_setattr(formobject *f, char *name, PyObject *v)
Guido van Rossum32db5e31991-11-12 15:43:18 +00001577{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001578 if (v == NULL) {
1579 PyErr_SetString(PyExc_TypeError,
1580 "can't delete form attributes");
1581 return -1;
1582 }
Guido van Rossum32db5e31991-11-12 15:43:18 +00001583
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001584 return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001585}
1586
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001587static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001588form_repr(formobject *f)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001589{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001590 char buf[100];
1591 PyOS_snprintf(buf, sizeof(buf), "<FORMS_form at %p, window=%ld>",
1592 f, f->ob_form->window);
1593 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001594}
1595
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001596static PyTypeObject Formtype = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001597 PyObject_HEAD_INIT(&PyType_Type)
1598 0, /*ob_size*/
1599 "fl.FORMS_form", /*tp_name*/
1600 sizeof(formobject), /*tp_size*/
1601 0, /*tp_itemsize*/
1602 /* methods */
1603 (destructor)form_dealloc, /*tp_dealloc*/
1604 0, /*tp_print*/
1605 (getattrfunc)form_getattr, /*tp_getattr*/
1606 (setattrfunc)form_setattr, /*tp_setattr*/
1607 0, /*tp_compare*/
1608 (reprfunc)form_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001609};
1610
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001611static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001612newformobject(FL_FORM *form)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001613{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001614 formobject *f;
1615 f = PyObject_New(formobject, &Formtype);
1616 if (f == NULL)
1617 return NULL;
1618 f->ob_form = form;
1619 return (PyObject *)f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001620}
1621
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001622
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001623/* The "fl" module */
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001624
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001625static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001626forms_make_form(PyObject *dummy, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001627{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001628 int type;
1629 float w, h;
1630 FL_FORM *form;
1631 if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
1632 return NULL;
1633 form = fl_bgn_form(type, w, h);
1634 if (form == NULL) {
1635 /* XXX Actually, cannot happen! */
1636 PyErr_NoMemory();
1637 return NULL;
1638 }
1639 fl_end_form();
1640 return newformobject(form);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001641}
1642
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001643static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001644forms_activate_all_forms(PyObject *f, PyObject *args)
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001645{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001646 fl_activate_all_forms();
1647 Py_INCREF(Py_None);
1648 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001649}
1650
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001651static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001652forms_deactivate_all_forms(PyObject *f, PyObject *args)
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001653{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001654 fl_deactivate_all_forms();
1655 Py_INCREF(Py_None);
1656 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001657}
1658
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001659static PyObject *my_event_callback = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001660
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001661static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001662forms_set_event_call_back(PyObject *dummy, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001663{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001664 if (args == Py_None)
1665 args = NULL;
1666 my_event_callback = args;
1667 Py_XINCREF(args);
1668 Py_INCREF(Py_None);
1669 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001670}
1671
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001672static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001673forms_do_or_check_forms(PyObject *dummy, FL_OBJECT *(*func)(void))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001674{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001675 FL_OBJECT *generic;
1676 genericobject *g;
1677 PyObject *arg, *res;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001678
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001679 for (;;) {
1680 Py_BEGIN_ALLOW_THREADS
1681 generic = (*func)();
1682 Py_END_ALLOW_THREADS
1683 if (generic == NULL) {
1684 Py_INCREF(Py_None);
1685 return Py_None;
1686 }
1687 if (generic == FL_EVENT) {
1688 int dev;
1689 short val;
1690 if (my_event_callback == NULL)
1691 return PyInt_FromLong(-1L);
1692 dev = fl_qread(&val);
1693 arg = Py_BuildValue("(ih)", dev, val);
1694 if (arg == NULL)
1695 return NULL;
1696 res = PyEval_CallObject(my_event_callback, arg);
1697 Py_XDECREF(res);
1698 Py_DECREF(arg);
1699 if (res == NULL)
1700 return NULL; /* Callback raised exception */
1701 continue;
1702 }
1703 g = findgeneric(generic);
1704 if (g == NULL) {
1705 /* Object not known to us (some dialogs cause this) */
1706 continue; /* Ignore it */
1707 }
1708 if (g->ob_callback == NULL) {
1709 Py_INCREF(g);
1710 return ((PyObject *) g);
1711 }
1712 arg = PyTuple_Pack(2, (PyObject *)g, g->ob_callback_arg);
1713 if (arg == NULL)
1714 return NULL;
1715 res = PyEval_CallObject(g->ob_callback, arg);
1716 Py_XDECREF(res);
1717 Py_DECREF(arg);
1718 if (res == NULL)
1719 return NULL; /* Callback raised exception */
1720 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001721}
1722
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001723static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001724forms_do_forms(PyObject *dummy)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001725{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001726 return forms_do_or_check_forms(dummy, fl_do_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001727}
1728
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001729static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001730forms_check_forms(PyObject *dummy)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001731{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001732 return forms_do_or_check_forms(dummy, fl_check_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001733}
1734
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001735static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001736forms_do_only_forms(PyObject *dummy)
Guido van Rossum7066dd71992-09-17 17:54:56 +00001737{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001738 return forms_do_or_check_forms(dummy, fl_do_only_forms);
Guido van Rossum7066dd71992-09-17 17:54:56 +00001739}
1740
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001741static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001742forms_check_only_forms(PyObject *dummy)
Guido van Rossum7066dd71992-09-17 17:54:56 +00001743{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001744 return forms_do_or_check_forms(dummy, fl_check_only_forms);
Guido van Rossum7066dd71992-09-17 17:54:56 +00001745}
1746
Guido van Rossum03747111991-08-08 12:10:01 +00001747#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001748static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001749fl_call(void (*func)(void))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001750{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001751 (*func)();
1752 Py_INCREF(Py_None);
1753 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001754}
Guido van Rossum03747111991-08-08 12:10:01 +00001755#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001756
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001757static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001758forms_set_graphics_mode(PyObject *dummy, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001759{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001760 int rgbmode, doublebuf;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001761
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001762 if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
1763 return NULL;
1764 fl_set_graphics_mode(rgbmode,doublebuf);
1765 Py_INCREF(Py_None);
1766 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001767}
1768
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001769static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001770forms_get_rgbmode(PyObject *dummy, PyObject *args)
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001771{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001772 extern int fl_rgbmode;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001773
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001774 if (args != NULL) {
1775 PyErr_BadArgument();
1776 return NULL;
1777 }
1778 return PyInt_FromLong((long)fl_rgbmode);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001779}
Guido van Rossum7066dd71992-09-17 17:54:56 +00001780
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001781static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001782forms_show_errors(PyObject *dummy, PyObject *args)
Guido van Rossum7066dd71992-09-17 17:54:56 +00001783{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001784 int show;
1785 if (!PyArg_Parse(args, "i", &show))
1786 return NULL;
1787 fl_show_errors(show);
1788 Py_INCREF(Py_None);
1789 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001790}
1791
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001792static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001793forms_set_font_name(PyObject *dummy, PyObject *args)
Guido van Rossum7066dd71992-09-17 17:54:56 +00001794{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001795 int numb;
1796 char *name;
1797 if (!PyArg_Parse(args, "(is)", &numb, &name))
1798 return NULL;
1799 fl_set_font_name(numb, name);
1800 Py_INCREF(Py_None);
1801 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001802}
1803
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001804
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001805static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001806forms_qdevice(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001807{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001808 short arg1;
1809 if (!PyArg_Parse(args, "h", &arg1))
1810 return NULL;
1811 fl_qdevice(arg1);
1812 Py_INCREF(Py_None);
1813 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001814}
1815
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001816static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001817forms_unqdevice(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001818{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001819 short arg1;
1820 if (!PyArg_Parse(args, "h", &arg1))
1821 return NULL;
1822 fl_unqdevice(arg1);
1823 Py_INCREF(Py_None);
1824 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001825}
1826
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001827static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001828forms_isqueued(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001829{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001830 long retval;
1831 short arg1;
1832 if (!PyArg_Parse(args, "h", &arg1))
1833 return NULL;
1834 retval = fl_isqueued(arg1);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001835
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001836 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001837}
1838
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001839static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001840forms_qtest(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001841{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001842 long retval;
1843 retval = fl_qtest();
1844 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001845}
1846
1847
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001848static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001849forms_qread(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001850{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001851 int dev;
1852 short val;
1853 Py_BEGIN_ALLOW_THREADS
1854 dev = fl_qread(&val);
1855 Py_END_ALLOW_THREADS
1856 return Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001857}
1858
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001859static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001860forms_qreset(PyObject *self)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001861{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001862 fl_qreset();
1863 Py_INCREF(Py_None);
1864 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001865}
1866
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001867static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001868forms_qenter(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001869{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001870 short arg1, arg2;
1871 if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
1872 return NULL;
1873 fl_qenter(arg1, arg2);
1874 Py_INCREF(Py_None);
1875 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001876}
1877
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001878static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001879forms_color(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001880{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001881 int arg;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001882
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001883 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001884
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001885 fl_color((short) arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001886
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001887 Py_INCREF(Py_None);
1888 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001889}
1890
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001891static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001892forms_mapcolor(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001893{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001894 int arg0, arg1, arg2, arg3;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001895
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001896 if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
1897 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001898
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001899 fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001900
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001901 Py_INCREF(Py_None);
1902 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001903}
1904
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001905static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001906forms_getmcolor(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001907{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001908 int arg;
1909 short r, g, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001910
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001911 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001912
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001913 fl_getmcolor(arg, &r, &g, &b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001914
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001915 return Py_BuildValue("(hhh)", r, g, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001916}
1917
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001918static PyObject *
Neal Norwitz28faa1b2002-03-31 15:56:56 +00001919forms_get_mouse(PyObject *self)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001920{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001921 float x, y;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001922
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001923 fl_get_mouse(&x, &y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001924
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001925 return Py_BuildValue("(ff)", x, y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001926}
1927
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001928static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001929forms_tie(PyObject *self, PyObject *args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001930{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001931 short arg1, arg2, arg3;
1932 if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
1933 return NULL;
1934 fl_tie(arg1, arg2, arg3);
1935 Py_INCREF(Py_None);
1936 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001937}
1938
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001939static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001940forms_show_message(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00001941{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001942 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00001943
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001944 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00001945
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001946 Py_BEGIN_ALLOW_THREADS
1947 fl_show_message(a, b, c);
1948 Py_END_ALLOW_THREADS
Guido van Rossum03747111991-08-08 12:10:01 +00001949
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001950 Py_INCREF(Py_None);
1951 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001952}
1953
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001954static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001955forms_show_choice(PyObject *f, PyObject *args)
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00001956{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001957 char *m1, *m2, *m3, *b1, *b2, *b3;
1958 int nb;
1959 char *format;
1960 long rv;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00001961
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001962 if (args == NULL || !PyTuple_Check(args)) {
1963 PyErr_BadArgument();
1964 return NULL;
1965 }
1966 nb = PyTuple_Size(args) - 3;
1967 if (nb <= 0) {
1968 PyErr_SetString(PyExc_TypeError,
1969 "need at least one button label");
1970 return NULL;
1971 }
1972 if (PyInt_Check(PyTuple_GetItem(args, 3))) {
1973 PyErr_SetString(PyExc_TypeError,
1974 "'number-of-buttons' argument not needed");
1975 return NULL;
1976 }
1977 switch (nb) {
1978 case 1: format = "(ssss)"; break;
1979 case 2: format = "(sssss)"; break;
1980 case 3: format = "(ssssss)"; break;
1981 default:
1982 PyErr_SetString(PyExc_TypeError, "too many button labels");
1983 return NULL;
1984 }
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00001985
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001986 if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
1987 return NULL;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00001988
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001989 Py_BEGIN_ALLOW_THREADS
1990 rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
1991 Py_END_ALLOW_THREADS
1992 return PyInt_FromLong(rv);
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00001993}
1994
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001995static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00001996forms_show_question(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00001997{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001998 int ret;
1999 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002000
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002001 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002002
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002003 Py_BEGIN_ALLOW_THREADS
2004 ret = fl_show_question(a, b, c);
2005 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002006
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002007 return PyInt_FromLong((long) ret);
Guido van Rossum03747111991-08-08 12:10:01 +00002008}
2009
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002010static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00002011forms_show_input(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00002012{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002013 char *str;
2014 char *a, *b;
Guido van Rossum03747111991-08-08 12:10:01 +00002015
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002016 if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002017
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002018 Py_BEGIN_ALLOW_THREADS
2019 str = fl_show_input(a, b);
2020 Py_END_ALLOW_THREADS
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002021
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002022 if (str == NULL) {
2023 Py_INCREF(Py_None);
2024 return Py_None;
2025 }
2026 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002027}
2028
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002029static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00002030forms_file_selector(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00002031{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002032 char *str;
2033 char *a, *b, *c, *d;
Guido van Rossum03747111991-08-08 12:10:01 +00002034
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002035 if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002036
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002037 Py_BEGIN_ALLOW_THREADS
2038 str = fl_show_file_selector(a, b, c, d);
2039 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002040
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002041 if (str == NULL) {
2042 Py_INCREF(Py_None);
2043 return Py_None;
2044 }
2045 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002046}
2047
2048
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002049static PyObject *
Thomas Woutersbd4bc4e2000-07-22 23:57:55 +00002050forms_file_selector_func(PyObject *args, char *(*func)(void))
Guido van Rossum03747111991-08-08 12:10:01 +00002051{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002052 char *str;
Guido van Rossum03747111991-08-08 12:10:01 +00002053
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002054 str = (*func) ();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002055
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002056 if (str == NULL) {
2057 Py_INCREF(Py_None);
2058 return Py_None;
2059 }
2060 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002061}
2062
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002063static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00002064forms_get_directory(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00002065{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002066 return forms_file_selector_func(args, fl_get_directory);
Guido van Rossum03747111991-08-08 12:10:01 +00002067}
2068
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002069static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00002070forms_get_pattern(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00002071{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002072 return forms_file_selector_func(args, fl_get_pattern);
Guido van Rossum03747111991-08-08 12:10:01 +00002073}
2074
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002075static PyObject *
Peter Schneider-Kamp6a850272000-07-10 17:04:33 +00002076forms_get_filename(PyObject *f, PyObject *args)
Guido van Rossum03747111991-08-08 12:10:01 +00002077{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002078 return forms_file_selector_func(args, fl_get_filename);
Guido van Rossum03747111991-08-08 12:10:01 +00002079}
2080
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002081static PyMethodDef forms_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002082/* adm */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002083 {"make_form", forms_make_form, METH_OLDARGS},
2084 {"activate_all_forms", forms_activate_all_forms, METH_OLDARGS},
2085 {"deactivate_all_forms",forms_deactivate_all_forms, METH_OLDARGS},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002086/* gl support wrappers */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002087 {"qdevice", forms_qdevice, METH_OLDARGS},
2088 {"unqdevice", forms_unqdevice, METH_OLDARGS},
2089 {"isqueued", forms_isqueued, METH_OLDARGS},
2090 {"qtest", forms_qtest, METH_OLDARGS},
2091 {"qread", forms_qread, METH_OLDARGS},
2092/* {"blkqread", forms_blkqread, METH_OLDARGS}, */
2093 {"qreset", forms_qreset, METH_NOARGS},
2094 {"qenter", forms_qenter, METH_OLDARGS},
2095 {"get_mouse", forms_get_mouse, METH_NOARGS},
2096 {"tie", forms_tie, METH_OLDARGS},
2097/* {"new_events", forms_new_events, METH_OLDARGS}, */
2098 {"color", forms_color, METH_OLDARGS},
2099 {"mapcolor", forms_mapcolor, METH_OLDARGS},
2100 {"getmcolor", forms_getmcolor, METH_OLDARGS},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002101/* interaction */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002102 {"do_forms", forms_do_forms, METH_NOARGS},
2103 {"do_only_forms", forms_do_only_forms, METH_NOARGS},
2104 {"check_forms", forms_check_forms, METH_NOARGS},
2105 {"check_only_forms", forms_check_only_forms, METH_NOARGS},
2106 {"set_event_call_back", forms_set_event_call_back, METH_OLDARGS},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002107/* goodies */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002108 {"show_message", forms_show_message, METH_OLDARGS},
2109 {"show_question", forms_show_question, METH_OLDARGS},
2110 {"show_choice", forms_show_choice, METH_OLDARGS},
2111 {"show_input", forms_show_input, METH_OLDARGS},
2112 {"show_file_selector", forms_file_selector, METH_OLDARGS},
2113 {"file_selector", forms_file_selector, METH_OLDARGS}, /* BW compat */
2114 {"get_directory", forms_get_directory, METH_OLDARGS},
2115 {"get_pattern", forms_get_pattern, METH_OLDARGS},
2116 {"get_filename", forms_get_filename, METH_OLDARGS},
2117 {"set_graphics_mode", forms_set_graphics_mode, METH_OLDARGS},
2118 {"get_rgbmode", forms_get_rgbmode, METH_OLDARGS},
2119 {"show_errors", forms_show_errors, METH_OLDARGS},
2120 {"set_font_name", forms_set_font_name, METH_OLDARGS},
2121 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002122};
2123
Mark Hammondfe51c6d2002-08-02 02:27:13 +00002124PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00002125initfl(void)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002126{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002127
Brett Cannon178582e2008-05-15 03:20:36 +00002128 if (PyErr_WarnPy3k("the fl module has been removed in "
2129 "Python 3.0", 2) < 0)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002130 return;
2131
2132 Py_InitModule("fl", forms_methods);
2133 if (m == NULL)
Brett Cannon178582e2008-05-15 03:20:36 +00002134 return;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002135 foreground();
2136 fl_init();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002137}
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002138
2139
2140