blob: 6f22f6e2ade3e2048937a3f16a263af3f8362ce7 [file] [log] [blame]
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001/**********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumc7df79e1991-08-07 11:32:58 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumc7df79e1991-08-07 11:32:58 +00009******************************************************************/
10
11/* FL module -- interface to Mark Overmars' FORMS Library. */
12
Roger E. Masse7ba4c071997-01-03 22:17:11 +000013/* This code works with FORMS version 2.2 (if you defined
14 OBSOLETE_FORMS_CALLS), and 2.3.
Guido van Rossumf1dc5661993-07-05 10:31:29 +000015 FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
16 /pub/SGI/FORMS. */
Guido van Rossumddc0d3e1991-12-10 13:56:42 +000017
Jack Jansen743db361992-08-13 14:13:11 +000018/* A half-hearted attempt has been made to allow programs using this
19 * module to exploit parallelism (through the threads module). No provisions
20 * have been made for multiple threads to use this module at the same time,
21 * though. So, a program with a forms thread and a non-forms thread will work
22 * fine but a program with two threads using forms will probably crash (unless
23 * the program takes precaution to ensure that only one thread can be in
24 * this module at any time). This will have to be fixed some time.
25 * (A fix will probably also have to synchronise with the gl module).
26 */
27
Roger E. Masse7ba4c071997-01-03 22:17:11 +000028#include "Python.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000029#include "forms.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000030#include "structmember.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000031
32/* Generic Forms Objects */
33
34typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000035 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +000036 FL_OBJECT *ob_generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +000037 PyMethodDef *ob_methods;
38 PyObject *ob_callback;
39 PyObject *ob_callback_arg;
Guido van Rossumc7df79e1991-08-07 11:32:58 +000040} genericobject;
41
Roger E. Masse7ba4c071997-01-03 22:17:11 +000042staticforward PyTypeObject GenericObjecttype;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000043
44#define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
45
46/* List of all objects (XXX this should be a hash table on address...) */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000047
Roger E. Masse7ba4c071997-01-03 22:17:11 +000048static PyObject *allgenerics = NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000049static int nfreeslots = 0;
50
51/* Add an object to the list of known objects */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000052
53static void
54knowgeneric(g)
55 genericobject *g;
56{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000057 int i, n;
58 /* Create the list if it doesn't already exist */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000059 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000060 allgenerics = PyList_New(0);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000061 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000062 PyErr_Clear();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000063 return; /* Too bad, live without allgenerics... */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000064 }
65 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000066 if (nfreeslots > 0) {
67 /* Search the list for reusable slots (NULL items) */
68 /* XXX This can be made faster! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000069 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000070 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000071 if (PyList_GetItem(allgenerics, i) == NULL) {
72 Py_INCREF(g);
73 PyList_SetItem(allgenerics, i, (PyObject *)g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000074 nfreeslots--;
75 return;
76 }
77 }
78 /* Strange... no free slots found... */
79 nfreeslots = 0;
80 }
81 /* No free entries, append new item to the end */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000082 PyList_Append(allgenerics, (PyObject *)g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000083}
84
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000085/* Find an object in the list of known objects */
86
Guido van Rossumc7df79e1991-08-07 11:32:58 +000087static genericobject *
88findgeneric(generic)
89 FL_OBJECT *generic;
90{
91 int i, n;
92 genericobject *g;
93
94 if (allgenerics == NULL)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000095 return NULL; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000096 n = PyList_Size(allgenerics);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000097 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000098 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000099 if (g != NULL && g->ob_generic == generic)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000100 return g;
101 }
102 return NULL; /* Unknown object */
103}
104
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000105/* Remove an object from the list of known objects */
106
107static void
108forgetgeneric(g)
109 genericobject *g;
110{
111 int i, n;
112
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000113 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000114 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000115 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000116 g->ob_callback_arg = NULL;
117 if (allgenerics == NULL)
118 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000119 n = PyList_Size(allgenerics);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000120 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000121 if (g == (genericobject *)PyList_GetItem(allgenerics, i)) {
122 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000123 nfreeslots++;
124 break;
125 }
126 }
127}
128
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000129/* Called when a form is about to be freed --
130 remove all the objects that we know about from it. */
131
132static void
133releaseobjects(form)
134 FL_FORM *form;
135{
136 int i, n;
137 genericobject *g;
138
139 if (allgenerics == NULL)
140 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000141 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000142 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000143 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000144 if (g != NULL && g->ob_generic->form == form) {
145 fl_delete_object(g->ob_generic);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000146 /* The object is now unreachable for
147 do_forms and check_forms, so
148 delete it from the list of known objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000149 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000150 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000151 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000152 g->ob_callback_arg = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000153 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000154 nfreeslots++;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000155 }
156 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000157}
158
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000159
160/* Methods of generic objects */
161
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000162static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000163generic_set_call_back(g, args)
164 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000165 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000166{
167 if (args == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000168 Py_XDECREF(g->ob_callback);
169 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000170 g->ob_callback = NULL;
171 g->ob_callback_arg = NULL;
172 }
173 else {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000174 if (!PyTuple_Check(args) || PyTuple_Size(args) != 2) {
175 PyErr_BadArgument();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000176 return NULL;
177 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000178 Py_XDECREF(g->ob_callback);
179 Py_XDECREF(g->ob_callback_arg);
180 g->ob_callback = PyTuple_GetItem(args, 0);
181 Py_INCREF(g->ob_callback);
182 g->ob_callback_arg = PyTuple_GetItem(args, 1);
183 Py_INCREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000184 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000185 Py_INCREF(Py_None);
186 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000187}
188
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000189static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000190generic_call(g, args, func)
191 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000192 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000193 void (*func)(FL_OBJECT *);
194{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000195 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000196 return NULL;
197 (*func)(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000198 Py_INCREF(Py_None);
199 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000200}
201
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000202static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000203generic_delete_object(g, args)
204 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000205 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000206{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000207 PyObject *res;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000208 res = generic_call(g, args, fl_delete_object);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000209 if (res != NULL)
210 forgetgeneric(g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000211 return res;
212}
213
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000214static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000215generic_show_object(g, args)
216 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000217 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000218{
219 return generic_call(g, args, fl_show_object);
220}
221
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000222static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000223generic_hide_object(g, args)
224 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000225 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000226{
227 return generic_call(g, args, fl_hide_object);
228}
229
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000230static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000231generic_redraw_object(g, args)
232 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000233 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000234{
235 return generic_call(g, args, fl_redraw_object);
236}
237
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000238#ifdef OBSOLETE_FORMS_CALLS
239
240 /* (un)freeze_object() are obsolete in FORMS 2.2 and unsupported
241 in 2.3. Since there's no foolproof way to tell which version we're
242 using, we omit them unconditionally. */
243
244static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000245generic_freeze_object(g, args)
246 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000247 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000248{
249 return generic_call(g, args, fl_freeze_object);
250}
251
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000252static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000253generic_unfreeze_object(g, args)
254 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000255 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000256{
257 return generic_call(g, args, fl_unfreeze_object);
258}
259
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000260#endif /* OBSOLETE_FORMS_CALLS */
261
262static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000263generic_activate_object(g, args)
264 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000265 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000266{
267 return generic_call(g, args, fl_activate_object);
268}
269
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000270static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000271generic_deactivate_object(g, args)
272 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000273 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000274{
275 return generic_call(g, args, fl_deactivate_object);
276}
277
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000278static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000279generic_set_object_shortcut(g, args)
280 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000281 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000282{
283 char *str;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000284 if (!PyArg_Parse(args, "s", &str))
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000285 return NULL;
286 fl_set_object_shortcut(g->ob_generic, str);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000287 Py_INCREF(Py_None);
288 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000289}
290
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000291static PyMethodDef generic_methods[] = {
292 {"set_call_back", (PyCFunction)generic_set_call_back},
293 {"delete_object", (PyCFunction)generic_delete_object},
294 {"show_object", (PyCFunction)generic_show_object},
295 {"hide_object", (PyCFunction)generic_hide_object},
296 {"redraw_object", (PyCFunction)generic_redraw_object},
297#ifdef OBSOLETE_FORMS_CALLS
298 {"freeze_object", (PyCFunction)generic_freeze_object},
299 {"unfreeze_object", (PyCFunction)generic_unfreeze_object},
300#endif
301 {"activate_object", (PyCFunction)generic_activate_object},
302 {"deactivate_object", (PyCFunction)generic_deactivate_object},
303 {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut},
Guido van Rossum03747111991-08-08 12:10:01 +0000304 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000305};
306
307static void
308generic_dealloc(g)
309 genericobject *g;
310{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000311 fl_free_object(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000312 Py_XDECREF(g->ob_callback);
313 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000314 PyObject_Del(g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000315}
316
317#define OFF(x) offsetof(FL_OBJECT, x)
318
319static struct memberlist generic_memberlist[] = {
320 {"objclass", T_INT, OFF(objclass), RO},
321 {"type", T_INT, OFF(type), RO},
322 {"boxtype", T_INT, OFF(boxtype)},
323 {"x", T_FLOAT, OFF(x)},
324 {"y", T_FLOAT, OFF(y)},
325 {"w", T_FLOAT, OFF(w)},
326 {"h", T_FLOAT, OFF(h)},
327 {"col1", T_INT, OFF(col1)},
328 {"col2", T_INT, OFF(col2)},
329 {"align", T_INT, OFF(align)},
330 {"lcol", T_INT, OFF(lcol)},
331 {"lsize", T_FLOAT, OFF(lsize)},
332 /* "label" is treated specially! */
333 {"lstyle", T_INT, OFF(lstyle)},
334 {"pushed", T_INT, OFF(pushed), RO},
335 {"focus", T_INT, OFF(focus), RO},
336 {"belowmouse", T_INT, OFF(belowmouse),RO},
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000337/* {"frozen", T_INT, OFF(frozen), RO}, */
Guido van Rossum7066dd71992-09-17 17:54:56 +0000338 {"active", T_INT, OFF(active)},
339 {"input", T_INT, OFF(input)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000340 {"visible", T_INT, OFF(visible), RO},
Guido van Rossum7066dd71992-09-17 17:54:56 +0000341 {"radio", T_INT, OFF(radio)},
342 {"automatic", T_INT, OFF(automatic)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000343 {NULL} /* Sentinel */
344};
345
Guido van Rossumd97f0481991-11-19 20:26:28 +0000346#undef OFF
347
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000348static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000349generic_getattr(g, name)
350 genericobject *g;
351 char *name;
352{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000353 PyObject *meth;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000354
355 /* XXX Ought to special-case name "__methods__" */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000356 if (g-> ob_methods) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000357 meth = Py_FindMethod(g->ob_methods, (PyObject *)g, name);
Guido van Rossum03747111991-08-08 12:10:01 +0000358 if (meth != NULL) return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000359 PyErr_Clear();
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000360 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000361
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000362 meth = Py_FindMethod(generic_methods, (PyObject *)g, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000363 if (meth != NULL)
364 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000365 PyErr_Clear();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000366
367 /* "label" is an exception, getmember only works for char pointers,
368 not for char arrays */
369 if (strcmp(name, "label") == 0)
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000370 return PyString_FromString(g->ob_generic->label);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000371
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000372 return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000373}
374
375static int
376generic_setattr(g, name, v)
377 genericobject *g;
378 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000379 PyObject *v;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000380{
381 int ret;
382
383 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000384 PyErr_SetString(PyExc_TypeError,
385 "can't delete forms object attributes");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000386 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000387 }
388
389 /* "label" is an exception: setmember doesn't set strings;
390 and FORMS wants you to call a function to set the label */
391 if (strcmp(name, "label") == 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000392 if (!PyString_Check(v)) {
393 PyErr_SetString(PyExc_TypeError,
394 "label attr must be string");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000395 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000396 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000397 fl_set_object_label(g->ob_generic, PyString_AsString(v));
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000398 return 0;
399 }
400
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000401 ret = PyMember_Set((char *)g->ob_generic, generic_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000402
403 /* Rather than calling all the various set_object_* functions,
404 we call fl_redraw_object here. This is sometimes redundant
405 but I doubt that's a big problem */
406 if (ret == 0)
407 fl_redraw_object(g->ob_generic);
408
409 return ret;
410}
411
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000412static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000413generic_repr(g)
414 genericobject *g;
415{
416 char buf[100];
Fred Drakea44d3532000-06-30 15:01:00 +0000417 sprintf(buf, "<FORMS_object at %p, objclass=%d>",
418 g, g->ob_generic->objclass);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000419 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000420}
421
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000422static PyTypeObject GenericObjecttype = {
423 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000424 0, /*ob_size*/
425 "FORMS_object", /*tp_name*/
426 sizeof(genericobject), /*tp_size*/
427 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000428 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000429 (destructor)generic_dealloc, /*tp_dealloc*/
430 0, /*tp_print*/
431 (getattrfunc)generic_getattr, /*tp_getattr*/
432 (setattrfunc)generic_setattr, /*tp_setattr*/
433 0, /*tp_compare*/
434 (reprfunc)generic_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000435};
436
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000437static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000438newgenericobject(generic, methods)
439 FL_OBJECT *generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000440 PyMethodDef *methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000441{
442 genericobject *g;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000443 g = PyObject_New(genericobject, &GenericObjecttype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000444 if (g == NULL)
445 return NULL;
446 g-> ob_generic = generic;
447 g->ob_methods = methods;
448 g->ob_callback = NULL;
449 g->ob_callback_arg = NULL;
450 knowgeneric(g);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000451 return (PyObject *)g;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000452}
453
454/**********************************************************************/
455/* Some common calling sequences */
456
457/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000458static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000459call_forms_INf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000460 void (*func)(FL_OBJECT *, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000461 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000462 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000463{
Guido van Rossum03747111991-08-08 12:10:01 +0000464 float parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000465
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000466 if (!PyArg_Parse(args, "f", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000467
Guido van Rossum03747111991-08-08 12:10:01 +0000468 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000469
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000470 Py_INCREF(Py_None);
471 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000472}
473
474/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000475static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000476call_forms_INfINf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000477 void (*func)(FL_OBJECT *, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000478 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000479 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000480{
Guido van Rossum03747111991-08-08 12:10:01 +0000481 float par1, par2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000482
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000483 if (!PyArg_Parse(args, "(ff)", &par1, &par2)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000484
Guido van Rossum03747111991-08-08 12:10:01 +0000485 (*func) (obj, par1, par2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000486
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000487 Py_INCREF(Py_None);
488 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000489}
490
491/* void func (object, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000492static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000493call_forms_INi (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000494 void (*func)(FL_OBJECT *, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000495 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000496 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000497{
Guido van Rossum03747111991-08-08 12:10:01 +0000498 int parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000499
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000500 if (!PyArg_Parse(args, "i", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000501
Guido van Rossum03747111991-08-08 12:10:01 +0000502 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000503
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000504 Py_INCREF(Py_None);
505 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000506}
507
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000508/* void func (object, char) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000509static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000510call_forms_INc (func, obj, args)
511 void (*func)(FL_OBJECT *, int);
512 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000513 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000514{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000515 char *a;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000516
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000517 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000518
Guido van Rossumfc58e581992-01-27 16:45:55 +0000519 (*func) (obj, a[0]);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000520
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000521 Py_INCREF(Py_None);
522 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000523}
524
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000525/* void func (object, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000526static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000527call_forms_INstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000528 void (*func)(FL_OBJECT *, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000529 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000530 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000531{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000532 char *a;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000533
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000534 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000535
Guido van Rossumfc58e581992-01-27 16:45:55 +0000536 (*func) (obj, a);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000537
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000538 Py_INCREF(Py_None);
539 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000540}
541
542
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000543/* void func (object, int, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000544static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000545call_forms_INiINstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000546 void (*func)(FL_OBJECT *, int, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000547 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000548 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000549{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000550 char *b;
551 int a;
Guido van Rossum03747111991-08-08 12:10:01 +0000552
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000553 if (!PyArg_Parse(args, "(is)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000554
Guido van Rossumfc58e581992-01-27 16:45:55 +0000555 (*func) (obj, a, b);
Guido van Rossum03747111991-08-08 12:10:01 +0000556
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000557 Py_INCREF(Py_None);
558 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000559}
560
Guido van Rossum03747111991-08-08 12:10:01 +0000561#ifdef UNUSED
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000562/* void func (object, int, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000563static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000564call_forms_INiINi (func, obj, args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000565 void (*func)(FL_OBJECT *, int, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000566 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000567 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000568{
Guido van Rossum03747111991-08-08 12:10:01 +0000569 int par1, par2;
570
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000571 if (!PyArg_Parse(args, "(ii)", &par1, &par2)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000572
573 (*func) (obj, par1, par2);
574
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000575 Py_INCREF(Py_None);
576 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000577}
Guido van Rossum03747111991-08-08 12:10:01 +0000578#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000579
580/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000581static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000582call_forms_Ri (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000583 int (*func)(FL_OBJECT *);
584 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000585 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000586{
Guido van Rossum03747111991-08-08 12:10:01 +0000587 int retval;
588
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000589 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000590
591 retval = (*func) (obj);
592
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000593 return PyInt_FromLong ((long) retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000594}
595
596/* char * func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000597static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000598call_forms_Rstr (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000599 char * (*func)(FL_OBJECT *);
600 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000601 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000602{
Guido van Rossum03747111991-08-08 12:10:01 +0000603 char *str;
604
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000605 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000606
607 str = (*func) (obj);
608
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000609 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000610 Py_INCREF(Py_None);
611 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000612 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000613 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000614}
615
616/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000617static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000618call_forms_Rf (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000619 float (*func)(FL_OBJECT *);
620 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000621 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000622{
Guido van Rossum03747111991-08-08 12:10:01 +0000623 float retval;
624
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000625 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000626
627 retval = (*func) (obj);
628
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000629 return PyFloat_FromDouble (retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000630}
631
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000632static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000633call_forms_OUTfOUTf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000634 void (*func)(FL_OBJECT *, float *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000635 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000636 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000637{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000638 float f1, f2;
Guido van Rossum03747111991-08-08 12:10:01 +0000639
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000640 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000641
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000642 (*func) (obj, &f1, &f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000643
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000644 return Py_BuildValue("(ff)", f1, f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000645}
646
Guido van Rossum03747111991-08-08 12:10:01 +0000647#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000648static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000649call_forms_OUTf (func, obj, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000650 void (*func)(FL_OBJECT *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000651 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000652 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000653{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000654 float f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000655
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000656 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000657
658 (*func) (obj, &f);
659
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000660 return PyFloat_FromDouble (f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000661}
Guido van Rossum03747111991-08-08 12:10:01 +0000662#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000663
664/**********************************************************************/
665/* Class : browser */
666
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000667static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000668set_browser_topline(g, args)
669 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000670 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000671{
Guido van Rossum03747111991-08-08 12:10:01 +0000672 return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000673}
674
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000675static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000676clear_browser(g, args)
677 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000678 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000679{
Guido van Rossum03747111991-08-08 12:10:01 +0000680 return generic_call (g, args, fl_clear_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000681}
682
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000683static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000684add_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000685 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000686 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000687{
Guido van Rossum03747111991-08-08 12:10:01 +0000688 return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000689}
690
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000691static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000692addto_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000693 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000694 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000695{
Guido van Rossum03747111991-08-08 12:10:01 +0000696 return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000697}
698
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000699static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000700insert_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000701 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000702 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000703{
Guido van Rossum03747111991-08-08 12:10:01 +0000704 return call_forms_INiINstr (fl_insert_browser_line,
705 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000706}
707
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000708static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000709delete_browser_line (g, args)
710 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000711 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000712{
Guido van Rossum03747111991-08-08 12:10:01 +0000713 return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000714}
715
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000716static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000717replace_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000718 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000719 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000720{
Guido van Rossum03747111991-08-08 12:10:01 +0000721 return call_forms_INiINstr (fl_replace_browser_line,
722 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000723}
724
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000725static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000726get_browser_line(g, args)
727 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000728 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000729{
730 int i;
731 char *str;
732
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000733 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000734 return NULL;
735
736 str = fl_get_browser_line (g->ob_generic, i);
737
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000738 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000739 Py_INCREF(Py_None);
740 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000741 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000742 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000743}
744
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000745static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000746load_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000747 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000748 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000749{
Guido van Rossumabe58351991-08-08 12:34:44 +0000750 /* XXX strictly speaking this is wrong since fl_load_browser
751 XXX returns int, not void */
Guido van Rossum03747111991-08-08 12:10:01 +0000752 return call_forms_INstr (fl_load_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000753}
754
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000755static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000756get_browser_maxline(g, args)
757 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000758 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000759{
Guido van Rossum03747111991-08-08 12:10:01 +0000760 return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000761}
762
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000763static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000764select_browser_line (g, args)
765 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000766 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000767{
Guido van Rossum03747111991-08-08 12:10:01 +0000768 return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000769}
770
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000771static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000772deselect_browser_line (g, args)
773 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000774 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000775{
Guido van Rossum03747111991-08-08 12:10:01 +0000776 return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000777}
778
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000779static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000780deselect_browser (g, args)
781 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000782 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000783{
Guido van Rossum03747111991-08-08 12:10:01 +0000784 return generic_call (g, args, fl_deselect_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000785}
786
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000787static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000788isselected_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000789 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000790 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000791{
792 int i, j;
Guido van Rossum03747111991-08-08 12:10:01 +0000793
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000794 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000795 return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000796
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000797 j = fl_isselected_browser_line (g->ob_generic, i);
Guido van Rossum03747111991-08-08 12:10:01 +0000798
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000799 return PyInt_FromLong (j);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000800}
801
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000802static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000803get_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000804 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000805 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000806{
Guido van Rossum03747111991-08-08 12:10:01 +0000807 return call_forms_Ri (fl_get_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000808}
809
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000810static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000811set_browser_fontsize (g, args)
812 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000813 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000814{
Guido van Rossum03747111991-08-08 12:10:01 +0000815 return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000816}
817
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000818static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000819set_browser_fontstyle (g, args)
820 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000821 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000822{
Guido van Rossum03747111991-08-08 12:10:01 +0000823 return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000824}
825
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000826static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000827set_browser_specialkey (g, args)
828 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000829 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000830{
831 return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
832}
833
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000834static PyMethodDef browser_methods[] = {
835 {"set_browser_topline", (PyCFunction)set_browser_topline},
836 {"clear_browser", (PyCFunction)clear_browser},
837 {"add_browser_line", (PyCFunction)add_browser_line},
838 {"addto_browser", (PyCFunction)addto_browser},
839 {"insert_browser_line", (PyCFunction)insert_browser_line},
840 {"delete_browser_line", (PyCFunction)delete_browser_line},
841 {"replace_browser_line", (PyCFunction)replace_browser_line},
842 {"get_browser_line", (PyCFunction)get_browser_line},
843 {"load_browser", (PyCFunction)load_browser},
844 {"get_browser_maxline", (PyCFunction)get_browser_maxline},
845 {"select_browser_line", (PyCFunction)select_browser_line},
846 {"deselect_browser_line", (PyCFunction)deselect_browser_line},
847 {"deselect_browser", (PyCFunction)deselect_browser},
848 {"isselected_browser_line", (PyCFunction)isselected_browser_line},
849 {"get_browser", (PyCFunction)get_browser},
850 {"set_browser_fontsize", (PyCFunction)set_browser_fontsize},
851 {"set_browser_fontstyle", (PyCFunction)set_browser_fontstyle},
852 {"set_browser_specialkey", (PyCFunction)set_browser_specialkey},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000853 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000854};
855
856/* Class: button */
857
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000858static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000859set_button(g, args)
860 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000861 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000862{
Guido van Rossum03747111991-08-08 12:10:01 +0000863 return call_forms_INi (fl_set_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000864}
865
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000866static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000867get_button(g, args)
868 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000869 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000870{
Guido van Rossum03747111991-08-08 12:10:01 +0000871 return call_forms_Ri (fl_get_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000872}
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000873
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000874static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000875get_button_numb(g, args)
876 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000877 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000878{
879 return call_forms_Ri (fl_get_button_numb, g-> ob_generic, args);
880}
881
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000882static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000883set_button_shortcut(g, args)
884 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000885 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000886{
887 return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
888}
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000889
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000890static PyMethodDef button_methods[] = {
891 {"set_button", (PyCFunction)set_button},
892 {"get_button", (PyCFunction)get_button},
893 {"get_button_numb", (PyCFunction)get_button_numb},
894 {"set_button_shortcut", (PyCFunction)set_button_shortcut},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000895 {NULL, NULL} /* sentinel */
896};
897
898/* Class: choice */
899
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000900static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000901set_choice(g, args)
902 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000903 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000904{
Guido van Rossum03747111991-08-08 12:10:01 +0000905 return call_forms_INi (fl_set_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000906}
907
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000908static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000909get_choice(g, args)
910 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000911 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000912{
Guido van Rossum03747111991-08-08 12:10:01 +0000913 return call_forms_Ri (fl_get_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000914}
915
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000916static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000917clear_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000918 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000919 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000920{
Guido van Rossum03747111991-08-08 12:10:01 +0000921 return generic_call (g, args, fl_clear_choice);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000922}
923
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000924static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000925addto_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000926 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000927 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000928{
Guido van Rossum03747111991-08-08 12:10:01 +0000929 return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000930}
931
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000932static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000933replace_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000934 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000935 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000936{
Guido van Rossum03747111991-08-08 12:10:01 +0000937 return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000938}
939
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000940static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000941delete_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000942 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000943 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000944{
Guido van Rossum03747111991-08-08 12:10:01 +0000945 return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000946}
947
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000948static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000949get_choice_text (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000950 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000951 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000952{
Guido van Rossum03747111991-08-08 12:10:01 +0000953 return call_forms_Rstr (fl_get_choice_text, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000954}
955
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000956static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000957set_choice_fontsize (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000958 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000959 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000960{
Guido van Rossum03747111991-08-08 12:10:01 +0000961 return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000962}
963
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000964static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000965set_choice_fontstyle (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000966 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000967 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000968{
Guido van Rossum03747111991-08-08 12:10:01 +0000969 return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000970}
971
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000972static PyMethodDef choice_methods[] = {
973 {"set_choice", (PyCFunction)set_choice},
974 {"get_choice", (PyCFunction)get_choice},
975 {"clear_choice", (PyCFunction)clear_choice},
976 {"addto_choice", (PyCFunction)addto_choice},
977 {"replace_choice", (PyCFunction)replace_choice},
978 {"delete_choice", (PyCFunction)delete_choice},
979 {"get_choice_text", (PyCFunction)get_choice_text},
980 {"set_choice_fontsize", (PyCFunction)set_choice_fontsize},
981 {"set_choice_fontstyle",(PyCFunction)set_choice_fontstyle},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000982 {NULL, NULL} /* sentinel */
983};
984
985/* Class : Clock */
986
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000987static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000988get_clock(g, args)
989 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000990 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000991{
992 int i0, i1, i2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000993
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000994 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000995 return NULL;
996
997 fl_get_clock (g->ob_generic, &i0, &i1, &i2);
998
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000999 return Py_BuildValue("(iii)", i0, i1, i2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001000}
1001
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001002static PyMethodDef clock_methods[] = {
1003 {"get_clock", (PyCFunction)get_clock},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001004 {NULL, NULL} /* sentinel */
1005};
1006
1007/* CLass : Counters */
1008
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001009static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001010get_counter_value(g, args)
1011 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001012 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001013{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001014 return call_forms_Rf (fl_get_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001015}
1016
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001017static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001018set_counter_value (g, args)
1019 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001020 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001021{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001022 return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001023}
1024
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001025static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001026set_counter_precision (g, args)
1027 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001028 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001029{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001030 return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001031}
1032
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001033static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001034set_counter_bounds (g, args)
1035 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001036 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001037{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001038 return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001039}
1040
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001041static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001042set_counter_step (g, args)
1043 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001044 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001045{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001046 return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001047}
1048
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001049static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001050set_counter_return (g, args)
1051 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001052 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001053{
Guido van Rossum03747111991-08-08 12:10:01 +00001054 return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001055}
1056
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001057static PyMethodDef counter_methods[] = {
1058 {"set_counter_value", (PyCFunction)set_counter_value},
1059 {"get_counter_value", (PyCFunction)get_counter_value},
1060 {"set_counter_bounds", (PyCFunction)set_counter_bounds},
1061 {"set_counter_step", (PyCFunction)set_counter_step},
1062 {"set_counter_precision", (PyCFunction)set_counter_precision},
1063 {"set_counter_return", (PyCFunction)set_counter_return},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001064 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001065};
1066
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001067
1068/* Class: Dials */
1069
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001070static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001071get_dial_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001072 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001073 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001074{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001075 return call_forms_Rf (fl_get_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001076}
1077
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001078static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001079set_dial_value (g, args)
1080 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001081 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001082{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001083 return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001084}
1085
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001086static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001087set_dial_bounds (g, args)
1088 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001089 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001090{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001091 return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001092}
1093
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001094static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001095get_dial_bounds (g, args)
1096 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001097 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001098{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001099 return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001100}
1101
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001102static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001103set_dial_step (g, args)
1104 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001105 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001106{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001107 return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001108}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001109
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001110static PyMethodDef dial_methods[] = {
1111 {"set_dial_value", (PyCFunction)set_dial_value},
1112 {"get_dial_value", (PyCFunction)get_dial_value},
1113 {"set_dial_bounds", (PyCFunction)set_dial_bounds},
1114 {"get_dial_bounds", (PyCFunction)get_dial_bounds},
1115 {"set_dial_step", (PyCFunction)set_dial_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001116 {NULL, NULL} /* sentinel */
1117};
1118
1119/* Class : Input */
1120
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001121static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001122set_input (g, args)
1123 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001124 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001125{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001126 return call_forms_INstr (fl_set_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001127}
1128
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001129static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001130get_input (g, args)
1131 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001132 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001133{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001134 return call_forms_Rstr (fl_get_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001135}
1136
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001137static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001138set_input_color (g, args)
1139 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001140 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001141{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001142 return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001143}
1144
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001145static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001146set_input_return (g, args)
1147 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001148 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001149{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001150 return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001151}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001152
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001153static PyMethodDef input_methods[] = {
1154 {"set_input", (PyCFunction)set_input},
1155 {"get_input", (PyCFunction)get_input},
1156 {"set_input_color", (PyCFunction)set_input_color},
1157 {"set_input_return", (PyCFunction)set_input_return},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001158 {NULL, NULL} /* sentinel */
1159};
1160
1161
1162/* Class : Menu */
1163
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001164static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001165set_menu (g, args)
1166 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001167 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001168{
Guido van Rossumabe58351991-08-08 12:34:44 +00001169 return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001170}
1171
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001172static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001173get_menu (g, args)
1174 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001175 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001176{
Guido van Rossumabe58351991-08-08 12:34:44 +00001177 /* XXX strictly speaking this is wrong since fl_get_menu
1178 XXX returns long, not int */
1179 return call_forms_Ri (fl_get_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001180}
1181
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001182static PyObject *
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001183get_menu_text (g, args)
1184 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001185 PyObject *args;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001186{
1187 return call_forms_Rstr (fl_get_menu_text, g-> ob_generic, args);
1188}
1189
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001190static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001191addto_menu (g, args)
1192 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001193 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001194{
Guido van Rossumabe58351991-08-08 12:34:44 +00001195 return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001196}
1197
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001198static PyMethodDef menu_methods[] = {
1199 {"set_menu", (PyCFunction)set_menu},
1200 {"get_menu", (PyCFunction)get_menu},
1201 {"get_menu_text", (PyCFunction)get_menu_text},
1202 {"addto_menu", (PyCFunction)addto_menu},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001203 {NULL, NULL} /* sentinel */
1204};
1205
1206
1207/* Class: Sliders */
1208
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001209static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001210get_slider_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001211 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001212 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001213{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001214 return call_forms_Rf (fl_get_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001215}
1216
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001217static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001218set_slider_value (g, args)
1219 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001220 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001221{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001222 return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001223}
1224
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001225static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001226set_slider_bounds (g, args)
1227 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001228 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001229{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001230 return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001231}
1232
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001233static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001234get_slider_bounds (g, args)
1235 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001236 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001237{
1238 return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic, args);
1239}
1240
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001241static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001242set_slider_return (g, args)
1243 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001244 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001245{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001246 return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001247}
1248
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001249static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001250set_slider_size (g, args)
1251 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001252 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001253{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001254 return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001255}
1256
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001257static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001258set_slider_precision (g, args)
1259 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001260 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001261{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001262 return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001263}
1264
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001265static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001266set_slider_step (g, args)
1267 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001268 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001269{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001270 return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001271}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001272
1273
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001274static PyMethodDef slider_methods[] = {
1275 {"set_slider_value", (PyCFunction)set_slider_value},
1276 {"get_slider_value", (PyCFunction)get_slider_value},
1277 {"set_slider_bounds", (PyCFunction)set_slider_bounds},
1278 {"get_slider_bounds", (PyCFunction)get_slider_bounds},
1279 {"set_slider_return", (PyCFunction)set_slider_return},
1280 {"set_slider_size", (PyCFunction)set_slider_size},
1281 {"set_slider_precision",(PyCFunction)set_slider_precision},
1282 {"set_slider_step", (PyCFunction)set_slider_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001283 {NULL, NULL} /* sentinel */
1284};
1285
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001286static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001287set_positioner_xvalue (g, args)
1288 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001289 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001290{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001291 return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001292}
1293
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001294static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001295set_positioner_xbounds (g, args)
1296 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001297 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001298{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001299 return call_forms_INfINf (fl_set_positioner_xbounds,
1300 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001301}
1302
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001303static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001304set_positioner_yvalue (g, args)
1305 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001306 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001307{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001308 return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001309}
1310
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001311static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001312set_positioner_ybounds (g, args)
1313 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001314 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001315{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001316 return call_forms_INfINf (fl_set_positioner_ybounds,
1317 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001318}
1319
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001320static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001321get_positioner_xvalue (g, args)
1322 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001323 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001324{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001325 return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001326}
1327
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001328static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001329get_positioner_xbounds (g, args)
1330 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001331 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001332{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001333 return call_forms_OUTfOUTf (fl_get_positioner_xbounds,
1334 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001335}
1336
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001337static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001338get_positioner_yvalue (g, args)
1339 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001340 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001341{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001342 return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001343}
1344
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001345static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001346get_positioner_ybounds (g, args)
1347 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001348 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001349{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001350 return call_forms_OUTfOUTf (fl_get_positioner_ybounds,
1351 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001352}
1353
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001354static PyMethodDef positioner_methods[] = {
1355 {"set_positioner_xvalue", (PyCFunction)set_positioner_xvalue},
1356 {"set_positioner_yvalue", (PyCFunction)set_positioner_yvalue},
1357 {"set_positioner_xbounds", (PyCFunction)set_positioner_xbounds},
1358 {"set_positioner_ybounds", (PyCFunction)set_positioner_ybounds},
1359 {"get_positioner_xvalue", (PyCFunction)get_positioner_xvalue},
1360 {"get_positioner_yvalue", (PyCFunction)get_positioner_yvalue},
1361 {"get_positioner_xbounds", (PyCFunction)get_positioner_xbounds},
1362 {"get_positioner_ybounds", (PyCFunction)get_positioner_ybounds},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001363 {NULL, NULL} /* sentinel */
1364};
1365
1366/* Class timer */
1367
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001368static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001369set_timer (g, args)
1370 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001371 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001372{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001373 return call_forms_INf (fl_set_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001374}
1375
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001376static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001377get_timer (g, args)
1378 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001379 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001380{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001381 return call_forms_Rf (fl_get_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001382}
1383
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001384static PyMethodDef timer_methods[] = {
1385 {"set_timer", (PyCFunction)set_timer},
1386 {"get_timer", (PyCFunction)get_timer},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001387 {NULL, NULL} /* sentinel */
1388};
1389
1390/* Form objects */
1391
1392typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001393 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001394 FL_FORM *ob_form;
1395} formobject;
1396
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001397staticforward PyTypeObject Formtype;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001398
1399#define is_formobject(v) ((v)->ob_type == &Formtype)
1400
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001401static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001402form_show_form(f, args)
1403 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001404 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001405{
1406 int place, border;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001407 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001408 if (!PyArg_Parse(args, "(iis)", &place, &border, &name))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001409 return NULL;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001410 fl_show_form(f->ob_form, place, border, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001411 Py_INCREF(Py_None);
1412 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001413}
1414
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001415static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001416form_call(func, f, args)
1417 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001418 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001419 void (*func)(FL_FORM *);
1420{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001421 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001422
1423 (*func)(f);
1424
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001425 Py_INCREF(Py_None);
1426 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001427}
1428
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001429static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001430form_call_INiINi(func, f, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001431 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001432 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001433 void (*func)(FL_FORM *, int, int);
1434{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001435 int a, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001436
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001437 if (!PyArg_Parse(args, "(ii)", &a, &b)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001438
1439 (*func)(f, a, b);
1440
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001441 Py_INCREF(Py_None);
1442 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001443}
1444
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001445static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001446form_call_INfINf(func, f, args)
1447 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001448 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001449 void (*func)(FL_FORM *, float, float);
1450{
1451 float a, b;
1452
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001453 if (!PyArg_Parse(args, "(ff)", &a, &b)) return NULL;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001454
1455 (*func)(f, a, b);
1456
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001457 Py_INCREF(Py_None);
1458 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001459}
1460
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001461static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001462form_hide_form(f, args)
1463 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001464 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001465{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001466 return form_call(fl_hide_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001467}
1468
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001469static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001470form_redraw_form(f, args)
1471 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001472 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001473{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001474 return form_call(fl_redraw_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001475}
1476
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001477static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001478form_set_form_position(f, args)
1479 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001480 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001481{
1482 return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
1483}
1484
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001485static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001486form_set_form_size(f, args)
1487 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001488 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001489{
1490 return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
1491}
1492
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001493static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001494form_scale_form(f, args)
1495 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001496 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001497{
1498 return form_call_INfINf(fl_scale_form, f-> ob_form, args);
1499}
1500
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001501static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001502generic_add_object(f, args, func, internal_methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001503 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001504 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001505 FL_OBJECT *(*func)(int, float, float, float, float, char*);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001506 PyMethodDef *internal_methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001507{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001508 int type;
1509 float x, y, w, h;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001510 char *name;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001511 FL_OBJECT *obj;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001512
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001513 if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001514 return NULL;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001515
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001516 fl_addto_form (f-> ob_form);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001517
Guido van Rossumfc58e581992-01-27 16:45:55 +00001518 obj = (*func) (type, x, y, w, h, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001519
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001520 fl_end_form();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001521
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001522 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001523 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001524 return NULL;
1525 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001526
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001527 return newgenericobject (obj, internal_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001528}
1529
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001530static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001531form_add_button(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001532 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001533 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001534{
1535 return generic_add_object(f, args, fl_add_button, button_methods);
1536}
1537
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001538static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001539form_add_lightbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001540 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001541 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001542{
1543 return generic_add_object(f, args, fl_add_lightbutton, button_methods);
1544}
1545
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001546static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001547form_add_roundbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001548 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001549 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001550{
1551 return generic_add_object(f, args, fl_add_roundbutton, button_methods);
1552}
1553
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001554static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001555form_add_menu (f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001556 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001557 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001558{
1559 return generic_add_object(f, args, fl_add_menu, menu_methods);
1560}
1561
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001562static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001563form_add_slider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001564 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001565 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001566{
1567 return generic_add_object(f, args, fl_add_slider, slider_methods);
1568}
1569
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001570static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001571form_add_valslider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001572 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001573 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001574{
1575 return generic_add_object(f, args, fl_add_valslider, slider_methods);
1576}
1577
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001578static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001579form_add_dial(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001580 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001581 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001582{
1583 return generic_add_object(f, args, fl_add_dial, dial_methods);
1584}
1585
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001586static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001587form_add_counter(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001588 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001589 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001590{
1591 return generic_add_object(f, args, fl_add_counter, counter_methods);
1592}
1593
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001594static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001595form_add_clock(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001596 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001597 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001598{
1599 return generic_add_object(f, args, fl_add_clock, clock_methods);
1600}
1601
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001602static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001603form_add_box(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001604 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001605 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001606{
Guido van Rossum03747111991-08-08 12:10:01 +00001607 return generic_add_object(f, args, fl_add_box,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001608 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001609}
1610
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001611static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001612form_add_choice(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001613 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001614 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001615{
1616 return generic_add_object(f, args, fl_add_choice, choice_methods);
1617}
1618
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001619static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001620form_add_browser(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001621 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001622 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001623{
1624 return generic_add_object(f, args, fl_add_browser, browser_methods);
1625}
1626
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001627static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001628form_add_positioner(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001629 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001630 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001631{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001632 return generic_add_object(f, args, fl_add_positioner,
1633 positioner_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001634}
1635
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001636static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001637form_add_input(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001638 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001639 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001640{
1641 return generic_add_object(f, args, fl_add_input, input_methods);
1642}
1643
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001644static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001645form_add_text(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001646 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001647 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001648{
Guido van Rossum03747111991-08-08 12:10:01 +00001649 return generic_add_object(f, args, fl_add_text,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001650 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001651}
1652
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001653static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001654form_add_timer(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001655 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001656 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001657{
1658 return generic_add_object(f, args, fl_add_timer, timer_methods);
1659}
1660
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001661static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001662form_freeze_form(f, args)
1663 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001664 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001665{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001666 return form_call(fl_freeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001667}
1668
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001669static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001670form_unfreeze_form(f, args)
1671 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001672 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001673{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001674 return form_call(fl_unfreeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001675}
1676
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001677static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001678form_activate_form(f, args)
1679 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001680 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001681{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001682 return form_call(fl_activate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001683}
1684
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001685static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001686form_deactivate_form(f, args)
1687 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001688 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001689{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001690 return form_call(fl_deactivate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001691}
1692
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001693static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001694form_bgn_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001695 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001696 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001697{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001698 FL_OBJECT *obj;
1699
1700 fl_addto_form(f-> ob_form);
1701 obj = fl_bgn_group();
1702 fl_end_form();
1703
1704 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001705 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001706 return NULL;
1707 }
1708
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001709 return newgenericobject (obj, (PyMethodDef *) NULL);
Guido van Rossum03747111991-08-08 12:10:01 +00001710}
1711
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001712static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001713form_end_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001714 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001715 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001716{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001717 fl_addto_form(f-> ob_form);
Guido van Rossum03747111991-08-08 12:10:01 +00001718 fl_end_group();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001719 fl_end_form();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001720 Py_INCREF(Py_None);
1721 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001722}
1723
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001724static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001725forms_find_first_or_last(func, f, args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001726 FL_OBJECT *(*func)(FL_FORM *, int, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +00001727 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001728 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001729{
1730 int type;
1731 float mx, my;
1732 FL_OBJECT *generic;
1733 genericobject *g;
1734
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001735 if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001736
Guido van Rossum03747111991-08-08 12:10:01 +00001737 generic = (*func) (f-> ob_form, type, mx, my);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001738
1739 if (generic == NULL)
1740 {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001741 Py_INCREF(Py_None);
1742 return Py_None;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001743 }
1744
1745 g = findgeneric(generic);
1746 if (g == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001747 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001748 "forms_find_{first|last} returns unknown object");
Guido van Rossum75cc8981991-08-08 12:07:45 +00001749 return NULL;
1750 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001751 Py_INCREF(g);
1752 return (PyObject *) g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001753}
1754
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001755static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001756form_find_first(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001757 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001758 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001759{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001760 return forms_find_first_or_last(fl_find_first, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001761}
1762
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001763static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001764form_find_last(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001765 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001766 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001767{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001768 return forms_find_first_or_last(fl_find_last, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001769}
1770
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001771static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00001772form_set_object_focus(f, args)
1773 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001774 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001775{
1776 genericobject *g;
1777 if (args == NULL || !is_genericobject(args)) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001778 PyErr_BadArgument();
Guido van Rossum7066dd71992-09-17 17:54:56 +00001779 return NULL;
1780 }
1781 g = (genericobject *)args;
1782 fl_set_object_focus(f->ob_form, g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001783 Py_INCREF(Py_None);
1784 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001785}
1786
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001787static PyMethodDef form_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001788/* adm */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001789 {"show_form", (PyCFunction)form_show_form},
1790 {"hide_form", (PyCFunction)form_hide_form},
1791 {"redraw_form", (PyCFunction)form_redraw_form},
1792 {"set_form_position", (PyCFunction)form_set_form_position},
1793 {"set_form_size", (PyCFunction)form_set_form_size},
1794 {"scale_form", (PyCFunction)form_scale_form},
1795 {"freeze_form", (PyCFunction)form_freeze_form},
1796 {"unfreeze_form", (PyCFunction)form_unfreeze_form},
1797 {"activate_form", (PyCFunction)form_activate_form},
1798 {"deactivate_form", (PyCFunction)form_deactivate_form},
1799 {"bgn_group", (PyCFunction)form_bgn_group},
1800 {"end_group", (PyCFunction)form_end_group},
1801 {"find_first", (PyCFunction)form_find_first},
1802 {"find_last", (PyCFunction)form_find_last},
1803 {"set_object_focus", (PyCFunction)form_set_object_focus},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001804
1805/* basic objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001806 {"add_button", (PyCFunction)form_add_button},
Guido van Rossumb6775db1994-08-01 11:34:53 +00001807/* {"add_bitmap", (method)form_add_bitmap}, */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001808 {"add_lightbutton", (PyCFunction)form_add_lightbutton},
1809 {"add_roundbutton", (PyCFunction)form_add_roundbutton},
1810 {"add_menu", (PyCFunction)form_add_menu},
1811 {"add_slider", (PyCFunction)form_add_slider},
1812 {"add_positioner", (PyCFunction)form_add_positioner},
1813 {"add_valslider", (PyCFunction)form_add_valslider},
1814 {"add_dial", (PyCFunction)form_add_dial},
1815 {"add_counter", (PyCFunction)form_add_counter},
1816 {"add_box", (PyCFunction)form_add_box},
1817 {"add_clock", (PyCFunction)form_add_clock},
1818 {"add_choice", (PyCFunction)form_add_choice},
1819 {"add_browser", (PyCFunction)form_add_browser},
1820 {"add_input", (PyCFunction)form_add_input},
1821 {"add_timer", (PyCFunction)form_add_timer},
1822 {"add_text", (PyCFunction)form_add_text},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001823 {NULL, NULL} /* sentinel */
1824};
1825
1826static void
1827form_dealloc(f)
1828 formobject *f;
1829{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001830 releaseobjects(f->ob_form);
Guido van Rossum336b5911992-04-08 11:16:25 +00001831 if (f->ob_form->visible)
1832 fl_hide_form(f->ob_form);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001833 fl_free_form(f->ob_form);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001834 PyObject_Del(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001835}
1836
Guido van Rossumd97f0481991-11-19 20:26:28 +00001837#define OFF(x) offsetof(FL_FORM, x)
1838
Guido van Rossum32db5e31991-11-12 15:43:18 +00001839static struct memberlist form_memberlist[] = {
1840 {"window", T_LONG, OFF(window), RO},
1841 {"w", T_FLOAT, OFF(w)},
1842 {"h", T_FLOAT, OFF(h)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001843 {"x", T_FLOAT, OFF(x), RO},
1844 {"y", T_FLOAT, OFF(y), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001845 {"deactivated", T_INT, OFF(deactivated)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001846 {"visible", T_INT, OFF(visible), RO},
1847 {"frozen", T_INT, OFF(frozen), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001848 {"doublebuf", T_INT, OFF(doublebuf)},
1849 {NULL} /* Sentinel */
1850};
1851
Guido van Rossumd97f0481991-11-19 20:26:28 +00001852#undef OFF
1853
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001854static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001855form_getattr(f, name)
1856 formobject *f;
1857 char *name;
1858{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001859 PyObject *meth;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001860
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001861 meth = Py_FindMethod(form_methods, (PyObject *)f, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001862 if (meth != NULL)
1863 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001864 PyErr_Clear();
1865 return PyMember_Get((char *)f->ob_form, form_memberlist, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001866}
1867
1868static int
1869form_setattr(f, name, v)
1870 formobject *f;
1871 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001872 PyObject *v;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001873{
Guido van Rossum32db5e31991-11-12 15:43:18 +00001874 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001875 PyErr_SetString(PyExc_TypeError,
1876 "can't delete form attributes");
Guido van Rossum3863abb1996-09-11 23:31:07 +00001877 return -1;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001878 }
1879
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001880 return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001881}
1882
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001883static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001884form_repr(f)
1885 formobject *f;
1886{
1887 char buf[100];
Fred Drakea44d3532000-06-30 15:01:00 +00001888 sprintf(buf, "<FORMS_form at %p, window=%ld>",
1889 f, f->ob_form->window);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001890 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001891}
1892
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001893static PyTypeObject Formtype = {
1894 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001895 0, /*ob_size*/
1896 "FORMS_form", /*tp_name*/
1897 sizeof(formobject), /*tp_size*/
1898 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001899 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +00001900 (destructor)form_dealloc, /*tp_dealloc*/
1901 0, /*tp_print*/
1902 (getattrfunc)form_getattr, /*tp_getattr*/
1903 (setattrfunc)form_setattr, /*tp_setattr*/
1904 0, /*tp_compare*/
1905 (reprfunc)form_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001906};
1907
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001908static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001909newformobject(form)
1910 FL_FORM *form;
1911{
1912 formobject *f;
Guido van Rossumb18618d2000-05-03 23:44:39 +00001913 f = PyObject_New(formobject, &Formtype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001914 if (f == NULL)
1915 return NULL;
1916 f->ob_form = form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001917 return (PyObject *)f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001918}
1919
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001920
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001921/* The "fl" module */
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001922
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001923static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001924forms_make_form(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001925 PyObject *dummy;
1926 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001927{
1928 int type;
1929 float w, h;
1930 FL_FORM *form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001931 if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001932 return NULL;
1933 form = fl_bgn_form(type, w, h);
1934 if (form == NULL) {
1935 /* XXX Actually, cannot happen! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001936 PyErr_NoMemory();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001937 return NULL;
1938 }
1939 fl_end_form();
1940 return newformobject(form);
1941}
1942
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001943static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001944forms_activate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001945 PyObject *f;
1946 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001947{
1948 fl_activate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001949 Py_INCREF(Py_None);
1950 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001951}
1952
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001953static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001954forms_deactivate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001955 PyObject *f;
1956 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001957{
1958 fl_deactivate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001959 Py_INCREF(Py_None);
1960 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001961}
1962
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001963static PyObject *my_event_callback = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001964
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001965static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001966forms_set_event_call_back(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001967 PyObject *dummy;
1968 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001969{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001970 if (args == Py_None)
Guido van Rossumf6da4f61993-07-26 15:24:57 +00001971 args = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001972 my_event_callback = args;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001973 Py_XINCREF(args);
1974 Py_INCREF(Py_None);
1975 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001976}
1977
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001978static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001979forms_do_or_check_forms(dummy, args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001980 PyObject *dummy;
1981 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001982 FL_OBJECT *(*func)();
1983{
1984 FL_OBJECT *generic;
1985 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001986 PyObject *arg, *res;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001987
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001988 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001989 return NULL;
1990
1991 for (;;) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001992 Py_BEGIN_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001993 generic = (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001994 Py_END_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001995 if (generic == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001996 Py_INCREF(Py_None);
1997 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001998 }
1999 if (generic == FL_EVENT) {
2000 int dev;
2001 short val;
2002 if (my_event_callback == NULL)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002003 return PyInt_FromLong(-1L);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002004 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002005 arg = Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002006 if (arg == NULL)
2007 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002008 res = PyEval_CallObject(my_event_callback, arg);
2009 Py_XDECREF(res);
2010 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002011 if (res == NULL)
2012 return NULL; /* Callback raised exception */
2013 continue;
2014 }
2015 g = findgeneric(generic);
2016 if (g == NULL) {
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002017 /* Object not known to us (some dialogs cause this) */
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002018 continue; /* Ignore it */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002019 }
2020 if (g->ob_callback == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002021 Py_INCREF(g);
2022 return ((PyObject *) g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002023 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002024 arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
Guido van Rossume5372401993-03-16 12:15:04 +00002025 if (arg == NULL)
2026 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002027 res = PyEval_CallObject(g->ob_callback, arg);
2028 Py_XDECREF(res);
2029 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002030 if (res == NULL)
2031 return NULL; /* Callback raised exception */
2032 }
2033}
2034
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002035static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002036forms_do_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002037 PyObject *dummy;
2038 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002039{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002040 return forms_do_or_check_forms(dummy, args, fl_do_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002041}
2042
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002043static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002044forms_check_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002045 PyObject *dummy;
2046 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002047{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002048 return forms_do_or_check_forms(dummy, args, fl_check_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002049}
2050
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002051static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002052forms_do_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002053 PyObject *dummy;
2054 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002055{
2056 return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
2057}
2058
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002059static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002060forms_check_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002061 PyObject *dummy;
2062 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002063{
2064 return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
2065}
2066
Guido van Rossum03747111991-08-08 12:10:01 +00002067#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002068static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002069fl_call(func, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002070 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002071 void (*func)();
2072{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002073 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002074 return NULL;
2075 (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002076 Py_INCREF(Py_None);
2077 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002078}
Guido van Rossum03747111991-08-08 12:10:01 +00002079#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002080
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002081static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002082forms_set_graphics_mode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002083 PyObject *dummy;
2084 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002085{
2086 int rgbmode, doublebuf;
2087
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002088 if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002089 return NULL;
2090 fl_set_graphics_mode(rgbmode,doublebuf);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002091 Py_INCREF(Py_None);
2092 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002093}
2094
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002095static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002096forms_get_rgbmode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002097 PyObject *dummy;
2098 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002099{
Guido van Rossum7066dd71992-09-17 17:54:56 +00002100 extern int fl_rgbmode;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002101
2102 if (args != NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002103 PyErr_BadArgument();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002104 return NULL;
2105 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002106 return PyInt_FromLong((long)fl_rgbmode);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002107}
Guido van Rossum7066dd71992-09-17 17:54:56 +00002108
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002109static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002110forms_show_errors(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002111 PyObject *dummy;
2112 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002113{
2114 int show;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002115 if (!PyArg_Parse(args, "i", &show))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002116 return NULL;
2117 fl_show_errors(show);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002118 Py_INCREF(Py_None);
2119 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002120}
2121
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002122static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002123forms_set_font_name(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002124 PyObject *dummy;
2125 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002126{
2127 int numb;
2128 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002129 if (!PyArg_Parse(args, "(is)", &numb, &name))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002130 return NULL;
2131 fl_set_font_name(numb, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002132 Py_INCREF(Py_None);
2133 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002134}
2135
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002136
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002137static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002138forms_qdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002139 PyObject *self;
2140 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002141{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002142 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002143 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002144 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002145 fl_qdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002146 Py_INCREF(Py_None);
2147 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002148}
2149
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002150static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002151forms_unqdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002152 PyObject *self;
2153 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002154{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002155 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002156 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002157 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002158 fl_unqdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002159 Py_INCREF(Py_None);
2160 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002161}
2162
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002163static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002164forms_isqueued(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002165 PyObject *self;
2166 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002167{
Guido van Rossum03747111991-08-08 12:10:01 +00002168 long retval;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002169 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002170 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002171 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002172 retval = fl_isqueued(arg1);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002173
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002174 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002175}
2176
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002177static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002178forms_qtest(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002179 PyObject *self;
2180 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002181{
2182 long retval;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002183 retval = fl_qtest();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002184 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002185}
2186
2187
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002188static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002189forms_qread(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002190 PyObject *self;
2191 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002192{
Guido van Rossume5372401993-03-16 12:15:04 +00002193 int dev;
2194 short val;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002195 Py_BEGIN_ALLOW_THREADS
Guido van Rossume5372401993-03-16 12:15:04 +00002196 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002197 Py_END_ALLOW_THREADS
2198 return Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002199}
2200
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002201static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002202forms_qreset(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002203 PyObject *self;
2204 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002205{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002206 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002207
Guido van Rossum03747111991-08-08 12:10:01 +00002208 fl_qreset();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002209 Py_INCREF(Py_None);
2210 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002211}
2212
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002213static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002214forms_qenter(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002215 PyObject *self;
2216 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002217{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002218 short arg1, arg2;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002219 if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002220 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002221 fl_qenter(arg1, arg2);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002222 Py_INCREF(Py_None);
2223 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002224}
2225
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002226static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002227forms_color(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002228 PyObject *self;
2229 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002230{
2231 int arg;
2232
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002233 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002234
2235 fl_color((short) arg);
2236
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002237 Py_INCREF(Py_None);
2238 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002239}
2240
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002241static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002242forms_mapcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002243 PyObject *self;
2244 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002245{
2246 int arg0, arg1, arg2, arg3;
2247
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002248 if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002249 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002250
2251 fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
2252
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002253 Py_INCREF(Py_None);
2254 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002255}
2256
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002257static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002258forms_getmcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002259 PyObject *self;
2260 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002261{
Guido van Rossum03747111991-08-08 12:10:01 +00002262 int arg;
2263 short r, g, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002264
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002265 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002266
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002267 fl_getmcolor(arg, &r, &g, &b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002268
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002269 return Py_BuildValue("(hhh)", r, g, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002270}
2271
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002272static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002273forms_get_mouse(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002274 PyObject *self;
2275 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002276{
Guido van Rossume5372401993-03-16 12:15:04 +00002277 float x, y;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002278
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002279 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002280
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002281 fl_get_mouse(&x, &y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002282
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002283 return Py_BuildValue("(ff)", x, y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002284}
2285
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002286static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002287forms_tie(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002288 PyObject *self;
2289 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002290{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002291 short arg1, arg2, arg3;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002292 if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002293 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002294 fl_tie(arg1, arg2, arg3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002295 Py_INCREF(Py_None);
2296 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002297}
2298
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002299static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002300forms_show_message(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002301 PyObject *f;
2302 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002303{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002304 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002305
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002306 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002307
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002308 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002309 fl_show_message(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002310 Py_END_ALLOW_THREADS
Guido van Rossum03747111991-08-08 12:10:01 +00002311
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002312 Py_INCREF(Py_None);
2313 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00002314}
2315
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002316static PyObject *
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002317forms_show_choice(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002318 PyObject *f;
2319 PyObject *args;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002320{
2321 char *m1, *m2, *m3, *b1, *b2, *b3;
2322 int nb;
2323 char *format;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002324 long rv;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002325
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002326 if (args == NULL || !PyTuple_Check(args)) {
2327 PyErr_BadArgument();
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002328 return NULL;
2329 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002330 nb = PyTuple_Size(args) - 3;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002331 if (nb <= 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002332 PyErr_SetString(PyExc_TypeError,
2333 "need at least one button label");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002334 return NULL;
2335 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002336 if (PyInt_Check(PyTuple_GetItem(args, 3))) {
2337 PyErr_SetString(PyExc_TypeError,
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002338 "'number-of-buttons' argument not needed");
2339 return NULL;
2340 }
2341 switch (nb) {
2342 case 1: format = "(ssss)"; break;
2343 case 2: format = "(sssss)"; break;
2344 case 3: format = "(ssssss)"; break;
2345 default:
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002346 PyErr_SetString(PyExc_TypeError, "too many button labels");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002347 return NULL;
2348 }
2349
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002350 if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002351 return NULL;
2352
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002353 Py_BEGIN_ALLOW_THREADS
Jack Jansen743db361992-08-13 14:13:11 +00002354 rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002355 Py_END_ALLOW_THREADS
2356 return PyInt_FromLong(rv);
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002357}
2358
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002359static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002360forms_show_question(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002361 PyObject *f;
2362 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002363{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002364 int ret;
2365 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002366
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002367 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002368
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002369 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002370 ret = fl_show_question(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002371 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002372
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002373 return PyInt_FromLong((long) ret);
Guido van Rossum03747111991-08-08 12:10:01 +00002374}
2375
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002376static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002377forms_show_input(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002378 PyObject *f;
2379 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002380{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002381 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002382 char *a, *b;
Guido van Rossum03747111991-08-08 12:10:01 +00002383
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002384 if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002385
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002386 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002387 str = fl_show_input(a, b);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002388 Py_END_ALLOW_THREADS
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002389
2390 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002391 Py_INCREF(Py_None);
2392 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002393 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002394 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002395}
2396
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002397static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002398forms_file_selector(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002399 PyObject *f;
2400 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002401{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002402 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002403 char *a, *b, *c, *d;
Guido van Rossum03747111991-08-08 12:10:01 +00002404
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002405 if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002406
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002407 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002408 str = fl_show_file_selector(a, b, c, d);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002409 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002410
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002411 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002412 Py_INCREF(Py_None);
2413 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002414 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002415 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002416}
2417
2418
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002419static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002420forms_file_selector_func(args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002421 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002422 char *(*func)();
Guido van Rossum03747111991-08-08 12:10:01 +00002423{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002424 char *str;
Guido van Rossum03747111991-08-08 12:10:01 +00002425
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002426 str = (*func) ();
2427
2428 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002429 Py_INCREF(Py_None);
2430 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002431 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002432 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002433}
2434
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002435static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002436forms_get_directory(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002437 PyObject *f;
2438 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002439{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002440 return forms_file_selector_func(args, fl_get_directory);
Guido van Rossum03747111991-08-08 12:10:01 +00002441}
2442
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002443static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002444forms_get_pattern(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002445 PyObject *f;
2446 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002447{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002448 return forms_file_selector_func(args, fl_get_pattern);
Guido van Rossum03747111991-08-08 12:10:01 +00002449}
2450
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002451static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002452forms_get_filename(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002453 PyObject *f;
2454 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002455{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002456 return forms_file_selector_func(args, fl_get_filename);
Guido van Rossum03747111991-08-08 12:10:01 +00002457}
2458
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002459static PyMethodDef forms_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002460/* adm */
2461 {"make_form", forms_make_form},
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002462 {"activate_all_forms", forms_activate_all_forms},
2463 {"deactivate_all_forms",forms_deactivate_all_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002464/* gl support wrappers */
2465 {"qdevice", forms_qdevice},
2466 {"unqdevice", forms_unqdevice},
2467 {"isqueued", forms_isqueued},
2468 {"qtest", forms_qtest},
2469 {"qread", forms_qread},
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002470/* {"blkqread", forms_blkqread}, */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002471 {"qreset", forms_qreset},
2472 {"qenter", forms_qenter},
Guido van Rossum03747111991-08-08 12:10:01 +00002473 {"get_mouse", forms_get_mouse},
2474 {"tie", forms_tie},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002475/* {"new_events", forms_new_events}, */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002476 {"color", forms_color},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002477 {"mapcolor", forms_mapcolor},
2478 {"getmcolor", forms_getmcolor},
2479/* interaction */
2480 {"do_forms", forms_do_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002481 {"do_only_forms", forms_do_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002482 {"check_forms", forms_check_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002483 {"check_only_forms", forms_check_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002484 {"set_event_call_back", forms_set_event_call_back},
2485/* goodies */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002486 {"show_message", forms_show_message},
2487 {"show_question", forms_show_question},
2488 {"show_choice", forms_show_choice},
2489 {"show_input", forms_show_input},
2490 {"show_file_selector", forms_file_selector},
2491 {"file_selector", forms_file_selector}, /* BW compat */
2492 {"get_directory", forms_get_directory},
2493 {"get_pattern", forms_get_pattern},
2494 {"get_filename", forms_get_filename},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002495 {"set_graphics_mode", forms_set_graphics_mode},
2496 {"get_rgbmode", forms_get_rgbmode},
Guido van Rossum7066dd71992-09-17 17:54:56 +00002497 {"show_errors", forms_show_errors},
2498 {"set_font_name", forms_set_font_name},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002499 {NULL, NULL} /* sentinel */
2500};
2501
Guido van Rossum3886bb61998-12-04 18:50:17 +00002502DL_EXPORT(void)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002503initfl()
2504{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002505 Py_InitModule("fl", forms_methods);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002506 foreground();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002507 fl_init();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002508}
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002509
2510
2511