Commit Graph

151 Commits

Author SHA1 Message Date
Andrew M. Kuchling 288e97b7fe Patch from Michael Hudson to fix flatten recursive data structures:
[mwh21@atrus build]$ ./python
>>> import Tkinter
>>> l = []
>>> l.append(l)
>>> Tkinter._flatten(l)
Segmentation fault (core dumped)
2000-06-19 00:55:09 +00:00
Andrew M. Kuchling e475e70128 Patch from /F:
this patch adds a fast _flatten function to the _tkinter
module, and imports it from Tkinter.py (if available).

this speeds up canvas operations like create_line and
create_polygon.  for example, a create_line with 5000
vertices runs about 50 times faster with this patch in
place.
2000-06-18 18:45:50 +00:00
Guido van Rossum 69529ad0cc When the UTF-8 conversion to Unicode fails, return an 8-bit string
instead.  This seems more robust than returning an Unicode string with
some unconverted charcters in it.

This still doesn't support getting truly binary data out of Tcl, since
we look for the trailing null byte; but the old (pre-Unicode) code did
this too, so apparently there's no need.  (Plus, I really don't feel
like finding out how Tcl deals with this in each version.)
2000-05-04 15:55:17 +00:00
Guido van Rossum 990f5c6c98 Two changes to improve (I hope) Unicode support.
1. In Tcl 8.2 and later, use Tcl_NewUnicodeObj() when passing a Python
Unicode object rather than going through UTF-8.  (This function
doesn't exist in Tcl 8.1, so there the original UTF-8 code is still
used; in Tcl 8.0 there is no support for Unicode.)  This assumes that
Tcl_UniChar is the same thing as Py_UNICODE; a run-time error is
issued if this is not the case.

2. In Tcl 8.1 and later (i.e., whenever Tcl supports Unicode), when a
string returned from Tcl contains bytes with the top bit set, we
assume it is encoded in UTF-8, and decode it into a Unicode string
object.

Notes:

- Passing Unicode strings to Tcl 8.0 does not do the right thing; this
isn't worth fixing.

- When passing an 8-bit string to Tcl 8.1 or later that has bytes with
the top bit set, Tcl tries to interpret it as UTF-8; it seems to fall
back on Latin-1 for non-UTF-8 bytes.  I'm not sure what to do about
this besides telling the user to disambiguate such strings by
converting them to Unicode (forcing the user to be explicit about the
encoding).

- Obviously it won't be possible to get binary data out of Tk this
way.  Do we need that ability?  How to do it?
2000-05-04 15:07:16 +00:00
Guido van Rossum b18618dab7 Vladimir Marangozov's long-awaited malloc restructuring.
For more comments, read the patches@python.org archives.
For documentation read the comments in mymalloc.h and objimpl.h.

(This is not exactly what Vladimir posted to the patches list; I've
made a few changes, and Vladimir sent me a fix in private email for a
problem that only occurs in debug mode.  I'm also holding back on his
change to main.c, which seems unnecessary to me.)
2000-05-03 23:44:39 +00:00
Guido van Rossum 8823accd1f Marc-Andre Lemburg:
Fixes a memory leak found by Fredrik Lundh.
2000-04-27 20:14:31 +00:00
Guido van Rossum 64231e5c39 Add back an obscure "feature" to the Obj version of Tkapp_Call(): a
None in an argument list *terminates* the argument list: further
arguments are *ignored*.  This isn't kosher, but too much code relies
on it, implicitly.  For example, IDLE was pretty broken.
2000-03-31 03:29:39 +00:00
Guido van Rossum a1f0a8f4a4 Don't use the object call interface in Tk 8.0 -- the EvalObj* API
changed from 8.0 to 8.1 and I see no big reason to use objects in 8.0.
At least now it works again with all versions from 8.0 - 8.3.
2000-03-31 00:51:37 +00:00
Guido van Rossum 632de27021 The Tcl_Obj patch discussed on the patches list.
This was originally submitted by Martin von Loewis as part of his
Unicode patch; all I did was add special cases for Python int and
float objects and rearrange the object type tests somewhat to speed up
the common cases (string, int, float, tuple, unicode, object).
2000-03-29 00:19:50 +00:00
Guido van Rossum a80649b357 Patch by Neil Schemenauer to remove support for Tcl/Tk versions before
8.0.  There really is no excuse, and for who really still wants those,
they can go back to Python 1.5.2.
2000-03-28 20:07:05 +00:00
Guido van Rossum e187b0eb20 Add a call to Tcl_FindExecutable(). This was inspired by a patch by
Martin von Loewis (whose more elaborate patch to use objects is still
under review).
2000-03-27 21:46:29 +00:00
Guido van Rossum 43713e5a28 Massive patch by Skip Montanaro to add ":name" to as many
PyArg_ParseTuple() format string arguments as possible.
2000-02-29 13:59:29 +00:00
Guido van Rossum 6b26a06037 Patch by Dieter Maurer to make things work for Tcl/Tk 8.1 (tested with
8.1.1).  His approach doesn't work with Tcl/Tk 8.2, so I've placed it
inside #if TKMAJORMINOR == 8001 and #endif.  See also his patch for
tkappinit.c.
1999-11-05 18:09:56 +00:00
Guido van Rossum 11801859e0 Include myselect.h -- needed on some platforms. 1999-01-25 21:39:03 +00:00
Guido van Rossum 65d5b5763c Thanks to Chris Herborth, the thread primitives now have proper Py*
names in the source code (they already had those for the linker,
through some smart macros; but the source still had the old, un-Py names).
1998-12-21 19:32:43 +00:00
Guido van Rossum 3886bb6997 Add DL_EXPORT() to all modules that could possibly be used
on BeOS or Windows.
1998-12-04 18:50:17 +00:00
Guido van Rossum e9bc62d993 RajGopal Srinivasan noted that the latest code doesn't work when
running in a non-threaded environment.  He added some #ifdefs that fix
this.
1998-11-17 03:45:24 +00:00
Guido van Rossum 41f0a98f8f Looks like I didn't test this interactively. The EventHook() code was
broken; it asked for the current thread state when there was none.
Fixed by using the saved event_tstate.
1998-10-12 16:26:22 +00:00
Guido van Rossum dc1adabcb8 Patch by Jonathan Giddy (with some cleanup by me) to always use the
thread state of the thread calling mainloop() (or another event
handling function) rather than the thread state of the function that
created the client data structure.
1998-10-09 20:51:18 +00:00
Guido van Rossum 215193bd93 There's no need to declare Tk_GetNumMainWindows() (and it breaks
something in the latest win342 build).
1998-10-08 02:27:41 +00:00
Guido van Rossum 49b560698b Renamed thread.h to pythread.h. 1998-10-01 20:42:43 +00:00
Guido van Rossum 469067800b Get rid of the test for non-NULL thread state in EventHook; it can be
triggered in situations that are not an error.
1998-09-21 14:47:16 +00:00
Guido van Rossum 541f241132 Need mytime.h for Sleep(). 1998-08-13 13:29:22 +00:00
Guido van Rossum 227cf764b2 Undo a silly effect of a global substitution: the macintosh panic()
function had a reference to vPySys_WriteStderr(...) -- turn it back
into fprintf(stder, ...).
1998-08-05 13:53:32 +00:00
Guido van Rossum 43ff8683fe Temporarily get rid of the registration of Tcl_Finalize() as a
low-level Python exit handler.  This can attempt to call Python code
at a point that the interpreter and thread state have already been
destroyed, causing a Bus Error.  Given the intended use of
Py_AtExit(), I'm not convinced that it's a good idea to call it
earlier during Python's finalization sequence...  (Although this is
the only use for it in the entire distribution.)
1998-07-14 18:02:13 +00:00
Guido van Rossum c821d1ecc0 Add a cast that a picky SGI compiler found was necessary. 1998-07-07 22:25:47 +00:00
Guido van Rossum f766e23f63 There was an error check in a loop in PythonCmd which called
PythonCmd_Error() but failed to return.  The error wasn't very likely
(only when we run out of memory) but since the check is there we might
as well return the error.  (I think that Barry introduced this buglet
when he added error checks everywhere.)
1998-06-19 04:28:10 +00:00
Guido van Rossum 5e97783c8f # Note: a previous checkin message was lost because I can now use CVS
# from my PC at home, but it can't send email :-(

Add a clarifying comment about the new ENTER_OVERLAP and
LEAVE_OVERLAP_TCL macros; get rid of all the bogus tests for deleted
interpreters (Tcl already tests for this; they were left over from an
earlier misguided attempt to fix the threading).
1998-06-15 14:03:52 +00:00
Guido van Rossum 62320c9b9b # (My first checkin from Windows NT using remote CVS!)
There were some serious problem with the thread-safety code.
The basic problem was that often the result was gotten out of
the Tcl interpreter object after releasing the Tcl lock.
Of course, another thread might have changed the return value
already, and this was indeed happening.  (Amazing what trying
it on a different thread implementation does!)

The solution is to grab the Python lock without releasing the
Tcl lock, so it's safe to create a string object or set the
exceptions from the Tcl interpreter.  Once that's done, the
Tcl lock is released.

Note that it's now legal to acquire the Python lock while the
the Tcl lock is held; but the reverse is not true: the Python
lock must be released before the Tcl lock is acquired.  This
in order to avoid deadlines.  Fortunately, there don't seem to
be any problems with this.
1998-06-15 04:36:09 +00:00
Guido van Rossum ad4db17552 Fixed the EventHook() code so that it also works on Windows, sort of.
(The "sort of" is because it uses kbhit() to detect that the user
starts typing, and then no events are processed until they hit
return.)

Also fixed a nasty locking bug: EventHook() is called without the Tcl
lock set, so it can't use the ENTER_PYTHON and LEAVE_PYTHON macros,
which manipulate both the Python and the Tcl lock.  I now only acquire
and release the Python lock.

(Haven't tested this on Unix yet...)
1998-06-13 13:56:28 +00:00
Guido van Rossum 2a5119b680 On Windows, need #include <windows.h>; and it's MS_WINDOWS, not MS_WIN32. 1998-05-29 01:28:40 +00:00
Guido van Rossum 00d93066b0 Changes to make it possible to write multi-threaded programs using
Tkinter.  This adds a separate lock -- read the comments.  (This was
also needed for Mark Hammond's attempts to make PythonWin
Tkinter-friendly.)

The changes have affected the EventHook slightly, too; and I've done
some more cleanup of the code that deals with the different versions
of Tcl_CreateFileHandler().
1998-05-28 23:06:38 +00:00
Guido van Rossum 7bf15648a4 Use a different implementation of EventHook(). The new version
registers an input file handler for stdin with Tcl and handles Tcl
events until something is available on stdin; it then deletes the
handler and returns from EventHook().

This works with or without GNU readline, and doesn't busy-wait.

It still doesn't work for Mac or Windows :-(
1998-05-22 18:28:17 +00:00
Guido van Rossum b41addf6a6 Replace all calls to fprintf(stderr, ...) with calls to PySys_WriteStderr(...). 1998-05-12 15:02:41 +00:00
Guido van Rossum 597ac20708 Trivial little change: timer tokens shouldn't have a Print() function,
they should have a Repr() function.
1998-05-12 14:36:19 +00:00
Guido van Rossum 212643f199 Still somewhat experimental speedup. This appears to speed up the
most common interface to Tcl, the call() method, by maybe 20-25%.

The speedup code avoids the construction of a Tcl command string from
the argument list -- the Tcl argument list is immediately parsed back
by Tcl_Eval() into a list that is *guaranteed* (by Tcl_Merge()) to be
exactly the same list, so instead we look up the command info and call
the command function directly.  If the lookup fails, we fall back to
the old method (Tcl_Merge() + Tcl_Eval()) so we don't need to worry
about special cases like undefined commands or the occasional command
("after") that sets the info.proc pointer to NULL -- let TclEval()
deal with these.
1998-04-29 16:22:14 +00:00
Guido van Rossum 9d1b7ae65b Add a new method of interpreter objects, interpaddr(). This returns
the address of the Tcl interpreter object, as an integer.  Not very
useful for the Python programmer, but this can be called by another C
extension that needs to make calls into the Tcl/Tk C API and needs to
get the address of the Tcl interpreter object.  A simple cast of the
return value to (Tcl_Interp *) will do the trick now.
1998-04-29 16:17:01 +00:00
Guido van Rossum 2ea1c94b9a On the Mac a call to TkMacInitMenus is needed. Also, we pass
appropriate events to Sioux so the console window remains functional.
(Jack)
1998-04-28 16:12:43 +00:00
Guido van Rossum 2621637835 Add #ifdefs so Tcl_Finalize isn't referenced when it's not defined. 1998-04-20 18:47:52 +00:00
Guido van Rossum 730806d3d9 Make new gcc -Wall happy 1998-04-10 22:27:42 +00:00
Guido van Rossum 1c0d31565d Delete the 'exit' command from the Tcl interpreter -- it would allow
users to exit Python without the normal precautions.  (The can do this
using os._exit() anyway, but at least that's documented.)
1998-02-19 21:28:49 +00:00
Guido van Rossum 07e9fbf6b9 Register Tcl_Finalize as a Python exit handler. 1998-02-06 22:35:46 +00:00
Guido van Rossum a59406abdf Darn. When thread support is disabled, the BEGIN/END macros don't
save and restore the tstate, but explicitly calling
PyEval_SaveThread() does reset it!  While I think about how to fix
this for real, here's a fix that avoids getting a fatal error.
1997-10-10 17:39:19 +00:00
Guido van Rossum b0105444e2 Mac does support createfilehandler now (Jack) 1997-10-08 15:25:37 +00:00
Guido van Rossum 0e8457c4ec Fix EventHook (the trick to make widgets appear when using GNU
readline) to create and use a new thread state object -- otherwise it
would dump core!
1997-10-07 18:51:41 +00:00
Guido van Rossum 54e2091ba2 Add an optional hack for threads in Tkinter.
This one works!  However it requires using a modified version of
tclNotify.c (provided), which requires access to the Tcl source
to compile it.  In order to enable this hack, add the following
to the Setup line for _tkinter:
   tclNotify.c -DHAVE_PYTCL_WAITUNTILEVENT -I$(TCL)/generic
where TCL points to the source tree of Tcl 8.0.  Other versions
of Tcl are not supported.

The tclNotify.c file is copyrighted by Sun Microsystems; the
licensing terms are in the file license.terms.  According to this
file, no further permission to distribute this is required,
provided the file license.terms is included.  Hence, I am checking
that in, too.
1997-09-28 05:52:41 +00:00
Guido van Rossum 83551bfeda Export names for the types defined by this module: TkappType and TkttType. 1997-09-13 00:44:23 +00:00
Guido van Rossum 75626a3b93 Indent the #error so that a strict K&R cpp doesn't complain. 1997-09-08 02:04:00 +00:00
Guido van Rossum d7a7100c99 Remove redundant decl for PyOS_InputHook. 1997-08-21 17:26:04 +00:00
Guido van Rossum 5b02078e31 Alas, the thread support for Tk didn't work. Withdraw it, until I
figure out how to do this right.
1997-08-19 01:00:50 +00:00
Guido van Rossum bad3c013d2 DeleteTimerHandler was accidentally #ifdef'ed out for macintosh with
Tk 8.0; this was a mistake.
1997-08-18 15:28:52 +00:00
Guido van Rossum 0d2390c549 Merge Mac and Windows mods (which mostly affect the same problem -- no
usable createfilehandler).  Define HAVE_CREATEFILEHANDLER to test
later.  Also other Mac specific patches by Jack.
1997-08-14 19:57:07 +00:00
Guido van Rossum 44620646fd Renamed Py_input_hook to PyOS_InputHook.
Also cleaned out some CR's left by the VC++ editor.
1997-08-11 18:57:29 +00:00
Guido van Rossum 02c0467f67 Rather unsatisfactory temporary hack to get it to run
under WIN32 -- remove file handler interface, don't use Py_input_hook.
1997-08-07 00:12:22 +00:00
Guido van Rossum 0969d36275 New mechanism for GNU readline interface, via module 1997-08-05 21:27:50 +00:00
Guido van Rossum 35d43377b4 Functionality enhancement: allow other threads to use Tk commands
while one thread is blocked in mainloop().  Also, handle signals (not
just interrupts) as soon as they happen.

Cleanup: remove support for Tcl/Tk versions 7.4/4.0.  (I've confirmed
that it works for 7.5/4.1 and 7.6/4.2, as well as 8.0b2.)

Coding style change: instead of ``func (args)'', write ``func(args)''
everywhere.

Minor functionality change: use PyArg_ParseTuple everywhere.  This
should only affect the errors reported for bad argument lists; in
particular, deletefilehandler() is much clearer about what's going
on.

(XXX Still to do: Mac and Win ports to 8.0b2.)
1997-08-02 00:09:09 +00:00
Guido van Rossum 3e819a7aa8 Compatibility with Tcl/Tk 8.0b*. 1997-08-01 19:29:02 +00:00
Guido van Rossum 496f8f632b Removed remaining support for Tk versions below 4.0. 1997-07-19 19:57:42 +00:00
Guido van Rossum 290283bb39 Mac hack to make select() work again... 1997-06-02 22:16:43 +00:00
Guido van Rossum 8813b58ffa On popular demand, re-enable the readline event hook. 1997-05-07 17:42:41 +00:00
Guido van Rossum 8ec9e639ab Adapt Mac specific code to new universal headers (I think -- this is
Jack's code).
1997-04-29 15:49:04 +00:00
Guido van Rossum 45b83915f8 New form of PyFPE_END_PROTECT macro. 1997-03-14 04:32:50 +00:00
Guido van Rossum 52fa3a6909 Changes for Lee Busby's SIGFPE patch set.
Two new modules fpectl and fpetest.
Surround various and sundry f.p. operations with PyFPE_*_PROTECT macros.
1997-02-14 22:59:58 +00:00
Barry Warsaw fa701a88ab reformatted
memory leak in Tkapp_(Create|Delete)FileHandler plugged.

standard eyeballing
1997-01-16 00:15:11 +00:00
Guido van Rossum 4004e21484 Another fix for Split() -- don't refuse {"} but turn it into ".
This is needed because if a configure option has " as its value,
it will be rendered as {"}; after stripping one level of quoting it's
just ", on which splitlist will barf.
1996-12-17 01:25:36 +00:00
Guido van Rossum 0f868375ff Check errors returned by recursive call to Split(). 1996-12-17 01:02:18 +00:00
Guido van Rossum a376cc5cc8 Keep gcc -Wall happy. 1996-12-05 23:43:35 +00:00
Guido van Rossum d266eb460e New permission notice, includes CNRI. 1996-10-25 14:44:06 +00:00
Guido van Rossum 07886d0e01 Rationalize MS #ifdefs 1996-09-11 23:31:42 +00:00
Guido van Rossum c9970eecc2 Call __initialize(), not __sinit() on Mac dynamic loading entry. 1996-08-26 14:37:15 +00:00
Guido van Rossum ae92f01029 Hacks to support being a Windows DLL 1996-08-21 19:03:36 +00:00
Guido van Rossum bf0dc9fb14 Add #define MAC_TCL for Mac. 1996-08-20 20:49:56 +00:00
Guido van Rossum 7ffa7617c7 Changes for Windows NT -- this time it works, with Tcl4.1p1 (p1!!!) etc.
- Use ckalloc(), ckfree() everywhere.
- Default FREECAST to (char *).
- Added comment with Tcl/Tk version info.
1996-08-13 21:10:16 +00:00
Guido van Rossum 97867b2ce2 Add optional casts to free() calls. (Jack)
Set Tk variable argv0 to classname passed in to Tkapp_New.  (Fred)
1996-08-08 19:09:53 +00:00
Guido van Rossum 32aa1a72b2 getprogramname --> Py_GetProgramName 1996-07-31 19:51:15 +00:00
Guido van Rossum 845547d54b Added CWI copyright.
Updated some comments.
Fixed bug in Merge() called with NULL args.
Get rid of TkDefaultAppName() -- it is not used anywhere.
Pass error message on when Appinit fails.
Create/Delete FileHandler assume fd is a socket on Windows.
1996-06-26 18:26:04 +00:00
Guido van Rossum 6878436366 Patch from the net for 4.1 file handler changes. 1996-05-16 17:17:31 +00:00
Guido van Rossum 54ac1891fb Add __sinit() call according to Jack. 1996-05-16 17:14:03 +00:00
Guido van Rossum ec22c92e36 Changes needed to build with Tcl/Tk beta 2! 1996-02-25 04:50:29 +00:00
Guido van Rossum dfd428dd7e Changes to make it work with Tcl/Tk beta 1. 1996-02-25 04:46:40 +00:00
Guido van Rossum ad1f7eeb32 get rid of bogus name for init_tkinter() 1996-02-13 00:11:37 +00:00
Jack Jansen 40b546d40e Initialize GUSI on the mac. 1995-11-14 10:34:45 +00:00
Jack Jansen 34cc5c31e8 Fix to load needed resources on a mac 1995-10-31 16:15:12 +00:00
Jack Jansen ba0311ecff Renamed module tkinter to _tkinter, moved source to _tkinter.c 1995-10-23 14:34:14 +00:00
Guido van Rossum 64b24fb062 clear quitMainLoop when we fall through the main loop 1995-09-30 17:00:24 +00:00
Guido van Rossum 9722ad8883 Mac changes 1995-09-22 23:49:28 +00:00
Guido van Rossum e42fc2fd37 use getnewargs where it makes sense 1995-07-26 17:29:45 +00:00
Guido van Rossum b6fe7048e7 add casts to malloc() calls 1995-03-09 12:13:43 +00:00
Guido van Rossum a3c3f2c5b0 use PyCallable_Check; export TK_VERSION and TCL_VERSION strings;
some Tk 4.0 specific changes
1995-02-07 15:41:02 +00:00
Guido van Rossum cd938fc5a1 Made some more things static, and other cleanup for new naming scheme 1995-01-17 16:13:48 +00:00
Guido van Rossum a597dde3f1 cosmetic changes so these modules will work with the strict new naming scheme 1995-01-10 20:56:29 +00:00
Guido van Rossum 062cfb0c4e added interface to Tk_DoOneEvent (R Lindsay Todd) 1995-01-10 17:42:51 +00:00
Guido van Rossum 3bbc62e9c2 Another bulky set of minor changes.
Note addition of gethostbyaddr() and improved repr() for sockets,
renaming of md5.md5() to md5.new(), and fixing of leaks in threads.
1995-01-02 19:30:30 +00:00
Guido van Rossum f34cadda28 added timer and file callbacks and global mainloop and quit fns 1994-11-10 22:50:21 +00:00
Guido van Rossum 602099a756 * various modules: #include "Python.h" and remove most remporary
renaming hacks
1994-09-14 13:32:22 +00:00
Guido van Rossum e4485b064d Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
that the module-specific components are in the section for that
module.

cursesmodule.c: patched it so it actually works.

tkintermodule.c: call Py_AtExit instead of atexit().

signalmodule.c: converted to new naming style; added
BGN/END SAVE around pause() call.

socketmodule.c: added setblocking() after Tommy Burnette.
1994-09-07 14:32:49 +00:00
Guido van Rossum 9bb4fd6061 * tkintermodule.c (*FileHandler): generalize to arbitrary file ids
and objects that hav a fileno() method; fix bug in FileHandler
	(should call XDECREF instead of DECREF)
1994-08-09 14:15:19 +00:00
Guido van Rossum e2ca9bd156 * tkintermodule.c: OK, I've fixed the "tty" problem. You're right
no need for the stdin handler, a Tk_DoOneEvent(TK_DONT_WAIT) did
	the trick.  I've included a diff to tkintermodule.c.
1994-08-03 08:01:43 +00:00
Guido van Rossum d308e2ba3e * tkintermodule.c
(PyInit_tkinter): Only create stdin file handler when stdin
	 is a tty.
	 (Tkinter_Cleanup): New function.  This is an exit handler that
	 cleanup Tk.
1994-07-07 09:25:12 +00:00
Guido van Rossum 7687522309 * tkintermodule.c (Tkapp_New): Remove #ifdef WITH_APPINIT.
* tkintermodule.c (FileHandler): Make arg a tuple; bug found
	by <tnb2d@cs.virginia.edu>.  Call the Python file handler
	function with (file, mask) argument.  Fix a few of my refcnt bugs.
1994-06-27 07:59:42 +00:00