annotate Modules/_tkinter.c @ 1944:8e8fddcbdfd2 legacy-trunk

Hopefully the last edits for 1.1
author Guido van Rossum <guido@python.org>
date Thu, 06 Oct 1994 16:15:09 +0000
parents be956b1efb97
children 392db1881190
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /* tkintermodule.c -- Interface to libtk.a and libtcl.a.
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 Copyright (C) 1994 Steen Lumholt */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
1888
be956b1efb97 * various modules: #include "Python.h" and remove most remporary
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
4 #include <Python.h>
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #define PyInit_tkinter inittkinter
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #include <tcl.h>
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #include <tk.h>
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 extern char *getprogramname ();
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
12
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
13 /* Internal declarations from tkInt.h. */
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 extern int tk_NumMainWindows;
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
15 extern struct { Tk_Window win; } *tkMainWindowList;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 /**** Tkapp Object Declaration ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 staticforward PyTypeObject Tkapp_Type;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 typedef struct
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 PyObject_HEAD
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 Tcl_Interp *interp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 Tk_Window tkwin;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 TkappObject;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 #define Tkapp_Check(v) ((v)->ob_type == &Tkapp_Type)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 #define Tkapp_Tkwin(v) (((TkappObject *) (v))->tkwin)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #define Tkapp_Interp(v) (((TkappObject *) (v))->interp)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #define Tkapp_Result(v) (((TkappObject *) (v))->interp->result)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #define DEBUG_REFCNT(v) (printf ("DEBUG: id=%p, refcnt=%i\n", \
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 (void *) v, ((PyObject *) v)->ob_refcnt))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 /**** Error Handling ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 static PyObject *Tkinter_TclError;
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
40 static int quitMainLoop = 0;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 static int errorInCmd = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 static PyObject *excInCmd;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 static PyObject *valInCmd;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 Tkinter_Error (v)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 PyErr_SetString (Tkinter_TclError, Tkapp_Result (v));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 int
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 PythonCmd_Error (interp)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 Tcl_Interp *interp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 errorInCmd = 1;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 PyErr_GetAndClear (&excInCmd, &valInCmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 return TCL_ERROR;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 /**** Utils ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 static char *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 AsString (value, tmp)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 PyObject *value;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 PyObject *tmp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 if (PyString_Check (value))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 return PyString_AsString (value);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 v = strobject (value);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 PyList_Append (tmp, v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 Py_DECREF (v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 return PyString_AsString (v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 #define ARGSZ 64
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 static char *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 Merge (args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 PyObject *tmp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 char *argvStore[ARGSZ];
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 char **argv;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 int fvStore[ARGSZ];
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 int *fv;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 int argc;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 char *res;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 int i;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 tmp = PyList_New (0);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 argv = argvStore;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 fv = fvStore;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 if (!PyTuple_Check (args))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 argc = 1;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 fv[0] = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 argv[0] = AsString (args, tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 if (PyTuple_Size (args) > ARGSZ)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 argv = malloc (PyTuple_Size (args) * sizeof (char *));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 fv = malloc (PyTuple_Size (args) * sizeof (int));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 if (argv == NULL || fv == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 PyErr_NoMemory ();
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 argc = PyTuple_Size (args);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 for (i = 0; i < argc; i++)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 v = PyTuple_GetItem (args, i);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 if (PyTuple_Check (v))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 fv[i] = 1;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 argv[i] = Merge (v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 else if (v == Py_None)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 argc = i;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 break;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 fv[i] = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 argv[i] = AsString (v, tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 res = Tcl_Merge (argc, argv);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 Py_DECREF (tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 for (i = 0; i < argc; i++)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 if (fv[i]) free (argv[i]);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 if (argv != argvStore)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 free (argv);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 if (fv != fvStore)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 free (fv);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 return res;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 Split (self, list)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 char *list;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 int argc;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 char **argv;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 if (list == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 if (Tcl_SplitList (Tkapp_Interp (self), list, &argc, &argv) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 if (argc == 0)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 v = PyString_FromString ("");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 else if (argc == 1)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 v = PyString_FromString (argv[0]);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 int i;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
179
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 v = PyTuple_New (argc);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 for (i = 0; i < argc; i++)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 PyTuple_SetItem (v, i, Split (self, argv[i]));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
184
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 free (argv);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 return v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 /**** Tkapp Object ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 #ifndef WITH_APPINIT
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 int
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 Tcl_AppInit (interp)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 Tcl_Interp *interp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 if (Tcl_Init (interp) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 return TCL_ERROR;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 if (Tk_Init (interp) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 return TCL_ERROR;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 return TCL_OK;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 #endif /* !WITH_APPINIT */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 /* Initialize the Tk application; see the `main' function in
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 `tkMain.c'. */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 static TkappObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 Tkapp_New (screenName, baseName, className, interactive)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 char *screenName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 char *baseName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 char *className;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 int interactive;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 TkappObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 v = PyObject_NEW (TkappObject, &Tkapp_Type);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 if (v == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 v->interp = Tcl_CreateInterp ();
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 v->tkwin = Tk_CreateMainWindow (v->interp, screenName,
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 baseName, className);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 if (v->tkwin == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 return (TkappObject *) Tkinter_Error ((PyObject *) v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
224
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 Tk_GeometryRequest (v->tkwin, 200, 200);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 if (screenName != NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 Tcl_SetVar2 (v->interp, "env", "DISPLAY", screenName, TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 if (interactive)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 Tcl_SetVar (v->interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 Tcl_SetVar (v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
234
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 if (Tcl_AppInit (v->interp) != TCL_OK)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 PyErr_SetString (Tkinter_TclError, "Tcl_AppInit failed"); /* XXX */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
240
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 return v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
243
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 /** Tcl Eval **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 Tkapp_Call (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 char *cmd;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
252
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 cmd = Merge (args);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 if (Tcl_Eval (Tkapp_Interp (self), cmd) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 free (cmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 free (cmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 Tkapp_GlobalCall (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 char *cmd;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
270
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 cmd = Merge (args);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 if (Tcl_GlobalEval (Tkapp_Interp (self), cmd) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 free (cmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
277
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 free (cmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
281
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 Tkapp_Eval (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 char *script;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 if (!PyArg_Parse (args, "s", &script))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
291
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 if (Tcl_Eval (Tkapp_Interp (self), script) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
294
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
297
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 Tkapp_GlobalEval (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 char *script;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
304
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 if (!PyArg_Parse (args, "s", &script))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
307
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 if (Tcl_GlobalEval (Tkapp_Interp (self), script) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
310
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
313
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 Tkapp_EvalFile (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 char *fileName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
320
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 if (!PyArg_Parse (args, "s", &fileName))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
323
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 if (Tcl_EvalFile (Tkapp_Interp (self), fileName) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
326
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
329
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 Tkapp_Record (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 char *script;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
336
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 if (!PyArg_Parse (args, "s", &script))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
338 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
339
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 if (Tcl_RecordAndEval (Tkapp_Interp (self),
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 script, TCL_NO_EVAL) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
343
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 return PyString_FromString (Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
346
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 Tkapp_AddErrorInfo (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 char *msg;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 if (!PyArg_Parse (args, "s", &msg))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 Tcl_AddErrorInfo (Tkapp_Interp (self), msg);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
357
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 Py_INCREF(Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
360 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
362 /** Tcl Variable **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
363
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
364 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 SetVar (self, args, flags)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
366 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
368 int flags;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 char *name1, *name2, *ok;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 PyObject *newValue;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 PyObject *tmp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
373
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 tmp = PyList_New (0);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
375
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 if (PyArg_Parse (args, "(sO)", &name1, &newValue))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
377 ok = Tcl_SetVar (Tkapp_Interp (self), name1,
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
378 AsString (newValue, tmp), flags); /* XXX Merge? */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 else if (PyArg_Parse (args, "(ssO)", &name1, &name2, &newValue))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 ok = Tcl_SetVar2 (Tkapp_Interp (self), name1, name2,
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 AsString (newValue, tmp), flags);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
382 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 Py_DECREF (tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 Py_DECREF (tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
388
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 if (!ok)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
391
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
395
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 Tkapp_SetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 return SetVar (self, args, TCL_LEAVE_ERR_MSG);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 Tkapp_GlobalSetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 return SetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
411
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
412 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
413 GetVar (self, args, flags)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
414 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 int flags;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
418 char *name1, *name2, *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
419
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 if (PyArg_Parse (args, "s", &name1))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
421 s = Tcl_GetVar (Tkapp_Interp (self), name1, flags);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
422 else if (PyArg_Parse (args, "(ss)", &name1, &name2))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
423 s = Tcl_GetVar2 (Tkapp_Interp (self), name1, name2, flags);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
424 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
425 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
426
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
427 if (s == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
428 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
429
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
430 return PyString_FromString (s);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
432
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 Tkapp_GetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
437 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 return GetVar (self, args, TCL_LEAVE_ERR_MSG);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
439 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
440
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 Tkapp_GlobalGetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
443 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
444 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
445 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
446 return GetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
447 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
448
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
449 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
450 UnsetVar (self, args, flags)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
451 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
452 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 int flags;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
455 char *name1, *name2;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 int code;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
457
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 if (PyArg_Parse (args, "s", &name1))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
459 code = Tcl_UnsetVar (Tkapp_Interp (self), name1, flags);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
460 else if (PyArg_Parse (args, "(ss)", &name1, &name2))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 code = Tcl_UnsetVar2 (Tkapp_Interp (self), name1, name2, flags);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
462 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
464
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 if (code == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
467
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
468 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
470 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
471
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
473 Tkapp_UnsetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 return UnsetVar (self, args, TCL_LEAVE_ERR_MSG);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
478 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
479
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
480 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 Tkapp_GlobalUnsetVar (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
483 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
484 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
485 return UnsetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
487
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 /** Tcl to Python **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
489
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 Tkapp_GetInt (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
492 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
494 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
495 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
496 int v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
497
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
498 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
499 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 if (Tcl_GetInt (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
501 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
502 return Py_BuildValue ("i", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
504
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
505 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
506 Tkapp_GetDouble (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
507 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
508 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
509 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 double v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
512
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
513 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
514 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
515 if (Tcl_GetDouble (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
516 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
517 return Py_BuildValue ("d", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
518 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
519
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
520 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
521 Tkapp_GetBoolean (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
522 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
523 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
524 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
525 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
526 int v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
527
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
528 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
530 if (Tcl_GetBoolean (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
532 return Py_BuildValue ("i", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
533 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
534
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 Tkapp_ExprString (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
539 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
541
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
542 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
544 if (Tcl_ExprString (Tkapp_Interp (self), s) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 return Py_BuildValue ("s", Tkapp_Result (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
547 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
548
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
549 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
550 Tkapp_ExprLong (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
551 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
552 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
555 long v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
556
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
557 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
558 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 if (Tcl_ExprLong (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
561 return Py_BuildValue ("l", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
562 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
563
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
564 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
565 Tkapp_ExprDouble (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
566 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
567 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
568 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
569 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
570 double v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
571
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
572 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
573 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
574 if (Tcl_ExprDouble (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
575 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
576 return Py_BuildValue ("d", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
577 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
578
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
579 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
580 Tkapp_ExprBoolean (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
581 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
583 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
584 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
585 int v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
586
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
587 if (!PyArg_Parse (args, "s", &s))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
588 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
589 if (Tcl_ExprBoolean (Tkapp_Interp (self), s, &v) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
591 return Py_BuildValue ("i", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
592 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
593
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
594 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
595 Tkapp_SplitList (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
596 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
597 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
598 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
599 char *list;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 int argc;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 char **argv;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
602 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 int i;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
604
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
605 if (!PyArg_Parse (args, "s", &list))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
606 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
607
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 if (Tcl_SplitList (Tkapp_Interp (self), list, &argc, &argv) == TCL_ERROR)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
609 return Tkinter_Error (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
610
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 v = PyTuple_New (argc);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 for (i = 0; i < argc; i++)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 PyTuple_SetItem (v, i, PyString_FromString (argv[i]));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
614
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
615 free (argv);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
616 return v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
617 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
618
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
620 Tkapp_Split (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
622 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
623 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 char *list;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
625
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 if (!PyArg_Parse (args, "s", &list))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
627 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 return Split (self, list);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
630
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
631 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
632 Tkapp_Merge (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
633 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 char *s;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 PyObject *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
638
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 s = Merge (args);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 v = PyString_FromString (s);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
641 free (s);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
642 return v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
644
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 /** Tcl Command **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
646
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 /* This is the Tcl command that acts as a wrapper for Python
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
648 function or method. */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 static int
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 PythonCmd (clientData, interp, argc, argv)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 ClientData clientData; /* Is (self, func) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
652 Tcl_Interp *interp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 int argc;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 char *argv[];
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 PyObject *self, *func, *arg, *res, *tmp;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 int i;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
658
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
659 self = PyTuple_GetItem ((PyObject *) clientData, 0);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 func = PyTuple_GetItem ((PyObject *) clientData, 1);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
661
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 /* Create argument list (argv1, ..., argvN) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
663 arg = PyTuple_New (argc - 1);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
664 for (i = 0; i < (argc - 1); i++)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
665 PyTuple_SetItem (arg, i, PyString_FromString (argv[i + 1]));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
666
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
667 res = PyEval_CallObject (func, arg);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
668 Py_DECREF (arg);
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
669
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
670 if (res == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
671 return PythonCmd_Error (interp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
672
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 tmp = PyList_New (0);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
674 Tcl_SetResult (Tkapp_Interp (self), AsString (res, tmp), TCL_VOLATILE);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 Py_DECREF (res);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 Py_DECREF (tmp);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
677
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
678 return TCL_OK;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
679 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
680
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 static void
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 PythonCmdDelete (clientData)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 ClientData clientData; /* Is (self, func) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
684 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 Py_DECREF ((PyObject *) clientData);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
686 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
687
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
688 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 Tkapp_CreateCommand (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
691 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
692 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
693 char *cmdName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
694 PyObject *data;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
695 PyObject *func;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
696
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
697 /* Args is: (cmdName, func) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
698 if (!PyTuple_Check (args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
699 || !(PyTuple_Size (args) == 2)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 || !PyString_Check (PyTuple_GetItem (args, 0))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
701 || !(PyMethod_Check (PyTuple_GetItem (args, 1))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
702 || PyFunction_Check (PyTuple_GetItem (args, 1))))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
703 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
704 PyErr_SetString (PyExc_TypeError, "bad argument list");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
705 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
706 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
707
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
708 cmdName = PyString_AsString (PyTuple_GetItem (args, 0));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
709 func = PyTuple_GetItem (args, 1);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
710
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
711 data = PyTuple_New (2); /* ClientData is: (self, func) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
712
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
713 Py_INCREF (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
714 PyTuple_SetItem (data, 0, self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
715
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
716 Py_INCREF (func);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
717 PyTuple_SetItem (data, 1, func);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
718
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
719 Tcl_CreateCommand (Tkapp_Interp (self), cmdName, PythonCmd,
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
720 (ClientData) data, PythonCmdDelete);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
721
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
723 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
724 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
725
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
726 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
727 Tkapp_DeleteCommand (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
728 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
729 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
730 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
731 char *cmdName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
732
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
733 if (!PyArg_Parse (args, "s", &cmdName))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
734 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
735 if (Tcl_DeleteCommand (Tkapp_Interp (self), cmdName) == -1)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
736 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
737 PyErr_SetString (Tkinter_TclError, "can't delete Tcl command");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
738 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
739 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
740 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
741 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
742 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
743
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
744 /** File Handler **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
745
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 void
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
747 FileHandler (clientData, mask)
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
748 ClientData clientData; /* Is: (func, file) */
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
749 int mask;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
750 {
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
751 PyObject *func, *file, *arg, *res;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
752
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
753 func = PyTuple_GetItem ((PyObject *) clientData, 0);
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
754 file = PyTuple_GetItem ((PyObject *) clientData, 1);
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
755
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
756 arg = Py_BuildValue ("(Oi)", file, (long) mask);
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
757 res = PyEval_CallObject (func, arg);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
758 Py_DECREF (arg);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
759 if (res == NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
760 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
761 errorInCmd = 1;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
762 PyErr_GetAndClear (&excInCmd, &valInCmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
763 }
1771
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
764 Py_XDECREF (res);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
765 }
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
766
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
767 static int
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
768 GetFileNo (file)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
769 PyObject *file; /* Either an int >= 0 or an object with a
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
770 .fileno() method that returns an int >= 0 */
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
771 {
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
772 object *meth, *args, *res;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
773 int id;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
774 if (PyInt_Check(file)) {
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
775 id = PyInt_AsLong(file);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
776 if (id < 0)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
777 PyErr_SetString(PyExc_ValueError, "invalid file id");
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
778 return id;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
779 }
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
780 meth = PyObject_GetAttrString(file, "fileno");
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
781 if (meth == NULL)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
782 return -1;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
783 args = PyTuple_New(0);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
784 if (args == NULL)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
785 return -1;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
786 res = PyEval_CallObject(meth, args);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
787 Py_DECREF(args);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
788 Py_DECREF(meth);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
789 if (res == NULL)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
790 return -1;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
791 if (PyInt_Check(res))
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
792 id = PyInt_AsLong(res);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
793 else
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
794 id = -1;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
795 if (id < 0)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
796 PyErr_SetString(PyExc_ValueError,
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
797 "invalid fileno() return value");
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
798 Py_DECREF(res);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
799 return id;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
800 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
801
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
802 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
803 Tkapp_CreateFileHandler (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
804 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
805 PyObject *args; /* Is (file, mask, func) */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
806 {
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
807 PyObject *file, *func, *data;
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
808 int mask, id;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
809
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
810 if (!PyArg_Parse (args, "(OiO)", &file, &mask, &func))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
811 return NULL;
1771
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
812 id = GetFileNo (file);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
813 if (id < 0)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
814 return NULL;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
815 if (!(PyMethod_Check(func) || PyFunction_Check(func)))
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
816 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
817 PyErr_SetString (PyExc_TypeError, "bad argument list");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
818 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
819 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
820
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
821 /* ClientData is: (func, file) */
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
822 data = Py_BuildValue ("(OO)", func, file);
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
823
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
824 Tk_CreateFileHandler (id, mask, FileHandler, (ClientData) data);
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
825 /* XXX fileHandlerDict */
1690
93e036786b17 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
Guido van Rossum <guido@python.org>
parents: 1664
diff changeset
826
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
827 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
828 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
829 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
830
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
831 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
832 Tkapp_DeleteFileHandler (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
833 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 PyObject *args; /* Args: file */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
835 {
1771
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
836 PyObject *file;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 int id;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
838
1771
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
839 if (!PyArg_Parse (args, "O", &file))
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
840 return NULL;
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
841 id = GetFileNo (file);
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
842 if (id < 0)
51c2e5a9f39c * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
Guido van Rossum <guido@python.org>
parents: 1756
diff changeset
843 return NULL;
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
844
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
845 Tk_DeleteFileHandler (id);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
846 /* XXX fileHandlerDict */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
847 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
848 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
849 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
850
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
851 /** Event Loop **/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
852
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
853 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
854 Tkapp_MainLoop (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
855 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
856 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
857 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
858 if (!PyArg_Parse (args, ""))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
859 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
860
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
861 quitMainLoop = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
862 while (tk_NumMainWindows > 0 && !quitMainLoop && !errorInCmd)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
863 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
864 if (PyOS_InterruptOccurred ())
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
865 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
866 PyErr_SetNone (PyExc_KeyboardInterrupt);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
867 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
868 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
869 Tk_DoOneEvent (0);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
870 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
871
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
872 if (errorInCmd)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
873 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
874 errorInCmd = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
875 PyErr_SetObject (excInCmd, valInCmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
876 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
877 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
878 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
879 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
881
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
882 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
883 Tkapp_Quit (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
885 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
886 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
887
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
888 if (!PyArg_Parse (args, ""))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
889 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
890 quitMainLoop = 1;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
891 Py_INCREF (Py_None);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
892 return Py_None;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
893 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
894
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
895 /**** Tkapp Method List ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
896
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
897 static PyMethodDef Tkapp_methods[] =
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
898 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
899 {"call", Tkapp_Call},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
900 {"globalcall", Tkapp_GlobalCall},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
901 {"eval", Tkapp_Eval},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
902 {"globaleval", Tkapp_GlobalEval},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
903 {"evalfile", Tkapp_EvalFile},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
904 {"record", Tkapp_Record},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
905 {"adderrorinfo", Tkapp_AddErrorInfo},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
906 {"setvar", Tkapp_SetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
907 {"globalsetvar", Tkapp_GlobalSetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
908 {"getvar", Tkapp_GetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
909 {"globalgetvar", Tkapp_GlobalGetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
910 {"unsetvar", Tkapp_UnsetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
911 {"globalunsetvar", Tkapp_GlobalUnsetVar},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
912 {"getint", Tkapp_GetInt},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
913 {"getdouble", Tkapp_GetDouble},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
914 {"getboolean", Tkapp_GetBoolean},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
915 {"exprstring", Tkapp_ExprString},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
916 {"exprlong", Tkapp_ExprLong},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
917 {"exprdouble", Tkapp_ExprDouble},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
918 {"exprboolean", Tkapp_ExprBoolean},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
919 {"splitlist", Tkapp_SplitList},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
920 {"split", Tkapp_Split},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
921 {"merge", Tkapp_Merge},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
922 {"createcommand", Tkapp_CreateCommand},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
923 {"deletecommand", Tkapp_DeleteCommand},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
924 {"createfilehandler", Tkapp_CreateFileHandler},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
925 {"deletefilehandler", Tkapp_DeleteFileHandler},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
926 {"mainloop", Tkapp_MainLoop},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
927 {"quit", Tkapp_Quit},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
928 {NULL, NULL}
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
929 };
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
930
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
931 /**** Tkapp Type Methods ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
932
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
933 static void
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
934 Tkapp_Dealloc (self)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
935 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
936 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
937 Tk_DestroyWindow (Tkapp_Tkwin (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
938 Tcl_DeleteInterp (Tkapp_Interp (self));
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
939 PyMem_DEL (self);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
940 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
941
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
942 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
943 Tkapp_GetAttr (self, name)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
944 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
945 char *name;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
946 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
947 return Py_FindMethod (Tkapp_methods, self, name);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
948 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
949
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
950 static PyTypeObject Tkapp_Type =
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
951 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
952 OB_HEAD_INIT (&PyType_Type)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
953 0, /*ob_size */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
954 "tkapp", /*tp_name */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
955 sizeof (TkappObject), /*tp_basicsize */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
956 0, /*tp_itemsize */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
957 Tkapp_Dealloc, /*tp_dealloc */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
958 0, /*tp_print */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
959 Tkapp_GetAttr, /*tp_getattr */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
960 0, /*tp_setattr */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
961 0, /*tp_compare */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
962 0, /*tp_repr */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
963 0, /*tp_as_number */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
964 0, /*tp_as_sequence */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
965 0, /*tp_as_mapping */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
966 0, /*tp_hash */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
967 };
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
968
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
969 /**** Tkinter Module ****/
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
970
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
971 static PyObject *
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
972 Tkinter_Create (self, args)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
973 PyObject *self;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
974 PyObject *args;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
975 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
976 char *screenName = NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
977 char *baseName;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
978 char *className;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
979 int interactive = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
980
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
981 baseName = strrchr (getprogramname (), '/');
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
982 if (baseName != NULL)
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
983 baseName++;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
984 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
985 baseName = getprogramname ();
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
986 className = "Tk";
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
987
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
988 if (PyArg_Parse (args, ""))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
989 /* VOID */ ;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
990 else if (PyArg_Parse (args, "z",
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
991 &screenName))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
992 /* VOID */ ;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
993 else if (PyArg_Parse (args, "(zs)",
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
994 &screenName, &baseName))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
995 /* VOID */ ;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
996 else if (PyArg_Parse (args, "(zss)",
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
997 &screenName, &baseName, &className))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
998 /* VOID */ ;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
999 else if (PyArg_Parse (args, "(zssi)",
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1000 &screenName, &baseName, &className, &interactive))
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1001 /* VOID */ ;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1002 else
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1003 return NULL;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1004
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1005 return (PyObject *) Tkapp_New (screenName, baseName, className,
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1006 interactive);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1007 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1008
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1009 static PyMethodDef moduleMethods[] =
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1010 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1011 {"create", Tkinter_Create},
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1012 {NULL, NULL}
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1013 };
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1014
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1015 #ifdef WITH_READLINE
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1016 static int
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1017 EventHook ()
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1018 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1019 if (errorInCmd) /* XXX Reset tty */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1020 {
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1021 errorInCmd = 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1022 PyErr_SetObject (excInCmd, valInCmd);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1023 PyErr_Print ();
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1024 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1025 if (tk_NumMainWindows > 0)
1756
f533791acc77 * tkintermodule.c: OK, I've fixed the "tty" problem. You're right
Guido van Rossum <guido@python.org>
parents: 1713
diff changeset
1026 Tk_DoOneEvent (TK_DONT_WAIT);
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1027 return 0;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1028 }
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1029 #endif /* WITH_READLINE */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1030
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1031 static void
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1032 Tkinter_Cleanup ()
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1033 {
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1034 /* XXX rl_deprep_terminal is static, damned! */
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1035 while (tkMainWindowList != 0)
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1036 Tk_DestroyWindow (tkMainWindowList->win);
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1037 }
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1038
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1039 void
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1040 PyInit_tkinter ()
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1041 {
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1042 static inited = 0;
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1043
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1044 #ifdef WITH_READLINE
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1045 extern int (*rl_event_hook) ();
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1046 #endif /* WITH_READLINE */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1047 PyObject *m, *d, *v;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1048
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1049 m = Py_InitModule ("tkinter", moduleMethods);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1050
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1051 d = PyModule_GetDict (m);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1052 Tkinter_TclError = Py_BuildValue ("s", "TclError");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1053 PyDict_SetItemString (d, "TclError", Tkinter_TclError);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1054
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1055 v = Py_BuildValue ("i", TK_READABLE);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1056 PyDict_SetItemString (d, "READABLE", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1057 v = Py_BuildValue ("i", TK_WRITABLE);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1058 PyDict_SetItemString (d, "WRITABLE", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1059 v = Py_BuildValue ("i", TK_EXCEPTION);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1060 PyDict_SetItemString (d, "EXCEPTION", v);
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1061
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1062 #ifdef WITH_READLINE
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1063 rl_event_hook = EventHook;
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1064 #endif /* WITH_READLINE */
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1065
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1066 if (!inited)
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1067 {
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1068 inited = 1;
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1771
diff changeset
1069 if (Py_AtExit (Tkinter_Cleanup) != 0)
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1771
diff changeset
1070 fprintf(stderr,
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1771
diff changeset
1071 "Tkinter: warning: cleanup procedure not registered\n");
1713
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1072 }
bb566d28caa0 * tkintermodule.c
Guido van Rossum <guido@python.org>
parents: 1690
diff changeset
1073
1664
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1074 if (PyErr_Occurred ())
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1075 Py_FatalError ("can't initialize module tkinter");
a09efb135de5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1076 }