blob: c6ce439347be2b7584341675ccf14628b116bdfb [file] [log] [blame]
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001/**********************************************************
Guido van Rossum524b5881995-01-04 19:10:35 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumc7df79e1991-08-07 11:32:58 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumc7df79e1991-08-07 11:32:58 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumc7df79e1991-08-07 11:32:58 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumc7df79e1991-08-07 11:32:58 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumc7df79e1991-08-07 11:32:58 +000029
30******************************************************************/
31
32/* FL module -- interface to Mark Overmars' FORMS Library. */
33
Roger E. Masse7ba4c071997-01-03 22:17:11 +000034/* This code works with FORMS version 2.2 (if you defined
35 OBSOLETE_FORMS_CALLS), and 2.3.
Guido van Rossumf1dc5661993-07-05 10:31:29 +000036 FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
37 /pub/SGI/FORMS. */
Guido van Rossumddc0d3e1991-12-10 13:56:42 +000038
Jack Jansen743db361992-08-13 14:13:11 +000039/* A half-hearted attempt has been made to allow programs using this
40 * module to exploit parallelism (through the threads module). No provisions
41 * have been made for multiple threads to use this module at the same time,
42 * though. So, a program with a forms thread and a non-forms thread will work
43 * fine but a program with two threads using forms will probably crash (unless
44 * the program takes precaution to ensure that only one thread can be in
45 * this module at any time). This will have to be fixed some time.
46 * (A fix will probably also have to synchronise with the gl module).
47 */
48
Roger E. Masse7ba4c071997-01-03 22:17:11 +000049#include "Python.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000050#include "forms.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000051#include "structmember.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000052
53/* Generic Forms Objects */
54
55typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000056 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +000057 FL_OBJECT *ob_generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +000058 PyMethodDef *ob_methods;
59 PyObject *ob_callback;
60 PyObject *ob_callback_arg;
Guido van Rossumc7df79e1991-08-07 11:32:58 +000061} genericobject;
62
Roger E. Masse7ba4c071997-01-03 22:17:11 +000063staticforward PyTypeObject GenericObjecttype;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000064
65#define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
66
67/* List of all objects (XXX this should be a hash table on address...) */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000068
Roger E. Masse7ba4c071997-01-03 22:17:11 +000069static PyObject *allgenerics = NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000070static int nfreeslots = 0;
71
72/* Add an object to the list of known objects */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000073
74static void
75knowgeneric(g)
76 genericobject *g;
77{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000078 int i, n;
79 /* Create the list if it doesn't already exist */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000080 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000081 allgenerics = PyList_New(0);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000082 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000083 PyErr_Clear();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000084 return; /* Too bad, live without allgenerics... */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000085 }
86 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000087 if (nfreeslots > 0) {
88 /* Search the list for reusable slots (NULL items) */
89 /* XXX This can be made faster! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000090 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000091 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000092 if (PyList_GetItem(allgenerics, i) == NULL) {
93 Py_INCREF(g);
94 PyList_SetItem(allgenerics, i, (PyObject *)g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000095 nfreeslots--;
96 return;
97 }
98 }
99 /* Strange... no free slots found... */
100 nfreeslots = 0;
101 }
102 /* No free entries, append new item to the end */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000103 PyList_Append(allgenerics, (PyObject *)g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000104}
105
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000106/* Find an object in the list of known objects */
107
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000108static genericobject *
109findgeneric(generic)
110 FL_OBJECT *generic;
111{
112 int i, n;
113 genericobject *g;
114
115 if (allgenerics == NULL)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000116 return NULL; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000117 n = PyList_Size(allgenerics);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000118 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000119 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000120 if (g != NULL && g->ob_generic == generic)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000121 return g;
122 }
123 return NULL; /* Unknown object */
124}
125
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000126/* Remove an object from the list of known objects */
127
128static void
129forgetgeneric(g)
130 genericobject *g;
131{
132 int i, n;
133
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000134 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000135 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000136 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000137 g->ob_callback_arg = NULL;
138 if (allgenerics == NULL)
139 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000140 n = PyList_Size(allgenerics);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000141 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000142 if (g == (genericobject *)PyList_GetItem(allgenerics, i)) {
143 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000144 nfreeslots++;
145 break;
146 }
147 }
148}
149
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000150/* Called when a form is about to be freed --
151 remove all the objects that we know about from it. */
152
153static void
154releaseobjects(form)
155 FL_FORM *form;
156{
157 int i, n;
158 genericobject *g;
159
160 if (allgenerics == NULL)
161 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000162 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000163 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000164 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000165 if (g != NULL && g->ob_generic->form == form) {
166 fl_delete_object(g->ob_generic);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000167 /* The object is now unreachable for
168 do_forms and check_forms, so
169 delete it from the list of known objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000170 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000171 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000172 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000173 g->ob_callback_arg = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000174 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000175 nfreeslots++;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000176 }
177 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000178}
179
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000180
181/* Methods of generic objects */
182
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000183static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000184generic_set_call_back(g, args)
185 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000186 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000187{
188 if (args == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000189 Py_XDECREF(g->ob_callback);
190 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000191 g->ob_callback = NULL;
192 g->ob_callback_arg = NULL;
193 }
194 else {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000195 if (!PyTuple_Check(args) || PyTuple_Size(args) != 2) {
196 PyErr_BadArgument();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000197 return NULL;
198 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000199 Py_XDECREF(g->ob_callback);
200 Py_XDECREF(g->ob_callback_arg);
201 g->ob_callback = PyTuple_GetItem(args, 0);
202 Py_INCREF(g->ob_callback);
203 g->ob_callback_arg = PyTuple_GetItem(args, 1);
204 Py_INCREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000205 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000206 Py_INCREF(Py_None);
207 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000208}
209
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000210static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000211generic_call(g, args, func)
212 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000213 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000214 void (*func)(FL_OBJECT *);
215{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000216 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000217 return NULL;
218 (*func)(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000219 Py_INCREF(Py_None);
220 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000221}
222
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000223static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000224generic_delete_object(g, args)
225 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000226 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000227{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000228 PyObject *res;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000229 res = generic_call(g, args, fl_delete_object);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000230 if (res != NULL)
231 forgetgeneric(g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000232 return res;
233}
234
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000235static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000236generic_show_object(g, args)
237 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000238 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000239{
240 return generic_call(g, args, fl_show_object);
241}
242
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000243static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000244generic_hide_object(g, args)
245 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000246 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000247{
248 return generic_call(g, args, fl_hide_object);
249}
250
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000251static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000252generic_redraw_object(g, args)
253 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000254 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000255{
256 return generic_call(g, args, fl_redraw_object);
257}
258
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000259#ifdef OBSOLETE_FORMS_CALLS
260
261 /* (un)freeze_object() are obsolete in FORMS 2.2 and unsupported
262 in 2.3. Since there's no foolproof way to tell which version we're
263 using, we omit them unconditionally. */
264
265static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000266generic_freeze_object(g, args)
267 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000268 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000269{
270 return generic_call(g, args, fl_freeze_object);
271}
272
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000273static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000274generic_unfreeze_object(g, args)
275 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000276 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000277{
278 return generic_call(g, args, fl_unfreeze_object);
279}
280
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000281#endif /* OBSOLETE_FORMS_CALLS */
282
283static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000284generic_activate_object(g, args)
285 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000286 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000287{
288 return generic_call(g, args, fl_activate_object);
289}
290
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000291static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000292generic_deactivate_object(g, args)
293 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000294 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000295{
296 return generic_call(g, args, fl_deactivate_object);
297}
298
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000299static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000300generic_set_object_shortcut(g, args)
301 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000302 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000303{
304 char *str;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000305 if (!PyArg_Parse(args, "s", &str))
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000306 return NULL;
307 fl_set_object_shortcut(g->ob_generic, str);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000308 Py_INCREF(Py_None);
309 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000310}
311
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000312static PyMethodDef generic_methods[] = {
313 {"set_call_back", (PyCFunction)generic_set_call_back},
314 {"delete_object", (PyCFunction)generic_delete_object},
315 {"show_object", (PyCFunction)generic_show_object},
316 {"hide_object", (PyCFunction)generic_hide_object},
317 {"redraw_object", (PyCFunction)generic_redraw_object},
318#ifdef OBSOLETE_FORMS_CALLS
319 {"freeze_object", (PyCFunction)generic_freeze_object},
320 {"unfreeze_object", (PyCFunction)generic_unfreeze_object},
321#endif
322 {"activate_object", (PyCFunction)generic_activate_object},
323 {"deactivate_object", (PyCFunction)generic_deactivate_object},
324 {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut},
Guido van Rossum03747111991-08-08 12:10:01 +0000325 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000326};
327
328static void
329generic_dealloc(g)
330 genericobject *g;
331{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000332 fl_free_object(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000333 Py_XDECREF(g->ob_callback);
334 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000335 PyObject_Del(g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000336}
337
338#define OFF(x) offsetof(FL_OBJECT, x)
339
340static struct memberlist generic_memberlist[] = {
341 {"objclass", T_INT, OFF(objclass), RO},
342 {"type", T_INT, OFF(type), RO},
343 {"boxtype", T_INT, OFF(boxtype)},
344 {"x", T_FLOAT, OFF(x)},
345 {"y", T_FLOAT, OFF(y)},
346 {"w", T_FLOAT, OFF(w)},
347 {"h", T_FLOAT, OFF(h)},
348 {"col1", T_INT, OFF(col1)},
349 {"col2", T_INT, OFF(col2)},
350 {"align", T_INT, OFF(align)},
351 {"lcol", T_INT, OFF(lcol)},
352 {"lsize", T_FLOAT, OFF(lsize)},
353 /* "label" is treated specially! */
354 {"lstyle", T_INT, OFF(lstyle)},
355 {"pushed", T_INT, OFF(pushed), RO},
356 {"focus", T_INT, OFF(focus), RO},
357 {"belowmouse", T_INT, OFF(belowmouse),RO},
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000358/* {"frozen", T_INT, OFF(frozen), RO}, */
Guido van Rossum7066dd71992-09-17 17:54:56 +0000359 {"active", T_INT, OFF(active)},
360 {"input", T_INT, OFF(input)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000361 {"visible", T_INT, OFF(visible), RO},
Guido van Rossum7066dd71992-09-17 17:54:56 +0000362 {"radio", T_INT, OFF(radio)},
363 {"automatic", T_INT, OFF(automatic)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000364 {NULL} /* Sentinel */
365};
366
Guido van Rossumd97f0481991-11-19 20:26:28 +0000367#undef OFF
368
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000369static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000370generic_getattr(g, name)
371 genericobject *g;
372 char *name;
373{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000374 PyObject *meth;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000375
376 /* XXX Ought to special-case name "__methods__" */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000377 if (g-> ob_methods) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000378 meth = Py_FindMethod(g->ob_methods, (PyObject *)g, name);
Guido van Rossum03747111991-08-08 12:10:01 +0000379 if (meth != NULL) return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000380 PyErr_Clear();
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000381 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000382
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000383 meth = Py_FindMethod(generic_methods, (PyObject *)g, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000384 if (meth != NULL)
385 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000386 PyErr_Clear();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000387
388 /* "label" is an exception, getmember only works for char pointers,
389 not for char arrays */
390 if (strcmp(name, "label") == 0)
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000391 return PyString_FromString(g->ob_generic->label);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000392
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000393 return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000394}
395
396static int
397generic_setattr(g, name, v)
398 genericobject *g;
399 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000400 PyObject *v;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000401{
402 int ret;
403
404 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000405 PyErr_SetString(PyExc_TypeError,
406 "can't delete forms object attributes");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000407 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000408 }
409
410 /* "label" is an exception: setmember doesn't set strings;
411 and FORMS wants you to call a function to set the label */
412 if (strcmp(name, "label") == 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000413 if (!PyString_Check(v)) {
414 PyErr_SetString(PyExc_TypeError,
415 "label attr must be string");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000416 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000417 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000418 fl_set_object_label(g->ob_generic, PyString_AsString(v));
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000419 return 0;
420 }
421
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000422 ret = PyMember_Set((char *)g->ob_generic, generic_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000423
424 /* Rather than calling all the various set_object_* functions,
425 we call fl_redraw_object here. This is sometimes redundant
426 but I doubt that's a big problem */
427 if (ret == 0)
428 fl_redraw_object(g->ob_generic);
429
430 return ret;
431}
432
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000433static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000434generic_repr(g)
435 genericobject *g;
436{
437 char buf[100];
438 sprintf(buf, "<FORMS_object at %lx, objclass=%d>",
439 (long)g, g->ob_generic->objclass);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000440 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000441}
442
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000443static PyTypeObject GenericObjecttype = {
444 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000445 0, /*ob_size*/
446 "FORMS_object", /*tp_name*/
447 sizeof(genericobject), /*tp_size*/
448 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000449 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000450 (destructor)generic_dealloc, /*tp_dealloc*/
451 0, /*tp_print*/
452 (getattrfunc)generic_getattr, /*tp_getattr*/
453 (setattrfunc)generic_setattr, /*tp_setattr*/
454 0, /*tp_compare*/
455 (reprfunc)generic_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000456};
457
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000458static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000459newgenericobject(generic, methods)
460 FL_OBJECT *generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000461 PyMethodDef *methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000462{
463 genericobject *g;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000464 g = PyObject_New(genericobject, &GenericObjecttype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000465 if (g == NULL)
466 return NULL;
467 g-> ob_generic = generic;
468 g->ob_methods = methods;
469 g->ob_callback = NULL;
470 g->ob_callback_arg = NULL;
471 knowgeneric(g);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000472 return (PyObject *)g;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000473}
474
475/**********************************************************************/
476/* Some common calling sequences */
477
478/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000479static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000480call_forms_INf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000481 void (*func)(FL_OBJECT *, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000482 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000483 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000484{
Guido van Rossum03747111991-08-08 12:10:01 +0000485 float parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000486
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000487 if (!PyArg_Parse(args, "f", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000488
Guido van Rossum03747111991-08-08 12:10:01 +0000489 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000490
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000491 Py_INCREF(Py_None);
492 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000493}
494
495/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000496static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000497call_forms_INfINf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000498 void (*func)(FL_OBJECT *, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000499 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000500 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000501{
Guido van Rossum03747111991-08-08 12:10:01 +0000502 float par1, par2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000503
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000504 if (!PyArg_Parse(args, "(ff)", &par1, &par2)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000505
Guido van Rossum03747111991-08-08 12:10:01 +0000506 (*func) (obj, par1, par2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000507
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000508 Py_INCREF(Py_None);
509 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000510}
511
512/* void func (object, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000513static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000514call_forms_INi (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000515 void (*func)(FL_OBJECT *, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000516 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000517 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000518{
Guido van Rossum03747111991-08-08 12:10:01 +0000519 int parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000520
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000521 if (!PyArg_Parse(args, "i", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000522
Guido van Rossum03747111991-08-08 12:10:01 +0000523 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000524
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000525 Py_INCREF(Py_None);
526 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000527}
528
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000529/* void func (object, char) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000530static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000531call_forms_INc (func, obj, args)
532 void (*func)(FL_OBJECT *, int);
533 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000534 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000535{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000536 char *a;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000537
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000538 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000539
Guido van Rossumfc58e581992-01-27 16:45:55 +0000540 (*func) (obj, a[0]);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000541
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000542 Py_INCREF(Py_None);
543 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000544}
545
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000546/* void func (object, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000547static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000548call_forms_INstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000549 void (*func)(FL_OBJECT *, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000550 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000551 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000552{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000553 char *a;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000554
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000555 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000556
Guido van Rossumfc58e581992-01-27 16:45:55 +0000557 (*func) (obj, a);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000558
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000559 Py_INCREF(Py_None);
560 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000561}
562
563
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000564/* void func (object, int, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000565static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000566call_forms_INiINstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000567 void (*func)(FL_OBJECT *, int, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000568 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000569 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000570{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000571 char *b;
572 int a;
Guido van Rossum03747111991-08-08 12:10:01 +0000573
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000574 if (!PyArg_Parse(args, "(is)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000575
Guido van Rossumfc58e581992-01-27 16:45:55 +0000576 (*func) (obj, a, b);
Guido van Rossum03747111991-08-08 12:10:01 +0000577
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000578 Py_INCREF(Py_None);
579 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000580}
581
Guido van Rossum03747111991-08-08 12:10:01 +0000582#ifdef UNUSED
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000583/* void func (object, int, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000584static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000585call_forms_INiINi (func, obj, args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000586 void (*func)(FL_OBJECT *, int, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000587 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000588 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000589{
Guido van Rossum03747111991-08-08 12:10:01 +0000590 int par1, par2;
591
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000592 if (!PyArg_Parse(args, "(ii)", &par1, &par2)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000593
594 (*func) (obj, par1, par2);
595
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000596 Py_INCREF(Py_None);
597 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000598}
Guido van Rossum03747111991-08-08 12:10:01 +0000599#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000600
601/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000602static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000603call_forms_Ri (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000604 int (*func)(FL_OBJECT *);
605 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000606 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000607{
Guido van Rossum03747111991-08-08 12:10:01 +0000608 int retval;
609
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000610 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000611
612 retval = (*func) (obj);
613
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000614 return PyInt_FromLong ((long) retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000615}
616
617/* char * func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000618static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000619call_forms_Rstr (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000620 char * (*func)(FL_OBJECT *);
621 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000622 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000623{
Guido van Rossum03747111991-08-08 12:10:01 +0000624 char *str;
625
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000626 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000627
628 str = (*func) (obj);
629
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000630 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000631 Py_INCREF(Py_None);
632 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000633 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000634 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000635}
636
637/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000638static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000639call_forms_Rf (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000640 float (*func)(FL_OBJECT *);
641 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000642 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000643{
Guido van Rossum03747111991-08-08 12:10:01 +0000644 float retval;
645
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000646 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000647
648 retval = (*func) (obj);
649
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000650 return PyFloat_FromDouble (retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000651}
652
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000653static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000654call_forms_OUTfOUTf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000655 void (*func)(FL_OBJECT *, float *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000656 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000657 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000658{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000659 float f1, f2;
Guido van Rossum03747111991-08-08 12:10:01 +0000660
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000661 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000662
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000663 (*func) (obj, &f1, &f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000664
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000665 return Py_BuildValue("(ff)", f1, f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000666}
667
Guido van Rossum03747111991-08-08 12:10:01 +0000668#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000669static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000670call_forms_OUTf (func, obj, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000671 void (*func)(FL_OBJECT *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000672 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000673 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000674{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000675 float f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000676
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000677 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000678
679 (*func) (obj, &f);
680
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000681 return PyFloat_FromDouble (f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000682}
Guido van Rossum03747111991-08-08 12:10:01 +0000683#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000684
685/**********************************************************************/
686/* Class : browser */
687
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000688static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000689set_browser_topline(g, args)
690 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000691 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000692{
Guido van Rossum03747111991-08-08 12:10:01 +0000693 return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000694}
695
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000696static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000697clear_browser(g, args)
698 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000699 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000700{
Guido van Rossum03747111991-08-08 12:10:01 +0000701 return generic_call (g, args, fl_clear_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000702}
703
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000704static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000705add_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000706 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000707 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000708{
Guido van Rossum03747111991-08-08 12:10:01 +0000709 return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000710}
711
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000712static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000713addto_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000714 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000715 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000716{
Guido van Rossum03747111991-08-08 12:10:01 +0000717 return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000718}
719
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000720static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000721insert_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000722 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000723 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000724{
Guido van Rossum03747111991-08-08 12:10:01 +0000725 return call_forms_INiINstr (fl_insert_browser_line,
726 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000727}
728
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000729static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000730delete_browser_line (g, args)
731 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000732 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000733{
Guido van Rossum03747111991-08-08 12:10:01 +0000734 return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000735}
736
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000737static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000738replace_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000739 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000740 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000741{
Guido van Rossum03747111991-08-08 12:10:01 +0000742 return call_forms_INiINstr (fl_replace_browser_line,
743 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000744}
745
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000746static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000747get_browser_line(g, args)
748 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000749 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000750{
751 int i;
752 char *str;
753
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000754 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000755 return NULL;
756
757 str = fl_get_browser_line (g->ob_generic, i);
758
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000759 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000760 Py_INCREF(Py_None);
761 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000762 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000763 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000764}
765
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000766static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000767load_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000768 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000769 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000770{
Guido van Rossumabe58351991-08-08 12:34:44 +0000771 /* XXX strictly speaking this is wrong since fl_load_browser
772 XXX returns int, not void */
Guido van Rossum03747111991-08-08 12:10:01 +0000773 return call_forms_INstr (fl_load_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000774}
775
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000776static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000777get_browser_maxline(g, args)
778 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000779 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000780{
Guido van Rossum03747111991-08-08 12:10:01 +0000781 return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000782}
783
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000784static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000785select_browser_line (g, args)
786 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000787 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000788{
Guido van Rossum03747111991-08-08 12:10:01 +0000789 return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000790}
791
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000792static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000793deselect_browser_line (g, args)
794 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000795 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000796{
Guido van Rossum03747111991-08-08 12:10:01 +0000797 return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000798}
799
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000800static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000801deselect_browser (g, args)
802 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000803 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000804{
Guido van Rossum03747111991-08-08 12:10:01 +0000805 return generic_call (g, args, fl_deselect_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000806}
807
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000808static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000809isselected_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000810 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000811 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000812{
813 int i, j;
Guido van Rossum03747111991-08-08 12:10:01 +0000814
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000815 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000816 return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000817
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000818 j = fl_isselected_browser_line (g->ob_generic, i);
Guido van Rossum03747111991-08-08 12:10:01 +0000819
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000820 return PyInt_FromLong (j);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000821}
822
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000823static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000824get_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000825 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000826 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000827{
Guido van Rossum03747111991-08-08 12:10:01 +0000828 return call_forms_Ri (fl_get_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000829}
830
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000831static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000832set_browser_fontsize (g, args)
833 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000834 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000835{
Guido van Rossum03747111991-08-08 12:10:01 +0000836 return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000837}
838
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000839static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000840set_browser_fontstyle (g, args)
841 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000842 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000843{
Guido van Rossum03747111991-08-08 12:10:01 +0000844 return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000845}
846
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000847static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000848set_browser_specialkey (g, args)
849 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000850 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000851{
852 return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
853}
854
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000855static PyMethodDef browser_methods[] = {
856 {"set_browser_topline", (PyCFunction)set_browser_topline},
857 {"clear_browser", (PyCFunction)clear_browser},
858 {"add_browser_line", (PyCFunction)add_browser_line},
859 {"addto_browser", (PyCFunction)addto_browser},
860 {"insert_browser_line", (PyCFunction)insert_browser_line},
861 {"delete_browser_line", (PyCFunction)delete_browser_line},
862 {"replace_browser_line", (PyCFunction)replace_browser_line},
863 {"get_browser_line", (PyCFunction)get_browser_line},
864 {"load_browser", (PyCFunction)load_browser},
865 {"get_browser_maxline", (PyCFunction)get_browser_maxline},
866 {"select_browser_line", (PyCFunction)select_browser_line},
867 {"deselect_browser_line", (PyCFunction)deselect_browser_line},
868 {"deselect_browser", (PyCFunction)deselect_browser},
869 {"isselected_browser_line", (PyCFunction)isselected_browser_line},
870 {"get_browser", (PyCFunction)get_browser},
871 {"set_browser_fontsize", (PyCFunction)set_browser_fontsize},
872 {"set_browser_fontstyle", (PyCFunction)set_browser_fontstyle},
873 {"set_browser_specialkey", (PyCFunction)set_browser_specialkey},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000874 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000875};
876
877/* Class: button */
878
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000879static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000880set_button(g, args)
881 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000882 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000883{
Guido van Rossum03747111991-08-08 12:10:01 +0000884 return call_forms_INi (fl_set_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000885}
886
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000887static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000888get_button(g, args)
889 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000890 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000891{
Guido van Rossum03747111991-08-08 12:10:01 +0000892 return call_forms_Ri (fl_get_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000893}
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000894
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000895static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000896get_button_numb(g, args)
897 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000898 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000899{
900 return call_forms_Ri (fl_get_button_numb, g-> ob_generic, args);
901}
902
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000903static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000904set_button_shortcut(g, args)
905 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000906 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000907{
908 return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
909}
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000910
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000911static PyMethodDef button_methods[] = {
912 {"set_button", (PyCFunction)set_button},
913 {"get_button", (PyCFunction)get_button},
914 {"get_button_numb", (PyCFunction)get_button_numb},
915 {"set_button_shortcut", (PyCFunction)set_button_shortcut},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000916 {NULL, NULL} /* sentinel */
917};
918
919/* Class: choice */
920
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000921static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000922set_choice(g, args)
923 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000924 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000925{
Guido van Rossum03747111991-08-08 12:10:01 +0000926 return call_forms_INi (fl_set_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000927}
928
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000929static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000930get_choice(g, args)
931 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000932 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000933{
Guido van Rossum03747111991-08-08 12:10:01 +0000934 return call_forms_Ri (fl_get_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000935}
936
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000937static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000938clear_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000939 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000940 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000941{
Guido van Rossum03747111991-08-08 12:10:01 +0000942 return generic_call (g, args, fl_clear_choice);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000943}
944
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000945static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000946addto_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000947 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000948 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000949{
Guido van Rossum03747111991-08-08 12:10:01 +0000950 return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000951}
952
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000953static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000954replace_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000955 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000956 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000957{
Guido van Rossum03747111991-08-08 12:10:01 +0000958 return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000959}
960
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000961static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000962delete_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000963 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000964 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000965{
Guido van Rossum03747111991-08-08 12:10:01 +0000966 return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000967}
968
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000969static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000970get_choice_text (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000971 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000972 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000973{
Guido van Rossum03747111991-08-08 12:10:01 +0000974 return call_forms_Rstr (fl_get_choice_text, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000975}
976
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000977static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000978set_choice_fontsize (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000979 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000980 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000981{
Guido van Rossum03747111991-08-08 12:10:01 +0000982 return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000983}
984
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000985static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000986set_choice_fontstyle (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000987 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000988 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000989{
Guido van Rossum03747111991-08-08 12:10:01 +0000990 return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000991}
992
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000993static PyMethodDef choice_methods[] = {
994 {"set_choice", (PyCFunction)set_choice},
995 {"get_choice", (PyCFunction)get_choice},
996 {"clear_choice", (PyCFunction)clear_choice},
997 {"addto_choice", (PyCFunction)addto_choice},
998 {"replace_choice", (PyCFunction)replace_choice},
999 {"delete_choice", (PyCFunction)delete_choice},
1000 {"get_choice_text", (PyCFunction)get_choice_text},
1001 {"set_choice_fontsize", (PyCFunction)set_choice_fontsize},
1002 {"set_choice_fontstyle",(PyCFunction)set_choice_fontstyle},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001003 {NULL, NULL} /* sentinel */
1004};
1005
1006/* Class : Clock */
1007
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001008static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001009get_clock(g, args)
1010 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001011 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001012{
1013 int i0, i1, i2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001014
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001015 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001016 return NULL;
1017
1018 fl_get_clock (g->ob_generic, &i0, &i1, &i2);
1019
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001020 return Py_BuildValue("(iii)", i0, i1, i2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001021}
1022
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001023static PyMethodDef clock_methods[] = {
1024 {"get_clock", (PyCFunction)get_clock},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001025 {NULL, NULL} /* sentinel */
1026};
1027
1028/* CLass : Counters */
1029
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001030static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001031get_counter_value(g, args)
1032 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001033 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001034{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001035 return call_forms_Rf (fl_get_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001036}
1037
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001038static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001039set_counter_value (g, args)
1040 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001041 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001042{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001043 return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001044}
1045
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001046static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001047set_counter_precision (g, args)
1048 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001049 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001050{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001051 return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001052}
1053
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001054static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001055set_counter_bounds (g, args)
1056 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001057 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001058{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001059 return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001060}
1061
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001062static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001063set_counter_step (g, args)
1064 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001065 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001066{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001067 return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001068}
1069
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001070static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001071set_counter_return (g, args)
1072 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001073 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001074{
Guido van Rossum03747111991-08-08 12:10:01 +00001075 return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001076}
1077
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001078static PyMethodDef counter_methods[] = {
1079 {"set_counter_value", (PyCFunction)set_counter_value},
1080 {"get_counter_value", (PyCFunction)get_counter_value},
1081 {"set_counter_bounds", (PyCFunction)set_counter_bounds},
1082 {"set_counter_step", (PyCFunction)set_counter_step},
1083 {"set_counter_precision", (PyCFunction)set_counter_precision},
1084 {"set_counter_return", (PyCFunction)set_counter_return},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001085 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001086};
1087
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001088
1089/* Class: Dials */
1090
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001091static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001092get_dial_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001093 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001094 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001095{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001096 return call_forms_Rf (fl_get_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001097}
1098
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001099static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001100set_dial_value (g, args)
1101 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001102 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001103{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001104 return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001105}
1106
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001107static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001108set_dial_bounds (g, args)
1109 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001110 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001111{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001112 return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001113}
1114
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001115static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001116get_dial_bounds (g, args)
1117 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001118 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001119{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001120 return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001121}
1122
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001123static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001124set_dial_step (g, args)
1125 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001126 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001127{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001128 return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001129}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001130
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001131static PyMethodDef dial_methods[] = {
1132 {"set_dial_value", (PyCFunction)set_dial_value},
1133 {"get_dial_value", (PyCFunction)get_dial_value},
1134 {"set_dial_bounds", (PyCFunction)set_dial_bounds},
1135 {"get_dial_bounds", (PyCFunction)get_dial_bounds},
1136 {"set_dial_step", (PyCFunction)set_dial_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001137 {NULL, NULL} /* sentinel */
1138};
1139
1140/* Class : Input */
1141
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001142static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001143set_input (g, args)
1144 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001145 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001146{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001147 return call_forms_INstr (fl_set_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001148}
1149
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001150static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001151get_input (g, args)
1152 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001153 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001154{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001155 return call_forms_Rstr (fl_get_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001156}
1157
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001158static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001159set_input_color (g, args)
1160 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001161 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001162{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001163 return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001164}
1165
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001166static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001167set_input_return (g, args)
1168 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001169 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001170{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001171 return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001172}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001173
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001174static PyMethodDef input_methods[] = {
1175 {"set_input", (PyCFunction)set_input},
1176 {"get_input", (PyCFunction)get_input},
1177 {"set_input_color", (PyCFunction)set_input_color},
1178 {"set_input_return", (PyCFunction)set_input_return},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001179 {NULL, NULL} /* sentinel */
1180};
1181
1182
1183/* Class : Menu */
1184
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001185static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001186set_menu (g, args)
1187 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001188 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001189{
Guido van Rossumabe58351991-08-08 12:34:44 +00001190 return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001191}
1192
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001193static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001194get_menu (g, args)
1195 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001196 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001197{
Guido van Rossumabe58351991-08-08 12:34:44 +00001198 /* XXX strictly speaking this is wrong since fl_get_menu
1199 XXX returns long, not int */
1200 return call_forms_Ri (fl_get_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001201}
1202
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001203static PyObject *
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001204get_menu_text (g, args)
1205 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001206 PyObject *args;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001207{
1208 return call_forms_Rstr (fl_get_menu_text, g-> ob_generic, args);
1209}
1210
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001211static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001212addto_menu (g, args)
1213 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001214 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001215{
Guido van Rossumabe58351991-08-08 12:34:44 +00001216 return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001217}
1218
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001219static PyMethodDef menu_methods[] = {
1220 {"set_menu", (PyCFunction)set_menu},
1221 {"get_menu", (PyCFunction)get_menu},
1222 {"get_menu_text", (PyCFunction)get_menu_text},
1223 {"addto_menu", (PyCFunction)addto_menu},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001224 {NULL, NULL} /* sentinel */
1225};
1226
1227
1228/* Class: Sliders */
1229
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001230static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001231get_slider_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001232 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001233 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001234{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001235 return call_forms_Rf (fl_get_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001236}
1237
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001238static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001239set_slider_value (g, args)
1240 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001241 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001242{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001243 return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001244}
1245
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001246static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001247set_slider_bounds (g, args)
1248 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001249 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001250{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001251 return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001252}
1253
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001254static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001255get_slider_bounds (g, args)
1256 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001257 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001258{
1259 return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic, args);
1260}
1261
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001262static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001263set_slider_return (g, args)
1264 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001265 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001266{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001267 return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001268}
1269
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001270static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001271set_slider_size (g, args)
1272 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001273 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001274{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001275 return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001276}
1277
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001278static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001279set_slider_precision (g, args)
1280 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001281 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001282{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001283 return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001284}
1285
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001286static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001287set_slider_step (g, args)
1288 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001289 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001290{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001291 return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001292}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001293
1294
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001295static PyMethodDef slider_methods[] = {
1296 {"set_slider_value", (PyCFunction)set_slider_value},
1297 {"get_slider_value", (PyCFunction)get_slider_value},
1298 {"set_slider_bounds", (PyCFunction)set_slider_bounds},
1299 {"get_slider_bounds", (PyCFunction)get_slider_bounds},
1300 {"set_slider_return", (PyCFunction)set_slider_return},
1301 {"set_slider_size", (PyCFunction)set_slider_size},
1302 {"set_slider_precision",(PyCFunction)set_slider_precision},
1303 {"set_slider_step", (PyCFunction)set_slider_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001304 {NULL, NULL} /* sentinel */
1305};
1306
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001307static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001308set_positioner_xvalue (g, args)
1309 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001310 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001311{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001312 return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001313}
1314
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001315static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001316set_positioner_xbounds (g, args)
1317 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001318 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001319{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001320 return call_forms_INfINf (fl_set_positioner_xbounds,
1321 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001322}
1323
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001324static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001325set_positioner_yvalue (g, args)
1326 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001327 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001328{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001329 return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001330}
1331
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001332static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001333set_positioner_ybounds (g, args)
1334 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001335 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001336{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001337 return call_forms_INfINf (fl_set_positioner_ybounds,
1338 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001339}
1340
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001341static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001342get_positioner_xvalue (g, args)
1343 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001344 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001345{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001346 return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001347}
1348
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001349static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001350get_positioner_xbounds (g, args)
1351 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001352 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001353{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001354 return call_forms_OUTfOUTf (fl_get_positioner_xbounds,
1355 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001356}
1357
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001358static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001359get_positioner_yvalue (g, args)
1360 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001361 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001362{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001363 return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001364}
1365
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001366static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001367get_positioner_ybounds (g, args)
1368 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001369 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001370{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001371 return call_forms_OUTfOUTf (fl_get_positioner_ybounds,
1372 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001373}
1374
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001375static PyMethodDef positioner_methods[] = {
1376 {"set_positioner_xvalue", (PyCFunction)set_positioner_xvalue},
1377 {"set_positioner_yvalue", (PyCFunction)set_positioner_yvalue},
1378 {"set_positioner_xbounds", (PyCFunction)set_positioner_xbounds},
1379 {"set_positioner_ybounds", (PyCFunction)set_positioner_ybounds},
1380 {"get_positioner_xvalue", (PyCFunction)get_positioner_xvalue},
1381 {"get_positioner_yvalue", (PyCFunction)get_positioner_yvalue},
1382 {"get_positioner_xbounds", (PyCFunction)get_positioner_xbounds},
1383 {"get_positioner_ybounds", (PyCFunction)get_positioner_ybounds},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001384 {NULL, NULL} /* sentinel */
1385};
1386
1387/* Class timer */
1388
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001389static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001390set_timer (g, args)
1391 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001392 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001393{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001394 return call_forms_INf (fl_set_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001395}
1396
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001397static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001398get_timer (g, args)
1399 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001400 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001401{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001402 return call_forms_Rf (fl_get_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001403}
1404
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001405static PyMethodDef timer_methods[] = {
1406 {"set_timer", (PyCFunction)set_timer},
1407 {"get_timer", (PyCFunction)get_timer},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001408 {NULL, NULL} /* sentinel */
1409};
1410
1411/* Form objects */
1412
1413typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001414 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001415 FL_FORM *ob_form;
1416} formobject;
1417
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001418staticforward PyTypeObject Formtype;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001419
1420#define is_formobject(v) ((v)->ob_type == &Formtype)
1421
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001422static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001423form_show_form(f, args)
1424 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001425 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001426{
1427 int place, border;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001428 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001429 if (!PyArg_Parse(args, "(iis)", &place, &border, &name))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001430 return NULL;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001431 fl_show_form(f->ob_form, place, border, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001432 Py_INCREF(Py_None);
1433 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001434}
1435
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001436static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001437form_call(func, f, args)
1438 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001439 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001440 void (*func)(FL_FORM *);
1441{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001442 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001443
1444 (*func)(f);
1445
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001446 Py_INCREF(Py_None);
1447 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001448}
1449
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001450static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001451form_call_INiINi(func, f, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001452 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001453 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001454 void (*func)(FL_FORM *, int, int);
1455{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001456 int a, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001457
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001458 if (!PyArg_Parse(args, "(ii)", &a, &b)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001459
1460 (*func)(f, a, b);
1461
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001462 Py_INCREF(Py_None);
1463 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001464}
1465
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001466static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001467form_call_INfINf(func, f, args)
1468 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001469 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001470 void (*func)(FL_FORM *, float, float);
1471{
1472 float a, b;
1473
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001474 if (!PyArg_Parse(args, "(ff)", &a, &b)) return NULL;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001475
1476 (*func)(f, a, b);
1477
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001478 Py_INCREF(Py_None);
1479 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001480}
1481
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001482static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001483form_hide_form(f, args)
1484 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001485 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001486{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001487 return form_call(fl_hide_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001488}
1489
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001490static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001491form_redraw_form(f, args)
1492 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001493 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001494{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001495 return form_call(fl_redraw_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001496}
1497
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001498static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001499form_set_form_position(f, args)
1500 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001501 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001502{
1503 return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
1504}
1505
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001506static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001507form_set_form_size(f, args)
1508 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001509 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001510{
1511 return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
1512}
1513
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001514static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001515form_scale_form(f, args)
1516 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001517 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001518{
1519 return form_call_INfINf(fl_scale_form, f-> ob_form, args);
1520}
1521
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001522static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001523generic_add_object(f, args, func, internal_methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001524 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001525 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001526 FL_OBJECT *(*func)(int, float, float, float, float, char*);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001527 PyMethodDef *internal_methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001528{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001529 int type;
1530 float x, y, w, h;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001531 char *name;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001532 FL_OBJECT *obj;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001533
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001534 if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001535 return NULL;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001536
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001537 fl_addto_form (f-> ob_form);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001538
Guido van Rossumfc58e581992-01-27 16:45:55 +00001539 obj = (*func) (type, x, y, w, h, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001540
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001541 fl_end_form();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001542
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001543 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001544 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001545 return NULL;
1546 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001547
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001548 return newgenericobject (obj, internal_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001549}
1550
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001551static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001552form_add_button(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001553 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001554 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001555{
1556 return generic_add_object(f, args, fl_add_button, button_methods);
1557}
1558
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001559static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001560form_add_lightbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001561 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001562 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001563{
1564 return generic_add_object(f, args, fl_add_lightbutton, button_methods);
1565}
1566
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001567static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001568form_add_roundbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001569 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001570 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001571{
1572 return generic_add_object(f, args, fl_add_roundbutton, button_methods);
1573}
1574
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001575static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001576form_add_menu (f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001577 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001578 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001579{
1580 return generic_add_object(f, args, fl_add_menu, menu_methods);
1581}
1582
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001583static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001584form_add_slider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001585 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001586 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001587{
1588 return generic_add_object(f, args, fl_add_slider, slider_methods);
1589}
1590
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001591static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001592form_add_valslider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001593 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001594 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001595{
1596 return generic_add_object(f, args, fl_add_valslider, slider_methods);
1597}
1598
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001599static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001600form_add_dial(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001601 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001602 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001603{
1604 return generic_add_object(f, args, fl_add_dial, dial_methods);
1605}
1606
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001607static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001608form_add_counter(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001609 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001610 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001611{
1612 return generic_add_object(f, args, fl_add_counter, counter_methods);
1613}
1614
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001615static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001616form_add_clock(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001617 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001618 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001619{
1620 return generic_add_object(f, args, fl_add_clock, clock_methods);
1621}
1622
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001623static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001624form_add_box(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001625 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001626 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001627{
Guido van Rossum03747111991-08-08 12:10:01 +00001628 return generic_add_object(f, args, fl_add_box,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001629 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001630}
1631
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001632static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001633form_add_choice(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001634 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001635 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001636{
1637 return generic_add_object(f, args, fl_add_choice, choice_methods);
1638}
1639
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001640static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001641form_add_browser(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001642 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001643 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001644{
1645 return generic_add_object(f, args, fl_add_browser, browser_methods);
1646}
1647
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001648static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001649form_add_positioner(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001650 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001651 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001652{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001653 return generic_add_object(f, args, fl_add_positioner,
1654 positioner_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001655}
1656
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001657static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001658form_add_input(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001659 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001660 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001661{
1662 return generic_add_object(f, args, fl_add_input, input_methods);
1663}
1664
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001665static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001666form_add_text(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001667 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001668 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001669{
Guido van Rossum03747111991-08-08 12:10:01 +00001670 return generic_add_object(f, args, fl_add_text,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001671 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001672}
1673
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001674static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001675form_add_timer(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001676 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001677 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001678{
1679 return generic_add_object(f, args, fl_add_timer, timer_methods);
1680}
1681
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001682static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001683form_freeze_form(f, args)
1684 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001685 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001686{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001687 return form_call(fl_freeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001688}
1689
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001690static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001691form_unfreeze_form(f, args)
1692 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001693 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001694{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001695 return form_call(fl_unfreeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001696}
1697
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001698static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001699form_activate_form(f, args)
1700 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001701 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001702{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001703 return form_call(fl_activate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001704}
1705
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001706static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001707form_deactivate_form(f, args)
1708 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001709 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001710{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001711 return form_call(fl_deactivate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001712}
1713
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001714static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001715form_bgn_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001716 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001717 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001718{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001719 FL_OBJECT *obj;
1720
1721 fl_addto_form(f-> ob_form);
1722 obj = fl_bgn_group();
1723 fl_end_form();
1724
1725 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001726 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001727 return NULL;
1728 }
1729
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001730 return newgenericobject (obj, (PyMethodDef *) NULL);
Guido van Rossum03747111991-08-08 12:10:01 +00001731}
1732
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001733static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001734form_end_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001735 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001736 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001737{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001738 fl_addto_form(f-> ob_form);
Guido van Rossum03747111991-08-08 12:10:01 +00001739 fl_end_group();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001740 fl_end_form();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001741 Py_INCREF(Py_None);
1742 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001743}
1744
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001745static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001746forms_find_first_or_last(func, f, args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001747 FL_OBJECT *(*func)(FL_FORM *, int, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +00001748 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001749 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001750{
1751 int type;
1752 float mx, my;
1753 FL_OBJECT *generic;
1754 genericobject *g;
1755
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001756 if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001757
Guido van Rossum03747111991-08-08 12:10:01 +00001758 generic = (*func) (f-> ob_form, type, mx, my);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001759
1760 if (generic == NULL)
1761 {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001762 Py_INCREF(Py_None);
1763 return Py_None;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001764 }
1765
1766 g = findgeneric(generic);
1767 if (g == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001768 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001769 "forms_find_{first|last} returns unknown object");
Guido van Rossum75cc8981991-08-08 12:07:45 +00001770 return NULL;
1771 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001772 Py_INCREF(g);
1773 return (PyObject *) g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001774}
1775
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001776static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001777form_find_first(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001778 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001779 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001780{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001781 return forms_find_first_or_last(fl_find_first, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001782}
1783
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001784static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001785form_find_last(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001786 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001787 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001788{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001789 return forms_find_first_or_last(fl_find_last, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001790}
1791
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001792static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00001793form_set_object_focus(f, args)
1794 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001795 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001796{
1797 genericobject *g;
1798 if (args == NULL || !is_genericobject(args)) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001799 PyErr_BadArgument();
Guido van Rossum7066dd71992-09-17 17:54:56 +00001800 return NULL;
1801 }
1802 g = (genericobject *)args;
1803 fl_set_object_focus(f->ob_form, g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001804 Py_INCREF(Py_None);
1805 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001806}
1807
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001808static PyMethodDef form_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001809/* adm */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001810 {"show_form", (PyCFunction)form_show_form},
1811 {"hide_form", (PyCFunction)form_hide_form},
1812 {"redraw_form", (PyCFunction)form_redraw_form},
1813 {"set_form_position", (PyCFunction)form_set_form_position},
1814 {"set_form_size", (PyCFunction)form_set_form_size},
1815 {"scale_form", (PyCFunction)form_scale_form},
1816 {"freeze_form", (PyCFunction)form_freeze_form},
1817 {"unfreeze_form", (PyCFunction)form_unfreeze_form},
1818 {"activate_form", (PyCFunction)form_activate_form},
1819 {"deactivate_form", (PyCFunction)form_deactivate_form},
1820 {"bgn_group", (PyCFunction)form_bgn_group},
1821 {"end_group", (PyCFunction)form_end_group},
1822 {"find_first", (PyCFunction)form_find_first},
1823 {"find_last", (PyCFunction)form_find_last},
1824 {"set_object_focus", (PyCFunction)form_set_object_focus},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001825
1826/* basic objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001827 {"add_button", (PyCFunction)form_add_button},
Guido van Rossumb6775db1994-08-01 11:34:53 +00001828/* {"add_bitmap", (method)form_add_bitmap}, */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001829 {"add_lightbutton", (PyCFunction)form_add_lightbutton},
1830 {"add_roundbutton", (PyCFunction)form_add_roundbutton},
1831 {"add_menu", (PyCFunction)form_add_menu},
1832 {"add_slider", (PyCFunction)form_add_slider},
1833 {"add_positioner", (PyCFunction)form_add_positioner},
1834 {"add_valslider", (PyCFunction)form_add_valslider},
1835 {"add_dial", (PyCFunction)form_add_dial},
1836 {"add_counter", (PyCFunction)form_add_counter},
1837 {"add_box", (PyCFunction)form_add_box},
1838 {"add_clock", (PyCFunction)form_add_clock},
1839 {"add_choice", (PyCFunction)form_add_choice},
1840 {"add_browser", (PyCFunction)form_add_browser},
1841 {"add_input", (PyCFunction)form_add_input},
1842 {"add_timer", (PyCFunction)form_add_timer},
1843 {"add_text", (PyCFunction)form_add_text},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001844 {NULL, NULL} /* sentinel */
1845};
1846
1847static void
1848form_dealloc(f)
1849 formobject *f;
1850{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001851 releaseobjects(f->ob_form);
Guido van Rossum336b5911992-04-08 11:16:25 +00001852 if (f->ob_form->visible)
1853 fl_hide_form(f->ob_form);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001854 fl_free_form(f->ob_form);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001855 PyObject_Del(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001856}
1857
Guido van Rossumd97f0481991-11-19 20:26:28 +00001858#define OFF(x) offsetof(FL_FORM, x)
1859
Guido van Rossum32db5e31991-11-12 15:43:18 +00001860static struct memberlist form_memberlist[] = {
1861 {"window", T_LONG, OFF(window), RO},
1862 {"w", T_FLOAT, OFF(w)},
1863 {"h", T_FLOAT, OFF(h)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001864 {"x", T_FLOAT, OFF(x), RO},
1865 {"y", T_FLOAT, OFF(y), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001866 {"deactivated", T_INT, OFF(deactivated)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001867 {"visible", T_INT, OFF(visible), RO},
1868 {"frozen", T_INT, OFF(frozen), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001869 {"doublebuf", T_INT, OFF(doublebuf)},
1870 {NULL} /* Sentinel */
1871};
1872
Guido van Rossumd97f0481991-11-19 20:26:28 +00001873#undef OFF
1874
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001875static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001876form_getattr(f, name)
1877 formobject *f;
1878 char *name;
1879{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001880 PyObject *meth;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001881
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001882 meth = Py_FindMethod(form_methods, (PyObject *)f, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001883 if (meth != NULL)
1884 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001885 PyErr_Clear();
1886 return PyMember_Get((char *)f->ob_form, form_memberlist, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001887}
1888
1889static int
1890form_setattr(f, name, v)
1891 formobject *f;
1892 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001893 PyObject *v;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001894{
Guido van Rossum32db5e31991-11-12 15:43:18 +00001895 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001896 PyErr_SetString(PyExc_TypeError,
1897 "can't delete form attributes");
Guido van Rossum3863abb1996-09-11 23:31:07 +00001898 return -1;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001899 }
1900
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001901 return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001902}
1903
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001904static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001905form_repr(f)
1906 formobject *f;
1907{
1908 char buf[100];
1909 sprintf(buf, "<FORMS_form at %lx, window=%ld>",
1910 (long)f, f->ob_form->window);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001911 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001912}
1913
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001914static PyTypeObject Formtype = {
1915 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001916 0, /*ob_size*/
1917 "FORMS_form", /*tp_name*/
1918 sizeof(formobject), /*tp_size*/
1919 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001920 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +00001921 (destructor)form_dealloc, /*tp_dealloc*/
1922 0, /*tp_print*/
1923 (getattrfunc)form_getattr, /*tp_getattr*/
1924 (setattrfunc)form_setattr, /*tp_setattr*/
1925 0, /*tp_compare*/
1926 (reprfunc)form_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001927};
1928
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001929static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001930newformobject(form)
1931 FL_FORM *form;
1932{
1933 formobject *f;
Guido van Rossumb18618d2000-05-03 23:44:39 +00001934 f = PyObject_New(formobject, &Formtype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001935 if (f == NULL)
1936 return NULL;
1937 f->ob_form = form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001938 return (PyObject *)f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001939}
1940
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001941
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001942/* The "fl" module */
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001943
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001944static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001945forms_make_form(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001946 PyObject *dummy;
1947 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001948{
1949 int type;
1950 float w, h;
1951 FL_FORM *form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001952 if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001953 return NULL;
1954 form = fl_bgn_form(type, w, h);
1955 if (form == NULL) {
1956 /* XXX Actually, cannot happen! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001957 PyErr_NoMemory();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001958 return NULL;
1959 }
1960 fl_end_form();
1961 return newformobject(form);
1962}
1963
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001964static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001965forms_activate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001966 PyObject *f;
1967 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001968{
1969 fl_activate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001970 Py_INCREF(Py_None);
1971 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001972}
1973
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001974static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001975forms_deactivate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001976 PyObject *f;
1977 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001978{
1979 fl_deactivate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001980 Py_INCREF(Py_None);
1981 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001982}
1983
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001984static PyObject *my_event_callback = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001985
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001986static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001987forms_set_event_call_back(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001988 PyObject *dummy;
1989 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001990{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001991 if (args == Py_None)
Guido van Rossumf6da4f61993-07-26 15:24:57 +00001992 args = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001993 my_event_callback = args;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001994 Py_XINCREF(args);
1995 Py_INCREF(Py_None);
1996 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001997}
1998
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001999static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002000forms_do_or_check_forms(dummy, args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002001 PyObject *dummy;
2002 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002003 FL_OBJECT *(*func)();
2004{
2005 FL_OBJECT *generic;
2006 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002007 PyObject *arg, *res;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002008
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002009 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002010 return NULL;
2011
2012 for (;;) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002013 Py_BEGIN_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002014 generic = (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002015 Py_END_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002016 if (generic == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002017 Py_INCREF(Py_None);
2018 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002019 }
2020 if (generic == FL_EVENT) {
2021 int dev;
2022 short val;
2023 if (my_event_callback == NULL)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002024 return PyInt_FromLong(-1L);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002025 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002026 arg = Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002027 if (arg == NULL)
2028 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002029 res = PyEval_CallObject(my_event_callback, arg);
2030 Py_XDECREF(res);
2031 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002032 if (res == NULL)
2033 return NULL; /* Callback raised exception */
2034 continue;
2035 }
2036 g = findgeneric(generic);
2037 if (g == NULL) {
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002038 /* Object not known to us (some dialogs cause this) */
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002039 continue; /* Ignore it */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002040 }
2041 if (g->ob_callback == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002042 Py_INCREF(g);
2043 return ((PyObject *) g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002044 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002045 arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
Guido van Rossume5372401993-03-16 12:15:04 +00002046 if (arg == NULL)
2047 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002048 res = PyEval_CallObject(g->ob_callback, arg);
2049 Py_XDECREF(res);
2050 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002051 if (res == NULL)
2052 return NULL; /* Callback raised exception */
2053 }
2054}
2055
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002056static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002057forms_do_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002058 PyObject *dummy;
2059 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002060{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002061 return forms_do_or_check_forms(dummy, args, fl_do_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002062}
2063
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002064static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002065forms_check_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002066 PyObject *dummy;
2067 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002068{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002069 return forms_do_or_check_forms(dummy, args, fl_check_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002070}
2071
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002072static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002073forms_do_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002074 PyObject *dummy;
2075 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002076{
2077 return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
2078}
2079
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002080static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002081forms_check_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002082 PyObject *dummy;
2083 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002084{
2085 return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
2086}
2087
Guido van Rossum03747111991-08-08 12:10:01 +00002088#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002089static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002090fl_call(func, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002091 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002092 void (*func)();
2093{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002094 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002095 return NULL;
2096 (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002097 Py_INCREF(Py_None);
2098 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002099}
Guido van Rossum03747111991-08-08 12:10:01 +00002100#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002101
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002102static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002103forms_set_graphics_mode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002104 PyObject *dummy;
2105 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002106{
2107 int rgbmode, doublebuf;
2108
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002109 if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002110 return NULL;
2111 fl_set_graphics_mode(rgbmode,doublebuf);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002112 Py_INCREF(Py_None);
2113 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002114}
2115
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002116static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002117forms_get_rgbmode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002118 PyObject *dummy;
2119 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002120{
Guido van Rossum7066dd71992-09-17 17:54:56 +00002121 extern int fl_rgbmode;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002122
2123 if (args != NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002124 PyErr_BadArgument();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002125 return NULL;
2126 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002127 return PyInt_FromLong((long)fl_rgbmode);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002128}
Guido van Rossum7066dd71992-09-17 17:54:56 +00002129
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002130static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002131forms_show_errors(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002132 PyObject *dummy;
2133 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002134{
2135 int show;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002136 if (!PyArg_Parse(args, "i", &show))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002137 return NULL;
2138 fl_show_errors(show);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002139 Py_INCREF(Py_None);
2140 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002141}
2142
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002143static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002144forms_set_font_name(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002145 PyObject *dummy;
2146 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002147{
2148 int numb;
2149 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002150 if (!PyArg_Parse(args, "(is)", &numb, &name))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002151 return NULL;
2152 fl_set_font_name(numb, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002153 Py_INCREF(Py_None);
2154 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002155}
2156
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002157
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002158static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002159forms_qdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002160 PyObject *self;
2161 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002162{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002163 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002164 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002165 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002166 fl_qdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002167 Py_INCREF(Py_None);
2168 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002169}
2170
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002171static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002172forms_unqdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002173 PyObject *self;
2174 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002175{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002176 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002177 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002178 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002179 fl_unqdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002180 Py_INCREF(Py_None);
2181 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002182}
2183
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002184static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002185forms_isqueued(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002186 PyObject *self;
2187 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002188{
Guido van Rossum03747111991-08-08 12:10:01 +00002189 long retval;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002190 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002191 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002192 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002193 retval = fl_isqueued(arg1);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002194
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002195 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002196}
2197
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002198static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002199forms_qtest(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002200 PyObject *self;
2201 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002202{
2203 long retval;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002204 retval = fl_qtest();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002205 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002206}
2207
2208
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002209static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002210forms_qread(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002211 PyObject *self;
2212 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002213{
Guido van Rossume5372401993-03-16 12:15:04 +00002214 int dev;
2215 short val;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002216 Py_BEGIN_ALLOW_THREADS
Guido van Rossume5372401993-03-16 12:15:04 +00002217 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002218 Py_END_ALLOW_THREADS
2219 return Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002220}
2221
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002222static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002223forms_qreset(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002224 PyObject *self;
2225 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002226{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002227 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002228
Guido van Rossum03747111991-08-08 12:10:01 +00002229 fl_qreset();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002230 Py_INCREF(Py_None);
2231 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002232}
2233
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002234static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002235forms_qenter(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002236 PyObject *self;
2237 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002238{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002239 short arg1, arg2;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002240 if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002241 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002242 fl_qenter(arg1, arg2);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002243 Py_INCREF(Py_None);
2244 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002245}
2246
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002247static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002248forms_color(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002249 PyObject *self;
2250 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002251{
2252 int arg;
2253
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002254 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002255
2256 fl_color((short) arg);
2257
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002258 Py_INCREF(Py_None);
2259 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002260}
2261
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002262static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002263forms_mapcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002264 PyObject *self;
2265 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002266{
2267 int arg0, arg1, arg2, arg3;
2268
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002269 if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002270 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002271
2272 fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
2273
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002274 Py_INCREF(Py_None);
2275 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002276}
2277
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002278static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002279forms_getmcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002280 PyObject *self;
2281 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002282{
Guido van Rossum03747111991-08-08 12:10:01 +00002283 int arg;
2284 short r, g, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002285
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002286 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002287
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002288 fl_getmcolor(arg, &r, &g, &b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002289
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002290 return Py_BuildValue("(hhh)", r, g, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002291}
2292
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002293static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002294forms_get_mouse(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002295 PyObject *self;
2296 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002297{
Guido van Rossume5372401993-03-16 12:15:04 +00002298 float x, y;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002299
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002300 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002301
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002302 fl_get_mouse(&x, &y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002303
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002304 return Py_BuildValue("(ff)", x, y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002305}
2306
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002307static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002308forms_tie(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002309 PyObject *self;
2310 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002311{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002312 short arg1, arg2, arg3;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002313 if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002314 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002315 fl_tie(arg1, arg2, arg3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002316 Py_INCREF(Py_None);
2317 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002318}
2319
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002320static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002321forms_show_message(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002322 PyObject *f;
2323 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002324{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002325 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002326
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002327 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002328
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002329 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002330 fl_show_message(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002331 Py_END_ALLOW_THREADS
Guido van Rossum03747111991-08-08 12:10:01 +00002332
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002333 Py_INCREF(Py_None);
2334 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00002335}
2336
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002337static PyObject *
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002338forms_show_choice(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002339 PyObject *f;
2340 PyObject *args;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002341{
2342 char *m1, *m2, *m3, *b1, *b2, *b3;
2343 int nb;
2344 char *format;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002345 long rv;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002346
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002347 if (args == NULL || !PyTuple_Check(args)) {
2348 PyErr_BadArgument();
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002349 return NULL;
2350 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002351 nb = PyTuple_Size(args) - 3;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002352 if (nb <= 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002353 PyErr_SetString(PyExc_TypeError,
2354 "need at least one button label");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002355 return NULL;
2356 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002357 if (PyInt_Check(PyTuple_GetItem(args, 3))) {
2358 PyErr_SetString(PyExc_TypeError,
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002359 "'number-of-buttons' argument not needed");
2360 return NULL;
2361 }
2362 switch (nb) {
2363 case 1: format = "(ssss)"; break;
2364 case 2: format = "(sssss)"; break;
2365 case 3: format = "(ssssss)"; break;
2366 default:
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002367 PyErr_SetString(PyExc_TypeError, "too many button labels");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002368 return NULL;
2369 }
2370
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002371 if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002372 return NULL;
2373
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002374 Py_BEGIN_ALLOW_THREADS
Jack Jansen743db361992-08-13 14:13:11 +00002375 rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002376 Py_END_ALLOW_THREADS
2377 return PyInt_FromLong(rv);
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002378}
2379
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002380static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002381forms_show_question(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002382 PyObject *f;
2383 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002384{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002385 int ret;
2386 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002387
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002388 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002389
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002390 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002391 ret = fl_show_question(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002392 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002393
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002394 return PyInt_FromLong((long) ret);
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_show_input(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;
Guido van Rossum03747111991-08-08 12:10:01 +00002404
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002405 if (!PyArg_Parse(args, "(ss)", &a, &b)) 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_input(a, b);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002409 Py_END_ALLOW_THREADS
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002410
2411 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
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002418static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002419forms_file_selector(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002420 PyObject *f;
2421 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002422{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002423 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002424 char *a, *b, *c, *d;
Guido van Rossum03747111991-08-08 12:10:01 +00002425
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002426 if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002427
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002428 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002429 str = fl_show_file_selector(a, b, c, d);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002430 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002431
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002432 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002433 Py_INCREF(Py_None);
2434 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002435 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002436 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002437}
2438
2439
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002440static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002441forms_file_selector_func(args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002442 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002443 char *(*func)();
Guido van Rossum03747111991-08-08 12:10:01 +00002444{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002445 char *str;
Guido van Rossum03747111991-08-08 12:10:01 +00002446
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002447 str = (*func) ();
2448
2449 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002450 Py_INCREF(Py_None);
2451 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002452 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002453 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002454}
2455
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002456static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002457forms_get_directory(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002458 PyObject *f;
2459 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002460{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002461 return forms_file_selector_func(args, fl_get_directory);
Guido van Rossum03747111991-08-08 12:10:01 +00002462}
2463
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002464static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002465forms_get_pattern(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002466 PyObject *f;
2467 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002468{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002469 return forms_file_selector_func(args, fl_get_pattern);
Guido van Rossum03747111991-08-08 12:10:01 +00002470}
2471
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002472static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002473forms_get_filename(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002474 PyObject *f;
2475 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002476{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002477 return forms_file_selector_func(args, fl_get_filename);
Guido van Rossum03747111991-08-08 12:10:01 +00002478}
2479
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002480static PyMethodDef forms_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002481/* adm */
2482 {"make_form", forms_make_form},
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002483 {"activate_all_forms", forms_activate_all_forms},
2484 {"deactivate_all_forms",forms_deactivate_all_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002485/* gl support wrappers */
2486 {"qdevice", forms_qdevice},
2487 {"unqdevice", forms_unqdevice},
2488 {"isqueued", forms_isqueued},
2489 {"qtest", forms_qtest},
2490 {"qread", forms_qread},
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002491/* {"blkqread", forms_blkqread}, */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002492 {"qreset", forms_qreset},
2493 {"qenter", forms_qenter},
Guido van Rossum03747111991-08-08 12:10:01 +00002494 {"get_mouse", forms_get_mouse},
2495 {"tie", forms_tie},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002496/* {"new_events", forms_new_events}, */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002497 {"color", forms_color},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002498 {"mapcolor", forms_mapcolor},
2499 {"getmcolor", forms_getmcolor},
2500/* interaction */
2501 {"do_forms", forms_do_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002502 {"do_only_forms", forms_do_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002503 {"check_forms", forms_check_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002504 {"check_only_forms", forms_check_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002505 {"set_event_call_back", forms_set_event_call_back},
2506/* goodies */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002507 {"show_message", forms_show_message},
2508 {"show_question", forms_show_question},
2509 {"show_choice", forms_show_choice},
2510 {"show_input", forms_show_input},
2511 {"show_file_selector", forms_file_selector},
2512 {"file_selector", forms_file_selector}, /* BW compat */
2513 {"get_directory", forms_get_directory},
2514 {"get_pattern", forms_get_pattern},
2515 {"get_filename", forms_get_filename},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002516 {"set_graphics_mode", forms_set_graphics_mode},
2517 {"get_rgbmode", forms_get_rgbmode},
Guido van Rossum7066dd71992-09-17 17:54:56 +00002518 {"show_errors", forms_show_errors},
2519 {"set_font_name", forms_set_font_name},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002520 {NULL, NULL} /* sentinel */
2521};
2522
Guido van Rossum3886bb61998-12-04 18:50:17 +00002523DL_EXPORT(void)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002524initfl()
2525{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002526 Py_InitModule("fl", forms_methods);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002527 foreground();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002528 fl_init();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002529}
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002530
2531
2532