]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
reformatted
authorBarry Warsaw <barry@python.org>
Thu, 16 Jan 1997 00:15:11 +0000 (00:15 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 16 Jan 1997 00:15:11 +0000 (00:15 +0000)
memory leak in Tkapp_(Create|Delete)FileHandler plugged.

standard eyeballing

Modules/_tkinter.c

index 1315c1b4b64657a0a80b51e88ca1991735b6f0e1..ba95310bcc60eb249d7dcb6dc8c7ee7f10d7fe83 100644 (file)
@@ -98,13 +98,13 @@ staticforward int PyMacConvertEvent Py_PROTO((EventRecord *eventPtr));
 staticforward PyTypeObject Tkapp_Type;
 
 typedef struct
-  {
-    PyObject_HEAD
-    Tcl_Interp *interp;
+{
+       PyObject_HEAD
+       Tcl_Interp *interp;
 #ifdef NEED_TKCREATEMAINWINDOW
-    Tk_Window tkwin;
+       Tk_Window tkwin;
 #endif
-  }
+}
 TkappObject;
 
 #define Tkapp_Check(v) ((v)->ob_type == &Tkapp_Type)
@@ -115,8 +115,10 @@ TkappObject;
 #define Tkapp_Result(v) (((TkappObject *) (v))->interp->result)
 
 #define DEBUG_REFCNT(v) (printf ("DEBUG: id=%p, refcnt=%i\n", \
-                                (void *) v, ((PyObject *) v)->ob_refcnt))
+(void *) v, ((PyObject *) v)->ob_refcnt))
+
 
+\f
 /**** Error Handling ****/
 
 static PyObject *Tkinter_TclError;
@@ -126,767 +128,842 @@ static PyObject *excInCmd;
 static PyObject *valInCmd;
 static PyObject *trbInCmd;
 
+
+\f
 static PyObject *
-Tkinter_Error (v)
-     PyObject *v;
+Tkinter_Error(v)
+       PyObject *v;
 {
-  PyErr_SetString (Tkinter_TclError, Tkapp_Result (v));
-  return NULL;
+       PyErr_SetString(Tkinter_TclError, Tkapp_Result(v));
+       return NULL;
 }
 
+
 int
-PythonCmd_Error (interp)
-     Tcl_Interp *interp;
+PythonCmd_Error(interp)
+       Tcl_Interp *interp;
 {
-  errorInCmd = 1;
-  PyErr_Fetch (&excInCmd, &valInCmd, &trbInCmd);
-  return TCL_ERROR;
+       errorInCmd = 1;
+       PyErr_Fetch(&excInCmd, &valInCmd, &trbInCmd);
+       return TCL_ERROR;
 }
 
-/**** Utils ****/
 
+\f
+/**** Utils ****/
 static char *
-AsString (value, tmp)
-     PyObject *value;
-     PyObject *tmp;
-{
-  if (PyString_Check (value))
-    return PyString_AsString (value);
-  else
-    {
-      PyObject *v;
-
-      v = PyObject_Str (value);
-      PyList_Append (tmp, v);
-      Py_DECREF (v);
-      return PyString_AsString (v);
-    }
+AsString(value, tmp)
+       PyObject *value;
+       PyObject *tmp;
+{
+       if (PyString_Check (value))
+               return PyString_AsString (value);
+       else {
+               PyObject *v = PyObject_Str(value);
+               PyList_Append(tmp, v);
+               Py_DECREF(v);
+               return PyString_AsString(v);
+       }
 }
 
+
+\f
 #define ARGSZ 64
 
 static char *
-Merge (args)
-     PyObject *args;
-{
-  PyObject *tmp;
-  char *argvStore[ARGSZ];
-  char **argv;
-  int fvStore[ARGSZ];
-  int *fv;
-  int argc;
-  char *res;
-  int i;
-
-  tmp = PyList_New (0);
-  argv = argvStore;
-  fv = fvStore;
-
-  if (args == NULL)
-    {
-      argc = 0;
-    }
-  else if (!PyTuple_Check (args))
-    {
-      argc = 1;
-      fv[0] = 0;
-      argv[0] = AsString (args, tmp);
-    }
-  else
-    {
-      PyObject *v;
-
-      if (PyTuple_Size (args) > ARGSZ)
-       {
-         argv = (char **) ckalloc (PyTuple_Size (args) * sizeof (char *));
-         fv = (int *) ckalloc (PyTuple_Size (args) * sizeof (int));
-         if (argv == NULL || fv == NULL)
-           PyErr_NoMemory ();
-       }
+Merge(args)
+       PyObject *args;
+{
+       PyObject *tmp = NULL;
+       char *argvStore[ARGSZ];
+       char **argv = NULL;
+       int fvStore[ARGSZ];
+       int *fv = NULL;
+       int argc = 0, i;
+       char *res = NULL;
 
-      argc = PyTuple_Size (args);
-      for (i = 0; i < argc; i++)
-       {
-         v = PyTuple_GetItem (args, i);
-         if (PyTuple_Check (v))
-           {
-             fv[i] = 1;
-             argv[i] = Merge (v);
-           }
-         else if (v == Py_None)
-           {
-             argc = i;
-             break;
-           }
-         else
-           {
-             fv[i] = 0;
-             argv[i] = AsString (v, tmp);
-           }
-       }
-    }
+       if (!(tmp = PyList_New(0)))
+           return NULL;
 
-  res = Tcl_Merge (argc, argv);
+       argv = argvStore;
+       fv = fvStore;
 
-  Py_DECREF (tmp);
-  for (i = 0; i < argc; i++)
-    if (fv[i]) ckfree (argv[i]);
-  if (argv != argvStore)
-    ckfree (FREECAST argv);
-  if (fv != fvStore)
-    ckfree (FREECAST fv);
+       if (args == NULL)
+               argc = 0;
 
-  return res;
+       else if (!PyTuple_Check(args)) {
+               argc = 1;
+               fv[0] = 0;
+               argv[0] = AsString(args, tmp);
+       }
+       else {
+               argc = PyTuple_Size(args);
+
+               if (argc > ARGSZ) {
+                       argv = (char **)ckalloc(argc * sizeof (char *));
+                       fv = (int *)ckalloc(argc * sizeof (int));
+                       if (argv == NULL || fv == NULL) {
+                               PyErr_NoMemory();
+                               goto finally;
+                       }
+               }
+
+               for (i = 0; i < argc; i++) {
+                       PyObject *v = PyTuple_GetItem(args, i);
+                       if (PyTuple_Check(v)) {
+                               fv[i] = 1;
+                               if (!(argv[i] = Merge(v)))
+                                       goto finally;
+                       }
+                       else if (v == Py_None) {
+                               argc = i;
+                               break;
+                       }
+                       else {
+                               fv[i] = 0;
+                               argv[i] = AsString(v, tmp);
+                       }
+               }
+       }
+       res = Tcl_Merge(argc, argv);
+
+  finally:
+       for (i = 0; i < argc; i++)
+               if (fv[i]) {
+                       ckfree(argv[i]);
+               }
+       if (argv != argvStore)
+               ckfree(FREECAST argv);
+       if (fv != fvStore)
+               ckfree(FREECAST fv);
+
+       Py_DECREF(tmp);
+       return res;
 }
 
+
+\f
 static PyObject *
-Split (self, list)
-     PyObject *self;
-     char *list;
-{
-  int argc;
-  char **argv;
-  PyObject *v;
-
-  if (list == NULL)
-    {
-      Py_INCREF (Py_None);
-      return Py_None;
-    }
-
-  if (Tcl_SplitList (Tkapp_Interp (self), list, &argc, &argv) == TCL_ERROR)
-    {
-      /* Not a list.
-        Could be a quoted string containing funnies, e.g. {"}.
-        Return the string itself. */
-      PyErr_Clear();
-      return PyString_FromString(list);
-    }
-
-  if (argc == 0)
-    v = PyString_FromString ("");
-  else if (argc == 1)
-    v = PyString_FromString (argv[0]);
-  else if ((v = PyTuple_New (argc)) != NULL)
-    {
-      int i;
-      PyObject *w;
-
-      for (i = 0; i < argc; i++) {
-       if ((w = Split (self, argv[i])) == NULL)
-         {
-           Py_DECREF(v);
-           v = NULL;
-           break;
-         }
-       PyTuple_SetItem (v, i, w);
-      }
-    }
-
-  ckfree (FREECAST argv);
-  return v;
+Split(self, list)
+       PyObject *self;
+       char *list;
+{
+       int argc;
+       char **argv;
+       PyObject *v;
+
+       if (list == NULL) {
+               Py_INCREF(Py_None);
+               return Py_None;
+       }
+
+       if (Tcl_SplitList(Tkapp_Interp(self), list, &argc, &argv) == TCL_ERROR)
+       {
+               /* Not a list.
+                * Could be a quoted string containing funnies, e.g. {"}.
+                * Return the string itself.
+                */
+               PyErr_Clear();
+               return PyString_FromString(list);
+       }
+
+       if (argc == 0)
+               v = PyString_FromString("");
+       else if (argc == 1)
+               v = PyString_FromString(argv[0]);
+       else if ((v = PyTuple_New (argc)) != NULL) {
+               int i;
+               PyObject *w;
+
+               for (i = 0; i < argc; i++) {
+                       if ((w = Split(self, argv[i])) == NULL) {
+                               Py_DECREF(v);
+                               v = NULL;
+                               break;
+                       }
+                       PyTuple_SetItem(v, i, w);
+               }
+       }
+       ckfree (FREECAST argv);
+       return v;
 }
 
+
+\f
 /**** Tkapp Object ****/
 
 #ifndef WITH_APPINIT
 int
 Tcl_AppInit (interp)
-     Tcl_Interp *interp;
+       Tcl_Interp *interp;
 {
-  Tk_Window main;
+       Tk_Window main;
 
-  main = Tk_MainWindow(interp);
-  if (Tcl_Init (interp) == TCL_ERROR) {
-    fprintf(stderr, "Tcl_Init error: %s\n", interp->result);
-    return TCL_ERROR;
-  }
-  if (Tk_Init (interp) == TCL_ERROR) {
-    fprintf(stderr, "Tk_Init error: %s\n", interp->result);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
+       main = Tk_MainWindow(interp);
+       if (Tcl_Init(interp) == TCL_ERROR) {
+               fprintf(stderr, "Tcl_Init error: %s\n", interp->result);
+               return TCL_ERROR;
+       }
+       if (Tk_Init(interp) == TCL_ERROR) {
+               fprintf(stderr, "Tk_Init error: %s\n", interp->result);
+               return TCL_ERROR;
+       }
+       return TCL_OK;
 }
-
 #endif /* !WITH_APPINIT */
 
+
+\f
+
 /* Initialize the Tk application; see the `main' function in
-   `tkMain.c'.  */
+ * `tkMain.c'.
+ */
 static TkappObject *
-Tkapp_New (screenName, baseName, className, interactive)
-     char *screenName;
-     char *baseName;
-     char *className;
-     int interactive;
-{
-  TkappObject *v;
-  char *argv0;
+Tkapp_New(screenName, baseName, className, interactive)
+       char *screenName;
+       char *baseName;
+       char *className;
+       int interactive;
+{
+       TkappObject *v;
+       char *argv0;
   
-  v = PyObject_NEW (TkappObject, &Tkapp_Type);
-  if (v == NULL)
-    return NULL;
+       v = PyObject_NEW(TkappObject, &Tkapp_Type);
+       if (v == NULL)
+               return NULL;
 
-  v->interp = Tcl_CreateInterp ();
+       v->interp = Tcl_CreateInterp();
 
 #ifdef NEED_TKCREATEMAINWINDOW
-  v->tkwin = Tk_CreateMainWindow (v->interp, screenName, 
-                                 baseName, className);
-  if (v->tkwin == NULL)
-    return (TkappObject *) Tkinter_Error ((PyObject *) v);
+       v->tkwin = Tk_CreateMainWindow(v->interp, screenName, 
+                                      baseName, className);
+       if (v->tkwin == NULL)
+               return (TkappObject *)Tkinter_Error((PyObject *) v);
 
-  Tk_GeometryRequest (v->tkwin, 200, 200);
+       Tk_GeometryRequest(v->tkwin, 200, 200);
 #endif
 
-  if (screenName != NULL)
-    Tcl_SetVar2 (v->interp, "env", "DISPLAY", screenName, TCL_GLOBAL_ONLY);
+       if (screenName != NULL)
+               Tcl_SetVar2(v->interp, "env", "DISPLAY",
+                           screenName, TCL_GLOBAL_ONLY);
 
-  if (interactive)
-    Tcl_SetVar (v->interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY);
-  else
-    Tcl_SetVar (v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY);
+       if (interactive)
+               Tcl_SetVar(v->interp, "tcl_interactive", "1", TCL_GLOBAL_ONLY);
+       else
+               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*)ckalloc(strlen(className) + 1);
+       if (!argv0) {
+               PyErr_NoMemory();
+               Py_DECREF(v);
+               return NULL;
+       }
 
-  /* This is used to get the application class for Tk 4.1 and up */
-  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);
-    ckfree (argv0);
-  }
+       strcpy(argv0, className);
+       if (isupper(argv0[0]))
+               argv0[0] = tolower(argv0[0]);
+       Tcl_SetVar(v->interp, "argv0", argv0, TCL_GLOBAL_ONLY);
+       ckfree(argv0);
 
-  if (Tcl_AppInit (v->interp) != TCL_OK)
-    return (TkappObject *) Tkinter_Error (v);
+       if (Tcl_AppInit(v->interp) != TCL_OK)
+               return (TkappObject *)Tkinter_Error(v);
 
-  return v;
+       return v;
 }
 
+
+\f
 /** Tcl Eval **/
 
 static PyObject *
-Tkapp_Call (self, args)
-     PyObject *self;
-     PyObject *args;
+Tkapp_Call(self, args)
+       PyObject *self;
+       PyObject *args;
 {
-  char *cmd;
+       char *cmd  = Merge(args);
+       PyObject *res = NULL;
+
+       if (!cmd)
+               PyErr_SetString(Tkinter_TclError, "merge failed");
+
+       else if (Tcl_Eval(Tkapp_Interp(self), cmd) == TCL_ERROR)
+               res = Tkinter_Error(self);
+
+       else
+               res = PyString_FromString(Tkapp_Result(self));
 
-  cmd = Merge (args);
-  if (Tcl_Eval (Tkapp_Interp (self), cmd) == TCL_ERROR)
-    {
-      ckfree (cmd);
-      return Tkinter_Error (self);
-    }
+       if (cmd)
+               ckfree(cmd);
 
-  ckfree (cmd);
-  return PyString_FromString (Tkapp_Result (self));
+       return res;
 }
 
+
 static PyObject *
-Tkapp_GlobalCall (self, args)
-     PyObject *self;
-     PyObject *args;
-{
-  char *cmd;
-
-  cmd = Merge (args);
-  if (Tcl_GlobalEval (Tkapp_Interp (self), cmd) == TCL_ERROR)
-    {
-      ckfree (cmd);
-      return Tkinter_Error (self);
-    }
-  
-  ckfree (cmd);
-  return PyString_FromString (Tkapp_Result (self));
+Tkapp_GlobalCall(self, args)
+       PyObject *self;
+       PyObject *args;
+{
+       char *cmd  = Merge(args);
+       PyObject *res = NULL;
+       
+
+       if (!cmd)
+               PyErr_SetString(Tkinter_TclError, "merge failed");
+
+       else if (Tcl_GlobalEval(Tkapp_Interp(self), cmd) == TCL_ERROR)
+               res = Tkinter_Error(self);
+       else
+               res = PyString_FromString(Tkapp_Result(self));
+
+       if (cmd)
+               ckfree(cmd);
+
+       return res;
 }
 
 static PyObject *
-Tkapp_Eval (self, args)
-     PyObject *self;
-     PyObject *args;
+Tkapp_Eval(self, args)
+       PyObject *self;
+       PyObject *args;
 {
-  char *script;
+       char *script;
   
-  if (!PyArg_Parse (args, "s", &script))
-    return NULL;
+       if (!PyArg_Parse (args, "s", &script))
+               return NULL;
 
-  if (Tcl_Eval (Tkapp_Interp (self), script) == TCL_ERROR)
-    return Tkinter_Error (self);
+       if (Tcl_Eval(Tkapp_Interp(self), script) == TCL_ERROR)
+               return Tkinter_Error(self);
   
-  return PyString_FromString (Tkapp_Result (self));
+       return PyString_FromString(Tkapp_Result(self));
 }
 
 static PyObject *
-Tkapp_GlobalEval (self, args)
-     PyObject *self;
-     PyObject *args;
+Tkapp_GlobalEval(self, args)
+       PyObject *self;
+       PyObject *args;
 {
-  char *script;
+       char *script;
   
-  if (!PyArg_Parse (args, "s", &script))
-    return NULL;
+       if (!PyArg_Parse(args, "s", &script))
+               return NULL;
 
-  if (Tcl_GlobalEval (Tkapp_Interp (self), script) == TCL_ERROR)
-    return Tkinter_Error (self);
+       if (Tcl_GlobalEval(Tkapp_Interp(self), script) == TCL_ERROR)
+               return Tkinter_Error (self);
 
-  return PyString_FromString (Tkapp_Result (self));
+       return PyString_FromString(Tkapp_Result(self));
 }
 
 static PyObject *
 Tkapp_EvalFile (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *fileName;
+       char *fileName;
 
-  if (!PyArg_Parse (args, "s", &fileName))
-    return NULL;
+       if (!PyArg_Parse(args, "s", &fileName))
+               return NULL;
 
-  if (Tcl_EvalFile (Tkapp_Interp (self), fileName) == TCL_ERROR)
-    return Tkinter_Error (self);
+       if (Tcl_EvalFile(Tkapp_Interp(self), fileName) == TCL_ERROR)
+               return Tkinter_Error (self);
 
-  return PyString_FromString (Tkapp_Result (self));
+       return PyString_FromString(Tkapp_Result(self));
 }
 
 static PyObject *
-Tkapp_Record (self, args)
-     PyObject *self;
-     PyObject *args;
+Tkapp_Record(self, args)
+       PyObject *self;
+       PyObject *args;
 {
-  char *script;
+       char *script;
 
-  if (!PyArg_Parse (args, "s", &script))
-    return NULL;
+       if (!PyArg_Parse(args, "s", &script))
+               return NULL;
 
-  if (Tcl_RecordAndEval (Tkapp_Interp (self), 
-                        script, TCL_NO_EVAL) == TCL_ERROR)
-    return Tkinter_Error (self);
+       if (TCL_ERROR == Tcl_RecordAndEval(Tkapp_Interp(self),
+                                          script, TCL_NO_EVAL))
+               return Tkinter_Error (self);
 
-  return PyString_FromString (Tkapp_Result (self));
+       return PyString_FromString(Tkapp_Result(self));
 }
 
 static PyObject *
-Tkapp_AddErrorInfo (self, args)
-     PyObject *self;
-     PyObject *args;
+Tkapp_AddErrorInfo(self, args)
+       PyObject *self;
+       PyObject *args;
 {
-  char *msg;
+       char *msg;
 
-  if (!PyArg_Parse (args, "s", &msg))
-    return NULL;
-  Tcl_AddErrorInfo (Tkapp_Interp (self), msg);
+       if (!PyArg_Parse (args, "s", &msg))
+               return NULL;
+       Tcl_AddErrorInfo(Tkapp_Interp(self), msg);
 
-  Py_INCREF(Py_None);
-  return Py_None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
+
+\f
 /** Tcl Variable **/
 
 static PyObject *
-SetVar (self, args, flags)
-     PyObject *self;
-     PyObject *args;
-     int flags;
-{
-  char *name1, *name2, *ok;
-  PyObject *newValue;
-  PyObject *tmp;
-
-  tmp = PyList_New (0);
-
-  if (PyArg_Parse (args, "(sO)", &name1, &newValue))
-    ok = Tcl_SetVar (Tkapp_Interp (self), name1, 
-                    AsString (newValue, tmp), flags); /* XXX Merge? */
-  else if (PyArg_Parse (args, "(ssO)", &name1, &name2, &newValue))
-    ok = Tcl_SetVar2 (Tkapp_Interp (self), name1, name2, 
-                     AsString (newValue, tmp), flags);
-  else
-    {
-      Py_DECREF (tmp);
-      return NULL;
-    }
-  Py_DECREF (tmp);
+SetVar(self, args, flags)
+       PyObject *self;
+       PyObject *args;
+       int flags;
+{
+       char *name1, *name2, *ok;
+       PyObject *newValue;
+       PyObject *tmp = PyList_New(0);
+
+       if (!tmp)
+               return NULL;
+
+       if (PyArg_Parse(args, "(sO)", &name1, &newValue))
+               /* XXX Merge? */
+               ok = Tcl_SetVar(Tkapp_Interp (self), name1, 
+                               AsString (newValue, tmp), flags);
+
+       else if (PyArg_Parse(args, "(ssO)", &name1, &name2, &newValue))
+               ok = Tcl_SetVar2(Tkapp_Interp (self), name1, name2, 
+                                AsString (newValue, tmp), flags);
+       else {
+               Py_DECREF (tmp);
+               return NULL;
+       }
+       Py_DECREF (tmp);
 
-  if (!ok)
-    return Tkinter_Error (self);
+       if (!ok)
+               return Tkinter_Error(self);
 
-  Py_INCREF (Py_None);
-  return Py_None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 static PyObject *
 Tkapp_SetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return SetVar (self, args, TCL_LEAVE_ERR_MSG);
+       return SetVar(self, args, TCL_LEAVE_ERR_MSG);
 }
 
 static PyObject *
 Tkapp_GlobalSetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return SetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
+       return SetVar(self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
 }
 
+
+\f
 static PyObject *
 GetVar (self, args, flags)
-     PyObject *self;
-     PyObject *args;
-     int flags;
+       PyObject *self;
+       PyObject *args;
+       int flags;
 {
-  char *name1, *name2, *s;
+       char *name1, *name2, *s;
 
-  if (PyArg_Parse (args, "s", &name1))
-    s = Tcl_GetVar (Tkapp_Interp (self), name1, flags);
-  else if (PyArg_Parse (args, "(ss)", &name1, &name2))
-    s = Tcl_GetVar2 (Tkapp_Interp (self), name1, name2, flags);
-  else
-    return NULL;
+       if (PyArg_Parse(args, "s", &name1))
+               s = Tcl_GetVar(Tkapp_Interp (self), name1, flags);
 
-  if (s == NULL)
-    return Tkinter_Error (self);
+       else if (PyArg_Parse(args, "(ss)", &name1, &name2))
+               s = Tcl_GetVar2(Tkapp_Interp(self), name1, name2, flags);
+       else
+               return NULL;
 
-  return PyString_FromString (s);
+       if (s == NULL)
+               return Tkinter_Error(self);
+
+       return PyString_FromString (s);
 }
 
 static PyObject *
 Tkapp_GetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return GetVar (self, args, TCL_LEAVE_ERR_MSG);
+       return GetVar(self, args, TCL_LEAVE_ERR_MSG);
 }
 
 static PyObject *
 Tkapp_GlobalGetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return GetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
+       return GetVar(self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
 }
 
+
+\f
 static PyObject *
 UnsetVar (self, args, flags)
-     PyObject *self;
-     PyObject *args;
-     int flags;
+       PyObject *self;
+       PyObject *args;
+       int flags;
 {
-  char *name1, *name2;
-  int code;
+       char *name1, *name2;
+       int code;
 
-  if (PyArg_Parse (args, "s", &name1))
-    code = Tcl_UnsetVar (Tkapp_Interp (self), name1, flags);
-  else if (PyArg_Parse (args, "(ss)", &name1, &name2))
-    code = Tcl_UnsetVar2 (Tkapp_Interp (self), name1, name2, flags);
-  else
-    return NULL;
+       if (PyArg_Parse(args, "s", &name1))
+               code = Tcl_UnsetVar(Tkapp_Interp (self), name1, flags);
 
-  if (code == TCL_ERROR)
-    return Tkinter_Error (self);
+       else if (PyArg_Parse(args, "(ss)", &name1, &name2))
+               code = Tcl_UnsetVar2(Tkapp_Interp(self), name1, name2, flags);
+       else
+               return NULL;
+
+       if (code == TCL_ERROR)
+               return Tkinter_Error (self);
 
-  Py_INCREF (Py_None);
-  return Py_None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 static PyObject *
 Tkapp_UnsetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return UnsetVar (self, args, TCL_LEAVE_ERR_MSG);
+       return UnsetVar(self, args, TCL_LEAVE_ERR_MSG);
 }
 
 static PyObject *
 Tkapp_GlobalUnsetVar (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  return UnsetVar (self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
+       return UnsetVar(self, args, TCL_LEAVE_ERR_MSG | TCL_GLOBAL_ONLY);
 }
 
+
+\f
 /** Tcl to Python **/
 
 static PyObject *
 Tkapp_GetInt (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  int v;
+       char *s;
+       int v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_GetInt (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("i", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_GetInt(Tkapp_Interp (self), s, &v) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("i", v);
 }
 
 static PyObject *
 Tkapp_GetDouble (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  double v;
+       char *s;
+       double v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_GetDouble (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("d", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_GetDouble(Tkapp_Interp (self), s, &v) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("d", v);
 }
 
 static PyObject *
 Tkapp_GetBoolean (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  int v;
+       char *s;
+       int v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_GetBoolean (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("i", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_GetBoolean(Tkapp_Interp (self), s, &v) == TCL_ERROR)
+               return Tkinter_Error (self);
+       return Py_BuildValue("i", v);
 }
 
 static PyObject *
 Tkapp_ExprString (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
+       char *s;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_ExprString (Tkapp_Interp (self), s) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("s", Tkapp_Result (self));
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_ExprString (Tkapp_Interp (self), s) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("s", Tkapp_Result(self));
 }
 
 static PyObject *
 Tkapp_ExprLong (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  long v;
+       char *s;
+       long v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_ExprLong (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("l", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_ExprLong(Tkapp_Interp(self), s, &v) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("l", v);
 }
 
 static PyObject *
 Tkapp_ExprDouble (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  double v;
+       char *s;
+       double v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_ExprDouble (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("d", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_ExprDouble(Tkapp_Interp(self), s, &v) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("d", v);
 }
 
 static PyObject *
 Tkapp_ExprBoolean (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  int v;
+       char *s;
+       int v;
 
-  if (!PyArg_Parse (args, "s", &s))
-    return NULL;
-  if (Tcl_ExprBoolean (Tkapp_Interp (self), s, &v) == TCL_ERROR)
-    return Tkinter_Error (self);
-  return Py_BuildValue ("i", v);
+       if (!PyArg_Parse(args, "s", &s))
+               return NULL;
+       if (Tcl_ExprBoolean(Tkapp_Interp(self), s, &v) == TCL_ERROR)
+               return Tkinter_Error(self);
+       return Py_BuildValue("i", v);
 }
 
+
+\f
 static PyObject *
 Tkapp_SplitList (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *list;
-  int argc;
-  char **argv;
-  PyObject *v;
-  int i;
+       char *list;
+       int argc;
+       char **argv;
+       PyObject *v;
+       int i;
 
-  if (!PyArg_Parse (args, "s", &list))
-    return NULL;
+       if (!PyArg_Parse(args, "s", &list))
+               return NULL;
 
-  if (Tcl_SplitList (Tkapp_Interp (self), list, &argc, &argv) == TCL_ERROR)
-    return Tkinter_Error (self);
+       if (Tcl_SplitList(Tkapp_Interp(self), list, &argc, &argv) == TCL_ERROR)
+               return Tkinter_Error(self);
 
-  v = PyTuple_New (argc);
-  for (i = 0; i < argc; i++)
-    PyTuple_SetItem (v, i, PyString_FromString (argv[i]));
+       if (!(v = PyTuple_New(argc)))
+               return NULL;
+       
+       for (i = 0; i < argc; i++) {
+               PyObject *s = PyString_FromString(argv[i]);
+               if (!s || PyTuple_SetItem(v, i, s)) {
+                       Py_DECREF(v);
+                       v = NULL;
+                       goto finally;
+               }
+       }
 
-  ckfree (FREECAST argv);
-  return v;
+  finally:
+       ckfree(FREECAST argv);
+       return v;
 }
 
 static PyObject *
 Tkapp_Split (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *list;
+       char *list;
 
-  if (!PyArg_Parse (args, "s", &list))
-    return NULL;
-  return Split (self, list);
+       if (!PyArg_Parse(args, "s", &list))
+               return NULL;
+       return Split(self, list);
 }
 
 static PyObject *
 Tkapp_Merge (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *s;
-  PyObject *v;
+       char *s = Merge(args);
+       PyObject *res = NULL;
+
+       if (s) {
+               res = PyString_FromString(s);
+               ckfree(s);
+       }
+       else
+               PyErr_SetString(Tkinter_TclError, "merge failed");
 
-  s = Merge (args);
-  v = PyString_FromString (s);
-  ckfree (s);
-  return v;
+       return res;
 }
 
+
+\f
 /** Tcl Command **/
 
 /* This is the Tcl command that acts as a wrapper for Python
-   function or method.  */
+ * function or method.
+ */
 static int
 PythonCmd (clientData, interp, argc, argv)
-     ClientData clientData;    /* Is (self, func) */
-     Tcl_Interp *interp;
-     int argc;
-     char *argv[];
-{
-  PyObject *self, *func, *arg, *res, *tmp;
-  int i;
-
-  self = PyTuple_GetItem ((PyObject *) clientData, 0);
-  func = PyTuple_GetItem ((PyObject *) clientData, 1);
+       ClientData clientData;               /* Is (self, func) */
+       Tcl_Interp *interp;
+       int argc;
+       char *argv[];
+{
+       PyObject *self, *func, *arg, *res, *tmp;
+       int i;
+
+       /* TBD: no error checking here since we know, via the
+        * Tkapp_CreateCommand() that the client data is a two-tuple
+        */
+       self = PyTuple_GetItem((PyObject *) clientData, 0);
+       func = PyTuple_GetItem((PyObject *) clientData, 1);
+
+       /* Create argument list (argv1, ..., argvN) */
+       if (!(arg = PyTuple_New(argc - 1)))
+               return PythonCmd_Error(interp);
+
+       for (i = 0; i < (argc - 1); i++) {
+               PyObject *s = PyString_FromString(argv[i + 1]);
+               if (!s || PyTuple_SetItem(arg, i, s)) {
+                       Py_DECREF(arg);
+                       PythonCmd_Error(interp);
+               }
+       }
+       res = PyEval_CallObject(func, arg);
+       Py_DECREF(arg);
 
-  /* Create argument list (argv1, ..., argvN) */
-  arg = PyTuple_New (argc - 1);
-  for (i = 0; i < (argc - 1); i++)
-    PyTuple_SetItem (arg, i, PyString_FromString (argv[i + 1]));
-  
-  res = PyEval_CallObject (func, arg);
-  Py_DECREF (arg);
+       if (res == NULL)
+               return PythonCmd_Error(interp);
 
-  if (res == NULL)
-    return PythonCmd_Error (interp);
+       if (!(tmp = PyList_New(0))) {
+               Py_DECREF(res);
+               return PythonCmd_Error(interp);
+       }
 
-  tmp = PyList_New (0);
-  Tcl_SetResult (Tkapp_Interp (self), AsString (res, tmp), TCL_VOLATILE);
-  Py_DECREF (res);
-  Py_DECREF (tmp);
+       Tcl_SetResult(Tkapp_Interp(self), AsString(res, tmp), TCL_VOLATILE);
+       Py_DECREF(res);
+       Py_DECREF(tmp);
 
-  return TCL_OK;
+       return TCL_OK;
 }
 
 static void
 PythonCmdDelete (clientData)
-     ClientData clientData;    /* Is (self, func) */
+       ClientData clientData;  /* Is (self, func) */
 {
-  Py_DECREF ((PyObject *) clientData);
+       Py_DECREF((PyObject *) clientData);
 }
 
+
+\f
 static PyObject *
 Tkapp_CreateCommand (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *cmdName;
-  PyObject *data;
-  PyObject *func;
+       char *cmdName;
+       PyObject *data;
+       PyObject *func;
   
-  /* Args is: (cmdName, func) */
-  if (!PyTuple_Check (args) 
-      || !(PyTuple_Size (args) == 2)
-      || !PyString_Check (PyTuple_GetItem (args, 0))
-      || !PyCallable_Check (PyTuple_GetItem (args, 1)))
-    {
-      PyErr_SetString (PyExc_TypeError, "bad argument list");
-      return NULL;
-    }
+       /* Args is: (cmdName, func) */
+       if (!PyTuple_Check(args) 
+           || !(PyTuple_Size(args) == 2)
+           || !PyString_Check(PyTuple_GetItem(args, 0))
+           || !PyCallable_Check(PyTuple_GetItem(args, 1)))
+       {
+               PyErr_SetString (PyExc_TypeError, "bad argument list");
+               return NULL;
+       }
 
-  cmdName = PyString_AsString (PyTuple_GetItem (args, 0));
-  func = PyTuple_GetItem (args, 1);
+       cmdName = PyString_AsString(PyTuple_GetItem(args, 0));
+       func = PyTuple_GetItem(args, 1);
 
-  data = PyTuple_New (2);   /* ClientData is: (self, func) */
+       data = PyTuple_New(2);               /* ClientData is: (self, func) */
+       if (!data)
+               return NULL;
 
-  Py_INCREF (self);
-  PyTuple_SetItem (data, 0, self);
+       Py_INCREF(self);
+       PyTuple_SetItem(data, 0, self);
 
-  Py_INCREF (func);
-  PyTuple_SetItem (data, 1, func);
+       Py_INCREF(func);
+       PyTuple_SetItem(data, 1, func);
 
-  Tcl_CreateCommand (Tkapp_Interp (self), cmdName, PythonCmd,
-                    (ClientData) data, PythonCmdDelete);
+       Tcl_CreateCommand(Tkapp_Interp (self), cmdName, PythonCmd,
+                         (ClientData) data, PythonCmdDelete);
 
-  Py_INCREF (Py_None);
-  return Py_None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
+
+\f
 static PyObject *
 Tkapp_DeleteCommand (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  char *cmdName;
+       char *cmdName;
 
-  if (!PyArg_Parse (args, "s", &cmdName))
-    return NULL;
-  if (Tcl_DeleteCommand (Tkapp_Interp (self), cmdName) == -1)
-    {
-      PyErr_SetString (Tkinter_TclError, "can't delete Tcl command");
-      return NULL;
-    }
-  Py_INCREF (Py_None);
-  return Py_None;
+       if (!PyArg_Parse(args, "s", &cmdName))
+               return NULL;
+       if (Tcl_DeleteCommand(Tkapp_Interp(self), cmdName) == -1)
+       {
+               PyErr_SetString(Tkinter_TclError, "can't delete Tcl command");
+               return NULL;
+       }
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
+
+\f
 /** File Handler **/
 
 static void
 FileHandler (clientData, mask)
-     ClientData clientData;    /* Is: (func, file) */
-     int mask;
+       ClientData clientData;               /* Is: (func, file) */
+       int mask;
 {
-  PyObject *func, *file, *arg, *res;
+       PyObject *func, *file, *arg, *res;
 
-  func = PyTuple_GetItem ((PyObject *) clientData, 0);
-  file = PyTuple_GetItem ((PyObject *) clientData, 1);
+       func = PyTuple_GetItem((PyObject *) clientData, 0);
+       file = PyTuple_GetItem((PyObject *) clientData, 1);
 
-  arg = Py_BuildValue ("(Oi)", file, (long) mask);
-  res = PyEval_CallObject (func, arg);
-  Py_DECREF (arg);
-  if (res == NULL)
-    {
-      errorInCmd = 1;
-      PyErr_Fetch (&excInCmd, &valInCmd, &trbInCmd);
-    }
-  Py_XDECREF (res);
+       arg = Py_BuildValue("(Oi)", file, (long) mask);
+       res = PyEval_CallObject(func, arg);
+       Py_DECREF (arg);
+
+       if (res == NULL) {
+               errorInCmd = 1;
+               PyErr_Fetch(&excInCmd, &valInCmd, &trbInCmd);
+       }
+       Py_XDECREF(res);
 }
 
 static int
 GetFileNo (file)
-       PyObject *file; /* Either an int >= 0 or an object with a
-                          .fileno() method that returns an int >= 0 */
+       /* Either an int >= 0 or an object with a
+        *.fileno() method that returns an int >= 0
+        */
+       PyObject *file;
 {
        PyObject *meth, *args, *res;
        int id;
@@ -896,21 +973,27 @@ GetFileNo (file)
                        PyErr_SetString(PyExc_ValueError, "invalid file id");
                return id;
        }
-       meth = PyObject_GetAttrString(file, "fileno");
-       if (meth == NULL)
-               return -1;
        args = PyTuple_New(0);
        if (args == NULL)
                return -1;
+
+       meth = PyObject_GetAttrString(file, "fileno");
+       if (meth == NULL) {
+               Py_DECREF(args);
+               return -1;
+       }
+
        res = PyEval_CallObject(meth, args);
        Py_DECREF(args);
        Py_DECREF(meth);
        if (res == NULL)
                return -1;
+
        if (PyInt_Check(res))
                id = PyInt_AsLong(res);
        else
                id = -1;
+
        if (id < 0)
                PyErr_SetString(PyExc_ValueError,
                                "invalid fileno() return value");
@@ -918,403 +1001,443 @@ GetFileNo (file)
        return id;
 }
 
+
+static PyObject* Tkapp_ClientDataDict = NULL;
+
 static PyObject *
 Tkapp_CreateFileHandler (self, args)
-     PyObject *self;
-     PyObject *args;           /* Is (file, mask, func) */
+       PyObject *self;
+       PyObject *args;                      /* Is (file, mask, func) */
 {
-  PyObject *file, *func, *data;
-  int mask, id;
+       PyObject *file, *func, *data;
+       PyObject *idkey;
+       int mask, id;
 #if (TK_MAJOR_VERSION*1000 + TK_MINOR_VERSION) >= 4001
-  Tcl_File tfile;
+       Tcl_File tfile;
 #endif
 
-  if (!PyArg_Parse (args, "(OiO)", &file, &mask, &func))
-    return NULL;
-  id = GetFileNo (file);
-  if (id < 0)
-    return NULL;
-  if (!PyCallable_Check(func))
-    {
-      PyErr_SetString (PyExc_TypeError, "bad argument list");
-      return NULL;
-    }
+       if (!Tkapp_ClientDataDict) {
+               if (!(Tkapp_ClientDataDict = PyDict_New()))
+                       return NULL;
+       }
+
+       if (!PyArg_Parse(args, "(OiO)", &file, &mask, &func))
+               return NULL;
+       id = GetFileNo(file);
+       if (id < 0)
+               return NULL;
+       if (!PyCallable_Check(func)) {
+               PyErr_SetString (PyExc_TypeError, "bad argument list");
+               return NULL;
+       }
 
-  /* ClientData is: (func, file) */
-  data = Py_BuildValue ("(OO)", func, file);
+       if (!(idkey = PyInt_FromLong(id)))
+               return NULL;
+
+       /* ClientData is: (func, file) */
+       data = Py_BuildValue ("(OO)", func, file);
+       if (!data || PyDict_SetItem(Tkapp_ClientDataDict, idkey, data)) {
+               Py_DECREF(idkey);
+               Py_XDECREF(data);
+               return NULL;
+       }
+       Py_DECREF(idkey);
 
 #if (TK_MAJOR_VERSION*1000 + TK_MINOR_VERSION) >= 4001
 #ifdef MS_WINDOWS
-  /* We assume this is a socket... */
-  tfile = Tcl_GetFile((ClientData)id, TCL_WIN_SOCKET);
+       /* We assume this is a socket... */
+       tfile = Tcl_GetFile((ClientData)id, TCL_WIN_SOCKET);
 #else
-  tfile = Tcl_GetFile((ClientData)id, TCL_UNIX_FD);
+       tfile = Tcl_GetFile((ClientData)id, TCL_UNIX_FD);
 #endif
-  /* Oughtta check for null Tcl_File object... */
-  Tcl_CreateFileHandler (tfile, mask, FileHandler, (ClientData) data);
+       /* Ought to check for null Tcl_File object... */
+       Tcl_CreateFileHandler(tfile, mask, FileHandler, (ClientData) data);
 #else
-  Tk_CreateFileHandler (id, mask, FileHandler, (ClientData) data);
+       Tk_CreateFileHandler(id, mask, FileHandler, (ClientData) data);
 #endif
-  /* XXX fileHandlerDict */
-
-  Py_INCREF (Py_None);
-  return Py_None;
+       /* XXX fileHandlerDict */
+       Py_INCREF (Py_None);
+       return Py_None;
 }
 
+\f
 static PyObject *
 Tkapp_DeleteFileHandler (self, args)
-     PyObject *self;
-     PyObject *args;           /* Args: file */
+       PyObject *self;
+       PyObject *args;                      /* Args: file */
 {
-  PyObject *file;
-  int id;
+       PyObject *file;
+       PyObject *idkey;
+       PyObject *data;
+       int id;
 #if (TK_MAJOR_VERSION*1000 + TK_MINOR_VERSION) >= 4001
-  Tcl_File tfile;
+       Tcl_File tfile;
 #endif
   
-  if (!PyArg_Parse (args, "O", &file))
-    return NULL;
-  id = GetFileNo (file);
-  if (id < 0)
-    return NULL;
+       if (!PyArg_Parse(args, "O", &file))
+               return NULL;
+       id = GetFileNo(file);
+       if (id < 0)
+               return NULL;
+
+       if (!(idkey = PyInt_FromLong(id)))
+               return NULL;
+       
+       /* find and free the object created in the
+        * Tkapp_CreateFileHandler() call
+        */
+       data = PyDict_GetItem(Tkapp_ClientDataDict, idkey);
+       Py_XDECREF(data);
+       PyDict_DelItem(Tkapp_ClientDataDict, idkey);
+       Py_DECREF(idkey);
 
 #if (TK_MAJOR_VERSION*1000 + TK_MINOR_VERSION) >= 4001
 #ifdef MS_WINDOWS
-  /* We assume this is a socket... */
-  tfile = Tcl_GetFile((ClientData)id, TCL_WIN_SOCKET);
+       /* We assume this is a socket... */
+       tfile = Tcl_GetFile((ClientData)id, TCL_WIN_SOCKET);
 #else
-  tfile = Tcl_GetFile((ClientData)id, TCL_UNIX_FD);
+       tfile = Tcl_GetFile((ClientData)id, TCL_UNIX_FD);
 #endif
-  /* Oughtta check for null Tcl_File object... */
-  Tcl_DeleteFileHandler(tfile);
+       /* Ought to check for null Tcl_File object... */
+       Tcl_DeleteFileHandler(tfile);
 #else
-  Tk_DeleteFileHandler (id);
+       Tk_DeleteFileHandler(id);
 #endif
-  /* XXX fileHandlerDict */
-  Py_INCREF (Py_None);
-  return Py_None;
+       /* XXX fileHandlerDict */
+       Py_INCREF (Py_None);
+       return Py_None;
 }
 
+\f
 /**** Tktt Object (timer token) ****/
 
 staticforward PyTypeObject Tktt_Type;
 
 typedef struct
-  {
-    PyObject_HEAD
-    Tk_TimerToken token;
-    PyObject *func;
-  }
+{
+       PyObject_HEAD
+       Tk_TimerToken token;
+       PyObject *func;
+}
 TkttObject;
 
 static PyObject *
 Tktt_DeleteTimerHandler (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  TkttObject *v = (TkttObject *) self;
+       TkttObject *v = (TkttObject *)self;
 
-  if (!PyArg_Parse (args, ""))
-    return NULL;
-  if (v->func != NULL)
-    {
-      Tk_DeleteTimerHandler (v->token);
-      PyMem_DEL (v->func);
-      v->func = NULL;
-    }
-  Py_INCREF (Py_None);
-  return Py_None;
+       if (!PyArg_Parse(args, ""))
+               return NULL;
+       if (v->func != NULL) {
+               Tk_DeleteTimerHandler(v->token);
+               PyMem_DEL(v->func);
+               v->func = NULL;
+       }
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 static PyMethodDef Tktt_methods[] =
 {
-  {"deletetimerhandler", Tktt_DeleteTimerHandler},
-  {NULL, NULL}
+       {"deletetimerhandler", Tktt_DeleteTimerHandler},
+       {NULL, NULL}
 };
 
 static TkttObject *
 Tktt_New (token, func)
-     Tk_TimerToken token;
-     PyObject *func;
+       Tk_TimerToken token;
+       PyObject *func;
 {
-  TkttObject *v;
+       TkttObject *v;
   
-  v = PyObject_NEW (TkttObject, &Tktt_Type);
-  if (v == NULL)
-    return NULL;
-
-  v->token = token;
-  v->func = func;
-  Py_INCREF (v->func);
-  return v;
+       v = PyObject_NEW(TkttObject, &Tktt_Type);
+       if (v == NULL)
+               return NULL;
+
+       v->token = token;
+       v->func = func;
+       Py_INCREF(v->func);
+       return v;
 }
 
 static void
 Tktt_Dealloc (self)
-     PyObject *self;
+       PyObject *self;
 {
-  PyMem_DEL (self);
+       PyMem_DEL (self);
 }
 
 static int
 Tktt_Print (self, fp, flags)
-     PyObject *self;
-     FILE *fp;
-     int flags;
+       PyObject *self;
+       FILE *fp;
+       int flags;
 {
-  TkttObject *v = (TkttObject *) self;
+       TkttObject *v = (TkttObject *)self;
 
-  fprintf(fp, "<tktimertoken at 0x%lx%s>", (long)v,
-    v->func == NULL ? ", handler deleted" : "");
-  return 0;
+       fprintf(fp, "<tktimertoken at 0x%lx%s>", (long)v,
+               v->func == NULL ? ", handler deleted" : "");
+       return 0;
 }
 
 static PyObject *
 Tktt_GetAttr (self, name)
-     PyObject *self;
-     char *name;
+       PyObject *self;
+       char *name;
 {
-  return Py_FindMethod (Tktt_methods, self, name);
+       return Py_FindMethod(Tktt_methods, self, name);
 }
 
 static PyTypeObject Tktt_Type =
 {
-  PyObject_HEAD_INIT (NULL)
-  0,                           /*ob_size */
-  "tktimertoken",              /*tp_name */
-  sizeof (TkttObject),         /*tp_basicsize */
-  0,                           /*tp_itemsize */
-  Tktt_Dealloc,                        /*tp_dealloc */
-  Tktt_Print,                  /*tp_print */
-  Tktt_GetAttr,                        /*tp_getattr */
-  0,                           /*tp_setattr */
-  0,                           /*tp_compare */
-  0,                           /*tp_repr */
-  0,                           /*tp_as_number */
-  0,                           /*tp_as_sequence */
-  0,                           /*tp_as_mapping */
-  0,                           /*tp_hash */
+       PyObject_HEAD_INIT (NULL)
+       0,                                   /*ob_size */
+       "tktimertoken",                      /*tp_name */
+       sizeof (TkttObject),                 /*tp_basicsize */
+       0,                                   /*tp_itemsize */
+       Tktt_Dealloc,                        /*tp_dealloc */
+       Tktt_Print,                          /*tp_print */
+       Tktt_GetAttr,                        /*tp_getattr */
+       0,                                   /*tp_setattr */
+       0,                                   /*tp_compare */
+       0,                                   /*tp_repr */
+       0,                                   /*tp_as_number */
+       0,                                   /*tp_as_sequence */
+       0,                                   /*tp_as_mapping */
+       0,                                   /*tp_hash */
 };
 
+
+\f
 /** Timer Handler **/
 
 static void
 TimerHandler (clientData)
-     ClientData clientData;
+       ClientData clientData;
 {
-  PyObject *func = (PyObject *) clientData;
-  PyObject *arg, *res;
+       PyObject *func = (PyObject *)clientData;
+       PyObject *res  = PyEval_CallObject(func, NULL);
 
-  arg = PyTuple_New (0);
-  res = PyEval_CallObject (func, arg);
-  Py_DECREF (arg);
-  if (res == NULL)
-    {
-      errorInCmd = 1;
-      PyErr_Fetch (&excInCmd, &valInCmd, &trbInCmd);
-    }
-  else
-    Py_DECREF (res);
+       if (res == NULL) {
+               errorInCmd = 1;
+               PyErr_Fetch(&excInCmd, &valInCmd, &trbInCmd);
+       }
+       else
+               Py_DECREF(res);
 }
 
 static PyObject *
 Tkapp_CreateTimerHandler (self, args)
-     PyObject *self;
-     PyObject *args;           /* Is (milliseconds, func) */
-{
-  int milliseconds;
-  PyObject *func;
-  Tk_TimerToken token;
+       PyObject *self;
+       PyObject *args;                      /* Is (milliseconds, func) */
+{
+       int milliseconds;
+       PyObject *func;
+       Tk_TimerToken token;
+
+       if (!PyArg_Parse(args, "(iO)", &milliseconds, &func))
+               return NULL;
+       if (!PyCallable_Check(func)) {
+               PyErr_SetString (PyExc_TypeError, "bad argument list");
+               return NULL;
+       }
+       token = Tk_CreateTimerHandler(milliseconds, TimerHandler,
+                                     (ClientData)func);
 
-  if (!PyArg_Parse (args, "(iO)", &milliseconds, &func))
-    return NULL;
-  if (!PyCallable_Check(func))
-    {
-      PyErr_SetString (PyExc_TypeError, "bad argument list");
-      return NULL;
-    }
-  token = Tk_CreateTimerHandler(milliseconds, TimerHandler, (ClientData) func);
-  return (PyObject *) Tktt_New (token, func);
+       return (PyObject *) Tktt_New(token, func);
 }
 
+
+\f
 /** Event Loop **/
 
 static PyObject *
 Tkapp_MainLoop (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-  int threshold = 0;
+       int threshold = 0;
 
-  if (!PyArg_ParseTuple (args, "|i", &threshold))
-    return NULL;
+       if (!PyArg_ParseTuple(args, "|i", &threshold))
+               return NULL;
 
-  quitMainLoop = 0;
-  while (Tk_GetNumMainWindows() > threshold && !quitMainLoop && !errorInCmd)
-    {
-           /* XXX Ought to check for other signals! */
-      if (PyOS_InterruptOccurred ())
+       quitMainLoop = 0;
+       while (Tk_GetNumMainWindows() > threshold &&
+              !quitMainLoop &&
+              !errorInCmd)
        {
-         PyErr_SetNone (PyExc_KeyboardInterrupt);
-         return NULL;
+               /* XXX Ought to check for other signals! */
+               if (PyOS_InterruptOccurred()) {
+                       PyErr_SetNone(PyExc_KeyboardInterrupt);
+                       return NULL;
+               }
+               Tk_DoOneEvent(0);
        }
-      Tk_DoOneEvent (0);
-    }
-  quitMainLoop = 0;
+       quitMainLoop = 0;
 
-  if (errorInCmd)
-    {
-      errorInCmd = 0;
-      PyErr_Restore (excInCmd, valInCmd, trbInCmd);
-      excInCmd = valInCmd = trbInCmd = NULL;
-      return NULL;
-    }
-  Py_INCREF (Py_None);
-  return Py_None;
+       if (errorInCmd) {
+               errorInCmd = 0;
+               PyErr_Restore(excInCmd, valInCmd, trbInCmd);
+               excInCmd = valInCmd = trbInCmd = NULL;
+               return NULL;
+       }
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 static PyObject *
 Tkapp_DoOneEvent (self, args)
-    PyObject *self;
-    PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
-    int        flags = TK_ALL_EVENTS;
-    int rv;
+       int flags = TK_ALL_EVENTS;
+       int rv;
+
+       if (!PyArg_ParseTuple(args, "|i", &flags))
+               return NULL;
 
-    if (!PyArg_ParseTuple (args, "|i", &flags))
-      return NULL;
-    rv = Tk_DoOneEvent(flags);
-    return Py_BuildValue ("i", rv);
+       rv = Tk_DoOneEvent(flags);
+       return Py_BuildValue("i", rv);
 }
 
 static PyObject *
 Tkapp_Quit (self, args)
-     PyObject *self;
-     PyObject *args;
+       PyObject *self;
+       PyObject *args;
 {
 
-  if (!PyArg_Parse (args, ""))
-    return NULL;
-  quitMainLoop = 1;
-  Py_INCREF (Py_None);
-  return Py_None;
+       if (!PyArg_Parse(args, ""))
+               return NULL;
+
+       quitMainLoop = 1;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
+
+\f
 /**** Tkapp Method List ****/
 
 static PyMethodDef Tkapp_methods[] =
 {
-  {"call", Tkapp_Call},
-  {"globalcall", Tkapp_GlobalCall},
-  {"eval", Tkapp_Eval},
-  {"globaleval", Tkapp_GlobalEval},
-  {"evalfile", Tkapp_EvalFile},
-  {"record", Tkapp_Record},
-  {"adderrorinfo", Tkapp_AddErrorInfo},
-  {"setvar", Tkapp_SetVar},
-  {"globalsetvar", Tkapp_GlobalSetVar},
-  {"getvar", Tkapp_GetVar},
-  {"globalgetvar", Tkapp_GlobalGetVar},
-  {"unsetvar", Tkapp_UnsetVar},
-  {"globalunsetvar", Tkapp_GlobalUnsetVar},
-  {"getint", Tkapp_GetInt},
-  {"getdouble", Tkapp_GetDouble},
-  {"getboolean", Tkapp_GetBoolean},
-  {"exprstring", Tkapp_ExprString},
-  {"exprlong", Tkapp_ExprLong},
-  {"exprdouble", Tkapp_ExprDouble},
-  {"exprboolean", Tkapp_ExprBoolean},
-  {"splitlist", Tkapp_SplitList},
-  {"split", Tkapp_Split},
-  {"merge", Tkapp_Merge},
-  {"createcommand", Tkapp_CreateCommand},
-  {"deletecommand", Tkapp_DeleteCommand},
-  {"createfilehandler", Tkapp_CreateFileHandler},
-  {"deletefilehandler", Tkapp_DeleteFileHandler},
-  {"createtimerhandler", Tkapp_CreateTimerHandler},
-  {"mainloop", Tkapp_MainLoop, 1},
-  {"dooneevent", Tkapp_DoOneEvent, 1},
-  {"quit", Tkapp_Quit},
-  {NULL, NULL}
+       {"call",               Tkapp_Call},
+       {"globalcall",         Tkapp_GlobalCall},
+       {"eval",               Tkapp_Eval},
+       {"globaleval",         Tkapp_GlobalEval},
+       {"evalfile",           Tkapp_EvalFile},
+       {"record",             Tkapp_Record},
+       {"adderrorinfo",       Tkapp_AddErrorInfo},
+       {"setvar",             Tkapp_SetVar},
+       {"globalsetvar",       Tkapp_GlobalSetVar},
+       {"getvar",             Tkapp_GetVar},
+       {"globalgetvar",       Tkapp_GlobalGetVar},
+       {"unsetvar",           Tkapp_UnsetVar},
+       {"globalunsetvar",     Tkapp_GlobalUnsetVar},
+       {"getint",             Tkapp_GetInt},
+       {"getdouble",          Tkapp_GetDouble},
+       {"getboolean",         Tkapp_GetBoolean},
+       {"exprstring",         Tkapp_ExprString},
+       {"exprlong",           Tkapp_ExprLong},
+       {"exprdouble",         Tkapp_ExprDouble},
+       {"exprboolean",        Tkapp_ExprBoolean},
+       {"splitlist",          Tkapp_SplitList},
+       {"split",              Tkapp_Split},
+       {"merge",              Tkapp_Merge},
+       {"createcommand",      Tkapp_CreateCommand},
+       {"deletecommand",      Tkapp_DeleteCommand},
+       {"createfilehandler",  Tkapp_CreateFileHandler},
+       {"deletefilehandler",  Tkapp_DeleteFileHandler},
+       {"createtimerhandler", Tkapp_CreateTimerHandler},
+       {"mainloop",           Tkapp_MainLoop, 1},
+       {"dooneevent",         Tkapp_DoOneEvent, 1},
+       {"quit",               Tkapp_Quit},
+       {NULL,                 NULL}
 };
 
+
+\f
 /**** Tkapp Type Methods ****/
 
 static void
 Tkapp_Dealloc (self)
-     PyObject *self;
+       PyObject *self;
 {
 #ifdef NEED_TKCREATEMAINWINDOW
-  Tk_DestroyWindow (Tkapp_Tkwin (self));
+       Tk_DestroyWindow (Tkapp_Tkwin (self));
 #endif
-  Tcl_DeleteInterp (Tkapp_Interp (self));
-  PyMem_DEL (self);
+       Tcl_DeleteInterp (Tkapp_Interp (self));
+       PyMem_DEL (self);
 }
 
 static PyObject *
 Tkapp_GetAttr (self, name)
-     PyObject *self;
-     char *name;
+       PyObject *self;
+       char *name;
 {
-  return Py_FindMethod (Tkapp_methods, self, name);
+       return Py_FindMethod (Tkapp_methods, self, name);
 }
 
 static PyTypeObject Tkapp_Type =
 {
-  PyObject_HEAD_INIT (NULL)
-  0,                           /*ob_size */
-  "tkapp",                     /*tp_name */
-  sizeof (TkappObject),                /*tp_basicsize */
-  0,                           /*tp_itemsize */
-  Tkapp_Dealloc,               /*tp_dealloc */
-  0,                           /*tp_print */
-  Tkapp_GetAttr,               /*tp_getattr */
-  0,                           /*tp_setattr */
-  0,                           /*tp_compare */
-  0,                           /*tp_repr */
-  0,                           /*tp_as_number */
-  0,                           /*tp_as_sequence */
-  0,                           /*tp_as_mapping */
-  0,                           /*tp_hash */
+       PyObject_HEAD_INIT (NULL)
+       0,                                   /*ob_size */
+       "tkapp",                             /*tp_name */
+       sizeof (TkappObject),                /*tp_basicsize */
+       0,                                   /*tp_itemsize */
+       Tkapp_Dealloc,                       /*tp_dealloc */
+       0,                                   /*tp_print */
+       Tkapp_GetAttr,                       /*tp_getattr */
+       0,                                   /*tp_setattr */
+       0,                                   /*tp_compare */
+       0,                                   /*tp_repr */
+       0,                                   /*tp_as_number */
+       0,                                   /*tp_as_sequence */
+       0,                                   /*tp_as_mapping */
+       0,                                   /*tp_hash */
 };
 
+
+\f
 /**** Tkinter Module ****/
 
 static PyObject *
 Tkinter_Create (self, args)
-     PyObject *self;
-     PyObject *args;
-{
-  char *screenName = NULL;
-  char *baseName = NULL;
-  char *className = NULL;
-  int interactive = 0;
-
-  baseName = strrchr (Py_GetProgramName (), '/');
-  if (baseName != NULL)
-    baseName++;
-  else
-    baseName = Py_GetProgramName ();
-  className = "Tk";
+       PyObject *self;
+       PyObject *args;
+{
+       char *screenName = NULL;
+       char *baseName = NULL;
+       char *className = NULL;
+       int interactive = 0;
+
+       baseName = strrchr(Py_GetProgramName (), '/');
+       if (baseName != NULL)
+               baseName++;
+       else
+               baseName = Py_GetProgramName();
+       className = "Tk";
   
-  if (!PyArg_ParseTuple (args, "|zssi",
-                        &screenName, &baseName, &className, &interactive))
-    return NULL;
+       if (!PyArg_ParseTuple(args, "|zssi",
+                             &screenName, &baseName, &className,
+                             &interactive))
+               return NULL;
 
-  return (PyObject *) Tkapp_New (screenName, baseName, className, 
-                                interactive);
+       return (PyObject *) Tkapp_New(screenName, baseName, className, 
+                                     interactive);
 }
 
 static PyMethodDef moduleMethods[] =
 {
-  {"create", Tkinter_Create, 1},
-  {"createfilehandler", Tkapp_CreateFileHandler, 0},
-  {"deletefilehandler", Tkapp_DeleteFileHandler, 0},
-  {"createtimerhandler", Tkapp_CreateTimerHandler, 0},
-  {"mainloop", Tkapp_MainLoop, 1},
-  {"dooneevent", Tkapp_DoOneEvent, 1},
-  {"quit", Tkapp_Quit},
-  {NULL, NULL}
+       {"create",             Tkinter_Create, 1},
+       {"createfilehandler",  Tkapp_CreateFileHandler, 0},
+       {"deletefilehandler",  Tkapp_DeleteFileHandler, 0},
+       {"createtimerhandler", Tkapp_CreateTimerHandler, 0},
+       {"mainloop",           Tkapp_MainLoop, 1},
+       {"dooneevent",         Tkapp_DoOneEvent, 1},
+       {"quit",               Tkapp_Quit},
+       {NULL,                 NULL}
 };
 
 #undef WITH_READLINE /* XXX */
@@ -1322,95 +1445,114 @@ static PyMethodDef moduleMethods[] =
 static int
 EventHook ()
 {
-  if (errorInCmd)              /* XXX Reset tty */
-    {
-      errorInCmd = 0;
-      PyErr_Restore (excInCmd, valInCmd, trbInCmd);
-      excInCmd = valInCmd = trbInCmd = NULL;
-      PyErr_Print ();
-     }
-  if (Tk_GetNumMainWindows() > 0)
-    Tk_DoOneEvent (TK_DONT_WAIT);
-  return 0;
+       /* XXX Reset tty */
+       if (errorInCmd) {
+               errorInCmd = 0;
+               PyErr_Restore(excInCmd, valInCmd, trbInCmd);
+               excInCmd = valInCmd = trbInCmd = NULL;
+               PyErr_Print();
+       }
+       if (Tk_GetNumMainWindows() > 0)
+               Tk_DoOneEvent(TK_DONT_WAIT);
+       return 0;
 }
 #endif /* WITH_READLINE */
 
 static void
 Tkinter_Cleanup ()
 {
-/* This segfault with Tk 4.0 beta and seems unnecessary there as well */
+       /* This segfault with Tk 4.0 beta and seems unnecessary there as
+        * well */
+
 #if TK_MAJOR_VERSION < 4
-  /* XXX rl_deprep_terminal is static, damned! */
-  while (tkMainWindowList != 0)
-    Tk_DestroyWindow (tkMainWindowList->win);
+       /* XXX rl_deprep_terminal is static, damned! */
+       while (tkMainWindowList != 0)
+               Tk_DestroyWindow(tkMainWindowList->win);
 #endif
 }
 
+
+/* all errors will be checked in one fell swoop in init_tkinter() */
+static void
+ins_long(d, name, val)
+       PyObject *d;
+       char *name;
+       long val;
+{
+       PyObject *v = PyInt_FromLong(val);
+       if (v) {
+               PyDict_SetItemString(d, name, v);
+               Py_DECREF(v);
+       }
+}
+static void
+ins_string(d, name, val)
+       PyObject *d;
+       char *name;
+       char *val;
+{
+       PyObject *v = PyString_FromString(val);
+       if (v) {
+               PyDict_SetItemString(d, name, v);
+               Py_DECREF(v);
+       }
+}
+
+
 void
 init_tkinter ()
 {
-  static inited = 0;
+       static inited = 0;
 
 #ifdef WITH_READLINE
-  extern int (*rl_event_hook) ();
+       extern int (*rl_event_hook) ();
 #endif /* WITH_READLINE */
-  PyObject *m, *d, *v;
-
-  Tkapp_Type.ob_type = &PyType_Type;
-  Tktt_Type.ob_type = &PyType_Type;
-
-  m = Py_InitModule ("_tkinter", moduleMethods);
-
-  d = PyModule_GetDict (m);
-  Tkinter_TclError = Py_BuildValue ("s", "TclError");
-  PyDict_SetItemString (d, "TclError", Tkinter_TclError);
-
-  v = Py_BuildValue ("i", TK_READABLE);
-  PyDict_SetItemString (d, "READABLE", v);
-  v = Py_BuildValue ("i", TK_WRITABLE);
-  PyDict_SetItemString (d, "WRITABLE", v);
-  v = Py_BuildValue ("i", TK_EXCEPTION);
-  PyDict_SetItemString (d, "EXCEPTION", v);
-  v = Py_BuildValue ("i", TK_X_EVENTS);
-  PyDict_SetItemString (d, "X_EVENTS", v);
-  v = Py_BuildValue ("i", TK_FILE_EVENTS);
-  PyDict_SetItemString (d, "FILE_EVENTS", v);
-  v = Py_BuildValue ("i", TK_TIMER_EVENTS);
-  PyDict_SetItemString (d, "TIMER_EVENTS", v);
-  v = Py_BuildValue ("i", TK_IDLE_EVENTS);
-  PyDict_SetItemString (d, "IDLE_EVENTS", v);
-  v = Py_BuildValue ("i", TK_ALL_EVENTS);
-  PyDict_SetItemString (d, "ALL_EVENTS", v);
-  v = Py_BuildValue ("i", TK_DONT_WAIT);
-  PyDict_SetItemString (d, "DONT_WAIT", v);
-  v = Py_BuildValue ("s", TK_VERSION);
-  PyDict_SetItemString (d, "TK_VERSION", v);
-  v = Py_BuildValue ("s", TCL_VERSION);
-  PyDict_SetItemString (d, "TCL_VERSION", v);
+       PyObject *m, *d;
+
+       Tkapp_Type.ob_type = &PyType_Type;
+       Tktt_Type.ob_type = &PyType_Type;
+
+       m = Py_InitModule("_tkinter", moduleMethods);
+
+       d = PyModule_GetDict(m);
+       Tkinter_TclError = Py_BuildValue("s", "TclError");
+       PyDict_SetItemString(d, "TclError", Tkinter_TclError);
+
+       ins_long(d, "READABLE", TK_READABLE);
+       ins_long(d, "WRITABLE", TK_WRITABLE);
+       ins_long(d, "EXCEPTION", TK_EXCEPTION);
+       ins_long(d, "X_EVENTS", TK_X_EVENTS);
+       ins_long(d, "FILE_EVENTS", TK_FILE_EVENTS);
+       ins_long(d, "TIMER_EVENTS", TK_TIMER_EVENTS);
+       ins_long(d, "IDLE_EVENTS", TK_IDLE_EVENTS);
+       ins_long(d, "ALL_EVENTS", TK_ALL_EVENTS);
+       ins_long(d, "DONT_WAIT", TK_DONT_WAIT);
+       ins_string(d, "TK_VERSION", TK_VERSION);
+       ins_string(d, "TCL_VERSION", TCL_VERSION);
 
 #ifdef WITH_READLINE
-  rl_event_hook = EventHook;
+       rl_event_hook = EventHook;
 #endif /* WITH_READLINE */
 
-  if (!inited)
-    {
-      inited = 1;
-      if (Py_AtExit (Tkinter_Cleanup) != 0)
-       fprintf(stderr,
-               "Tkinter: warning: cleanup procedure not registered\n");
-    }
+       if (!inited) {
+               inited = 1;
+               if (Py_AtExit(Tkinter_Cleanup) != 0)
+                       fprintf(stderr,
+                      "Tkinter: warning: cleanup procedure not registered\n");
+       }
 
-  if (PyErr_Occurred ())
-    Py_FatalError ("can't initialize module _tkinter");
+       if (PyErr_Occurred())
+               Py_FatalError ("can't initialize module _tkinter");
 #ifdef macintosh
-  TclMacSetEventProc(PyMacConvertEvent);
+       TclMacSetEventProc(PyMacConvertEvent);
 #if GENERATINGCFM
-  mac_addlibresources();
+       mac_addlibresources();
 #endif /* GENERATINGCFM */
 #endif /* macintosh */
 }
 
 
+\f
 #ifdef macintosh
 
 /*
@@ -1420,16 +1562,16 @@ init_tkinter ()
 void
 panic(char * format, ...)
 {
-    va_list varg;
+       va_list varg;
        
-    va_start(varg, format);
+       va_start(varg, format);
        
-    vfprintf(stderr, format, varg);
-    (void) fflush(stderr);
+       vfprintf(stderr, format, varg);
+       (void) fflush(stderr);
        
-    va_end(varg);
+       va_end(varg);
 
-    Py_FatalError("Tcl/Tk panic");
+       Py_FatalError("Tcl/Tk panic");
 }
 
 /*
@@ -1438,11 +1580,11 @@ panic(char * format, ...)
 
 static int
 PyMacConvertEvent(eventPtr)
-    EventRecord *eventPtr;
+       EventRecord *eventPtr;
 {
-  if (SIOUXHandleOneEvent(eventPtr))
-    return 0; /* Nothing happened to the Tcl event queue */
-  return TkMacConvertEvent(eventPtr);
+       if (SIOUXHandleOneEvent(eventPtr))
+               return 0; /* Nothing happened to the Tcl event queue */
+       return TkMacConvertEvent(eventPtr);
 }
 
 #if GENERATINGCFM