1c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* FL module -- interface to Mark Overmars' FORMS Library. */
2c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
37ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse/* This code works with FORMS version 2.2 (if you defined
47ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse   OBSOLETE_FORMS_CALLS), and 2.3.
5f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum   FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
6f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum   /pub/SGI/FORMS. */
7ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
8743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen/* A half-hearted attempt has been made to allow programs using this
9743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * module to exploit parallelism (through the threads module). No provisions
10743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * have been made for multiple threads to use this module at the same time,
11743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * though. So, a program with a forms thread and a non-forms thread will work
12743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * fine but a program with two threads using forms will probably crash (unless
13743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * the program takes precaution to ensure that only one thread can be in
14743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen * this module at any time). This will have to be fixed some time.
157e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters * (A fix will probably also have to synchronize with the gl module).
16743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen */
17743db36cd208c6f212a6b534e6bb8ee9256505adJack Jansen
187ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse#include "Python.h"
19c7df79e47da854931474f581618435fff0dd2448Guido van Rossum#include "forms.h"
20c7df79e47da854931474f581618435fff0dd2448Guido van Rossum#include "structmember.h"
21c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
22c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Generic Forms Objects */
23c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
24c7df79e47da854931474f581618435fff0dd2448Guido van Rossumtypedef struct {
25c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
26c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_OBJECT *ob_generic;
27c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMethodDef *ob_methods;
28c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *ob_callback;
29c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *ob_callback_arg;
30c7df79e47da854931474f581618435fff0dd2448Guido van Rossum} genericobject;
31c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
32938ace69a0e112424a2f426a4881d1fd1fc922d2Jeremy Hyltonstatic PyTypeObject GenericObjecttype;
332df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
342df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum#define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
352df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
362df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum/* List of all objects (XXX this should be a hash table on address...) */
37c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
387ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *allgenerics = NULL;
392df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossumstatic int nfreeslots = 0;
402df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
412df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum/* Add an object to the list of known objects */
42c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
43c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic void
446a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampknowgeneric(genericobject *g)
45c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
46c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i, n;
47c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Create the list if it doesn't already exist */
48c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (allgenerics == NULL) {
49c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        allgenerics = PyList_New(0);
50c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (allgenerics == NULL) {
51c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyErr_Clear();
52c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return; /* Too bad, live without allgenerics... */
53c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
54c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
55c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (nfreeslots > 0) {
56c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* Search the list for reusable slots (NULL items) */
57c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* XXX This can be made faster! */
58c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        n = PyList_Size(allgenerics);
59c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        for (i = 0; i < n; i++) {
60c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (PyList_GetItem(allgenerics, i) == NULL) {
61c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_INCREF(g);
62c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                PyList_SetItem(allgenerics, i, (PyObject *)g);
63c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                nfreeslots--;
64c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return;
65c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
66c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
67c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* Strange... no free slots found... */
68c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        nfreeslots = 0;
69c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
70c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* No free entries, append new item to the end */
71c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyList_Append(allgenerics, (PyObject *)g);
72c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
73c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
742df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum/* Find an object in the list of known objects */
752df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
76c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic genericobject *
776a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampfindgeneric(FL_OBJECT *generic)
78c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
79c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i, n;
80c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
81c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
82c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (allgenerics == NULL)
83c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL; /* No objects known yet */
84c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    n = PyList_Size(allgenerics);
85c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i++) {
86c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g = (genericobject *)PyList_GetItem(allgenerics, i);
87c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (g != NULL && g->ob_generic == generic)
88c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return g;
89c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
90c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return NULL; /* Unknown object */
91c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
92c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
93aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum/* Remove an object from the list of known objects */
94aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
95aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossumstatic void
966a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforgetgeneric(genericobject *g)
97aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
98c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i, n;
99c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
10098a9722e4a82b5f7dc0411233bbec892a02c7667Serhiy Storchaka    Py_CLEAR(g->ob_callback);
10198a9722e4a82b5f7dc0411233bbec892a02c7667Serhiy Storchaka    Py_CLEAR(g->ob_callback_arg);
102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (allgenerics == NULL)
103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return; /* No objects known yet */
104c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    n = PyList_Size(allgenerics);
105c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i++) {
106c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (g == (genericobject *)PyList_GetItem(allgenerics, i)) {
107c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyList_SetItem(allgenerics, i, (PyObject *)NULL);
108c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            nfreeslots++;
109c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            break;
110c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
111c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
112aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum}
113aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
1142df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum/* Called when a form is about to be freed --
1152df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum   remove all the objects that we know about from it. */
1162df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1172df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossumstatic void
1186a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampreleaseobjects(FL_FORM *form)
1192df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum{
120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i, n;
121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
122c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
123c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (allgenerics == NULL)
124c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return; /* No objects known yet */
125c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    n = PyList_Size(allgenerics);
126c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i++) {
127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g = (genericobject *)PyList_GetItem(allgenerics, i);
128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (g != NULL && g->ob_generic->form == form) {
129c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            fl_delete_object(g->ob_generic);
130c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            /* The object is now unreachable for
131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou               do_forms and check_forms, so
132c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou               delete it from the list of known objects */
13398a9722e4a82b5f7dc0411233bbec892a02c7667Serhiy Storchaka            Py_CLEAR(g->ob_callback);
13498a9722e4a82b5f7dc0411233bbec892a02c7667Serhiy Storchaka            Py_CLEAR(g->ob_callback_arg);
135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyList_SetItem(allgenerics, i, (PyObject *)NULL);
136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            nfreeslots++;
137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1392df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum}
1402df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
141c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
142c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Methods of generic objects */
143c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1447ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
1456a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_set_call_back(genericobject *g, PyObject *args)
146c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyTuple_GET_SIZE(args) == 0) {
148c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_XDECREF(g->ob_callback);
149c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_XDECREF(g->ob_callback_arg);
150c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g->ob_callback = NULL;
151c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g->ob_callback_arg = NULL;
152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    else {
154ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter        PyObject *a, *b;
155ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter        if (!PyArg_UnpackTuple(args, "set_call_back", 2, 2, &a, &b))
156ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter            return NULL;
157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_XDECREF(g->ob_callback);
158c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_XDECREF(g->ob_callback_arg);
159c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g->ob_callback = a;
160c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(g->ob_callback);
161c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g->ob_callback_arg = b;
162c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(g->ob_callback_arg);
163c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
164c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
165c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
166c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
167c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1687ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_call(genericobject *g, void (*func)(FL_OBJECT *))
170c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func)(g->ob_generic);
172c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
173c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
174c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
175c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1767ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
17728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_delete_object(genericobject *g)
1782df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum{
179c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *res;
180c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    res = generic_call(g, fl_delete_object);
181c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (res != NULL)
182c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        forgetgeneric(g);
183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return res;
1842df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum}
1852df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1867ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_show_object(genericobject *g)
188c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
189c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_show_object);
190c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
191c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19328faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_hide_object(genericobject *g)
194c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
195c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_hide_object);
196c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
197c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1987ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_redraw_object(genericobject *g)
200c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_redraw_object);
202c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
203c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
2047ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse#ifdef OBSOLETE_FORMS_CALLS
205c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
2067ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse /* (un)freeze_object() are obsolete in FORMS 2.2 and unsupported
2077ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse    in 2.3.  Since there's no foolproof way to tell which version we're
2087ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse    using, we omit them unconditionally. */
209c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
2107ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
21128faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_freeze_object(genericobject *g)
212c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_freeze_object);
214c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
215c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
2167ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
21728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_unfreeze_object(genericobject *g)
218c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
219c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_unfreeze_object);
220c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
221c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
2227ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse#endif /* OBSOLETE_FORMS_CALLS */
2237ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse
2247ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
22528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_activate_object(genericobject *g)
226f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
227c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_activate_object);
228f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
229f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
2307ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
23128faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzgeneric_deactivate_object(genericobject *g)
232f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
233c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call(g, fl_deactivate_object);
234f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
235f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
2367ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
2376a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_set_object_shortcut(genericobject *g, PyObject *args)
238f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
239c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
240c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(args, "s:set_object_shortcut", &str))
241c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
242c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_set_object_shortcut(g->ob_generic, str);
243c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
2457ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse}
2467ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse
2477ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef generic_methods[] = {
248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_call_back",           (PyCFunction)generic_set_call_back, METH_VARARGS},
249c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"delete_object",           (PyCFunction)generic_delete_object, METH_NOARGS},
250c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_object",             (PyCFunction)generic_show_object, METH_NOARGS},
251c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"hide_object",             (PyCFunction)generic_hide_object, METH_NOARGS},
252c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"redraw_object",           (PyCFunction)generic_redraw_object, METH_NOARGS},
2537ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse#ifdef OBSOLETE_FORMS_CALLS
254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"freeze_object",           (PyCFunction)generic_freeze_object, METH_NOARGS},
255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"unfreeze_object",         (PyCFunction)generic_unfreeze_object, METH_NOARGS},
2567ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse#endif
257c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"activate_object",         (PyCFunction)generic_activate_object, METH_NOARGS},
258c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deactivate_object",       (PyCFunction)generic_deactivate_object, METH_NOARGS},
259c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_object_shortcut",     (PyCFunction)generic_set_object_shortcut, METH_VARARGS},
260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
261c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
262c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
263c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic void
2646a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_dealloc(genericobject *g)
265c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_free_object(g->ob_generic);
267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_XDECREF(g->ob_callback);
268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_XDECREF(g->ob_callback_arg);
269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_Del(g);
270c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
271c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
272c7df79e47da854931474f581618435fff0dd2448Guido van Rossum#define OFF(x) offsetof(FL_OBJECT, x)
273c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
274c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic struct memberlist generic_memberlist[] = {
275c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"objclass",        T_INT,          OFF(objclass),  RO},
276c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"type",            T_INT,          OFF(type),      RO},
277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"boxtype",         T_INT,          OFF(boxtype)},
278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"x",               T_FLOAT,        OFF(x)},
279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"y",               T_FLOAT,        OFF(y)},
280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"w",               T_FLOAT,        OFF(w)},
281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"h",               T_FLOAT,        OFF(h)},
282c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"col1",            T_INT,          OFF(col1)},
283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"col2",            T_INT,          OFF(col2)},
284c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"align",           T_INT,          OFF(align)},
285c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"lcol",            T_INT,          OFF(lcol)},
286c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"lsize",           T_FLOAT,        OFF(lsize)},
287c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* "label" is treated specially! */
288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"lstyle",          T_INT,          OFF(lstyle)},
289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"pushed",          T_INT,          OFF(pushed),    RO},
290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"focus",           T_INT,          OFF(focus),     RO},
291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"belowmouse",      T_INT,          OFF(belowmouse),RO},
292c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou/*      {"frozen",      T_INT,          OFF(frozen),    RO},    */
293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"active",          T_INT,          OFF(active)},
294c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"input",           T_INT,          OFF(input)},
295c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"visible",         T_INT,          OFF(visible),   RO},
296c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"radio",           T_INT,          OFF(radio)},
297c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"automatic",       T_INT,          OFF(automatic)},
298c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL}      /* Sentinel */
299c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
300c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
301d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum#undef OFF
302d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum
3037ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
3046a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_getattr(genericobject *g, char *name)
305c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *meth;
3072df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXX Ought to special-case name "__methods__" */
309c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (g-> ob_methods) {
310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        meth = Py_FindMethod(g->ob_methods, (PyObject *)g, name);
311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (meth != NULL) return meth;
312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_Clear();
313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
314c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
315c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    meth = Py_FindMethod(generic_methods, (PyObject *)g, name);
316c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (meth != NULL)
317c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return meth;
318c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyErr_Clear();
319c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* "label" is an exception, getmember only works for char pointers,
321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       not for char arrays */
322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (strcmp(name, "label") == 0)
323c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return PyString_FromString(g->ob_generic->label);
324c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
325c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyMember_Get((char *)g->ob_generic, generic_memberlist, name);
326c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
327c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
328c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic int
3290ae528447f5321936532b8be1a46c54f45b8b734Sjoerd Mullendergeneric_setattr(genericobject *g, char *name, PyObject *v)
330c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int ret;
332c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == NULL) {
334c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError,
335c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "can't delete forms object attributes");
336c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
337c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
338c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* "label" is an exception: setmember doesn't set strings;
340c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       and FORMS wants you to call a function to set the label */
341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (strcmp(name, "label") == 0) {
342c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (!PyString_Check(v)) {
343c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyErr_SetString(PyExc_TypeError,
344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            "label attr must be string");
345c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return -1;
346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        fl_set_object_label(g->ob_generic, PyString_AsString(v));
348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
350c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ret = PyMember_Set((char *)g->ob_generic, generic_memberlist, name, v);
352c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
353c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Rather than calling all the various set_object_* functions,
354c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       we call fl_redraw_object here.  This is sometimes redundant
355c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       but I doubt that's a big problem */
356c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (ret == 0)
357c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        fl_redraw_object(g->ob_generic);
358c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return ret;
360c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
361c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
3627ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
3636a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_repr(genericobject *g)
364aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
366c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyOS_snprintf(buf, sizeof(buf), "<FORMS_object at %p, objclass=%d>",
367c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                  g, g->ob_generic->objclass);
368c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
369aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum}
370aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
3717ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyTypeObject GenericObjecttype = {
372c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(&PyType_Type)
373c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*ob_size*/
374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "fl.FORMS_object",                  /*tp_name*/
375c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(genericobject),              /*tp_size*/
376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_itemsize*/
377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
378c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor)generic_dealloc,        /*tp_dealloc*/
379c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_print*/
380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)generic_getattr,       /*tp_getattr*/
381c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)generic_setattr,       /*tp_setattr*/
382c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_compare*/
383c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc)generic_repr,             /*tp_repr*/
384c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
385c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
3867ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
3876a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampnewgenericobject(FL_OBJECT *generic, PyMethodDef *methods)
388c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
390c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g = PyObject_New(genericobject, &GenericObjecttype);
391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (g == NULL)
392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g-> ob_generic = generic;
394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g->ob_methods = methods;
395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g->ob_callback = NULL;
396c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g->ob_callback_arg = NULL;
397c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    knowgeneric(g);
398c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)g;
399c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
400c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
401c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/**********************************************************************/
402c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Some common calling sequences */
403c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
404c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* void func (object, float) */
4057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INf (void (*func)(FL_OBJECT *, float), FL_OBJECT *obj, PyObject *args)
407c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float parameter;
409c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
410c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "f", &parameter)) return NULL;
411c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
412c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, parameter);
413c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
414c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
415c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
416c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
417c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
418c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* void func (object, float) */
4197ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4206a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INfINf (void (*func)(FL_OBJECT *, float, float), FL_OBJECT *obj, PyObject *args)
421c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float par1, par2;
423c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
424c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ff)", &par1, &par2)) return NULL;
425c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
426c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, par1, par2);
427c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
430c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
431c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
432c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* void func (object, int) */
4337ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4346a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INi (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
435c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
436c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int parameter;
437c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &parameter)) return NULL;
439c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, parameter);
441c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
442c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
443c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
444c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
445c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
446ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum/* void func (object, char) */
4477ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4486a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INc (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
449ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a;
451ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "s", &a)) return NULL;
453ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
454c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, a[0]);
455ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
458ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
459ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
460c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* void func (object, string) */
4617ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4626a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INstr (void (*func)(FL_OBJECT *, char *), FL_OBJECT *obj, PyObject *args)
463aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a;
465aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "s", &a)) return NULL;
467c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, a);
469c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
470c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
471c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
472c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
473c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
474c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
475f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum/* void func (object, int, string) */
4767ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4776a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INiINstr (void (*func)(FL_OBJECT *, int, char *), FL_OBJECT *obj, PyObject *args)
478c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
479c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *b;
480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int a;
481c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
482c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(is)", &a, &b)) return NULL;
483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
484c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, a, b);
485c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
486c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
487c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
488c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
489c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
4900374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#ifdef UNUSED
491f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum/* void func (object, int, int) */
4927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
4936a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampcall_forms_INiINi (void (*func)(FL_OBJECT *, int, int), FL_OBJECT *obj, PyObject *args)
494c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int par1, par2;
496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ii)", &par1, &par2)) return NULL;
498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, par1, par2);
500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
502c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
503c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
5040374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#endif
505c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
506c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* int func (object) */
5077ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
50828faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzcall_forms_Ri (int (*func)(FL_OBJECT *), FL_OBJECT *obj)
509c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int retval;
51128faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = (*func) (obj);
51328faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
514c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong ((long) retval);
515c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
516c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
517c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* char * func (object) */
5187ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
51928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzcall_forms_Rstr (char * (*func)(FL_OBJECT *), FL_OBJECT *obj)
520aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
52228faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    str = (*func) (obj);
52428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
525c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (str == NULL) {
526c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
527c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
528c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
529c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString (str);
530c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
531c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
532c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* int func (object) */
5337ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
53428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzcall_forms_Rf (float (*func)(FL_OBJECT *), FL_OBJECT *obj)
535c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
536c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float retval;
53728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
538c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = (*func) (obj);
53928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
540c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyFloat_FromDouble (retval);
541c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
542c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5437ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
54428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzcall_forms_OUTfOUTf (void (*func)(FL_OBJECT *, float *, float *), FL_OBJECT *obj)
545c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
546c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float f1, f2;
54728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitz
548c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, &f1, &f2);
549c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("(ff)", f1, f2);
551c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
552c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5530374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#ifdef UNUSED
5547ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
55528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzcall_forms_OUTf (void (*func)(FL_OBJECT *, float *), FL_OBJECT *obj)
556c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float f;
558c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func) (obj, &f);
560c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyFloat_FromDouble (f);
562c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
5630374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#endif
564c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
565c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/**********************************************************************/
566c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class : browser */
567c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5687ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
5696a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_browser_topline(genericobject *g, PyObject *args)
570c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
571c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
572c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
573c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5747ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
57528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzclear_browser(genericobject *g)
576c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
577c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call (g, fl_clear_browser);
578c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
579c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5807ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
5816a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampadd_browser_line (genericobject *g, PyObject *args)
582c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
584c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
585c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5867ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
5876a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampaddto_browser (genericobject *g, PyObject *args)
588c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
589c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
590c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
591c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
5936a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampinsert_browser_line (genericobject *g, PyObject *args)
594c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
595c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INiINstr (fl_insert_browser_line,
596c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                g-> ob_generic, args);
597c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
598c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
5997ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6006a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampdelete_browser_line (genericobject *g, PyObject *args)
601c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
602c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
603c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
604c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampreplace_browser_line (genericobject *g, PyObject *args)
607c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INiINstr (fl_replace_browser_line,
609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                g-> ob_generic, args);
610c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
611c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6127ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6136a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampget_browser_line(genericobject *g, PyObject *args)
614c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
615c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i;
616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
617c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &i))
619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
620c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
621c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    str = fl_get_browser_line (g->ob_generic, i);
622c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (str == NULL) {
624c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
625c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
626c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
627c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString (str);
628c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
629c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6307ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6316a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampload_browser (genericobject *g, PyObject *args)
632c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
633c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXX strictly speaking this is wrong since fl_load_browser
634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       XXX returns int, not void */
635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_load_browser, g-> ob_generic, args);
636c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
637c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6387ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
63928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_browser_maxline(genericobject *g)
640c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic);
642c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
643c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6447ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6456a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampselect_browser_line (genericobject *g, PyObject *args)
646c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
647c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
648c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
649c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6507ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6516a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampdeselect_browser_line (genericobject *g, PyObject *args)
652c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
653c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
654c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
655c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6567ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
65728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzdeselect_browser (genericobject *g)
658c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
659c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call (g, fl_deselect_browser);
660c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
661c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6627ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6636a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampisselected_browser_line (genericobject *g, PyObject *args)
664c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
665c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i, j;
666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &i))
668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
670c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    j = fl_isselected_browser_line (g->ob_generic, i);
671c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
672c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong (j);
673c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
674c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6757ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
67628faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_browser (genericobject *g)
677c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_browser, g-> ob_generic);
679c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
680c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6817ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6826a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_browser_fontsize (genericobject *g, PyObject *args)
683c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
684c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
685c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
686c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6877ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6886a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_browser_fontstyle (genericobject *g, PyObject *args)
689c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
690c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
691c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
692c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
6937ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
6946a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_browser_specialkey (genericobject *g, PyObject *args)
695ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
697ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
698ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
6997ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef browser_methods[] = {
700c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_browser_topline",             (PyCFunction)set_browser_topline,
701c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
702c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"clear_browser",                   (PyCFunction)clear_browser,
703c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
704c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_browser_line",                (PyCFunction)add_browser_line,
705c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
706c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"addto_browser",                   (PyCFunction)addto_browser,
707c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
708c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"insert_browser_line",             (PyCFunction)insert_browser_line,
709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
710c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"delete_browser_line",             (PyCFunction)delete_browser_line,
711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"replace_browser_line",            (PyCFunction)replace_browser_line,
713c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_browser_line",                (PyCFunction)get_browser_line,
715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
716c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"load_browser",                    (PyCFunction)load_browser,
717c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_browser_maxline",             (PyCFunction)get_browser_maxline,
719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS,}
720c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"select_browser_line",             (PyCFunction)select_browser_line,
721c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
722c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deselect_browser_line",           (PyCFunction)deselect_browser_line,
723c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
724c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deselect_browser",                (PyCFunction)deselect_browser,
725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS,}
726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"isselected_browser_line",         (PyCFunction)isselected_browser_line,
727c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
728c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_browser",                     (PyCFunction)get_browser,
729c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS,}
730c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_browser_fontsize",            (PyCFunction)set_browser_fontsize,
731c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_browser_fontstyle",           (PyCFunction)set_browser_fontstyle,
733c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
734c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_browser_specialkey",          (PyCFunction)set_browser_specialkey,
735c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                              NULL}           /* sentinel */
737c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
738c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
739c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class: button */
740c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7417ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
7426a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_button(genericobject *g, PyObject *args)
743c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
744c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_button, g-> ob_generic, args);
745c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
746c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7477ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
74828faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_button(genericobject *g)
749c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_button, g-> ob_generic);
751c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
752f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
7537ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
75428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_button_numb(genericobject *g)
755f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
756c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_button_numb, g-> ob_generic);
757f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
758f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
7597ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
7606a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_button_shortcut(genericobject *g, PyObject *args)
761ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
762c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
763ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
764c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7657ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef button_methods[] = {
766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_button",              (PyCFunction)set_button, METH_OLDARGS},
767c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_button",              (PyCFunction)get_button, METH_NOARGS},
768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_button_numb",         (PyCFunction)get_button_numb, METH_NOARGS},
769c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_button_shortcut",     (PyCFunction)set_button_shortcut, METH_OLDARGS},
770c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
771c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
772c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
773c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class: choice */
774c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7757ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
7766a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_choice(genericobject *g, PyObject *args)
777c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
778c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_choice, g-> ob_generic, args);
779c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
780c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7817ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
78228faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_choice(genericobject *g)
783c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_choice, g-> ob_generic);
785c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
786c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7877ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
78828faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzclear_choice (genericobject *g)
789c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
790c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_call (g, fl_clear_choice);
791c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
792c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7937ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
7946a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampaddto_choice (genericobject *g, PyObject *args)
795aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
796c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
797c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
798c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
7997ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8006a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampreplace_choice (genericobject *g, PyObject *args)
801aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
802c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
803c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
804c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampdelete_choice (genericobject *g, PyObject *args)
807c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
809c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
810c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8117ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
81228faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_choice_text (genericobject *g)
813aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
814c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rstr (fl_get_choice_text, g-> ob_generic);
815c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
816c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8177ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8186a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_choice_fontsize (genericobject *g, PyObject *args)
819c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
820c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
821c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
822c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8237ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8246a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_choice_fontstyle (genericobject *g, PyObject *args)
825c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
826c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
827c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
828c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8297ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef choice_methods[] = {
830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_choice",              (PyCFunction)set_choice,      METH_OLDARGS},
831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_choice",              (PyCFunction)get_choice,      METH_NOARGS},
832c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"clear_choice",            (PyCFunction)clear_choice,    METH_NOARGS},
833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"addto_choice",            (PyCFunction)addto_choice,    METH_OLDARGS},
834c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"replace_choice",          (PyCFunction)replace_choice,  METH_OLDARGS},
835c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"delete_choice",           (PyCFunction)delete_choice,   METH_OLDARGS},
836c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_choice_text",         (PyCFunction)get_choice_text, METH_NOARGS},
837c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_choice_fontsize", (PyCFunction)set_choice_fontsize, METH_OLDARGS},
838c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_choice_fontstyle",(PyCFunction)set_choice_fontstyle, METH_OLDARGS},
839c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
840c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
841c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
842c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class : Clock */
843c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8447ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
84528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_clock(genericobject *g)
846c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
847c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i0, i1, i2;
848c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_get_clock (g->ob_generic, &i0, &i1, &i2);
850c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("(iii)", i0, i1, i2);
852c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
853c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8547ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef clock_methods[] = {
855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_clock",               (PyCFunction)get_clock, METH_NOARGS},
856c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
857c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
858c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
859c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* CLass : Counters */
860c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8617ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
86228faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_counter_value(genericobject *g)
863c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
864c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_counter_value, g-> ob_generic);
865c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
866c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8677ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8686a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_counter_value (genericobject *g, PyObject *args)
869c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
871c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
872c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8737ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8746a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_counter_precision (genericobject *g, PyObject *args)
875c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
876c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
877c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
878c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8797ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8806a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_counter_bounds (genericobject *g, PyObject *args)
881c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
883c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
884c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8857ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8866a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_counter_step (genericobject *g, PyObject *args)
887c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
889c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
890c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8917ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
8926a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_counter_return (genericobject *g, PyObject *args)
893c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
895c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
896c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
8977ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef counter_methods[] = {
898c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_counter_value",               (PyCFunction)set_counter_value,
899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
900c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_counter_value",               (PyCFunction)get_counter_value,
901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_counter_bounds",              (PyCFunction)set_counter_bounds,
903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
904c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_counter_step",                (PyCFunction)set_counter_step,
905c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
906c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_counter_precision",           (PyCFunction)set_counter_precision,
907c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_counter_return",              (PyCFunction)set_counter_return,
909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                              NULL}           /* sentinel */
911c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
912c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
913c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
914c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class: Dials */
915c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9167ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
91728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_dial_value(genericobject *g)
918c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
919c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_dial_value, g-> ob_generic);
920c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
921c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9227ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9236a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_dial_value (genericobject *g, PyObject *args)
924c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
925c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
926c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
927c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9287ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9296a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_dial_bounds (genericobject *g, PyObject *args)
930c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
931c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
932c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
933c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9347ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
93528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_dial_bounds (genericobject *g)
936c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
937c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic);
938c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
939c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9407ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9416a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_dial_step (genericobject *g, PyObject *args)
942ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
943c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
944ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
945ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
9467ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef dial_methods[] = {
947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_dial_value",          (PyCFunction)set_dial_value,  METH_OLDARGS},
948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_dial_value",          (PyCFunction)get_dial_value,  METH_NOARGS},
949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_dial_bounds",         (PyCFunction)set_dial_bounds, METH_OLDARGS},
950c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_dial_bounds",         (PyCFunction)get_dial_bounds, METH_NOARGS},
951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_dial_step",           (PyCFunction)set_dial_step,   METH_OLDARGS},
952c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
953c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
954c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
955c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class : Input */
956c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9577ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9586a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_input (genericobject *g, PyObject *args)
959c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
960c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_set_input, g-> ob_generic, args);
961c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
962c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9637ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
96428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_input (genericobject *g)
965c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rstr (fl_get_input, g-> ob_generic);
967c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
968c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9697ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9706a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_input_color (genericobject *g, PyObject *args)
971c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
973c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
974c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9757ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9766a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_input_return (genericobject *g, PyObject *args)
977ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
978c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
979ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
980ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
9817ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef input_methods[] = {
982c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_input",               (PyCFunction)set_input,        METH_OLDARGS},
983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_input",               (PyCFunction)get_input,        METH_NOARGS},
984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_input_color",         (PyCFunction)set_input_color,  METH_OLDARGS},
985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_input_return",        (PyCFunction)set_input_return, METH_OLDARGS},
986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
987c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
988c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
989c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
990c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class : Menu */
991c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
9936a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_menu (genericobject *g, PyObject *args)
994c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
995c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
996c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
997c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
9987ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
99928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_menu (genericobject *g)
1000c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1001c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXX strictly speaking this is wrong since fl_get_menu
1002c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       XXX returns long, not int */
1003c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Ri (fl_get_menu, g-> ob_generic);
1004c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1005c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10067ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
100728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_menu_text (genericobject *g)
10088b17d6bd89cd79820c76bd88bc064e44fc03a1bdGuido van Rossum{
1009c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rstr (fl_get_menu_text, g-> ob_generic);
10108b17d6bd89cd79820c76bd88bc064e44fc03a1bdGuido van Rossum}
10118b17d6bd89cd79820c76bd88bc064e44fc03a1bdGuido van Rossum
10127ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10136a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampaddto_menu (genericobject *g, PyObject *args)
1014c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1015c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
1016c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1017c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10187ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef menu_methods[] = {
1019c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_menu",                (PyCFunction)set_menu,      METH_OLDARGS},
1020c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_menu",                (PyCFunction)get_menu,      METH_NOARGS},
1021c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_menu_text",           (PyCFunction)get_menu_text, METH_NOARGS},
1022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"addto_menu",              (PyCFunction)addto_menu,    METH_OLDARGS},
1023c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
1024c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1025c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1026c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1027c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class: Sliders */
1028c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10297ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
103028faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_slider_value(genericobject *g)
1031c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1032c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_slider_value, g-> ob_generic);
1033c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1034c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10357ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10366a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_value (genericobject *g, PyObject *args)
1037c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1038c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
1039c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1040c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10417ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10426a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_bounds (genericobject *g, PyObject *args)
1043c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1044c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
1045c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1046c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10477ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
104828faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_slider_bounds (genericobject *g)
1049c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1050c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic);
1051c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1052c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10537ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10546a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_return (genericobject *g, PyObject *args)
1055c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1056c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
1057c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1058c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10597ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10606a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_size (genericobject *g, PyObject *args)
1061c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1062c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
1063c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1064c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10657ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10666a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_precision (genericobject *g, PyObject *args)
1067c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1068c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
1069c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1070c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10717ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10726a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_slider_step (genericobject *g, PyObject *args)
1073ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
1074c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
1075ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
1076ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
1077ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
10787ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef slider_methods[] = {
1079c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_value",        (PyCFunction)set_slider_value,  METH_OLDARGS},
1080c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_slider_value",        (PyCFunction)get_slider_value,  METH_NOARGS},
1081c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_bounds",       (PyCFunction)set_slider_bounds, METH_OLDARGS},
1082c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_slider_bounds",       (PyCFunction)get_slider_bounds, METH_NOARGS},
1083c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_return",       (PyCFunction)set_slider_return, METH_OLDARGS},
1084c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_size",         (PyCFunction)set_slider_size,   METH_OLDARGS},
1085c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_precision",(PyCFunction)set_slider_precision, METH_OLDARGS},
1086c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_slider_step",         (PyCFunction)set_slider_step,   METH_OLDARGS},
1087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
1088c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1089c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10907ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10916a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_positioner_xvalue (genericobject *g, PyObject *args)
1092c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1093c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
1094c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1095c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
10967ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
10976a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_positioner_xbounds (genericobject *g, PyObject *args)
1098c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1099c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_positioner_xbounds,
1100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              g-> ob_generic, args);
1101c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1102c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11037ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
11046a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_positioner_yvalue (genericobject *g, PyObject *args)
1105c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1106c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
1107c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1108c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11097ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
11106a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_positioner_ybounds (genericobject *g, PyObject *args)
1111c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INfINf (fl_set_positioner_ybounds,
1113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              g-> ob_generic, args);
1114c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1115c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11167ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
111728faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_positioner_xvalue (genericobject *g)
1118c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic);
1120c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1121c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11227ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
112328faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_positioner_xbounds (genericobject *g)
1124c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1125c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_OUTfOUTf (fl_get_positioner_xbounds, g-> ob_generic);
1126c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1127c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11287ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
112928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_positioner_yvalue (genericobject *g)
1130c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic);
1132c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1133c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11347ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
113528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_positioner_ybounds (genericobject *g)
1136c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_OUTfOUTf (fl_get_positioner_ybounds, g-> ob_generic);
1138c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1139c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11407ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef positioner_methods[] = {
1141c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_positioner_xvalue",           (PyCFunction)set_positioner_xvalue,
1142c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
1143c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_positioner_yvalue",           (PyCFunction)set_positioner_yvalue,
1144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
1145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_positioner_xbounds",          (PyCFunction)set_positioner_xbounds,
1146c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
1147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_positioner_ybounds",          (PyCFunction)set_positioner_ybounds,
1148c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_OLDARGS},
1149c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_positioner_xvalue",           (PyCFunction)get_positioner_xvalue,
1150c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
1151c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_positioner_yvalue",           (PyCFunction)get_positioner_yvalue,
1152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
1153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_positioner_xbounds",          (PyCFunction)get_positioner_xbounds,
1154c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
1155c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_positioner_ybounds",          (PyCFunction)get_positioner_ybounds,
1156c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     METH_NOARGS},
1157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
1158c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1159c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1160c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Class timer */
1161c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11627ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
11636a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampset_timer (genericobject *g, PyObject *args)
1164c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1165c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_INf (fl_set_timer, g-> ob_generic, args);
1166c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1167c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11687ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
116928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzget_timer (genericobject *g)
1170c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return call_forms_Rf (fl_get_timer, g-> ob_generic);
1172c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1173c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11747ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef timer_methods[] = {
1175c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_timer",               (PyCFunction)set_timer, METH_OLDARGS},
1176c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_timer",               (PyCFunction)get_timer, METH_NOARGS},
1177c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
1178c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1179c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1180c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* Form objects */
1181c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1182c7df79e47da854931474f581618435fff0dd2448Guido van Rossumtypedef struct {
1183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
1184c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_FORM *ob_form;
1185c7df79e47da854931474f581618435fff0dd2448Guido van Rossum} formobject;
1186c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1187938ace69a0e112424a2f426a4881d1fd1fc922d2Jeremy Hyltonstatic PyTypeObject Formtype;
1188c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1189c7df79e47da854931474f581618435fff0dd2448Guido van Rossum#define is_formobject(v) ((v)->ob_type == &Formtype)
1190c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
11917ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
11926a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_show_form(formobject *f, PyObject *args)
1193c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1194c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int place, border;
1195c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *name;
1196c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(iis)", &place, &border, &name))
1197c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1198c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_show_form(f->ob_form, place, border, name);
1199c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1201c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1202c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12037ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
120428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_call(void (*func)(FL_FORM *), FL_FORM *f)
1205c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1206c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func)(f);
1207c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1208c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1209c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1210c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1211c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12127ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12136a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_call_INiINi(void (*func)(FL_FORM *, int, int), FL_FORM *f, PyObject *args)
1214c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1215c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int a, b;
1216c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1217c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ii)", &a, &b)) return NULL;
1218c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1219c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func)(f, a, b);
1220c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1221c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1222c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1223c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1224c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12257ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12266a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_call_INfINf(void (*func)(FL_FORM *, float, float), FL_FORM *f, PyObject *args)
1227f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
1228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float a, b;
1229f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
1230c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ff)", &a, &b)) return NULL;
1231f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
1232c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func)(f, a, b);
1233f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
1234c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1235c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1236f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
1237f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
12387ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
123928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_hide_form(formobject *f)
1240c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1241c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_hide_form, f-> ob_form);
1242c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1243c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12447ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
124528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_redraw_form(formobject *f)
1246aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
1247c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_redraw_form, f-> ob_form);
1248c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1249c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12507ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12516a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_set_form_position(formobject *f, PyObject *args)
12522df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum{
1253c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
12542df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum}
12552df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
12567ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12576a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_set_form_size(formobject *f, PyObject *args)
1258f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
1259c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
1260f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
1261f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
12627ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12636a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_scale_form(formobject *f, PyObject *args)
1264f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum{
1265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call_INfINf(fl_scale_form, f-> ob_form, args);
1266f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum}
1267f1dc56632881fe4e5beed047580bf927679f3669Guido van Rossum
12687ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12696a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampgeneric_add_object(formobject *f, PyObject *args, FL_OBJECT *(*func)(int, float, float, float, float, char*), PyMethodDef *internal_methods)
1270c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int type;
1272c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float x, y, w, h;
1273c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *name;
1274c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_OBJECT *obj;
1275c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1276c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args,"(iffffs)", &type,&x,&y,&w,&h,&name))
1277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1278aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
1279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_addto_form (f-> ob_form);
1280aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
1281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    obj = (*func) (type, x, y, w, h, name);
1282c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_end_form();
1284c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1285c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (obj == NULL) {
1286c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_NoMemory();
1287c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1289c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return newgenericobject (obj, internal_methods);
1291c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1292c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12937ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
12946a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_button(formobject *f, PyObject *args)
1295c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1296c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_button, button_methods);
1297c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1298c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
12997ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13006a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_lightbutton(formobject *f, PyObject *args)
1301c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1302c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_lightbutton, button_methods);
1303c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1304c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_roundbutton(formobject *f, PyObject *args)
1307c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_roundbutton, button_methods);
1309c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1310c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13117ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13126a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_menu (formobject *f, PyObject *args)
1313c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1314c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_menu, menu_methods);
1315c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1316c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13177ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13186a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_slider(formobject *f, PyObject *args)
1319c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_slider, slider_methods);
1321c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1322c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13237ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13246a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_valslider(formobject *f, PyObject *args)
1325c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1326c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_valslider, slider_methods);
1327c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1328c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13297ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13306a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_dial(formobject *f, PyObject *args)
1331c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_dial, dial_methods);
1333c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1334c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13357ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13366a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_counter(formobject *f, PyObject *args)
1337c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_counter, counter_methods);
1339c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1340c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13417ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13426a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_clock(formobject *f, PyObject *args)
1343c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_clock, clock_methods);
1345c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1346c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13477ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13486a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_box(formobject *f, PyObject *args)
1349c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_box,
1351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              (PyMethodDef *)NULL);
1352c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1353c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13547ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13556a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_choice(formobject *f, PyObject *args)
1356c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1357c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_choice, choice_methods);
1358c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1359c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13607ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13616a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_browser(formobject *f, PyObject *args)
1362c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_browser, browser_methods);
1364c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1365c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13667ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13676a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_positioner(formobject *f, PyObject *args)
1368c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_positioner,
1370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              positioner_methods);
1371c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1372c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13737ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13746a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_input(formobject *f, PyObject *args)
1375c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_input, input_methods);
1377c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1378c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13797ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13806a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_text(formobject *f, PyObject *args)
1381c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1382c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_text,
1383c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              (PyMethodDef *)NULL);
1384c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1385c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13867ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
13876a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_add_timer(formobject *f, PyObject *args)
1388c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return generic_add_object(f, args, fl_add_timer, timer_methods);
1390c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1391c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
139328faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_freeze_form(formobject *f)
1394c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_freeze_form, f-> ob_form);
1396c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1397c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
13987ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
139928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_unfreeze_form(formobject *f)
1400c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1401c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_unfreeze_form, f-> ob_form);
1402c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1403c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
14047ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
140528faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_activate_form(formobject *f)
1406c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_activate_form, f-> ob_form);
1408c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1409c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
14107ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
141128faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzform_deactivate_form(formobject *f)
1412c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1413c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return form_call(fl_deactivate_form, f-> ob_form);
1414c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1415c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
14167ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14176a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_bgn_group(formobject *f, PyObject *args)
14180374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
1419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_OBJECT *obj;
14202df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_addto_form(f-> ob_form);
1422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    obj = fl_bgn_group();
1423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_end_form();
14242df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1425c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (obj == NULL) {
1426c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_NoMemory();
1427c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
14292df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return newgenericobject (obj, (PyMethodDef *) NULL);
14310374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
14320374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
14337ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14346a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_end_group(formobject *f, PyObject *args)
14350374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
1436c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_addto_form(f-> ob_form);
1437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_end_group();
1438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_end_form();
1439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
14410374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
14420374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
14437ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14446a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_find_first_or_last(FL_OBJECT *(*func)(FL_FORM *, int, float, float), formobject *f, PyObject *args)
144575cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum{
1446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int type;
1447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float mx, my;
1448c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_OBJECT *generic;
1449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
145075cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
1451c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(iff)", &type, &mx, &my)) return NULL;
145275cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
1453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    generic = (*func) (f-> ob_form, type, mx, my);
145475cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
1455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (generic == NULL)
1456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
1458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
1459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g = findgeneric(generic);
1462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (g == NULL) {
1463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError,
1464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   "forms_find_{first|last} returns unknown object");
1465c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(g);
1468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *) g;
146975cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum}
147075cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
14717ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14726a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_find_first(formobject *f, PyObject *args)
147375cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum{
1474c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_find_first_or_last(fl_find_first, f, args);
147575cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum}
147675cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
14777ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14786a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_find_last(formobject *f, PyObject *args)
147975cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum{
1480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_find_first_or_last(fl_find_last, f, args);
148175cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum}
148275cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
14837ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
14846a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_set_object_focus(formobject *f, PyObject *args)
14857066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum{
1486c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
1487c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args == NULL || !is_genericobject(args)) {
1488c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_BadArgument();
1489c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    g = (genericobject *)args;
1492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_set_object_focus(f->ob_form, g->ob_generic);
1493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1494c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
14957066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum}
14967066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
14977ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef form_methods[] = {
1498c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* adm */
1499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_form",               (PyCFunction)form_show_form,     METH_OLDARGS},
1500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"hide_form",               (PyCFunction)form_hide_form,     METH_NOARGS},
1501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"redraw_form",             (PyCFunction)form_redraw_form,   METH_NOARGS},
1502c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_form_position",       (PyCFunction)form_set_form_position, METH_OLDARGS},
1503c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_form_size",           (PyCFunction)form_set_form_size, METH_OLDARGS},
1504c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"scale_form",              (PyCFunction)form_scale_form,    METH_OLDARGS},
1505c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"freeze_form",             (PyCFunction)form_freeze_form,   METH_NOARGS},
1506c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"unfreeze_form",           (PyCFunction)form_unfreeze_form, METH_NOARGS},
1507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"activate_form",           (PyCFunction)form_activate_form, METH_NOARGS},
1508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deactivate_form",         (PyCFunction)form_deactivate_form, METH_NOARGS},
1509c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"bgn_group",               (PyCFunction)form_bgn_group,  METH_OLDARGS},
1510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"end_group",               (PyCFunction)form_end_group,  METH_OLDARGS},
1511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"find_first",              (PyCFunction)form_find_first, METH_OLDARGS},
1512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"find_last",               (PyCFunction)form_find_last,  METH_OLDARGS},
1513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_object_focus",        (PyCFunction)form_set_object_focus, METH_OLDARGS},
1514c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1515c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* basic objects */
1516c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_button",              (PyCFunction)form_add_button, METH_OLDARGS},
1517c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou/*      {"add_bitmap",          (method)form_add_bitmap, METH_OLDARGS}, */
1518c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_lightbutton",         (PyCFunction)form_add_lightbutton, METH_OLDARGS},
1519c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_roundbutton",         (PyCFunction)form_add_roundbutton, METH_OLDARGS},
1520c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_menu",                (PyCFunction)form_add_menu,      METH_OLDARGS},
1521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_slider",              (PyCFunction)form_add_slider,    METH_OLDARGS},
1522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_positioner",          (PyCFunction)form_add_positioner, METH_OLDARGS},
1523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_valslider",           (PyCFunction)form_add_valslider, METH_OLDARGS},
1524c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_dial",                (PyCFunction)form_add_dial,      METH_OLDARGS},
1525c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_counter",             (PyCFunction)form_add_counter,   METH_OLDARGS},
1526c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_box",                 (PyCFunction)form_add_box,       METH_OLDARGS},
1527c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_clock",               (PyCFunction)form_add_clock,     METH_OLDARGS},
1528c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_choice",              (PyCFunction)form_add_choice,    METH_OLDARGS},
1529c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_browser",             (PyCFunction)form_add_browser,   METH_OLDARGS},
1530c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_input",               (PyCFunction)form_add_input,     METH_OLDARGS},
1531c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_timer",               (PyCFunction)form_add_timer,     METH_OLDARGS},
1532c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"add_text",                (PyCFunction)form_add_text,      METH_OLDARGS},
1533c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
1534c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1535c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1536c7df79e47da854931474f581618435fff0dd2448Guido van Rossumstatic void
15376a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_dealloc(formobject *f)
1538c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1539c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    releaseobjects(f->ob_form);
1540c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (f->ob_form->visible)
1541c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        fl_hide_form(f->ob_form);
1542c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_free_form(f->ob_form);
1543c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_Del(f);
1544c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1545c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1546d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum#define OFF(x) offsetof(FL_FORM, x)
1547d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum
154832db5e391bf06d3e745127f6eb600947e399f878Guido van Rossumstatic struct memberlist form_memberlist[] = {
1549c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"window",          T_LONG,         OFF(window),    RO},
1550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"w",               T_FLOAT,        OFF(w)},
1551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"h",               T_FLOAT,        OFF(h)},
1552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"x",               T_FLOAT,        OFF(x),         RO},
1553c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"y",               T_FLOAT,        OFF(y),         RO},
1554c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deactivated",     T_INT,          OFF(deactivated)},
1555c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"visible",         T_INT,          OFF(visible),   RO},
1556c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"frozen",          T_INT,          OFF(frozen),    RO},
1557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"doublebuf",       T_INT,          OFF(doublebuf)},
1558c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL}      /* Sentinel */
155932db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum};
156032db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum
1561d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum#undef OFF
1562d97f048ae825d852bba1eea361ac41cb428cd3b0Guido van Rossum
15637ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
15646a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_getattr(formobject *f, char *name)
1565c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1566c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *meth;
156732db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum
1568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    meth = Py_FindMethod(form_methods, (PyObject *)f, name);
1569c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (meth != NULL)
1570c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return meth;
1571c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyErr_Clear();
1572c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyMember_Get((char *)f->ob_form, form_memberlist, name);
157332db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum}
157432db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum
157532db5e391bf06d3e745127f6eb600947e399f878Guido van Rossumstatic int
15766a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_setattr(formobject *f, char *name, PyObject *v)
157732db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum{
1578c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == NULL) {
1579c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError,
1580c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "can't delete form attributes");
1581c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
1582c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
158332db5e391bf06d3e745127f6eb600947e399f878Guido van Rossum
1584c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyMember_Set((char *)f->ob_form, form_memberlist, name, v);
1585c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1586c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
15877ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
15886a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampform_repr(formobject *f)
1589aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum{
1590c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
1591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyOS_snprintf(buf, sizeof(buf), "<FORMS_form at %p, window=%ld>",
1592c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                  f, f->ob_form->window);
1593c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
1594aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum}
1595aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
15967ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyTypeObject Formtype = {
1597c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(&PyType_Type)
1598c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*ob_size*/
1599c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "fl.FORMS_form",                    /*tp_name*/
1600c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(formobject),                 /*tp_size*/
1601c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_itemsize*/
1602c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
1603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor)form_dealloc,           /*tp_dealloc*/
1604c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_print*/
1605c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)form_getattr,          /*tp_getattr*/
1606c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)form_setattr,          /*tp_setattr*/
1607c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0,                                  /*tp_compare*/
1608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc)form_repr,                /*tp_repr*/
1609c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
1610c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
16117ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16126a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampnewformobject(FL_FORM *form)
1613c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1614c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    formobject *f;
1615c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    f = PyObject_New(formobject, &Formtype);
1616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (f == NULL)
1617c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    f->ob_form = form;
1619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)f;
1620c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1621c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
16222df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
1623c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* The "fl" module */
16242df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
16257ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16266a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_make_form(PyObject *dummy, PyObject *args)
1627c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int type;
1629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float w, h;
1630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_FORM *form;
1631c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
1632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1633c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    form = fl_bgn_form(type, w, h);
1634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (form == NULL) {
1635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* XXX Actually, cannot happen! */
1636c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_NoMemory();
1637c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1638c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1639c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_end_form();
1640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return newformobject(form);
1641c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1642c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
16437ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16446a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_activate_all_forms(PyObject *f, PyObject *args)
16452bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum{
1646c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_activate_all_forms();
1647c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
16492bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum}
16502bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum
16517ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16526a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_deactivate_all_forms(PyObject *f, PyObject *args)
16532bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum{
1654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_deactivate_all_forms();
1655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
16572bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum}
16582bac4d33683bb16050908a875b5b67818e167aa4Guido van Rossum
16597ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *my_event_callback = NULL;
1660c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
16617ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
16626a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_set_event_call_back(PyObject *dummy, PyObject *args)
1663c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1664c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args == Py_None)
1665c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        args = NULL;
1666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    my_event_callback = args;
1667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_XINCREF(args);
1668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1670c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1671c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
16727ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
167328faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_do_or_check_forms(PyObject *dummy, FL_OBJECT *(*func)(void))
1674c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1675c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FL_OBJECT *generic;
1676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    genericobject *g;
1677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *arg, *res;
1678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (;;) {
1680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_BEGIN_ALLOW_THREADS
1681c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        generic = (*func)();
1682c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_END_ALLOW_THREADS
1683c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (generic == NULL) {
1684c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_INCREF(Py_None);
1685c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return Py_None;
1686c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
1687c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (generic == FL_EVENT) {
1688c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            int dev;
1689c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            short val;
1690c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (my_event_callback == NULL)
1691c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return PyInt_FromLong(-1L);
1692c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            dev = fl_qread(&val);
1693c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            arg = Py_BuildValue("(ih)", dev, val);
1694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (arg == NULL)
1695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return NULL;
1696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            res = PyEval_CallObject(my_event_callback, arg);
1697c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_XDECREF(res);
1698c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_DECREF(arg);
1699c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (res == NULL)
1700c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return NULL; /* Callback raised exception */
1701c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            continue;
1702c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
1703c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        g = findgeneric(generic);
1704c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (g == NULL) {
1705c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            /* Object not known to us (some dialogs cause this) */
1706c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            continue; /* Ignore it */
1707c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
1708c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (g->ob_callback == NULL) {
1709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_INCREF(g);
1710c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return ((PyObject *) g);
1711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
1712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        arg = PyTuple_Pack(2, (PyObject *)g, g->ob_callback_arg);
1713c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (arg == NULL)
1714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
1715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        res = PyEval_CallObject(g->ob_callback, arg);
1716c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_XDECREF(res);
1717c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(arg);
1718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (res == NULL)
1719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL; /* Callback raised exception */
1720c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1721c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1722c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
17237ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
172428faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_do_forms(PyObject *dummy)
1725c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_do_or_check_forms(dummy, fl_do_forms);
1727c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1728c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
17297ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
173028faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_check_forms(PyObject *dummy)
1731c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_do_or_check_forms(dummy, fl_check_forms);
1733c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1734c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
17357ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
173628faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_do_only_forms(PyObject *dummy)
17377066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum{
1738c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_do_or_check_forms(dummy, fl_do_only_forms);
17397066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum}
17407066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
17417ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
174228faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_check_only_forms(PyObject *dummy)
17437066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum{
1744c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_do_or_check_forms(dummy, fl_check_only_forms);
17457066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum}
17467066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
17470374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#ifdef UNUSED
17487ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
174928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzfl_call(void (*func)(void))
1750c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (*func)();
1752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1754c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
17550374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum#endif
1756c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
17577ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
17586a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_set_graphics_mode(PyObject *dummy, PyObject *args)
1759ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
1760c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int rgbmode, doublebuf;
1761ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
1762c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
1763c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1764c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_set_graphics_mode(rgbmode,doublebuf);
1765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1767ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
1768ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
17697ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
17706a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_get_rgbmode(PyObject *dummy, PyObject *args)
1771ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum{
1772c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    extern int fl_rgbmode;
1773ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
1774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args != NULL) {
1775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_BadArgument();
1776c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1778c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong((long)fl_rgbmode);
1779ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum}
17807066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
17817ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
17826a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_show_errors(PyObject *dummy, PyObject *args)
17837066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum{
1784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int show;
1785c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &show))
1786c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_show_errors(show);
1788c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1789c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
17907066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum}
17917066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
17927ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
17936a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_set_font_name(PyObject *dummy, PyObject *args)
17947066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum{
1795c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int numb;
1796c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *name;
1797c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(is)", &numb, &name))
1798c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1799c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_set_font_name(numb, name);
1800c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1801c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
18027066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum}
18037066dd75c5ee8385135541d03fb8edd8939ad740Guido van Rossum
1804ddc0d3e0665b3ebec26a22e85f9186c472c7ca18Guido van Rossum
18057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_qdevice(PyObject *self, PyObject *args)
1807c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short arg1;
1809c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "h", &arg1))
1810c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1811c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_qdevice(arg1);
1812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1814c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1815c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18167ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18176a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_unqdevice(PyObject *self, PyObject *args)
1818c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1819c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short arg1;
1820c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "h", &arg1))
1821c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1822c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_unqdevice(arg1);
1823c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1824c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1825c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1826c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18277ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18286a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_isqueued(PyObject *self, PyObject *args)
1829c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long retval;
1831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short arg1;
1832c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "h", &arg1))
1833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1834c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = fl_isqueued(arg1);
1835c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1836c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong(retval);
1837c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1838c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18397ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18406a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_qtest(PyObject *self, PyObject *args)
1841c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1842c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long retval;
1843c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = fl_qtest();
1844c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong(retval);
1845c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1846c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1847c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18487ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18496a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_qread(PyObject *self, PyObject *args)
1850c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int dev;
1852c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short val;
1853c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
1854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    dev = fl_qread(&val);
1855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
1856c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("(ih)", dev, val);
1857c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1858c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18597ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
186028faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_qreset(PyObject *self)
1861c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1862c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_qreset();
1863c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1864c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1865c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1866c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18677ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18686a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_qenter(PyObject *self, PyObject *args)
1869c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short arg1, arg2;
1871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
1872c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1873c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_qenter(arg1, arg2);
1874c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1875c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1876c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1877c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18787ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18796a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_color(PyObject *self, PyObject *args)
1880c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int arg;
1882c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &arg)) return NULL;
1884c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_color((short) arg);
1886c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1889c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1890c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
18917ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
18926a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_mapcolor(PyObject *self, PyObject *args)
1893c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int arg0, arg1, arg2, arg3;
1895c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
1897c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1898c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);
1900c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1903c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1904c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
19057ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19066a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_getmcolor(PyObject *self, PyObject *args)
1907c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int arg;
1909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short r, g, b;
1910c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "i", &arg)) return NULL;
1912c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_getmcolor(arg, &r, &g, &b);
1914c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
1915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("(hhh)", r, g, b);
1916c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1917c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
19187ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
191928faa1bf28b092e78bf040dd9dcc73efded527c6Neal Norwitzforms_get_mouse(PyObject *self)
192075cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum{
1921c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    float x, y;
192275cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
1923c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_get_mouse(&x, &y);
192475cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
1925c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("(ff)", x, y);
192675cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum}
192775cc8980e826d5c8759a5b001bbf7726d017607aGuido van Rossum
19287ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19296a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_tie(PyObject *self, PyObject *args)
1930c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
1931c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    short arg1, arg2, arg3;
1932c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
1933c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1934c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_tie(arg1, arg2, arg3);
1935c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1936c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
1937c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
1938c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
19397ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19406a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_show_message(PyObject *f, PyObject *args)
19410374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
1942c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a, *b, *c;
19430374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
1944c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
19450374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
1946c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
1947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_show_message(a, b, c);
1948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
19490374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
1950c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_None;
19520374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
19530374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
19547ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19556a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_show_choice(PyObject *f, PyObject *args)
1956b3a0e4c842c5dd207518a95e2c9f0e68b79e0364Guido van Rossum{
1957c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *m1, *m2, *m3, *b1, *b2, *b3;
1958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int nb;
1959c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *format;
1960c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long rv;
1961c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1962c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args == NULL || !PyTuple_Check(args)) {
1963c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_BadArgument();
1964c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1965c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    nb = PyTuple_Size(args) - 3;
1967c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (nb <= 0) {
1968c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError,
1969c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "need at least one button label");
1970c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1971c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyInt_Check(PyTuple_GetItem(args, 3))) {
1973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError,
1974c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   "'number-of-buttons' argument not needed");
1975c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1976c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1977c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    switch (nb) {
1978c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    case 1: format = "(ssss)"; break;
1979c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    case 2: format = "(sssss)"; break;
1980c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    case 3: format = "(ssssss)"; break;
1981c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    default:
1982c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "too many button labels");
1983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
1987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1988c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1989c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
1990c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
1991c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
1992c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong(rv);
1993b3a0e4c842c5dd207518a95e2c9f0e68b79e0364Guido van Rossum}
1994b3a0e4c842c5dd207518a95e2c9f0e68b79e0364Guido van Rossum
19957ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
19966a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_show_question(PyObject *f, PyObject *args)
19970374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
1998c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int ret;
1999c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a, *b, *c;
20000374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2001c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;
20020374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2003c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
2004c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ret = fl_show_question(a, b, c);
2005c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
2006aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
2007c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyInt_FromLong((long) ret);
20080374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20090374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20107ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
20116a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_show_input(PyObject *f, PyObject *args)
20120374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2013c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
2014c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a, *b;
20150374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2016c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;
20170374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2018c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
2019c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    str = fl_show_input(a, b);
2020c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
20212df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
2022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (str == NULL) {
2023c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
2024c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
2025c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2026c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(str);
20270374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20280374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20297ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
20306a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_file_selector(PyObject *f, PyObject *args)
20310374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2032c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
2033c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *a, *b, *c, *d;
20340374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2035c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;
20360374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2037c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_BEGIN_ALLOW_THREADS
2038c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    str = fl_show_file_selector(a, b, c, d);
2039c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_END_ALLOW_THREADS
2040aa7ca2dc1a50e379a8173e13edb0a640c5402276Guido van Rossum
2041c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (str == NULL) {
2042c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
2043c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
2044c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2045c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(str);
20460374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20470374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20480374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20497ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
2050bd4bc4e9e947617def66780efbbea4eb08990e56Thomas Woutersforms_file_selector_func(PyObject *args, char *(*func)(void))
20510374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2052c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *str;
20530374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
2054c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    str = (*func) ();
20552df7bcca97c8501be1b4c6739ac48196b7f04975Guido van Rossum
2056c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (str == NULL) {
2057c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
2058c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
2059c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2060c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(str);
20610374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20620374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20637ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
20646a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_get_directory(PyObject *f, PyObject *args)
20650374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2066c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_file_selector_func(args, fl_get_directory);
20670374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20680374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20697ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
20706a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_get_pattern(PyObject *f, PyObject *args)
20710374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2072c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_file_selector_func(args, fl_get_pattern);
20730374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20740374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20757ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyObject *
20766a85027a97d090e2a7e38bb37d816ca22d072760Peter Schneider-Kampforms_get_filename(PyObject *f, PyObject *args)
20770374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum{
2078c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return forms_file_selector_func(args, fl_get_filename);
20790374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum}
20800374711fb331c87ee74dedea778c69ea1d3a0d81Guido van Rossum
20817ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Massestatic PyMethodDef forms_methods[] = {
2082c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* adm */
2083c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"make_form",               forms_make_form, METH_OLDARGS},
2084c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"activate_all_forms",      forms_activate_all_forms, METH_OLDARGS},
2085c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"deactivate_all_forms",forms_deactivate_all_forms, METH_OLDARGS},
2086c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* gl support wrappers */
2087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"qdevice",                 forms_qdevice, METH_OLDARGS},
2088c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"unqdevice",               forms_unqdevice, METH_OLDARGS},
2089c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"isqueued",                forms_isqueued, METH_OLDARGS},
2090c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"qtest",                   forms_qtest, METH_OLDARGS},
2091c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"qread",                   forms_qread, METH_OLDARGS},
2092c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou/*      {"blkqread",            forms_blkqread, METH_OLDARGS}, */
2093c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"qreset",                  forms_qreset, METH_NOARGS},
2094c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"qenter",                  forms_qenter, METH_OLDARGS},
2095c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_mouse",               forms_get_mouse, METH_NOARGS},
2096c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"tie",                     forms_tie, METH_OLDARGS},
2097c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou/*      {"new_events",          forms_new_events, METH_OLDARGS}, */
2098c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"color",                   forms_color, METH_OLDARGS},
2099c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"mapcolor",                forms_mapcolor, METH_OLDARGS},
2100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"getmcolor",               forms_getmcolor, METH_OLDARGS},
2101c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* interaction */
2102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"do_forms",                forms_do_forms, METH_NOARGS},
2103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"do_only_forms",           forms_do_only_forms, METH_NOARGS},
2104c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"check_forms",             forms_check_forms, METH_NOARGS},
2105c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"check_only_forms",        forms_check_only_forms, METH_NOARGS},
2106c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_event_call_back",     forms_set_event_call_back, METH_OLDARGS},
2107c7df79e47da854931474f581618435fff0dd2448Guido van Rossum/* goodies */
2108c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_message",            forms_show_message, METH_OLDARGS},
2109c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_question",           forms_show_question, METH_OLDARGS},
2110c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_choice",             forms_show_choice, METH_OLDARGS},
2111c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_input",              forms_show_input, METH_OLDARGS},
2112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_file_selector",      forms_file_selector, METH_OLDARGS},
2113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"file_selector",           forms_file_selector, METH_OLDARGS}, /* BW compat */
2114c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_directory",           forms_get_directory, METH_OLDARGS},
2115c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_pattern",             forms_get_pattern, METH_OLDARGS},
2116c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_filename",            forms_get_filename, METH_OLDARGS},
2117c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_graphics_mode",       forms_set_graphics_mode, METH_OLDARGS},
2118c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"get_rgbmode",             forms_get_rgbmode, METH_OLDARGS},
2119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"show_errors",             forms_show_errors, METH_OLDARGS},
2120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"set_font_name",           forms_set_font_name, METH_OLDARGS},
2121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL,                      NULL}           /* sentinel */
2122c7df79e47da854931474f581618435fff0dd2448Guido van Rossum};
2123c7df79e47da854931474f581618435fff0dd2448Guido van Rossum
2124fe51c6d66e0fbf6a142036bee2c448bd7fe8fefcMark HammondPyMODINIT_FUNC
2125f3f33dcf03eaed3c4e720178f9d69205a66d6a91Thomas Woutersinitfl(void)
2126c7df79e47da854931474f581618435fff0dd2448Guido van Rossum{
2127178582e2a48dab04bb0a20b92d38a8280327dd6fBrett Cannon    if (PyErr_WarnPy3k("the fl module has been removed in "
2128178582e2a48dab04bb0a20b92d38a8280327dd6fBrett Cannon                       "Python 3.0", 2) < 0)
2129ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter        return;
2130c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
2131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_InitModule("fl", forms_methods);
2132c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (m == NULL)
2133178582e2a48dab04bb0a20b92d38a8280327dd6fBrett Cannon        return;
2134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    foreground();
2135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    fl_init();
2136c7df79e47da854931474f581618435fff0dd2448Guido van Rossum}
21377ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse
21387ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse
21397ba4c0776819d91c3ba23ce8b6d5727f335aa7f1Roger E. Masse
2140