blob: 1eec1f5ee20c3993c29e2e124f9424a897daa530 [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);
335 PyMem_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;
Roger E. Masse7ba4c071997-01-03 22:17:11 +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_add_object(f, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001500 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001501 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001502{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001503 genericobject *g;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001504 if (args == NULL || !is_genericobject(args)) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001505 PyErr_BadArgument();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001506 return NULL;
1507 }
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001508 g = (genericobject *)args;
1509 if (findgeneric(g->ob_generic) != NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001510 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001511 "add_object of object already in a form");
1512 return NULL;
1513 }
1514 fl_add_object(f->ob_form, g->ob_generic);
1515 knowgeneric(g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001516
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001517 Py_INCREF(Py_None);
1518 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001519}
1520
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001521static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001522form_set_form_position(f, args)
1523 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001524 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001525{
1526 return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
1527}
1528
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001529static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001530form_set_form_size(f, args)
1531 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001532 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001533{
1534 return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
1535}
1536
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001537static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001538form_scale_form(f, args)
1539 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001540 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001541{
1542 return form_call_INfINf(fl_scale_form, f-> ob_form, args);
1543}
1544
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001545static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001546generic_add_object(f, args, func, internal_methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001547 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001548 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001549 FL_OBJECT *(*func)(int, float, float, float, float, char*);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001550 PyMethodDef *internal_methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001551{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001552 int type;
1553 float x, y, w, h;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001554 char *name;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001555 FL_OBJECT *obj;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001556
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001557 if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001558 return NULL;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001559
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001560 fl_addto_form (f-> ob_form);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001561
Guido van Rossumfc58e581992-01-27 16:45:55 +00001562 obj = (*func) (type, x, y, w, h, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001563
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001564 fl_end_form();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001565
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001566 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001567 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001568 return NULL;
1569 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001570
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001571 return newgenericobject (obj, internal_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001572}
1573
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001574static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001575form_add_button(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001576 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001577 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001578{
1579 return generic_add_object(f, args, fl_add_button, button_methods);
1580}
1581
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001582static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001583form_add_lightbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001584 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001585 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001586{
1587 return generic_add_object(f, args, fl_add_lightbutton, button_methods);
1588}
1589
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001590static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001591form_add_roundbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001592 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001593 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001594{
1595 return generic_add_object(f, args, fl_add_roundbutton, button_methods);
1596}
1597
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001598static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001599form_add_menu (f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001600 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001601 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001602{
1603 return generic_add_object(f, args, fl_add_menu, menu_methods);
1604}
1605
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001606static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001607form_add_slider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001608 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001609 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001610{
1611 return generic_add_object(f, args, fl_add_slider, slider_methods);
1612}
1613
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001614static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001615form_add_valslider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001616 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001617 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001618{
1619 return generic_add_object(f, args, fl_add_valslider, slider_methods);
1620}
1621
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001622static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001623form_add_dial(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001624 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001625 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001626{
1627 return generic_add_object(f, args, fl_add_dial, dial_methods);
1628}
1629
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001630static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001631form_add_counter(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001632 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001633 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001634{
1635 return generic_add_object(f, args, fl_add_counter, counter_methods);
1636}
1637
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001638static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001639form_add_clock(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001640 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001641 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001642{
1643 return generic_add_object(f, args, fl_add_clock, clock_methods);
1644}
1645
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001646static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001647form_add_box(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001648 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001649 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001650{
Guido van Rossum03747111991-08-08 12:10:01 +00001651 return generic_add_object(f, args, fl_add_box,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001652 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001653}
1654
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001655static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001656form_add_choice(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001657 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001658 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001659{
1660 return generic_add_object(f, args, fl_add_choice, choice_methods);
1661}
1662
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001663static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001664form_add_browser(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001665 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001666 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001667{
1668 return generic_add_object(f, args, fl_add_browser, browser_methods);
1669}
1670
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001671static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001672form_add_positioner(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001673 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001674 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001675{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001676 return generic_add_object(f, args, fl_add_positioner,
1677 positioner_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001678}
1679
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001680static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001681form_add_input(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001682 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001683 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001684{
1685 return generic_add_object(f, args, fl_add_input, input_methods);
1686}
1687
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001688static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001689form_add_text(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001690 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001691 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001692{
Guido van Rossum03747111991-08-08 12:10:01 +00001693 return generic_add_object(f, args, fl_add_text,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001694 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001695}
1696
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001697static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001698form_add_timer(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001699 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001700 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001701{
1702 return generic_add_object(f, args, fl_add_timer, timer_methods);
1703}
1704
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001705static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001706form_freeze_form(f, args)
1707 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001708 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001709{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001710 return form_call(fl_freeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001711}
1712
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001713static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001714form_unfreeze_form(f, args)
1715 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001716 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001717{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001718 return form_call(fl_unfreeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001719}
1720
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001721static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001722form_activate_form(f, args)
1723 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001724 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001725{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001726 return form_call(fl_activate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001727}
1728
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001729static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001730form_deactivate_form(f, args)
1731 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001732 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001733{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001734 return form_call(fl_deactivate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001735}
1736
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001737static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001738form_bgn_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001739 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001740 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001741{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001742 FL_OBJECT *obj;
1743
1744 fl_addto_form(f-> ob_form);
1745 obj = fl_bgn_group();
1746 fl_end_form();
1747
1748 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001749 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001750 return NULL;
1751 }
1752
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001753 return newgenericobject (obj, (PyMethodDef *) NULL);
Guido van Rossum03747111991-08-08 12:10:01 +00001754}
1755
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001756static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001757form_end_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001758 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001759 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001760{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001761 fl_addto_form(f-> ob_form);
Guido van Rossum03747111991-08-08 12:10:01 +00001762 fl_end_group();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001763 fl_end_form();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001764 Py_INCREF(Py_None);
1765 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001766}
1767
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001768static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001769forms_find_first_or_last(func, f, args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001770 FL_OBJECT *(*func)(FL_FORM *, int, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +00001771 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001772 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001773{
1774 int type;
1775 float mx, my;
1776 FL_OBJECT *generic;
1777 genericobject *g;
1778
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001779 if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001780
Guido van Rossum03747111991-08-08 12:10:01 +00001781 generic = (*func) (f-> ob_form, type, mx, my);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001782
1783 if (generic == NULL)
1784 {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001785 Py_INCREF(Py_None);
1786 return Py_None;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001787 }
1788
1789 g = findgeneric(generic);
1790 if (g == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001791 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001792 "forms_find_{first|last} returns unknown object");
Guido van Rossum75cc8981991-08-08 12:07:45 +00001793 return NULL;
1794 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001795 Py_INCREF(g);
1796 return (PyObject *) g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001797}
1798
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001799static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001800form_find_first(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001801 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001802 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001803{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001804 return forms_find_first_or_last(fl_find_first, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001805}
1806
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001807static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001808form_find_last(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001809 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001810 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001811{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001812 return forms_find_first_or_last(fl_find_last, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001813}
1814
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001815static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00001816form_set_object_focus(f, args)
1817 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001818 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001819{
1820 genericobject *g;
1821 if (args == NULL || !is_genericobject(args)) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001822 PyErr_BadArgument();
Guido van Rossum7066dd71992-09-17 17:54:56 +00001823 return NULL;
1824 }
1825 g = (genericobject *)args;
1826 fl_set_object_focus(f->ob_form, g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001827 Py_INCREF(Py_None);
1828 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001829}
1830
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001831static PyMethodDef form_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001832/* adm */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001833 {"show_form", (PyCFunction)form_show_form},
1834 {"hide_form", (PyCFunction)form_hide_form},
1835 {"redraw_form", (PyCFunction)form_redraw_form},
1836 {"set_form_position", (PyCFunction)form_set_form_position},
1837 {"set_form_size", (PyCFunction)form_set_form_size},
1838 {"scale_form", (PyCFunction)form_scale_form},
1839 {"freeze_form", (PyCFunction)form_freeze_form},
1840 {"unfreeze_form", (PyCFunction)form_unfreeze_form},
1841 {"activate_form", (PyCFunction)form_activate_form},
1842 {"deactivate_form", (PyCFunction)form_deactivate_form},
1843 {"bgn_group", (PyCFunction)form_bgn_group},
1844 {"end_group", (PyCFunction)form_end_group},
1845 {"find_first", (PyCFunction)form_find_first},
1846 {"find_last", (PyCFunction)form_find_last},
1847 {"set_object_focus", (PyCFunction)form_set_object_focus},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001848
1849/* basic objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001850 {"add_button", (PyCFunction)form_add_button},
Guido van Rossumb6775db1994-08-01 11:34:53 +00001851/* {"add_bitmap", (method)form_add_bitmap}, */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001852 {"add_lightbutton", (PyCFunction)form_add_lightbutton},
1853 {"add_roundbutton", (PyCFunction)form_add_roundbutton},
1854 {"add_menu", (PyCFunction)form_add_menu},
1855 {"add_slider", (PyCFunction)form_add_slider},
1856 {"add_positioner", (PyCFunction)form_add_positioner},
1857 {"add_valslider", (PyCFunction)form_add_valslider},
1858 {"add_dial", (PyCFunction)form_add_dial},
1859 {"add_counter", (PyCFunction)form_add_counter},
1860 {"add_box", (PyCFunction)form_add_box},
1861 {"add_clock", (PyCFunction)form_add_clock},
1862 {"add_choice", (PyCFunction)form_add_choice},
1863 {"add_browser", (PyCFunction)form_add_browser},
1864 {"add_input", (PyCFunction)form_add_input},
1865 {"add_timer", (PyCFunction)form_add_timer},
1866 {"add_text", (PyCFunction)form_add_text},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001867 {NULL, NULL} /* sentinel */
1868};
1869
1870static void
1871form_dealloc(f)
1872 formobject *f;
1873{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001874 releaseobjects(f->ob_form);
Guido van Rossum336b5911992-04-08 11:16:25 +00001875 if (f->ob_form->visible)
1876 fl_hide_form(f->ob_form);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001877 fl_free_form(f->ob_form);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001878 PyMem_DEL(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001879}
1880
Guido van Rossumd97f0481991-11-19 20:26:28 +00001881#define OFF(x) offsetof(FL_FORM, x)
1882
Guido van Rossum32db5e31991-11-12 15:43:18 +00001883static struct memberlist form_memberlist[] = {
1884 {"window", T_LONG, OFF(window), RO},
1885 {"w", T_FLOAT, OFF(w)},
1886 {"h", T_FLOAT, OFF(h)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001887 {"x", T_FLOAT, OFF(x), RO},
1888 {"y", T_FLOAT, OFF(y), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001889 {"deactivated", T_INT, OFF(deactivated)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001890 {"visible", T_INT, OFF(visible), RO},
1891 {"frozen", T_INT, OFF(frozen), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001892 {"doublebuf", T_INT, OFF(doublebuf)},
1893 {NULL} /* Sentinel */
1894};
1895
Guido van Rossumd97f0481991-11-19 20:26:28 +00001896#undef OFF
1897
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001898static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001899form_getattr(f, name)
1900 formobject *f;
1901 char *name;
1902{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001903 PyObject *meth;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001904
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001905 meth = Py_FindMethod(form_methods, (PyObject *)f, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001906 if (meth != NULL)
1907 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001908 PyErr_Clear();
1909 return PyMember_Get((char *)f->ob_form, form_memberlist, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001910}
1911
1912static int
1913form_setattr(f, name, v)
1914 formobject *f;
1915 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001916 PyObject *v;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001917{
1918 int ret;
1919
1920 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001921 PyErr_SetString(PyExc_TypeError,
1922 "can't delete form attributes");
Guido van Rossum3863abb1996-09-11 23:31:07 +00001923 return -1;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001924 }
1925
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001926 return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001927}
1928
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001929static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001930form_repr(f)
1931 formobject *f;
1932{
1933 char buf[100];
1934 sprintf(buf, "<FORMS_form at %lx, window=%ld>",
1935 (long)f, f->ob_form->window);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001936 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001937}
1938
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001939static PyTypeObject Formtype = {
1940 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001941 0, /*ob_size*/
1942 "FORMS_form", /*tp_name*/
1943 sizeof(formobject), /*tp_size*/
1944 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001945 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +00001946 (destructor)form_dealloc, /*tp_dealloc*/
1947 0, /*tp_print*/
1948 (getattrfunc)form_getattr, /*tp_getattr*/
1949 (setattrfunc)form_setattr, /*tp_setattr*/
1950 0, /*tp_compare*/
1951 (reprfunc)form_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001952};
1953
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001954static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001955newformobject(form)
1956 FL_FORM *form;
1957{
1958 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001959 f = PyObject_NEW(formobject, &Formtype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001960 if (f == NULL)
1961 return NULL;
1962 f->ob_form = form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001963 return (PyObject *)f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001964}
1965
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001966
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001967/* The "fl" module */
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001968
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001969static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001970forms_make_form(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001971 PyObject *dummy;
1972 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001973{
1974 int type;
1975 float w, h;
1976 FL_FORM *form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001977 if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001978 return NULL;
1979 form = fl_bgn_form(type, w, h);
1980 if (form == NULL) {
1981 /* XXX Actually, cannot happen! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001982 PyErr_NoMemory();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001983 return NULL;
1984 }
1985 fl_end_form();
1986 return newformobject(form);
1987}
1988
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001989static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001990forms_activate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001991 PyObject *f;
1992 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001993{
1994 fl_activate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001995 Py_INCREF(Py_None);
1996 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001997}
1998
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001999static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002000forms_deactivate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002001 PyObject *f;
2002 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002003{
2004 fl_deactivate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002005 Py_INCREF(Py_None);
2006 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002007}
2008
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002009static PyObject *my_event_callback = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002010
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002011static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002012forms_set_event_call_back(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002013 PyObject *dummy;
2014 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002015{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002016 if (args == Py_None)
Guido van Rossumf6da4f61993-07-26 15:24:57 +00002017 args = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002018 my_event_callback = args;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002019 Py_XINCREF(args);
2020 Py_INCREF(Py_None);
2021 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002022}
2023
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002024static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002025forms_do_or_check_forms(dummy, args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002026 PyObject *dummy;
2027 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002028 FL_OBJECT *(*func)();
2029{
2030 FL_OBJECT *generic;
2031 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002032 PyObject *arg, *res;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002033
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002034 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002035 return NULL;
2036
2037 for (;;) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002038 Py_BEGIN_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002039 generic = (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002040 Py_END_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002041 if (generic == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002042 Py_INCREF(Py_None);
2043 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002044 }
2045 if (generic == FL_EVENT) {
2046 int dev;
2047 short val;
2048 if (my_event_callback == NULL)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002049 return PyInt_FromLong(-1L);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002050 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002051 arg = Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002052 if (arg == NULL)
2053 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002054 res = PyEval_CallObject(my_event_callback, arg);
2055 Py_XDECREF(res);
2056 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002057 if (res == NULL)
2058 return NULL; /* Callback raised exception */
2059 continue;
2060 }
2061 g = findgeneric(generic);
2062 if (g == NULL) {
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002063 /* Object not known to us (some dialogs cause this) */
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002064 continue; /* Ignore it */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002065 }
2066 if (g->ob_callback == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002067 Py_INCREF(g);
2068 return ((PyObject *) g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002069 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002070 arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
Guido van Rossume5372401993-03-16 12:15:04 +00002071 if (arg == NULL)
2072 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002073 res = PyEval_CallObject(g->ob_callback, arg);
2074 Py_XDECREF(res);
2075 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002076 if (res == NULL)
2077 return NULL; /* Callback raised exception */
2078 }
2079}
2080
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002081static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002082forms_do_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002083 PyObject *dummy;
2084 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002085{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002086 return forms_do_or_check_forms(dummy, args, fl_do_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002087}
2088
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002089static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002090forms_check_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002091 PyObject *dummy;
2092 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002093{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002094 return forms_do_or_check_forms(dummy, args, fl_check_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002095}
2096
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002097static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002098forms_do_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002099 PyObject *dummy;
2100 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002101{
2102 return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
2103}
2104
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002105static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002106forms_check_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002107 PyObject *dummy;
2108 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002109{
2110 return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
2111}
2112
Guido van Rossum03747111991-08-08 12:10:01 +00002113#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002114static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002115fl_call(func, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002116 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002117 void (*func)();
2118{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002119 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002120 return NULL;
2121 (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002122 Py_INCREF(Py_None);
2123 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002124}
Guido van Rossum03747111991-08-08 12:10:01 +00002125#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002126
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002127static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002128forms_set_graphics_mode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002129 PyObject *dummy;
2130 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002131{
2132 int rgbmode, doublebuf;
2133
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002134 if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002135 return NULL;
2136 fl_set_graphics_mode(rgbmode,doublebuf);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002137 Py_INCREF(Py_None);
2138 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002139}
2140
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002141static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002142forms_get_rgbmode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002143 PyObject *dummy;
2144 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002145{
Guido van Rossum7066dd71992-09-17 17:54:56 +00002146 extern int fl_rgbmode;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002147
2148 if (args != NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002149 PyErr_BadArgument();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002150 return NULL;
2151 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002152 return PyInt_FromLong((long)fl_rgbmode);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002153}
Guido van Rossum7066dd71992-09-17 17:54:56 +00002154
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002155static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002156forms_show_errors(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002157 PyObject *dummy;
2158 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002159{
2160 int show;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002161 if (!PyArg_Parse(args, "i", &show))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002162 return NULL;
2163 fl_show_errors(show);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002164 Py_INCREF(Py_None);
2165 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002166}
2167
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002168static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002169forms_set_font_name(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002170 PyObject *dummy;
2171 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002172{
2173 int numb;
2174 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002175 if (!PyArg_Parse(args, "(is)", &numb, &name))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002176 return NULL;
2177 fl_set_font_name(numb, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002178 Py_INCREF(Py_None);
2179 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002180}
2181
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002182
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002183static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002184forms_qdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002185 PyObject *self;
2186 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002187{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002188 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002189 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002190 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002191 fl_qdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002192 Py_INCREF(Py_None);
2193 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002194}
2195
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002196static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002197forms_unqdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002198 PyObject *self;
2199 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002200{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002201 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002202 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002203 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002204 fl_unqdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002205 Py_INCREF(Py_None);
2206 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002207}
2208
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002209static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002210forms_isqueued(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 Rossum03747111991-08-08 12:10:01 +00002214 long retval;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002215 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002216 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002217 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002218 retval = fl_isqueued(arg1);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002219
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002220 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002221}
2222
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002223static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002224forms_qtest(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002225 PyObject *self;
2226 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002227{
2228 long retval;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002229 retval = fl_qtest();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002230 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002231}
2232
2233
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002234static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002235forms_qread(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 Rossume5372401993-03-16 12:15:04 +00002239 int dev;
2240 short val;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002241 Py_BEGIN_ALLOW_THREADS
Guido van Rossume5372401993-03-16 12:15:04 +00002242 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002243 Py_END_ALLOW_THREADS
2244 return Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002245}
2246
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002247static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002248forms_qreset(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{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002252 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002253
Guido van Rossum03747111991-08-08 12:10:01 +00002254 fl_qreset();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002255 Py_INCREF(Py_None);
2256 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002257}
2258
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002259static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002260forms_qenter(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002261 PyObject *self;
2262 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002263{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002264 short arg1, arg2;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002265 if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002266 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002267 fl_qenter(arg1, arg2);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002268 Py_INCREF(Py_None);
2269 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002270}
2271
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002272static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002273forms_color(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002274 PyObject *self;
2275 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002276{
2277 int arg;
2278
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002279 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002280
2281 fl_color((short) arg);
2282
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002283 Py_INCREF(Py_None);
2284 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002285}
2286
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002287static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002288forms_mapcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002289 PyObject *self;
2290 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002291{
2292 int arg0, arg1, arg2, arg3;
2293
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002294 if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002295 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002296
2297 fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
2298
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002299 Py_INCREF(Py_None);
2300 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002301}
2302
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002303static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002304forms_getmcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002305 PyObject *self;
2306 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002307{
Guido van Rossum03747111991-08-08 12:10:01 +00002308 int arg;
2309 short r, g, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002310
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002311 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002312
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002313 fl_getmcolor(arg, &r, &g, &b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002314
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002315 return Py_BuildValue("(hhh)", r, g, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002316}
2317
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002318static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002319forms_get_mouse(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002320 PyObject *self;
2321 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002322{
Guido van Rossume5372401993-03-16 12:15:04 +00002323 float x, y;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002324
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002325 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002326
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002327 fl_get_mouse(&x, &y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002328
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002329 return Py_BuildValue("(ff)", x, y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002330}
2331
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002332static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002333forms_tie(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002334 PyObject *self;
2335 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002336{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002337 short arg1, arg2, arg3;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002338 if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002339 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002340 fl_tie(arg1, arg2, arg3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002341 Py_INCREF(Py_None);
2342 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002343}
2344
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002345static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002346forms_show_message(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002347 PyObject *f;
2348 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002349{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002350 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002351
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002352 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002353
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002354 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002355 fl_show_message(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002356 Py_END_ALLOW_THREADS
Guido van Rossum03747111991-08-08 12:10:01 +00002357
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002358 Py_INCREF(Py_None);
2359 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00002360}
2361
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002362static PyObject *
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002363forms_show_choice(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002364 PyObject *f;
2365 PyObject *args;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002366{
2367 char *m1, *m2, *m3, *b1, *b2, *b3;
2368 int nb;
2369 char *format;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002370 long rv;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002371
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002372 if (args == NULL || !PyTuple_Check(args)) {
2373 PyErr_BadArgument();
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002374 return NULL;
2375 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002376 nb = PyTuple_Size(args) - 3;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002377 if (nb <= 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002378 PyErr_SetString(PyExc_TypeError,
2379 "need at least one button label");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002380 return NULL;
2381 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002382 if (PyInt_Check(PyTuple_GetItem(args, 3))) {
2383 PyErr_SetString(PyExc_TypeError,
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002384 "'number-of-buttons' argument not needed");
2385 return NULL;
2386 }
2387 switch (nb) {
2388 case 1: format = "(ssss)"; break;
2389 case 2: format = "(sssss)"; break;
2390 case 3: format = "(ssssss)"; break;
2391 default:
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002392 PyErr_SetString(PyExc_TypeError, "too many button labels");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002393 return NULL;
2394 }
2395
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002396 if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002397 return NULL;
2398
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002399 Py_BEGIN_ALLOW_THREADS
Jack Jansen743db361992-08-13 14:13:11 +00002400 rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002401 Py_END_ALLOW_THREADS
2402 return PyInt_FromLong(rv);
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002403}
2404
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002405static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002406forms_show_question(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002407 PyObject *f;
2408 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002409{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002410 int ret;
2411 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002412
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002413 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002414
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002415 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002416 ret = fl_show_question(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002417 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002418
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002419 return PyInt_FromLong((long) ret);
Guido van Rossum03747111991-08-08 12:10:01 +00002420}
2421
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002422static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002423forms_show_input(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002424 PyObject *f;
2425 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002426{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002427 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002428 char *a, *b;
Guido van Rossum03747111991-08-08 12:10:01 +00002429
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002430 if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002431
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002432 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002433 str = fl_show_input(a, b);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002434 Py_END_ALLOW_THREADS
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002435
2436 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002437 Py_INCREF(Py_None);
2438 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002439 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002440 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002441}
2442
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002443static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002444forms_file_selector(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002445 PyObject *f;
2446 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002447{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002448 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002449 char *a, *b, *c, *d;
Guido van Rossum03747111991-08-08 12:10:01 +00002450
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002451 if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002452
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002453 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002454 str = fl_show_file_selector(a, b, c, d);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002455 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002456
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002457 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002458 Py_INCREF(Py_None);
2459 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002460 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002461 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002462}
2463
2464
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002465static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002466forms_file_selector_func(args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002467 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002468 char *(*func)();
Guido van Rossum03747111991-08-08 12:10:01 +00002469{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002470 char *str;
Guido van Rossum03747111991-08-08 12:10:01 +00002471
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002472 str = (*func) ();
2473
2474 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002475 Py_INCREF(Py_None);
2476 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002477 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002478 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002479}
2480
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002481static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002482forms_get_directory(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002483 PyObject *f;
2484 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002485{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002486 return forms_file_selector_func(args, fl_get_directory);
Guido van Rossum03747111991-08-08 12:10:01 +00002487}
2488
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002489static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002490forms_get_pattern(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002491 PyObject *f;
2492 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002493{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002494 return forms_file_selector_func(args, fl_get_pattern);
Guido van Rossum03747111991-08-08 12:10:01 +00002495}
2496
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002497static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002498forms_get_filename(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002499 PyObject *f;
2500 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002501{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002502 return forms_file_selector_func(args, fl_get_filename);
Guido van Rossum03747111991-08-08 12:10:01 +00002503}
2504
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002505static PyMethodDef forms_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002506/* adm */
2507 {"make_form", forms_make_form},
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002508 {"activate_all_forms", forms_activate_all_forms},
2509 {"deactivate_all_forms",forms_deactivate_all_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002510/* gl support wrappers */
2511 {"qdevice", forms_qdevice},
2512 {"unqdevice", forms_unqdevice},
2513 {"isqueued", forms_isqueued},
2514 {"qtest", forms_qtest},
2515 {"qread", forms_qread},
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002516/* {"blkqread", forms_blkqread}, */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002517 {"qreset", forms_qreset},
2518 {"qenter", forms_qenter},
Guido van Rossum03747111991-08-08 12:10:01 +00002519 {"get_mouse", forms_get_mouse},
2520 {"tie", forms_tie},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002521/* {"new_events", forms_new_events}, */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002522 {"color", forms_color},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002523 {"mapcolor", forms_mapcolor},
2524 {"getmcolor", forms_getmcolor},
2525/* interaction */
2526 {"do_forms", forms_do_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002527 {"do_only_forms", forms_do_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002528 {"check_forms", forms_check_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002529 {"check_only_forms", forms_check_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002530 {"set_event_call_back", forms_set_event_call_back},
2531/* goodies */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002532 {"show_message", forms_show_message},
2533 {"show_question", forms_show_question},
2534 {"show_choice", forms_show_choice},
2535 {"show_input", forms_show_input},
2536 {"show_file_selector", forms_file_selector},
2537 {"file_selector", forms_file_selector}, /* BW compat */
2538 {"get_directory", forms_get_directory},
2539 {"get_pattern", forms_get_pattern},
2540 {"get_filename", forms_get_filename},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002541 {"set_graphics_mode", forms_set_graphics_mode},
2542 {"get_rgbmode", forms_get_rgbmode},
Guido van Rossum7066dd71992-09-17 17:54:56 +00002543 {"show_errors", forms_show_errors},
2544 {"set_font_name", forms_set_font_name},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002545 {NULL, NULL} /* sentinel */
2546};
2547
2548void
2549initfl()
2550{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002551 Py_InitModule("fl", forms_methods);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002552 foreground();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002553 fl_init();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002554}
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002555
2556
2557