/* _tkinter.c -- Interface to libtk.a and libtcl.a. */
+/* TCL/TK VERSION INFO:
+
+ Unix:
+ This should work with any version from Tcl 4.0 / Tck 7.4.
+ Do not use older versions.
+
+ Mac and Windows:
+ Use Tcl 4.1p1 / Tk 7.5p1 or possibly newer.
+ It does not seem to work reliably with the original 4.1/7.5
+ release. (4.0/7.4 were never released for these platforms.)
+*/
+
#include "Python.h"
#include <ctype.h>
** This is for Tcl 7.5 and Tk 4.1 (patch release 1).
*/
-/* free() expects a char* */
+/* ckfree() expects a char* */
#define FREECAST (char *)
#include <Events.h> /* For EventRecord */
#endif /* macintosh */
#ifndef FREECAST
-#define FREECAST
+#define FREECAST (char *)
#endif
/**** Tkapp Object Declaration ****/
if (PyTuple_Size (args) > ARGSZ)
{
- argv = (char **) malloc (PyTuple_Size (args) * sizeof (char *));
- fv = (int *) malloc (PyTuple_Size (args) * sizeof (int));
+ argv = (char **) ckalloc (PyTuple_Size (args) * sizeof (char *));
+ fv = (int *) ckalloc (PyTuple_Size (args) * sizeof (int));
if (argv == NULL || fv == NULL)
PyErr_NoMemory ();
}
Py_DECREF (tmp);
for (i = 0; i < argc; i++)
- if (fv[i]) free (argv[i]);
+ if (fv[i]) ckfree (argv[i]);
if (argv != argvStore)
- free (FREECAST argv);
+ ckfree (FREECAST argv);
if (fv != fvStore)
- free (FREECAST fv);
+ ckfree (FREECAST fv);
return res;
}
PyTuple_SetItem (v, i, Split (self, argv[i]));
}
- free (FREECAST argv);
+ ckfree (FREECAST argv);
return v;
}
Tcl_SetVar (v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
/* This is used to get the application class for Tk 4.1 and up */
- argv0 = (char*) malloc (strlen (className) + 1);
+ argv0 = (char*) ckalloc (strlen (className) + 1);
if (argv0 != NULL) {
strcpy (argv0, className);
if (isupper (argv0[0]))
argv0[0] = tolower (argv0[0]);
Tcl_SetVar (v->interp, "argv0", argv0, TCL_GLOBAL_ONLY);
- free (argv0);
+ ckfree (argv0);
}
if (Tcl_AppInit (v->interp) != TCL_OK)
cmd = Merge (args);
if (Tcl_Eval (Tkapp_Interp (self), cmd) == TCL_ERROR)
{
- free (cmd);
+ ckfree (cmd);
return Tkinter_Error (self);
}
- free (cmd);
+ ckfree (cmd);
return PyString_FromString (Tkapp_Result (self));
}
cmd = Merge (args);
if (Tcl_GlobalEval (Tkapp_Interp (self), cmd) == TCL_ERROR)
{
- free (cmd);
+ ckfree (cmd);
return Tkinter_Error (self);
}
- free (cmd);
+ ckfree (cmd);
return PyString_FromString (Tkapp_Result (self));
}
for (i = 0; i < argc; i++)
PyTuple_SetItem (v, i, PyString_FromString (argv[i]));
- free (FREECAST argv);
+ ckfree (FREECAST argv);
return v;
}
s = Merge (args);
v = PyString_FromString (s);
- free (s);
+ ckfree (s);
return v;
}