[Python-3000-checkins] r55795 - in python/branches/py3k-struni: Demo/imputil/knee.py Demo/pdist/cvslock.py Doc/Makefile Doc/Makefile.deps Doc/api/utilities.tex Doc/ext/extending.tex Doc/howto/functional.rst Doc/lib/lib.tex Doc/lib/libcodecs.tex Doc/lib/libfuncs.tex Doc/lib/libimp.tex Doc/lib/libitertools.tex Doc/lib/liblogging.tex Doc/lib/libmimewriter.tex Doc/lib/libmimify.tex Doc/lib/libpickle.tex Doc/lib/libposixfile.tex Doc/lib/libshlex.tex Doc/lib/libsubprocess.tex Doc/lib/libsys.tex Doc/lib/libtarfile.tex Doc/lib/libtypes.tex Doc/lib/libundoc.tex Doc/lib/libzipimport.tex Doc/mac/undoc.tex Doc/ref/ref3.tex Doc/tut/tut.tex Doc/whatsnew/whatsnew30.tex Grammar/Grammar Lib/MimeWriter.py Lib/SocketServer.py Lib/bsddb/test/test_thread.py Lib/ctypes/wintypes.py Lib/dis.py Lib/idlelib/StackViewer.py Lib/ihooks.py Lib/imputil.py Lib/logging/__init__.py Lib/logging/handlers.py Lib/mimify.py Lib/optparse.py Lib/os.py Lib/plat-mac/buildtools.py Lib/plat-mac/cfmfile.py Lib/posixfile.py Lib/pydoc.py Lib/sha.py Lib/shlex.py Lib/subprocess.py Lib/tarfile.py Lib/test/dis_module.py Lib/test/infinite_reload.py Lib/test/output/test_pkg Lib/test/regrtest.py Lib/test/test_MimeWriter.py Lib/test/test___all__.py Lib/test/test_builtin.py Lib/test/test_dis.py Lib/test/test_doctest.py Lib/test/test_hmac.py Lib/test/test_import.py Lib/test/test_importhooks.py Lib/test/test_inspect.py Lib/test/test_optparse.py Lib/test/test_os.py Lib/test/test_pkg.py Lib/test/test_subprocess.py Lib/test/test_sundry.py Lib/test/test_syntax.py Lib/test/test_sys.py Lib/test/test_tarfile.py Lib/test/test_tokenize.py Lib/test/test_traceback.py Lib/test/test_urllib.py Lib/test/test_xmlrpc.py Lib/test/testtar.tar Lib/textwrap.py Lib/unittest.py Lib/urllib.py Lib/uuid.py Lib/wsgiref/handlers.py Lib/xmlrpclib.py Misc/BeOS-setup.py Misc/NEWS Misc/build.sh Misc/cheatsheet Modules/Setup.dist Modules/_ctypes/callbacks.c Modules/md5.c Modules/md5.h Modules/md5module.c Modules/shamodule.c Modules/timing.h Modules/timingmodule.c Objects/abstract.c PC/WinMain.c PC/_winreg.c PC/dl_nt.c PC/os2emx/Makefile PC/os2emx/config.c PC/os2emx/python25.def PC/os2vacpp/makefile PC/os2vacpp/makefile.omk PC/pyconfig.h PC/winsound.c PCbuild/pythoncore.vcproj PCbuild8/pythoncore/pythoncore.vcproj Python/ast.c Python/bltinmodule.c Python/ceval.c Python/dynload_win.c Python/graminit.c Python/import.c Python/sysmodule.c README setup.py

guido.van.rossum python-3000-checkins at python.org
Thu Jun 7 01:53:47 CEST 2007


Author: guido.van.rossum
Date: Thu Jun  7 01:52:48 2007
New Revision: 55795

Added:
   python/branches/py3k-struni/Doc/whatsnew/whatsnew30.tex
      - copied unchanged from r55794, python/branches/p3yk/Doc/whatsnew/whatsnew30.tex
   python/branches/py3k-struni/Lib/test/dis_module.py
      - copied unchanged from r55794, python/branches/p3yk/Lib/test/dis_module.py
Removed:
   python/branches/py3k-struni/Doc/lib/libmimewriter.tex
   python/branches/py3k-struni/Doc/lib/libmimify.tex
   python/branches/py3k-struni/Doc/lib/libposixfile.tex
   python/branches/py3k-struni/Lib/MimeWriter.py
   python/branches/py3k-struni/Lib/mimify.py
   python/branches/py3k-struni/Lib/plat-mac/cfmfile.py
   python/branches/py3k-struni/Lib/posixfile.py
   python/branches/py3k-struni/Lib/sha.py
   python/branches/py3k-struni/Lib/test/infinite_reload.py
   python/branches/py3k-struni/Lib/test/test_MimeWriter.py
   python/branches/py3k-struni/Modules/md5.c
   python/branches/py3k-struni/Modules/md5.h
   python/branches/py3k-struni/Modules/md5module.c
   python/branches/py3k-struni/Modules/shamodule.c
   python/branches/py3k-struni/Modules/timing.h
   python/branches/py3k-struni/Modules/timingmodule.c
Modified:
   python/branches/py3k-struni/   (props changed)
   python/branches/py3k-struni/Demo/imputil/knee.py
   python/branches/py3k-struni/Demo/pdist/cvslock.py
   python/branches/py3k-struni/Doc/Makefile
   python/branches/py3k-struni/Doc/Makefile.deps
   python/branches/py3k-struni/Doc/api/utilities.tex
   python/branches/py3k-struni/Doc/ext/extending.tex
   python/branches/py3k-struni/Doc/howto/functional.rst
   python/branches/py3k-struni/Doc/lib/lib.tex
   python/branches/py3k-struni/Doc/lib/libcodecs.tex
   python/branches/py3k-struni/Doc/lib/libfuncs.tex
   python/branches/py3k-struni/Doc/lib/libimp.tex
   python/branches/py3k-struni/Doc/lib/libitertools.tex
   python/branches/py3k-struni/Doc/lib/liblogging.tex
   python/branches/py3k-struni/Doc/lib/libpickle.tex
   python/branches/py3k-struni/Doc/lib/libshlex.tex
   python/branches/py3k-struni/Doc/lib/libsubprocess.tex
   python/branches/py3k-struni/Doc/lib/libsys.tex
   python/branches/py3k-struni/Doc/lib/libtarfile.tex
   python/branches/py3k-struni/Doc/lib/libtypes.tex
   python/branches/py3k-struni/Doc/lib/libundoc.tex
   python/branches/py3k-struni/Doc/lib/libzipimport.tex
   python/branches/py3k-struni/Doc/mac/undoc.tex
   python/branches/py3k-struni/Doc/ref/ref3.tex
   python/branches/py3k-struni/Doc/tut/tut.tex
   python/branches/py3k-struni/Grammar/Grammar
   python/branches/py3k-struni/Lib/SocketServer.py
   python/branches/py3k-struni/Lib/bsddb/test/test_thread.py
   python/branches/py3k-struni/Lib/ctypes/wintypes.py
   python/branches/py3k-struni/Lib/dis.py
   python/branches/py3k-struni/Lib/idlelib/StackViewer.py
   python/branches/py3k-struni/Lib/ihooks.py
   python/branches/py3k-struni/Lib/imputil.py
   python/branches/py3k-struni/Lib/logging/__init__.py
   python/branches/py3k-struni/Lib/logging/handlers.py
   python/branches/py3k-struni/Lib/optparse.py
   python/branches/py3k-struni/Lib/os.py
   python/branches/py3k-struni/Lib/plat-mac/buildtools.py
   python/branches/py3k-struni/Lib/pydoc.py
   python/branches/py3k-struni/Lib/shlex.py
   python/branches/py3k-struni/Lib/subprocess.py
   python/branches/py3k-struni/Lib/tarfile.py
   python/branches/py3k-struni/Lib/test/output/test_pkg
   python/branches/py3k-struni/Lib/test/regrtest.py
   python/branches/py3k-struni/Lib/test/test___all__.py
   python/branches/py3k-struni/Lib/test/test_builtin.py
   python/branches/py3k-struni/Lib/test/test_dis.py
   python/branches/py3k-struni/Lib/test/test_doctest.py
   python/branches/py3k-struni/Lib/test/test_hmac.py
   python/branches/py3k-struni/Lib/test/test_import.py
   python/branches/py3k-struni/Lib/test/test_importhooks.py
   python/branches/py3k-struni/Lib/test/test_inspect.py
   python/branches/py3k-struni/Lib/test/test_optparse.py
   python/branches/py3k-struni/Lib/test/test_os.py
   python/branches/py3k-struni/Lib/test/test_pkg.py
   python/branches/py3k-struni/Lib/test/test_subprocess.py
   python/branches/py3k-struni/Lib/test/test_sundry.py
   python/branches/py3k-struni/Lib/test/test_syntax.py
   python/branches/py3k-struni/Lib/test/test_sys.py
   python/branches/py3k-struni/Lib/test/test_tarfile.py
   python/branches/py3k-struni/Lib/test/test_tokenize.py
   python/branches/py3k-struni/Lib/test/test_traceback.py
   python/branches/py3k-struni/Lib/test/test_urllib.py
   python/branches/py3k-struni/Lib/test/test_xmlrpc.py
   python/branches/py3k-struni/Lib/test/testtar.tar
   python/branches/py3k-struni/Lib/textwrap.py
   python/branches/py3k-struni/Lib/unittest.py
   python/branches/py3k-struni/Lib/urllib.py
   python/branches/py3k-struni/Lib/uuid.py
   python/branches/py3k-struni/Lib/wsgiref/handlers.py
   python/branches/py3k-struni/Lib/xmlrpclib.py
   python/branches/py3k-struni/Misc/BeOS-setup.py
   python/branches/py3k-struni/Misc/NEWS
   python/branches/py3k-struni/Misc/build.sh
   python/branches/py3k-struni/Misc/cheatsheet
   python/branches/py3k-struni/Modules/Setup.dist
   python/branches/py3k-struni/Modules/_ctypes/callbacks.c
   python/branches/py3k-struni/Objects/abstract.c
   python/branches/py3k-struni/PC/WinMain.c
   python/branches/py3k-struni/PC/_winreg.c
   python/branches/py3k-struni/PC/dl_nt.c
   python/branches/py3k-struni/PC/os2emx/Makefile
   python/branches/py3k-struni/PC/os2emx/config.c
   python/branches/py3k-struni/PC/os2emx/python25.def
   python/branches/py3k-struni/PC/os2vacpp/makefile
   python/branches/py3k-struni/PC/os2vacpp/makefile.omk
   python/branches/py3k-struni/PC/pyconfig.h
   python/branches/py3k-struni/PC/winsound.c
   python/branches/py3k-struni/PCbuild/pythoncore.vcproj
   python/branches/py3k-struni/PCbuild8/pythoncore/pythoncore.vcproj
   python/branches/py3k-struni/Python/ast.c
   python/branches/py3k-struni/Python/bltinmodule.c
   python/branches/py3k-struni/Python/ceval.c
   python/branches/py3k-struni/Python/dynload_win.c
   python/branches/py3k-struni/Python/graminit.c
   python/branches/py3k-struni/Python/import.c
   python/branches/py3k-struni/Python/sysmodule.c
   python/branches/py3k-struni/README
   python/branches/py3k-struni/setup.py
Log:
Merged revisions 55631-55794 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/p3yk

................
  r55636 | neal.norwitz | 2007-05-29 00:06:39 -0700 (Tue, 29 May 2007) | 149 lines
  
  Merged revisions 55506-55635 via svnmerge from 
  svn+ssh://pythondev@svn.python.org/python/trunk
  
  ........
    r55507 | georg.brandl | 2007-05-22 07:28:17 -0700 (Tue, 22 May 2007) | 2 lines
    
    Remove the "panel" module doc file which has been ignored since 1994.
  ........
    r55522 | mark.hammond | 2007-05-22 19:04:28 -0700 (Tue, 22 May 2007) | 4 lines
    
    Remove definition of PY_UNICODE_TYPE from pyconfig.h, allowing the
    definition in unicodeobject.h to be used, giving us the desired
    wchar_t in place of 'unsigned short'.  As discussed on python-dev.
  ........
    r55525 | neal.norwitz | 2007-05-22 23:35:32 -0700 (Tue, 22 May 2007) | 6 lines
    
    Add -3 option to the interpreter to warn about features that are
    deprecated and will be changed/removed in Python 3.0.
    
    This patch is mostly from Anthony.  I tweaked some format and added
    a little doc.
  ........
    r55527 | neal.norwitz | 2007-05-22 23:57:35 -0700 (Tue, 22 May 2007) | 1 line
    
    Whitespace cleanup
  ........
    r55528 | neal.norwitz | 2007-05-22 23:58:36 -0700 (Tue, 22 May 2007) | 1 line
    
    Add a bunch more deprecation warnings for builtins that are going away in 3.0
  ........
    r55549 | georg.brandl | 2007-05-24 09:49:29 -0700 (Thu, 24 May 2007) | 2 lines
    
    shlex.split() now has an optional "posix" parameter.
  ........
    r55550 | georg.brandl | 2007-05-24 10:33:33 -0700 (Thu, 24 May 2007) | 2 lines
    
    Fix parameter passing.
  ........
    r55555 | facundo.batista | 2007-05-24 10:50:54 -0700 (Thu, 24 May 2007) | 6 lines
    
    
    Added an optional timeout parameter to urllib.ftpwrapper, with tests
    (for this and a basic one, because there weren't any). Changed also
    NEWS, but didn't find documentation for this function, assumed it
    wasn't public...
  ........
    r55563 | facundo.batista | 2007-05-24 13:01:59 -0700 (Thu, 24 May 2007) | 4 lines
    
    
    Removed the .recv() in the test, is not necessary, and was
    causing problems that didn't have anything to do with was
    actually being tested...
  ........
    r55564 | facundo.batista | 2007-05-24 13:51:19 -0700 (Thu, 24 May 2007) | 5 lines
    
    
    Let's see if reading exactly what is written allow this live
    test to pass (now I know why there were so few tests in ftp, 
    http, etc, :( ).
  ........
    r55567 | facundo.batista | 2007-05-24 20:10:28 -0700 (Thu, 24 May 2007) | 4 lines
    
    
    Trying to make the tests work in Windows and Solaris, everywhere 
    else just works
  ........
    r55568 | facundo.batista | 2007-05-24 20:47:19 -0700 (Thu, 24 May 2007) | 4 lines
    
    
    Fixing stupid error, and introducing a sleep, to see if the 
    other thread is awakened and finish sending data.
  ........
    r55569 | facundo.batista | 2007-05-24 21:20:22 -0700 (Thu, 24 May 2007) | 4 lines
    
    
    Commenting out the tests until find out who can test them in 
    one of the problematic enviroments.
  ........
    r55570 | neal.norwitz | 2007-05-24 22:13:40 -0700 (Thu, 24 May 2007) | 2 lines
    
    Get test passing again by commenting out the reference to the test class.
  ........
    r55575 | vinay.sajip | 2007-05-25 00:05:59 -0700 (Fri, 25 May 2007) | 1 line
    
    Updated docstring for SysLogHandler (#1720726).
  ........
    r55576 | vinay.sajip | 2007-05-25 00:06:55 -0700 (Fri, 25 May 2007) | 1 line
    
    Updated documentation for SysLogHandler (#1720726).
  ........
    r55592 | brett.cannon | 2007-05-25 13:17:15 -0700 (Fri, 25 May 2007) | 3 lines
    
    Remove direct call's to file's constructor and replace them with calls to
    open() as ths is considered best practice.
  ........
    r55601 | kristjan.jonsson | 2007-05-26 12:19:50 -0700 (Sat, 26 May 2007) | 1 line
    
    Remove the rgbimgmodule from PCBuild8
  ........
    r55602 | kristjan.jonsson | 2007-05-26 12:31:39 -0700 (Sat, 26 May 2007) | 1 line
    
    Include <windows.h> after python.h, so that WINNT is properly set before windows.h is included.  Fixes warnings in PC builds.
  ........
    r55603 | walter.doerwald | 2007-05-26 14:04:13 -0700 (Sat, 26 May 2007) | 2 lines
    
    Fix typo.
  ........
    r55604 | peter.astrand | 2007-05-26 15:18:20 -0700 (Sat, 26 May 2007) | 1 line
    
    Applied patch 1669481, slightly modified: Support close_fds on Win32
  ........
    r55606 | neal.norwitz | 2007-05-26 21:08:54 -0700 (Sat, 26 May 2007) | 2 lines
    
    Add the new function object attribute names from py3k.
  ........
    r55617 | lars.gustaebel | 2007-05-27 12:49:30 -0700 (Sun, 27 May 2007) | 20 lines
    
    Added errors argument to TarFile class that allows the user to
    specify an error handling scheme for character conversion. Additional
    scheme "utf-8" in read mode. Unicode input filenames are now
    supported by design. The values of the pax_headers dictionary are now
    limited to unicode objects.
    
    Fixed: The prefix field is no longer used in PAX_FORMAT (in
    conformance with POSIX).
    Fixed: In read mode use a possible pax header size field.
    Fixed: Strip trailing slashes from pax header name values.
    Fixed: Give values in user-specified pax_headers precedence when
    writing.
    
    Added unicode tests. Added pax/regtype4 member to testtar.tar all
    possible number fields in a pax header.
    
    Added two chapters to the documentation about the different formats
    tarfile.py supports and how unicode issues are handled.
  ........
    r55618 | raymond.hettinger | 2007-05-27 22:23:22 -0700 (Sun, 27 May 2007) | 1 line
    
    Explain when groupby() issues a new group.
  ........
    r55634 | martin.v.loewis | 2007-05-28 21:01:29 -0700 (Mon, 28 May 2007) | 2 lines
    
    Test pre-commit hook for a link to a .py file.
  ........
    r55635 | martin.v.loewis | 2007-05-28 21:02:03 -0700 (Mon, 28 May 2007) | 2 lines
    
    Revert 55634.
  ........
................
  r55639 | neal.norwitz | 2007-05-29 00:58:11 -0700 (Tue, 29 May 2007) | 1 line
  
  Remove sys.exc_{type,exc_value,exc_traceback}
................
  r55641 | neal.norwitz | 2007-05-29 01:03:50 -0700 (Tue, 29 May 2007) | 1 line
  
  Missed one sys.exc_type.  I wonder why exc_{value,traceback} were already gone
................
  r55642 | neal.norwitz | 2007-05-29 01:08:33 -0700 (Tue, 29 May 2007) | 1 line
  
  Missed more doc for sys.exc_* attrs.
................
  r55643 | neal.norwitz | 2007-05-29 01:18:19 -0700 (Tue, 29 May 2007) | 1 line
  
  Remove sys.exc_clear()
................
  r55665 | guido.van.rossum | 2007-05-29 19:45:43 -0700 (Tue, 29 May 2007) | 4 lines
  
  Make None, True, False keywords.
  We can now also delete all the other places that explicitly forbid
  assignment to None, but I'm not going to bother right now.
................
  r55666 | guido.van.rossum | 2007-05-29 20:01:51 -0700 (Tue, 29 May 2007) | 3 lines
  
  Found another place that needs check for forbidden names.
  Fixed test_syntax.py accordingly (it helped me find that one).
................
  r55668 | guido.van.rossum | 2007-05-29 20:41:48 -0700 (Tue, 29 May 2007) | 2 lines
  
  Mark None, True, False as keywords.
................
  r55673 | neal.norwitz | 2007-05-29 23:28:25 -0700 (Tue, 29 May 2007) | 3 lines
  
  Get the dis module working on modules again after changing dicts
  to not return lists and also new-style classes.  Add a test.
................
  r55674 | neal.norwitz | 2007-05-29 23:35:45 -0700 (Tue, 29 May 2007) | 1 line
  
  Umm, it helps to add the module that the test uses
................
  r55675 | neal.norwitz | 2007-05-29 23:53:05 -0700 (Tue, 29 May 2007) | 4 lines
  
  Try to fix up all the other places that were assigning to True/False.
  There's at least one more problem in test.test_xmlrpc.  I have other
  changes in that file and that should be fixed soon (I hope).
................
  r55679 | neal.norwitz | 2007-05-30 00:31:55 -0700 (Wed, 30 May 2007) | 1 line
  
  Fix up another place that was assigning to True/False.
................
  r55688 | brett.cannon | 2007-05-30 14:19:47 -0700 (Wed, 30 May 2007) | 2 lines
  
  Ditch MimeWriter.
................
  r55692 | brett.cannon | 2007-05-30 14:52:00 -0700 (Wed, 30 May 2007) | 2 lines
  
  Remove the mimify module.
................
  r55707 | guido.van.rossum | 2007-05-31 05:08:45 -0700 (Thu, 31 May 2007) | 2 lines
  
  Backport the addition of show_code() to dis.py -- it's too handy.
................
  r55708 | guido.van.rossum | 2007-05-31 06:22:57 -0700 (Thu, 31 May 2007) | 7 lines
  
  Fix a fairly long-standing bug in the check for assignment to None (and other
  keywords, these days).  In 2.5, you could write foo(None=1) without getting
  a SyntaxError (although foo()'s definition would have to use **kwds to avoid
  getting a runtime error complaining about an unknown keyword of course).
  
  This ought to be backported to 2.5.2 or at least 2.6.
................
  r55724 | brett.cannon | 2007-05-31 19:32:41 -0700 (Thu, 31 May 2007) | 2 lines
  
  Remove the cfmfile.
................
  r55727 | neal.norwitz | 2007-05-31 22:19:44 -0700 (Thu, 31 May 2007) | 1 line
  
  Remove reload() builtin.
................
  r55729 | neal.norwitz | 2007-05-31 22:51:30 -0700 (Thu, 31 May 2007) | 59 lines
  
  Merged revisions 55636-55728 via svnmerge from 
  svn+ssh://pythondev@svn.python.org/python/trunk
  
  ........
    r55637 | georg.brandl | 2007-05-29 00:16:47 -0700 (Tue, 29 May 2007) | 2 lines
    
    Fix rst markup.
  ........
    r55638 | neal.norwitz | 2007-05-29 00:51:39 -0700 (Tue, 29 May 2007) | 1 line
    
    Fix typo in doc
  ........
    r55671 | neal.norwitz | 2007-05-29 21:53:41 -0700 (Tue, 29 May 2007) | 1 line
    
    Fix indentation (whitespace only).
  ........
    r55676 | thomas.heller | 2007-05-29 23:58:30 -0700 (Tue, 29 May 2007) | 1 line
    
    Fix compiler warnings.
  ........
    r55677 | thomas.heller | 2007-05-30 00:01:25 -0700 (Wed, 30 May 2007) | 2 lines
    
    Correct the name of a field in the WIN32_FIND_DATAA and WIN32_FIND_DATAW structures.
    Closes bug #1726026.
  ........
    r55686 | brett.cannon | 2007-05-30 13:46:26 -0700 (Wed, 30 May 2007) | 2 lines
    
    Have MimeWriter raise a DeprecationWarning as per PEP 4 and its documentation.
  ........
    r55690 | brett.cannon | 2007-05-30 14:48:58 -0700 (Wed, 30 May 2007) | 3 lines
    
    Have mimify raise a DeprecationWarning.  The docs and PEP 4 have listed the
    module as deprecated for a while.
  ........
    r55696 | brett.cannon | 2007-05-30 15:24:28 -0700 (Wed, 30 May 2007) | 2 lines
    
    Have md5 raise a DeprecationWarning as per PEP 4.
  ........
    r55705 | neal.norwitz | 2007-05-30 21:14:22 -0700 (Wed, 30 May 2007) | 1 line
    
    Add some spaces in the example code.
  ........
    r55716 | brett.cannon | 2007-05-31 12:20:00 -0700 (Thu, 31 May 2007) | 2 lines
    
    Have the sha module raise a DeprecationWarning as specified in PEP 4.
  ........
    r55719 | brett.cannon | 2007-05-31 12:40:42 -0700 (Thu, 31 May 2007) | 2 lines
    
    Cause buildtools to raise a DeprecationWarning.
  ........
    r55721 | brett.cannon | 2007-05-31 13:01:11 -0700 (Thu, 31 May 2007) | 2 lines
    
    Have cfmfile raise a DeprecationWarning as per PEP 4.
  ........
    r55726 | neal.norwitz | 2007-05-31 21:56:47 -0700 (Thu, 31 May 2007) | 1 line
    
    Mail if there is an installation failure.
  ........
................
  r55730 | neal.norwitz | 2007-05-31 23:22:07 -0700 (Thu, 31 May 2007) | 2 lines
  
  Remove the code that was missed in rev 55303.
................
  r55738 | neal.norwitz | 2007-06-01 19:10:43 -0700 (Fri, 01 Jun 2007) | 1 line
  
  Fix doc breakage
................
  r55741 | neal.norwitz | 2007-06-02 00:41:58 -0700 (Sat, 02 Jun 2007) | 1 line
  
  Remove timing module (plus some remnants of other modules).
................
  r55742 | neal.norwitz | 2007-06-02 00:51:44 -0700 (Sat, 02 Jun 2007) | 1 line
  
  Remove posixfile module (plus some remnants of other modules).
................
  r55744 | neal.norwitz | 2007-06-02 10:18:56 -0700 (Sat, 02 Jun 2007) | 1 line
  
  Fix doc breakage.
................
  r55745 | neal.norwitz | 2007-06-02 11:32:16 -0700 (Sat, 02 Jun 2007) | 1 line
  
  Make a whatsnew 3.0 template.
................
  r55754 | neal.norwitz | 2007-06-03 23:24:18 -0700 (Sun, 03 Jun 2007) | 1 line
  
  SF #1730441, os._execvpe raises UnboundLocal due to new try/except semantics
................
  r55755 | neal.norwitz | 2007-06-03 23:26:00 -0700 (Sun, 03 Jun 2007) | 1 line
  
  Get rid of extra whitespace
................
  r55794 | guido.van.rossum | 2007-06-06 15:29:22 -0700 (Wed, 06 Jun 2007) | 3 lines
  
  Make this compile in GCC 2.96, which does not allow interspersing
  declarations and code.
................


Modified: python/branches/py3k-struni/Demo/imputil/knee.py
==============================================================================
--- python/branches/py3k-struni/Demo/imputil/knee.py	(original)
+++ python/branches/py3k-struni/Demo/imputil/knee.py	Thu Jun  7 01:52:48 2007
@@ -106,8 +106,7 @@
     return m
 
 
-# Replacement for reload()
-def reload_hook(module):
+def reload(module):
     name = module.__name__
     if '.' not in name:
         return import_module(name, name, None)
@@ -119,8 +118,6 @@
 
 # Save the original hooks
 original_import = __builtin__.__import__
-original_reload = __builtin__.reload
 
 # Now install our hooks
 __builtin__.__import__ = import_hook
-__builtin__.reload = reload_hook

Modified: python/branches/py3k-struni/Demo/pdist/cvslock.py
==============================================================================
--- python/branches/py3k-struni/Demo/pdist/cvslock.py	(original)
+++ python/branches/py3k-struni/Demo/pdist/cvslock.py	Thu Jun  7 01:52:48 2007
@@ -262,7 +262,6 @@
         rl.unlock()
     finally:
         print [1]
-        sys.exc_traceback = None
         print [2]
         if rl:
             rl.unlock()

Modified: python/branches/py3k-struni/Doc/Makefile
==============================================================================
--- python/branches/py3k-struni/Doc/Makefile	(original)
+++ python/branches/py3k-struni/Doc/Makefile	Thu Jun  7 01:52:48 2007
@@ -122,7 +122,7 @@
 
 # The end of this should reflect the major/minor version numbers of
 # the release:
-WHATSNEW=whatsnew26
+WHATSNEW=whatsnew30
 
 # what's what
 MANDVIFILES=	paper-$(PAPER)/api.dvi paper-$(PAPER)/ext.dvi \

Modified: python/branches/py3k-struni/Doc/Makefile.deps
==============================================================================
--- python/branches/py3k-struni/Doc/Makefile.deps	(original)
+++ python/branches/py3k-struni/Doc/Makefile.deps	Thu Jun  7 01:52:48 2007
@@ -171,7 +171,6 @@
 	lib/libgdbm.tex \
 	lib/libtermios.tex \
 	lib/libfcntl.tex \
-	lib/libposixfile.tex \
 	lib/libsyslog.tex \
 	lib/liblogging.tex \
 	lib/libpdb.tex \
@@ -192,7 +191,6 @@
 	lib/libsgmllib.tex \
 	lib/librfc822.tex \
 	lib/libmimetools.tex \
-	lib/libmimewriter.tex \
 	lib/libbinascii.tex \
 	lib/libmm.tex \
 	lib/libaudioop.tex \
@@ -235,7 +233,6 @@
 	lib/libzipfile.tex \
 	lib/libpprint.tex \
 	lib/libcode.tex \
-	lib/libmimify.tex \
 	lib/libre.tex \
 	lib/libuserdict.tex \
 	lib/libdis.tex \

Modified: python/branches/py3k-struni/Doc/api/utilities.tex
==============================================================================
--- python/branches/py3k-struni/Doc/api/utilities.tex	(original)
+++ python/branches/py3k-struni/Doc/api/utilities.tex	Thu Jun  7 01:52:48 2007
@@ -140,10 +140,7 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyImport_ReloadModule}{PyObject *m}
-  Reload a module.  This is best described by referring to the
-  built-in Python function \function{reload()}\bifuncindex{reload}, as
-  the standard \function{reload()} function calls this function
-  directly.  Return a new reference to the reloaded module, or \NULL{}
+  Reload a module.  Return a new reference to the reloaded module, or \NULL{}
   with an exception set on failure (the module still exists in this
   case).
 \end{cfuncdesc}

Modified: python/branches/py3k-struni/Doc/ext/extending.tex
==============================================================================
--- python/branches/py3k-struni/Doc/ext/extending.tex	(original)
+++ python/branches/py3k-struni/Doc/ext/extending.tex	Thu Jun  7 01:52:48 2007
@@ -399,12 +399,7 @@
 following a \cfunction{fork()} without an intervening
 \cfunction{exec()}) can create problems for some extension modules.
 Extension module authors should exercise caution when initializing
-internal data structures.
-Note also that the \function{reload()} function can be used with
-extension modules, and will call the module initialization function
-(\cfunction{initspam()} in the example), but will not load the module
-again if it was loaded from a dynamically loadable object file
-(\file{.so} on \UNIX, \file{.dll} on Windows).}
+internal data structures.}
 
 A more substantial example module is included in the Python source
 distribution as \file{Modules/xxmodule.c}.  This file may be used as a 

Modified: python/branches/py3k-struni/Doc/howto/functional.rst
==============================================================================
--- python/branches/py3k-struni/Doc/howto/functional.rst	(original)
+++ python/branches/py3k-struni/Doc/howto/functional.rst	Thu Jun  7 01:52:48 2007
@@ -980,7 +980,7 @@
 that's a slice of the iterator.  With a single ``stop`` argument, 
 it will return the first ``stop``
 elements.  If you supply a starting index, you'll get ``stop-start``
-elements, and if you supply a value for ``step`, elements will be
+elements, and if you supply a value for ``step``, elements will be
 skipped accordingly.  Unlike Python's string and list slicing, you
 can't use negative values for ``start``, ``stop``, or ``step``.
 

Modified: python/branches/py3k-struni/Doc/lib/lib.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/lib.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/lib.tex	Thu Jun  7 01:52:48 2007
@@ -146,8 +146,6 @@
 \input{libmhlib}
 \input{libmimetools}
 \input{libmimetypes}
-\input{libmimewriter}
-\input{libmimify}
 \input{libmultifile}
 \input{librfc822}
 
@@ -265,7 +263,6 @@
 \input{libpty}
 \input{libfcntl}
 \input{libpipes}
-\input{libposixfile}
 \input{libresource}
 \input{libnis}
 \input{libsyslog}

Modified: python/branches/py3k-struni/Doc/lib/libcodecs.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libcodecs.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libcodecs.tex	Thu Jun  7 01:52:48 2007
@@ -237,7 +237,7 @@
 \begin{funcdesc}{iterdecode}{iterable, encoding\optional{, errors}}
 Uses an incremental decoder to iteratively decode the input provided by
 \var{iterable}. This function is a generator. \var{errors} (as well as
-any other keyword argument) is passed through to the incremental encoder.
+any other keyword argument) is passed through to the incremental decoder.
 \versionadded{2.5}
 \end{funcdesc}
 

Modified: python/branches/py3k-struni/Doc/lib/libfuncs.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libfuncs.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libfuncs.tex	Thu Jun  7 01:52:48 2007
@@ -890,82 +890,6 @@
 \end{verbatim}
 \end{funcdesc}
 
-\begin{funcdesc}{reload}{module}
-  Reload a previously imported \var{module}.  The
-  argument must be a module object, so it must have been successfully
-  imported before.  This is useful if you have edited the module
-  source file using an external editor and want to try out the new
-  version without leaving the Python interpreter.  The return value is
-  the module object (the same as the \var{module} argument).
-
-  When \code{reload(module)} is executed:
-
-\begin{itemize}
-
-    \item Python modules' code is recompiled and the module-level code
-    reexecuted, defining a new set of objects which are bound to names in
-    the module's dictionary.  The \code{init} function of extension
-    modules is not called a second time.
-
-    \item As with all other objects in Python the old objects are only
-    reclaimed after their reference counts drop to zero.
-
-    \item The names in the module namespace are updated to point to
-    any new or changed objects.
-
-    \item Other references to the old objects (such as names external
-    to the module) are not rebound to refer to the new objects and
-    must be updated in each namespace where they occur if that is
-    desired.
-
-\end{itemize}
-
-  There are a number of other caveats:
-
-  If a module is syntactically correct but its initialization fails,
-  the first \keyword{import} statement for it does not bind its name
-  locally, but does store a (partially initialized) module object in
-  \code{sys.modules}.  To reload the module you must first
-  \keyword{import} it again (this will bind the name to the partially
-  initialized module object) before you can \function{reload()} it.
-
-  When a module is reloaded, its dictionary (containing the module's
-  global variables) is retained.  Redefinitions of names will override
-  the old definitions, so this is generally not a problem.  If the new
-  version of a module does not define a name that was defined by the
-  old version, the old definition remains.  This feature can be used
-  to the module's advantage if it maintains a global table or cache of
-  objects --- with a \keyword{try} statement it can test for the
-  table's presence and skip its initialization if desired:
-
-\begin{verbatim}
-try:
-    cache
-except NameError:
-    cache = {}
-\end{verbatim}
-
-
-  It is legal though generally not very useful to reload built-in or
-  dynamically loaded modules, except for \refmodule{sys},
-  \refmodule[main]{__main__} and \refmodule[builtin]{__builtin__}.  In
-  many cases, however, extension modules are not designed to be
-  initialized more than once, and may fail in arbitrary ways when
-  reloaded.
-
-  If a module imports objects from another module using \keyword{from}
-  \ldots{} \keyword{import} \ldots{}, calling \function{reload()} for
-  the other module does not redefine the objects imported from it ---
-  one way around this is to re-execute the \keyword{from} statement,
-  another is to use \keyword{import} and qualified names
-  (\var{module}.\var{name}) instead.
-
-  If a module instantiates instances of a class, reloading the module
-  that defines the class does not affect the method definitions of the
-  instances --- they continue to use the old class definition.  The
-  same is true for derived classes.
-\end{funcdesc}
-
 \begin{funcdesc}{repr}{object}
   Return a string containing a printable representation of an object.
   This is the same value yielded by conversions (reverse quotes).

Modified: python/branches/py3k-struni/Doc/lib/libimp.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libimp.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libimp.tex	Thu Jun  7 01:52:48 2007
@@ -69,8 +69,7 @@
 Load a module that was previously found by \function{find_module()} (or by
 an otherwise conducted search yielding compatible results).  This
 function does more than importing the module: if the module was
-already imported, it is equivalent to a
-\function{reload()}\bifuncindex{reload}!  The \var{name} argument
+already imported, it will reload the module! The \var{name} argument
 indicates the full module name (including the package name, if this is
 a submodule of a package).  The \var{file} argument is an open file,
 and \var{filename} is the corresponding file name; these can be
@@ -286,7 +285,7 @@
 \end{verbatim}
 
 A more complete example that implements hierarchical module names and
-includes a \function{reload()}\bifuncindex{reload} function can be
+includes a \function{reload()} function can be
 found in the module \module{knee}\refmodindex{knee}.  The
 \module{knee} module can be found in \file{Demo/imputil/} in the
 Python source distribution.

Modified: python/branches/py3k-struni/Doc/lib/libitertools.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libitertools.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libitertools.tex	Thu Jun  7 01:52:48 2007
@@ -138,6 +138,13 @@
   identity function and returns  the element unchanged.  Generally, the
   iterable needs to already be sorted on the same key function.
 
+  The operation of \function{groupby()} is similar to the \code{uniq} filter
+  in \UNIX{}.  It generates a break or new group every time the value
+  of the key function changes (which is why it is usually necessary
+  to have sorted the data using the same key function).  That behavior
+  differs from SQL's GROUP BY which aggregates common elements regardless
+  of their input order.
+
   The returned group is itself an iterator that shares the underlying
   iterable with \function{groupby()}.  Because the source is shared, when
   the \function{groupby} object is advanced, the previous group is no
@@ -147,6 +154,7 @@
   \begin{verbatim}
     groups = []
     uniquekeys = []
+    data = sorted(data, key=keyfunc)
     for k, g in groupby(data, keyfunc):
         groups.append(list(g))      # Store group iterator as a list
         uniquekeys.append(k)

Modified: python/branches/py3k-struni/Doc/lib/liblogging.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/liblogging.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/liblogging.tex	Thu Jun  7 01:52:48 2007
@@ -1208,8 +1208,11 @@
 communicate with a remote \UNIX{} machine whose address is given by
 \var{address} in the form of a \code{(\var{host}, \var{port})}
 tuple.  If \var{address} is not specified, \code{('localhost', 514)} is
-used.  The address is used to open a UDP socket.  If \var{facility} is
-not specified, \constant{LOG_USER} is used.
+used.  The address is used to open a UDP socket.  An alternative to providing
+a \code{(\var{host}, \var{port})} tuple is providing an address as a string,
+for example "/dev/log". In this case, a Unix domain socket is used to send
+the message to the syslog. If \var{facility} is not specified,
+\constant{LOG_USER} is used.
 \end{classdesc}
 
 \begin{methoddesc}{close}{}

Deleted: /python/branches/py3k-struni/Doc/lib/libmimewriter.tex
==============================================================================
--- /python/branches/py3k-struni/Doc/lib/libmimewriter.tex	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,80 +0,0 @@
-\section{\module{MimeWriter} ---
-         Generic MIME file writer}
-
-\declaremodule{standard}{MimeWriter}
-
-\modulesynopsis{Generic MIME file writer.}
-\sectionauthor{Christopher G. Petrilli}{petrilli at amber.org}
-
-\deprecated{2.3}{The \refmodule{email} package should be used in
-                 preference to the \module{MimeWriter} module.  This
-                 module is present only to maintain backward
-                 compatibility.}
-
-This module defines the class \class{MimeWriter}.  The
-\class{MimeWriter} class implements a basic formatter for creating
-MIME multi-part files.  It doesn't seek around the output file nor
-does it use large amounts of buffer space. You must write the parts
-out in the order that they should occur in the final
-file. \class{MimeWriter} does buffer the headers you add, allowing you 
-to rearrange their order.
-
-\begin{classdesc}{MimeWriter}{fp}
-Return a new instance of the \class{MimeWriter} class.  The only
-argument passed, \var{fp}, is a file object to be used for
-writing. Note that a \class{StringIO} object could also be used.
-\end{classdesc}
-
-
-\subsection{MimeWriter Objects \label{MimeWriter-objects}}
-
-
-\class{MimeWriter} instances have the following methods:
-
-\begin{methoddesc}[MimeWriter]{addheader}{key, value\optional{, prefix}}
-Add a header line to the MIME message. The \var{key} is the name of
-the header, where the \var{value} obviously provides the value of the
-header. The optional argument \var{prefix} determines where the header 
-is inserted; \samp{0} means append at the end, \samp{1} is insert at
-the start. The default is to append.
-\end{methoddesc}
-
-\begin{methoddesc}[MimeWriter]{flushheaders}{}
-Causes all headers accumulated so far to be written out (and
-forgotten). This is useful if you don't need a body part at all,
-e.g.\ for a subpart of type \mimetype{message/rfc822} that's (mis)used
-to store some header-like information.
-\end{methoddesc}
-
-\begin{methoddesc}[MimeWriter]{startbody}{ctype\optional{, plist\optional{, prefix}}}
-Returns a file-like object which can be used to write to the
-body of the message.  The content-type is set to the provided
-\var{ctype}, and the optional parameter \var{plist} provides
-additional parameters for the content-type declaration. \var{prefix}
-functions as in \method{addheader()} except that the default is to
-insert at the start.
-\end{methoddesc}
-
-\begin{methoddesc}[MimeWriter]{startmultipartbody}{subtype\optional{,
-                               boundary\optional{, plist\optional{, prefix}}}}
-Returns a file-like object which can be used to write to the
-body of the message.  Additionally, this method initializes the
-multi-part code, where \var{subtype} provides the multipart subtype,
-\var{boundary} may provide a user-defined boundary specification, and
-\var{plist} provides optional parameters for the subtype.
-\var{prefix} functions as in \method{startbody()}.  Subparts should be
-created using \method{nextpart()}.
-\end{methoddesc}
-
-\begin{methoddesc}[MimeWriter]{nextpart}{}
-Returns a new instance of \class{MimeWriter} which represents an
-individual part in a multipart message.  This may be used to write the 
-part as well as used for creating recursively complex multipart
-messages. The message must first be initialized with
-\method{startmultipartbody()} before using \method{nextpart()}.
-\end{methoddesc}
-
-\begin{methoddesc}[MimeWriter]{lastpart}{}
-This is used to designate the last part of a multipart message, and
-should \emph{always} be used when writing multipart messages.
-\end{methoddesc}

Deleted: /python/branches/py3k-struni/Doc/lib/libmimify.tex
==============================================================================
--- /python/branches/py3k-struni/Doc/lib/libmimify.tex	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,94 +0,0 @@
-\section{\module{mimify} ---
-         MIME processing of mail messages}
-
-\declaremodule{standard}{mimify}
-\modulesynopsis{Mimification and unmimification of mail messages.}
-
-\deprecated{2.3}{The \refmodule{email} package should be used in
-                 preference to the \module{mimify} module.  This
-                 module is present only to maintain backward
-                 compatibility.}
-
-The \module{mimify} module defines two functions to convert mail messages to
-and from MIME format.  The mail message can be either a simple message
-or a so-called multipart message.  Each part is treated separately.
-Mimifying (a part of) a message entails encoding the message as
-quoted-printable if it contains any characters that cannot be
-represented using 7-bit \ASCII.  Unmimifying (a part of) a message
-entails undoing the quoted-printable encoding.  Mimify and unmimify
-are especially useful when a message has to be edited before being
-sent.  Typical use would be:
-
-\begin{verbatim}
-unmimify message
-edit message
-mimify message
-send message
-\end{verbatim}
-
-The modules defines the following user-callable functions and
-user-settable variables:
-
-\begin{funcdesc}{mimify}{infile, outfile}
-Copy the message in \var{infile} to \var{outfile}, converting parts to
-quoted-printable and adding MIME mail headers when necessary.
-\var{infile} and \var{outfile} can be file objects (actually, any
-object that has a \method{readline()} method (for \var{infile}) or a
-\method{write()} method (for \var{outfile})) or strings naming the files.
-If \var{infile} and \var{outfile} are both strings, they may have the
-same value.
-\end{funcdesc}
-
-\begin{funcdesc}{unmimify}{infile, outfile\optional{, decode_base64}}
-Copy the message in \var{infile} to \var{outfile}, decoding all
-quoted-printable parts.  \var{infile} and \var{outfile} can be file
-objects (actually, any object that has a \method{readline()} method (for
-\var{infile}) or a \method{write()} method (for \var{outfile})) or strings
-naming the files.  If \var{infile} and \var{outfile} are both strings,
-they may have the same value.
-If the \var{decode_base64} argument is provided and tests true, any
-parts that are coded in the base64 encoding are decoded as well.
-\end{funcdesc}
-
-\begin{funcdesc}{mime_decode_header}{line}
-Return a decoded version of the encoded header line in \var{line}.
-This only supports the ISO 8859-1 charset (Latin-1).
-\end{funcdesc}
-
-\begin{funcdesc}{mime_encode_header}{line}
-Return a MIME-encoded version of the header line in \var{line}.
-\end{funcdesc}
-
-\begin{datadesc}{MAXLEN}
-By default, a part will be encoded as quoted-printable when it
-contains any non-\ASCII{} characters (characters with the 8th bit
-set), or if there are any lines longer than \constant{MAXLEN} characters
-(default value 200).  
-\end{datadesc}
-
-\begin{datadesc}{CHARSET}
-When not specified in the mail headers, a character set must be filled
-in.  The string used is stored in \constant{CHARSET}, and the default
-value is ISO-8859-1 (also known as Latin1 (latin-one)).
-\end{datadesc}
-
-This module can also be used from the command line.  Usage is as
-follows:
-\begin{verbatim}
-mimify.py -e [-l length] [infile [outfile]]
-mimify.py -d [-b] [infile [outfile]]
-\end{verbatim}
-to encode (mimify) and decode (unmimify) respectively.  \var{infile}
-defaults to standard input, \var{outfile} defaults to standard output.
-The same file can be specified for input and output.
-
-If the \strong{-l} option is given when encoding, if there are any lines
-longer than the specified \var{length}, the containing part will be
-encoded.
-
-If the \strong{-b} option is given when decoding, any base64 parts will
-be decoded as well.
-
-\begin{seealso}
-  \seemodule{quopri}{Encode and decode MIME quoted-printable files.}
-\end{seealso}

Modified: python/branches/py3k-struni/Doc/lib/libpickle.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libpickle.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libpickle.tex	Thu Jun  7 01:52:48 2007
@@ -799,7 +799,7 @@
         del odict['fh']              # remove filehandle entry
         return odict
 
-    def __setstate__(self,dict):
+    def __setstate__(self, dict):
         fh = open(dict['file'])      # reopen file
         count = dict['lineno']       # read from file...
         while count:                 # until line count is restored
@@ -820,7 +820,7 @@
 ... obj.readline()
 '7: class TextReader:'
 >>> import pickle
->>> pickle.dump(obj,open('save.p','w'))
+>>> pickle.dump(obj,open('save.p', 'wb'))
 \end{verbatim}
 
 If you want to see that \refmodule{pickle} works across Python
@@ -829,7 +829,7 @@
 
 \begin{verbatim}
 >>> import pickle
->>> reader = pickle.load(open('save.p'))
+>>> reader = pickle.load(open('save.p', 'rb'))
 >>> reader.readline()
 '8:     "Print and number lines in a text file."'
 \end{verbatim}

Deleted: /python/branches/py3k-struni/Doc/lib/libposixfile.tex
==============================================================================
--- /python/branches/py3k-struni/Doc/lib/libposixfile.tex	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,174 +0,0 @@
-% Manual text and implementation by Jaap Vermeulen
-\section{\module{posixfile} ---
-         File-like objects with locking support}
-
-\declaremodule{builtin}{posixfile}
-  \platform{Unix}
-\modulesynopsis{A file-like object with support for locking.}
-\moduleauthor{Jaap Vermeulen}{}
-\sectionauthor{Jaap Vermeulen}{}
-
-
-\indexii{\POSIX}{file object}
-
-\deprecated{1.5}{The locking operation that this module provides is
-done better and more portably by the
-\function{\refmodule{fcntl}.lockf()} call.
-\withsubitem{(in module fcntl)}{\ttindex{lockf()}}}
-
-This module implements some additional functionality over the built-in
-file objects.  In particular, it implements file locking, control over
-the file flags, and an easy interface to duplicate the file object.
-The module defines a new file object, the posixfile object.  It
-has all the standard file object methods and adds the methods
-described below.  This module only works for certain flavors of
-\UNIX, since it uses \function{fcntl.fcntl()} for file locking.%
-\withsubitem{(in module fcntl)}{\ttindex{fcntl()}}
-
-To instantiate a posixfile object, use the \function{open()} function
-in the \module{posixfile} module.  The resulting object looks and
-feels roughly the same as a standard file object.
-
-The \module{posixfile} module defines the following constants:
-
-
-\begin{datadesc}{SEEK_SET}
-Offset is calculated from the start of the file.
-\end{datadesc}
-
-\begin{datadesc}{SEEK_CUR}
-Offset is calculated from the current position in the file.
-\end{datadesc}
-
-\begin{datadesc}{SEEK_END}
-Offset is calculated from the end of the file.
-\end{datadesc}
-
-The \module{posixfile} module defines the following functions:
-
-
-\begin{funcdesc}{open}{filename\optional{, mode\optional{, bufsize}}}
- Create a new posixfile object with the given filename and mode.  The
- \var{filename}, \var{mode} and \var{bufsize} arguments are
- interpreted the same way as by the built-in \function{open()}
- function.
-\end{funcdesc}
-
-\begin{funcdesc}{fileopen}{fileobject}
- Create a new posixfile object with the given standard file object.
- The resulting object has the same filename and mode as the original
- file object.
-\end{funcdesc}
-
-The posixfile object defines the following additional methods:
-
-\begin{methoddesc}[posixfile]{lock}{fmt, \optional{len\optional{, start\optional{, whence}}}}
- Lock the specified section of the file that the file object is
- referring to.  The format is explained
- below in a table.  The \var{len} argument specifies the length of the
- section that should be locked. The default is \code{0}. \var{start}
- specifies the starting offset of the section, where the default is
- \code{0}.  The \var{whence} argument specifies where the offset is
- relative to. It accepts one of the constants \constant{SEEK_SET},
- \constant{SEEK_CUR} or \constant{SEEK_END}.  The default is
- \constant{SEEK_SET}.  For more information about the arguments refer
- to the \manpage{fcntl}{2} manual page on your system.
-\end{methoddesc}
-
-\begin{methoddesc}[posixfile]{flags}{\optional{flags}}
- Set the specified flags for the file that the file object is referring
- to.  The new flags are ORed with the old flags, unless specified
- otherwise.  The format is explained below in a table.  Without
- the \var{flags} argument
- a string indicating the current flags is returned (this is
- the same as the \samp{?} modifier).  For more information about the
- flags refer to the \manpage{fcntl}{2} manual page on your system.
-\end{methoddesc}
-
-\begin{methoddesc}[posixfile]{dup}{}
- Duplicate the file object and the underlying file pointer and file
- descriptor.  The resulting object behaves as if it were newly
- opened.
-\end{methoddesc}
-
-\begin{methoddesc}[posixfile]{dup2}{fd}
- Duplicate the file object and the underlying file pointer and file
- descriptor.  The new object will have the given file descriptor.
- Otherwise the resulting object behaves as if it were newly opened.
-\end{methoddesc}
-
-\begin{methoddesc}[posixfile]{file}{}
- Return the standard file object that the posixfile object is based
- on.  This is sometimes necessary for functions that insist on a
- standard file object.
-\end{methoddesc}
-
-All methods raise \exception{IOError} when the request fails.
-
-Format characters for the \method{lock()} method have the following
-meaning:
-
-\begin{tableii}{c|l}{samp}{Format}{Meaning}
-  \lineii{u}{unlock the specified region}
-  \lineii{r}{request a read lock for the specified section}
-  \lineii{w}{request a write lock for the specified section}
-\end{tableii}
-
-In addition the following modifiers can be added to the format:
-
-\begin{tableiii}{c|l|c}{samp}{Modifier}{Meaning}{Notes}
-  \lineiii{|}{wait until the lock has been granted}{}
-  \lineiii{?}{return the first lock conflicting with the requested lock, or
-              \code{None} if there is no conflict.}{(1)} 
-\end{tableiii}
-
-\noindent
-Note:
-
-\begin{description}
-\item[(1)] The lock returned is in the format \code{(\var{mode}, \var{len},
-\var{start}, \var{whence}, \var{pid})} where \var{mode} is a character
-representing the type of lock ('r' or 'w').  This modifier prevents a
-request from being granted; it is for query purposes only.
-\end{description}
-
-Format characters for the \method{flags()} method have the following
-meanings:
-
-\begin{tableii}{c|l}{samp}{Format}{Meaning}
-  \lineii{a}{append only flag}
-  \lineii{c}{close on exec flag}
-  \lineii{n}{no delay flag (also called non-blocking flag)}
-  \lineii{s}{synchronization flag}
-\end{tableii}
-
-In addition the following modifiers can be added to the format:
-
-\begin{tableiii}{c|l|c}{samp}{Modifier}{Meaning}{Notes}
-  \lineiii{!}{turn the specified flags 'off', instead of the default 'on'}{(1)}
-  \lineiii{=}{replace the flags, instead of the default 'OR' operation}{(1)}
-  \lineiii{?}{return a string in which the characters represent the flags that
-  are set.}{(2)}
-\end{tableiii}
-
-\noindent
-Notes:
-
-\begin{description}
-\item[(1)] The \samp{!} and \samp{=} modifiers are mutually exclusive.
-
-\item[(2)] This string represents the flags after they may have been altered
-by the same call.
-\end{description}
-
-Examples:
-
-\begin{verbatim}
-import posixfile
-
-file = posixfile.open('/tmp/test', 'w')
-file.lock('w|')
-...
-file.lock('u')
-file.close()
-\end{verbatim}

Modified: python/branches/py3k-struni/Doc/lib/libshlex.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libshlex.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libshlex.tex	Thu Jun  7 01:52:48 2007
@@ -19,13 +19,15 @@
 
 The \module{shlex} module defines the following functions:
 
-\begin{funcdesc}{split}{s\optional{, comments}}
+\begin{funcdesc}{split}{s\optional{, comments\optional{, posix}}}
 Split the string \var{s} using shell-like syntax. If \var{comments} is
 \constant{False} (the default), the parsing of comments in the given
 string will be disabled (setting the \member{commenters} member of the
 \class{shlex} instance to the empty string).  This function operates
-in \POSIX{} mode.
+in \POSIX{} mode by default, but uses non-\POSIX{} mode if the
+\var{posix} argument is false.
 \versionadded{2.3}
+\versionchanged[Added the \var{posix} parameter]{2.6}
 \end{funcdesc}
 
 The \module{shlex} module defines the following class:

Modified: python/branches/py3k-struni/Doc/lib/libsubprocess.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libsubprocess.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libsubprocess.tex	Thu Jun  7 01:52:48 2007
@@ -87,7 +87,10 @@
 
 If \var{close_fds} is true, all file descriptors except \constant{0},
 \constant{1} and \constant{2} will be closed before the child process is
-executed. (\UNIX{} only)
+executed. (\UNIX{} only).  Or, on Windows, if \var{close_fds} is true
+then no handles will be inherited by the child process.  Note that on
+Windows, you cannot set \var{close_fds} to true and also redirect the
+standard handles by setting \var{stdin}, \var{stdout} or \var{stderr}.
 
 If \var{shell} is \constant{True}, the specified command will be
 executed through the shell.

Modified: python/branches/py3k-struni/Doc/lib/libsys.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libsys.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libsys.tex	Thu Jun  7 01:52:48 2007
@@ -132,11 +132,6 @@
   encapsulates the call stack at the point where the exception
   originally occurred.  \obindex{traceback}
 
-  If \function{exc_clear()} is called, this function will return three
-  \code{None} values until either another exception is raised in the
-  current thread or the execution stack returns to a frame where
-  another exception is being handled.
-
   \warning{Assigning the \var{traceback} return value to a
   local variable in a function that is handling an exception will
   cause a circular reference.  This will prevent anything referenced
@@ -153,32 +148,6 @@
   efficient to avoid creating cycles.}
 \end{funcdesc}
 
-\begin{funcdesc}{exc_clear}{}
-  This function clears all information relating to the current or last
-  exception that occurred in the current thread.  After calling this
-  function, \function{exc_info()} will return three \code{None} values until
-  another exception is raised in the current thread or the execution stack
-  returns to a frame where another exception is being handled.
-
-  This function is only needed in only a few obscure situations.  These
-  include logging and error handling systems that report information on the
-  last or current exception.  This function can also be used to try to free
-  resources and trigger object finalization, though no guarantee is made as
-  to what objects will be freed, if any.
-\versionadded{2.3}
-\end{funcdesc}
-
-\begin{datadesc}{exc_type}
-\dataline{exc_value}
-\dataline{exc_traceback}
-\deprecated {1.5}
-            {Use \function{exc_info()} instead.}
-  Since they are global variables, they are not specific to the
-  current thread, so their use is not safe in a multi-threaded
-  program.  When no exception is being handled, \code{exc_type} is set
-  to \code{None} and the other two are undefined.
-\end{datadesc}
-
 \begin{datadesc}{exec_prefix}
   A string giving the site-specific directory prefix where the
   platform-dependent Python files are installed; by default, this is
@@ -377,10 +346,7 @@
 \begin{datadesc}{modules}
   This is a dictionary that maps module names to modules which have
   already been loaded.  This can be manipulated to force reloading of
-  modules and other tricks.  Note that removing a module from this
-  dictionary is \emph{not} the same as calling
-  \function{reload()}\bifuncindex{reload} on the corresponding module
-  object.
+  modules and other tricks.
 \end{datadesc}
 
 \begin{datadesc}{path}

Modified: python/branches/py3k-struni/Doc/lib/libtarfile.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libtarfile.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libtarfile.tex	Thu Jun  7 01:52:48 2007
@@ -133,24 +133,20 @@
     \versionadded{2.6}
 \end{excdesc}
 
+Each of the following constants defines a tar archive format that the
+\module{tarfile} module is able to create. See section \ref{tar-formats} for
+details.
+
 \begin{datadesc}{USTAR_FORMAT}
-    \POSIX{}.1-1988 (ustar) format. It supports filenames up to a length of
-    at best 256 characters and linknames up to 100 characters. The maximum
-    file size is 8 gigabytes. This is an old and limited but widely
-    supported format.
+    \POSIX{}.1-1988 (ustar) format.
 \end{datadesc}
 
 \begin{datadesc}{GNU_FORMAT}
-    GNU tar format. It supports arbitrarily long filenames and linknames and
-    files bigger than 8 gigabytes. It is the defacto standard on GNU/Linux
-    systems.
+    GNU tar format.
 \end{datadesc}
 
 \begin{datadesc}{PAX_FORMAT}
-    \POSIX{}.1-2001 (pax) format. It is the most flexible format with
-    virtually no limits. It supports long filenames and linknames, large files
-    and stores pathnames in a portable way.  However, not all tar
-    implementations today are able to handle pax archives properly.
+    \POSIX{}.1-2001 (pax) format.
 \end{datadesc}
 
 \begin{datadesc}{DEFAULT_FORMAT}
@@ -175,15 +171,15 @@
 
 The \class{TarFile} object provides an interface to a tar archive. A tar
 archive is a sequence of blocks. An archive member (a stored file) is made up
-of a header block followed by data blocks. It is possible, to store a file in a
+of a header block followed by data blocks. It is possible to store a file in a
 tar archive several times. Each archive member is represented by a
 \class{TarInfo} object, see \citetitle{TarInfo Objects} (section
 \ref{tarinfo-objects}) for details.
 
 \begin{classdesc}{TarFile}{name=None, mode='r', fileobj=None,
         format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False,
-        ignore_zeros=False, encoding=None, pax_headers=None, debug=0,
-        errorlevel=0}
+        ignore_zeros=False, encoding=None, errors=None, pax_headers=None,
+        debug=0, errorlevel=0}
 
     All following arguments are optional and can be accessed as instance
     attributes as well.
@@ -231,18 +227,14 @@
     If \code{2}, all \emph{non-fatal} errors are raised as \exception{TarError}
     exceptions as well.
 
-    The \var{encoding} argument defines the local character encoding. It
-    defaults to the value from \function{sys.getfilesystemencoding()} or if
-    that is \code{None} to \code{"ascii"}. \var{encoding} is used only in
-    connection with the pax format which stores text data in \emph{UTF-8}. If
-    it is not set correctly, character conversion will fail with a
-    \exception{UnicodeError}.
+    The \var{encoding} and \var{errors} arguments control the way strings are
+    converted to unicode objects and vice versa. The default settings will work
+    for most users. See section \ref{tar-unicode} for in-depth information.
     \versionadded{2.6}
 
-    The \var{pax_headers} argument must be a dictionary whose elements are
-    either unicode objects, numbers or strings that can be decoded to unicode
-    using \var{encoding}. This information will be added to the archive as a
-    pax global header.
+    The \var{pax_headers} argument is an optional dictionary of unicode strings
+    which will be added as a pax global header if \var{format} is
+    \constant{PAX_FORMAT}.
     \versionadded{2.6}
 \end{classdesc}
 
@@ -287,7 +279,7 @@
     Extract all members from the archive to the current working directory
     or directory \var{path}. If optional \var{members} is given, it must be
     a subset of the list returned by \method{getmembers()}.
-    Directory informations like owner, modification time and permissions are
+    Directory information like owner, modification time and permissions are
     set after all members have been extracted. This is done to work around two
     problems: A directory's modification time is reset each time a file is
     created in it. And, if a directory's permissions do not allow writing,
@@ -365,6 +357,11 @@
     \deprecated{2.6}{Use the \member{format} attribute instead.}
 \end{memberdesc}
 
+\begin{memberdesc}{pax_headers}
+    A dictionary containing key-value pairs of pax global headers.
+    \versionadded{2.6}
+\end{memberdesc}
+
 %-----------------
 % TarInfo Objects
 %-----------------
@@ -384,8 +381,8 @@
     Create a \class{TarInfo} object.
 \end{classdesc}
 
-\begin{methoddesc}{frombuf}{}
-    Create and return a \class{TarInfo} object from a string buffer.
+\begin{methoddesc}{frombuf}{buf}
+    Create and return a \class{TarInfo} object from string buffer \var{buf}.
     \versionadded[Raises \exception{HeaderError} if the buffer is
     invalid.]{2.6}
 \end{methoddesc}
@@ -396,10 +393,11 @@
     \versionadded{2.6}
 \end{methoddesc}
 
-\begin{methoddesc}{tobuf}{\optional{format}}
-    Create a string buffer from a \class{TarInfo} object.  See
-    \class{TarFile}'s \member{format} argument for information.
-    \versionchanged[The \var{format} parameter]{2.6}
+\begin{methoddesc}{tobuf}{\optional{format\optional{, encoding
+        \optional{, errors}}}}
+    Create a string buffer from a \class{TarInfo} object. For information
+    on the arguments see the constructor of the \class{TarFile} class.
+    \versionchanged[The arguments were added]{2.6}
 \end{methoddesc}
 
 A \code{TarInfo} object has the following public data attributes:
@@ -452,6 +450,12 @@
     Group name.
 \end{memberdesc}
 
+\begin{memberdesc}{pax_headers}
+    A dictionary containing key-value pairs of an associated pax
+    extended header.
+    \versionadded{2.6}
+\end{memberdesc}
+
 A \class{TarInfo} object also provides some convenient query methods:
 
 \begin{methoddesc}{isfile}{}
@@ -554,3 +558,103 @@
     tar.extract(tarinfo)
 tar.close()
 \end{verbatim}
+
+%------------
+% Tar format
+%------------
+
+\subsection{Supported tar formats \label{tar-formats}}
+
+There are three tar formats that can be created with the \module{tarfile}
+module:
+
+\begin{itemize}
+
+\item
+The \POSIX{}.1-1988 ustar format (\constant{USTAR_FORMAT}). It supports
+filenames up to a length of at best 256 characters and linknames up to 100
+characters. The maximum file size is 8 gigabytes. This is an old and limited
+but widely supported format.
+
+\item
+The GNU tar format (\constant{GNU_FORMAT}). It supports long filenames and
+linknames, files bigger than 8 gigabytes and sparse files. It is the de facto
+standard on GNU/Linux systems. \module{tarfile} fully supports the GNU tar
+extensions for long names, sparse file support is read-only.
+
+\item
+The \POSIX{}.1-2001 pax format (\constant{PAX_FORMAT}). It is the most
+flexible format with virtually no limits. It supports long filenames and
+linknames, large files and stores pathnames in a portable way. However, not
+all tar implementations today are able to handle pax archives properly.
+
+The \emph{pax} format is an extension to the existing \emph{ustar} format. It
+uses extra headers for information that cannot be stored otherwise. There are
+two flavours of pax headers: Extended headers only affect the subsequent file
+header, global headers are valid for the complete archive and affect all
+following files. All the data in a pax header is encoded in \emph{UTF-8} for
+portability reasons.
+
+\end{itemize}
+
+There are some more variants of the tar format which can be read, but not
+created:
+
+\begin{itemize}
+
+\item
+The ancient V7 format. This is the first tar format from \UNIX{} Seventh
+Edition, storing only regular files and directories. Names must not be longer
+than 100 characters, there is no user/group name information. Some archives
+have miscalculated header checksums in case of fields with non-\ASCII{}
+characters.
+
+\item
+The SunOS tar extended format. This format is a variant of the \POSIX{}.1-2001
+pax format, but is not compatible.
+
+\end{itemize}
+
+%----------------
+% Unicode issues
+%----------------
+
+\subsection{Unicode issues \label{tar-unicode}}
+
+The tar format was originally conceived to make backups on tape drives with the
+main focus on preserving file system information. Nowadays tar archives are
+commonly used for file distribution and exchanging archives over networks. One
+problem of the original format (that all other formats are merely variants of)
+is that there is no concept of supporting different character encodings.
+For example, an ordinary tar archive created on a \emph{UTF-8} system cannot be
+read correctly on a \emph{Latin-1} system if it contains non-\ASCII{}
+characters. Names (i.e. filenames, linknames, user/group names) containing
+these characters will appear damaged.  Unfortunately, there is no way to
+autodetect the encoding of an archive.
+
+The pax format was designed to solve this problem. It stores non-\ASCII{} names
+using the universal character encoding \emph{UTF-8}. When a pax archive is
+read, these \emph{UTF-8} names are converted to the encoding of the local
+file system.
+
+The details of unicode conversion are controlled by the \var{encoding} and
+\var{errors} keyword arguments of the \class{TarFile} class.
+
+The default value for \var{encoding} is the local character encoding. It is
+deduced from \function{sys.getfilesystemencoding()} and
+\function{sys.getdefaultencoding()}. In read mode, \var{encoding} is used
+exclusively to convert unicode names from a pax archive to strings in the local
+character encoding. In write mode, the use of \var{encoding} depends on the
+chosen archive format. In case of \constant{PAX_FORMAT}, input names that
+contain non-\ASCII{} characters need to be decoded before being stored as
+\emph{UTF-8} strings. The other formats do not make use of \var{encoding}
+unless unicode objects are used as input names. These are converted to
+8-bit character strings before they are added to the archive.
+
+The \var{errors} argument defines how characters are treated that cannot be
+converted to or from \var{encoding}. Possible values are listed in section
+\ref{codec-base-classes}. In read mode, there is an additional scheme
+\code{'utf-8'} which means that bad characters are replaced by their
+\emph{UTF-8} representation. This is the default scheme. In write mode the
+default value for \var{errors} is \code{'strict'} to ensure that name
+information is not altered unnoticed.

Modified: python/branches/py3k-struni/Doc/lib/libtypes.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libtypes.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libtypes.tex	Thu Jun  7 01:52:48 2007
@@ -163,7 +163,7 @@
 
 \begin{datadesc}{TracebackType}
 The type of traceback objects such as found in
-\code{sys.exc_traceback}.
+\code{sys.exc_info()[2]}.
 \end{datadesc}
 
 \begin{datadesc}{FrameType}

Modified: python/branches/py3k-struni/Doc/lib/libundoc.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libundoc.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libundoc.tex	Thu Jun  7 01:52:48 2007
@@ -88,7 +88,6 @@
 % XXX need Windows instructions!
 
 \begin{description}
-\item[\module{timing}]
---- Measure time intervals to high resolution (use \function{time.clock()}
-    instead).
+\item
+--- This section should be empty for Python 3.0.
 \end{description}

Modified: python/branches/py3k-struni/Doc/lib/libzipimport.tex
==============================================================================
--- python/branches/py3k-struni/Doc/lib/libzipimport.tex	(original)
+++ python/branches/py3k-struni/Doc/lib/libzipimport.tex	Thu Jun  7 01:52:48 2007
@@ -29,11 +29,6 @@
 if a ZIP archive doesn't contain \file{.pyc} files, importing may be rather
 slow.
 
-Using the built-in \function{reload()} function will
-fail if called on a module loaded from a ZIP archive; it is unlikely that
-\function{reload()} would be needed, since this would imply that the ZIP
-has been altered during runtime.
-
 The available attributes of this module are:
 
 \begin{excdesc}{ZipImportError}

Modified: python/branches/py3k-struni/Doc/mac/undoc.tex
==============================================================================
--- python/branches/py3k-struni/Doc/mac/undoc.tex	(original)
+++ python/branches/py3k-struni/Doc/mac/undoc.tex	Thu Jun  7 01:52:48 2007
@@ -23,18 +23,6 @@
 
 \deprecated{2.4}{}
 
-\section{\module{cfmfile} --- Code Fragment Resource module}
-\declaremodule{standard}{cfmfile}
-  \platform{Mac}
-\modulesynopsis{Code Fragment Resource module.}
-
-\module{cfmfile} is a module that understands Code Fragments and the
-accompanying ``cfrg'' resources. It can parse them and merge them, and is
-used by BuildApplication to combine all plugin modules to a single
-executable.
-
-\deprecated{2.4}{}
-
 \section{\module{icopen} --- Internet Config replacement for \method{open()}}
 \declaremodule{standard}{icopen}
   \platform{Mac}

Modified: python/branches/py3k-struni/Doc/ref/ref3.tex
==============================================================================
--- python/branches/py3k-struni/Doc/ref/ref3.tex	(original)
+++ python/branches/py3k-struni/Doc/ref/ref3.tex	Thu Jun  7 01:52:48 2007
@@ -977,10 +977,8 @@
 traceback.  When an exception handler is entered, the stack trace is
 made available to the program.
 (See section~\ref{try}, ``The \code{try} statement.'')
-It is accessible as \code{sys.exc_traceback}, and also as the third
-item of the tuple returned by \code{sys.exc_info()}.  The latter is
-the preferred interface, since it works correctly when the program is
-using multiple threads.
+It is accessible as the third
+item of the tuple returned by \code{sys.exc_info()}.
 When the program contains no suitable handler, the stack trace is written
 (nicely formatted) to the standard error stream; if the interpreter is
 interactive, it is also made available to the user as
@@ -994,7 +992,6 @@
   \ttindex{exc_traceback}
   \ttindex{last_traceback}}
 \ttindex{sys.exc_info}
-\ttindex{sys.exc_traceback}
 \ttindex{sys.last_traceback}
 
 Special read-only attributes: \member{tb_next} is the next level in the
@@ -1198,13 +1195,13 @@
 references between objects (e.g., a doubly-linked list or a tree data
 structure with parent and child pointers); a reference to the object
 on the stack frame of a function that caught an exception (the
-traceback stored in \code{sys.exc_traceback} keeps the stack frame
+traceback stored in \code{sys.exc_info()[2]} keeps the stack frame
 alive); or a reference to the object on the stack frame that raised an
 unhandled exception in interactive mode (the traceback stored in
 \code{sys.last_traceback} keeps the stack frame alive).  The first
 situation can only be remedied by explicitly breaking the cycles; the
 latter two situations can be resolved by storing \code{None} in
-\code{sys.exc_traceback} or \code{sys.last_traceback}.  Circular
+\code{sys.last_traceback}.  Circular
 references which are garbage are detected when the option cycle
 detector is enabled (it's on by default), but can only be cleaned up
 if there are no Python-level \method{__del__()} methods involved.

Modified: python/branches/py3k-struni/Doc/tut/tut.tex
==============================================================================
--- python/branches/py3k-struni/Doc/tut/tut.tex	(original)
+++ python/branches/py3k-struni/Doc/tut/tut.tex	Thu Jun  7 01:52:48 2007
@@ -2653,7 +2653,7 @@
 ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
  '__stdin__', '__stdout__', '_getframe', 'api_version', 'argv', 
  'builtin_module_names', 'byteorder', 'callstats', 'copyright',
- 'displayhook', 'exc_clear', 'exc_info', 'exc_type', 'excepthook',
+ 'displayhook', 'exc_info', 'excepthook',
  'exec_prefix', 'executable', 'exit', 'getdefaultencoding', 'getdlopenflags',
  'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',
  'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache',
@@ -2703,7 +2703,7 @@
  'id', 'input', 'int', 'isinstance', 'issubclass', 'iter',
  'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min',
  'object', 'oct', 'open', 'ord', 'pow', 'property', 'quit', 'range',
- 'reload', 'repr', 'reversed', 'round', 'set',
+ 'repr', 'reversed', 'round', 'set',
  'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
  'tuple', 'type', 'unichr', 'unicode', 'vars', 'zip']
 \end{verbatim}

Modified: python/branches/py3k-struni/Grammar/Grammar
==============================================================================
--- python/branches/py3k-struni/Grammar/Grammar	(original)
+++ python/branches/py3k-struni/Grammar/Grammar	Thu Jun  7 01:52:48 2007
@@ -100,7 +100,7 @@
 atom: ('(' [yield_expr|testlist_comp] ')' |
        '[' [testlist_comp] ']' |
        '{' [dictorsetmaker] '}' |
-       NAME | NUMBER | STRING+ | '...')
+       NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
 testlist_comp: test ( comp_for | (',' test)* [','] )
 trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
 subscriptlist: subscript (',' subscript)* [',']

Deleted: /python/branches/py3k-struni/Lib/MimeWriter.py
==============================================================================
--- /python/branches/py3k-struni/Lib/MimeWriter.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,181 +0,0 @@
-"""Generic MIME writer.
-
-This module defines the class MimeWriter.  The MimeWriter class implements
-a basic formatter for creating MIME multi-part files.  It doesn't seek around
-the output file nor does it use large amounts of buffer space. You must write
-the parts out in the order that they should occur in the final file.
-MimeWriter does buffer the headers you add, allowing you to rearrange their
-order.
-
-"""
-
-
-import mimetools
-
-__all__ = ["MimeWriter"]
-
-class MimeWriter:
-
-    """Generic MIME writer.
-
-    Methods:
-
-    __init__()
-    addheader()
-    flushheaders()
-    startbody()
-    startmultipartbody()
-    nextpart()
-    lastpart()
-
-    A MIME writer is much more primitive than a MIME parser.  It
-    doesn't seek around on the output file, and it doesn't use large
-    amounts of buffer space, so you have to write the parts in the
-    order they should occur on the output file.  It does buffer the
-    headers you add, allowing you to rearrange their order.
-
-    General usage is:
-
-    f = <open the output file>
-    w = MimeWriter(f)
-    ...call w.addheader(key, value) 0 or more times...
-
-    followed by either:
-
-    f = w.startbody(content_type)
-    ...call f.write(data) for body data...
-
-    or:
-
-    w.startmultipartbody(subtype)
-    for each part:
-        subwriter = w.nextpart()
-        ...use the subwriter's methods to create the subpart...
-    w.lastpart()
-
-    The subwriter is another MimeWriter instance, and should be
-    treated in the same way as the toplevel MimeWriter.  This way,
-    writing recursive body parts is easy.
-
-    Warning: don't forget to call lastpart()!
-
-    XXX There should be more state so calls made in the wrong order
-    are detected.
-
-    Some special cases:
-
-    - startbody() just returns the file passed to the constructor;
-      but don't use this knowledge, as it may be changed.
-
-    - startmultipartbody() actually returns a file as well;
-      this can be used to write the initial 'if you can read this your
-      mailer is not MIME-aware' message.
-
-    - If you call flushheaders(), the headers accumulated so far are
-      written out (and forgotten); this is useful if you don't need a
-      body part at all, e.g. for a subpart of type message/rfc822
-      that's (mis)used to store some header-like information.
-
-    - Passing a keyword argument 'prefix=<flag>' to addheader(),
-      start*body() affects where the header is inserted; 0 means
-      append at the end, 1 means insert at the start; default is
-      append for addheader(), but insert for start*body(), which use
-      it to determine where the Content-Type header goes.
-
-    """
-
-    def __init__(self, fp):
-        self._fp = fp
-        self._headers = []
-
-    def addheader(self, key, value, prefix=0):
-        """Add a header line to the MIME message.
-
-        The key is the name of the header, where the value obviously provides
-        the value of the header. The optional argument prefix determines
-        where the header is inserted; 0 means append at the end, 1 means
-        insert at the start. The default is to append.
-
-        """
-        lines = value.split("\n")
-        while lines and not lines[-1]: del lines[-1]
-        while lines and not lines[0]: del lines[0]
-        for i in range(1, len(lines)):
-            lines[i] = "    " + lines[i].strip()
-        value = "\n".join(lines) + "\n"
-        line = key + ": " + value
-        if prefix:
-            self._headers.insert(0, line)
-        else:
-            self._headers.append(line)
-
-    def flushheaders(self):
-        """Writes out and forgets all headers accumulated so far.
-
-        This is useful if you don't need a body part at all; for example,
-        for a subpart of type message/rfc822 that's (mis)used to store some
-        header-like information.
-
-        """
-        self._fp.writelines(self._headers)
-        self._headers = []
-
-    def startbody(self, ctype, plist=[], prefix=1):
-        """Returns a file-like object for writing the body of the message.
-
-        The content-type is set to the provided ctype, and the optional
-        parameter, plist, provides additional parameters for the
-        content-type declaration.  The optional argument prefix determines
-        where the header is inserted; 0 means append at the end, 1 means
-        insert at the start. The default is to insert at the start.
-
-        """
-        for name, value in plist:
-            ctype = ctype + ';\n %s=\"%s\"' % (name, value)
-        self.addheader("Content-Type", ctype, prefix=prefix)
-        self.flushheaders()
-        self._fp.write("\n")
-        return self._fp
-
-    def startmultipartbody(self, subtype, boundary=None, plist=[], prefix=1):
-        """Returns a file-like object for writing the body of the message.
-
-        Additionally, this method initializes the multi-part code, where the
-        subtype parameter provides the multipart subtype, the boundary
-        parameter may provide a user-defined boundary specification, and the
-        plist parameter provides optional parameters for the subtype.  The
-        optional argument, prefix, determines where the header is inserted;
-        0 means append at the end, 1 means insert at the start. The default
-        is to insert at the start.  Subparts should be created using the
-        nextpart() method.
-
-        """
-        self._boundary = boundary or mimetools.choose_boundary()
-        return self.startbody("multipart/" + subtype,
-                              [("boundary", self._boundary)] + plist,
-                              prefix=prefix)
-
-    def nextpart(self):
-        """Returns a new instance of MimeWriter which represents an
-        individual part in a multipart message.
-
-        This may be used to write the part as well as used for creating
-        recursively complex multipart messages. The message must first be
-        initialized with the startmultipartbody() method before using the
-        nextpart() method.
-
-        """
-        self._fp.write("\n--" + self._boundary + "\n")
-        return self.__class__(self._fp)
-
-    def lastpart(self):
-        """This is used to designate the last part of a multipart message.
-
-        It should always be used when writing multipart messages.
-
-        """
-        self._fp.write("\n--" + self._boundary + "--\n")
-
-
-if __name__ == '__main__':
-    import test.test_MimeWriter

Modified: python/branches/py3k-struni/Lib/SocketServer.py
==============================================================================
--- python/branches/py3k-struni/Lib/SocketServer.py	(original)
+++ python/branches/py3k-struni/Lib/SocketServer.py	Thu Jun  7 01:52:48 2007
@@ -518,12 +518,9 @@
         self.request = request
         self.client_address = client_address
         self.server = server
-        try:
-            self.setup()
-            self.handle()
-            self.finish()
-        finally:
-            sys.exc_traceback = None    # Help garbage collection
+        self.setup()
+        self.handle()
+        self.finish()
 
     def setup(self):
         pass

Modified: python/branches/py3k-struni/Lib/bsddb/test/test_thread.py
==============================================================================
--- python/branches/py3k-struni/Lib/bsddb/test/test_thread.py	(original)
+++ python/branches/py3k-struni/Lib/bsddb/test/test_thread.py	Thu Jun  7 01:52:48 2007
@@ -10,12 +10,6 @@
 from pprint import pprint
 from random import random
 
-try:
-    True, False
-except NameError:
-    True = 1
-    False = 0
-
 DASH = '-'
 
 try:

Modified: python/branches/py3k-struni/Lib/ctypes/wintypes.py
==============================================================================
--- python/branches/py3k-struni/Lib/ctypes/wintypes.py	(original)
+++ python/branches/py3k-struni/Lib/ctypes/wintypes.py	Thu Jun  7 01:52:48 2007
@@ -147,7 +147,7 @@
                 ("dwReserved0", DWORD),
                 ("dwReserved1", DWORD),
                 ("cFileName", c_char * MAX_PATH),
-                ("cAlternameFileName", c_char * 14)]
+                ("cAlternateFileName", c_char * 14)]
 
 class WIN32_FIND_DATAW(Structure):
     _fields_ = [("dwFileAttributes", DWORD),
@@ -159,7 +159,7 @@
                 ("dwReserved0", DWORD),
                 ("dwReserved1", DWORD),
                 ("cFileName", c_wchar * MAX_PATH),
-                ("cAlternameFileName", c_wchar * 14)]
+                ("cAlternateFileName", c_wchar * 14)]
 
 __all__ = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE',
            'DWORD', 'FILETIME', 'HACCEL', 'HANDLE', 'HBITMAP', 'HBRUSH',

Modified: python/branches/py3k-struni/Lib/dis.py
==============================================================================
--- python/branches/py3k-struni/Lib/dis.py	(original)
+++ python/branches/py3k-struni/Lib/dis.py	Thu Jun  7 01:52:48 2007
@@ -23,13 +23,10 @@
     if hasattr(x, '__code__'):
         x = x.__code__
     if hasattr(x, '__dict__'):
-        items = x.__dict__.items()
-        items.sort()
+        items = sorted(x.__dict__.items())
         for name, x1 in items:
-            if type(x1) in (types.MethodType,
-                            types.FunctionType,
-                            types.CodeType,
-                            types.ClassType):
+            if isinstance(x1, (types.MethodType, types.FunctionType,
+                               types.CodeType, types.ClassType, type)):
                 print("Disassembly of %s:" % name)
                 try:
                     dis(x1)
@@ -41,9 +38,8 @@
     elif isinstance(x, str):
         disassemble_string(x)
     else:
-        raise TypeError, \
-              "don't know how to disassemble %s objects" % \
-              type(x).__name__
+        raise TypeError("don't know how to disassemble %s objects" %
+                        type(x).__name__)
 
 def distb(tb=None):
     """Disassemble a traceback (default: last traceback)."""

Modified: python/branches/py3k-struni/Lib/idlelib/StackViewer.py
==============================================================================
--- python/branches/py3k-struni/Lib/idlelib/StackViewer.py	(original)
+++ python/branches/py3k-struni/Lib/idlelib/StackViewer.py	Thu Jun  7 01:52:48 2007
@@ -120,18 +120,3 @@
             item = make_objecttreeitem(key + " =", value, setfunction)
             sublist.append(item)
         return sublist
-
-
-def _test():
-    try:
-        import testcode
-        reload(testcode)
-    except:
-        sys.last_type, sys.last_value, sys.last_traceback = sys.exc_info()
-    from Tkinter import Tk
-    root = Tk()
-    StackBrowser(None, top=root)
-    root.mainloop()
-
-if __name__ == "__main__":
-    _test()

Modified: python/branches/py3k-struni/Lib/ihooks.py
==============================================================================
--- python/branches/py3k-struni/Lib/ihooks.py	(original)
+++ python/branches/py3k-struni/Lib/ihooks.py	Thu Jun  7 01:52:48 2007
@@ -45,9 +45,7 @@
 If a module importer class supports dotted names, its import_module()
 must return a different value depending on whether it is called on
 behalf of a "from ... import ..." statement or not.  (This is caused
-by the way the __import__ hook is used by the Python interpreter.)  It
-would also do wise to install a different version of reload().
-
+by the way the __import__ hook is used by the Python interpreter.)
 """
 
 
@@ -379,17 +377,14 @@
 
     def install(self):
         self.save_import_module = __builtin__.__import__
-        self.save_reload = __builtin__.reload
         if not hasattr(__builtin__, 'unload'):
             __builtin__.unload = None
         self.save_unload = __builtin__.unload
         __builtin__.__import__ = self.import_module
-        __builtin__.reload = self.reload
         __builtin__.unload = self.unload
 
     def uninstall(self):
         __builtin__.__import__ = self.save_import_module
-        __builtin__.reload = self.save_reload
         __builtin__.unload = self.save_unload
         if not __builtin__.unload:
             del __builtin__.unload

Modified: python/branches/py3k-struni/Lib/imputil.py
==============================================================================
--- python/branches/py3k-struni/Lib/imputil.py	(original)
+++ python/branches/py3k-struni/Lib/imputil.py	Thu Jun  7 01:52:48 2007
@@ -40,9 +40,6 @@
         self.namespace = namespace
         namespace['__import__'] = self._import_hook
 
-        ### fix this
-        #namespace['reload'] = self._reload_hook
-
     def uninstall(self):
         "Restore the previous import mechanism."
         self.namespace['__import__'] = self.previous_importer
@@ -194,22 +191,6 @@
                 return module
         return None
 
-    def _reload_hook(self, module):
-        "Python calls this hook to reload a module."
-
-        # reloading of a module may or may not be possible (depending on the
-        # importer), but at least we can validate that it's ours to reload
-        importer = module.__dict__.get('__importer__')
-        if not importer:
-            ### oops. now what...
-            pass
-
-        # okay. it is using the imputil system, and we must delegate it, but
-        # we don't know what to do (yet)
-        ### we should blast the module dict and do another get_code(). need to
-        ### flesh this out and add proper docco...
-        raise SystemError, "reload not yet implemented"
-
 
 class Importer:
     "Base class for replacing standard import functions."
@@ -682,7 +663,6 @@
 #   flag to force absolute imports? (speeds _determine_import_context and
 #       checking for a relative module)
 #   insert names of archives into sys.path  (see quote below)
-#   note: reload does NOT blast module dict
 #   shift import mechanisms and policies around; provide for hooks, overrides
 #       (see quote below)
 #   add get_source stuff

Modified: python/branches/py3k-struni/Lib/logging/__init__.py
==============================================================================
--- python/branches/py3k-struni/Lib/logging/__init__.py	(original)
+++ python/branches/py3k-struni/Lib/logging/__init__.py	Thu Jun  7 01:52:48 2007
@@ -66,7 +66,7 @@
     try:
         raise Exception
     except:
-        return sys.exc_traceback.tb_frame.f_back
+        return sys.exc_info()[2].tb_frame.f_back
 
 if hasattr(sys, '_getframe'): currentframe = lambda: sys._getframe(3)
 # done filching

Modified: python/branches/py3k-struni/Lib/logging/handlers.py
==============================================================================
--- python/branches/py3k-struni/Lib/logging/handlers.py	(original)
+++ python/branches/py3k-struni/Lib/logging/handlers.py	Thu Jun  7 01:52:48 2007
@@ -629,7 +629,8 @@
         """
         Initialize a handler.
 
-        If address is specified as a string, UNIX socket is used.
+        If address is specified as a string, a UNIX socket is used. To log to a
+        local syslogd, "SysLogHandler(address="/dev/log")" can be used.
         If facility is not specified, LOG_USER is used.
         """
         logging.Handler.__init__(self)

Deleted: /python/branches/py3k-struni/Lib/mimify.py
==============================================================================
--- /python/branches/py3k-struni/Lib/mimify.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,464 +0,0 @@
-#! /usr/bin/env python
-
-"""Mimification and unmimification of mail messages.
-
-Decode quoted-printable parts of a mail message or encode using
-quoted-printable.
-
-Usage:
-        mimify(input, output)
-        unmimify(input, output, decode_base64 = 0)
-to encode and decode respectively.  Input and output may be the name
-of a file or an open file object.  Only a readline() method is used
-on the input file, only a write() method is used on the output file.
-When using file names, the input and output file names may be the
-same.
-
-Interactive usage:
-        mimify.py -e [infile [outfile]]
-        mimify.py -d [infile [outfile]]
-to encode and decode respectively.  Infile defaults to standard
-input and outfile to standard output.
-"""
-
-# Configure
-MAXLEN = 200    # if lines longer than this, encode as quoted-printable
-CHARSET = 'ISO-8859-1'  # default charset for non-US-ASCII mail
-QUOTE = '> '            # string replies are quoted with
-# End configure
-
-import re
-
-__all__ = ["mimify","unmimify","mime_encode_header","mime_decode_header"]
-
-qp = re.compile('^content-transfer-encoding:\\s*quoted-printable', re.I)
-base64_re = re.compile('^content-transfer-encoding:\\s*base64', re.I)
-mp = re.compile('^content-type:.*multipart/.*boundary="?([^;"\n]*)', re.I|re.S)
-chrset = re.compile('^(content-type:.*charset=")(us-ascii|iso-8859-[0-9]+)(".*)', re.I|re.S)
-he = re.compile('^-*\n')
-mime_code = re.compile('=([0-9a-f][0-9a-f])', re.I)
-mime_head = re.compile('=\\?iso-8859-1\\?q\\?([^? \t\n]+)\\?=', re.I)
-repl = re.compile('^subject:\\s+re: ', re.I)
-
-class File:
-    """A simple fake file object that knows about limited read-ahead and
-    boundaries.  The only supported method is readline()."""
-
-    def __init__(self, file, boundary):
-        self.file = file
-        self.boundary = boundary
-        self.peek = None
-
-    def readline(self):
-        if self.peek is not None:
-            return ''
-        line = self.file.readline()
-        if not line:
-            return line
-        if self.boundary:
-            if line == self.boundary + '\n':
-                self.peek = line
-                return ''
-            if line == self.boundary + '--\n':
-                self.peek = line
-                return ''
-        return line
-
-class HeaderFile:
-    def __init__(self, file):
-        self.file = file
-        self.peek = None
-
-    def readline(self):
-        if self.peek is not None:
-            line = self.peek
-            self.peek = None
-        else:
-            line = self.file.readline()
-        if not line:
-            return line
-        if he.match(line):
-            return line
-        while 1:
-            self.peek = self.file.readline()
-            if len(self.peek) == 0 or \
-               (self.peek[0] != ' ' and self.peek[0] != '\t'):
-                return line
-            line = line + self.peek
-            self.peek = None
-
-def mime_decode(line):
-    """Decode a single line of quoted-printable text to 8bit."""
-    newline = ''
-    pos = 0
-    while 1:
-        res = mime_code.search(line, pos)
-        if res is None:
-            break
-        newline = newline + line[pos:res.start(0)] + \
-                  chr(int(res.group(1), 16))
-        pos = res.end(0)
-    return newline + line[pos:]
-
-def mime_decode_header(line):
-    """Decode a header line to 8bit."""
-    newline = ''
-    pos = 0
-    while 1:
-        res = mime_head.search(line, pos)
-        if res is None:
-            break
-        match = res.group(1)
-        # convert underscores to spaces (before =XX conversion!)
-        match = ' '.join(match.split('_'))
-        newline = newline + line[pos:res.start(0)] + mime_decode(match)
-        pos = res.end(0)
-    return newline + line[pos:]
-
-def unmimify_part(ifile, ofile, decode_base64 = 0):
-    """Convert a quoted-printable part of a MIME mail message to 8bit."""
-    multipart = None
-    quoted_printable = 0
-    is_base64 = 0
-    is_repl = 0
-    if ifile.boundary and ifile.boundary[:2] == QUOTE:
-        prefix = QUOTE
-    else:
-        prefix = ''
-
-    # read header
-    hfile = HeaderFile(ifile)
-    while 1:
-        line = hfile.readline()
-        if not line:
-            return
-        if prefix and line[:len(prefix)] == prefix:
-            line = line[len(prefix):]
-            pref = prefix
-        else:
-            pref = ''
-        line = mime_decode_header(line)
-        if qp.match(line):
-            quoted_printable = 1
-            continue        # skip this header
-        if decode_base64 and base64_re.match(line):
-            is_base64 = 1
-            continue
-        ofile.write(pref + line)
-        if not prefix and repl.match(line):
-            # we're dealing with a reply message
-            is_repl = 1
-        mp_res = mp.match(line)
-        if mp_res:
-            multipart = '--' + mp_res.group(1)
-        if he.match(line):
-            break
-    if is_repl and (quoted_printable or multipart):
-        is_repl = 0
-
-    # read body
-    while 1:
-        line = ifile.readline()
-        if not line:
-            return
-        line = re.sub(mime_head, '\\1', line)
-        if prefix and line[:len(prefix)] == prefix:
-            line = line[len(prefix):]
-            pref = prefix
-        else:
-            pref = ''
-##              if is_repl and len(line) >= 4 and line[:4] == QUOTE+'--' and line[-3:] != '--\n':
-##                      multipart = line[:-1]
-        while multipart:
-            if line == multipart + '--\n':
-                ofile.write(pref + line)
-                multipart = None
-                line = None
-                break
-            if line == multipart + '\n':
-                ofile.write(pref + line)
-                nifile = File(ifile, multipart)
-                unmimify_part(nifile, ofile, decode_base64)
-                line = nifile.peek
-                if not line:
-                    # premature end of file
-                    break
-                continue
-            # not a boundary between parts
-            break
-        if line and quoted_printable:
-            while line[-2:] == '=\n':
-                line = line[:-2]
-                newline = ifile.readline()
-                if newline[:len(QUOTE)] == QUOTE:
-                    newline = newline[len(QUOTE):]
-                line = line + newline
-            line = mime_decode(line)
-        if line and is_base64 and not pref:
-            import base64
-            line = base64.decodestring(line)
-        if line:
-            ofile.write(pref + line)
-
-def unmimify(infile, outfile, decode_base64 = 0):
-    """Convert quoted-printable parts of a MIME mail message to 8bit."""
-    if type(infile) == type(''):
-        ifile = open(infile)
-        if type(outfile) == type('') and infile == outfile:
-            import os
-            d, f = os.path.split(infile)
-            os.rename(infile, os.path.join(d, ',' + f))
-    else:
-        ifile = infile
-    if type(outfile) == type(''):
-        ofile = open(outfile, 'w')
-    else:
-        ofile = outfile
-    nifile = File(ifile, None)
-    unmimify_part(nifile, ofile, decode_base64)
-    ofile.flush()
-
-mime_char = re.compile('[=\177-\377]') # quote these chars in body
-mime_header_char = re.compile('[=?\177-\377]') # quote these in header
-
-def mime_encode(line, header):
-    """Code a single line as quoted-printable.
-    If header is set, quote some extra characters."""
-    if header:
-        reg = mime_header_char
-    else:
-        reg = mime_char
-    newline = ''
-    pos = 0
-    if len(line) >= 5 and line[:5] == 'From ':
-        # quote 'From ' at the start of a line for stupid mailers
-        newline = ('=%02x' % ord('F')).upper()
-        pos = 1
-    while 1:
-        res = reg.search(line, pos)
-        if res is None:
-            break
-        newline = newline + line[pos:res.start(0)] + \
-                  ('=%02x' % ord(res.group(0))).upper()
-        pos = res.end(0)
-    line = newline + line[pos:]
-
-    newline = ''
-    while len(line) >= 75:
-        i = 73
-        while line[i] == '=' or line[i-1] == '=':
-            i = i - 1
-        i = i + 1
-        newline = newline + line[:i] + '=\n'
-        line = line[i:]
-    return newline + line
-
-mime_header = re.compile('([ \t(]|^)([-a-zA-Z0-9_+]*[\177-\377][-a-zA-Z0-9_+\177-\377]*)(?=[ \t)]|\n)')
-
-def mime_encode_header(line):
-    """Code a single header line as quoted-printable."""
-    newline = ''
-    pos = 0
-    while 1:
-        res = mime_header.search(line, pos)
-        if res is None:
-            break
-        newline = '%s%s%s=?%s?Q?%s?=' % \
-                  (newline, line[pos:res.start(0)], res.group(1),
-                   CHARSET, mime_encode(res.group(2), 1))
-        pos = res.end(0)
-    return newline + line[pos:]
-
-mv = re.compile('^mime-version:', re.I)
-cte = re.compile('^content-transfer-encoding:', re.I)
-iso_char = re.compile('[\177-\377]')
-
-def mimify_part(ifile, ofile, is_mime):
-    """Convert an 8bit part of a MIME mail message to quoted-printable."""
-    has_cte = is_qp = is_base64 = 0
-    multipart = None
-    must_quote_body = must_quote_header = has_iso_chars = 0
-
-    header = []
-    header_end = ''
-    message = []
-    message_end = ''
-    # read header
-    hfile = HeaderFile(ifile)
-    while 1:
-        line = hfile.readline()
-        if not line:
-            break
-        if not must_quote_header and iso_char.search(line):
-            must_quote_header = 1
-        if mv.match(line):
-            is_mime = 1
-        if cte.match(line):
-            has_cte = 1
-            if qp.match(line):
-                is_qp = 1
-            elif base64_re.match(line):
-                is_base64 = 1
-        mp_res = mp.match(line)
-        if mp_res:
-            multipart = '--' + mp_res.group(1)
-        if he.match(line):
-            header_end = line
-            break
-        header.append(line)
-
-    # read body
-    while 1:
-        line = ifile.readline()
-        if not line:
-            break
-        if multipart:
-            if line == multipart + '--\n':
-                message_end = line
-                break
-            if line == multipart + '\n':
-                message_end = line
-                break
-        if is_base64:
-            message.append(line)
-            continue
-        if is_qp:
-            while line[-2:] == '=\n':
-                line = line[:-2]
-                newline = ifile.readline()
-                if newline[:len(QUOTE)] == QUOTE:
-                    newline = newline[len(QUOTE):]
-                line = line + newline
-            line = mime_decode(line)
-        message.append(line)
-        if not has_iso_chars:
-            if iso_char.search(line):
-                has_iso_chars = must_quote_body = 1
-        if not must_quote_body:
-            if len(line) > MAXLEN:
-                must_quote_body = 1
-
-    # convert and output header and body
-    for line in header:
-        if must_quote_header:
-            line = mime_encode_header(line)
-        chrset_res = chrset.match(line)
-        if chrset_res:
-            if has_iso_chars:
-                # change us-ascii into iso-8859-1
-                if chrset_res.group(2).lower() == 'us-ascii':
-                    line = '%s%s%s' % (chrset_res.group(1),
-                                       CHARSET,
-                                       chrset_res.group(3))
-            else:
-                # change iso-8859-* into us-ascii
-                line = '%sus-ascii%s' % chrset_res.group(1, 3)
-        if has_cte and cte.match(line):
-            line = 'Content-Transfer-Encoding: '
-            if is_base64:
-                line = line + 'base64\n'
-            elif must_quote_body:
-                line = line + 'quoted-printable\n'
-            else:
-                line = line + '7bit\n'
-        ofile.write(line)
-    if (must_quote_header or must_quote_body) and not is_mime:
-        ofile.write('Mime-Version: 1.0\n')
-        ofile.write('Content-Type: text/plain; ')
-        if has_iso_chars:
-            ofile.write('charset="%s"\n' % CHARSET)
-        else:
-            ofile.write('charset="us-ascii"\n')
-    if must_quote_body and not has_cte:
-        ofile.write('Content-Transfer-Encoding: quoted-printable\n')
-    ofile.write(header_end)
-
-    for line in message:
-        if must_quote_body:
-            line = mime_encode(line, 0)
-        ofile.write(line)
-    ofile.write(message_end)
-
-    line = message_end
-    while multipart:
-        if line == multipart + '--\n':
-            # read bit after the end of the last part
-            while 1:
-                line = ifile.readline()
-                if not line:
-                    return
-                if must_quote_body:
-                    line = mime_encode(line, 0)
-                ofile.write(line)
-        if line == multipart + '\n':
-            nifile = File(ifile, multipart)
-            mimify_part(nifile, ofile, 1)
-            line = nifile.peek
-            if not line:
-                # premature end of file
-                break
-            ofile.write(line)
-            continue
-        # unexpectedly no multipart separator--copy rest of file
-        while 1:
-            line = ifile.readline()
-            if not line:
-                return
-            if must_quote_body:
-                line = mime_encode(line, 0)
-            ofile.write(line)
-
-def mimify(infile, outfile):
-    """Convert 8bit parts of a MIME mail message to quoted-printable."""
-    if type(infile) == type(''):
-        ifile = open(infile)
-        if type(outfile) == type('') and infile == outfile:
-            import os
-            d, f = os.path.split(infile)
-            os.rename(infile, os.path.join(d, ',' + f))
-    else:
-        ifile = infile
-    if type(outfile) == type(''):
-        ofile = open(outfile, 'w')
-    else:
-        ofile = outfile
-    nifile = File(ifile, None)
-    mimify_part(nifile, ofile, 0)
-    ofile.flush()
-
-import sys
-if __name__ == '__main__' or (len(sys.argv) > 0 and sys.argv[0] == 'mimify'):
-    import getopt
-    usage = 'Usage: mimify [-l len] -[ed] [infile [outfile]]'
-
-    decode_base64 = 0
-    opts, args = getopt.getopt(sys.argv[1:], 'l:edb')
-    if len(args) not in (0, 1, 2):
-        print(usage)
-        sys.exit(1)
-    if (('-e', '') in opts) == (('-d', '') in opts) or \
-       ((('-b', '') in opts) and (('-d', '') not in opts)):
-        print(usage)
-        sys.exit(1)
-    for o, a in opts:
-        if o == '-e':
-            encode = mimify
-        elif o == '-d':
-            encode = unmimify
-        elif o == '-l':
-            try:
-                MAXLEN = int(a)
-            except (ValueError, OverflowError):
-                print(usage)
-                sys.exit(1)
-        elif o == '-b':
-            decode_base64 = 1
-    if len(args) == 0:
-        encode_args = (sys.stdin, sys.stdout)
-    elif len(args) == 1:
-        encode_args = (args[0], sys.stdout)
-    else:
-        encode_args = (args[0], args[1])
-    if decode_base64:
-        encode_args = encode_args + (decode_base64,)
-    encode(*encode_args)

Modified: python/branches/py3k-struni/Lib/optparse.py
==============================================================================
--- python/branches/py3k-struni/Lib/optparse.py	(original)
+++ python/branches/py3k-struni/Lib/optparse.py	Thu Jun  7 01:52:48 2007
@@ -816,12 +816,6 @@
 SUPPRESS_HELP = "SUPPRESS"+"HELP"
 SUPPRESS_USAGE = "SUPPRESS"+"USAGE"
 
-# For compatibility with Python 2.2
-try:
-    True, False
-except NameError:
-    (True, False) = (1, 0)
-
 def isbasestring(x):
     return isinstance(x, basestring)
 

Modified: python/branches/py3k-struni/Lib/os.py
==============================================================================
--- python/branches/py3k-struni/Lib/os.py	(original)
+++ python/branches/py3k-struni/Lib/os.py	Thu Jun  7 01:52:48 2007
@@ -388,13 +388,14 @@
     else:
         envpath = defpath
     PATH = envpath.split(pathsep)
-    saved_exc = None
+    last_exc = saved_exc = None
     saved_tb = None
     for dir in PATH:
         fullname = path.join(dir, file)
         try:
             func(fullname, *argrest)
         except error as e:
+            last_exc = e
             tb = sys.exc_info()[2]
             if (e.errno != ENOENT and e.errno != ENOTDIR
                 and saved_exc is None):
@@ -402,7 +403,7 @@
                 saved_tb = tb
     if saved_exc:
         raise error, saved_exc, saved_tb
-    raise error, e, tb
+    raise error, last_exc, tb
 
 # Change environ to automatically call putenv() if it exists
 try:

Modified: python/branches/py3k-struni/Lib/plat-mac/buildtools.py
==============================================================================
--- python/branches/py3k-struni/Lib/plat-mac/buildtools.py	(original)
+++ python/branches/py3k-struni/Lib/plat-mac/buildtools.py	Thu Jun  7 01:52:48 2007
@@ -13,6 +13,9 @@
 import EasyDialogs
 import shutil
 
+import warnings
+warnings.warn("the buildtools module is deprecated", DeprecationWarning, 2)
+
 
 BuildError = "BuildError"
 

Deleted: /python/branches/py3k-struni/Lib/plat-mac/cfmfile.py
==============================================================================
--- /python/branches/py3k-struni/Lib/plat-mac/cfmfile.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,183 +0,0 @@
-"""codefragments.py -- wrapper to modify code fragments."""
-
-# (c) 1998, Just van Rossum, Letterror
-
-__version__ = "0.8b3"
-__author__ = "jvr"
-
-import Carbon.File
-import struct
-from Carbon import Res
-import os
-import sys
-
-DEBUG = 0
-
-error = "cfm.error"
-
-BUFSIZE = 0x80000
-
-def mergecfmfiles(srclist, dst, architecture = 'fat'):
-    """Merge all files in srclist into a new file dst.
-
-    If architecture is given, only code fragments of that type will be used:
-    "pwpc" for PPC, "m68k" for cfm68k. This does not work for "classic"
-    68k code, since it does not use code fragments to begin with.
-    If architecture is None, all fragments will be used, enabling FAT binaries.
-    """
-
-    srclist = list(srclist)
-    for i in range(len(srclist)):
-        srclist[i] = Carbon.File.pathname(srclist[i])
-    dst = Carbon.File.pathname(dst)
-
-    dstfile = open(dst, "wb")
-    rf = Res.FSpOpenResFile(dst, 3)
-    try:
-        dstcfrg = CfrgResource()
-        for src in srclist:
-            srccfrg = CfrgResource(src)
-            for frag in srccfrg.fragments:
-                if frag.architecture == 'pwpc' and architecture == 'm68k':
-                    continue
-                if frag.architecture == 'm68k' and architecture == 'pwpc':
-                    continue
-                dstcfrg.append(frag)
-
-                frag.copydata(dstfile)
-
-        cfrgres = Res.Resource(dstcfrg.build())
-        Res.UseResFile(rf)
-        cfrgres.AddResource('cfrg', 0, "")
-    finally:
-        dstfile.close()
-        rf = Res.CloseResFile(rf)
-
-
-class CfrgResource:
-
-    def __init__(self, path = None):
-        self.version = 1
-        self.fragments = []
-        self.path = path
-        if path is not None and os.path.exists(path):
-            currentresref = Res.CurResFile()
-            resref = Res.FSpOpenResFile(path, 1)
-            Res.UseResFile(resref)
-            try:
-                try:
-                    data = Res.Get1Resource('cfrg', 0).data
-                except Res.Error:
-                    raise Res.Error, "no 'cfrg' resource found", sys.exc_traceback
-            finally:
-                Res.CloseResFile(resref)
-                Res.UseResFile(currentresref)
-            self.parse(data)
-            if self.version != 1:
-                raise error, "unknown 'cfrg' resource format"
-
-    def parse(self, data):
-        (res1, res2, self.version,
-            res3, res4, res5, res6,
-            self.memberCount) = struct.unpack("8l", data[:32])
-        data = data[32:]
-        while data:
-            frag = FragmentDescriptor(self.path, data)
-            data = data[frag.memberSize:]
-            self.fragments.append(frag)
-
-    def build(self):
-        self.memberCount = len(self.fragments)
-        data = struct.pack("8l", 0, 0, self.version, 0, 0, 0, 0, self.memberCount)
-        for frag in self.fragments:
-            data = data + frag.build()
-        return data
-
-    def append(self, frag):
-        self.fragments.append(frag)
-
-
-class FragmentDescriptor:
-
-    def __init__(self, path, data = None):
-        self.path = path
-        if data is not None:
-            self.parse(data)
-
-    def parse(self, data):
-        self.architecture = data[:4]
-        (   self.updatelevel,
-            self.currentVersion,
-            self.oldDefVersion,
-            self.stacksize,
-            self.applibdir,
-            self.fragtype,
-            self.where,
-            self.offset,
-            self.length,
-            self.res1, self.res2,
-            self.memberSize,) = struct.unpack("4lhBB4lh", data[4:42])
-        pname = data[42:self.memberSize]
-        self.name = pname[1:1+ord(pname[0])]
-
-    def build(self):
-        data = self.architecture
-        data = data + struct.pack("4lhBB4l",
-                self.updatelevel,
-                self.currentVersion,
-                self.oldDefVersion,
-                self.stacksize,
-                self.applibdir,
-                self.fragtype,
-                self.where,
-                self.offset,
-                self.length,
-                self.res1, self.res2)
-        self.memberSize = len(data) + 2 + 1 + len(self.name)
-        # pad to 4 byte boundaries
-        if self.memberSize % 4:
-            self.memberSize = self.memberSize + 4 - (self.memberSize % 4)
-        data = data + struct.pack("hb", self.memberSize, len(self.name))
-        data = data + self.name
-        data = data + '\000' * (self.memberSize - len(data))
-        return data
-
-    def getfragment(self):
-        if self.where != 1:
-            raise error, "can't read fragment, unsupported location"
-        f = open(self.path, "rb")
-        f.seek(self.offset)
-        if self.length:
-            frag = f.read(self.length)
-        else:
-            frag = f.read()
-        f.close()
-        return frag
-
-    def copydata(self, outfile):
-        if self.where != 1:
-            raise error, "can't read fragment, unsupported location"
-        infile = open(self.path, "rb")
-        if self.length == 0:
-            infile.seek(0, 2)
-            self.length = infile.tell()
-
-        # Position input file and record new offset from output file
-        infile.seek(self.offset)
-
-        # pad to 16 byte boundaries
-        offset = outfile.tell()
-        if offset % 16:
-            offset = offset + 16 - (offset % 16)
-        outfile.seek(offset)
-        self.offset = offset
-
-        l = self.length
-        while l:
-            if l > BUFSIZE:
-                outfile.write(infile.read(BUFSIZE))
-                l = l - BUFSIZE
-            else:
-                outfile.write(infile.read(l))
-                l = 0
-        infile.close()

Deleted: /python/branches/py3k-struni/Lib/posixfile.py
==============================================================================
--- /python/branches/py3k-struni/Lib/posixfile.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,237 +0,0 @@
-"""Extended file operations available in POSIX.
-
-f = posixfile.open(filename, [mode, [bufsize]])
-      will create a new posixfile object
-
-f = posixfile.fileopen(fileobject)
-      will create a posixfile object from a builtin file object
-
-f.file()
-      will return the original builtin file object
-
-f.dup()
-      will return a new file object based on a new filedescriptor
-
-f.dup2(fd)
-      will return a new file object based on the given filedescriptor
-
-f.flags(mode)
-      will turn on the associated flag (merge)
-      mode can contain the following characters:
-
-  (character representing a flag)
-      a       append only flag
-      c       close on exec flag
-      n       no delay flag
-      s       synchronization flag
-  (modifiers)
-      !       turn flags 'off' instead of default 'on'
-      =       copy flags 'as is' instead of default 'merge'
-      ?       return a string in which the characters represent the flags
-              that are set
-
-      note: - the '!' and '=' modifiers are mutually exclusive.
-            - the '?' modifier will return the status of the flags after they
-              have been changed by other characters in the mode string
-
-f.lock(mode [, len [, start [, whence]]])
-      will (un)lock a region
-      mode can contain the following characters:
-
-  (character representing type of lock)
-      u       unlock
-      r       read lock
-      w       write lock
-  (modifiers)
-      |       wait until the lock can be granted
-      ?       return the first lock conflicting with the requested lock
-              or 'None' if there is no conflict. The lock returned is in the
-              format (mode, len, start, whence, pid) where mode is a
-              character representing the type of lock ('r' or 'w')
-
-      note: - the '?' modifier prevents a region from being locked; it is
-              query only
-"""
-import warnings
-warnings.warn("The posixfile module is deprecated; "
-                "fcntl.lockf() provides better locking", DeprecationWarning, 2)
-
-class _posixfile_:
-    """File wrapper class that provides extra POSIX file routines."""
-
-    states = ['open', 'closed']
-
-    #
-    # Internal routines
-    #
-    def __repr__(self):
-        file = self._file_
-        return "<%s posixfile '%s', mode '%s' at %s>" % \
-                (self.states[file.closed], file.name, file.mode, \
-                 hex(id(self))[2:])
-
-    #
-    # Initialization routines
-    #
-    def open(self, name, mode='r', bufsize=-1):
-        import __builtin__
-        return self.fileopen(__builtin__.open(name, mode, bufsize))
-
-    def fileopen(self, file):
-        import types
-        if repr(type(file)) != "<type 'file'>":
-            raise TypeError, 'posixfile.fileopen() arg must be file object'
-        self._file_  = file
-        # Copy basic file methods
-        for maybemethod in dir(file):
-            if not maybemethod.startswith('_'):
-                attr = getattr(file, maybemethod)
-                if isinstance(attr, types.BuiltinMethodType):
-                    setattr(self, maybemethod, attr)
-        return self
-
-    #
-    # New methods
-    #
-    def file(self):
-        return self._file_
-
-    def dup(self):
-        import posix
-
-        if not hasattr(posix, 'fdopen'):
-            raise AttributeError, 'dup() method unavailable'
-
-        return posix.fdopen(posix.dup(self._file_.fileno()), self._file_.mode)
-
-    def dup2(self, fd):
-        import posix
-
-        if not hasattr(posix, 'fdopen'):
-            raise AttributeError, 'dup() method unavailable'
-
-        posix.dup2(self._file_.fileno(), fd)
-        return posix.fdopen(fd, self._file_.mode)
-
-    def flags(self, *which):
-        import fcntl, os
-
-        if which:
-            if len(which) > 1:
-                raise TypeError, 'Too many arguments'
-            which = which[0]
-        else: which = '?'
-
-        l_flags = 0
-        if 'n' in which: l_flags = l_flags | os.O_NDELAY
-        if 'a' in which: l_flags = l_flags | os.O_APPEND
-        if 's' in which: l_flags = l_flags | os.O_SYNC
-
-        file = self._file_
-
-        if '=' not in which:
-            cur_fl = fcntl.fcntl(file.fileno(), fcntl.F_GETFL, 0)
-            if '!' in which: l_flags = cur_fl & ~ l_flags
-            else: l_flags = cur_fl | l_flags
-
-        l_flags = fcntl.fcntl(file.fileno(), fcntl.F_SETFL, l_flags)
-
-        if 'c' in which:
-            arg = ('!' not in which)    # 0 is don't, 1 is do close on exec
-            l_flags = fcntl.fcntl(file.fileno(), fcntl.F_SETFD, arg)
-
-        if '?' in which:
-            which = ''                  # Return current flags
-            l_flags = fcntl.fcntl(file.fileno(), fcntl.F_GETFL, 0)
-            if os.O_APPEND & l_flags: which = which + 'a'
-            if fcntl.fcntl(file.fileno(), fcntl.F_GETFD, 0) & 1:
-                which = which + 'c'
-            if os.O_NDELAY & l_flags: which = which + 'n'
-            if os.O_SYNC & l_flags: which = which + 's'
-            return which
-
-    def lock(self, how, *args):
-        import struct, fcntl
-
-        if 'w' in how: l_type = fcntl.F_WRLCK
-        elif 'r' in how: l_type = fcntl.F_RDLCK
-        elif 'u' in how: l_type = fcntl.F_UNLCK
-        else: raise TypeError, 'no type of lock specified'
-
-        if '|' in how: cmd = fcntl.F_SETLKW
-        elif '?' in how: cmd = fcntl.F_GETLK
-        else: cmd = fcntl.F_SETLK
-
-        l_whence = 0
-        l_start = 0
-        l_len = 0
-
-        if len(args) == 1:
-            l_len = args[0]
-        elif len(args) == 2:
-            l_len, l_start = args
-        elif len(args) == 3:
-            l_len, l_start, l_whence = args
-        elif len(args) > 3:
-            raise TypeError, 'too many arguments'
-
-        # Hack by davem at magnet.com to get locking to go on freebsd;
-        # additions for AIX by Vladimir.Marangozov at imag.fr
-        import sys, os
-        if sys.platform in ('netbsd1',
-                            'openbsd2',
-                            'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                            'freebsd6', 'freebsd7',
-                            'bsdos2', 'bsdos3', 'bsdos4'):
-            flock = struct.pack('lxxxxlxxxxlhh', \
-                  l_start, l_len, os.getpid(), l_type, l_whence)
-        elif sys.platform in ('aix3', 'aix4'):
-            flock = struct.pack('hhlllii', \
-                  l_type, l_whence, l_start, l_len, 0, 0, 0)
-        else:
-            flock = struct.pack('hhllhh', \
-                  l_type, l_whence, l_start, l_len, 0, 0)
-
-        flock = fcntl.fcntl(self._file_.fileno(), cmd, flock)
-
-        if '?' in how:
-            if sys.platform in ('netbsd1',
-                                'openbsd2',
-                                'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                                'bsdos2', 'bsdos3', 'bsdos4'):
-                l_start, l_len, l_pid, l_type, l_whence = \
-                    struct.unpack('lxxxxlxxxxlhh', flock)
-            elif sys.platform in ('aix3', 'aix4'):
-                l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \
-                    struct.unpack('hhlllii', flock)
-            elif sys.platform == "linux2":
-                l_type, l_whence, l_start, l_len, l_pid, l_sysid = \
-                    struct.unpack('hhllhh', flock)
-            else:
-                l_type, l_whence, l_start, l_len, l_sysid, l_pid = \
-                    struct.unpack('hhllhh', flock)
-
-            if l_type != fcntl.F_UNLCK:
-                if l_type == fcntl.F_RDLCK:
-                    return 'r', l_len, l_start, l_whence, l_pid
-                else:
-                    return 'w', l_len, l_start, l_whence, l_pid
-
-def open(name, mode='r', bufsize=-1):
-    """Public routine to open a file as a posixfile object."""
-    return _posixfile_().open(name, mode, bufsize)
-
-def fileopen(file):
-    """Public routine to get a posixfile object from a Python file object."""
-    return _posixfile_().fileopen(file)
-
-#
-# Constants
-#
-SEEK_SET = 0
-SEEK_CUR = 1
-SEEK_END = 2
-
-#
-# End of posixfile.py
-#

Modified: python/branches/py3k-struni/Lib/pydoc.py
==============================================================================
--- python/branches/py3k-struni/Lib/pydoc.py	(original)
+++ python/branches/py3k-struni/Lib/pydoc.py	Thu Jun  7 01:52:48 2007
@@ -271,12 +271,11 @@
         # that inherits from another module that has changed).
         if forceload and path in sys.modules:
             if path not in sys.builtin_module_names:
-                # Avoid simply calling reload() because it leaves names in
-                # the currently loaded module lying around if they're not
-                # defined in the new source file.  Instead, remove the
-                # module from sys.modules and re-import.  Also remove any
-                # submodules because they won't appear in the newly loaded
-                # module's namespace if they're already in sys.modules.
+                # Remove the module from sys.modules and re-import to try
+                # and avoid problems with partially loaded modules.
+                # Also remove any submodules because they won't appear
+                # in the newly loaded module's namespace if they're already
+                # in sys.modules.
                 subs = [m for m in sys.modules if m.startswith(path + '.')]
                 for key in [path] + subs:
                     # Prevent garbage collection.

Deleted: /python/branches/py3k-struni/Lib/sha.py
==============================================================================
--- /python/branches/py3k-struni/Lib/sha.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,11 +0,0 @@
-# $Id$
-#
-#  Copyright (C) 2005   Gregory P. Smith (greg at electricrain.com)
-#  Licensed to PSF under a Contributor Agreement.
-
-from hashlib import sha1 as sha
-new = sha
-
-blocksize = 1        # legacy value (wrong in any useful sense)
-digest_size = 20
-digestsize = 20

Modified: python/branches/py3k-struni/Lib/shlex.py
==============================================================================
--- python/branches/py3k-struni/Lib/shlex.py	(original)
+++ python/branches/py3k-struni/Lib/shlex.py	Thu Jun  7 01:52:48 2007
@@ -268,8 +268,8 @@
             raise StopIteration
         return token
 
-def split(s, comments=False):
-    lex = shlex(s, posix=True)
+def split(s, comments=False, posix=True):
+    lex = shlex(s, posix=posix)
     lex.whitespace_split = True
     if not comments:
         lex.commenters = ''

Modified: python/branches/py3k-struni/Lib/subprocess.py
==============================================================================
--- python/branches/py3k-struni/Lib/subprocess.py	(original)
+++ python/branches/py3k-struni/Lib/subprocess.py	Thu Jun  7 01:52:48 2007
@@ -340,13 +340,6 @@
 except:
     MAXFD = 256
 
-# True/False does not exist on 2.2.0
-try:
-    False
-except NameError:
-    False = 0
-    True = 1
-
 _active = []
 
 def _cleanup():
@@ -479,9 +472,10 @@
             if preexec_fn is not None:
                 raise ValueError("preexec_fn is not supported on Windows "
                                  "platforms")
-            if close_fds:
+            if close_fds and (stdin is not None or stdout is not None or
+                              stderr is not None):
                 raise ValueError("close_fds is not supported on Windows "
-                                 "platforms")
+                                 "platforms if you redirect stdin/stdout/stderr")
         else:
             # POSIX
             if startupinfo is not None:
@@ -740,9 +734,7 @@
                 hp, ht, pid, tid = CreateProcess(executable, args,
                                          # no special security
                                          None, None,
-                                         # must inherit handles to pass std
-                                         # handles
-                                         1,
+                                         int(not close_fds),
                                          creationflags,
                                          env,
                                          cwd,

Modified: python/branches/py3k-struni/Lib/tarfile.py
==============================================================================
--- python/branches/py3k-struni/Lib/tarfile.py	(original)
+++ python/branches/py3k-struni/Lib/tarfile.py	Thu Jun  7 01:52:48 2007
@@ -127,6 +127,17 @@
 PAX_FIELDS = ("path", "linkpath", "size", "mtime",
               "uid", "gid", "uname", "gname")
 
+# Fields in a pax header that are numbers, all other fields
+# are treated as strings.
+PAX_NUMBER_FIELDS = {
+    "atime": float,
+    "ctime": float,
+    "mtime": float,
+    "uid": int,
+    "gid": int,
+    "size": int
+}
+
 #---------------------------------------------------------
 # Bits used in the mode field, values in octal.
 #---------------------------------------------------------
@@ -156,7 +167,7 @@
 #---------------------------------------------------------
 ENCODING = sys.getfilesystemencoding()
 if ENCODING is None:
-    ENCODING = "ascii"
+    ENCODING = sys.getdefaultencoding()
 
 #---------------------------------------------------------
 # Some useful functions
@@ -220,6 +231,26 @@
         s = chr(0200) + s
     return s
 
+def uts(s, encoding, errors):
+    """Convert a unicode object to a string.
+    """
+    if errors == "utf-8":
+        # An extra error handler similar to the -o invalid=UTF-8 option
+        # in POSIX.1-2001. Replace untranslatable characters with their
+        # UTF-8 representation.
+        try:
+            return s.encode(encoding, "strict")
+        except UnicodeEncodeError:
+            x = []
+            for c in s:
+                try:
+                    x.append(c.encode(encoding, "strict"))
+                except UnicodeEncodeError:
+                    x.append(c.encode("utf8"))
+            return "".join(x)
+    else:
+        return s.encode(encoding, errors)
+
 def calc_chksums(buf):
     """Calculate the checksum for a member's header by summing up all
        characters except for the chksum field which is treated as if
@@ -924,7 +955,7 @@
     def __repr__(self):
         return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self))
 
-    def get_info(self):
+    def get_info(self, encoding, errors):
         """Return the TarInfo's attributes as a dictionary.
         """
         info = {
@@ -946,24 +977,29 @@
         if info["type"] == DIRTYPE and not info["name"].endswith("/"):
             info["name"] += "/"
 
+        for key in ("name", "linkname", "uname", "gname"):
+            if type(info[key]) is unicode:
+                info[key] = info[key].encode(encoding, errors)
+
         return info
 
-    def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING):
+    def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="strict"):
         """Return a tar header as a string of 512 byte blocks.
         """
+        info = self.get_info(encoding, errors)
+
         if format == USTAR_FORMAT:
-            return self.create_ustar_header()
+            return self.create_ustar_header(info)
         elif format == GNU_FORMAT:
-            return self.create_gnu_header()
+            return self.create_gnu_header(info)
         elif format == PAX_FORMAT:
-            return self.create_pax_header(encoding)
+            return self.create_pax_header(info, encoding, errors)
         else:
             raise ValueError("invalid format")
 
-    def create_ustar_header(self):
+    def create_ustar_header(self, info):
         """Return the object as a ustar header block.
         """
-        info = self.get_info()
         info["magic"] = POSIX_MAGIC
 
         if len(info["linkname"]) > LENGTH_LINK:
@@ -974,10 +1010,9 @@
 
         return self._create_header(info, USTAR_FORMAT)
 
-    def create_gnu_header(self):
+    def create_gnu_header(self, info):
         """Return the object as a GNU header block sequence.
         """
-        info = self.get_info()
         info["magic"] = GNU_MAGIC
 
         buf = ""
@@ -989,12 +1024,11 @@
 
         return buf + self._create_header(info, GNU_FORMAT)
 
-    def create_pax_header(self, encoding):
+    def create_pax_header(self, info, encoding, errors):
         """Return the object as a ustar header block. If it cannot be
            represented this way, prepend a pax extended header sequence
            with supplement information.
         """
-        info = self.get_info()
         info["magic"] = POSIX_MAGIC
         pax_headers = self.pax_headers.copy()
 
@@ -1004,7 +1038,11 @@
                 ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK),
                 ("uname", "uname", 32), ("gname", "gname", 32)):
 
-            val = info[name].decode(encoding)
+            if hname in pax_headers:
+                # The pax header has priority.
+                continue
+
+            val = info[name].decode(encoding, errors)
 
             # Try to encode the string as ASCII.
             try:
@@ -1013,27 +1051,23 @@
                 pax_headers[hname] = val
                 continue
 
-            if len(val) > length:
-                if name == "name":
-                    # Try to squeeze a longname in the prefix and name fields as in
-                    # ustar format.
-                    try:
-                        info["prefix"], info["name"] = self._posix_split_name(info["name"])
-                    except ValueError:
-                        pax_headers[hname] = val
-                    else:
-                        continue
-                else:
-                    pax_headers[hname] = val
+            if len(info[name]) > length:
+                pax_headers[hname] = val
 
         # Test number fields for values that exceed the field limit or values
         # that like to be stored as float.
         for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)):
+            if name in pax_headers:
+                # The pax header has priority. Avoid overflow.
+                info[name] = 0
+                continue
+
             val = info[name]
             if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float):
                 pax_headers[name] = str(val)
                 info[name] = 0
 
+        # Create a pax extended header if necessary.
         if pax_headers:
             buf = self._create_pax_generic_header(pax_headers)
         else:
@@ -1042,26 +1076,10 @@
         return buf + self._create_header(info, USTAR_FORMAT)
 
     @classmethod
-    def create_pax_global_header(cls, pax_headers, encoding):
+    def create_pax_global_header(cls, pax_headers):
         """Return the object as a pax global header block sequence.
         """
-        new_headers = {}
-        for key, val in pax_headers.items():
-            key = cls._to_unicode(key, encoding)
-            val = cls._to_unicode(val, encoding)
-            new_headers[key] = val
-        return cls._create_pax_generic_header(new_headers, type=XGLTYPE)
-
-    @staticmethod
-    def _to_unicode(value, encoding):
-        if isinstance(value, str):
-            return value
-        elif isinstance(value, (int, float)):
-            return str(value)
-        elif isinstance(value, str):
-            return str(value, encoding)
-        else:
-            raise ValueError("unable to convert to unicode: %r" % value)
+        return cls._create_pax_generic_header(pax_headers, type=XGLTYPE)
 
     def _posix_split_name(self, name):
         """Split a name longer than 100 chars into a prefix
@@ -1093,9 +1111,9 @@
             "        ", # checksum field
             info.get("type", REGTYPE),
             stn(info.get("linkname", ""), 100),
-            stn(info.get("magic", ""), 8),
-            stn(info.get("uname", ""), 32),
-            stn(info.get("gname", ""), 32),
+            stn(info.get("magic", POSIX_MAGIC), 8),
+            stn(info.get("uname", "root"), 32),
+            stn(info.get("gname", "root"), 32),
             itn(info.get("devmajor", 0), 8, format),
             itn(info.get("devminor", 0), 8, format),
             stn(info.get("prefix", ""), 155)
@@ -1256,12 +1274,9 @@
             offset += self._block(self.size)
         tarfile.offset = offset
 
-        # Patch the TarInfo object with saved extended
+        # Patch the TarInfo object with saved global
         # header information.
-        for keyword, value in tarfile.pax_headers.items():
-            if keyword in PAX_FIELDS:
-                setattr(self, keyword, value)
-            self.pax_headers[keyword] = value
+        self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors)
 
         return self
 
@@ -1272,18 +1287,17 @@
         buf = tarfile.fileobj.read(self._block(self.size))
 
         # Fetch the next header and process it.
-        b = tarfile.fileobj.read(BLOCKSIZE)
-        t = self.frombuf(b)
-        t.offset = self.offset
-        next = t._proc_member(tarfile)
+        next = self.fromtarfile(tarfile)
+        if next is None:
+            raise HeaderError("missing subsequent header")
 
         # Patch the TarInfo object from the next header with
         # the longname information.
         next.offset = self.offset
         if self.type == GNUTYPE_LONGNAME:
-            next.name = buf.rstrip(NUL)
+            next.name = nts(buf)
         elif self.type == GNUTYPE_LONGLINK:
-            next.linkname = buf.rstrip(NUL)
+            next.linkname = nts(buf)
 
         return next
 
@@ -1358,21 +1372,10 @@
         else:
             pax_headers = tarfile.pax_headers.copy()
 
-        # Fields in POSIX.1-2001 that are numbers, all other fields
-        # are treated as UTF-8 strings.
-        type_mapping = {
-            "atime":        float,
-            "ctime":        float,
-            "mtime":        float,
-            "uid":          int,
-            "gid":          int,
-            "size":         int
-        }
-
         # Parse pax header information. A record looks like that:
         # "%d %s=%s\n" % (length, keyword, value). length is the size
         # of the complete record including the length field itself and
-        # the newline.
+        # the newline. keyword and value are both UTF-8 encoded strings.
         regex = re.compile(r"(\d+) ([^=]+)=", re.U)
         pos = 0
         while True:
@@ -1385,35 +1388,55 @@
             value = buf[match.end(2) + 1:match.start(1) + length - 1]
 
             keyword = keyword.decode("utf8")
-            keyword = keyword.encode(tarfile.encoding)
-
             value = value.decode("utf8")
-            if keyword in type_mapping:
+
+            pax_headers[keyword] = value
+            pos += length
+
+        # Fetch the next header.
+        next = self.fromtarfile(tarfile)
+
+        if self.type in (XHDTYPE, SOLARIS_XHDTYPE):
+            if next is None:
+                raise HeaderError("missing subsequent header")
+
+            # Patch the TarInfo object with the extended header info.
+            next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors)
+            next.offset = self.offset
+
+            if "size" in pax_headers:
+                # If the extended header replaces the size field,
+                # we need to recalculate the offset where the next
+                # header starts.
+                offset = next.offset_data
+                if next.isreg() or next.type not in SUPPORTED_TYPES:
+                    offset += next._block(next.size)
+                tarfile.offset = offset
+
+        return next
+
+    def _apply_pax_info(self, pax_headers, encoding, errors):
+        """Replace fields with supplemental information from a previous
+           pax extended or global header.
+        """
+        for keyword, value in pax_headers.items():
+            if keyword not in PAX_FIELDS:
+                continue
+
+            if keyword == "path":
+                value = value.rstrip("/")
+
+            if keyword in PAX_NUMBER_FIELDS:
                 try:
-                    value = type_mapping[keyword](value)
+                    value = PAX_NUMBER_FIELDS[keyword](value)
                 except ValueError:
                     value = 0
             else:
-                value = value.encode(tarfile.encoding)
-
-            pax_headers[keyword] = value
-            pos += length
+                value = uts(value, encoding, errors)
 
-        # Fetch the next header that will be patched with the
-        # supplement information from the pax header (extended
-        # only).
-        t = self.fromtarfile(tarfile)
-
-        if self.type != XGLTYPE and t is not None:
-            # Patch the TarInfo object from the next header with
-            # the pax header's information.
-            for keyword, value in pax_headers.items():
-                if keyword in PAX_FIELDS:
-                    setattr(t, keyword, value)
-                pax_headers[keyword] = value
-            t.pax_headers = pax_headers.copy()
+            setattr(self, keyword, value)
 
-        return t
+        self.pax_headers = pax_headers.copy()
 
     def _block(self, count):
         """Round up a byte count by BLOCKSIZE and return it,
@@ -1464,8 +1487,9 @@
 
     format = DEFAULT_FORMAT     # The format to use when creating an archive.
 
-    encoding = ENCODING         # Transfer UTF-8 strings from POSIX.1-2001
-                                # headers to this encoding.
+    encoding = ENCODING         # Encoding for 8-bit character strings.
+
+    errors = None               # Error handler for unicode conversion.
 
     tarinfo = TarInfo           # The default TarInfo class to use.
 
@@ -1473,7 +1497,7 @@
 
     def __init__(self, name=None, mode="r", fileobj=None, format=None,
             tarinfo=None, dereference=None, ignore_zeros=None, encoding=None,
-            pax_headers=None, debug=None, errorlevel=None):
+            errors=None, pax_headers=None, debug=None, errorlevel=None):
         """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to
            read from an existing archive, 'a' to append data to an existing
            file or 'w' to create a new file overwriting an existing one. `mode'
@@ -1492,7 +1516,7 @@
                 # Create nonexistent files in append mode.
                 self.mode = "w"
                 self._mode = "wb"
-            fileobj = _open(name, self._mode)
+            fileobj = bltn_open(name, self._mode)
             self._extfileobj = False
         else:
             if name is None and hasattr(fileobj, "name"):
@@ -1514,6 +1538,19 @@
             self.ignore_zeros = ignore_zeros
         if encoding is not None:
             self.encoding = encoding
+
+        if errors is not None:
+            self.errors = errors
+        elif mode == "r":
+            self.errors = "utf-8"
+        else:
+            self.errors = "strict"
+
+        if pax_headers is not None and self.format == PAX_FORMAT:
+            self.pax_headers = pax_headers
+        else:
+            self.pax_headers = {}
+
         if debug is not None:
             self.debug = debug
         if errorlevel is not None:
@@ -1526,7 +1563,6 @@
         self.offset = 0        # current position in the archive file
         self.inodes = {}        # dictionary caching the inodes of
                                 # archive members already added
-        self.pax_headers = {}   # save contents of global pax headers
 
         if self.mode == "r":
             self.firstmember = None
@@ -1545,9 +1581,8 @@
         if self.mode in "aw":
             self._loaded = True
 
-            if pax_headers:
-                buf = self.tarinfo.create_pax_global_header(
-                        pax_headers.copy(), self.encoding)
+            if self.pax_headers:
+                buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy())
                 self.fileobj.write(buf)
                 self.offset += len(buf)
 
@@ -1669,7 +1704,7 @@
             raise CompressionError("gzip module is not available")
 
         if fileobj is None:
-            fileobj = _open(name, mode + "b")
+            fileobj = bltn_open(name, mode + "b")
 
         try:
             t = cls.taropen(name, mode,
@@ -1819,8 +1854,6 @@
                     self.inodes[inode] = arcname
         elif stat.S_ISDIR(stmd):
             type = DIRTYPE
-            if arcname[-1:] != "/":
-                arcname += "/"
         elif stat.S_ISFIFO(stmd):
             type = FIFOTYPE
         elif stat.S_ISLNK(stmd):
@@ -1930,7 +1963,7 @@
 
         # Append the tar header and data to the archive.
         if tarinfo.isreg():
-            f = _open(name, "rb")
+            f = bltn_open(name, "rb")
             self.addfile(tarinfo, f)
             f.close()
 
@@ -1954,7 +1987,7 @@
 
         tarinfo = copy.copy(tarinfo)
 
-        buf = tarinfo.tobuf(self.format, self.encoding)
+        buf = tarinfo.tobuf(self.format, self.encoding, self.errors)
         self.fileobj.write(buf)
         self.offset += len(buf)
 
@@ -2141,7 +2174,7 @@
         """Make a file called targetpath.
         """
         source = self.extractfile(tarinfo)
-        target = _open(targetpath, "wb")
+        target = bltn_open(targetpath, "wb")
         copyfileobj(source, target)
         source.close()
         target.close()
@@ -2483,4 +2516,5 @@
     except TarError:
         return False
 
+bltn_open = open
 open = TarFile.open

Deleted: /python/branches/py3k-struni/Lib/test/infinite_reload.py
==============================================================================
--- /python/branches/py3k-struni/Lib/test/infinite_reload.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,7 +0,0 @@
-# For testing http://python.org/sf/742342, which reports that Python
-#  segfaults (infinite recursion in C) in the presence of infinite
-#  reload()ing. This module is imported by test_import.py:test_infinite_reload
-#  to make sure this doesn't happen any more.
-
-import infinite_reload
-reload(infinite_reload)

Modified: python/branches/py3k-struni/Lib/test/output/test_pkg
==============================================================================
--- python/branches/py3k-struni/Lib/test/output/test_pkg	(original)
+++ python/branches/py3k-struni/Lib/test/output/test_pkg	Thu Jun  7 01:52:48 2007
@@ -15,8 +15,6 @@
 t3 loading
 t3.sub.subsub loading
 t3 t3.sub t3.sub.subsub
-t3 loading
-t3.sub.subsub loading
 running test t4
 t4 loading
 t4.sub.subsub loading

Modified: python/branches/py3k-struni/Lib/test/regrtest.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/regrtest.py	(original)
+++ python/branches/py3k-struni/Lib/test/regrtest.py	Thu Jun  7 01:52:48 2007
@@ -669,7 +669,8 @@
             indirect_test()
     else:
         def run_the_test():
-            reload(the_module)
+            del sys.modules[the_module.__name__]
+            exec('import ' + the_module.__name__)
 
     deltas = []
     nwarmup, ntracked, fname = huntrleaks
@@ -841,7 +842,6 @@
         test_signal
         test_sunaudiodev
         test_threadsignals
-        test_timing
         test_wait3
         test_wait4
         """,
@@ -894,7 +894,6 @@
         test_sunaudiodev
         test_sundry
         test_tarfile
-        test_timing
         """,
     'unixware7':
         """
@@ -992,7 +991,6 @@
         test_threaded_import
         test_threadedtempfile
         test_threading
-        test_timing
         """,
     'darwin':
         """

Deleted: /python/branches/py3k-struni/Lib/test/test_MimeWriter.py
==============================================================================
--- /python/branches/py3k-struni/Lib/test/test_MimeWriter.py	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,291 +0,0 @@
-"""Test program for MimeWriter module.
-
-The test program was too big to comfortably fit in the MimeWriter
-class, so it's here in its own file.
-
-This should generate Barry's example, modulo some quotes and newlines.
-
-"""
-
-import unittest, sys, StringIO
-from test.test_support import run_unittest
-
-from MimeWriter import MimeWriter
-
-SELLER = '''\
-INTERFACE Seller-1;
-
-TYPE Seller = OBJECT
-    DOCUMENTATION "A simple Seller interface to test ILU"
-    METHODS
-            price():INTEGER,
-    END;
-'''
-
-BUYER = '''\
-class Buyer:
-    def __setup__(self, maxprice):
-        self._maxprice = maxprice
-
-    def __main__(self, kos):
-        """Entry point upon arrival at a new KOS."""
-        broker = kos.broker()
-        # B4 == Barry's Big Bass Business :-)
-        seller = broker.lookup('Seller_1.Seller', 'B4')
-        if seller:
-            price = seller.price()
-            print 'Seller wants $', price, '... '
-            if price > self._maxprice:
-                print 'too much!'
-            else:
-                print "I'll take it!"
-        else:
-            print 'no seller found here'
-'''                                     # Don't ask why this comment is here
-
-STATE = '''\
-# instantiate a buyer instance and put it in a magic place for the KOS
-# to find.
-__kp__ = Buyer()
-__kp__.__setup__(500)
-'''
-
-SIMPLE_METADATA = [
-        ("Interpreter", "python"),
-        ("Interpreter-Version", "1.3"),
-        ("Owner-Name", "Barry Warsaw"),
-        ("Owner-Rendezvous", "bwarsaw at cnri.reston.va.us"),
-        ("Home-KSS", "kss.cnri.reston.va.us"),
-        ("Identifier", "hdl://cnri.kss/my_first_knowbot"),
-        ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"),
-        ]
-
-COMPLEX_METADATA = [
-        ("Metadata-Type", "complex"),
-        ("Metadata-Key", "connection"),
-        ("Access", "read-only"),
-        ("Connection-Description", "Barry's Big Bass Business"),
-        ("Connection-Id", "B4"),
-        ("Connection-Direction", "client"),
-        ]
-
-EXTERNAL_METADATA = [
-        ("Metadata-Type", "complex"),
-        ("Metadata-Key", "generic-interface"),
-        ("Access", "read-only"),
-        ("Connection-Description", "Generic Interface for All Knowbots"),
-        ("Connection-Id", "generic-kp"),
-        ("Connection-Direction", "client"),
-        ]
-
-
-OUTPUT = '''\
-From: bwarsaw at cnri.reston.va.us
-Date: Mon Feb 12 17:21:48 EST 1996
-To: kss-submit at cnri.reston.va.us
-MIME-Version: 1.0
-Content-Type: multipart/knowbot;
-    boundary="801spam999";
-    version="0.1"
-
-This is a multi-part message in MIME format.
-
---801spam999
-Content-Type: multipart/knowbot-metadata;
-    boundary="802spam999"
-
-
---802spam999
-Content-Type: message/rfc822
-KP-Metadata-Type: simple
-KP-Access: read-only
-
-KPMD-Interpreter: python
-KPMD-Interpreter-Version: 1.3
-KPMD-Owner-Name: Barry Warsaw
-KPMD-Owner-Rendezvous: bwarsaw at cnri.reston.va.us
-KPMD-Home-KSS: kss.cnri.reston.va.us
-KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
-KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
-
---802spam999
-Content-Type: text/isl
-KP-Metadata-Type: complex
-KP-Metadata-Key: connection
-KP-Access: read-only
-KP-Connection-Description: Barry's Big Bass Business
-KP-Connection-Id: B4
-KP-Connection-Direction: client
-
-INTERFACE Seller-1;
-
-TYPE Seller = OBJECT
-    DOCUMENTATION "A simple Seller interface to test ILU"
-    METHODS
-            price():INTEGER,
-    END;
-
---802spam999
-Content-Type: message/external-body;
-    access-type="URL";
-    URL="hdl://cnri.kss/generic-knowbot"
-
-Content-Type: text/isl
-KP-Metadata-Type: complex
-KP-Metadata-Key: generic-interface
-KP-Access: read-only
-KP-Connection-Description: Generic Interface for All Knowbots
-KP-Connection-Id: generic-kp
-KP-Connection-Direction: client
-
-
---802spam999--
-
---801spam999
-Content-Type: multipart/knowbot-code;
-    boundary="803spam999"
-
-
---803spam999
-Content-Type: text/plain
-KP-Module-Name: BuyerKP
-
-class Buyer:
-    def __setup__(self, maxprice):
-        self._maxprice = maxprice
-
-    def __main__(self, kos):
-        """Entry point upon arrival at a new KOS."""
-        broker = kos.broker()
-        # B4 == Barry's Big Bass Business :-)
-        seller = broker.lookup('Seller_1.Seller', 'B4')
-        if seller:
-            price = seller.price()
-            print 'Seller wants $', price, '... '
-            if price > self._maxprice:
-                print 'too much!'
-            else:
-                print "I'll take it!"
-        else:
-            print 'no seller found here'
-
---803spam999--
-
---801spam999
-Content-Type: multipart/knowbot-state;
-    boundary="804spam999"
-KP-Main-Module: main
-
-
---804spam999
-Content-Type: text/plain
-KP-Module-Name: main
-
-# instantiate a buyer instance and put it in a magic place for the KOS
-# to find.
-__kp__ = Buyer()
-__kp__.__setup__(500)
-
---804spam999--
-
---801spam999--
-'''
-
-class MimewriterTest(unittest.TestCase):
-
-    def test(self):
-        buf = StringIO.StringIO()
-
-        # Toplevel headers
-
-        toplevel = MimeWriter(buf)
-        toplevel.addheader("From", "bwarsaw at cnri.reston.va.us")
-        toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
-        toplevel.addheader("To", "kss-submit at cnri.reston.va.us")
-        toplevel.addheader("MIME-Version", "1.0")
-
-        # Toplevel body parts
-
-        f = toplevel.startmultipartbody("knowbot", "801spam999",
-                                        [("version", "0.1")], prefix=0)
-        f.write("This is a multi-part message in MIME format.\n")
-
-        # First toplevel body part: metadata
-
-        md = toplevel.nextpart()
-        md.startmultipartbody("knowbot-metadata", "802spam999")
-
-        # Metadata part 1
-
-        md1 = md.nextpart()
-        md1.addheader("KP-Metadata-Type", "simple")
-        md1.addheader("KP-Access", "read-only")
-        m = MimeWriter(md1.startbody("message/rfc822"))
-        for key, value in SIMPLE_METADATA:
-            m.addheader("KPMD-" + key, value)
-        m.flushheaders()
-        del md1
-
-        # Metadata part 2
-
-        md2 = md.nextpart()
-        for key, value in COMPLEX_METADATA:
-            md2.addheader("KP-" + key, value)
-        f = md2.startbody("text/isl")
-        f.write(SELLER)
-        del md2
-
-        # Metadata part 3
-
-        md3 = md.nextpart()
-        f = md3.startbody("message/external-body",
-                          [("access-type", "URL"),
-                           ("URL", "hdl://cnri.kss/generic-knowbot")])
-        m = MimeWriter(f)
-        for key, value in EXTERNAL_METADATA:
-            md3.addheader("KP-" + key, value)
-        md3.startbody("text/isl")
-        # Phantom body doesn't need to be written
-
-        md.lastpart()
-
-        # Second toplevel body part: code
-
-        code = toplevel.nextpart()
-        code.startmultipartbody("knowbot-code", "803spam999")
-
-        # Code: buyer program source
-
-        buyer = code.nextpart()
-        buyer.addheader("KP-Module-Name", "BuyerKP")
-        f = buyer.startbody("text/plain")
-        f.write(BUYER)
-
-        code.lastpart()
-
-        # Third toplevel body part: state
-
-        state = toplevel.nextpart()
-        state.addheader("KP-Main-Module", "main")
-        state.startmultipartbody("knowbot-state", "804spam999")
-
-        # State: a bunch of assignments
-
-        st = state.nextpart()
-        st.addheader("KP-Module-Name", "main")
-        f = st.startbody("text/plain")
-        f.write(STATE)
-
-        state.lastpart()
-
-        # End toplevel body parts
-
-        toplevel.lastpart()
-
-        self.assertEqual(buf.getvalue(), OUTPUT)
-
-def test_main():
-    run_unittest(MimewriterTest)
-
-if __name__ == '__main__':
-    test_main()

Modified: python/branches/py3k-struni/Lib/test/test___all__.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test___all__.py	(original)
+++ python/branches/py3k-struni/Lib/test/test___all__.py	Thu Jun  7 01:52:48 2007
@@ -1,7 +1,6 @@
 import unittest
 from test.test_support import verbose, run_unittest
 import sys
-import warnings
 
 
 class AllTest(unittest.TestCase):
@@ -34,7 +33,6 @@
         self.check_all("CGIHTTPServer")
         self.check_all("ConfigParser")
         self.check_all("Cookie")
-        self.check_all("MimeWriter")
         self.check_all("Queue")
         self.check_all("SimpleHTTPServer")
         self.check_all("SocketServer")
@@ -92,7 +90,6 @@
         self.check_all("mhlib")
         self.check_all("mimetools")
         self.check_all("mimetypes")
-        self.check_all("mimify")
         self.check_all("multifile")
         self.check_all("netrc")
         self.check_all("nntplib")

Modified: python/branches/py3k-struni/Lib/test/test_builtin.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_builtin.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_builtin.py	Thu Jun  7 01:52:48 2007
@@ -1485,14 +1485,6 @@
             fp.close()
             unlink(TESTFN)
 
-    def test_reload(self):
-        import marshal
-        reload(marshal)
-        import string
-        reload(string)
-        ## import sys
-        ## self.assertRaises(ImportError, reload, sys)
-
     def test_repr(self):
         self.assertEqual(repr(''), '\'\'')
         self.assertEqual(repr(0), '0')

Modified: python/branches/py3k-struni/Lib/test/test_dis.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_dis.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_dis.py	Thu Jun  7 01:52:48 2007
@@ -89,6 +89,18 @@
               7 RETURN_VALUE
 """
 
+dis_module_expected_results = """\
+Disassembly of f:
+  4           0 LOAD_CONST               0 (None)
+              3 RETURN_VALUE
+
+Disassembly of g:
+  5           0 LOAD_CONST               0 (None)
+              3 RETURN_VALUE
+
+"""
+
+
 class DisTests(unittest.TestCase):
     def do_disassembly_test(self, func, expected):
         s = StringIO.StringIO()
@@ -127,6 +139,7 @@
         self.do_disassembly_test(bug708901, dis_bug708901)
 
     def test_bug_1333982(self):
+        # XXX: re-enable this test!
         # This one is checking bytecodes generated for an `assert` statement,
         # so fails if the tests are run with -O.  Skip this test then.
         pass # Test has been disabled due to change in the way
@@ -153,9 +166,12 @@
             expected = _BIG_LINENO_FORMAT % (i + 2)
             self.do_disassembly_test(func(i), expected)
 
+    def test_big_linenos(self):
+        from test import dis_module
+        self.do_disassembly_test(dis_module, dis_module_expected_results)
+
 def test_main():
     run_unittest(DisTests)
 
-
 if __name__ == "__main__":
     test_main()

Modified: python/branches/py3k-struni/Lib/test/test_doctest.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_doctest.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_doctest.py	Thu Jun  7 01:52:48 2007
@@ -2409,7 +2409,7 @@
 def test_coverage(coverdir):
     tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,],
                          trace=0, count=1)
-    tracer.run('reload(doctest); test_main()')
+    tracer.run('test_main()')
     r = tracer.results()
     print('Writing coverage results...')
     r.write_results(show_missing=True, summary=True,

Modified: python/branches/py3k-struni/Lib/test/test_hmac.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_hmac.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_hmac.py	Thu Jun  7 01:52:48 2007
@@ -1,5 +1,5 @@
 import hmac
-import sha
+from hashlib import sha1
 import unittest
 from test import test_support
 
@@ -43,7 +43,7 @@
 
     def test_sha_vectors(self):
         def shatest(key, data, digest):
-            h = hmac.HMAC(key, data, digestmod=sha)
+            h = hmac.HMAC(key, data, digestmod=sha1)
             self.assertEqual(h.hexdigest().upper(), digest.upper())
 
         shatest(chr(0x0b) * 20,
@@ -95,11 +95,11 @@
 
     def test_withmodule(self):
         # Constructor call with text and digest module.
-        import sha
+        from hashlib import sha1
         try:
-            h = hmac.HMAC("key", "", sha)
+            h = hmac.HMAC("key", "", sha1)
         except:
-            self.fail("Constructor call with sha module raised exception.")
+            self.fail("Constructor call with hashlib.sha1 raised exception.")
 
 class SanityTestCase(unittest.TestCase):
 

Modified: python/branches/py3k-struni/Lib/test/test_import.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_import.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_import.py	Thu Jun  7 01:52:48 2007
@@ -6,6 +6,7 @@
 import sys
 import py_compile
 import warnings
+from test.test_support import unlink
 
 
 def remove_files(name):
@@ -63,22 +64,9 @@
                 self.assertEquals(mod.b, b,
                     "module loaded (%s) but contents invalid" % mod)
             finally:
-                os.unlink(source)
-
-            try:
-                try:
-                    reload(mod)
-                except ImportError as err:
-                    self.fail("import from .pyc/.pyo failed: %s" % err)
-            finally:
-                try:
-                    os.unlink(pyc)
-                except OSError:
-                    pass
-                try:
-                    os.unlink(pyo)
-                except OSError:
-                    pass
+                unlink(source)
+                unlink(pyc)
+                unlink(pyo)
                 del sys.modules[TESTFN]
 
         sys.path.insert(0, os.curdir)
@@ -136,6 +124,8 @@
         # New in 2.4, we shouldn't be able to import that no matter how often
         # we try.
         sys.path.insert(0, os.curdir)
+        if TESTFN in sys.modules:
+            del sys.modules[TESTFN]
         try:
             for i in 1, 2, 3:
                 try:
@@ -149,60 +139,6 @@
             sys.path.pop(0)
             remove_files(TESTFN)
 
-    def test_failing_reload(self):
-        # A failing reload should leave the module object in sys.modules.
-        source = TESTFN + os.extsep + "py"
-        f = open(source, "w")
-        print("a = 1", file=f)
-        print("b = 2", file=f)
-        f.close()
-
-        sys.path.insert(0, os.curdir)
-        try:
-            mod = __import__(TESTFN)
-            self.assert_(TESTFN in sys.modules, "expected module in sys.modules")
-            self.assertEquals(mod.a, 1, "module has wrong attribute values")
-            self.assertEquals(mod.b, 2, "module has wrong attribute values")
-
-            # On WinXP, just replacing the .py file wasn't enough to
-            # convince reload() to reparse it.  Maybe the timestamp didn't
-            # move enough.  We force it to get reparsed by removing the
-            # compiled file too.
-            remove_files(TESTFN)
-
-            # Now damage the module.
-            f = open(source, "w")
-            print("a = 10", file=f)
-            print("b = 20//0", file=f)
-            f.close()
-
-            self.assertRaises(ZeroDivisionError, reload, mod)
-
-            # But we still expect the module to be in sys.modules.
-            mod = sys.modules.get(TESTFN)
-            self.failIf(mod is None, "expected module to still be in sys.modules")
-
-            # We should have replaced a w/ 10, but the old b value should
-            # stick.
-            self.assertEquals(mod.a, 10, "module has wrong attribute values")
-            self.assertEquals(mod.b, 2, "module has wrong attribute values")
-
-        finally:
-            sys.path.pop(0)
-            remove_files(TESTFN)
-            if TESTFN in sys.modules:
-                del sys.modules[TESTFN]
-
-    def test_infinite_reload(self):
-        # Bug #742342 reports that Python segfaults (infinite recursion in C)
-        #  when faced with self-recursive reload()ing.
-
-        sys.path.insert(0, os.path.dirname(__file__))
-        try:
-            import infinite_reload
-        finally:
-            sys.path.pop(0)
-
     def test_import_name_binding(self):
         # import x.y.z binds x in the current namespace
         import test as x

Modified: python/branches/py3k-struni/Lib/test/test_importhooks.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_importhooks.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_importhooks.py	Thu Jun  7 01:52:48 2007
@@ -190,10 +190,6 @@
         import reloadmodule
         self.failIf(hasattr(reloadmodule,'reloaded'))
 
-        TestImporter.modules['reloadmodule'] = (False, reload_co)
-        reload(reloadmodule)
-        self.failUnless(hasattr(reloadmodule,'reloaded'))
-
         import hooktestpackage.newrel
         self.assertEqual(hooktestpackage.newrel.get_name(),
                          "hooktestpackage.newrel")

Modified: python/branches/py3k-struni/Lib/test/test_inspect.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_inspect.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_inspect.py	Thu Jun  7 01:52:48 2007
@@ -26,7 +26,7 @@
 try:
     1/0
 except:
-    tb = sys.exc_traceback
+    tb = sys.exc_info()[2]
 
 git = mod.StupidGit()
 

Modified: python/branches/py3k-struni/Lib/test/test_optparse.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_optparse.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_optparse.py	Thu Jun  7 01:52:48 2007
@@ -27,12 +27,6 @@
 from optparse import _match_abbrev
 from optparse import _parse_num
 
-# Do the right thing with boolean values for all known Python versions.
-try:
-    True, False
-except NameError:
-    (True, False) = (1, 0)
-
 retype = type(re.compile(''))
 
 class InterceptedError(Exception):

Modified: python/branches/py3k-struni/Lib/test/test_os.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_os.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_os.py	Thu Jun  7 01:52:48 2007
@@ -381,7 +381,7 @@
                     os.remove(dirname)
         os.rmdir(test_support.TESTFN)
 
-class MakedirTests (unittest.TestCase):
+class MakedirTests(unittest.TestCase):
     def setUp(self):
         os.mkdir(test_support.TESTFN)
 
@@ -400,9 +400,6 @@
                             'dir5', 'dir6')
         os.makedirs(path)
 
-
-
-
     def tearDown(self):
         path = os.path.join(test_support.TESTFN, 'dir1', 'dir2', 'dir3',
                             'dir4', 'dir5', 'dir6')
@@ -414,7 +411,7 @@
 
         os.removedirs(path)
 
-class DevNullTests (unittest.TestCase):
+class DevNullTests(unittest.TestCase):
     def test_devnull(self):
         f = open(os.devnull, 'w')
         f.write('hello')
@@ -423,7 +420,7 @@
         self.assertEqual(f.read(), '')
         f.close()
 
-class URandomTests (unittest.TestCase):
+class URandomTests(unittest.TestCase):
     def test_urandom(self):
         try:
             self.assertEqual(len(os.urandom(1)), 1)
@@ -433,6 +430,10 @@
         except NotImplementedError:
             pass
 
+class ExecTests(unittest.TestCase):
+    def test_execvpe_with_bad_program(self):
+        self.assertRaises(OSError, os.execvpe, 'no such app-', [], None)
+
 class Win32ErrorTests(unittest.TestCase):
     def test_rename(self):
         self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak")
@@ -469,6 +470,7 @@
         MakedirTests,
         DevNullTests,
         URandomTests,
+        ExecTests,
         Win32ErrorTests
     )
 

Modified: python/branches/py3k-struni/Lib/test/test_pkg.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_pkg.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_pkg.py	Thu Jun  7 01:52:48 2007
@@ -120,9 +120,6 @@
 """
 import t3.sub.subsub
 print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
-reload(t3)
-reload(t3.sub)
-reload(t3.sub.subsub)
 """),
 
     ("t4", [

Modified: python/branches/py3k-struni/Lib/test/test_subprocess.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_subprocess.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_subprocess.py	Thu Jun  7 01:52:48 2007
@@ -604,8 +604,16 @@
             self.assertRaises(ValueError, subprocess.call,
                               [sys.executable,
                                "-c", "import sys; sys.exit(47)"],
+                              stdout=subprocess.PIPE,
                               close_fds=True)
 
+        def test_close_fds(self):
+            # close file descriptors
+            rc = subprocess.call([sys.executable, "-c",
+                                  "import sys; sys.exit(47)"],
+                                  close_fds=True)
+            self.assertEqual(rc, 47)
+
         def test_shell_sequence(self):
             # Run command through the shell (sequence)
             newenv = os.environ.copy()

Modified: python/branches/py3k-struni/Lib/test/test_sundry.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_sundry.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_sundry.py	Thu Jun  7 01:52:48 2007
@@ -4,9 +4,6 @@
 import warnings
 
 with guard_warnings_filter():
-    warnings.filterwarnings('ignore', r".*posixfile",
-                            DeprecationWarning)
-
     from test.test_support import verbose
 
     import BaseHTTPServer
@@ -33,7 +30,6 @@
     import linecache
     import macurl2path
     import mailcap
-    import mimify
     import mutex
     import nntplib
     import nturl2path
@@ -42,7 +38,6 @@
     import pdb
     import pipes
     #import poplib
-    import posixfile
     import pstats
     import py_compile
     import pydoc

Modified: python/branches/py3k-struni/Lib/test/test_syntax.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_syntax.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_syntax.py	Thu Jun  7 01:52:48 2007
@@ -27,15 +27,13 @@
 
 Errors from set_context():
 
-TODO(jhylton): "assignment to None" is inconsistent with other messages
-
 >>> obj.None = 1
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[1]>, line 1)
+SyntaxError: invalid syntax
 
 >>> None = 1
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[2]>, line 1)
+SyntaxError: assignment to keyword (<doctest test.test_syntax[2]>, line 1)
 
 It's a syntax error to assign to the empty tuple.  Why isn't it an
 error to assign to the empty list?  It will always raise some error at
@@ -95,7 +93,7 @@
 >>> def f(None=1):
 ...     pass
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[14]>, line 1)
+SyntaxError: invalid syntax
 
 
 From ast_for_arguments():
@@ -108,17 +106,17 @@
 >>> def f(x, None):
 ...     pass
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[16]>, line 1)
+SyntaxError: invalid syntax
 
 >>> def f(*None):
 ...     pass
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[17]>, line 1)
+SyntaxError: invalid syntax
 
 >>> def f(**None):
 ...     pass
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[18]>, line 1)
+SyntaxError: invalid syntax
 
 
 From ast_for_funcdef():
@@ -126,7 +124,7 @@
 >>> def None(x):
 ...     pass
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[19]>, line 1)
+SyntaxError: invalid syntax
 
 
 From ast_for_call():
@@ -231,7 +229,7 @@
 SyntaxError: augmented assignment to generator expression not possible (<doctest test.test_syntax[31]>, line 1)
 >>> None += 1
 Traceback (most recent call last):
-SyntaxError: assignment to None (<doctest test.test_syntax[32]>, line 1)
+SyntaxError: assignment to keyword (<doctest test.test_syntax[32]>, line 1)
 >>> f() += 1
 Traceback (most recent call last):
 SyntaxError: illegal expression for augmented assignment (<doctest test.test_syntax[33]>, line 1)

Modified: python/branches/py3k-struni/Lib/test/test_sys.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_sys.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_sys.py	Thu Jun  7 01:52:48 2007
@@ -63,47 +63,6 @@
     # FIXME: testing the code for a lost or replaced excepthook in
     # Python/pythonrun.c::PyErr_PrintEx() is tricky.
 
-    def test_exc_clear(self):
-        self.assertRaises(TypeError, sys.exc_clear, 42)
-
-        # Verify that exc_info is present and matches exc, then clear it, and
-        # check that it worked.
-        def clear_check(exc):
-            typ, value, traceback = sys.exc_info()
-            self.assert_(typ is not None)
-            self.assert_(value is exc)
-            self.assert_(traceback is not None)
-
-            sys.exc_clear()
-
-            typ, value, traceback = sys.exc_info()
-            self.assert_(typ is None)
-            self.assert_(value is None)
-            self.assert_(traceback is None)
-
-        def clear():
-            try:
-                raise ValueError, 42
-            except ValueError as exc:
-                clear_check(exc)
-
-        # Raise an exception and check that it can be cleared
-        clear()
-
-        # Verify that a frame currently handling an exception is
-        # unaffected by calling exc_clear in a nested frame.
-        try:
-            raise ValueError, 13
-        except ValueError as exc:
-            typ1, value1, traceback1 = sys.exc_info()
-            clear()
-            typ2, value2, traceback2 = sys.exc_info()
-
-            self.assert_(typ1 is typ2)
-            self.assert_(value1 is exc)
-            self.assert_(value1 is value2)
-            self.assert_(traceback1 is traceback2)
-
     def test_exit(self):
         self.assertRaises(TypeError, sys.exit, 42, 42)
 

Modified: python/branches/py3k-struni/Lib/test/test_tarfile.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_tarfile.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_tarfile.py	Thu Jun  7 01:52:48 2007
@@ -1,4 +1,4 @@
-# encoding: iso8859-1
+# -*- coding: iso-8859-15 -*-
 
 import sys
 import os
@@ -372,9 +372,9 @@
 
     def test_read_longname(self):
         # Test reading of longname (bug #1471427).
-        name = self.subdir + "/" + "123/" * 125 + "longname"
+        longname = self.subdir + "/" + "123/" * 125 + "longname"
         try:
-            tarinfo = self.tar.getmember(name)
+            tarinfo = self.tar.getmember(longname)
         except KeyError:
             self.fail("longname not found")
         self.assert_(tarinfo.type != tarfile.DIRTYPE, "read longname as dirtype")
@@ -393,13 +393,24 @@
         tarinfo = self.tar.getmember(longname)
         offset = tarinfo.offset
         self.tar.fileobj.seek(offset)
-        fobj = StringIO.StringIO(self.tar.fileobj.read(1536))
+        fobj = StringIO.StringIO(self.tar.fileobj.read(3 * 512))
         self.assertRaises(tarfile.ReadError, tarfile.open, name="foo.tar", fileobj=fobj)
 
+    def test_header_offset(self):
+        # Test if the start offset of the TarInfo object includes
+        # the preceding extended header.
+        longname = self.subdir + "/" + "123/" * 125 + "longname"
+        offset = self.tar.getmember(longname).offset
+        fobj = open(tarname)
+        fobj.seek(offset)
+        tarinfo = tarfile.TarInfo.frombuf(fobj.read(512))
+        self.assertEqual(tarinfo.type, self.longnametype)
+
 
 class GNUReadTest(LongnameTest):
 
     subdir = "gnu"
+    longnametype = tarfile.GNUTYPE_LONGNAME
 
     def test_sparse_file(self):
         tarinfo1 = self.tar.getmember("ustar/sparse")
@@ -410,26 +421,40 @@
                 "sparse file extraction failed")
 
 
-class PaxReadTest(ReadTest):
+class PaxReadTest(LongnameTest):
 
     subdir = "pax"
+    longnametype = tarfile.XHDTYPE
 
-    def test_pax_globheaders(self):
+    def test_pax_global_headers(self):
         tar = tarfile.open(tarname, encoding="iso8859-1")
+
         tarinfo = tar.getmember("pax/regtype1")
         self.assertEqual(tarinfo.uname, "foo")
         self.assertEqual(tarinfo.gname, "bar")
-        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), "ÄÖÜäöüß")
+        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß")
 
         tarinfo = tar.getmember("pax/regtype2")
         self.assertEqual(tarinfo.uname, "")
         self.assertEqual(tarinfo.gname, "bar")
-        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), "ÄÖÜäöüß")
+        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß")
 
         tarinfo = tar.getmember("pax/regtype3")
         self.assertEqual(tarinfo.uname, "tarfile")
         self.assertEqual(tarinfo.gname, "tarfile")
-        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), "ÄÖÜäöüß")
+        self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß")
+
+    def test_pax_number_fields(self):
+        # All following number fields are read from the pax header.
+        tar = tarfile.open(tarname, encoding="iso8859-1")
+        tarinfo = tar.getmember("pax/regtype4")
+        self.assertEqual(tarinfo.size, 7011)
+        self.assertEqual(tarinfo.uid, 123)
+        self.assertEqual(tarinfo.gid, 123)
+        self.assertEqual(tarinfo.mtime, 1041808783.0)
+        self.assertEqual(type(tarinfo.mtime), float)
+        self.assertEqual(float(tarinfo.pax_headers["atime"]), 1041808783.0)
+        self.assertEqual(float(tarinfo.pax_headers["ctime"]), 1041808783.0)
 
 
 class WriteTest(unittest.TestCase):
@@ -700,68 +725,160 @@
             n = tar.getmembers()[0].name
             self.assert_(name == n, "PAX longname creation failed")
 
-    def test_iso8859_15_filename(self):
-        self._test_unicode_filename("iso8859-15")
+    def test_pax_global_header(self):
+        pax_headers = {
+                u"foo": u"bar",
+                u"uid": u"0",
+                u"mtime": u"1.23",
+                u"test": u"äöü",
+                u"äöü": u"test"}
+
+        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, \
+                pax_headers=pax_headers)
+        tar.addfile(tarfile.TarInfo("test"))
+        tar.close()
+
+        # Test if the global header was written correctly.
+        tar = tarfile.open(tmpname, encoding="iso8859-1")
+        self.assertEqual(tar.pax_headers, pax_headers)
+        self.assertEqual(tar.getmembers()[0].pax_headers, pax_headers)
+
+        # Test if all the fields are unicode.
+        for key, val in tar.pax_headers.items():
+            self.assert_(type(key) is unicode)
+            self.assert_(type(val) is unicode)
+            if key in tarfile.PAX_NUMBER_FIELDS:
+                try:
+                    tarfile.PAX_NUMBER_FIELDS[key](val)
+                except (TypeError, ValueError):
+                    self.fail("unable to convert pax header field")
+
+    def test_pax_extended_header(self):
+        # The fields from the pax header have priority over the
+        # TarInfo.
+        pax_headers = {u"path": u"foo", u"uid": u"123"}
+
+        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, encoding="iso8859-1")
+        t = tarfile.TarInfo()
+        t.name = u"äöü"     # non-ASCII
+        t.uid = 8**8        # too large
+        t.pax_headers = pax_headers
+        tar.addfile(t)
+        tar.close()
+
+        tar = tarfile.open(tmpname, encoding="iso8859-1")
+        t = tar.getmembers()[0]
+        self.assertEqual(t.pax_headers, pax_headers)
+        self.assertEqual(t.name, "foo")
+        self.assertEqual(t.uid, 123)
+
+
+class UstarUnicodeTest(unittest.TestCase):
+    # All *UnicodeTests FIXME
+
+    format = tarfile.USTAR_FORMAT
+
+    def test_iso8859_1_filename(self):
+        self._test_unicode_filename("iso8859-1")
+
+    def test_utf7_filename(self):
+        self._test_unicode_filename("utf7")
 
     def test_utf8_filename(self):
         self._test_unicode_filename("utf8")
 
-    def test_utf16_filename(self):
-        self._test_unicode_filename("utf16")
-
     def _test_unicode_filename(self, encoding):
-        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT)
-        name = "\u20ac".encode(encoding) # Euro sign
-        tar.encoding = encoding
+        tar = tarfile.open(tmpname, "w", format=self.format, encoding=encoding, errors="strict")
+        name = "äöü"
         tar.addfile(tarfile.TarInfo(name))
         tar.close()
 
         tar = tarfile.open(tmpname, encoding=encoding)
-        self.assertEqual(tar.getmembers()[0].name, name)
+        self.assert_(type(tar.getnames()[0]) is not unicode)
+        self.assertEqual(tar.getmembers()[0].name, name.encode(encoding))
         tar.close()
 
     def test_unicode_filename_error(self):
-        # The euro sign filename cannot be translated to iso8859-1 encoding.
-        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, encoding="utf8")
-        name = "\u20ac".encode("utf8") # Euro sign
-        tar.addfile(tarfile.TarInfo(name))
+        tar = tarfile.open(tmpname, "w", format=self.format, encoding="ascii", errors="strict")
+        tarinfo = tarfile.TarInfo()
+
+        tarinfo.name = "äöü"
+        if self.format == tarfile.PAX_FORMAT:
+            self.assertRaises(UnicodeError, tar.addfile, tarinfo)
+        else:
+            tar.addfile(tarinfo)
+
+        tarinfo.name = u"äöü"
+        self.assertRaises(UnicodeError, tar.addfile, tarinfo)
+
+        tarinfo.name = "foo"
+        tarinfo.uname = u"äöü"
+        self.assertRaises(UnicodeError, tar.addfile, tarinfo)
+
+    def test_unicode_argument(self):
+        tar = tarfile.open(tarname, "r", encoding="iso8859-1", errors="strict")
+        for t in tar:
+            self.assert_(type(t.name) is str)
+            self.assert_(type(t.linkname) is str)
+            self.assert_(type(t.uname) is str)
+            self.assert_(type(t.gname) is str)
         tar.close()
 
-        self.assertRaises(UnicodeError, tarfile.open, tmpname, encoding="iso8859-1")
+    def test_uname_unicode(self):
+        for name in (u"äöü", "äöü"):
+            t = tarfile.TarInfo("foo")
+            t.uname = name
+            t.gname = name
 
-    def test_pax_headers(self):
-        self._test_pax_headers({"foo": "bar", "uid": 0, "mtime": 1.23})
+            fobj = StringIO.StringIO()
+            tar = tarfile.open("foo.tar", mode="w", fileobj=fobj, format=self.format, encoding="iso8859-1")
+            tar.addfile(t)
+            tar.close()
+            fobj.seek(0)
 
-        self._test_pax_headers({"euro": "\u20ac".encode("utf8")})
+            tar = tarfile.open("foo.tar", fileobj=fobj, encoding="iso8859-1")
+            t = tar.getmember("foo")
+            self.assertEqual(t.uname, "äöü")
+            self.assertEqual(t.gname, "äöü")
 
-        self._test_pax_headers({"euro": "\u20ac"},
-                               {"euro": "\u20ac".encode("utf8")})
+class GNUUnicodeTest(UstarUnicodeTest):
 
-        self._test_pax_headers({"\u20ac": "euro"},
-                               {"\u20ac".encode("utf8"): "euro"})
+    format = tarfile.GNU_FORMAT
 
-    def _test_pax_headers(self, pax_headers, cmp_headers=None):
-        if cmp_headers is None:
-            cmp_headers = pax_headers
 
-        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, \
-                pax_headers=pax_headers, encoding="utf8")
-        tar.addfile(tarfile.TarInfo("test"))
-        tar.close()
+class PaxUnicodeTest(UstarUnicodeTest):
 
-        tar = tarfile.open(tmpname, encoding="utf8")
-        self.assertEqual(tar.pax_headers, cmp_headers)
+    format = tarfile.PAX_FORMAT
 
-    def test_truncated_header(self):
-        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT)
-        tarinfo = tarfile.TarInfo("123/" * 126 + "longname")
-        tar.addfile(tarinfo)
+    def _create_unicode_name(self, name):
+        tar = tarfile.open(tmpname, "w", format=self.format)
+        t = tarfile.TarInfo()
+        t.pax_headers["path"] = name
+        tar.addfile(t)
         tar.close()
 
-        # Simulate a premature EOF.
-        open(tmpname, "rb+").truncate(1536)
-        tar = tarfile.open(tmpname)
-        self.assertEqual(tar.getmembers(), [])
+    def test_error_handlers(self):
+        # Test if the unicode error handlers work correctly for characters
+        # that cannot be expressed in a given encoding.
+        self._create_unicode_name(u"äöü")
+
+        for handler, name in (("utf-8", u"äöü".encode("utf8")),
+                    ("replace", "???"), ("ignore", "")):
+            tar = tarfile.open(tmpname, format=self.format, encoding="ascii",
+                    errors=handler)
+            self.assertEqual(tar.getnames()[0], name)
+
+        self.assertRaises(UnicodeError, tarfile.open, tmpname,
+                encoding="ascii", errors="strict")
+
+    def test_error_handler_utf8(self):
+        # Create a pathname that has one component representable using
+        # iso8859-1 and the other only in iso8859-15.
+        self._create_unicode_name(u"äöü/¤")
+
+        tar = tarfile.open(tmpname, format=self.format, encoding="iso8859-1",
+                errors="utf-8")
+        self.assertEqual(tar.getnames()[0], "äöü/" + u"¤".encode("utf8"))
 
 
 class AppendTest(unittest.TestCase):
@@ -836,63 +953,58 @@
     def test_ustar_limits(self):
         # 100 char name
         tarinfo = tarfile.TarInfo("0123456789" * 10)
-        tarinfo.create_ustar_header()
+        tarinfo.tobuf(tarfile.USTAR_FORMAT)
 
         # 101 char name that cannot be stored
         tarinfo = tarfile.TarInfo("0123456789" * 10 + "0")
-        self.assertRaises(ValueError, tarinfo.create_ustar_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.USTAR_FORMAT)
 
         # 256 char name with a slash at pos 156
         tarinfo = tarfile.TarInfo("123/" * 62 + "longname")
-        tarinfo.create_ustar_header()
+        tarinfo.tobuf(tarfile.USTAR_FORMAT)
 
         # 256 char name that cannot be stored
         tarinfo = tarfile.TarInfo("1234567/" * 31 + "longname")
-        self.assertRaises(ValueError, tarinfo.create_ustar_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.USTAR_FORMAT)
 
         # 512 char name
         tarinfo = tarfile.TarInfo("123/" * 126 + "longname")
-        self.assertRaises(ValueError, tarinfo.create_ustar_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.USTAR_FORMAT)
 
         # 512 char linkname
         tarinfo = tarfile.TarInfo("longlink")
         tarinfo.linkname = "123/" * 126 + "longname"
-        self.assertRaises(ValueError, tarinfo.create_ustar_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.USTAR_FORMAT)
 
         # uid > 8 digits
         tarinfo = tarfile.TarInfo("name")
         tarinfo.uid = 010000000
-        self.assertRaises(ValueError, tarinfo.create_ustar_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.USTAR_FORMAT)
 
     def test_gnu_limits(self):
         tarinfo = tarfile.TarInfo("123/" * 126 + "longname")
-        tarinfo.create_gnu_header()
+        tarinfo.tobuf(tarfile.GNU_FORMAT)
 
         tarinfo = tarfile.TarInfo("longlink")
         tarinfo.linkname = "123/" * 126 + "longname"
-        tarinfo.create_gnu_header()
+        tarinfo.tobuf(tarfile.GNU_FORMAT)
 
         # uid >= 256 ** 7
         tarinfo = tarfile.TarInfo("name")
         tarinfo.uid = 04000000000000000000
-        self.assertRaises(ValueError, tarinfo.create_gnu_header)
+        self.assertRaises(ValueError, tarinfo.tobuf, tarfile.GNU_FORMAT)
 
     def test_pax_limits(self):
-        # A 256 char name that can be stored without an extended header.
-        tarinfo = tarfile.TarInfo("123/" * 62 + "longname")
-        self.assert_(len(tarinfo.create_pax_header("utf8")) == 512,
-                "create_pax_header attached superfluous extended header")
-
         tarinfo = tarfile.TarInfo("123/" * 126 + "longname")
-        tarinfo.create_pax_header("utf8")
+        tarinfo.tobuf(tarfile.PAX_FORMAT)
 
         tarinfo = tarfile.TarInfo("longlink")
         tarinfo.linkname = "123/" * 126 + "longname"
-        tarinfo.create_pax_header("utf8")
+        tarinfo.tobuf(tarfile.PAX_FORMAT)
 
         tarinfo = tarfile.TarInfo("name")
         tarinfo.uid = 04000000000000000000
-        tarinfo.create_pax_header("utf8")
+        tarinfo.tobuf(tarfile.PAX_FORMAT)
 
 
 class GzipMiscReadTest(MiscReadTest):
@@ -940,6 +1052,9 @@
         StreamWriteTest,
         GNUWriteTest,
         PaxWriteTest,
+        UstarUnicodeTest,
+        GNUUnicodeTest,
+        PaxUnicodeTest,
         AppendTest,
         LimitsTest,
     ]

Modified: python/branches/py3k-struni/Lib/test/test_tokenize.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_tokenize.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_tokenize.py	Thu Jun  7 01:52:48 2007
@@ -19,7 +19,7 @@
 
 >>> dump_tokens("if False:\\n"
 ...             "    # NL\\n"
-...             "    True = False # NEWLINE\\n")
+...             "    a    = False # NEWLINE\\n")
 NAME        'if'          (1, 0) (1, 2)
 NAME        'False'       (1, 3) (1, 8)
 OP          ':'           (1, 8) (1, 9)
@@ -27,7 +27,7 @@
 COMMENT     '# NL'        (2, 4) (2, 8)
 NL          '\\n'          (2, 8) (2, 9)
 INDENT      '    '        (3, 0) (3, 4)
-NAME        'True'        (3, 4) (3, 8)
+NAME        'a'           (3, 4) (3, 5)
 OP          '='           (3, 9) (3, 10)
 NAME        'False'       (3, 11) (3, 16)
 COMMENT     '# NEWLINE'   (3, 17) (3, 26)

Modified: python/branches/py3k-struni/Lib/test/test_traceback.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_traceback.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_traceback.py	Thu Jun  7 01:52:48 2007
@@ -52,58 +52,13 @@
         self.assert_("^" in err[2])
         self.assert_(err[1].find(")") == err[2].find("^"))
 
-    def test_bug737473(self):
-        import sys, os, tempfile, time
-
-        savedpath = sys.path[:]
-        testdir = tempfile.mkdtemp()
-        try:
-            sys.path.insert(0, testdir)
-            testfile = os.path.join(testdir, 'test_bug737473.py')
-            print("""
-def test():
-    raise ValueError""", file=open(testfile, 'w'))
-
-            if 'test_bug737473' in sys.modules:
-                del sys.modules['test_bug737473']
-            import test_bug737473
-
-            try:
-                test_bug737473.test()
-            except ValueError:
-                # this loads source code to linecache
-                traceback.extract_tb(sys.exc_traceback)
-
-            # If this test runs too quickly, test_bug737473.py's mtime
-            # attribute will remain unchanged even if the file is rewritten.
-            # Consequently, the file would not reload.  So, added a sleep()
-            # delay to assure that a new, distinct timestamp is written.
-            # Since WinME with FAT32 has multisecond resolution, more than
-            # three seconds are needed for this test to pass reliably :-(
-            time.sleep(4)
-
-            print("""
-def test():
-    raise NotImplementedError""", file=open(testfile, 'w'))
-            reload(test_bug737473)
-            try:
-                test_bug737473.test()
-            except NotImplementedError:
-                src = traceback.extract_tb(sys.exc_traceback)[-1][-1]
-                self.failUnlessEqual(src, 'raise NotImplementedError')
-        finally:
-            sys.path[:] = savedpath
-            for f in os.listdir(testdir):
-                os.unlink(os.path.join(testdir, f))
-            os.rmdir(testdir)
-
     def test_members(self):
         # Covers Python/structmember.c::listmembers()
         try:
             1/0
         except:
             import sys
-            sys.exc_traceback.__members__
+            sys.exc_info()[2].__members__
 
     def test_base_exception(self):
         # Test that exceptions derived from BaseException are formatted right

Modified: python/branches/py3k-struni/Lib/test/test_urllib.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_urllib.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_urllib.py	Thu Jun  7 01:52:48 2007
@@ -8,6 +8,10 @@
 import mimetools
 import tempfile
 import StringIO
+import ftplib
+import threading
+import socket
+import time
 
 def hexescape(char):
     """Escape char as RFC 2396 specifies"""
@@ -541,6 +545,76 @@
                          "url2pathname() failed; %s != %s" %
                          (expect, result))
 
+# Just commented them out.
+# Can't really tell why keep failing in windows and sparc.
+# Everywhere else they work ok, but on those machines, someteimes
+# fail in one of the tests, sometimes in other. I have a linux, and
+# the tests go ok.
+# If anybody has one of the problematic enviroments, please help!
+# .   Facundo
+#
+# def server(evt):
+#     serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+#     serv.settimeout(3)
+#     serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+#     serv.bind(("", 9093))
+#     serv.listen(5)
+#     try:
+#         conn, addr = serv.accept()
+#         conn.send("1 Hola mundo\n")
+#         cantdata = 0
+#         while cantdata < 13:
+#             data = conn.recv(13-cantdata)
+#             cantdata += len(data)
+#             time.sleep(.3)
+#         conn.send("2 No more lines\n")
+#         conn.close()
+#     except socket.timeout:
+#         pass
+#     finally:
+#         serv.close()
+#         evt.set()
+#
+# class FTPWrapperTests(unittest.TestCase):
+#
+#     def setUp(self):
+#         ftplib.FTP.port = 9093
+#         self.evt = threading.Event()
+#         threading.Thread(target=server, args=(self.evt,)).start()
+#         time.sleep(.1)
+#
+#     def tearDown(self):
+#         self.evt.wait()
+#
+#     def testBasic(self):
+#         # connects
+#         ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
+#         ftp.ftp.sock.close()
+#
+#     def testTimeoutDefault(self):
+#         # default
+#         ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
+#         self.assertTrue(ftp.ftp.sock.gettimeout() is None)
+#         ftp.ftp.sock.close()
+#
+#     def testTimeoutValue(self):
+#         # a value
+#         ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [], timeout=30)
+#         self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
+#         ftp.ftp.sock.close()
+#
+#     def testTimeoutNone(self):
+#         # None, having other default
+#         previous = socket.getdefaulttimeout()
+#         socket.setdefaulttimeout(30)
+#         try:
+#             ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
+#         finally:
+#             socket.setdefaulttimeout(previous)
+#         self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
+#         ftp.ftp.close()
+#
+
 
 
 def test_main():
@@ -551,7 +625,8 @@
         QuotingTests,
         UnquotingTests,
         urlencode_Tests,
-        Pathname_Tests
+        Pathname_Tests,
+        #FTPWrapperTests,
     )
 
 

Modified: python/branches/py3k-struni/Lib/test/test_xmlrpc.py
==============================================================================
--- python/branches/py3k-struni/Lib/test/test_xmlrpc.py	(original)
+++ python/branches/py3k-struni/Lib/test/test_xmlrpc.py	Thu Jun  7 01:52:48 2007
@@ -17,7 +17,7 @@
           'ashortlong': 2,
           'anotherlist': ['.zyx.41'],
           'abase64': xmlrpclib.Binary("my dog has fleas"),
-          'boolean': xmlrpclib.False,
+          'boolean': False,
           'unicode': '\u4000\u6000\u8000',
           'ukey\u4000': 'regular value',
           'datetime1': xmlrpclib.DateTime('20050210T11:41:23'),
@@ -133,10 +133,11 @@
                   """
 
         # sys.setdefaultencoding() normally doesn't exist after site.py is
-        # loaded.  reload(sys) is the way to get it back.
+        # loaded.  Re-initializing sys again is the way to get it back. :-(
         old_encoding = sys.getdefaultencoding()
         setdefaultencoding_existed = hasattr(sys, "setdefaultencoding")
-        reload(sys) # ugh!
+        import imp
+        imp.init_builtin('sys')
         sys.setdefaultencoding("iso-8859-1")
         try:
             (s, d), m = xmlrpclib.loads(utf8)

Modified: python/branches/py3k-struni/Lib/test/testtar.tar
==============================================================================
Binary files. No diff available.

Modified: python/branches/py3k-struni/Lib/textwrap.py
==============================================================================
--- python/branches/py3k-struni/Lib/textwrap.py	(original)
+++ python/branches/py3k-struni/Lib/textwrap.py	Thu Jun  7 01:52:48 2007
@@ -9,14 +9,6 @@
 
 import string, re
 
-# Do the right thing with boolean values for all known Python versions
-# (so this module can be copied to projects that don't depend on Python
-# 2.3, e.g. Optik and Docutils).
-try:
-    True, False
-except NameError:
-    (True, False) = (1, 0)
-
 __all__ = ['TextWrapper', 'wrap', 'fill']
 
 # Hardcode the recognized whitespace characters to the US-ASCII

Modified: python/branches/py3k-struni/Lib/unittest.py
==============================================================================
--- python/branches/py3k-struni/Lib/unittest.py	(original)
+++ python/branches/py3k-struni/Lib/unittest.py	Thu Jun  7 01:52:48 2007
@@ -65,22 +65,6 @@
 
 
 ##############################################################################
-# Backward compatibility
-##############################################################################
-if sys.version_info[:2] < (2, 2):
-    False, True = 0, 1
-    def isinstance(obj, clsinfo):
-        import __builtin__
-        if type(clsinfo) in (tuple, list):
-            for cls in clsinfo:
-                if cls is type: cls = types.ClassType
-                if __builtin__.isinstance(obj, cls):
-                    return 1
-            return 0
-        else: return __builtin__.isinstance(obj, clsinfo)
-
-
-##############################################################################
 # Test framework core
 ##############################################################################
 

Modified: python/branches/py3k-struni/Lib/urllib.py
==============================================================================
--- python/branches/py3k-struni/Lib/urllib.py	(original)
+++ python/branches/py3k-struni/Lib/urllib.py	Thu Jun  7 01:52:48 2007
@@ -805,19 +805,20 @@
 class ftpwrapper:
     """Class used by open_ftp() for cache of open FTP connections."""
 
-    def __init__(self, user, passwd, host, port, dirs):
+    def __init__(self, user, passwd, host, port, dirs, timeout=None):
         self.user = user
         self.passwd = passwd
         self.host = host
         self.port = port
         self.dirs = dirs
+        self.timeout = timeout
         self.init()
 
     def init(self):
         import ftplib
         self.busy = 0
         self.ftp = ftplib.FTP()
-        self.ftp.connect(self.host, self.port)
+        self.ftp.connect(self.host, self.port, self.timeout)
         self.ftp.login(self.user, self.passwd)
         for dir in self.dirs:
             self.ftp.cwd(dir)

Modified: python/branches/py3k-struni/Lib/uuid.py
==============================================================================
--- python/branches/py3k-struni/Lib/uuid.py	(original)
+++ python/branches/py3k-struni/Lib/uuid.py	Thu Jun  7 01:52:48 2007
@@ -535,8 +535,8 @@
 
 def uuid3(namespace, name):
     """Generate a UUID from the MD5 hash of a namespace UUID and a name."""
-    import hashlib
-    hash = hashlib.md5(namespace.bytes + name).digest()
+    from hashlib import md5
+    hash = md5(namespace.bytes + name).digest()
     return UUID(bytes=hash[:16], version=3)
 
 def uuid4():
@@ -558,8 +558,8 @@
 
 def uuid5(namespace, name):
     """Generate a UUID from the SHA-1 hash of a namespace UUID and a name."""
-    import sha
-    hash = sha.sha(namespace.bytes + name).digest()
+    from hashlib import sha1
+    hash = sha1(namespace.bytes + name).digest()
     return UUID(bytes=hash[:16], version=5)
 
 # The following standard UUIDs are for use with uuid3() or uuid5().

Modified: python/branches/py3k-struni/Lib/wsgiref/handlers.py
==============================================================================
--- python/branches/py3k-struni/Lib/wsgiref/handlers.py	(original)
+++ python/branches/py3k-struni/Lib/wsgiref/handlers.py	Thu Jun  7 01:52:48 2007
@@ -8,23 +8,6 @@
 
 __all__ = ['BaseHandler', 'SimpleHandler', 'BaseCGIHandler', 'CGIHandler']
 
-try:
-    dict
-except NameError:
-    def dict(items):
-        d = {}
-        for k,v in items:
-            d[k] = v
-        return d
-
-try:
-    True
-    False
-except NameError:
-    True = not None
-    False = not True
-
-
 # Weekday and month names for HTTP date/time formatting; always English!
 _weekdayname = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
 _monthname = [None, # Dummy so we can use 1-based month numbers

Modified: python/branches/py3k-struni/Lib/xmlrpclib.py
==============================================================================
--- python/branches/py3k-struni/Lib/xmlrpclib.py	(original)
+++ python/branches/py3k-struni/Lib/xmlrpclib.py	Thu Jun  7 01:52:48 2007
@@ -274,8 +274,6 @@
 #              all other values are interpreted as False.
 
 boolean = Boolean = bool
-# to avoid breaking code which references xmlrpclib.{True,False}
-True, False = True, False
 
 ##
 # Wrapper for XML-RPC DateTime values.  This converts a time value to

Modified: python/branches/py3k-struni/Misc/BeOS-setup.py
==============================================================================
--- python/branches/py3k-struni/Misc/BeOS-setup.py	(original)
+++ python/branches/py3k-struni/Misc/BeOS-setup.py	Thu Jun  7 01:52:48 2007
@@ -168,8 +168,6 @@
         if platform in ['Darwin1.2', 'beos']:
             math_libs = []
 
-        # XXX Omitted modules: gl, pure, dl, SGI-specific modules
-
         #
         # The following modules are all pretty straightforward, and compile
         # on pretty much any POSIXish platform.
@@ -242,9 +240,6 @@
         # Lance Ellinghaus's syslog daemon interface
         exts.append( Extension('syslog', ['syslogmodule.c']) )
 
-        # George Neville-Neil's timing module:
-        exts.append( Extension('timing', ['timingmodule.c']) )
-
         #
         # Here ends the simple stuff.  From here on, modules need certain
         # libraries, are platform-specific, or present other surprises.
@@ -340,15 +335,8 @@
         if self.compiler.find_library_file(lib_dirs, 'db'):
             dblib = ['db']
 
-        db185_incs = find_file('db_185.h', inc_dirs,
-                               ['/usr/include/db3', '/usr/include/db2'])
         db_inc = find_file('db.h', inc_dirs, ['/usr/include/db1'])
-        if db185_incs is not None:
-            exts.append( Extension('bsddb', ['bsddbmodule.c'],
-                                   include_dirs = db185_incs,
-                                   define_macros=[('HAVE_DB_185_H',1)],
-                                   libraries = dblib ) )
-        elif db_inc is not None:
+        db_inc is not None:
             exts.append( Extension('bsddb', ['bsddbmodule.c'],
                                    include_dirs = db_inc,
                                    libraries = dblib) )

Modified: python/branches/py3k-struni/Misc/NEWS
==============================================================================
--- python/branches/py3k-struni/Misc/NEWS	(original)
+++ python/branches/py3k-struni/Misc/NEWS	Thu Jun  7 01:52:48 2007
@@ -26,6 +26,8 @@
 Core and Builtins
 -----------------
 
+- None, True, False are now keywords.
+
 - PEP 3119: isinstance() and issubclass() can be overridden.
 
 - Remove BaseException.message.
@@ -137,7 +139,7 @@
   backticks (ie, `x`), <>
 
 - Removed these Python builtins:
-  apply(), callable(), coerce(), file(), reduce()
+  apply(), callable(), coerce(), file(), reduce(), reload()
 
 - Removed these Python methods:
   {}.has_key
@@ -163,6 +165,7 @@
 
 - Removed these attributes from Python modules:
   * operator module: div, idiv, __div__, __idiv__, isCallable, sequenceIncludes
+  * sys module: exc_clear(), exc_type, exc_value, exc_traceback
 
 
 Library
@@ -172,8 +175,8 @@
   AST -> bytecode mechanism.
 
 - Removed these modules:
-  * Bastion, bsddb185, exceptions, md5, popen2, rexec,
-    sets, sha, stringold, strop, xmllib
+  * Bastion, bsddb185, exceptions, md5, MimeWriter, mimify, popen2, rexec,
+    sets, sha, stringold, strop, timing, xmllib.
 
 - Remove obsolete IRIX modules: al/AL, cd/CD, cddb, cdplayer, cl/CL, DEVICE,
   ERRNO, FILE, fl/FL, flp, fm, GET, gl/GL, GLWS, IN, imgfile, IOCTL, jpeg,
@@ -223,6 +226,9 @@
 Mac
 ---
 
+- The cfmfile was removed.
+
+
 New platforms
 -------------
 

Modified: python/branches/py3k-struni/Misc/build.sh
==============================================================================
--- python/branches/py3k-struni/Misc/build.sh	(original)
+++ python/branches/py3k-struni/Misc/build.sh	Thu Jun  7 01:52:48 2007
@@ -170,6 +170,7 @@
             start=`current_time`
             make install >& build/$F
             update_status "Installing" "$F" $start
+            mail_on_failure "install" build/$F
 
             if [ ! -x $PYTHON ]; then
                 ln -s ${PYTHON}3.* $PYTHON

Modified: python/branches/py3k-struni/Misc/cheatsheet
==============================================================================
--- python/branches/py3k-struni/Misc/cheatsheet	(original)
+++ python/branches/py3k-struni/Misc/cheatsheet	Thu Jun  7 01:52:48 2007
@@ -41,6 +41,7 @@
 -h      print this help message and exit
 -i      Inspect interactively after running script (also PYTHONINSPECT=x) and
         force prompts, even if stdin appears not to be a terminal
+-m mod  run library module as a script (terminates option list
 -O      optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)
 -OO     remove doc-strings in addition to the -O optimizations
 -Q arg  division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
@@ -926,7 +927,6 @@
 abs(x)              Return the absolute value of number x.
 bool(x)             Returns True when the argument x is true and False otherwise.
 buffer(obj)         Creates a buffer reference to an object.
-callable(x)         Returns True if x callable, else False.
 chr(i)              Returns one-character string whose ASCII code isinteger i
 classmethod(f)      Converts a function f, into a method with the class as the
                     first argument.  Useful for creating alternative constructors.
@@ -934,14 +934,14 @@
 compile(string,     from which the code was read, or eg. '<string>'if not read
 filename, kind)     from file.kind can be 'eval' if string is a single stmt, or
                     'single' which prints the output of expression statements
-                    thatevaluate to something else than None, or be 'exec'.
+                    that evaluate to something else than None, or be 'exec'.
 complex(real[,      Builds a complex object (can also be done using J or j
 image])             suffix,e.g. 1+3J)
 delattr(obj, name)  deletes attribute named name of object obj <=> del obj.name
                     If no args, returns the list of names in current
 dict([items])       Create a new dictionary from the specified item list.
-dir([object])       localsymbol table. With a module, class or class
-                    instanceobject as arg, returns list of names in its attr.
+dir([object])       local symbol table. With a module, class or class
+                    instance object as arg, returns list of names in its attr.
                     dict.
 divmod(a,b)         Returns tuple of (a/b, a%b)
 enumerate(seq)      Return a iterator giving:  (0, seq[0]), (1, seq[1]), ...
@@ -956,7 +956,7 @@
 float(x)            Converts a number or a string to floating point.
 getattr(object,     [<default> arg added in 1.5.2]Gets attribute called name
 name[, default]))   from object,e.g. getattr(x, 'f') <=> x.f). If not found,
-                    raisesAttributeError or returns default if specified.
+                    raises AttributeError or returns default if specified.
 globals()           Returns a dictionary containing current global variables.
 hasattr(object,     Returns true if object has attr called name.
 name)
@@ -966,9 +966,7 @@
 id(object)          Returns a unique 'identity' integer for an object.
 int(x[, base])      base paramenter specifies base from which to convert string
                     values.
-intern(aString)     Enters aString in the table of "interned strings"
-                    andreturns the string. Interned strings are 'immortals'.
-isinstance(obj,     returns true if obj is an instance of class. Ifissubclass
+isinstance(obj,     Returns true if obj is an instance of class. Ifissubclass
 class)              (A,B) then isinstance(x,A) => isinstance(x,B)
 issubclass(class1,  returns true if class1 is derived from class2
 class2)
@@ -1001,26 +999,24 @@
   [, buffering]])
 pow(x, y [, z])     Returns x to power y [modulo z]. See also ** operator.
 property()          Created a property with access controlled by functions.
-range(start [,end   Returns list of ints from >= start and < end.With 1 arg,
-[, step]])          list from 0..arg-1With 2 args, list from start..end-1With 3
-                    args, list from start up to end by step
-reload(module)      after fixing it. If module was syntacticallycorrect but had
-                    an error in initialization, mustimport it one more time
-                    before calling reload().
-                    Returns a string containing a printable and if possible
-repr(object)        evaluable representation of an object. 
+range(start [,end   Returns list of ints from >= start and < end. With 1 arg,
+[, step]])          list from 0..arg-1. With 2 args, list from start..end-1.
+                    With 3 args, list from start up to end by step
+                    after fixing it.
+repr(object)        Returns a string containing a printable and if possible
+                    evaluable representation of an object. 
                     Class redefinable (__repr__). See also str().
 round(x, n=0)       Returns the floating point value x rounded to n digitsafter
                     the decimal point.
-setattr(object,     This is the counterpart of getattr().setattr(o, 'foobar',
-name, value)        3) <=> o.foobar = 3Creates attribute if it doesn't exist!
+setattr(object,     This is the counterpart of getattr(). setattr(o, 'foobar',
+name, value)        3) <=> o.foobar = 3. Creates attribute if it doesn't exist!
 slice([start,] stop Returns a slice object representing a range, with R/
-[, step])           Oattributes: start, stop, step.
-                    Returns a string containing a nicely
+[, step])           O attributes: start, stop, step.
 staticmethod()      Convert a function to method with no self or class
                     argument.  Useful for methods associated with a class that
                     do not need access to an object's internal state.
-str(object)         printablerepresentation of an object. Class overridable
+str(object)         Returns a string containing a nicely
+                    printable representation of an object. Class overridable
                     (__str__).See also repr().
 super(type)         Create an unbound super object.  Used to call cooperative
                     superclass methods.
@@ -1042,12 +1038,8 @@
 vars([object])      instance object as argumentreturns a dictionary
                     corresponding to the object'ssymbol table. Useful with "%"
                     formatting operator.
-xrange(start [, end Like range(), but doesn't actually store entire listall at
-[, step]])          once. Good to use in "for" loops when there is abig range
-                    and little memory.
-zip(seq1[, seq2,    Returns a list of tuples where each tuple contains the nth
-...])               element of each of the argument sequences.
-
+zip(seq1[, seq2,    Returns an iterator of tuples where each tuple contains
+...])               the nth element of each of the argument sequences.
 
 
 
@@ -1314,10 +1306,6 @@
                      in C that are linked into this interpreter.
 check_interval       How often to check for thread switches or signals(measured
                      in number of virtual machine instructions)
-exc_type, exc_value, Deprecated since release 1.5. Use exc_info() instead.
-exc_traceback
-exitfunc             User can set to a parameterless fcn. It will getcalled
-                     before interpreter exits.
 last_type,           Set only when an exception not handled andinterpreter
 last_value,          prints an error. Used by debuggers.
 last_traceback
@@ -1350,7 +1338,7 @@
 setprofile(func)   Sets a profile function for performance profiling.
                    Info on exception currently being handled; this is atuple
                    (exc_type, exc_value, exc_traceback).Warning: assigning the
-exc_info()         traceback return value to a loca variable in a
+exc_info()         traceback return value to a local variable in a
                    function handling an exception will cause a circular
                    reference.
 setdefaultencoding Change default Unicode encoding - defaults to 7-bit ASCII.
@@ -1857,7 +1845,6 @@
 dumbdbm          A dumb and slow but simple dbm clone.
 [DEL:dump:DEL]   [DEL:Print python code that reconstructs a variable.:DEL]
 email            Comprehensive support for internet email.
-exceptions       Class based built-in exception hierarchy.
 filecmp          File comparison.
 fileinput        Helper class to quickly write a loop over all standard input
                  files.
@@ -1872,7 +1859,6 @@
                  www.pauahtun.org/pub/getargspy.zip
 getpass          Utilities to get a password and/or the current user name.
 glob             filename globbing.
-gopherlib        Gopher protocol client interface.
 [DEL:grep:DEL]   [DEL:'grep' utilities.:DEL]
 gzip             Read & write gzipped files.
 heapq            Priority queue implemented using lists organized as heaps.
@@ -1887,7 +1873,6 @@
 imputil          Privides a way of writing customised import hooks.
 inspect          Tool for probing live Python objects.
 keyword          List of Python keywords.
-knee             A Python re-implementation of hierarchical module import.
 linecache        Cache lines from files.
 linuxaudiodev    Lunix /dev/audio support.
 locale           Support for number formatting using the current locale
@@ -1900,8 +1885,6 @@
 mhlib            MH (mailbox) interface.
 mimetools        Various tools used by MIME-reading or MIME-writing programs.
 mimetypes        Guess the MIME type of a file.
-MimeWriter       Generic MIME writer.
-mimify           Mimification and unmimification of mail messages.
 mmap             Interface to memory-mapped files - they behave like mutable
                  strings./font>
 multifile        Class to make multi-file messages easier to handle.
@@ -1920,7 +1903,6 @@
 pipes            Conversion pipeline templates.
 pkgunil          Utilities for working with Python packages.
 poplib           A POP3 client class. Based on the J. Myers POP3 draft.
-posixfile        Extended (posix) file operations.
 posixpath        Common operations on POSIX pathnames.
 pprint           Support to pretty-print lists, tuples, & dictionaries
                  recursively.
@@ -1933,7 +1915,6 @@
 pyclbr           Parse a Python file and retrieve classes and methods.
 Queue            A multi-producer, multi-consumer queue.
 quopri           Conversions to/from quoted-printable transport encoding.
-rand             Don't use unless you want compatibility with C's rand().
 random           Random variable generators
 re               Regular Expressions.
 repr             Redo repr() but with limits on most sizes.
@@ -1942,7 +1923,6 @@
 rlcompleter      Word completion for GNU readline 2.0.
 robotparser      Parse robots.txt files, useful for web spiders.
 sched            A generally useful event scheduler class.
-sets             Module for a set datatype.
 sgmllib          A parser for SGML.
 shelve           Manage shelves of pickled objects.
 shlex            Lexical analyzer class for simple shell-like syntaxes.
@@ -1954,7 +1934,6 @@
 sndhdr           Several routines that help recognizing sound.
 SocketServer     Generic socket server classes.
 stat             Constants and functions for interpreting stat/lstat struct.
-statcache        Maintain a cache of file stats.
 statvfs          Constants for interpreting statvfs struct as returned by
                  os.statvfs()and os.fstatvfs() (if they exist).
 string           A collection of string operations.

Modified: python/branches/py3k-struni/Modules/Setup.dist
==============================================================================
--- python/branches/py3k-struni/Modules/Setup.dist	(original)
+++ python/branches/py3k-struni/Modules/Setup.dist	Thu Jun  7 01:52:48 2007
@@ -247,11 +247,6 @@
 #linuxaudiodev linuxaudiodev.c
 
 
-# George Neville-Neil's timing module:
-
-#timing timingmodule.c
-
-
 # The _tkinter module.
 #
 # The command for _tkinter is long and site specific.  Please

Modified: python/branches/py3k-struni/Modules/_ctypes/callbacks.c
==============================================================================
--- python/branches/py3k-struni/Modules/_ctypes/callbacks.c	(original)
+++ python/branches/py3k-struni/Modules/_ctypes/callbacks.c	Thu Jun  7 01:52:48 2007
@@ -385,8 +385,8 @@
 	}
 
 	{
-		PyObject *py_rclsid = PyLong_FromVoidPtr(rclsid);
-		PyObject *py_riid = PyLong_FromVoidPtr(riid);
+		PyObject *py_rclsid = PyLong_FromVoidPtr((void *)rclsid);
+		PyObject *py_riid = PyLong_FromVoidPtr((void *)riid);
 		PyObject *py_ppv = PyLong_FromVoidPtr(ppv);
 		if (!py_rclsid || !py_riid || !py_ppv) {
 			Py_XDECREF(py_rclsid);

Deleted: /python/branches/py3k-struni/Modules/md5.c
==============================================================================
--- /python/branches/py3k-struni/Modules/md5.c	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,381 +0,0 @@
-/*
-  Copyright (C) 1999, 2000, 2002 Aladdin Enterprises.  All rights reserved.
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  L. Peter Deutsch
-  ghost at aladdin.com
-
- */
-/* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */
-/*
-  Independent implementation of MD5 (RFC 1321).
-
-  This code implements the MD5 Algorithm defined in RFC 1321, whose
-  text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
-  The code is derived from the text of the RFC, including the test suite
-  (section A.5) but excluding the rest of Appendix A.  It does not include
-  any code or documentation that is identified in the RFC as being
-  copyrighted.
-
-  The original and principal author of md5.c is L. Peter Deutsch
-  <ghost at aladdin.com>.  Other authors are noted in the change history
-  that follows (in reverse chronological order):
-
-  2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
-	either statically or dynamically; added missing #include <string.h>
-	in library.
-  2002-03-11 lpd Corrected argument list for main(), and added int return
-	type, in test program and T value program.
-  2002-02-21 lpd Added missing #include <stdio.h> in test program.
-  2000-07-03 lpd Patched to eliminate warnings about "constant is
-	unsigned in ANSI C, signed in traditional"; made test program
-	self-checking.
-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
-  1999-05-03 lpd Original version.
- */
-
-#include "md5.h"
-#include <string.h>
-
-#undef BYTE_ORDER	/* 1 = big-endian, -1 = little-endian, 0 = unknown */
-#ifdef ARCH_IS_BIG_ENDIAN
-#  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
-#else
-#  define BYTE_ORDER 0
-#endif
-
-#define T_MASK ((md5_word_t)~0)
-#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
-#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
-#define T3    0x242070db
-#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
-#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
-#define T6    0x4787c62a
-#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
-#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
-#define T9    0x698098d8
-#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
-#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
-#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
-#define T13    0x6b901122
-#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
-#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
-#define T16    0x49b40821
-#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
-#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
-#define T19    0x265e5a51
-#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
-#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
-#define T22    0x02441453
-#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
-#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
-#define T25    0x21e1cde6
-#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
-#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
-#define T28    0x455a14ed
-#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
-#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
-#define T31    0x676f02d9
-#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
-#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
-#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
-#define T35    0x6d9d6122
-#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
-#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
-#define T38    0x4bdecfa9
-#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
-#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
-#define T41    0x289b7ec6
-#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
-#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
-#define T44    0x04881d05
-#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
-#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
-#define T47    0x1fa27cf8
-#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
-#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
-#define T50    0x432aff97
-#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
-#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
-#define T53    0x655b59c3
-#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
-#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
-#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
-#define T57    0x6fa87e4f
-#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
-#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
-#define T60    0x4e0811a1
-#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
-#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
-#define T63    0x2ad7d2bb
-#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
-
-
-static void
-md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
-{
-    md5_word_t
-	a = pms->abcd[0], b = pms->abcd[1],
-	c = pms->abcd[2], d = pms->abcd[3];
-    md5_word_t t;
-#if BYTE_ORDER > 0
-    /* Define storage only for big-endian CPUs. */
-    md5_word_t X[16];
-#else
-    /* Define storage for little-endian or both types of CPUs. */
-    md5_word_t xbuf[16];
-    const md5_word_t *X;
-#endif
-
-    {
-#if BYTE_ORDER == 0
-	/*
-	 * Determine dynamically whether this is a big-endian or
-	 * little-endian machine, since we can use a more efficient
-	 * algorithm on the latter.
-	 */
-	static const int w = 1;
-
-	if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
-#endif
-#if BYTE_ORDER <= 0		/* little-endian */
-	{
-	    /*
-	     * On little-endian machines, we can process properly aligned
-	     * data without copying it.
-	     */
-	    if (!((data - (const md5_byte_t *)0) & 3)) {
-		/* data are properly aligned */
-		X = (const md5_word_t *)data;
-	    } else {
-		/* not aligned */
-		memcpy(xbuf, data, 64);
-		X = xbuf;
-	    }
-	}
-#endif
-#if BYTE_ORDER == 0
-	else			/* dynamic big-endian */
-#endif
-#if BYTE_ORDER >= 0		/* big-endian */
-	{
-	    /*
-	     * On big-endian machines, we must arrange the bytes in the
-	     * right order.
-	     */
-	    const md5_byte_t *xp = data;
-	    int i;
-
-#  if BYTE_ORDER == 0
-	    X = xbuf;		/* (dynamic only) */
-#  else
-#    define xbuf X		/* (static only) */
-#  endif
-	    for (i = 0; i < 16; ++i, xp += 4)
-		xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
-	}
-#endif
-    }
-
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-
-    /* Round 1. */
-    /* Let [abcd k s i] denote the operation
-       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
-#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + F(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-    /* Do the following 16 operations. */
-    SET(a, b, c, d,  0,  7,  T1);
-    SET(d, a, b, c,  1, 12,  T2);
-    SET(c, d, a, b,  2, 17,  T3);
-    SET(b, c, d, a,  3, 22,  T4);
-    SET(a, b, c, d,  4,  7,  T5);
-    SET(d, a, b, c,  5, 12,  T6);
-    SET(c, d, a, b,  6, 17,  T7);
-    SET(b, c, d, a,  7, 22,  T8);
-    SET(a, b, c, d,  8,  7,  T9);
-    SET(d, a, b, c,  9, 12, T10);
-    SET(c, d, a, b, 10, 17, T11);
-    SET(b, c, d, a, 11, 22, T12);
-    SET(a, b, c, d, 12,  7, T13);
-    SET(d, a, b, c, 13, 12, T14);
-    SET(c, d, a, b, 14, 17, T15);
-    SET(b, c, d, a, 15, 22, T16);
-#undef SET
-
-     /* Round 2. */
-     /* Let [abcd k s i] denote the operation
-          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
-#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + G(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  1,  5, T17);
-    SET(d, a, b, c,  6,  9, T18);
-    SET(c, d, a, b, 11, 14, T19);
-    SET(b, c, d, a,  0, 20, T20);
-    SET(a, b, c, d,  5,  5, T21);
-    SET(d, a, b, c, 10,  9, T22);
-    SET(c, d, a, b, 15, 14, T23);
-    SET(b, c, d, a,  4, 20, T24);
-    SET(a, b, c, d,  9,  5, T25);
-    SET(d, a, b, c, 14,  9, T26);
-    SET(c, d, a, b,  3, 14, T27);
-    SET(b, c, d, a,  8, 20, T28);
-    SET(a, b, c, d, 13,  5, T29);
-    SET(d, a, b, c,  2,  9, T30);
-    SET(c, d, a, b,  7, 14, T31);
-    SET(b, c, d, a, 12, 20, T32);
-#undef SET
-
-     /* Round 3. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + H(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  5,  4, T33);
-    SET(d, a, b, c,  8, 11, T34);
-    SET(c, d, a, b, 11, 16, T35);
-    SET(b, c, d, a, 14, 23, T36);
-    SET(a, b, c, d,  1,  4, T37);
-    SET(d, a, b, c,  4, 11, T38);
-    SET(c, d, a, b,  7, 16, T39);
-    SET(b, c, d, a, 10, 23, T40);
-    SET(a, b, c, d, 13,  4, T41);
-    SET(d, a, b, c,  0, 11, T42);
-    SET(c, d, a, b,  3, 16, T43);
-    SET(b, c, d, a,  6, 23, T44);
-    SET(a, b, c, d,  9,  4, T45);
-    SET(d, a, b, c, 12, 11, T46);
-    SET(c, d, a, b, 15, 16, T47);
-    SET(b, c, d, a,  2, 23, T48);
-#undef SET
-
-     /* Round 4. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
-#define I(x, y, z) ((y) ^ ((x) | ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + I(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  0,  6, T49);
-    SET(d, a, b, c,  7, 10, T50);
-    SET(c, d, a, b, 14, 15, T51);
-    SET(b, c, d, a,  5, 21, T52);
-    SET(a, b, c, d, 12,  6, T53);
-    SET(d, a, b, c,  3, 10, T54);
-    SET(c, d, a, b, 10, 15, T55);
-    SET(b, c, d, a,  1, 21, T56);
-    SET(a, b, c, d,  8,  6, T57);
-    SET(d, a, b, c, 15, 10, T58);
-    SET(c, d, a, b,  6, 15, T59);
-    SET(b, c, d, a, 13, 21, T60);
-    SET(a, b, c, d,  4,  6, T61);
-    SET(d, a, b, c, 11, 10, T62);
-    SET(c, d, a, b,  2, 15, T63);
-    SET(b, c, d, a,  9, 21, T64);
-#undef SET
-
-     /* Then perform the following additions. (That is increment each
-        of the four registers by the value it had before this block
-        was started.) */
-    pms->abcd[0] += a;
-    pms->abcd[1] += b;
-    pms->abcd[2] += c;
-    pms->abcd[3] += d;
-}
-
-void
-md5_init(md5_state_t *pms)
-{
-    pms->count[0] = pms->count[1] = 0;
-    pms->abcd[0] = 0x67452301;
-    pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
-    pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
-    pms->abcd[3] = 0x10325476;
-}
-
-void
-md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
-{
-    const md5_byte_t *p = data;
-    int left = nbytes;
-    int offset = (pms->count[0] >> 3) & 63;
-    md5_word_t nbits = (md5_word_t)(nbytes << 3);
-
-    if (nbytes <= 0)
-	return;
-
-    /* Update the message length. */
-    pms->count[1] += nbytes >> 29;
-    pms->count[0] += nbits;
-    if (pms->count[0] < nbits)
-	pms->count[1]++;
-
-    /* Process an initial partial block. */
-    if (offset) {
-	int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
-
-	memcpy(pms->buf + offset, p, copy);
-	if (offset + copy < 64)
-	    return;
-	p += copy;
-	left -= copy;
-	md5_process(pms, pms->buf);
-    }
-
-    /* Process full blocks. */
-    for (; left >= 64; p += 64, left -= 64)
-	md5_process(pms, p);
-
-    /* Process a final partial block. */
-    if (left)
-	memcpy(pms->buf, p, left);
-}
-
-void
-md5_finish(md5_state_t *pms, md5_byte_t digest[16])
-{
-    static const md5_byte_t pad[64] = {
-	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    md5_byte_t data[8];
-    int i;
-
-    /* Save the length before padding. */
-    for (i = 0; i < 8; ++i)
-	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
-    /* Pad to 56 bytes mod 64. */
-    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
-    /* Append the length. */
-    md5_append(pms, data, 8);
-    for (i = 0; i < 16; ++i)
-	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
-}

Deleted: /python/branches/py3k-struni/Modules/md5.h
==============================================================================
--- /python/branches/py3k-struni/Modules/md5.h	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,91 +0,0 @@
-/*
-  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  L. Peter Deutsch
-  ghost at aladdin.com
-
- */
-/* $Id$ */
-/*
-  Independent implementation of MD5 (RFC 1321).
-
-  This code implements the MD5 Algorithm defined in RFC 1321, whose
-  text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
-  The code is derived from the text of the RFC, including the test suite
-  (section A.5) but excluding the rest of Appendix A.  It does not include
-  any code or documentation that is identified in the RFC as being
-  copyrighted.
-
-  The original and principal author of md5.h is L. Peter Deutsch
-  <ghost at aladdin.com>.  Other authors are noted in the change history
-  that follows (in reverse chronological order):
-
-  2002-04-13 lpd Removed support for non-ANSI compilers; removed
-	references to Ghostscript; clarified derivation from RFC 1321;
-	now handles byte order either statically or dynamically.
-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
-	added conditionalization for C++ compilation from Martin
-	Purschke <purschke at bnl.gov>.
-  1999-05-03 lpd Original version.
- */
-
-#ifndef md5_INCLUDED
-#  define md5_INCLUDED
-
-/*
- * This package supports both compile-time and run-time determination of CPU
- * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
- * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
- * defined as non-zero, the code will be compiled to run only on big-endian
- * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
- * run on either big- or little-endian CPUs, but will run slightly less
- * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
- */
-
-typedef unsigned char md5_byte_t; /* 8-bit byte */
-typedef unsigned int md5_word_t; /* 32-bit word */
-
-/* Define the state of the MD5 Algorithm. */
-typedef struct md5_state_s {
-    md5_word_t count[2];	/* message length in bits, lsw first */
-    md5_word_t abcd[4];		/* digest buffer */
-    md5_byte_t buf[64];		/* accumulate block */
-} md5_state_t;
-
-#ifdef __cplusplus
-extern "C" 
-{
-#endif
-
-/* Initialize the algorithm. */
-void md5_init(md5_state_t *pms);
-
-/* Append a string to the message. */
-void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
-
-/* Finish the message and return the digest. */
-void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
-
-#ifdef __cplusplus
-}  /* end extern "C" */
-#endif
-
-#endif /* md5_INCLUDED */

Deleted: /python/branches/py3k-struni/Modules/md5module.c
==============================================================================
--- /python/branches/py3k-struni/Modules/md5module.c	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,312 +0,0 @@
-
-/* MD5 module */
-
-/* This module provides an interface to the RSA Data Security,
-   Inc. MD5 Message-Digest Algorithm, described in RFC 1321.
-   It requires the files md5c.c and md5.h (which are slightly changed
-   from the versions in the RFC to avoid the "global.h" file.) */
-
-
-/* MD5 objects */
-
-#include "Python.h"
-#include "structmember.h"
-#include "md5.h"
-
-typedef struct {
-	PyObject_HEAD
-        md5_state_t	md5;		/* the context holder */
-} md5object;
-
-static PyTypeObject MD5type;
-
-#define is_md5object(v)		((v)->ob_type == &MD5type)
-
-static md5object *
-newmd5object(void)
-{
-	md5object *md5p;
-
-	md5p = PyObject_New(md5object, &MD5type);
-	if (md5p == NULL)
-		return NULL;
-
-	md5_init(&md5p->md5);	/* actual initialisation */
-	return md5p;
-}
-
-
-/* MD5 methods */
-
-static void
-md5_dealloc(md5object *md5p)
-{
-	PyObject_Del(md5p);
-}
-
-
-/* MD5 methods-as-attributes */
-
-static PyObject *
-md5_update(md5object *self, PyObject *args)
-{
-	unsigned char *cp;
-	int len;
-
-	if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))
-		return NULL;
-
-	md5_append(&self->md5, cp, len);
-
-	Py_INCREF(Py_None);
-	return Py_None;
-}
-
-PyDoc_STRVAR(update_doc,
-"update (arg)\n\
-\n\
-Update the md5 object with the string arg. Repeated calls are\n\
-equivalent to a single call with the concatenation of all the\n\
-arguments.");
-
-
-static PyObject *
-md5_digest(md5object *self)
-{
- 	md5_state_t mdContext;
-	unsigned char aDigest[16];
-
-	/* make a temporary copy, and perform the final */
-	mdContext = self->md5;
-	md5_finish(&mdContext, aDigest);
-
-	return PyString_FromStringAndSize((char *)aDigest, 16);
-}
-
-PyDoc_STRVAR(digest_doc,
-"digest() -> string\n\
-\n\
-Return the digest of the strings passed to the update() method so\n\
-far. This is a 16-byte string which may contain non-ASCII characters,\n\
-including null bytes.");
-
-
-static PyObject *
-md5_hexdigest(md5object *self)
-{
- 	md5_state_t mdContext;
-	unsigned char digest[16];
-	unsigned char hexdigest[32];
-	int i, j;
-
-	/* make a temporary copy, and perform the final */
-	mdContext = self->md5;
-	md5_finish(&mdContext, digest);
-
-	/* Make hex version of the digest */
-	for(i=j=0; i<16; i++) {
-		char c;
-		c = (digest[i] >> 4) & 0xf;
-		c = (c>9) ? c+'a'-10 : c + '0';
-		hexdigest[j++] = c;
-		c = (digest[i] & 0xf);
-		c = (c>9) ? c+'a'-10 : c + '0';
-		hexdigest[j++] = c;
-	}
-	return PyString_FromStringAndSize((char*)hexdigest, 32);
-}
-
-
-PyDoc_STRVAR(hexdigest_doc,
-"hexdigest() -> string\n\
-\n\
-Like digest(), but returns the digest as a string of hexadecimal digits.");
-
-
-static PyObject *
-md5_copy(md5object *self)
-{
-	md5object *md5p;
-
-	if ((md5p = newmd5object()) == NULL)
-		return NULL;
-
-	md5p->md5 = self->md5;
-
-	return (PyObject *)md5p;
-}
-
-PyDoc_STRVAR(copy_doc,
-"copy() -> md5 object\n\
-\n\
-Return a copy (``clone'') of the md5 object.");
-
-
-static PyMethodDef md5_methods[] = {
-	{"update",    (PyCFunction)md5_update,    METH_VARARGS, update_doc},
-	{"digest",    (PyCFunction)md5_digest,    METH_NOARGS,  digest_doc},
-	{"hexdigest", (PyCFunction)md5_hexdigest, METH_NOARGS,  hexdigest_doc},
-	{"copy",      (PyCFunction)md5_copy,      METH_NOARGS,  copy_doc},
-	{NULL, NULL}			     /* sentinel */
-};
-
-static PyObject *
-md5_get_block_size(PyObject *self, void *closure)
-{
-    return PyInt_FromLong(64);
-}
-
-static PyObject *
-md5_get_digest_size(PyObject *self, void *closure)
-{
-    return PyInt_FromLong(16);
-}
-
-static PyObject *
-md5_get_name(PyObject *self, void *closure)
-{
-    return PyString_FromStringAndSize("MD5", 3);
-}
-
-static PyGetSetDef md5_getseters[] = {
-    {"digest_size",
-     (getter)md5_get_digest_size, NULL,
-     NULL,
-     NULL},
-    {"block_size",
-     (getter)md5_get_block_size, NULL,
-     NULL,
-     NULL},
-    {"name",
-     (getter)md5_get_name, NULL,
-     NULL,
-     NULL},
-    /* the old md5 and sha modules support 'digest_size' as in PEP 247.
-     * the old sha module also supported 'digestsize'.  ugh. */
-    {"digestsize",
-     (getter)md5_get_digest_size, NULL,
-     NULL,
-     NULL},
-    {NULL}  /* Sentinel */
-};
-
-
-PyDoc_STRVAR(module_doc,
-"This module implements the interface to RSA's MD5 message digest\n\
-algorithm (see also Internet RFC 1321). Its use is quite\n\
-straightforward: use the new() to create an md5 object. You can now\n\
-feed this object with arbitrary strings using the update() method, and\n\
-at any point you can ask it for the digest (a strong kind of 128-bit\n\
-checksum, a.k.a. ``fingerprint'') of the concatenation of the strings\n\
-fed to it so far using the digest() method.\n\
-\n\
-Functions:\n\
-\n\
-new([arg]) -- return a new md5 object, initialized with arg if provided\n\
-md5([arg]) -- DEPRECATED, same as new, but for compatibility\n\
-\n\
-Special Objects:\n\
-\n\
-MD5Type -- type object for md5 objects");
-
-PyDoc_STRVAR(md5type_doc,
-"An md5 represents the object used to calculate the MD5 checksum of a\n\
-string of information.\n\
-\n\
-Methods:\n\
-\n\
-update() -- updates the current digest with an additional string\n\
-digest() -- return the current digest value\n\
-hexdigest() -- return the current digest as a string of hexadecimal digits\n\
-copy() -- return a copy of the current md5 object");
-
-static PyTypeObject MD5type = {
-	PyObject_HEAD_INIT(NULL)
-	0,			  /*ob_size*/
-	"_md5.md5",		  /*tp_name*/
-	sizeof(md5object),	  /*tp_size*/
-	0,			  /*tp_itemsize*/
-	/* methods */
-	(destructor)md5_dealloc,  /*tp_dealloc*/
-	0,			  /*tp_print*/
-	0,                        /*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*/
-	0,			  /*tp_call*/
-	0,			  /*tp_str*/
-	0,			  /*tp_getattro*/
-	0,			  /*tp_setattro*/
-	0,	                  /*tp_as_buffer*/
-	Py_TPFLAGS_DEFAULT,	  /*tp_flags*/
-	md5type_doc,		  /*tp_doc*/
-        0,                        /*tp_traverse*/
-        0,			  /*tp_clear*/
-        0,			  /*tp_richcompare*/
-        0,			  /*tp_weaklistoffset*/
-        0,			  /*tp_iter*/
-        0,			  /*tp_iternext*/
-        md5_methods,	          /*tp_methods*/
-        0,      	          /*tp_members*/
-        md5_getseters,            /*tp_getset*/
-};
-
-
-/* MD5 functions */
-
-static PyObject *
-MD5_new(PyObject *self, PyObject *args)
-{
-	md5object *md5p;
-	unsigned char *cp = NULL;
-	int len = 0;
-
-	if (!PyArg_ParseTuple(args, "|s#:new", &cp, &len))
-		return NULL;
-
-	if ((md5p = newmd5object()) == NULL)
-		return NULL;
-
-	if (cp)
-		md5_append(&md5p->md5, cp, len);
-
-	return (PyObject *)md5p;
-}
-
-PyDoc_STRVAR(new_doc,
-"new([arg]) -> md5 object\n\
-\n\
-Return a new md5 object. If arg is present, the method call update(arg)\n\
-is made.");
-
-
-/* List of functions exported by this module */
-
-static PyMethodDef md5_functions[] = {
-	{"new",		(PyCFunction)MD5_new, METH_VARARGS, new_doc},
-	{NULL,		NULL}	/* Sentinel */
-};
-
-
-/* Initialize this module. */
-
-PyMODINIT_FUNC
-init_md5(void)
-{
-	PyObject *m, *d;
-
-        MD5type.ob_type = &PyType_Type;
-        if (PyType_Ready(&MD5type) < 0)
-            return;
-	m = Py_InitModule3("_md5", md5_functions, module_doc);
-	if (m == NULL)
-	    return;
-	d = PyModule_GetDict(m);
-	PyDict_SetItemString(d, "MD5Type", (PyObject *)&MD5type);
-	PyModule_AddIntConstant(m, "digest_size", 16);
-	/* No need to check the error here, the caller will do that */
-}

Deleted: /python/branches/py3k-struni/Modules/shamodule.c
==============================================================================
--- /python/branches/py3k-struni/Modules/shamodule.c	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,593 +0,0 @@
-/* SHA module */
-
-/* This module provides an interface to NIST's Secure Hash Algorithm */
-
-/* See below for information about the original code this module was
-   based upon. Additional work performed by:
-
-   Andrew Kuchling (amk at amk.ca)
-   Greg Stein (gstein at lyra.org)
-
-   Copyright (C) 2005   Gregory P. Smith (greg at electricrain.com)
-   Licensed to PSF under a Contributor Agreement.
-
-*/
-
-/* SHA objects */
-
-#include "Python.h"
-#include "structmember.h"
-
-
-/* Endianness testing and definitions */
-#define TestEndianness(variable) {int i=1; variable=PCT_BIG_ENDIAN;\
-	if (*((char*)&i)==1) variable=PCT_LITTLE_ENDIAN;}
-
-#define PCT_LITTLE_ENDIAN 1
-#define PCT_BIG_ENDIAN 0
-
-/* Some useful types */
-
-typedef unsigned char SHA_BYTE;
-
-#if SIZEOF_INT == 4
-typedef unsigned int SHA_INT32;	/* 32-bit integer */
-#else
-/* not defined. compilation will die. */
-#endif
-
-/* The SHA block size and message digest sizes, in bytes */
-
-#define SHA_BLOCKSIZE    64
-#define SHA_DIGESTSIZE  20
-
-/* The structure for storing SHS info */
-
-typedef struct {
-    PyObject_HEAD
-    SHA_INT32 digest[5];		/* Message digest */
-    SHA_INT32 count_lo, count_hi;	/* 64-bit bit count */
-    SHA_BYTE data[SHA_BLOCKSIZE];	/* SHA data buffer */
-    int Endianness;
-    int local;				/* unprocessed amount in data */
-} SHAobject;
-
-/* When run on a little-endian CPU we need to perform byte reversal on an
-   array of longwords. */
-
-static void longReverse(SHA_INT32 *buffer, int byteCount, int Endianness)
-{
-    SHA_INT32 value;
-
-    if ( Endianness == PCT_BIG_ENDIAN )
-	return;
-
-    byteCount /= sizeof(*buffer);
-    while (byteCount--) {
-        value = *buffer;
-        value = ( ( value & 0xFF00FF00L ) >> 8  ) | \
-                ( ( value & 0x00FF00FFL ) << 8 );
-        *buffer++ = ( value << 16 ) | ( value >> 16 );
-    }
-}
-
-static void SHAcopy(SHAobject *src, SHAobject *dest)
-{
-    dest->Endianness = src->Endianness;
-    dest->local = src->local;
-    dest->count_lo = src->count_lo;
-    dest->count_hi = src->count_hi;
-    memcpy(dest->digest, src->digest, sizeof(src->digest));
-    memcpy(dest->data, src->data, sizeof(src->data));
-}
-
-
-/* ------------------------------------------------------------------------
- *
- * This code for the SHA algorithm was noted as public domain. The original
- * headers are pasted below.
- *
- * Several changes have been made to make it more compatible with the
- * Python environment and desired interface.
- *
- */
-
-/* NIST Secure Hash Algorithm */
-/* heavily modified by Uwe Hollerbach <uh at alumni.caltech edu> */
-/* from Peter C. Gutmann's implementation as found in */
-/* Applied Cryptography by Bruce Schneier */
-/* Further modifications to include the "UNRAVEL" stuff, below */
-
-/* This code is in the public domain */
-
-/* UNRAVEL should be fastest & biggest */
-/* UNROLL_LOOPS should be just as big, but slightly slower */
-/* both undefined should be smallest and slowest */
-
-#define UNRAVEL
-/* #define UNROLL_LOOPS */
-
-/* The SHA f()-functions.  The f1 and f3 functions can be optimized to
-   save one boolean operation each - thanks to Rich Schroeppel,
-   rcs at cs.arizona.edu for discovering this */
-
-/*#define f1(x,y,z)	((x & y) | (~x & z))		// Rounds  0-19 */
-#define f1(x,y,z)	(z ^ (x & (y ^ z)))		/* Rounds  0-19 */
-#define f2(x,y,z)	(x ^ y ^ z)			/* Rounds 20-39 */
-/*#define f3(x,y,z)	((x & y) | (x & z) | (y & z))	// Rounds 40-59 */
-#define f3(x,y,z)	((x & y) | (z & (x | y)))	/* Rounds 40-59 */
-#define f4(x,y,z)	(x ^ y ^ z)			/* Rounds 60-79 */
-
-/* SHA constants */
-
-#define CONST1		0x5a827999L			/* Rounds  0-19 */
-#define CONST2		0x6ed9eba1L			/* Rounds 20-39 */
-#define CONST3		0x8f1bbcdcL			/* Rounds 40-59 */
-#define CONST4		0xca62c1d6L			/* Rounds 60-79 */
-
-/* 32-bit rotate */
-
-#define R32(x,n)	((x << n) | (x >> (32 - n)))
-
-/* the generic case, for when the overall rotation is not unraveled */
-
-#define FG(n)	\
-    T = R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n;	\
-    E = D; D = C; C = R32(B,30); B = A; A = T
-
-/* specific cases, for when the overall rotation is unraveled */
-
-#define FA(n)	\
-    T = R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n; B = R32(B,30)
-
-#define FB(n)	\
-    E = R32(T,5) + f##n(A,B,C) + D + *WP++ + CONST##n; A = R32(A,30)
-
-#define FC(n)	\
-    D = R32(E,5) + f##n(T,A,B) + C + *WP++ + CONST##n; T = R32(T,30)
-
-#define FD(n)	\
-    C = R32(D,5) + f##n(E,T,A) + B + *WP++ + CONST##n; E = R32(E,30)
-
-#define FE(n)	\
-    B = R32(C,5) + f##n(D,E,T) + A + *WP++ + CONST##n; D = R32(D,30)
-
-#define FT(n)	\
-    A = R32(B,5) + f##n(C,D,E) + T + *WP++ + CONST##n; C = R32(C,30)
-
-/* do SHA transformation */
-
-static void
-sha_transform(SHAobject *sha_info)
-{
-    int i;
-    SHA_INT32 T, A, B, C, D, E, W[80], *WP;
-
-    memcpy(W, sha_info->data, sizeof(sha_info->data));
-    longReverse(W, (int)sizeof(sha_info->data), sha_info->Endianness);
-
-    for (i = 16; i < 80; ++i) {
-	W[i] = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16];
-
-	/* extra rotation fix */
-	W[i] = R32(W[i], 1);
-    }
-    A = sha_info->digest[0];
-    B = sha_info->digest[1];
-    C = sha_info->digest[2];
-    D = sha_info->digest[3];
-    E = sha_info->digest[4];
-    WP = W;
-#ifdef UNRAVEL
-    FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); FC(1); FD(1);
-    FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1);
-    FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); FE(2); FT(2);
-    FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2);
-    FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); FA(3); FB(3);
-    FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3);
-    FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); FC(4); FD(4);
-    FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4);
-    sha_info->digest[0] += E;
-    sha_info->digest[1] += T;
-    sha_info->digest[2] += A;
-    sha_info->digest[3] += B;
-    sha_info->digest[4] += C;
-#else /* !UNRAVEL */
-#ifdef UNROLL_LOOPS
-    FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1);
-    FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1);
-    FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2);
-    FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2);
-    FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3);
-    FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3);
-    FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4);
-    FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4);
-#else /* !UNROLL_LOOPS */
-    for (i =  0; i < 20; ++i) { FG(1); }
-    for (i = 20; i < 40; ++i) { FG(2); }
-    for (i = 40; i < 60; ++i) { FG(3); }
-    for (i = 60; i < 80; ++i) { FG(4); }
-#endif /* !UNROLL_LOOPS */
-    sha_info->digest[0] += A;
-    sha_info->digest[1] += B;
-    sha_info->digest[2] += C;
-    sha_info->digest[3] += D;
-    sha_info->digest[4] += E;
-#endif /* !UNRAVEL */
-}
-
-/* initialize the SHA digest */
-
-static void
-sha_init(SHAobject *sha_info)
-{
-    TestEndianness(sha_info->Endianness)
-
-    sha_info->digest[0] = 0x67452301L;
-    sha_info->digest[1] = 0xefcdab89L;
-    sha_info->digest[2] = 0x98badcfeL;
-    sha_info->digest[3] = 0x10325476L;
-    sha_info->digest[4] = 0xc3d2e1f0L;
-    sha_info->count_lo = 0L;
-    sha_info->count_hi = 0L;
-    sha_info->local = 0;
-}
-
-/* update the SHA digest */
-
-static void
-sha_update(SHAobject *sha_info, SHA_BYTE *buffer, int count)
-{
-    int i;
-    SHA_INT32 clo;
-
-    clo = sha_info->count_lo + ((SHA_INT32) count << 3);
-    if (clo < sha_info->count_lo) {
-        ++sha_info->count_hi;
-    }
-    sha_info->count_lo = clo;
-    sha_info->count_hi += (SHA_INT32) count >> 29;
-    if (sha_info->local) {
-        i = SHA_BLOCKSIZE - sha_info->local;
-        if (i > count) {
-            i = count;
-        }
-        memcpy(((SHA_BYTE *) sha_info->data) + sha_info->local, buffer, i);
-        count -= i;
-        buffer += i;
-        sha_info->local += i;
-        if (sha_info->local == SHA_BLOCKSIZE) {
-            sha_transform(sha_info);
-        }
-        else {
-            return;
-        }
-    }
-    while (count >= SHA_BLOCKSIZE) {
-        memcpy(sha_info->data, buffer, SHA_BLOCKSIZE);
-        buffer += SHA_BLOCKSIZE;
-        count -= SHA_BLOCKSIZE;
-        sha_transform(sha_info);
-    }
-    memcpy(sha_info->data, buffer, count);
-    sha_info->local = count;
-}
-
-/* finish computing the SHA digest */
-
-static void
-sha_final(unsigned char digest[20], SHAobject *sha_info)
-{
-    int count;
-    SHA_INT32 lo_bit_count, hi_bit_count;
-
-    lo_bit_count = sha_info->count_lo;
-    hi_bit_count = sha_info->count_hi;
-    count = (int) ((lo_bit_count >> 3) & 0x3f);
-    ((SHA_BYTE *) sha_info->data)[count++] = 0x80;
-    if (count > SHA_BLOCKSIZE - 8) {
-	memset(((SHA_BYTE *) sha_info->data) + count, 0,
-	       SHA_BLOCKSIZE - count);
-	sha_transform(sha_info);
-	memset((SHA_BYTE *) sha_info->data, 0, SHA_BLOCKSIZE - 8);
-    }
-    else {
-	memset(((SHA_BYTE *) sha_info->data) + count, 0,
-	       SHA_BLOCKSIZE - 8 - count);
-    }
-
-    /* GJS: note that we add the hi/lo in big-endian. sha_transform will
-       swap these values into host-order. */
-    sha_info->data[56] = (hi_bit_count >> 24) & 0xff;
-    sha_info->data[57] = (hi_bit_count >> 16) & 0xff;
-    sha_info->data[58] = (hi_bit_count >>  8) & 0xff;
-    sha_info->data[59] = (hi_bit_count >>  0) & 0xff;
-    sha_info->data[60] = (lo_bit_count >> 24) & 0xff;
-    sha_info->data[61] = (lo_bit_count >> 16) & 0xff;
-    sha_info->data[62] = (lo_bit_count >>  8) & 0xff;
-    sha_info->data[63] = (lo_bit_count >>  0) & 0xff;
-    sha_transform(sha_info);
-    digest[ 0] = (unsigned char) ((sha_info->digest[0] >> 24) & 0xff);
-    digest[ 1] = (unsigned char) ((sha_info->digest[0] >> 16) & 0xff);
-    digest[ 2] = (unsigned char) ((sha_info->digest[0] >>  8) & 0xff);
-    digest[ 3] = (unsigned char) ((sha_info->digest[0]      ) & 0xff);
-    digest[ 4] = (unsigned char) ((sha_info->digest[1] >> 24) & 0xff);
-    digest[ 5] = (unsigned char) ((sha_info->digest[1] >> 16) & 0xff);
-    digest[ 6] = (unsigned char) ((sha_info->digest[1] >>  8) & 0xff);
-    digest[ 7] = (unsigned char) ((sha_info->digest[1]      ) & 0xff);
-    digest[ 8] = (unsigned char) ((sha_info->digest[2] >> 24) & 0xff);
-    digest[ 9] = (unsigned char) ((sha_info->digest[2] >> 16) & 0xff);
-    digest[10] = (unsigned char) ((sha_info->digest[2] >>  8) & 0xff);
-    digest[11] = (unsigned char) ((sha_info->digest[2]      ) & 0xff);
-    digest[12] = (unsigned char) ((sha_info->digest[3] >> 24) & 0xff);
-    digest[13] = (unsigned char) ((sha_info->digest[3] >> 16) & 0xff);
-    digest[14] = (unsigned char) ((sha_info->digest[3] >>  8) & 0xff);
-    digest[15] = (unsigned char) ((sha_info->digest[3]      ) & 0xff);
-    digest[16] = (unsigned char) ((sha_info->digest[4] >> 24) & 0xff);
-    digest[17] = (unsigned char) ((sha_info->digest[4] >> 16) & 0xff);
-    digest[18] = (unsigned char) ((sha_info->digest[4] >>  8) & 0xff);
-    digest[19] = (unsigned char) ((sha_info->digest[4]      ) & 0xff);
-}
-
-/*
- * End of copied SHA code.
- *
- * ------------------------------------------------------------------------
- */
-
-static PyTypeObject SHAtype;
-
-
-static SHAobject *
-newSHAobject(void)
-{
-    return (SHAobject *)PyObject_New(SHAobject, &SHAtype);
-}
-
-/* Internal methods for a hashing object */
-
-static void
-SHA_dealloc(PyObject *ptr)
-{
-    PyObject_Del(ptr);
-}
-
-
-/* External methods for a hashing object */
-
-PyDoc_STRVAR(SHA_copy__doc__, "Return a copy of the hashing object.");
-
-static PyObject *
-SHA_copy(SHAobject *self, PyObject *unused)
-{
-    SHAobject *newobj;
-
-    if ( (newobj = newSHAobject())==NULL)
-        return NULL;
-
-    SHAcopy(self, newobj);
-    return (PyObject *)newobj;
-}
-
-PyDoc_STRVAR(SHA_digest__doc__,
-"Return the digest value as a string of binary data.");
-
-static PyObject *
-SHA_digest(SHAobject *self, PyObject *unused)
-{
-    unsigned char digest[SHA_DIGESTSIZE];
-    SHAobject temp;
-
-    SHAcopy(self, &temp);
-    sha_final(digest, &temp);
-    return PyString_FromStringAndSize((const char *)digest, sizeof(digest));
-}
-
-PyDoc_STRVAR(SHA_hexdigest__doc__,
-"Return the digest value as a string of hexadecimal digits.");
-
-static PyObject *
-SHA_hexdigest(SHAobject *self, PyObject *unused)
-{
-    unsigned char digest[SHA_DIGESTSIZE];
-    SHAobject temp;
-    PyObject *retval;
-    char *hex_digest;
-    int i, j;
-
-    /* Get the raw (binary) digest value */
-    SHAcopy(self, &temp);
-    sha_final(digest, &temp);
-
-    /* Create a new string */
-    retval = PyString_FromStringAndSize(NULL, sizeof(digest) * 2);
-    if (!retval)
-	    return NULL;
-    hex_digest = PyString_AsString(retval);
-    if (!hex_digest) {
-	    Py_DECREF(retval);
-	    return NULL;
-    }
-
-    /* Make hex version of the digest */
-    for(i=j=0; i<sizeof(digest); i++) {
-        char c;
-        c = (digest[i] >> 4) & 0xf;
-	c = (c>9) ? c+'a'-10 : c + '0';
-        hex_digest[j++] = c;
-        c = (digest[i] & 0xf);
-	c = (c>9) ? c+'a'-10 : c + '0';
-        hex_digest[j++] = c;
-    }
-    return retval;
-}
-
-PyDoc_STRVAR(SHA_update__doc__,
-"Update this hashing object's state with the provided string.");
-
-static PyObject *
-SHA_update(SHAobject *self, PyObject *args)
-{
-    unsigned char *cp;
-    int len;
-
-    if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))
-        return NULL;
-
-    sha_update(self, cp, len);
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyMethodDef SHA_methods[] = {
-    {"copy",	  (PyCFunction)SHA_copy,      METH_NOARGS,  SHA_copy__doc__},
-    {"digest",	  (PyCFunction)SHA_digest,    METH_NOARGS,  SHA_digest__doc__},
-    {"hexdigest", (PyCFunction)SHA_hexdigest, METH_NOARGS,  SHA_hexdigest__doc__},
-    {"update",	  (PyCFunction)SHA_update,    METH_VARARGS, SHA_update__doc__},
-    {NULL,	  NULL}		/* sentinel */
-};
-
-static PyObject *
-SHA_get_block_size(PyObject *self, void *closure)
-{
-    return PyInt_FromLong(SHA_BLOCKSIZE);
-}
-
-static PyObject *
-SHA_get_digest_size(PyObject *self, void *closure)
-{
-    return PyInt_FromLong(SHA_DIGESTSIZE);
-}
-
-static PyObject *
-SHA_get_name(PyObject *self, void *closure)
-{
-    return PyString_FromStringAndSize("SHA1", 4);
-}
-
-static PyGetSetDef SHA_getseters[] = {
-    {"digest_size",
-     (getter)SHA_get_digest_size, NULL,
-     NULL,
-     NULL},
-    {"block_size",
-     (getter)SHA_get_block_size, NULL,
-     NULL,
-     NULL},
-    {"name",
-     (getter)SHA_get_name, NULL,
-     NULL,
-     NULL},
-    /* the old md5 and sha modules support 'digest_size' as in PEP 247.
-     * the old sha module also supported 'digestsize'.  ugh. */
-    {"digestsize",
-     (getter)SHA_get_digest_size, NULL,
-     NULL,
-     NULL},
-    {NULL}  /* Sentinel */
-};
-
-static PyTypeObject SHAtype = {
-    PyObject_HEAD_INIT(NULL)
-    0,			/*ob_size*/
-    "_sha.sha",		/*tp_name*/
-    sizeof(SHAobject),	/*tp_size*/
-    0,			/*tp_itemsize*/
-    /* methods */
-    SHA_dealloc,	/*tp_dealloc*/
-    0,			/*tp_print*/
-    0,                  /*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*/
-    0,                  /*tp_call*/
-    0,                  /*tp_str*/
-    0,                  /*tp_getattro*/
-    0,                  /*tp_setattro*/
-    0,                  /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT, /*tp_flags*/
-    0,                  /*tp_doc*/
-    0,                  /*tp_traverse*/
-    0,			/*tp_clear*/
-    0,			/*tp_richcompare*/
-    0,			/*tp_weaklistoffset*/
-    0,			/*tp_iter*/
-    0,			/*tp_iternext*/
-    SHA_methods,	/* tp_methods */
-    0,                  /* tp_members */
-    SHA_getseters,      /* tp_getset */
-};
-
-
-/* The single module-level function: new() */
-
-PyDoc_STRVAR(SHA_new__doc__,
-"Return a new SHA hashing object.  An optional string argument\n\
-may be provided; if present, this string will be automatically\n\
-hashed.");
-
-static PyObject *
-SHA_new(PyObject *self, PyObject *args, PyObject *kwdict)
-{
-    static char *kwlist[] = {"string", NULL};
-    SHAobject *new;
-    unsigned char *cp = NULL;
-    int len;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist,
-                                     &cp, &len)) {
-        return NULL;
-    }
-
-    if ((new = newSHAobject()) == NULL)
-        return NULL;
-
-    sha_init(new);
-
-    if (PyErr_Occurred()) {
-        Py_DECREF(new);
-        return NULL;
-    }
-    if (cp)
-        sha_update(new, cp, len);
-
-    return (PyObject *)new;
-}
-
-
-/* List of functions exported by this module */
-
-static struct PyMethodDef SHA_functions[] = {
-    {"new", (PyCFunction)SHA_new, METH_VARARGS|METH_KEYWORDS, SHA_new__doc__},
-    {NULL,	NULL}		 /* Sentinel */
-};
-
-
-/* Initialize this module. */
-
-#define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
-
-PyMODINIT_FUNC
-init_sha(void)
-{
-    PyObject *m;
-
-    SHAtype.ob_type = &PyType_Type;
-    if (PyType_Ready(&SHAtype) < 0)
-        return;
-    m = Py_InitModule("_sha", SHA_functions);
-    if (m == NULL)
-	return;
-
-    /* Add some symbolic constants to the module */
-    insint("blocksize", 1);  /* For future use, in case some hash
-                                functions require an integral number of
-                                blocks */ 
-    insint("digestsize", 20);
-    insint("digest_size", 20);
-}

Deleted: /python/branches/py3k-struni/Modules/timing.h
==============================================================================
--- /python/branches/py3k-struni/Modules/timing.h	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1993 George V. Neville-Neil
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by George V. Neville-Neil
- * 4. The name, George Neville-Neil may not be used to endorse or promote 
- *    products derived from this software without specific prior 
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _TIMING_H_
-#define _TIMING_H_
-
-#ifdef TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else /* !TIME_WITH_SYS_TIME */
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else /* !HAVE_SYS_TIME_H */
-#include <time.h>
-#endif /* !HAVE_SYS_TIME_H */
-#endif /* !TIME_WITH_SYS_TIME */
-
-static struct timeval aftertp, beforetp;
-
-#define BEGINTIMING gettimeofday(&beforetp, NULL)
-
-#define ENDTIMING gettimeofday(&aftertp, NULL); \
-    if(beforetp.tv_usec > aftertp.tv_usec) \
-    {  \
-         aftertp.tv_usec += 1000000;  \
-         aftertp.tv_sec--; \
-    }
-
-#define TIMINGUS (((aftertp.tv_sec - beforetp.tv_sec) * 1000000) + \
-		  (aftertp.tv_usec - beforetp.tv_usec))
-
-#define TIMINGMS (((aftertp.tv_sec - beforetp.tv_sec) * 1000) + \
-		  ((aftertp.tv_usec - beforetp.tv_usec) / 1000))
-
-#define TIMINGS  ((aftertp.tv_sec - beforetp.tv_sec) + \
-		  (aftertp.tv_usec - beforetp.tv_usec) / 1000000)
-
-#endif /* _TIMING_H_ */

Deleted: /python/branches/py3k-struni/Modules/timingmodule.c
==============================================================================
--- /python/branches/py3k-struni/Modules/timingmodule.c	Thu Jun  7 01:52:48 2007
+++ (empty file)
@@ -1,58 +0,0 @@
-/*
- * Author: George V. Neville-Neil
- */
-
-#include "Python.h"
-
-/* Our stuff... */
-#include "timing.h"
-
-static PyObject *
-start_timing(PyObject *self)
-{
-	Py_INCREF(Py_None);
-	BEGINTIMING;
-	return Py_None;
-}
-
-static PyObject *
-finish_timing(PyObject *self)
-{
-	ENDTIMING    
-	Py_INCREF(Py_None);
-	return Py_None;
-}
-
-static PyObject *
-seconds(PyObject *self)
-{
-	return PyInt_FromLong(TIMINGS);
-}
-
-static PyObject *
-milli(PyObject *self)
-{
-	return PyInt_FromLong(TIMINGMS);
-}
-
-static PyObject *
-micro(PyObject *self)
-{
-	return PyInt_FromLong(TIMINGUS);
-}
-
-
-static PyMethodDef timing_methods[] = {
-	{"start",   (PyCFunction)start_timing, METH_NOARGS},
-	{"finish",  (PyCFunction)finish_timing, METH_NOARGS},
-	{"seconds", (PyCFunction)seconds, METH_NOARGS},
-	{"milli",   (PyCFunction)milli, METH_NOARGS},
-	{"micro",   (PyCFunction)micro, METH_NOARGS},
-	{NULL,      NULL}
-};
-
-
-PyMODINIT_FUNC inittiming(void)
-{
-	(void)Py_InitModule("timing", timing_methods);
-}

Modified: python/branches/py3k-struni/Objects/abstract.c
==============================================================================
--- python/branches/py3k-struni/Objects/abstract.c	(original)
+++ python/branches/py3k-struni/Objects/abstract.c	Thu Jun  7 01:52:48 2007
@@ -2131,8 +2131,9 @@
 PyObject_IsInstance(PyObject *inst, PyObject *cls)
 {
 	PyObject *t, *v, *tb;
+	PyObject *checker;
 	PyErr_Fetch(&t, &v, &tb);
-	PyObject *checker = PyObject_GetAttrString(cls, "__instancecheck__");
+	checker = PyObject_GetAttrString(cls, "__instancecheck__");
 	PyErr_Restore(t, v, tb);
 	if (checker != NULL) {
 		PyObject *res;
@@ -2201,8 +2202,9 @@
 PyObject_IsSubclass(PyObject *derived, PyObject *cls)
 {
 	PyObject *t, *v, *tb;
+	PyObject *checker;
 	PyErr_Fetch(&t, &v, &tb);
-	PyObject *checker = PyObject_GetAttrString(cls, "__subclasscheck__");
+	checker = PyObject_GetAttrString(cls, "__subclasscheck__");
 	PyErr_Restore(t, v, tb);
 	if (checker != NULL) {
 		PyObject *res;

Modified: python/branches/py3k-struni/PC/WinMain.c
==============================================================================
--- python/branches/py3k-struni/PC/WinMain.c	(original)
+++ python/branches/py3k-struni/PC/WinMain.c	Thu Jun  7 01:52:48 2007
@@ -1,10 +1,10 @@
 /* Minimal main program -- everything is loaded from the library. */
 
+#include "Python.h"
+
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-#include "Python.h"
-
 int WINAPI WinMain(
     HINSTANCE hInstance,      /* handle to current instance */
     HINSTANCE hPrevInstance,  /* handle to previous instance */

Modified: python/branches/py3k-struni/PC/_winreg.c
==============================================================================
--- python/branches/py3k-struni/PC/_winreg.c	(original)
+++ python/branches/py3k-struni/PC/_winreg.c	Thu Jun  7 01:52:48 2007
@@ -12,10 +12,10 @@
 
 */
 
-#include "windows.h"
 #include "Python.h"
 #include "structmember.h"
 #include "malloc.h" /* for alloca */
+#include "windows.h"
 
 static BOOL PyHKEY_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK);
 static PyObject *PyHKEY_FromHKEY(HKEY h);

Modified: python/branches/py3k-struni/PC/dl_nt.c
==============================================================================
--- python/branches/py3k-struni/PC/dl_nt.c	(original)
+++ python/branches/py3k-struni/PC/dl_nt.c	Thu Jun  7 01:52:48 2007
@@ -7,11 +7,9 @@
 forgotten) from the programmer.
 
 */
-#include "windows.h"
 
-/* NT and Python share these */
-#include "pyconfig.h"
 #include "Python.h"
+#include "windows.h"
 
 char dllVersionBuffer[16] = ""; // a private buffer
 

Modified: python/branches/py3k-struni/PC/os2emx/Makefile
==============================================================================
--- python/branches/py3k-struni/PC/os2emx/Makefile	(original)
+++ python/branches/py3k-struni/PC/os2emx/Makefile	Thu Jun  7 01:52:48 2007
@@ -300,12 +300,8 @@
 		Modules/itertoolsmodule.c \
 		Modules/_localemodule.c \
 		Modules/mathmodule.c \
-		Modules/md5.c \
-		Modules/md5module.c \
 		Modules/operator.c \
 		Modules/_randommodule.c \
-		Modules/rgbimgmodule.c \
-		Modules/shamodule.c \
 		Modules/sha256module.c \
 		Modules/sha512module.c \
 		Modules/_sre.c \
@@ -313,7 +309,6 @@
 		Modules/symtablemodule.c \
 		Modules/termios.c \
 		Modules/timemodule.c \
-		Modules/timingmodule.c \
 		Modules/_weakref.c \
 		Modules/xxsubtype.c \
 		Modules/zipimport.c)

Modified: python/branches/py3k-struni/PC/os2emx/config.c
==============================================================================
--- python/branches/py3k-struni/PC/os2emx/config.c	(original)
+++ python/branches/py3k-struni/PC/os2emx/config.c	Thu Jun  7 01:52:48 2007
@@ -65,14 +65,12 @@
 extern void initmath();
 extern void init_md5();
 extern void initoperator();
-extern void initrgbimg();
 extern void init_sha();
 extern void init_sha256();
 extern void init_sha512();
 extern void init_struct();
 extern void inittermios();
 extern void inittime();
-extern void inittiming();
 extern void initxxsubtype();
 extern void initzipimport();
 #if !HAVE_DYNAMIC_LOADING
@@ -127,16 +125,12 @@
 	{"imageop", initimageop},
 	{"itertools", inititertools},
 	{"math", initmath},
-	{"_md5", init_md5},
 	{"operator", initoperator},
-	{"rgbimg", initrgbimg},
-	{"_sha", init_sha},
 	{"_sha256", init_sha256},
 	{"_sha512", init_sha512},
 	{"_struct", init_struct},
 	{"termios", inittermios},
 	{"time", inittime},
-	{"timing", inittiming},
 	{"xxsubtype", initxxsubtype},
 	{"zipimport", initzipimport},
 #if !HAVE_DYNAMIC_LOADING

Modified: python/branches/py3k-struni/PC/os2emx/python25.def
==============================================================================
--- python/branches/py3k-struni/PC/os2emx/python25.def	(original)
+++ python/branches/py3k-struni/PC/os2emx/python25.def	Thu Jun  7 01:52:48 2007
@@ -1255,26 +1255,12 @@
 ; From python25_s.lib(mathmodule)
 ;  "initmath"
 
-; From python25_s.lib(md5)
-  "md5_finish"
-  "md5_init"
-  "md5_append"
-
-; From python25_s.lib(md5module)
-;  "init_md5"
-
 ; From python25_s.lib(operator)
 ;  "initoperator"
 
 ; From python25_s.lib(_randommodule)
 ;  "init_random"
 
-; From python25_s.lib(rgbimgmodule)
-;  "initrgbimg"
-
-; From python25_s.lib(shamodule)
-;  "init_sha"
-
 ; From python25_s.lib(sha256module)
 ;  "init_sha256"
 
@@ -1298,9 +1284,6 @@
   "_PyTime_DoubleToTimet"
 ;  "inittimezone"
 
-; From python25_s.lib(timingmodule)
-;  "inittiming"
-
 ; From python25_s.lib(_weakref)
 ;  "init_weakref"
 

Modified: python/branches/py3k-struni/PC/os2vacpp/makefile
==============================================================================
--- python/branches/py3k-struni/PC/os2vacpp/makefile	(original)
+++ python/branches/py3k-struni/PC/os2vacpp/makefile	Thu Jun  7 01:52:48 2007
@@ -371,19 +371,6 @@
 	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
 	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
 
-almodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 arraymodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -439,46 +426,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-cdmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
-cgensupport.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
-	 $(PY_MODULES)\cgensupport.h $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h \
-	 $(PY_INCLUDE)\complexobject.h pyconfig.h $(PY_INCLUDE)\dictobject.h \
-	 $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h \
-	 $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h \
-	 $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
-clmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 cmathmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -616,33 +563,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-flmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\structmember.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
-	 $(PY_INCLUDE)\tupleobject.h
-
-fmmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 fpectlmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -700,20 +620,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-glmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_MODULES)\cgensupport.h \
-	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
-	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
-	 $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h \
-	 $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
-	 $(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
-	 $(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
-	 $(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
-	 $(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h \
-	 $(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h \
-	 $(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
-	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
-	 $(PY_INCLUDE)\tupleobject.h
-
 grpmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
@@ -741,19 +647,6 @@
 	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
 	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
 
-imgfile.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 main.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
@@ -781,21 +674,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-md5c.obj: pyconfig.h $(PY_MODULES)\md5.h
-
-md5module.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_MODULES)\md5.h $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 mpzmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -852,20 +730,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\token.h \
 	 $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
 
-pcremodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_MODULES)\pcre-internal.h \
-	 $(PY_MODULES)\pcre.h $(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h \
-	 $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h \
-	 $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
-	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
-	 $(PY_INCLUDE)\tupleobject.h
-
 posix.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
@@ -894,19 +758,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-puremodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 pwdmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
@@ -921,20 +772,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-pypcre.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\graminit.h $(PY_INCLUDE)\import.h \
-	 $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
-	 $(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
-	 $(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
-	 $(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
-	 $(PY_MODULES)\pcre-internal.h $(PY_MODULES)\pcre.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 readline.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
@@ -962,20 +799,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-rgbimgmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
-	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
-	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
-	 $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h \
-	 $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
-	 $(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
-	 $(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
-	 $(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
-	 $(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h \
-	 $(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h \
-	 $(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
-	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
-	 $(PY_INCLUDE)\tupleobject.h
-
 selectmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -990,19 +813,6 @@
 	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
 	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
 
-sgimodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 signalmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -1032,33 +842,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-soundex.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
-	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
-	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \
-	 $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h \
-	 $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
-stdwinmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
-	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
-	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
-	 $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h \
-	 $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
-	 $(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
-	 $(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
-	 $(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
-	 $(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h \
-	 $(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h \
-	 $(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
-	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
-	 $(PY_INCLUDE)\tupleobject.h
-
 structmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -1087,21 +870,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\structmember.h \
 	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
 
-svmodule.obj: $(PY_INCLUDE)\abstract.h $(OS2TCPIP)\Include\sys\time.h $(PY_INCLUDE)\ceval.h \
-	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\compile.h \
-	 $(PY_INCLUDE)\complexobject.h pyconfig.h $(PY_INCLUDE)\dictobject.h \
-	 $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h \
-	 $(PY_INCLUDE)\import.h $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h \
-	 $(PY_INCLUDE)\listobject.h $(PY_INCLUDE)\longobject.h \
-	 $(PY_INCLUDE)\methodobject.h $(PY_INCLUDE)\modsupport.h \
-	 $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h $(PY_INCLUDE)\myproto.h \
-	 $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h $(PY_INCLUDE)\pydebug.h \
-	 $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h $(PY_INCLUDE)\pystate.h \
-	 $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h $(PY_INCLUDE)\rangeobject.h \
-	 $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
-	 $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h \
-	 $(PY_MODULES)\yuv.h
-
 syslogmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
 	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
 	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
@@ -1157,20 +925,6 @@
 	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
 	 $(PY_INCLUDE)\tupleobject.h
 
-timingmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
-	 $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
-	 pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
-	 $(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h \
-	 $(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
-	 $(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
-	 $(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
-	 $(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
-	 $(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h \
-	 $(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h \
-	 $(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
-	 $(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_MODULES)\timing.h \
-	 $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
-
 xxmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
 	 $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h pyconfig.h \
 	 $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h $(PY_INCLUDE)\floatobject.h \

Modified: python/branches/py3k-struni/PC/os2vacpp/makefile.omk
==============================================================================
--- python/branches/py3k-struni/PC/os2vacpp/makefile.omk	(original)
+++ python/branches/py3k-struni/PC/os2vacpp/makefile.omk	Thu Jun  7 01:52:48 2007
@@ -170,45 +170,30 @@
 # Omitted Modules (and Description/Reason):
   #
   # Multimedia:
-  # almodule.c      -- Non-OS/2 Audio Channel Facility (?)
-  # cdmodule.c      -- Wrapper of Non-OS/2 CD Audio Functions
   # audioop.c       -- Various Compute Operations on Audio Samples
   # imageop.c       -- Various Compute Operations on Video Samples
-  # imgfile.c       -- Wrapper of SGI ImageLib API
-  # rgbimgmodule.c  -- Non-OS/2 Image Read/Write Capability (Primitive)
   # sunaudiodev.c   -- Wrapper of Sun Audio Device API
-  # clmodule.c      -- Wrapper of SGI Image/Audio Compression API
 
   # Database:
   # dbmmodule.c     -- Wrapper of DBM Database API (Generic Flavor)
-  # bsddbmodule.c   -- Wrapper of DBM Database API (BSD Flavor)
   # gdbmmodule.c    -- Wrapper of DBM Database API (GNU Flavor)
 
   # Cryptography:
   # cryptmodule.c   -- Simple Wrapper for crypt() Function
-  # rotormodule.c   -- Implementation of Enigma Crypto Based on Rotors
 
-#                  cgensupport.obj   \
 #                  fcntlmodule.obj   \
-#                  fmmodule.obj      \
 #                  fpectlmodule.obj  \
 #                  fpetestmodule.obj \
 # Unix-Specific    getpath.obj       \
-#                  glmodule.obj      \
 #                  grpmodule.obj     \
 #                  mpzmodule.obj     \
 #                  nismodule.obj     \
 #                  parsermodule.obj  \
-#                  pcremodule.obj    \
 #                  pwdmodule.obj     \
-#                  pypcre.obj        \
 #                  readline.obj      \
 #                  resource.obj      \
-#                  sgimodule.obj     \
-#                  svmodule.obj      \
 #                  syslogmodule.obj  \
 #                  termios.obj       \
-#                  timingmodule.obj  \
 
   # User Interface:
 #                  _tkinter.obj      \     
@@ -358,14 +343,6 @@
 	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
 	 traceback.h tupleobject.h
 
-almodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 arraymodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -398,30 +375,6 @@
 	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
 	 traceback.h tupleobject.h
 
-cdmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
-cgensupport.obj: abstract.h ceval.h cgensupport.h classobject.h cobject.h \
-	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
-	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
-clmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 cmathmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -502,22 +455,6 @@
 	 pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
 	 sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h
 
-flmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h \
-	 structmember.h sysmodule.h traceback.h tupleobject.h
-
-fmmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 fpectlmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -552,14 +489,6 @@
 	 python.h pythonrun.h rangeobject.h sliceobject.h stringobject.h \
 	 sysmodule.h traceback.h tupleobject.h
 
-glmodule.obj: abstract.h ceval.h cgensupport.h classobject.h cobject.h \
-	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
-	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
 grpmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 grp.h import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -576,14 +505,6 @@
 	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
 	 traceback.h tupleobject.h
 
-imgfile.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 main.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -600,16 +521,6 @@
 	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
 	 stringobject.h sysmodule.h traceback.h tupleobject.h
 
-md5c.obj: pyconfig.h md5.h
-
-md5module.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h md5.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 mpzmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -643,14 +554,6 @@
 	 rangeobject.h sliceobject.h stringobject.h sysmodule.h token.h \
 	 traceback.h tupleobject.h
 
-pcremodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pcre-internal.h pcre.h pydebug.h pyerrors.h \
-	 pyfpe.h pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
 posix.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -667,14 +570,6 @@
 	 python.h pythonrun.h rangeobject.h sliceobject.h stringobject.h \
 	 sysmodule.h traceback.h tupleobject.h
 
-puremodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 pwdmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -683,14 +578,6 @@
 	 python.h pythonrun.h rangeobject.h sliceobject.h stringobject.h \
 	 sysmodule.h traceback.h tupleobject.h
 
-pypcre.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 graminit.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pcre-internal.h pcre.h pydebug.h \
-	 pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
-	 sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h
-
 readline.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \
@@ -707,22 +594,6 @@
 	 pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
 	 sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h
 
-rgbimgmodule.obj: abstract.h ceval.h classobject.h cobject.h \
-	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
-	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
-rotormodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h mymath.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
 selectmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -731,14 +602,6 @@
 	 pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
 	 sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h
 
-sgimodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
 signalmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -756,22 +619,6 @@
 	 pyfpe.h pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
 	 stringobject.h sysmodule.h traceback.h tupleobject.h
 
-soundex.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
-	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
-	 import.h intobject.h intrcheck.h listobject.h longobject.h \
-	 methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h \
-	 object.h objimpl.h pydebug.h pyerrors.h pyfpe.h pystate.h python.h \
-	 pythonrun.h rangeobject.h sliceobject.h stringobject.h sysmodule.h \
-	 traceback.h tupleobject.h
-
-stdwinmodule.obj: abstract.h ceval.h classobject.h cobject.h \
-	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
-	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h traceback.h tupleobject.h
-
 structmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -789,15 +636,6 @@
 	 sliceobject.h stringobject.h structmember.h sysmodule.h \
 	 traceback.h tupleobject.h
 
-svmodule.obj: abstract.h c:\mptn\include\sys\time.h ceval.h classobject.h \
-	 cobject.h compile.h complexobject.h pyconfig.h dictobject.h \
-	 fileobject.h floatobject.h funcobject.h import.h intobject.h \
-	 intrcheck.h listobject.h longobject.h methodobject.h modsupport.h \
-	 moduleobject.h mymalloc.h myproto.h object.h objimpl.h pydebug.h \
-	 pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
-	 sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h \
-	 yuv.h
-
 syslogmodule.obj: abstract.h ceval.h classobject.h cobject.h \
 	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
 	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
@@ -830,14 +668,6 @@
 	 python.h pythonrun.h rangeobject.h sliceobject.h stringobject.h \
 	 sysmodule.h traceback.h tupleobject.h
 
-timingmodule.obj: abstract.h ceval.h classobject.h cobject.h \
-	 complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
-	 funcobject.h import.h intobject.h intrcheck.h listobject.h \
-	 longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
-	 myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
-	 pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
-	 stringobject.h sysmodule.h timing.h traceback.h tupleobject.h
-
 xxmodule.obj: abstract.h ceval.h classobject.h cobject.h complexobject.h \
 	 pyconfig.h dictobject.h fileobject.h floatobject.h funcobject.h \
 	 import.h intobject.h intrcheck.h listobject.h longobject.h \

Modified: python/branches/py3k-struni/PC/pyconfig.h
==============================================================================
--- python/branches/py3k-struni/PC/pyconfig.h	(original)
+++ python/branches/py3k-struni/PC/pyconfig.h	Thu Jun  7 01:52:48 2007
@@ -488,22 +488,13 @@
 /* Define if you want to use the GNU readline library */
 /* #define WITH_READLINE 1 */
 
-/* Define as the integral type used for Unicode representation. */
-#define PY_UNICODE_TYPE unsigned short
-
 /* Define as the size of the unicode type. */
-#define Py_UNICODE_SIZE SIZEOF_SHORT
-
-/* Define if you have a useable wchar_t type defined in wchar.h; useable
-   means wchar_t must be 16-bit unsigned type. (see
-   Include/unicodeobject.h). */
-#if Py_UNICODE_SIZE == 2
-#define HAVE_USABLE_WCHAR_T
+/* This is enough for unicodeobject.h to do the "right thing" on Windows. */
+#define Py_UNICODE_SIZE 2
 
 /* Define to indicate that the Python Unicode representation can be passed
    as-is to Win32 Wide API.  */
 #define Py_WIN_WIDE_FILENAMES
-#endif
 
 /* Use Python's own small-block memory-allocator. */
 #define WITH_PYMALLOC 1

Modified: python/branches/py3k-struni/PC/winsound.c
==============================================================================
--- python/branches/py3k-struni/PC/winsound.c	(original)
+++ python/branches/py3k-struni/PC/winsound.c	Thu Jun  7 01:52:48 2007
@@ -35,9 +35,9 @@
    winsound.PlaySound(None, 0)
 */
 
+#include <Python.h>
 #include <windows.h>
 #include <mmsystem.h>
-#include <Python.h>
 #ifdef HAVE_CONIO_H
 #include <conio.h>	/* port functions on Win9x */
 #endif

Modified: python/branches/py3k-struni/PCbuild/pythoncore.vcproj
==============================================================================
--- python/branches/py3k-struni/PCbuild/pythoncore.vcproj	(original)
+++ python/branches/py3k-struni/PCbuild/pythoncore.vcproj	Thu Jun  7 01:52:48 2007
@@ -626,12 +626,6 @@
 			RelativePath="..\Modules\mathmodule.c">
 		</File>
 		<File
-			RelativePath="..\Modules\md5.c">
-		</File>
-		<File
-			RelativePath="..\Modules\md5module.c">
-		</File>
-		<File
 			RelativePath="..\Parser\metagrammar.c">
 		</File>
 		<File
@@ -725,9 +719,6 @@
 			RelativePath="..\Modules\sha512module.c">
 		</File>
 		<File
-			RelativePath="..\Modules\shamodule.c">
-		</File>
-		<File
 			RelativePath="..\Modules\signalmodule.c">
 		</File>
 		<File

Modified: python/branches/py3k-struni/PCbuild8/pythoncore/pythoncore.vcproj
==============================================================================
--- python/branches/py3k-struni/PCbuild8/pythoncore/pythoncore.vcproj	(original)
+++ python/branches/py3k-struni/PCbuild8/pythoncore/pythoncore.vcproj	Thu Jun  7 01:52:48 2007
@@ -1518,10 +1518,6 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\Modules\rgbimgmodule.c"
-				>
-			</File>
-			<File
 				RelativePath="..\..\Modules\rotatingtree.c"
 				>
 			</File>

Modified: python/branches/py3k-struni/Python/ast.c
==============================================================================
--- python/branches/py3k-struni/Python/ast.c	(original)
+++ python/branches/py3k-struni/Python/ast.c	Thu Jun  7 01:52:48 2007
@@ -324,6 +324,29 @@
     }
 }
 
+static const char* FORBIDDEN[] = {
+    "None",
+    "True",
+    "False",
+    NULL,
+};
+
+static int
+forbidden_name(expr_ty e, const node *n)
+{
+    const char *id;
+    const char **p;
+    assert(PyString_Check(e->v.Name.id));
+    id = PyString_AS_STRING(e->v.Name.id);
+    for (p = FORBIDDEN; *p; p++) {
+        if (strcmp(*p, id) == 0) {
+            ast_error(n, "assignment to keyword");
+            return 1;
+        }
+    }
+    return 0;
+}
+
 /* Set the context ctx for expr_ty e, recursively traversing e.
 
    Only sets context for expr kinds that "can appear in assignment context"
@@ -366,9 +389,9 @@
                 return 0;
             break;
         case Name_kind:
-            if (ctx == Store &&
-                !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
-                    return ast_error(n, "assignment to None");
+            if (ctx == Store) {
+                if (forbidden_name(e, n))
+                    return 0; /* forbidden_name() calls ast_error() */
             }
             e->v.Name.ctx = ctx;
             break;
@@ -1227,6 +1250,7 @@
 {
     /* atom: '(' [yield_expr|testlist_comp] ')' | '[' [testlist_comp] ']'
        | '{' [dictmaker|testlist_comp] '}' | NAME | NUMBER | STRING+
+       | '...' | 'None' | 'True' | 'False'
     */
     node *ch = CHILD(n, 0);
     int bytesmode = 0;
@@ -1894,7 +1918,9 @@
                 } else if (e->kind != Name_kind) {
                   ast_error(CHILD(ch, 0), "keyword can't be an expression");
                   return NULL;
-                }
+                } else if (forbidden_name(e, ch)) {
+		  return NULL;
+		}
                 key = e->v.Name.id;
                 e = ast_for_expr(c, CHILD(ch, 2));
                 if (!e)
@@ -1981,11 +2007,8 @@
                           "expression not possible");
                 return NULL;
             case Name_kind: {
-                const char *var_name = PyString_AS_STRING(expr1->v.Name.id);
-                if (var_name[0] == 'N' && !strcmp(var_name, "None")) {
-                    ast_error(ch, "assignment to None");
+                if (forbidden_name(expr1, ch))
                     return NULL;
-                }
                 break;
             }
             case Attribute_kind:

Modified: python/branches/py3k-struni/Python/bltinmodule.c
==============================================================================
--- python/branches/py3k-struni/Python/bltinmodule.c	(original)
+++ python/branches/py3k-struni/Python/bltinmodule.c	Thu Jun  7 01:52:48 2007
@@ -1698,17 +1698,6 @@
 On Unix, GNU readline is used if enabled.  The prompt string, if given,\n\
 is printed without a trailing newline before reading.");
 
-static PyObject *
-builtin_reload(PyObject *self, PyObject *v)
-{
-	return PyImport_ReloadModule(v);
-}
-
-PyDoc_STRVAR(reload_doc,
-"reload(module) -> module\n\
-\n\
-Reload the module.  The module must have been successfully imported before.");
-
 
 static PyObject *
 builtin_repr(PyObject *self, PyObject *v)
@@ -2006,7 +1995,6 @@
  	{"ord",		builtin_ord,        METH_O, ord_doc},
  	{"pow",		builtin_pow,        METH_VARARGS, pow_doc},
  	{"print",	(PyCFunction)builtin_print,      METH_VARARGS | METH_KEYWORDS, print_doc},
- 	{"reload",	builtin_reload,     METH_O, reload_doc},
  	{"repr",	builtin_repr,       METH_O, repr_doc},
  	{"round",	(PyCFunction)builtin_round,      METH_VARARGS | METH_KEYWORDS, round_doc},
  	{"setattr",	builtin_setattr,    METH_VARARGS, setattr_doc},

Modified: python/branches/py3k-struni/Python/ceval.c
==============================================================================
--- python/branches/py3k-struni/Python/ceval.c	(original)
+++ python/branches/py3k-struni/Python/ceval.c	Thu Jun  7 01:52:48 2007
@@ -2939,10 +2939,6 @@
 	Py_XDECREF(tmp_type);
 	Py_XDECREF(tmp_value);
 	Py_XDECREF(tmp_tb);
-	/* For b/w compatibility */
-	PySys_SetObject("exc_type", type);
-	PySys_SetObject("exc_value", value);
-	PySys_SetObject("exc_traceback", tb);
 }
 
 static void
@@ -2973,11 +2969,6 @@
 	Py_XDECREF(tmp_value);
 	Py_XDECREF(tmp_tb);
 
-	/* For b/w compatibility */
-	PySys_SetObject("exc_type", frame->f_exc_type);
-	PySys_SetObject("exc_value", frame->f_exc_value);
-	PySys_SetObject("exc_traceback", frame->f_exc_traceback);
-
 	/* Clear the frame's exception info. */
 	tmp_type = frame->f_exc_type;
 	tmp_value = frame->f_exc_value;

Modified: python/branches/py3k-struni/Python/dynload_win.c
==============================================================================
--- python/branches/py3k-struni/Python/dynload_win.c	(original)
+++ python/branches/py3k-struni/Python/dynload_win.c	Thu Jun  7 01:52:48 2007
@@ -1,7 +1,6 @@
 
 /* Support for dynamic loading of extension modules */
 
-#include <windows.h>
 #ifdef HAVE_DIRECT_H
 #include <direct.h>
 #endif
@@ -9,6 +8,7 @@
 
 #include "Python.h"
 #include "importdl.h"
+#include <windows.h>
 
 const struct filedescr _PyImport_DynLoadFiletab[] = {
 #ifdef _DEBUG

Modified: python/branches/py3k-struni/Python/graminit.c
==============================================================================
--- python/branches/py3k-struni/Python/graminit.c	(original)
+++ python/branches/py3k-struni/Python/graminit.c	Thu Jun  7 01:52:48 2007
@@ -1285,7 +1285,7 @@
 	{1, arcs_62_2},
 	{1, arcs_62_3},
 };
-static arc arcs_63_0[7] = {
+static arc arcs_63_0[10] = {
 	{13, 1},
 	{146, 2},
 	{148, 3},
@@ -1293,6 +1293,9 @@
 	{151, 4},
 	{152, 5},
 	{77, 4},
+	{153, 4},
+	{154, 4},
+	{155, 4},
 };
 static arc arcs_63_1[3] = {
 	{46, 6},
@@ -1324,7 +1327,7 @@
 	{150, 4},
 };
 static state states_63[9] = {
-	{7, arcs_63_0},
+	{10, arcs_63_0},
 	{3, arcs_63_1},
 	{2, arcs_63_2},
 	{2, arcs_63_3},
@@ -1338,7 +1341,7 @@
 	{24, 1},
 };
 static arc arcs_64_1[3] = {
-	{153, 2},
+	{156, 2},
 	{30, 3},
 	{0, 1},
 };
@@ -1370,7 +1373,7 @@
 	{15, 5},
 };
 static arc arcs_65_2[1] = {
-	{154, 6},
+	{157, 6},
 };
 static arc arcs_65_3[1] = {
 	{21, 5},
@@ -1394,14 +1397,14 @@
 	{1, arcs_65_6},
 };
 static arc arcs_66_0[1] = {
-	{155, 1},
+	{158, 1},
 };
 static arc arcs_66_1[2] = {
 	{30, 2},
 	{0, 1},
 };
 static arc arcs_66_2[2] = {
-	{155, 1},
+	{158, 1},
 	{0, 2},
 };
 static state states_66[3] = {
@@ -1419,11 +1422,11 @@
 };
 static arc arcs_67_2[3] = {
 	{24, 3},
-	{156, 4},
+	{159, 4},
 	{0, 2},
 };
 static arc arcs_67_3[2] = {
-	{156, 4},
+	{159, 4},
 	{0, 3},
 };
 static arc arcs_67_4[1] = {
@@ -1488,7 +1491,7 @@
 };
 static arc arcs_71_1[4] = {
 	{25, 2},
-	{153, 3},
+	{156, 3},
 	{30, 4},
 	{0, 1},
 };
@@ -1529,7 +1532,7 @@
 	{1, arcs_71_8},
 };
 static arc arcs_72_0[1] = {
-	{157, 1},
+	{160, 1},
 };
 static arc arcs_72_1[1] = {
 	{21, 2},
@@ -1565,7 +1568,7 @@
 	{1, arcs_72_7},
 };
 static arc arcs_73_0[3] = {
-	{158, 1},
+	{161, 1},
 	{31, 2},
 	{32, 3},
 };
@@ -1580,7 +1583,7 @@
 	{24, 6},
 };
 static arc arcs_73_4[4] = {
-	{158, 1},
+	{161, 1},
 	{31, 2},
 	{32, 3},
 	{0, 4},
@@ -1609,7 +1612,7 @@
 	{24, 1},
 };
 static arc arcs_74_1[3] = {
-	{153, 2},
+	{156, 2},
 	{29, 3},
 	{0, 1},
 };
@@ -1626,8 +1629,8 @@
 	{1, arcs_74_3},
 };
 static arc arcs_75_0[2] = {
-	{153, 1},
-	{160, 1},
+	{156, 1},
+	{163, 1},
 };
 static arc arcs_75_1[1] = {
 	{0, 1},
@@ -1649,7 +1652,7 @@
 	{105, 4},
 };
 static arc arcs_76_4[2] = {
-	{159, 5},
+	{162, 5},
 	{0, 4},
 };
 static arc arcs_76_5[1] = {
@@ -1670,7 +1673,7 @@
 	{107, 2},
 };
 static arc arcs_77_2[2] = {
-	{159, 3},
+	{162, 3},
 	{0, 2},
 };
 static arc arcs_77_3[1] = {
@@ -1704,7 +1707,7 @@
 	{1, arcs_79_1},
 };
 static arc arcs_80_0[1] = {
-	{163, 1},
+	{166, 1},
 };
 static arc arcs_80_1[2] = {
 	{9, 2},
@@ -1720,11 +1723,11 @@
 };
 static dfa dfas[81] = {
 	{256, "single_input", 0, 3, states_0,
-	 "\004\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\041\010"},
+	 "\004\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\017\101"},
 	{257, "file_input", 0, 2, states_1,
-	 "\204\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\041\010"},
+	 "\204\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\017\101"},
 	{258, "eval_input", 0, 3, states_2,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{259, "decorator", 0, 7, states_3,
 	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{260, "decorators", 0, 2, states_4,
@@ -1744,13 +1747,13 @@
 	{267, "vfpdef", 0, 2, states_11,
 	 "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{268, "stmt", 0, 2, states_12,
-	 "\000\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\041\010"},
+	 "\000\050\060\200\000\000\000\050\170\052\034\144\011\040\004\000\200\041\224\017\101"},
 	{269, "simple_stmt", 0, 4, states_13,
-	 "\000\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\001\010"},
+	 "\000\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\017\100"},
 	{270, "small_stmt", 0, 2, states_14,
-	 "\000\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\001\010"},
+	 "\000\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\017\100"},
 	{271, "expr_stmt", 0, 6, states_15,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{272, "augassign", 0, 2, states_16,
 	 "\000\000\000\000\000\200\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{273, "del_stmt", 0, 3, states_17,
@@ -1758,7 +1761,7 @@
 	{274, "pass_stmt", 0, 2, states_18,
 	 "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{275, "flow_stmt", 0, 2, states_19,
-	 "\000\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\000\000\010"},
+	 "\000\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\000\000\100"},
 	{276, "break_stmt", 0, 2, states_20,
 	 "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{277, "continue_stmt", 0, 2, states_21,
@@ -1766,7 +1769,7 @@
 	{278, "return_stmt", 0, 3, states_22,
 	 "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{279, "yield_stmt", 0, 2, states_23,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010"},
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100"},
 	{280, "raise_stmt", 0, 7, states_24,
 	 "\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{281, "import_stmt", 0, 2, states_25,
@@ -1792,7 +1795,7 @@
 	{291, "assert_stmt", 0, 5, states_35,
 	 "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
 	{292, "compound_stmt", 0, 2, states_36,
-	 "\000\010\020\000\000\000\000\000\000\000\000\144\011\000\000\000\000\000\000\040\000"},
+	 "\000\010\020\000\000\000\000\000\000\000\000\144\011\000\000\000\000\000\000\000\001"},
 	{293, "if_stmt", 0, 8, states_37,
 	 "\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000"},
 	{294, "while_stmt", 0, 8, states_38,
@@ -1808,67 +1811,67 @@
 	{299, "except_clause", 0, 5, states_43,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000"},
 	{300, "suite", 0, 5, states_44,
-	 "\004\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\001\010"},
+	 "\004\040\040\200\000\000\000\050\170\052\034\000\000\040\004\000\200\041\224\017\100"},
 	{301, "test", 0, 6, states_45,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{302, "test_nocond", 0, 2, states_46,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{303, "lambdef", 0, 5, states_47,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000"},
 	{304, "lambdef_nocond", 0, 5, states_48,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000"},
 	{305, "or_test", 0, 2, states_49,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\017\000"},
 	{306, "and_test", 0, 2, states_50,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\017\000"},
 	{307, "not_test", 0, 3, states_51,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\004\000\200\041\224\017\000"},
 	{308, "comparison", 0, 2, states_52,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{309, "comp_op", 0, 4, states_53,
 	 "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\304\037\000\000\000\000\000"},
 	{310, "star_expr", 0, 3, states_54,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{311, "expr", 0, 2, states_55,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{312, "xor_expr", 0, 2, states_56,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{313, "and_expr", 0, 2, states_57,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{314, "shift_expr", 0, 2, states_58,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{315, "arith_expr", 0, 2, states_59,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{316, "term", 0, 2, states_60,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{317, "factor", 0, 3, states_61,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{318, "power", 0, 4, states_62,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\224\017\000"},
 	{319, "atom", 0, 9, states_63,
-	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\224\001\000"},
+	 "\000\040\040\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\224\017\000"},
 	{320, "testlist_comp", 0, 5, states_64,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{321, "trailer", 0, 7, states_65,
 	 "\000\040\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\004\000\000"},
 	{322, "subscriptlist", 0, 3, states_66,
-	 "\000\040\040\202\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\202\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{323, "subscript", 0, 5, states_67,
-	 "\000\040\040\202\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\202\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{324, "sliceop", 0, 3, states_68,
 	 "\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{325, "exprlist", 0, 3, states_69,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\000\000\000\200\041\224\017\000"},
 	{326, "testlist", 0, 3, states_70,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{327, "dictorsetmaker", 0, 9, states_71,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{328, "classdef", 0, 8, states_72,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000"},
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
 	{329, "arglist", 0, 8, states_73,
-	 "\000\040\040\200\001\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\001\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{330, "argument", 0, 4, states_74,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{331, "comp_iter", 0, 2, states_75,
 	 "\000\000\000\000\000\000\000\000\000\000\000\104\000\000\000\000\000\000\000\000\000"},
 	{332, "comp_for", 0, 6, states_76,
@@ -1876,13 +1879,13 @@
 	{333, "comp_if", 0, 4, states_77,
 	 "\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000"},
 	{334, "testlist1", 0, 2, states_78,
-	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\001\000"},
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\200\041\224\017\000"},
 	{335, "encoding_decl", 0, 2, states_79,
 	 "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{336, "yield_expr", 0, 3, states_80,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010"},
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100"},
 };
-static label labels[164] = {
+static label labels[167] = {
 	{0, "EMPTY"},
 	{256, 0},
 	{4, 0},
@@ -2036,6 +2039,9 @@
 	{27, 0},
 	{2, 0},
 	{3, 0},
+	{1, "None"},
+	{1, "True"},
+	{1, "False"},
 	{332, 0},
 	{322, 0},
 	{323, 0},
@@ -2051,6 +2057,6 @@
 grammar _PyParser_Grammar = {
 	81,
 	dfas,
-	{164, labels},
+	{167, labels},
 	256
 };

Modified: python/branches/py3k-struni/Python/import.c
==============================================================================
--- python/branches/py3k-struni/Python/import.c	(original)
+++ python/branches/py3k-struni/Python/import.c	Thu Jun  7 01:52:48 2007
@@ -371,7 +371,6 @@
 /* List of names to clear in sys */
 static char* sys_deletes[] = {
 	"path", "argv", "ps1", "ps2",
-	"exc_type", "exc_value", "exc_traceback",
 	"last_type", "last_value", "last_traceback",
 	"path_hooks", "path_importer_cache", "meta_path",
 	NULL
@@ -2413,7 +2412,7 @@
     
 	if (modules_reloading == NULL) {
 		Py_FatalError("PyImport_ReloadModule: "
-							"no modules_reloading dictionary!");
+			      "no modules_reloading dictionary!");
 		return NULL;
 	}
 
@@ -2457,7 +2456,7 @@
 			    "reload(): parent %.200s not in sys.modules",
 			    PyString_AS_STRING(parentname));
 			Py_DECREF(parentname);
-            imp_modules_reloading_clear();
+			imp_modules_reloading_clear();
 			return NULL;
 		}
 		Py_DECREF(parentname);

Modified: python/branches/py3k-struni/Python/sysmodule.c
==============================================================================
--- python/branches/py3k-struni/Python/sysmodule.c	(original)
+++ python/branches/py3k-struni/Python/sysmodule.c	Thu Jun  7 01:52:48 2007
@@ -163,33 +163,6 @@
 );
 
 static PyObject *
-sys_exc_clear(PyObject *self, PyObject *noargs)
-{
-	PyThreadState *tstate = PyThreadState_GET();
-	PyObject *tmp_type, *tmp_value, *tmp_tb;
-	tmp_type = tstate->exc_type;
-	tmp_value = tstate->exc_value;
-	tmp_tb = tstate->exc_traceback;
-	tstate->exc_type = NULL;
-	tstate->exc_value = NULL;
-	tstate->exc_traceback = NULL;
-	Py_XDECREF(tmp_type);
-	Py_XDECREF(tmp_value);
-	Py_XDECREF(tmp_tb);
-	Py_INCREF(Py_None);
-	return Py_None;
-}
-
-PyDoc_STRVAR(exc_clear_doc,
-"exc_clear() -> None\n\
-\n\
-Clear global information on the current exception.  Subsequent calls to\n\
-exc_info() will return (None,None,None) until another exception is raised\n\
-in the current thread or the execution stack returns to a frame where\n\
-another exception is being handled."
-);
-
-static PyObject *
 sys_exit(PyObject *self, PyObject *args)
 {
 	PyObject *exit_code = 0;
@@ -765,7 +738,6 @@
 	 current_frames_doc},
 	{"displayhook",	sys_displayhook, METH_O, displayhook_doc},
 	{"exc_info",	sys_exc_info, METH_NOARGS, exc_info_doc},
-	{"exc_clear",	sys_exc_clear, METH_NOARGS, exc_clear_doc},
 	{"excepthook",	sys_excepthook, METH_VARARGS, excepthook_doc},
 	{"exit",	sys_exit, METH_VARARGS, exit_doc},
 	{"getdefaultencoding", (PyCFunction)sys_getdefaultencoding,
@@ -907,12 +879,6 @@
 last_traceback -- traceback of last uncaught exception\n\
   These three are only available in an interactive session after a\n\
   traceback has been printed.\n\
-\n\
-exc_type -- type of exception currently being handled\n\
-exc_value -- value of exception currently being handled\n\
-exc_traceback -- traceback of exception currently being handled\n\
-  The function exc_info() should be used instead of these three,\n\
-  because it is thread-safe.\n\
 "
 )
 /* concatenating string here */
@@ -953,7 +919,6 @@
 displayhook() -- print an object to the screen, and save it in __builtin__._\n\
 excepthook() -- print an exception and its traceback to sys.stderr\n\
 exc_info() -- return thread-safe information about the current exception\n\
-exc_clear() -- clear the exception state for the current thread\n\
 exit() -- exit the interpreter by raising SystemExit\n\
 getdlopenflags() -- returns flags to be used for dlopen() calls\n\
 getrefcount() -- return the reference count for an object (plus one :-)\n\

Modified: python/branches/py3k-struni/README
==============================================================================
--- python/branches/py3k-struni/README	(original)
+++ python/branches/py3k-struni/README	Thu Jun  7 01:52:48 2007
@@ -463,10 +463,10 @@
 
                 array, audioop, binascii, cPickle, cStringIO, cmath,
                 crypt, curses, errno, fcntl, gdbm, grp,
-                _locale, math, md5, new, operator, parser, pcre,
-                posix, pwd, readline, regex, reop,
-                select, signal, socket, soundex, struct,
-                syslog, termios, time, timing, zlib, audioop
+                _locale, math, new, operator, parser,
+                posix, pwd, readline, regex,
+                select, signal, socket, struct,
+                syslog, termios, time, zlib, audioop
 
         3) make SHELL=/usr/local/bin/bash
 
@@ -520,9 +520,8 @@
 
 	     _codecs, _locale, _socket, _symtable, _testcapi, _weakref
 	     array, binascii, cmath, cPickle, crypt, cStringIO, dbm
-	     errno, fcntl, grp, math, md5, operator, parser, pwd
-	     rotor, select, struct, syslog, termios,
-	     time, timing
+	     errno, fcntl, grp, math, operator, parser, pwd
+	     rotor, select, struct, syslog, termios, time
 
         4) Once the python executable and library have been built, make
            will execute setup.py, which will attempt to build remaining

Modified: python/branches/py3k-struni/setup.py
==============================================================================
--- python/branches/py3k-struni/setup.py	(original)
+++ python/branches/py3k-struni/setup.py	Thu Jun  7 01:52:48 2007
@@ -477,11 +477,6 @@
         else:
             missing.append('syslog')
 
-        # George Neville-Neil's timing module:
-        # Deprecated in PEP 4 http://www.python.org/peps/pep-0004.html
-        # http://mail.python.org/pipermail/python-dev/2006-January/060023.html
-        #exts.append( Extension('timing', ['timingmodule.c']) )
-
         #
         # Here ends the simple stuff.  From here on, modules need certain
         # libraries, are platform-specific, or present other surprises.
@@ -612,16 +607,7 @@
                                    include_dirs = ssl_incs,
                                    library_dirs = ssl_libs,
                                    libraries = ['ssl', 'crypto']) )
-            missing.extend(['_sha', '_md5'])
         else:
-            # The _sha module implements the SHA1 hash algorithm.
-            exts.append( Extension('_sha', ['shamodule.c']) )
-            # The _md5 module implements the RSA Data Security, Inc. MD5
-            # Message-Digest Algorithm, described in RFC 1321.  The
-            # necessary files md5.c and md5.h are included here.
-            exts.append( Extension('_md5',
-                            sources = ['md5module.c', 'md5.c'],
-                            depends = ['md5.h']) )
             missing.append('_hashlib')
 
         if (openssl_ver < 0x00908000):


More information about the Python-3000-checkins mailing list