summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorKurt B. Kaiser <kbk@shore.net>2003-03-10 20:41:07 (GMT)
committerKurt B. Kaiser <kbk@shore.net>2003-03-10 20:41:07 (GMT)
commit98b15ab980aacc317779ce1f9af8da135981b01b (patch)
tree7975e39ecf6229c91fb5037011a5a07fc443430b /Lib/idlelib
parenta2369928b52ddcbadb5709cfa5df0b502d861090 (diff)
downloadcpython-98b15ab980aacc317779ce1f9af8da135981b01b.zip
cpython-98b15ab980aacc317779ce1f9af8da135981b01b.tar.gz
cpython-98b15ab980aacc317779ce1f9af8da135981b01b.tar.bz2
A interruptmodule.c
M setup.py Implements an interrupt extension module which allows a subthread to raise an interrupt in the main thread.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/interruptmodule.c49
-rw-r--r--Lib/idlelib/setup.py3
2 files changed, 51 insertions, 1 deletions
diff --git a/Lib/idlelib/interruptmodule.c b/Lib/idlelib/interruptmodule.c
new file mode 100644
index 0000000..8e18d5a
--- /dev/null
+++ b/Lib/idlelib/interruptmodule.c
@@ -0,0 +1,49 @@
+/***********************************************************************
+ * interruptmodule.c
+ *
+ * Python extension implementing the interrupt module.
+ *
+ **********************************************************************/
+
+#include "Python.h"
+
+#ifndef PyDoc_STR
+#define PyDoc_VAR(name) static char name[]
+#define PyDoc_STR(str) str
+#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str)
+#endif
+
+/* module documentation */
+
+PyDoc_STRVAR(module_doc,
+"Provide a way to interrupt the main thread from a subthread.\n\n\
+In threaded Python code the KeyboardInterrupt is always directed to\n\
+the thread which raised it. This extension provides a method,\n\
+interrupt_main, which a subthread can use to raise a KeyboardInterrupt\n\
+in the main thread.");
+
+/* module functions */
+
+static PyObject *
+setinterrupt(PyObject * self, PyObject * args)
+{
+ PyErr_SetInterrupt();
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+/* registration table */
+
+static struct PyMethodDef methods[] = {
+ {"interrupt_main", setinterrupt, METH_VARARGS,
+ PyDoc_STR("Interrupt the main thread")},
+ {NULL, NULL}
+};
+
+/* module initialization */
+
+void
+initinterrupt(void)
+{
+ (void) Py_InitModule3("interrupt", methods, module_doc);
+}
diff --git a/Lib/idlelib/setup.py b/Lib/idlelib/setup.py
index 4269273..a7cff9c 100644
--- a/Lib/idlelib/setup.py
+++ b/Lib/idlelib/setup.py
@@ -1,5 +1,5 @@
import os, glob, sys
-from distutils.core import setup
+from distutils.core import setup, Extension
from distutils.command.build_py import build_py
from distutils.command.install_lib import install_lib
import idlever
@@ -111,5 +111,6 @@ For further details, refer to idlefork.sourceforge.net.
'install_lib':IDLE_Installer},
package_dir = {pkgname: pkg_dir},
packages = [pkgname],
+ ext_modules = [Extension("interrupt", ["interruptmodule.c"])],
scripts = [os.path.join(pkg_dir, idle_name)]
)