blob: e3bf3881dd5994318733cf974ce3879500eec519 [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 Rossumfd71b9e2000-06-30 23:50:40 +00007Copyright (c) 2000, BeOpen.com.
8Copyright (c) 1995-2000, Corporation for National Research Initiatives.
9Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
10All rights reserved.
Guido van Rossumc7df79e1991-08-07 11:32:58 +000011
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000012See the file "Misc/COPYRIGHT" for information on usage and
13redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumc7df79e1991-08-07 11:32:58 +000014
15******************************************************************/
16
17/* FL module -- interface to Mark Overmars' FORMS Library. */
18
Roger E. Masse7ba4c071997-01-03 22:17:11 +000019/* This code works with FORMS version 2.2 (if you defined
20 OBSOLETE_FORMS_CALLS), and 2.3.
Guido van Rossumf1dc5661993-07-05 10:31:29 +000021 FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
22 /pub/SGI/FORMS. */
Guido van Rossumddc0d3e1991-12-10 13:56:42 +000023
Jack Jansen743db361992-08-13 14:13:11 +000024/* A half-hearted attempt has been made to allow programs using this
25 * module to exploit parallelism (through the threads module). No provisions
26 * have been made for multiple threads to use this module at the same time,
27 * though. So, a program with a forms thread and a non-forms thread will work
28 * fine but a program with two threads using forms will probably crash (unless
29 * the program takes precaution to ensure that only one thread can be in
30 * this module at any time). This will have to be fixed some time.
31 * (A fix will probably also have to synchronise with the gl module).
32 */
33
Roger E. Masse7ba4c071997-01-03 22:17:11 +000034#include "Python.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000035#include "forms.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000036#include "structmember.h"
Guido van Rossumc7df79e1991-08-07 11:32:58 +000037
38/* Generic Forms Objects */
39
40typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000041 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +000042 FL_OBJECT *ob_generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +000043 PyMethodDef *ob_methods;
44 PyObject *ob_callback;
45 PyObject *ob_callback_arg;
Guido van Rossumc7df79e1991-08-07 11:32:58 +000046} genericobject;
47
Roger E. Masse7ba4c071997-01-03 22:17:11 +000048staticforward PyTypeObject GenericObjecttype;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000049
50#define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
51
52/* List of all objects (XXX this should be a hash table on address...) */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000053
Roger E. Masse7ba4c071997-01-03 22:17:11 +000054static PyObject *allgenerics = NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000055static int nfreeslots = 0;
56
57/* Add an object to the list of known objects */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000058
59static void
60knowgeneric(g)
61 genericobject *g;
62{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000063 int i, n;
64 /* Create the list if it doesn't already exist */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000065 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000066 allgenerics = PyList_New(0);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000067 if (allgenerics == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000068 PyErr_Clear();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000069 return; /* Too bad, live without allgenerics... */
Guido van Rossumc7df79e1991-08-07 11:32:58 +000070 }
71 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000072 if (nfreeslots > 0) {
73 /* Search the list for reusable slots (NULL items) */
74 /* XXX This can be made faster! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000075 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000076 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +000077 if (PyList_GetItem(allgenerics, i) == NULL) {
78 Py_INCREF(g);
79 PyList_SetItem(allgenerics, i, (PyObject *)g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000080 nfreeslots--;
81 return;
82 }
83 }
84 /* Strange... no free slots found... */
85 nfreeslots = 0;
86 }
87 /* No free entries, append new item to the end */
Roger E. Masse7ba4c071997-01-03 22:17:11 +000088 PyList_Append(allgenerics, (PyObject *)g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +000089}
90
Guido van Rossum2df7bcc1991-10-20 20:18:26 +000091/* Find an object in the list of known objects */
92
Guido van Rossumc7df79e1991-08-07 11:32:58 +000093static genericobject *
94findgeneric(generic)
95 FL_OBJECT *generic;
96{
97 int i, n;
98 genericobject *g;
99
100 if (allgenerics == NULL)
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000101 return NULL; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000102 n = PyList_Size(allgenerics);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000103 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000104 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000105 if (g != NULL && g->ob_generic == generic)
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000106 return g;
107 }
108 return NULL; /* Unknown object */
109}
110
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000111/* Remove an object from the list of known objects */
112
113static void
114forgetgeneric(g)
115 genericobject *g;
116{
117 int i, n;
118
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000119 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000120 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000121 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000122 g->ob_callback_arg = NULL;
123 if (allgenerics == NULL)
124 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000125 n = PyList_Size(allgenerics);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000126 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000127 if (g == (genericobject *)PyList_GetItem(allgenerics, i)) {
128 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000129 nfreeslots++;
130 break;
131 }
132 }
133}
134
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000135/* Called when a form is about to be freed --
136 remove all the objects that we know about from it. */
137
138static void
139releaseobjects(form)
140 FL_FORM *form;
141{
142 int i, n;
143 genericobject *g;
144
145 if (allgenerics == NULL)
146 return; /* No objects known yet */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000147 n = PyList_Size(allgenerics);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000148 for (i = 0; i < n; i++) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000149 g = (genericobject *)PyList_GetItem(allgenerics, i);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000150 if (g != NULL && g->ob_generic->form == form) {
151 fl_delete_object(g->ob_generic);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000152 /* The object is now unreachable for
153 do_forms and check_forms, so
154 delete it from the list of known objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000155 Py_XDECREF(g->ob_callback);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000156 g->ob_callback = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000157 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000158 g->ob_callback_arg = NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000159 PyList_SetItem(allgenerics, i, (PyObject *)NULL);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000160 nfreeslots++;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000161 }
162 }
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000163}
164
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000165
166/* Methods of generic objects */
167
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000168static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000169generic_set_call_back(g, args)
170 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000171 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000172{
173 if (args == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000174 Py_XDECREF(g->ob_callback);
175 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000176 g->ob_callback = NULL;
177 g->ob_callback_arg = NULL;
178 }
179 else {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000180 if (!PyTuple_Check(args) || PyTuple_Size(args) != 2) {
181 PyErr_BadArgument();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000182 return NULL;
183 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000184 Py_XDECREF(g->ob_callback);
185 Py_XDECREF(g->ob_callback_arg);
186 g->ob_callback = PyTuple_GetItem(args, 0);
187 Py_INCREF(g->ob_callback);
188 g->ob_callback_arg = PyTuple_GetItem(args, 1);
189 Py_INCREF(g->ob_callback_arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000190 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000191 Py_INCREF(Py_None);
192 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000193}
194
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000195static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000196generic_call(g, args, func)
197 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000198 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000199 void (*func)(FL_OBJECT *);
200{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000201 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000202 return NULL;
203 (*func)(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000204 Py_INCREF(Py_None);
205 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000206}
207
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000208static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000209generic_delete_object(g, args)
210 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000211 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000212{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000213 PyObject *res;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000214 res = generic_call(g, args, fl_delete_object);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000215 if (res != NULL)
216 forgetgeneric(g);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000217 return res;
218}
219
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000220static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000221generic_show_object(g, args)
222 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000223 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000224{
225 return generic_call(g, args, fl_show_object);
226}
227
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000228static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000229generic_hide_object(g, args)
230 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000231 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000232{
233 return generic_call(g, args, fl_hide_object);
234}
235
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000236static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000237generic_redraw_object(g, args)
238 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000239 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000240{
241 return generic_call(g, args, fl_redraw_object);
242}
243
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000244#ifdef OBSOLETE_FORMS_CALLS
245
246 /* (un)freeze_object() are obsolete in FORMS 2.2 and unsupported
247 in 2.3. Since there's no foolproof way to tell which version we're
248 using, we omit them unconditionally. */
249
250static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000251generic_freeze_object(g, args)
252 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000253 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000254{
255 return generic_call(g, args, fl_freeze_object);
256}
257
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000258static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000259generic_unfreeze_object(g, args)
260 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000261 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000262{
263 return generic_call(g, args, fl_unfreeze_object);
264}
265
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000266#endif /* OBSOLETE_FORMS_CALLS */
267
268static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000269generic_activate_object(g, args)
270 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000271 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000272{
273 return generic_call(g, args, fl_activate_object);
274}
275
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000276static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000277generic_deactivate_object(g, args)
278 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000279 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000280{
281 return generic_call(g, args, fl_deactivate_object);
282}
283
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000284static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000285generic_set_object_shortcut(g, args)
286 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000287 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000288{
289 char *str;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000290 if (!PyArg_Parse(args, "s", &str))
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000291 return NULL;
292 fl_set_object_shortcut(g->ob_generic, str);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000293 Py_INCREF(Py_None);
294 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000295}
296
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000297static PyMethodDef generic_methods[] = {
298 {"set_call_back", (PyCFunction)generic_set_call_back},
299 {"delete_object", (PyCFunction)generic_delete_object},
300 {"show_object", (PyCFunction)generic_show_object},
301 {"hide_object", (PyCFunction)generic_hide_object},
302 {"redraw_object", (PyCFunction)generic_redraw_object},
303#ifdef OBSOLETE_FORMS_CALLS
304 {"freeze_object", (PyCFunction)generic_freeze_object},
305 {"unfreeze_object", (PyCFunction)generic_unfreeze_object},
306#endif
307 {"activate_object", (PyCFunction)generic_activate_object},
308 {"deactivate_object", (PyCFunction)generic_deactivate_object},
309 {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut},
Guido van Rossum03747111991-08-08 12:10:01 +0000310 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000311};
312
313static void
314generic_dealloc(g)
315 genericobject *g;
316{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000317 fl_free_object(g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000318 Py_XDECREF(g->ob_callback);
319 Py_XDECREF(g->ob_callback_arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +0000320 PyObject_Del(g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000321}
322
323#define OFF(x) offsetof(FL_OBJECT, x)
324
325static struct memberlist generic_memberlist[] = {
326 {"objclass", T_INT, OFF(objclass), RO},
327 {"type", T_INT, OFF(type), RO},
328 {"boxtype", T_INT, OFF(boxtype)},
329 {"x", T_FLOAT, OFF(x)},
330 {"y", T_FLOAT, OFF(y)},
331 {"w", T_FLOAT, OFF(w)},
332 {"h", T_FLOAT, OFF(h)},
333 {"col1", T_INT, OFF(col1)},
334 {"col2", T_INT, OFF(col2)},
335 {"align", T_INT, OFF(align)},
336 {"lcol", T_INT, OFF(lcol)},
337 {"lsize", T_FLOAT, OFF(lsize)},
338 /* "label" is treated specially! */
339 {"lstyle", T_INT, OFF(lstyle)},
340 {"pushed", T_INT, OFF(pushed), RO},
341 {"focus", T_INT, OFF(focus), RO},
342 {"belowmouse", T_INT, OFF(belowmouse),RO},
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000343/* {"frozen", T_INT, OFF(frozen), RO}, */
Guido van Rossum7066dd71992-09-17 17:54:56 +0000344 {"active", T_INT, OFF(active)},
345 {"input", T_INT, OFF(input)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000346 {"visible", T_INT, OFF(visible), RO},
Guido van Rossum7066dd71992-09-17 17:54:56 +0000347 {"radio", T_INT, OFF(radio)},
348 {"automatic", T_INT, OFF(automatic)},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000349 {NULL} /* Sentinel */
350};
351
Guido van Rossumd97f0481991-11-19 20:26:28 +0000352#undef OFF
353
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000354static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000355generic_getattr(g, name)
356 genericobject *g;
357 char *name;
358{
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000359 PyObject *meth;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000360
361 /* XXX Ought to special-case name "__methods__" */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000362 if (g-> ob_methods) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000363 meth = Py_FindMethod(g->ob_methods, (PyObject *)g, name);
Guido van Rossum03747111991-08-08 12:10:01 +0000364 if (meth != NULL) return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000365 PyErr_Clear();
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000366 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000367
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000368 meth = Py_FindMethod(generic_methods, (PyObject *)g, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000369 if (meth != NULL)
370 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000371 PyErr_Clear();
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000372
373 /* "label" is an exception, getmember only works for char pointers,
374 not for char arrays */
375 if (strcmp(name, "label") == 0)
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000376 return PyString_FromString(g->ob_generic->label);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000377
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000378 return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000379}
380
381static int
382generic_setattr(g, name, v)
383 genericobject *g;
384 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000385 PyObject *v;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000386{
387 int ret;
388
389 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000390 PyErr_SetString(PyExc_TypeError,
391 "can't delete forms object attributes");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000392 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000393 }
394
395 /* "label" is an exception: setmember doesn't set strings;
396 and FORMS wants you to call a function to set the label */
397 if (strcmp(name, "label") == 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000398 if (!PyString_Check(v)) {
399 PyErr_SetString(PyExc_TypeError,
400 "label attr must be string");
Guido van Rossum3dd8c981992-06-03 17:07:49 +0000401 return -1;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000402 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000403 fl_set_object_label(g->ob_generic, PyString_AsString(v));
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000404 return 0;
405 }
406
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000407 ret = PyMember_Set((char *)g->ob_generic, generic_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000408
409 /* Rather than calling all the various set_object_* functions,
410 we call fl_redraw_object here. This is sometimes redundant
411 but I doubt that's a big problem */
412 if (ret == 0)
413 fl_redraw_object(g->ob_generic);
414
415 return ret;
416}
417
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000418static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000419generic_repr(g)
420 genericobject *g;
421{
422 char buf[100];
Fred Drakea44d3532000-06-30 15:01:00 +0000423 sprintf(buf, "<FORMS_object at %p, objclass=%d>",
424 g, g->ob_generic->objclass);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000425 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000426}
427
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000428static PyTypeObject GenericObjecttype = {
429 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000430 0, /*ob_size*/
431 "FORMS_object", /*tp_name*/
432 sizeof(genericobject), /*tp_size*/
433 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000434 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000435 (destructor)generic_dealloc, /*tp_dealloc*/
436 0, /*tp_print*/
437 (getattrfunc)generic_getattr, /*tp_getattr*/
438 (setattrfunc)generic_setattr, /*tp_setattr*/
439 0, /*tp_compare*/
440 (reprfunc)generic_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000441};
442
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000443static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000444newgenericobject(generic, methods)
445 FL_OBJECT *generic;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000446 PyMethodDef *methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000447{
448 genericobject *g;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000449 g = PyObject_New(genericobject, &GenericObjecttype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000450 if (g == NULL)
451 return NULL;
452 g-> ob_generic = generic;
453 g->ob_methods = methods;
454 g->ob_callback = NULL;
455 g->ob_callback_arg = NULL;
456 knowgeneric(g);
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000457 return (PyObject *)g;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000458}
459
460/**********************************************************************/
461/* Some common calling sequences */
462
463/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000464static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000465call_forms_INf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000466 void (*func)(FL_OBJECT *, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000467 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000468 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000469{
Guido van Rossum03747111991-08-08 12:10:01 +0000470 float parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000471
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000472 if (!PyArg_Parse(args, "f", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000473
Guido van Rossum03747111991-08-08 12:10:01 +0000474 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000475
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000476 Py_INCREF(Py_None);
477 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000478}
479
480/* void func (object, float) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000481static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000482call_forms_INfINf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000483 void (*func)(FL_OBJECT *, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +0000484 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000485 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000486{
Guido van Rossum03747111991-08-08 12:10:01 +0000487 float par1, par2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000488
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000489 if (!PyArg_Parse(args, "(ff)", &par1, &par2)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000490
Guido van Rossum03747111991-08-08 12:10:01 +0000491 (*func) (obj, par1, par2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000492
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000493 Py_INCREF(Py_None);
494 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000495}
496
497/* void func (object, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000498static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000499call_forms_INi (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000500 void (*func)(FL_OBJECT *, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000501 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000502 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000503{
Guido van Rossum03747111991-08-08 12:10:01 +0000504 int parameter;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000505
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000506 if (!PyArg_Parse(args, "i", &parameter)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000507
Guido van Rossum03747111991-08-08 12:10:01 +0000508 (*func) (obj, parameter);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000509
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000510 Py_INCREF(Py_None);
511 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000512}
513
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000514/* void func (object, char) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000515static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000516call_forms_INc (func, obj, args)
517 void (*func)(FL_OBJECT *, int);
518 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000519 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000520{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000521 char *a;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000522
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000523 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000524
Guido van Rossumfc58e581992-01-27 16:45:55 +0000525 (*func) (obj, a[0]);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000526
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000527 Py_INCREF(Py_None);
528 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000529}
530
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000531/* void func (object, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000532static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000533call_forms_INstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000534 void (*func)(FL_OBJECT *, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000535 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000536 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000537{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000538 char *a;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000539
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000540 if (!PyArg_Parse(args, "s", &a)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000541
Guido van Rossumfc58e581992-01-27 16:45:55 +0000542 (*func) (obj, a);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000543
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000544 Py_INCREF(Py_None);
545 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000546}
547
548
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000549/* void func (object, int, string) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000550static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000551call_forms_INiINstr (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000552 void (*func)(FL_OBJECT *, int, char *);
Guido van Rossum03747111991-08-08 12:10:01 +0000553 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000554 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000555{
Guido van Rossumfc58e581992-01-27 16:45:55 +0000556 char *b;
557 int a;
Guido van Rossum03747111991-08-08 12:10:01 +0000558
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000559 if (!PyArg_Parse(args, "(is)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000560
Guido van Rossumfc58e581992-01-27 16:45:55 +0000561 (*func) (obj, a, b);
Guido van Rossum03747111991-08-08 12:10:01 +0000562
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000563 Py_INCREF(Py_None);
564 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000565}
566
Guido van Rossum03747111991-08-08 12:10:01 +0000567#ifdef UNUSED
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000568/* void func (object, int, int) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000569static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000570call_forms_INiINi (func, obj, args)
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000571 void (*func)(FL_OBJECT *, int, int);
Guido van Rossum03747111991-08-08 12:10:01 +0000572 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000573 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000574{
Guido van Rossum03747111991-08-08 12:10:01 +0000575 int par1, par2;
576
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000577 if (!PyArg_Parse(args, "(ii)", &par1, &par2)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000578
579 (*func) (obj, par1, par2);
580
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000581 Py_INCREF(Py_None);
582 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000583}
Guido van Rossum03747111991-08-08 12:10:01 +0000584#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000585
586/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000587static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000588call_forms_Ri (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000589 int (*func)(FL_OBJECT *);
590 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000591 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000592{
Guido van Rossum03747111991-08-08 12:10:01 +0000593 int retval;
594
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000595 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000596
597 retval = (*func) (obj);
598
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000599 return PyInt_FromLong ((long) retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000600}
601
602/* char * func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000603static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000604call_forms_Rstr (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000605 char * (*func)(FL_OBJECT *);
606 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000607 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000608{
Guido van Rossum03747111991-08-08 12:10:01 +0000609 char *str;
610
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000611 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000612
613 str = (*func) (obj);
614
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000615 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000616 Py_INCREF(Py_None);
617 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000618 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000619 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000620}
621
622/* int func (object) */
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000623static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000624call_forms_Rf (func, obj, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000625 float (*func)(FL_OBJECT *);
626 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000627 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000628{
Guido van Rossum03747111991-08-08 12:10:01 +0000629 float retval;
630
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000631 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000632
633 retval = (*func) (obj);
634
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000635 return PyFloat_FromDouble (retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000636}
637
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000638static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000639call_forms_OUTfOUTf (func, obj, args)
Guido van Rossumabe58351991-08-08 12:34:44 +0000640 void (*func)(FL_OBJECT *, float *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000641 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 Rossumaa7ca2d1992-09-03 20:37:02 +0000644 float f1, f2;
Guido van Rossum03747111991-08-08 12:10:01 +0000645
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000646 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000647
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000648 (*func) (obj, &f1, &f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000649
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000650 return Py_BuildValue("(ff)", f1, f2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000651}
652
Guido van Rossum03747111991-08-08 12:10:01 +0000653#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000654static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000655call_forms_OUTf (func, obj, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000656 void (*func)(FL_OBJECT *, float *);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000657 FL_OBJECT *obj;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000658 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000659{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000660 float f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000661
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000662 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000663
664 (*func) (obj, &f);
665
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000666 return PyFloat_FromDouble (f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000667}
Guido van Rossum03747111991-08-08 12:10:01 +0000668#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000669
670/**********************************************************************/
671/* Class : browser */
672
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000673static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000674set_browser_topline(g, args)
675 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000676 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000677{
Guido van Rossum03747111991-08-08 12:10:01 +0000678 return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000679}
680
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000681static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000682clear_browser(g, args)
683 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000684 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000685{
Guido van Rossum03747111991-08-08 12:10:01 +0000686 return generic_call (g, args, fl_clear_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000687}
688
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000689static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000690add_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000691 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000692 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000693{
Guido van Rossum03747111991-08-08 12:10:01 +0000694 return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000695}
696
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000697static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000698addto_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000699 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000700 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000701{
Guido van Rossum03747111991-08-08 12:10:01 +0000702 return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000703}
704
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000705static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000706insert_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000707 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000708 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000709{
Guido van Rossum03747111991-08-08 12:10:01 +0000710 return call_forms_INiINstr (fl_insert_browser_line,
711 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000712}
713
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000714static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000715delete_browser_line (g, args)
716 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000717 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000718{
Guido van Rossum03747111991-08-08 12:10:01 +0000719 return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000720}
721
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000722static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000723replace_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000724 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000725 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000726{
Guido van Rossum03747111991-08-08 12:10:01 +0000727 return call_forms_INiINstr (fl_replace_browser_line,
728 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000729}
730
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000731static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000732get_browser_line(g, args)
733 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000734 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000735{
736 int i;
737 char *str;
738
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000739 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000740 return NULL;
741
742 str = fl_get_browser_line (g->ob_generic, i);
743
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000744 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000745 Py_INCREF(Py_None);
746 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +0000747 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000748 return PyString_FromString (str);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000749}
750
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000751static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000752load_browser (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000753 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000754 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000755{
Guido van Rossumabe58351991-08-08 12:34:44 +0000756 /* XXX strictly speaking this is wrong since fl_load_browser
757 XXX returns int, not void */
Guido van Rossum03747111991-08-08 12:10:01 +0000758 return call_forms_INstr (fl_load_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000759}
760
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000761static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000762get_browser_maxline(g, args)
763 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000764 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000765{
Guido van Rossum03747111991-08-08 12:10:01 +0000766 return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000767}
768
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000769static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000770select_browser_line (g, args)
771 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000772 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000773{
Guido van Rossum03747111991-08-08 12:10:01 +0000774 return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000775}
776
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000777static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000778deselect_browser_line (g, args)
779 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000780 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000781{
Guido van Rossum03747111991-08-08 12:10:01 +0000782 return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000783}
784
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000785static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000786deselect_browser (g, args)
787 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000788 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000789{
Guido van Rossum03747111991-08-08 12:10:01 +0000790 return generic_call (g, args, fl_deselect_browser);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000791}
792
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000793static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000794isselected_browser_line (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000795 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000796 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000797{
798 int i, j;
Guido van Rossum03747111991-08-08 12:10:01 +0000799
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000800 if (!PyArg_Parse(args, "i", &i))
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000801 return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +0000802
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000803 j = fl_isselected_browser_line (g->ob_generic, i);
Guido van Rossum03747111991-08-08 12:10:01 +0000804
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000805 return PyInt_FromLong (j);
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 +0000809get_browser (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{
Guido van Rossum03747111991-08-08 12:10:01 +0000813 return call_forms_Ri (fl_get_browser, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000814}
815
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000816static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000817set_browser_fontsize (g, args)
818 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000819 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000820{
Guido van Rossum03747111991-08-08 12:10:01 +0000821 return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000822}
823
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000824static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000825set_browser_fontstyle (g, args)
826 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000827 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000828{
Guido van Rossum03747111991-08-08 12:10:01 +0000829 return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000830}
831
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000832static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000833set_browser_specialkey (g, args)
834 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000835 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000836{
837 return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
838}
839
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000840static PyMethodDef browser_methods[] = {
841 {"set_browser_topline", (PyCFunction)set_browser_topline},
842 {"clear_browser", (PyCFunction)clear_browser},
843 {"add_browser_line", (PyCFunction)add_browser_line},
844 {"addto_browser", (PyCFunction)addto_browser},
845 {"insert_browser_line", (PyCFunction)insert_browser_line},
846 {"delete_browser_line", (PyCFunction)delete_browser_line},
847 {"replace_browser_line", (PyCFunction)replace_browser_line},
848 {"get_browser_line", (PyCFunction)get_browser_line},
849 {"load_browser", (PyCFunction)load_browser},
850 {"get_browser_maxline", (PyCFunction)get_browser_maxline},
851 {"select_browser_line", (PyCFunction)select_browser_line},
852 {"deselect_browser_line", (PyCFunction)deselect_browser_line},
853 {"deselect_browser", (PyCFunction)deselect_browser},
854 {"isselected_browser_line", (PyCFunction)isselected_browser_line},
855 {"get_browser", (PyCFunction)get_browser},
856 {"set_browser_fontsize", (PyCFunction)set_browser_fontsize},
857 {"set_browser_fontstyle", (PyCFunction)set_browser_fontstyle},
858 {"set_browser_specialkey", (PyCFunction)set_browser_specialkey},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000859 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000860};
861
862/* Class: button */
863
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000864static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000865set_button(g, args)
866 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000867 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000868{
Guido van Rossum03747111991-08-08 12:10:01 +0000869 return call_forms_INi (fl_set_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000870}
871
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000872static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000873get_button(g, args)
874 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000875 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000876{
Guido van Rossum03747111991-08-08 12:10:01 +0000877 return call_forms_Ri (fl_get_button, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000878}
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000879
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000880static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000881get_button_numb(g, args)
882 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000883 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +0000884{
885 return call_forms_Ri (fl_get_button_numb, g-> ob_generic, args);
886}
887
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000888static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000889set_button_shortcut(g, args)
890 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000891 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +0000892{
893 return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
894}
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000895
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000896static PyMethodDef button_methods[] = {
897 {"set_button", (PyCFunction)set_button},
898 {"get_button", (PyCFunction)get_button},
899 {"get_button_numb", (PyCFunction)get_button_numb},
900 {"set_button_shortcut", (PyCFunction)set_button_shortcut},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000901 {NULL, NULL} /* sentinel */
902};
903
904/* Class: choice */
905
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000906static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000907set_choice(g, args)
908 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000909 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000910{
Guido van Rossum03747111991-08-08 12:10:01 +0000911 return call_forms_INi (fl_set_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000912}
913
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000914static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000915get_choice(g, args)
916 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000917 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000918{
Guido van Rossum03747111991-08-08 12:10:01 +0000919 return call_forms_Ri (fl_get_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000920}
921
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000922static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000923clear_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000924 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000925 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000926{
Guido van Rossum03747111991-08-08 12:10:01 +0000927 return generic_call (g, args, fl_clear_choice);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000928}
929
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000930static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000931addto_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000932 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000933 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000934{
Guido van Rossum03747111991-08-08 12:10:01 +0000935 return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000936}
937
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000938static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000939replace_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000940 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000941 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000942{
Guido van Rossum03747111991-08-08 12:10:01 +0000943 return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000944}
945
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000946static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000947delete_choice (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000948 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000949 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000950{
Guido van Rossum03747111991-08-08 12:10:01 +0000951 return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000952}
953
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000954static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000955get_choice_text (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000956 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000957 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +0000958{
Guido van Rossum03747111991-08-08 12:10:01 +0000959 return call_forms_Rstr (fl_get_choice_text, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000960}
961
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000962static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000963set_choice_fontsize (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000964 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000965 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000966{
Guido van Rossum03747111991-08-08 12:10:01 +0000967 return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000968}
969
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000970static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000971set_choice_fontstyle (g, args)
Guido van Rossum03747111991-08-08 12:10:01 +0000972 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000973 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000974{
Guido van Rossum03747111991-08-08 12:10:01 +0000975 return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000976}
977
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000978static PyMethodDef choice_methods[] = {
979 {"set_choice", (PyCFunction)set_choice},
980 {"get_choice", (PyCFunction)get_choice},
981 {"clear_choice", (PyCFunction)clear_choice},
982 {"addto_choice", (PyCFunction)addto_choice},
983 {"replace_choice", (PyCFunction)replace_choice},
984 {"delete_choice", (PyCFunction)delete_choice},
985 {"get_choice_text", (PyCFunction)get_choice_text},
986 {"set_choice_fontsize", (PyCFunction)set_choice_fontsize},
987 {"set_choice_fontstyle",(PyCFunction)set_choice_fontstyle},
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000988 {NULL, NULL} /* sentinel */
989};
990
991/* Class : Clock */
992
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000993static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000994get_clock(g, args)
995 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +0000996 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000997{
998 int i0, i1, i2;
Guido van Rossumc7df79e1991-08-07 11:32:58 +0000999
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001000 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001001 return NULL;
1002
1003 fl_get_clock (g->ob_generic, &i0, &i1, &i2);
1004
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001005 return Py_BuildValue("(iii)", i0, i1, i2);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001006}
1007
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001008static PyMethodDef clock_methods[] = {
1009 {"get_clock", (PyCFunction)get_clock},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001010 {NULL, NULL} /* sentinel */
1011};
1012
1013/* CLass : Counters */
1014
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001015static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001016get_counter_value(g, args)
1017 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001018 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001019{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001020 return call_forms_Rf (fl_get_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001021}
1022
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001023static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001024set_counter_value (g, args)
1025 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001026 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001027{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001028 return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001029}
1030
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001031static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001032set_counter_precision (g, args)
1033 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001034 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001035{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001036 return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001037}
1038
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001039static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001040set_counter_bounds (g, args)
1041 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001042 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001043{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001044 return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001045}
1046
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001047static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001048set_counter_step (g, args)
1049 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001050 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001051{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001052 return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001053}
1054
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001055static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001056set_counter_return (g, args)
1057 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001058 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001059{
Guido van Rossum03747111991-08-08 12:10:01 +00001060 return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001061}
1062
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001063static PyMethodDef counter_methods[] = {
1064 {"set_counter_value", (PyCFunction)set_counter_value},
1065 {"get_counter_value", (PyCFunction)get_counter_value},
1066 {"set_counter_bounds", (PyCFunction)set_counter_bounds},
1067 {"set_counter_step", (PyCFunction)set_counter_step},
1068 {"set_counter_precision", (PyCFunction)set_counter_precision},
1069 {"set_counter_return", (PyCFunction)set_counter_return},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001070 {NULL, NULL} /* sentinel */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001071};
1072
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001073
1074/* Class: Dials */
1075
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001076static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001077get_dial_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001078 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001079 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001080{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001081 return call_forms_Rf (fl_get_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001082}
1083
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001084static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001085set_dial_value (g, args)
1086 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001087 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001088{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001089 return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001090}
1091
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001092static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001093set_dial_bounds (g, args)
1094 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001095 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001096{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001097 return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001098}
1099
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001100static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001101get_dial_bounds (g, args)
1102 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001103 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001104{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001105 return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001106}
1107
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001108static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001109set_dial_step (g, args)
1110 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001111 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001112{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001113 return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001114}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001115
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001116static PyMethodDef dial_methods[] = {
1117 {"set_dial_value", (PyCFunction)set_dial_value},
1118 {"get_dial_value", (PyCFunction)get_dial_value},
1119 {"set_dial_bounds", (PyCFunction)set_dial_bounds},
1120 {"get_dial_bounds", (PyCFunction)get_dial_bounds},
1121 {"set_dial_step", (PyCFunction)set_dial_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001122 {NULL, NULL} /* sentinel */
1123};
1124
1125/* Class : Input */
1126
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001127static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001128set_input (g, args)
1129 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001130 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001131{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001132 return call_forms_INstr (fl_set_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001133}
1134
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001135static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001136get_input (g, args)
1137 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001138 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001139{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001140 return call_forms_Rstr (fl_get_input, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001141}
1142
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001143static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001144set_input_color (g, args)
1145 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001146 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001147{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001148 return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001149}
1150
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001151static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001152set_input_return (g, args)
1153 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001154 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001155{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001156 return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001157}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001158
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001159static PyMethodDef input_methods[] = {
1160 {"set_input", (PyCFunction)set_input},
1161 {"get_input", (PyCFunction)get_input},
1162 {"set_input_color", (PyCFunction)set_input_color},
1163 {"set_input_return", (PyCFunction)set_input_return},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001164 {NULL, NULL} /* sentinel */
1165};
1166
1167
1168/* Class : Menu */
1169
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001170static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001171set_menu (g, args)
1172 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001173 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001174{
Guido van Rossumabe58351991-08-08 12:34:44 +00001175 return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001176}
1177
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001178static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001179get_menu (g, args)
1180 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001181 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001182{
Guido van Rossumabe58351991-08-08 12:34:44 +00001183 /* XXX strictly speaking this is wrong since fl_get_menu
1184 XXX returns long, not int */
1185 return call_forms_Ri (fl_get_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001186}
1187
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001188static PyObject *
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001189get_menu_text (g, args)
1190 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001191 PyObject *args;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001192{
1193 return call_forms_Rstr (fl_get_menu_text, g-> ob_generic, args);
1194}
1195
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001196static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001197addto_menu (g, args)
1198 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001199 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001200{
Guido van Rossumabe58351991-08-08 12:34:44 +00001201 return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001202}
1203
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001204static PyMethodDef menu_methods[] = {
1205 {"set_menu", (PyCFunction)set_menu},
1206 {"get_menu", (PyCFunction)get_menu},
1207 {"get_menu_text", (PyCFunction)get_menu_text},
1208 {"addto_menu", (PyCFunction)addto_menu},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001209 {NULL, NULL} /* sentinel */
1210};
1211
1212
1213/* Class: Sliders */
1214
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001215static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001216get_slider_value(g, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001217 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001218 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001219{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001220 return call_forms_Rf (fl_get_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001221}
1222
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001223static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001224set_slider_value (g, args)
1225 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001226 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001227{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001228 return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001229}
1230
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001231static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001232set_slider_bounds (g, args)
1233 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001234 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001235{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001236 return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001237}
1238
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001239static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001240get_slider_bounds (g, args)
1241 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001242 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001243{
1244 return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic, args);
1245}
1246
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001247static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001248set_slider_return (g, args)
1249 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001250 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001251{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001252 return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001253}
1254
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001255static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001256set_slider_size (g, args)
1257 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001258 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001259{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001260 return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001261}
1262
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001263static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001264set_slider_precision (g, args)
1265 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001266 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001267{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001268 return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001269}
1270
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001271static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001272set_slider_step (g, args)
1273 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001274 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001275{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001276 return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001277}
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00001278
1279
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001280static PyMethodDef slider_methods[] = {
1281 {"set_slider_value", (PyCFunction)set_slider_value},
1282 {"get_slider_value", (PyCFunction)get_slider_value},
1283 {"set_slider_bounds", (PyCFunction)set_slider_bounds},
1284 {"get_slider_bounds", (PyCFunction)get_slider_bounds},
1285 {"set_slider_return", (PyCFunction)set_slider_return},
1286 {"set_slider_size", (PyCFunction)set_slider_size},
1287 {"set_slider_precision",(PyCFunction)set_slider_precision},
1288 {"set_slider_step", (PyCFunction)set_slider_step},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001289 {NULL, NULL} /* sentinel */
1290};
1291
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001292static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001293set_positioner_xvalue (g, args)
1294 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001295 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001296{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001297 return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001298}
1299
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001300static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001301set_positioner_xbounds (g, args)
1302 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001303 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001304{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001305 return call_forms_INfINf (fl_set_positioner_xbounds,
1306 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001307}
1308
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001309static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001310set_positioner_yvalue (g, args)
1311 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001312 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001313{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001314 return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001315}
1316
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001317static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001318set_positioner_ybounds (g, args)
1319 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001320 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001321{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001322 return call_forms_INfINf (fl_set_positioner_ybounds,
1323 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001324}
1325
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001326static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001327get_positioner_xvalue (g, args)
1328 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001329 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001330{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001331 return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001332}
1333
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001334static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001335get_positioner_xbounds (g, args)
1336 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001337 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001338{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001339 return call_forms_OUTfOUTf (fl_get_positioner_xbounds,
1340 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001341}
1342
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001343static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001344get_positioner_yvalue (g, args)
1345 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001346 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001347{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001348 return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001349}
1350
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001351static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001352get_positioner_ybounds (g, args)
1353 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001354 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001355{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001356 return call_forms_OUTfOUTf (fl_get_positioner_ybounds,
1357 g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001358}
1359
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001360static PyMethodDef positioner_methods[] = {
1361 {"set_positioner_xvalue", (PyCFunction)set_positioner_xvalue},
1362 {"set_positioner_yvalue", (PyCFunction)set_positioner_yvalue},
1363 {"set_positioner_xbounds", (PyCFunction)set_positioner_xbounds},
1364 {"set_positioner_ybounds", (PyCFunction)set_positioner_ybounds},
1365 {"get_positioner_xvalue", (PyCFunction)get_positioner_xvalue},
1366 {"get_positioner_yvalue", (PyCFunction)get_positioner_yvalue},
1367 {"get_positioner_xbounds", (PyCFunction)get_positioner_xbounds},
1368 {"get_positioner_ybounds", (PyCFunction)get_positioner_ybounds},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001369 {NULL, NULL} /* sentinel */
1370};
1371
1372/* Class timer */
1373
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001374static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001375set_timer (g, args)
1376 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001377 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001378{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001379 return call_forms_INf (fl_set_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001380}
1381
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001382static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001383get_timer (g, args)
1384 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001385 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001386{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001387 return call_forms_Rf (fl_get_timer, g-> ob_generic, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001388}
1389
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001390static PyMethodDef timer_methods[] = {
1391 {"set_timer", (PyCFunction)set_timer},
1392 {"get_timer", (PyCFunction)get_timer},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001393 {NULL, NULL} /* sentinel */
1394};
1395
1396/* Form objects */
1397
1398typedef struct {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001399 PyObject_HEAD
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001400 FL_FORM *ob_form;
1401} formobject;
1402
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001403staticforward PyTypeObject Formtype;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001404
1405#define is_formobject(v) ((v)->ob_type == &Formtype)
1406
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001407static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001408form_show_form(f, args)
1409 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001410 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001411{
1412 int place, border;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001413 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001414 if (!PyArg_Parse(args, "(iis)", &place, &border, &name))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001415 return NULL;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001416 fl_show_form(f->ob_form, place, border, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001417 Py_INCREF(Py_None);
1418 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001419}
1420
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001421static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001422form_call(func, f, args)
1423 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001424 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001425 void (*func)(FL_FORM *);
1426{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001427 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001428
1429 (*func)(f);
1430
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001431 Py_INCREF(Py_None);
1432 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001433}
1434
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001435static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001436form_call_INiINi(func, f, args)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001437 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001438 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001439 void (*func)(FL_FORM *, int, int);
1440{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001441 int a, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001442
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001443 if (!PyArg_Parse(args, "(ii)", &a, &b)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001444
1445 (*func)(f, a, b);
1446
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001447 Py_INCREF(Py_None);
1448 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001449}
1450
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001451static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001452form_call_INfINf(func, f, args)
1453 FL_FORM *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001454 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001455 void (*func)(FL_FORM *, float, float);
1456{
1457 float a, b;
1458
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001459 if (!PyArg_Parse(args, "(ff)", &a, &b)) return NULL;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001460
1461 (*func)(f, a, b);
1462
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001463 Py_INCREF(Py_None);
1464 return Py_None;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001465}
1466
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001467static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001468form_hide_form(f, args)
1469 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001470 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001471{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001472 return form_call(fl_hide_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001473}
1474
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001475static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001476form_redraw_form(f, args)
1477 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001478 PyObject *args;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001479{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001480 return form_call(fl_redraw_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001481}
1482
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001483static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001484form_set_form_position(f, args)
1485 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001486 PyObject *args;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001487{
1488 return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
1489}
1490
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001491static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001492form_set_form_size(f, args)
1493 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001494 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001495{
1496 return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
1497}
1498
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001499static PyObject *
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001500form_scale_form(f, args)
1501 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001502 PyObject *args;
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001503{
1504 return form_call_INfINf(fl_scale_form, f-> ob_form, args);
1505}
1506
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001507static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001508generic_add_object(f, args, func, internal_methods)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001509 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001510 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001511 FL_OBJECT *(*func)(int, float, float, float, float, char*);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001512 PyMethodDef *internal_methods;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001513{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001514 int type;
1515 float x, y, w, h;
Guido van Rossumfc58e581992-01-27 16:45:55 +00001516 char *name;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001517 FL_OBJECT *obj;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001518
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001519 if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001520 return NULL;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001521
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001522 fl_addto_form (f-> ob_form);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001523
Guido van Rossumfc58e581992-01-27 16:45:55 +00001524 obj = (*func) (type, x, y, w, h, name);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001525
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001526 fl_end_form();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001527
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001528 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001529 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001530 return NULL;
1531 }
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001532
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001533 return newgenericobject (obj, internal_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001534}
1535
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001536static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001537form_add_button(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001538 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001539 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001540{
1541 return generic_add_object(f, args, fl_add_button, button_methods);
1542}
1543
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001544static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001545form_add_lightbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001546 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001547 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001548{
1549 return generic_add_object(f, args, fl_add_lightbutton, button_methods);
1550}
1551
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001552static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001553form_add_roundbutton(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001554 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001555 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001556{
1557 return generic_add_object(f, args, fl_add_roundbutton, button_methods);
1558}
1559
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001560static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001561form_add_menu (f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001562 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001563 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001564{
1565 return generic_add_object(f, args, fl_add_menu, menu_methods);
1566}
1567
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001568static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001569form_add_slider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001570 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001571 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001572{
1573 return generic_add_object(f, args, fl_add_slider, slider_methods);
1574}
1575
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001576static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001577form_add_valslider(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001578 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001579 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001580{
1581 return generic_add_object(f, args, fl_add_valslider, slider_methods);
1582}
1583
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001584static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001585form_add_dial(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001586 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001587 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001588{
1589 return generic_add_object(f, args, fl_add_dial, dial_methods);
1590}
1591
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001592static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001593form_add_counter(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001594 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001595 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001596{
1597 return generic_add_object(f, args, fl_add_counter, counter_methods);
1598}
1599
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001600static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001601form_add_clock(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001602 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001603 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001604{
1605 return generic_add_object(f, args, fl_add_clock, clock_methods);
1606}
1607
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001608static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001609form_add_box(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001610 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001611 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001612{
Guido van Rossum03747111991-08-08 12:10:01 +00001613 return generic_add_object(f, args, fl_add_box,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001614 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001615}
1616
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001617static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001618form_add_choice(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001619 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001620 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001621{
1622 return generic_add_object(f, args, fl_add_choice, choice_methods);
1623}
1624
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001625static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001626form_add_browser(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001627 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001628 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001629{
1630 return generic_add_object(f, args, fl_add_browser, browser_methods);
1631}
1632
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001633static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001634form_add_positioner(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001635 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001636 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001637{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001638 return generic_add_object(f, args, fl_add_positioner,
1639 positioner_methods);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001640}
1641
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001642static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001643form_add_input(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001644 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001645 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001646{
1647 return generic_add_object(f, args, fl_add_input, input_methods);
1648}
1649
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001650static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001651form_add_text(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001652 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001653 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001654{
Guido van Rossum03747111991-08-08 12:10:01 +00001655 return generic_add_object(f, args, fl_add_text,
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001656 (PyMethodDef *)NULL);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001657}
1658
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001659static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001660form_add_timer(f, args)
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001661 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001662 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001663{
1664 return generic_add_object(f, args, fl_add_timer, timer_methods);
1665}
1666
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001667static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001668form_freeze_form(f, args)
1669 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001670 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001671{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001672 return form_call(fl_freeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001673}
1674
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001675static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001676form_unfreeze_form(f, args)
1677 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001678 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001679{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001680 return form_call(fl_unfreeze_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001681}
1682
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001683static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001684form_activate_form(f, args)
1685 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001686 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001687{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001688 return form_call(fl_activate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001689}
1690
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001691static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001692form_deactivate_form(f, args)
1693 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001694 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001695{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001696 return form_call(fl_deactivate_form, f-> ob_form, args);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001697}
1698
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001699static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001700form_bgn_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001701 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001702 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001703{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001704 FL_OBJECT *obj;
1705
1706 fl_addto_form(f-> ob_form);
1707 obj = fl_bgn_group();
1708 fl_end_form();
1709
1710 if (obj == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001711 PyErr_NoMemory();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001712 return NULL;
1713 }
1714
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001715 return newgenericobject (obj, (PyMethodDef *) NULL);
Guido van Rossum03747111991-08-08 12:10:01 +00001716}
1717
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001718static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001719form_end_group(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001720 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001721 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00001722{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001723 fl_addto_form(f-> ob_form);
Guido van Rossum03747111991-08-08 12:10:01 +00001724 fl_end_group();
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001725 fl_end_form();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001726 Py_INCREF(Py_None);
1727 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00001728}
1729
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001730static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001731forms_find_first_or_last(func, f, args)
Guido van Rossum75cc8981991-08-08 12:07:45 +00001732 FL_OBJECT *(*func)(FL_FORM *, int, float, float);
Guido van Rossum03747111991-08-08 12:10:01 +00001733 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001734 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001735{
1736 int type;
1737 float mx, my;
1738 FL_OBJECT *generic;
1739 genericobject *g;
1740
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001741 if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001742
Guido van Rossum03747111991-08-08 12:10:01 +00001743 generic = (*func) (f-> ob_form, type, mx, my);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001744
1745 if (generic == NULL)
1746 {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001747 Py_INCREF(Py_None);
1748 return Py_None;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001749 }
1750
1751 g = findgeneric(generic);
1752 if (g == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001753 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001754 "forms_find_{first|last} returns unknown object");
Guido van Rossum75cc8981991-08-08 12:07:45 +00001755 return NULL;
1756 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001757 Py_INCREF(g);
1758 return (PyObject *) g;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001759}
1760
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001761static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001762form_find_first(f, args)
Guido van Rossum03747111991-08-08 12:10:01 +00001763 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001764 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00001765{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001766 return forms_find_first_or_last(fl_find_first, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001767}
1768
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001769static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001770form_find_last(f, args)
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{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001774 return forms_find_first_or_last(fl_find_last, f, args);
Guido van Rossum75cc8981991-08-08 12:07:45 +00001775}
1776
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001777static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00001778form_set_object_focus(f, args)
1779 formobject *f;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001780 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001781{
1782 genericobject *g;
1783 if (args == NULL || !is_genericobject(args)) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001784 PyErr_BadArgument();
Guido van Rossum7066dd71992-09-17 17:54:56 +00001785 return NULL;
1786 }
1787 g = (genericobject *)args;
1788 fl_set_object_focus(f->ob_form, g->ob_generic);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001789 Py_INCREF(Py_None);
1790 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00001791}
1792
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001793static PyMethodDef form_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001794/* adm */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001795 {"show_form", (PyCFunction)form_show_form},
1796 {"hide_form", (PyCFunction)form_hide_form},
1797 {"redraw_form", (PyCFunction)form_redraw_form},
1798 {"set_form_position", (PyCFunction)form_set_form_position},
1799 {"set_form_size", (PyCFunction)form_set_form_size},
1800 {"scale_form", (PyCFunction)form_scale_form},
1801 {"freeze_form", (PyCFunction)form_freeze_form},
1802 {"unfreeze_form", (PyCFunction)form_unfreeze_form},
1803 {"activate_form", (PyCFunction)form_activate_form},
1804 {"deactivate_form", (PyCFunction)form_deactivate_form},
1805 {"bgn_group", (PyCFunction)form_bgn_group},
1806 {"end_group", (PyCFunction)form_end_group},
1807 {"find_first", (PyCFunction)form_find_first},
1808 {"find_last", (PyCFunction)form_find_last},
1809 {"set_object_focus", (PyCFunction)form_set_object_focus},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001810
1811/* basic objects */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001812 {"add_button", (PyCFunction)form_add_button},
Guido van Rossumb6775db1994-08-01 11:34:53 +00001813/* {"add_bitmap", (method)form_add_bitmap}, */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001814 {"add_lightbutton", (PyCFunction)form_add_lightbutton},
1815 {"add_roundbutton", (PyCFunction)form_add_roundbutton},
1816 {"add_menu", (PyCFunction)form_add_menu},
1817 {"add_slider", (PyCFunction)form_add_slider},
1818 {"add_positioner", (PyCFunction)form_add_positioner},
1819 {"add_valslider", (PyCFunction)form_add_valslider},
1820 {"add_dial", (PyCFunction)form_add_dial},
1821 {"add_counter", (PyCFunction)form_add_counter},
1822 {"add_box", (PyCFunction)form_add_box},
1823 {"add_clock", (PyCFunction)form_add_clock},
1824 {"add_choice", (PyCFunction)form_add_choice},
1825 {"add_browser", (PyCFunction)form_add_browser},
1826 {"add_input", (PyCFunction)form_add_input},
1827 {"add_timer", (PyCFunction)form_add_timer},
1828 {"add_text", (PyCFunction)form_add_text},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001829 {NULL, NULL} /* sentinel */
1830};
1831
1832static void
1833form_dealloc(f)
1834 formobject *f;
1835{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001836 releaseobjects(f->ob_form);
Guido van Rossum336b5911992-04-08 11:16:25 +00001837 if (f->ob_form->visible)
1838 fl_hide_form(f->ob_form);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001839 fl_free_form(f->ob_form);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001840 PyObject_Del(f);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001841}
1842
Guido van Rossumd97f0481991-11-19 20:26:28 +00001843#define OFF(x) offsetof(FL_FORM, x)
1844
Guido van Rossum32db5e31991-11-12 15:43:18 +00001845static struct memberlist form_memberlist[] = {
1846 {"window", T_LONG, OFF(window), RO},
1847 {"w", T_FLOAT, OFF(w)},
1848 {"h", T_FLOAT, OFF(h)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001849 {"x", T_FLOAT, OFF(x), RO},
1850 {"y", T_FLOAT, OFF(y), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001851 {"deactivated", T_INT, OFF(deactivated)},
Guido van Rossum7066dd71992-09-17 17:54:56 +00001852 {"visible", T_INT, OFF(visible), RO},
1853 {"frozen", T_INT, OFF(frozen), RO},
Guido van Rossum32db5e31991-11-12 15:43:18 +00001854 {"doublebuf", T_INT, OFF(doublebuf)},
1855 {NULL} /* Sentinel */
1856};
1857
Guido van Rossumd97f0481991-11-19 20:26:28 +00001858#undef OFF
1859
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001860static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001861form_getattr(f, name)
1862 formobject *f;
1863 char *name;
1864{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001865 PyObject *meth;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001866
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001867 meth = Py_FindMethod(form_methods, (PyObject *)f, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001868 if (meth != NULL)
1869 return meth;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001870 PyErr_Clear();
1871 return PyMember_Get((char *)f->ob_form, form_memberlist, name);
Guido van Rossum32db5e31991-11-12 15:43:18 +00001872}
1873
1874static int
1875form_setattr(f, name, v)
1876 formobject *f;
1877 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001878 PyObject *v;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001879{
Guido van Rossum32db5e31991-11-12 15:43:18 +00001880 if (v == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001881 PyErr_SetString(PyExc_TypeError,
1882 "can't delete form attributes");
Guido van Rossum3863abb1996-09-11 23:31:07 +00001883 return -1;
Guido van Rossum32db5e31991-11-12 15:43:18 +00001884 }
1885
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001886 return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001887}
1888
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001889static PyObject *
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001890form_repr(f)
1891 formobject *f;
1892{
1893 char buf[100];
Fred Drakea44d3532000-06-30 15:01:00 +00001894 sprintf(buf, "<FORMS_form at %p, window=%ld>",
1895 f, f->ob_form->window);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001896 return PyString_FromString(buf);
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00001897}
1898
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001899static PyTypeObject Formtype = {
1900 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossumb6775db1994-08-01 11:34:53 +00001901 0, /*ob_size*/
1902 "FORMS_form", /*tp_name*/
1903 sizeof(formobject), /*tp_size*/
1904 0, /*tp_itemsize*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001905 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +00001906 (destructor)form_dealloc, /*tp_dealloc*/
1907 0, /*tp_print*/
1908 (getattrfunc)form_getattr, /*tp_getattr*/
1909 (setattrfunc)form_setattr, /*tp_setattr*/
1910 0, /*tp_compare*/
1911 (reprfunc)form_repr, /*tp_repr*/
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001912};
1913
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001914static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001915newformobject(form)
1916 FL_FORM *form;
1917{
1918 formobject *f;
Guido van Rossumb18618d2000-05-03 23:44:39 +00001919 f = PyObject_New(formobject, &Formtype);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001920 if (f == NULL)
1921 return NULL;
1922 f->ob_form = form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001923 return (PyObject *)f;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001924}
1925
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001926
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001927/* The "fl" module */
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00001928
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001929static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001930forms_make_form(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001931 PyObject *dummy;
1932 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001933{
1934 int type;
1935 float w, h;
1936 FL_FORM *form;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001937 if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001938 return NULL;
1939 form = fl_bgn_form(type, w, h);
1940 if (form == NULL) {
1941 /* XXX Actually, cannot happen! */
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001942 PyErr_NoMemory();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001943 return NULL;
1944 }
1945 fl_end_form();
1946 return newformobject(form);
1947}
1948
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001949static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001950forms_activate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001951 PyObject *f;
1952 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001953{
1954 fl_activate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001955 Py_INCREF(Py_None);
1956 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001957}
1958
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001959static PyObject *
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001960forms_deactivate_all_forms(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001961 PyObject *f;
1962 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001963{
1964 fl_deactivate_all_forms();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001965 Py_INCREF(Py_None);
1966 return Py_None;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00001967}
1968
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001969static PyObject *my_event_callback = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001970
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001971static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001972forms_set_event_call_back(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001973 PyObject *dummy;
1974 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001975{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001976 if (args == Py_None)
Guido van Rossumf6da4f61993-07-26 15:24:57 +00001977 args = NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001978 my_event_callback = args;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001979 Py_XINCREF(args);
1980 Py_INCREF(Py_None);
1981 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001982}
1983
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001984static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001985forms_do_or_check_forms(dummy, args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001986 PyObject *dummy;
1987 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001988 FL_OBJECT *(*func)();
1989{
1990 FL_OBJECT *generic;
1991 genericobject *g;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001992 PyObject *arg, *res;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001993
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001994 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001995 return NULL;
1996
1997 for (;;) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00001998 Py_BEGIN_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00001999 generic = (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002000 Py_END_ALLOW_THREADS
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002001 if (generic == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002002 Py_INCREF(Py_None);
2003 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002004 }
2005 if (generic == FL_EVENT) {
2006 int dev;
2007 short val;
2008 if (my_event_callback == NULL)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002009 return PyInt_FromLong(-1L);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002010 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002011 arg = Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002012 if (arg == NULL)
2013 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002014 res = PyEval_CallObject(my_event_callback, arg);
2015 Py_XDECREF(res);
2016 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002017 if (res == NULL)
2018 return NULL; /* Callback raised exception */
2019 continue;
2020 }
2021 g = findgeneric(generic);
2022 if (g == NULL) {
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002023 /* Object not known to us (some dialogs cause this) */
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002024 continue; /* Ignore it */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002025 }
2026 if (g->ob_callback == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002027 Py_INCREF(g);
2028 return ((PyObject *) g);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002029 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002030 arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
Guido van Rossume5372401993-03-16 12:15:04 +00002031 if (arg == NULL)
2032 return NULL;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002033 res = PyEval_CallObject(g->ob_callback, arg);
2034 Py_XDECREF(res);
2035 Py_DECREF(arg);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002036 if (res == NULL)
2037 return NULL; /* Callback raised exception */
2038 }
2039}
2040
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002041static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002042forms_do_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002043 PyObject *dummy;
2044 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002045{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002046 return forms_do_or_check_forms(dummy, args, fl_do_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002047}
2048
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002049static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002050forms_check_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002051 PyObject *dummy;
2052 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002053{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002054 return forms_do_or_check_forms(dummy, args, fl_check_forms);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002055}
2056
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002057static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002058forms_do_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002059 PyObject *dummy;
2060 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002061{
2062 return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
2063}
2064
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002065static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002066forms_check_only_forms(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002067 PyObject *dummy;
2068 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002069{
2070 return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
2071}
2072
Guido van Rossum03747111991-08-08 12:10:01 +00002073#ifdef UNUSED
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002074static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002075fl_call(func, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002076 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002077 void (*func)();
2078{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002079 if (!PyArg_NoArgs(args))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002080 return NULL;
2081 (*func)();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002082 Py_INCREF(Py_None);
2083 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002084}
Guido van Rossum03747111991-08-08 12:10:01 +00002085#endif
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002086
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002087static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002088forms_set_graphics_mode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002089 PyObject *dummy;
2090 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002091{
2092 int rgbmode, doublebuf;
2093
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002094 if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002095 return NULL;
2096 fl_set_graphics_mode(rgbmode,doublebuf);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002097 Py_INCREF(Py_None);
2098 return Py_None;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002099}
2100
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002101static PyObject *
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002102forms_get_rgbmode(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002103 PyObject *dummy;
2104 PyObject *args;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002105{
Guido van Rossum7066dd71992-09-17 17:54:56 +00002106 extern int fl_rgbmode;
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002107
2108 if (args != NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002109 PyErr_BadArgument();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002110 return NULL;
2111 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002112 return PyInt_FromLong((long)fl_rgbmode);
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002113}
Guido van Rossum7066dd71992-09-17 17:54:56 +00002114
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002115static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002116forms_show_errors(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002117 PyObject *dummy;
2118 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002119{
2120 int show;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002121 if (!PyArg_Parse(args, "i", &show))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002122 return NULL;
2123 fl_show_errors(show);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002124 Py_INCREF(Py_None);
2125 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002126}
2127
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002128static PyObject *
Guido van Rossum7066dd71992-09-17 17:54:56 +00002129forms_set_font_name(dummy, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002130 PyObject *dummy;
2131 PyObject *args;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002132{
2133 int numb;
2134 char *name;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002135 if (!PyArg_Parse(args, "(is)", &numb, &name))
Guido van Rossum7066dd71992-09-17 17:54:56 +00002136 return NULL;
2137 fl_set_font_name(numb, name);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002138 Py_INCREF(Py_None);
2139 return Py_None;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002140}
2141
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002142
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002143static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002144forms_qdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002145 PyObject *self;
2146 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002147{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002148 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002149 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002150 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002151 fl_qdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002152 Py_INCREF(Py_None);
2153 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002154}
2155
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002156static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002157forms_unqdevice(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002158 PyObject *self;
2159 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002160{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002161 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002162 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002163 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002164 fl_unqdevice(arg1);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002165 Py_INCREF(Py_None);
2166 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002167}
2168
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002169static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002170forms_isqueued(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002171 PyObject *self;
2172 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002173{
Guido van Rossum03747111991-08-08 12:10:01 +00002174 long retval;
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002175 short arg1;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002176 if (!PyArg_Parse(args, "h", &arg1))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002177 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002178 retval = fl_isqueued(arg1);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002179
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002180 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002181}
2182
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002183static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002184forms_qtest(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{
2188 long retval;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002189 retval = fl_qtest();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002190 return PyInt_FromLong(retval);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002191}
2192
2193
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002194static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002195forms_qread(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002196 PyObject *self;
2197 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002198{
Guido van Rossume5372401993-03-16 12:15:04 +00002199 int dev;
2200 short val;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002201 Py_BEGIN_ALLOW_THREADS
Guido van Rossume5372401993-03-16 12:15:04 +00002202 dev = fl_qread(&val);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002203 Py_END_ALLOW_THREADS
2204 return Py_BuildValue("(ih)", dev, val);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002205}
2206
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002207static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002208forms_qreset(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002209 PyObject *self;
2210 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002211{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002212 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002213
Guido van Rossum03747111991-08-08 12:10:01 +00002214 fl_qreset();
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002215 Py_INCREF(Py_None);
2216 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002217}
2218
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002219static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002220forms_qenter(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002221 PyObject *self;
2222 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002223{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002224 short arg1, arg2;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002225 if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002226 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002227 fl_qenter(arg1, arg2);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002228 Py_INCREF(Py_None);
2229 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002230}
2231
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002232static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002233forms_color(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002234 PyObject *self;
2235 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002236{
2237 int arg;
2238
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002239 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002240
2241 fl_color((short) arg);
2242
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002243 Py_INCREF(Py_None);
2244 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002245}
2246
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002247static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002248forms_mapcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002249 PyObject *self;
2250 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002251{
2252 int arg0, arg1, arg2, arg3;
2253
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002254 if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002255 return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002256
2257 fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
2258
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002259 Py_INCREF(Py_None);
2260 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002261}
2262
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002263static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002264forms_getmcolor(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002265 PyObject *self;
2266 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002267{
Guido van Rossum03747111991-08-08 12:10:01 +00002268 int arg;
2269 short r, g, b;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002270
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002271 if (!PyArg_Parse(args, "i", &arg)) return NULL;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002272
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002273 fl_getmcolor(arg, &r, &g, &b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002274
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002275 return Py_BuildValue("(hhh)", r, g, b);
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002276}
2277
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002278static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002279forms_get_mouse(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002280 PyObject *self;
2281 PyObject *args;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002282{
Guido van Rossume5372401993-03-16 12:15:04 +00002283 float x, y;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002284
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002285 if (!PyArg_NoArgs(args)) return NULL;
Guido van Rossum75cc8981991-08-08 12:07:45 +00002286
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002287 fl_get_mouse(&x, &y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002288
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002289 return Py_BuildValue("(ff)", x, y);
Guido van Rossum75cc8981991-08-08 12:07:45 +00002290}
2291
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002292static PyObject *
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002293forms_tie(self, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002294 PyObject *self;
2295 PyObject *args;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002296{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002297 short arg1, arg2, arg3;
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002298 if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002299 return NULL;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002300 fl_tie(arg1, arg2, arg3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002301 Py_INCREF(Py_None);
2302 return Py_None;
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002303}
2304
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002305static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002306forms_show_message(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002307 PyObject *f;
2308 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002309{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002310 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002311
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002312 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002313
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002314 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002315 fl_show_message(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002316 Py_END_ALLOW_THREADS
Guido van Rossum03747111991-08-08 12:10:01 +00002317
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002318 Py_INCREF(Py_None);
2319 return Py_None;
Guido van Rossum03747111991-08-08 12:10:01 +00002320}
2321
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002322static PyObject *
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002323forms_show_choice(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002324 PyObject *f;
2325 PyObject *args;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002326{
2327 char *m1, *m2, *m3, *b1, *b2, *b3;
2328 int nb;
2329 char *format;
Guido van Rossum7066dd71992-09-17 17:54:56 +00002330 long rv;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002331
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002332 if (args == NULL || !PyTuple_Check(args)) {
2333 PyErr_BadArgument();
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002334 return NULL;
2335 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002336 nb = PyTuple_Size(args) - 3;
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002337 if (nb <= 0) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002338 PyErr_SetString(PyExc_TypeError,
2339 "need at least one button label");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002340 return NULL;
2341 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002342 if (PyInt_Check(PyTuple_GetItem(args, 3))) {
2343 PyErr_SetString(PyExc_TypeError,
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002344 "'number-of-buttons' argument not needed");
2345 return NULL;
2346 }
2347 switch (nb) {
2348 case 1: format = "(ssss)"; break;
2349 case 2: format = "(sssss)"; break;
2350 case 3: format = "(ssssss)"; break;
2351 default:
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002352 PyErr_SetString(PyExc_TypeError, "too many button labels");
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002353 return NULL;
2354 }
2355
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002356 if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002357 return NULL;
2358
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002359 Py_BEGIN_ALLOW_THREADS
Jack Jansen743db361992-08-13 14:13:11 +00002360 rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002361 Py_END_ALLOW_THREADS
2362 return PyInt_FromLong(rv);
Guido van Rossumb3a0e4c1992-03-23 18:20:54 +00002363}
2364
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002365static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002366forms_show_question(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002367 PyObject *f;
2368 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002369{
Guido van Rossumfc58e581992-01-27 16:45:55 +00002370 int ret;
2371 char *a, *b, *c;
Guido van Rossum03747111991-08-08 12:10:01 +00002372
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002373 if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002374
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002375 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002376 ret = fl_show_question(a, b, c);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002377 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002378
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002379 return PyInt_FromLong((long) ret);
Guido van Rossum03747111991-08-08 12:10:01 +00002380}
2381
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002382static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002383forms_show_input(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002384 PyObject *f;
2385 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002386{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002387 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002388 char *a, *b;
Guido van Rossum03747111991-08-08 12:10:01 +00002389
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002390 if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002391
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002392 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002393 str = fl_show_input(a, b);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002394 Py_END_ALLOW_THREADS
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002395
2396 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002397 Py_INCREF(Py_None);
2398 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002399 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002400 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002401}
2402
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002403static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002404forms_file_selector(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002405 PyObject *f;
2406 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002407{
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002408 char *str;
Guido van Rossumfc58e581992-01-27 16:45:55 +00002409 char *a, *b, *c, *d;
Guido van Rossum03747111991-08-08 12:10:01 +00002410
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002411 if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
Guido van Rossum03747111991-08-08 12:10:01 +00002412
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002413 Py_BEGIN_ALLOW_THREADS
Guido van Rossumfc58e581992-01-27 16:45:55 +00002414 str = fl_show_file_selector(a, b, c, d);
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002415 Py_END_ALLOW_THREADS
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002416
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002417 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002418 Py_INCREF(Py_None);
2419 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002420 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002421 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002422}
2423
2424
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002425static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002426forms_file_selector_func(args, func)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002427 PyObject *args;
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002428 char *(*func)();
Guido van Rossum03747111991-08-08 12:10:01 +00002429{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002430 char *str;
Guido van Rossum03747111991-08-08 12:10:01 +00002431
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002432 str = (*func) ();
2433
2434 if (str == NULL) {
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002435 Py_INCREF(Py_None);
2436 return Py_None;
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002437 }
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002438 return PyString_FromString(str);
Guido van Rossum03747111991-08-08 12:10:01 +00002439}
2440
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002441static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002442forms_get_directory(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002443 PyObject *f;
2444 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002445{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002446 return forms_file_selector_func(args, fl_get_directory);
Guido van Rossum03747111991-08-08 12:10:01 +00002447}
2448
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002449static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002450forms_get_pattern(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002451 PyObject *f;
2452 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002453{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002454 return forms_file_selector_func(args, fl_get_pattern);
Guido van Rossum03747111991-08-08 12:10:01 +00002455}
2456
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002457static PyObject *
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002458forms_get_filename(f, args)
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002459 PyObject *f;
2460 PyObject *args;
Guido van Rossum03747111991-08-08 12:10:01 +00002461{
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002462 return forms_file_selector_func(args, fl_get_filename);
Guido van Rossum03747111991-08-08 12:10:01 +00002463}
2464
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002465static PyMethodDef forms_methods[] = {
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002466/* adm */
2467 {"make_form", forms_make_form},
Guido van Rossum2bac4d31992-03-27 17:20:21 +00002468 {"activate_all_forms", forms_activate_all_forms},
2469 {"deactivate_all_forms",forms_deactivate_all_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002470/* gl support wrappers */
2471 {"qdevice", forms_qdevice},
2472 {"unqdevice", forms_unqdevice},
2473 {"isqueued", forms_isqueued},
2474 {"qtest", forms_qtest},
2475 {"qread", forms_qread},
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002476/* {"blkqread", forms_blkqread}, */
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002477 {"qreset", forms_qreset},
2478 {"qenter", forms_qenter},
Guido van Rossum03747111991-08-08 12:10:01 +00002479 {"get_mouse", forms_get_mouse},
2480 {"tie", forms_tie},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002481/* {"new_events", forms_new_events}, */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002482 {"color", forms_color},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002483 {"mapcolor", forms_mapcolor},
2484 {"getmcolor", forms_getmcolor},
2485/* interaction */
2486 {"do_forms", forms_do_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002487 {"do_only_forms", forms_do_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002488 {"check_forms", forms_check_forms},
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002489 {"check_only_forms", forms_check_only_forms},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002490 {"set_event_call_back", forms_set_event_call_back},
2491/* goodies */
Guido van Rossumaa7ca2d1992-09-03 20:37:02 +00002492 {"show_message", forms_show_message},
2493 {"show_question", forms_show_question},
2494 {"show_choice", forms_show_choice},
2495 {"show_input", forms_show_input},
2496 {"show_file_selector", forms_file_selector},
2497 {"file_selector", forms_file_selector}, /* BW compat */
2498 {"get_directory", forms_get_directory},
2499 {"get_pattern", forms_get_pattern},
2500 {"get_filename", forms_get_filename},
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002501 {"set_graphics_mode", forms_set_graphics_mode},
2502 {"get_rgbmode", forms_get_rgbmode},
Guido van Rossum7066dd71992-09-17 17:54:56 +00002503 {"show_errors", forms_show_errors},
2504 {"set_font_name", forms_set_font_name},
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002505 {NULL, NULL} /* sentinel */
2506};
2507
Guido van Rossum3886bb61998-12-04 18:50:17 +00002508DL_EXPORT(void)
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002509initfl()
2510{
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002511 Py_InitModule("fl", forms_methods);
Guido van Rossum2df7bcc1991-10-20 20:18:26 +00002512 foreground();
Guido van Rossumddc0d3e1991-12-10 13:56:42 +00002513 fl_init();
Guido van Rossumc7df79e1991-08-07 11:32:58 +00002514}
Roger E. Masse7ba4c071997-01-03 22:17:11 +00002515
2516
2517